@@ -27,7 +27,7 @@ Year + Game PCB CPU Sound
27
27
98 Manguan Caishen (V110C) NO-0266 68000 M6295 IGS031 IGS025 IGS026 Battery
28
28
99 Tarzan (V107) NO-0228? Z180 U6295 IGS031 IGS025 IGS029 Battery
29
29
99 Tarzan (V109C) NO-0248-1 Z180 U6295 IGS031 IGS025 Battery
30
- 00 Chaoji Da manguan 2 - Jiaqiang Ban (V100C) NO-0271 68000 K668 IGS031 IGS025 Battery
30
+ 00 Chaoji Da Manguan 2 - Jiaqiang Ban (V100C) NO-0271 68000 K668 IGS031 IGS025 Battery
31
31
00? Jungle King (V103A) NO-0230-1 Z180 U6295 IGS031 IGS025 (N9) Battery
32
32
00? Super Tarzan (V100I) NO-0230-1 Z180 K668 IGS031 IGS025 Battery
33
33
00? Happy Skill (V611IT) NO-0281 Z180 K668 IGS031 IGS025 Battery
@@ -38,10 +38,11 @@ Year + Game PCB CPU Sound
38
38
not present in another set *
39
39
To Do:
40
40
41
- - Protection emulation in some games, instead of patching the roms .
42
- - NVRAM.
41
+ - Protection emulation in some games, instead of patching the ROMs .
42
+ - Do iqblocka and clones, genius6 and clones, tjsb support NVRAM?
43
43
- mgcs: Finish IGS029 protection simulation.
44
44
- jking302us: IGS025 and IGS029 protection simulation.
45
+ - sdmg2: different protection that kicks in after several dozens of hands
45
46
46
47
Notes:
47
48
88
89
#include " cpu/m68000/m68000.h"
89
90
#include " cpu/z180/z180.h"
90
91
#include " machine/i8255.h"
92
+ #include " machine/nvram.h"
91
93
#include " machine/ticket.h"
92
94
#include " machine/timer.h"
93
95
#include " sound/okim6295.h"
@@ -898,6 +900,7 @@ class igs017_state : public driver_device
898
900
void cpoker2_io (address_map &map) ATTR_COLD;
899
901
void cpoker2_map (address_map &map) ATTR_COLD;
900
902
void cpoker2_mux_map (address_map &map) ATTR_COLD;
903
+ void happyskl_map (address_map &map) ATTR_COLD;
901
904
void happyskl_io (address_map &map) ATTR_COLD;
902
905
void happyskl_mux_map (address_map &map) ATTR_COLD;
903
906
void iqblocka_io (address_map &map) ATTR_COLD;
@@ -2144,7 +2147,7 @@ void igs017_state::igs_fixed_data_mux_map(address_map &map)
2144
2147
void igs017_state::iqblocka_map (address_map &map)
2145
2148
{
2146
2149
map (0x00000 , 0x0dfff ).rom ();
2147
- map (0x0e000 , 0x0efff ).ram ();
2150
+ map (0x0e000 , 0x0efff ).ram (). share ( " nvram " ) ;
2148
2151
map (0x0f000 , 0x0ffff ).ram ();
2149
2152
map (0x10000 , 0x3ffff ).rom ();
2150
2153
}
@@ -2283,6 +2286,13 @@ void igs017_state::starzan_mux_map(address_map &map)
2283
2286
2284
2287
// happyksl
2285
2288
2289
+ void igs017_state::happyskl_map (address_map &map)
2290
+ {
2291
+ map (0x00000 , 0x0dfff ).rom ();
2292
+ map (0x0e000 , 0x0ffff ).ram ().share (" nvram" );
2293
+ map (0x10000 , 0x3ffff ).rom ();
2294
+ }
2295
+
2286
2296
void igs017_state::happyskl_io (address_map &map)
2287
2297
{
2288
2298
map (0x0000 , 0x7fff ).rw (m_igs017_igs031, FUNC (igs017_igs031_device::read ), FUNC (igs017_igs031_device::write ));
@@ -2623,7 +2633,7 @@ u8 igs017_state::mgcs_keys_joy_r()
2623
2633
void igs017_state::mgcs_map (address_map &map)
2624
2634
{
2625
2635
map (0x000000 , 0x07ffff ).rom ();
2626
- map (0x300000 , 0x303fff ).ram ();
2636
+ map (0x300000 , 0x303fff ).ram (). share ( " nvram " ) ;
2627
2637
2628
2638
map (0x49c000 , 0x49c001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
2629
2639
map (0x49c002 , 0x49c003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -2647,7 +2657,7 @@ void igs017_state::mgcs_mux_map(address_map &map)
2647
2657
void igs017_state::mgcsa_map (address_map &map)
2648
2658
{
2649
2659
map (0x000000 , 0x07ffff ).rom ();
2650
- map (0x100000 , 0x103fff ).ram ();
2660
+ map (0x100000 , 0x103fff ).ram (). share ( " nvram " ) ;
2651
2661
2652
2662
map (0x49c000 , 0x49c001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
2653
2663
map (0x49c002 , 0x49c003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -2661,7 +2671,7 @@ void igs017_state::mgcsa_map(address_map &map)
2661
2671
void igs017_state::mgcsb_map (address_map &map)
2662
2672
{
2663
2673
map (0x000000 , 0x07ffff ).rom ();
2664
- map (0x300000 , 0x303fff ).ram ();
2674
+ map (0x300000 , 0x303fff ).ram (). share ( " nvram " ) ;
2665
2675
2666
2676
map (0x49c000 , 0x49c001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
2667
2677
map (0x49c002 , 0x49c003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -2693,7 +2703,7 @@ void igs017_state::sdmg2_map(address_map &map)
2693
2703
map (0x002007 , 0x002007 ).w (m_igs_incdec, FUNC (igs_incdec_device::inc_w));
2694
2704
map (0x00200b , 0x00200b ).r (m_igs_incdec, FUNC (igs_incdec_device::result_r));
2695
2705
2696
- map (0x1f0000 , 0x1fffff ).ram ();
2706
+ map (0x1f0000 , 0x1fffff ).ram (). share ( " nvram " ) ;
2697
2707
2698
2708
map (0x200000 , 0x20ffff ).rw (m_igs017_igs031, FUNC (igs017_igs031_device::read ), FUNC (igs017_igs031_device::write )).umask16 (0x00ff );
2699
2709
@@ -2735,7 +2745,7 @@ void igs017_state::sdmg2_mux_map(address_map &map)
2735
2745
void igs017_state::mgdh_map (address_map &map)
2736
2746
{
2737
2747
map (0x000000 , 0x07ffff ).rom ();
2738
- map (0x600000 , 0x603fff ).ram ();
2748
+ map (0x600000 , 0x603fff ).ram (). share ( " nvram " ) ;
2739
2749
2740
2750
map (0x876000 , 0x876001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
2741
2751
map (0x876002 , 0x876003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -2784,7 +2794,7 @@ void igs017_state::sdmg2p_map(address_map &map)
2784
2794
{
2785
2795
map (0x000000 , 0x07ffff ).rom ();
2786
2796
2787
- map (0x100000 , 0x103fff ).ram ();
2797
+ map (0x100000 , 0x103fff ).ram (). share ( " nvram " ) ;
2788
2798
2789
2799
map (0x38d000 , 0x38d001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
2790
2800
map (0x38d002 , 0x38d003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -2879,7 +2889,7 @@ void igs017_state::lhzb2_map(address_map &map)
2879
2889
2880
2890
map (0x100000 , 0x103fff ).ram ().share (" igs022:sharedprotram" ); // Shared with protection device
2881
2891
2882
- map (0x500000 , 0x503fff ).ram ();
2892
+ map (0x500000 , 0x503fff ).ram (). share ( " nvram " ) ;
2883
2893
2884
2894
map (0x910000 , 0x910001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
2885
2895
map (0x910002 , 0x910003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -3012,7 +3022,7 @@ void igs017_state::lhzb2a_map(address_map &map)
3012
3022
map (0x003207 , 0x003207 ).w (m_igs_incdec, FUNC (igs_incdec_device::inc_w));
3013
3023
map (0x00320b , 0x00320b ).r (m_igs_incdec, FUNC (igs_incdec_device::result_r));
3014
3024
3015
- map (0x500000 , 0x503fff ).ram ();
3025
+ map (0x500000 , 0x503fff ).ram (). share ( " nvram " ) ;
3016
3026
// map(0x910000, 0x910003) accesses appear to be from leftover code where the final checks were disabled
3017
3027
3018
3028
map (0xb00000 , 0xb0ffff ).rw (m_igs017_igs031, FUNC (igs017_igs031_device::read ), FUNC (igs017_igs031_device::write )).umask16 (0x00ff );
@@ -3038,7 +3048,7 @@ void igs017_state::lhzb2a_mux_map(address_map &map)
3038
3048
void igs017_state::slqz2_map (address_map &map)
3039
3049
{
3040
3050
map (0x000000 , 0x07ffff ).rom ();
3041
- map (0x100000 , 0x103fff ).ram ();
3051
+ map (0x100000 , 0x103fff ).ram (). share ( " nvram " ) ;
3042
3052
3043
3053
map (0x300000 , 0x303fff ).ram ().share (" igs022:sharedprotram" ); // Shared with protection device
3044
3054
@@ -3085,7 +3095,7 @@ void igs017_state::slqz2_mux_map(address_map &map)
3085
3095
void igs017_state::jking302us_map (address_map &map)
3086
3096
{
3087
3097
map (0x000000 , 0x07ffff ).rom ();
3088
- map (0x100000 , 0x103fff ).ram ();
3098
+ map (0x100000 , 0x103fff ).ram (). share ( " nvram " ); // TODO: verify once it works
3089
3099
3090
3100
map (0x638000 , 0x638001 ).nopr ().w (m_igs_mux, FUNC (igs_mux_device::address_w)).umask16 (0x00ff ); // clr.w dummy read
3091
3101
map (0x638002 , 0x638003 ).rw (m_igs_mux, FUNC (igs_mux_device::data_r), FUNC (igs_mux_device::data_w)).umask16 (0x00ff );
@@ -4399,6 +4409,8 @@ void igs017_state::iqblocka(machine_config &config)
4399
4409
m_maincpu->set_addrmap (AS_IO, &igs017_state::iqblocka_io);
4400
4410
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::iqblocka_interrupt), " screen" , 0 , 1 );
4401
4411
4412
+ // NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
4413
+
4402
4414
// i/o
4403
4415
m_igs_mux->set_addrmap (0 , &igs017_state::iqblocka_mux_map);
4404
4416
@@ -4456,6 +4468,8 @@ void igs017_state::tarzan(machine_config &config)
4456
4468
m_maincpu->set_addrmap (AS_OPCODES, &igs017_state::decrypted_opcodes_map);
4457
4469
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::iqblocka_interrupt), " screen" , 0 , 1 );
4458
4470
4471
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4472
+
4459
4473
// I/O
4460
4474
m_igs_mux->set_addrmap (0 , &igs017_state::tarzan_mux_map);
4461
4475
@@ -4489,6 +4503,8 @@ void igs017_state::starzan(machine_config &config)
4489
4503
m_maincpu->set_addrmap (AS_OPCODES, &igs017_state::decrypted_opcodes_map);
4490
4504
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::iqblocka_interrupt), " screen" , 0 , 1 );
4491
4505
4506
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4507
+
4492
4508
// i/o
4493
4509
m_igs_mux->set_addrmap (0 , &igs017_state::starzan_mux_map);
4494
4510
@@ -4518,11 +4534,13 @@ void igs017_state::happyskl(machine_config &config)
4518
4534
base_machine_oki (config, 16_MHz_XTAL / 16 );
4519
4535
4520
4536
HD64180RP (config, m_maincpu, 16_MHz_XTAL);
4521
- m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::iqblocka_map );
4537
+ m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::happyskl_map );
4522
4538
m_maincpu->set_addrmap (AS_IO, &igs017_state::happyskl_io);
4523
4539
m_maincpu->set_addrmap (AS_OPCODES, &igs017_state::decrypted_opcodes_map);
4524
4540
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::iqblocka_interrupt), " screen" , 0 , 1 );
4525
4541
4542
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4543
+
4526
4544
// i/o
4527
4545
m_igs_mux->set_addrmap (0 , &igs017_state::happyskl_mux_map);
4528
4546
@@ -4548,6 +4566,8 @@ void igs017_state::cpoker2(machine_config &config)
4548
4566
m_maincpu->set_addrmap (AS_IO, &igs017_state::cpoker2_io);
4549
4567
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::iqblocka_interrupt), " screen" , 0 , 1 );
4550
4568
4569
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4570
+
4551
4571
// i/o
4552
4572
m_igs_mux->set_addrmap (0 , &igs017_state::cpoker2_mux_map);
4553
4573
@@ -4609,6 +4629,8 @@ void igs017_state::spkrform(machine_config &config)
4609
4629
m_maincpu->set_addrmap (AS_IO, &igs017_state::spkrform_io);
4610
4630
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::iqblocka_interrupt), " screen" , 0 , 1 );
4611
4631
4632
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4633
+
4612
4634
// i/o
4613
4635
m_igs_mux->set_addrmap (0 , &igs017_state::spkrform_mux_map);
4614
4636
@@ -4649,6 +4671,8 @@ void igs017_state::mgcs(machine_config &config)
4649
4671
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::mgcs_map);
4650
4672
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgcs_interrupt), " screen" , 0 , 1 );
4651
4673
4674
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4675
+
4652
4676
// i/o
4653
4677
m_igs_mux->set_addrmap (0 , &igs017_state::mgcs_mux_map);
4654
4678
@@ -4692,6 +4716,8 @@ void igs017_state::lhzb2(machine_config &config)
4692
4716
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::lhzb2_map);
4693
4717
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgcs_interrupt), " screen" , 0 , 1 );
4694
4718
4719
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4720
+
4695
4721
// i/o
4696
4722
m_igs_mux->set_addrmap (0 , &igs017_state::lhzb2_mux_map);
4697
4723
@@ -4727,6 +4753,8 @@ void igs017_state::lhzb2a(machine_config &config)
4727
4753
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::lhzb2a_map);
4728
4754
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgcs_interrupt), " screen" , 0 , 1 );
4729
4755
4756
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4757
+
4730
4758
MCFG_MACHINE_RESET_OVERRIDE (igs017_state, lhzb2a)
4731
4759
4732
4760
// i/o
@@ -4764,6 +4792,8 @@ void igs017_state::slqz2(machine_config &config)
4764
4792
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::slqz2_map);
4765
4793
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgcs_interrupt), " screen" , 0 , 1 );
4766
4794
4795
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4796
+
4767
4797
// i/o
4768
4798
m_igs_mux->set_addrmap (0 , &igs017_state::slqz2_mux_map);
4769
4799
@@ -4793,6 +4823,8 @@ void igs017_state::sdmg2(machine_config &config)
4793
4823
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::sdmg2_map);
4794
4824
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgcs_interrupt), " screen" , 0 , 1 );
4795
4825
4826
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4827
+
4796
4828
// i/o
4797
4829
m_igs_mux->set_addrmap (0 , &igs017_state::sdmg2_mux_map);
4798
4830
@@ -4828,6 +4860,8 @@ void igs017_state::mgdha(machine_config &config)
4828
4860
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::mgdh_map);
4829
4861
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgdh_interrupt), " screen" , 0 , 1 );
4830
4862
4863
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4864
+
4831
4865
// i/o
4832
4866
m_igs_mux->set_addrmap (0 , &igs017_state::mgdha_mux_map);
4833
4867
@@ -4854,6 +4888,8 @@ void igs017_state::sdmg2p(machine_config &config)
4854
4888
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::sdmg2p_map);
4855
4889
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgcs_interrupt), " screen" , 0 , 1 );
4856
4890
4891
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4892
+
4857
4893
// i/o
4858
4894
m_igs_mux->set_addrmap (0 , &igs017_state::sdmg2p_mux_map);
4859
4895
@@ -4874,6 +4910,8 @@ void igs017_state::jking302us(machine_config &config)
4874
4910
m_maincpu->set_addrmap (AS_PROGRAM, &igs017_state::jking302us_map);
4875
4911
TIMER (config, " scantimer" ).configure_scanline (FUNC (igs017_state::mgdh_interrupt), " screen" , 0 , 1 );
4876
4912
4913
+ NVRAM (config, " nvram" , nvram_device::DEFAULT_ALL_0);
4914
+
4877
4915
// i/o
4878
4916
m_igs_mux->set_addrmap (0 , &igs017_state::jking302us_mux_map);
4879
4917
@@ -6187,7 +6225,7 @@ GAME ( 1996, iqblocka, iqblock, iqblocka, iqblocka, igs017_state, init
6187
6225
GAME ( 1997 , iqblockf, iqblock, iqblockf, iqblockf, igs017_state, init_iqblocka, ROT0, " IGS" , " IQ Block (V113FR, gambling)" , 0 )
6188
6226
GAME ( 1997 , mgdh, 0 , mgdh, mgdh, igs017_state, init_mgdh, ROT0, " IGS" , " Manguan Daheng (Taiwan, V125T1)" , MACHINE_IMPERFECT_COLORS | MACHINE_UNEMULATED_PROTECTION) // 滿貫大亨, wrong colors in betting screen, game id check (patched out)
6189
6227
GAME ( 1997 , mgdha, mgdh, mgdha, mgdh, igs017_state, init_mgdha, ROT0, " IGS" , " Manguan Daheng (Taiwan, V123T1)" , 0 ) // 滿貫大亨
6190
- GAME ( 1997 , sdmg2, 0 , sdmg2, sdmg2, igs017_state, init_sdmg2, ROT0, " IGS" , " Chaoji Da Manguan II (China, V765C)" , 0 ) // 超級大滿貫II
6228
+ GAME ( 1997 , sdmg2, 0 , sdmg2, sdmg2, igs017_state, init_sdmg2, ROT0, " IGS" , " Chaoji Da Manguan II (China, V765C)" , MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) // 超級大滿貫II
6191
6229
GAME ( 1997 , sdmg2754ca, sdmg2, sdmg2, sdmg2, igs017_state, init_sdmg2754ca, ROT0, " IGS" , " Chaoji Da Manguan II (China, V754C, set 1)" , 0 ) // 超級大滿貫II
6192
6230
GAME ( 1997 , sdmg2754cb, sdmg2, sdmg2, sdmg2, igs017_state, init_sdmg2754cb, ROT0, " IGS" , " Chaoji Da Manguan II (China, V754C, set 2)" , 0 ) // 超級大滿貫II
6193
6231
GAME ( 1997 , tjsb, 0 , tjsb, tjsb, igs017_state, init_tjsb, ROT0, " IGS" , " Tian Jiang Shen Bing (China, V137C)" , MACHINE_UNEMULATED_PROTECTION ) // 天將神兵, fails the bonus round protection check (if enabled via DSW), see e.g. demo mode
0 commit comments