diff --git a/src/mame/igs/igs_m027_link.cpp b/src/mame/igs/igs_m027_link.cpp index f99318d5755..4d52674988c 100644 --- a/src/mame/igs/igs_m027_link.cpp +++ b/src/mame/igs/igs_m027_link.cpp @@ -164,6 +164,7 @@ public: void cjsll(machine_config &config); void mgcsl(machine_config &config); + void init_cjsll(); void init_mgcsl(); protected: @@ -178,6 +179,8 @@ private: void cjsll_map(address_map &map); void mgcsl_map(address_map &map); + + void decrypt(); }; @@ -198,7 +201,7 @@ void extension_state::cjsll_map(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x600000, 0x603fff).ram(); - // TODO: IGS025? Almost same read writes also seem to happen at 0xd40000-0xd40003 + // TODO: IGS025? //map(0x876000, 0x876001).nopr().w(m_igs_mux, FUNC(igs_mux_device::address_w)).umask16(0x00ff); // clr.w dummy read //map(0x876002, 0x876003).rw(m_igs_mux, FUNC(igs_mux_device::data_r), FUNC(igs_mux_device::data_w)).umask16(0x00ff); @@ -212,7 +215,7 @@ void extension_state::mgcsl_map(address_map &map) map(0x000000, 0x07ffff).rom(); map(0x600000, 0x603fff).ram(); - // TODO: IGS025? Almost same read writes also seem to happen at 0x130000-0x130003 + // TODO: IGS025? //map(0x893000, 0x893001).nopr().w(m_igs_mux, FUNC(igs_mux_device::address_w)).umask16(0x00ff); // clr.w dummy read //map(0x893002, 0x893003).rw(m_igs_mux, FUNC(igs_mux_device::data_r), FUNC(igs_mux_device::data_w)).umask16(0x00ff); @@ -224,7 +227,7 @@ void extension_state::mgcsl_map(address_map &map) TIMER_DEVICE_CALLBACK_MEMBER(extension_state::interrupt) { - int scanline = param; + int const scanline = param; if (scanline == 240 && m_igs017_igs031->get_irq_enable()) m_maincpu->set_input_line(1, HOLD_LINE); @@ -404,8 +407,8 @@ ROM_START( cjsll ) ROM_END -// TODO: reduce this monstrosity -void extension_state::init_mgcsl() +// TODO: reduce this monstrosity. Still some imperfections? +void extension_state::decrypt() { const int rom_size = memregion("maincpu")->bytes(); u16 * const rom = (u16 *)memregion("maincpu")->base(); @@ -460,6 +463,23 @@ void extension_state::init_mgcsl() } // TODO: tiles don't seem scrambled, sprites to be verified +} + +void extension_state::init_cjsll() +{ + decrypt(); + + u16 * const rom = (u16 *)memregion("maincpu")->base(); + + // game id check + rom[0x3a994 / 2] = 0x4e71; +} + +void extension_state::init_mgcsl() +{ + decrypt(); + + u16 * const rom = (u16 *)memregion("maincpu")->base(); // game id check rom[0x3a48e / 2] = 0x4e71; @@ -474,4 +494,4 @@ GAME( 1999, cjslh, 0, host, host, host_state, empty_init, ROT0, "IGS", "Cai Jin // extensions GAME( 1999, mgcsl, 0, mgcsl, extension, extension_state, init_mgcsl, ROT0, "IGS", "Manguan Caishen (link version, extension, S110CN)", MACHINE_IS_SKELETON ) -GAME( 1999, cjsll, 0, cjsll, extension, extension_state, init_mgcsl, ROT0, "IGS", "Cai Jin Shen Long (link version, extension, S111CN)", MACHINE_IS_SKELETON ) +GAME( 1999, cjsll, 0, cjsll, extension, extension_state, init_cjsll, ROT0, "IGS", "Cai Jin Shen Long (link version, extension, S111CN)", MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 2f643f419f8..48c6d130b2f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -29236,6 +29236,7 @@ cowtippa // @source:misc/crazybal.cpp crazybal // EGS +crazybala // EGS @source:misc/cromptons.cpp ffruits // diff --git a/src/mame/misc/crazybal.cpp b/src/mame/misc/crazybal.cpp index 32929018a9d..dd5af32605d 100644 --- a/src/mame/misc/crazybal.cpp +++ b/src/mame/misc/crazybal.cpp @@ -9,11 +9,17 @@ http://www.tilt.it/deb/egs-en.html Entirely TTL. Believed to be the first arcade game to have high score initials entry. This was achieved via a keyboard on the control panel: http://www.citylan.it/wiki/images/c/c3/1698_control_panel_%2B_ingame.jpg +crazybal: main PCB is marked: "EGS 113 [S]" on component side sub PCB is marked: "EGS 114 [S]" on component side 27.025 OSC on main PCB -A PCB set is available for tracing. +crazybala: +main PCB is marked: "EGS 106" on component side +sub PCB is marked: "EGS 107" on component side + +PCB set 113 + 114 is available for tracing. +Schematics are available for PCB set 106 + 107. */ @@ -54,15 +60,12 @@ public: void crazybal(machine_config &config); protected: - - // driver_device overrides virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; private: - // devices required_device m_maincpu; required_device m_video; }; @@ -95,10 +98,10 @@ void crazybal_state::video_start() void crazybal_state::crazybal(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware NETLIST_CPU(config, m_maincpu, netlist::config::DEFAULT_CLOCK()).set_source(netlist_crazybal); - /* video hardware */ + // video hardware SCREEN(config, "screen", SCREEN_TYPE_RASTER); FIXFREQ(config, m_video).set_screen("screen"); m_video->set_monitor_clock(MASTER_CLOCK); @@ -109,7 +112,7 @@ void crazybal_state::crazybal(machine_config &config) } -ROM_START( crazybal ) +ROM_START( crazybal ) // EGS 113 + EGS 114 PCBs ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) ROM_REGION( 0x0600, "mainpcb_proms", ROMREGION_ERASE00 ) // all Sn74S287N @@ -124,7 +127,19 @@ ROM_START( crazybal ) ROM_LOAD( "3.12l", 0x000, 0x100, CRC(e2ca8670) SHA1(60bc4be4185c50a9afd3a28d1fb9e8f46c93764a) ) // Sn74S287N ROM_END +ROM_START( crazybala ) // EGS 106 + EGS 107 PCBs (found in a cabinet distributed by Bontempi) + ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) + + ROM_REGION( 0x0340, "mainpcb_proms", ROMREGION_ERASE00 ) + ROM_LOAD( "74s287.12c", 0x000, 0x100, CRC(1f05c2df) SHA1(189e90ca29ef043ed1d4640aed3fa472a4e26da8) ) + ROM_LOAD( "74s287.12d", 0x100, 0x100, CRC(f1d7a030) SHA1(697cf26dbfbd6207cb1dd2e098d6dba9b0bdbaf3) ) + ROM_LOAD( "74s287.13e", 0x200, 0x100, CRC(57280959) SHA1(8162d9868e8367ba4c21712dc275ce4888cfbc70) ) + ROM_LOAD( "6331.4g", 0x300, 0x020, CRC(21ee11cc) SHA1(4cdf16665015ee984a300e59c73eb2aa12c13e4e) ) + ROM_LOAD( "74s188.6h", 0x320, 0x020, CRC(7b4b2f9f) SHA1(96b4a90e3c51582434e0eca1c3701cc2183dd372) ) +ROM_END + } // anonymous namespace -GAME( 1978, crazybal, 0, crazybal, 0, crazybal_state, empty_init, ROT0, "Electronic Games Systems", "Crazy Balls", MACHINE_IS_SKELETON ) +GAME( 1978, crazybal, 0, crazybal, 0, crazybal_state, empty_init, ROT0, "Electronic Games Systems / NAT", "Crazy Balls (NAT)", MACHINE_IS_SKELETON ) +GAME( 1978, crazybala, crazybal, crazybal, 0, crazybal_state, empty_init, ROT0, "Electronic Games Systems / Bontempi", "Crazy Balls (Bontempi)", MACHINE_IS_SKELETON )