diff options
Diffstat (limited to 'src/mame/drivers/hh_hmcs40.cpp')
-rw-r--r-- | src/mame/drivers/hh_hmcs40.cpp | 1382 |
1 files changed, 701 insertions, 681 deletions
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp index e473e124db4..b1a48703efa 100644 --- a/src/mame/drivers/hh_hmcs40.cpp +++ b/src/mame/drivers/hh_hmcs40.cpp @@ -25,7 +25,7 @@ *41 HD38800A 1982, Gakken Puck Monster *51 HD38800A 1981, Actronics(Hanzawa) Twinvader (larger white version) @70 HD38800A 1982, Coleco Galaxian - @73 HD38800A 1982, Bandai(Mattel) Star Hawk (PT-317B) + @73 HD38800A 1982, Mattel Star Hawk (PT-317B) @77 HD38800A 1982, Bandai Frisky Tom (PT-327A) @88 HD38800A 1984, Tomy Tron (THN-02) @@ -70,7 +70,6 @@ TODO: - - cdkong discrete sound (simple volume decay, simulated for now) - cgalaxn discrete sound (alien attacking sound effect) - gckong random lockups (tap the jump button repeatedly): mcu stack overflow, works ok if stack levels is increased, 38800 B rev. has more stack levels? @@ -98,10 +97,17 @@ #include "screen.h" #include "speaker.h" -// internal artwork +// internal artwork (complete) #include "pairmtch.lh" #include "sag.lh" +// internal artwork (bezel overlay) +#include "bambball.lh" +#include "gckong.lh" +#include "mwcbaseb.lh" +#include "msthawk.lh" +#include "packmon.lh" + //#include "hh_hmcs40_test.lh" // common test-layout - no svg artwork(yet), use external artwork @@ -334,10 +340,12 @@ INPUT_CHANGED_MEMBER(hh_hmcs40_state::single_interrupt_line) /*************************************************************************** - Minidrivers (subclass, I/O, Inputs, Machine Config) + Minidrivers (subclass, I/O, Inputs, Machine Config, ROM Defs) ***************************************************************************/ +namespace { + /*************************************************************************** Bambino Dribble Away Basketball (manufactured in Japan) @@ -350,8 +358,8 @@ INPUT_CHANGED_MEMBER(hh_hmcs40_state::single_interrupt_line) class bambball_state : public hh_hmcs40_state { public: - bambball_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bambball_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -438,15 +446,27 @@ void bambball_state::bambball(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 478); - screen.set_visarea(0, 1920-1, 0, 478-1); + screen.set_visarea_full(); TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_bambball); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bambball ) + ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38750a08", 0x0000, 0x0800, CRC(907fef18) SHA1(73fe7ca7c6332268a3a9abc5ac88ada2991012fb) ) + ROM_CONTINUE( 0x0f00, 0x0080 ) + + ROM_REGION( 281988, "svg", 0) + ROM_LOAD( "bambball.svg", 0, 281988, CRC(63019194) SHA1(cbfb5b051d8f57f6b4d698796030850b3631ed56) ) +ROM_END + @@ -463,8 +483,8 @@ void bambball_state::bambball(machine_config &config) class bmboxing_state : public hh_hmcs40_state { public: - bmboxing_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bmboxing_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -575,7 +595,8 @@ void bmboxing_state::bmboxing(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 529); - screen.set_visarea(0, 1920-1, 0, 529-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -583,6 +604,17 @@ void bmboxing_state::bmboxing(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bmboxing ) + ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38750a07", 0x0000, 0x0800, CRC(7f33e259) SHA1(c5fcdd6bf060c96666354f09f0570c754f6ed4e0) ) + ROM_CONTINUE( 0x0f00, 0x0080 ) + + ROM_REGION( 257144, "svg", 0) + ROM_LOAD( "bmboxing.svg", 0, 257144, CRC(dab81477) SHA1(28b0c844a311e2023ffa71d754e799059b7d050f) ) +ROM_END + @@ -599,8 +631,8 @@ void bmboxing_state::bmboxing(machine_config &config) class bfriskyt_state : public hh_hmcs40_state { public: - bfriskyt_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bfriskyt_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -608,7 +640,7 @@ public: DECLARE_WRITE16_MEMBER(grid_w); void update_int1(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); } void bfriskyt(machine_config &config); }; @@ -675,14 +707,9 @@ static INPUT_PORTS_START( bfriskyt ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, bfriskyt_state, input_changed, nullptr) PORT_START("IN.5") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(bfriskyt_state::input_changed) -{ - update_int1(); -} - void bfriskyt_state::bfriskyt(machine_config &config) { /* basic machine hardware */ @@ -698,7 +725,8 @@ void bfriskyt_state::bfriskyt(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 675); - screen.set_visarea(0, 1920-1, 0, 675-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -706,6 +734,17 @@ void bfriskyt_state::bfriskyt(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bfriskyt ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a77", 0x0000, 0x1000, CRC(a2445c4f) SHA1(0aaccfec90b66d27dae194d4462d88e654c41578) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 413577, "svg", 0) + ROM_LOAD( "bfriskyt.svg", 0, 413577, CRC(17090264) SHA1(4512a8a91a459f2ddc258641c6d38c2f48f4160f) ) +ROM_END + @@ -728,8 +767,8 @@ void bfriskyt_state::bfriskyt(machine_config &config) class packmon_state : public hh_hmcs40_state { public: - packmon_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + packmon_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -807,147 +846,27 @@ void packmon_state::packmon(machine_config &config) screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); screen.set_svg_region("svg"); screen.set_refresh_hz(50); - screen.set_size(1920, 766); - screen.set_visarea(0, 1920-1, 0, 766-1); + screen.set_size(1920, 680); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_packmon); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms +ROM_START( packmon ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a27", 0x0000, 0x1000, CRC(86e09e84) SHA1(ac7d3c43667d5720ca513f8ff51d146d9f2af124) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) - - -/*************************************************************************** - - Bandai/Mattel Star Hawk (manufactured in Japan) - * PCB label Kaken, PT-317B - * Hitachi HD38800A73 MCU - * cyan/red VFD display Futaba DM-41ZK, with partial color overlay + bezel - - Kaken was a subsidiary of Bandai. The original Japanese release is unknown, - was it canceled and only released in the USA? - - known releases: - - Japan: ? - - USA: Star Hawk, published by Mattel - -***************************************************************************/ - -class msthawk_state : public hh_hmcs40_state -{ -public: - msthawk_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) - { } - - void prepare_display(); - DECLARE_WRITE8_MEMBER(plate_w); - DECLARE_WRITE16_MEMBER(grid_w); - - void update_int0(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); - void msthawk(machine_config &config); -}; - -// handlers - -void msthawk_state::prepare_display() -{ - u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9); - u32 plate = bitswap<24>(m_plate,23,22,21,19,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0); - display_matrix(21, 10, plate, grid); -} - -WRITE8_MEMBER(msthawk_state::plate_w) -{ - // R0x-R3x: vfd plate - int shift = offset * 4; - m_plate = (m_plate & ~(0xf << shift)) | (data << shift); - prepare_display(); -} - -WRITE16_MEMBER(msthawk_state::grid_w) -{ - // D5: speaker out - m_speaker->level_w(data >> 5 & 1); - - // D10-D15: input mux - u8 inp_mux = data >> 10 & 0x3f; - if (inp_mux != m_inp_mux) - { - m_inp_mux = inp_mux; - update_int0(); - } - - // D6-D15: vfd grid - m_grid = data >> 6 & 0x3ff; - - // D0-D4: more plates - m_plate = (m_plate & 0x00ffff) | (data << 16 & 0x1f0000); - prepare_display(); -} - -void msthawk_state::update_int0() -{ - // INT0 on multiplexed inputs - set_interrupt(0, read_inputs(6)); -} - -// config - -static INPUT_PORTS_START( msthawk ) - PORT_START("IN.0") // D10 INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) PORT_NAME("Score") - - PORT_START("IN.1") // D11 INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) PORT_NAME("Land") - - PORT_START("IN.2") // D12 INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) - - PORT_START("IN.3") // D13 INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) - - PORT_START("IN.4") // D14 INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) - - PORT_START("IN.5") // D15 INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) - - PORT_START("IN.6") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) PORT_NAME("Fire") -INPUT_PORTS_END - -INPUT_CHANGED_MEMBER(msthawk_state::input_changed) -{ - update_int0(); -} - -void msthawk_state::msthawk(machine_config &config) -{ - /* basic machine hardware */ - HD38800(config, m_maincpu, 400000); // approximation - m_maincpu->write_r<0>().set(FUNC(msthawk_state::plate_w)); - m_maincpu->write_r<1>().set(FUNC(msthawk_state::plate_w)); - m_maincpu->write_r<2>().set(FUNC(msthawk_state::plate_w)); - m_maincpu->write_r<3>().set(FUNC(msthawk_state::plate_w)); - m_maincpu->write_d().set(FUNC(msthawk_state::grid_w)); - - /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); - screen.set_svg_region("svg"); - screen.set_refresh_hz(50); - screen.set_size(1920, 696); - screen.set_visarea(0, 1920-1, 0, 696-1); - TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); -} + ROM_REGION( 224386, "svg", 0) + ROM_LOAD( "packmon.svg", 0, 224386, CRC(b2ee5b6b) SHA1(e53b4d5a4118cc5fbec4656580c2aab76af8f8d7) ) +ROM_END @@ -966,15 +885,15 @@ void msthawk_state::msthawk(machine_config &config) class bzaxxon_state : public hh_hmcs40_state { public: - bzaxxon_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bzaxxon_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); DECLARE_WRITE16_MEMBER(grid_w); void update_int1(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); } void bzaxxon(machine_config &config); }; @@ -1034,18 +953,13 @@ static INPUT_PORTS_START( bzaxxon ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, bzaxxon_state, input_changed, nullptr) PORT_START("IN.4") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.5") // port D PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_BIT( 0xfff7, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(bzaxxon_state::input_changed) -{ - update_int1(); -} - void bzaxxon_state::bzaxxon(machine_config &config) { /* basic machine hardware */ @@ -1062,7 +976,8 @@ void bzaxxon_state::bzaxxon(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(613, 1080); - screen.set_visarea(0, 613-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1070,6 +985,17 @@ void bzaxxon_state::bzaxxon(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bzaxxon ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800b19", 0x0000, 0x1000, CRC(4fecb80d) SHA1(7adf079480ffd3825ad5ae1eaa4d892eecbcc42d) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 521080, "svg", 0) + ROM_LOAD( "bzaxxon.svg", 0, 521080, BAD_DUMP CRC(f4fbb2de) SHA1(83db400e67d91ae4bfee3e8568ae9df94ebede19) ) +ROM_END + @@ -1085,15 +1011,15 @@ void bzaxxon_state::bzaxxon(machine_config &config) class zackman_state : public hh_hmcs40_state { public: - zackman_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + zackman_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); DECLARE_WRITE16_MEMBER(grid_w); void update_int0(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); } void zackman(machine_config &config); }; @@ -1153,14 +1079,9 @@ static INPUT_PORTS_START( zackman ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, zackman_state, input_changed, nullptr) PORT_START("IN.4") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(zackman_state::input_changed) -{ - update_int0(); -} - void zackman_state::zackman(machine_config &config) { /* basic machine hardware */ @@ -1179,7 +1100,8 @@ void zackman_state::zackman(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(487, 1080); - screen.set_visarea(0, 487-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1187,6 +1109,17 @@ void zackman_state::zackman(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( zackman ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a49", 0x0000, 0x1000, CRC(b97f5ef6) SHA1(7fe20e8107361caf9ea657e504be1f8b10b8b03f) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 910689, "svg", 0) + ROM_LOAD( "zackman.svg", 0, 910689, CRC(5f322820) SHA1(4210aff160e5de9a409aba8b915aaebff2a92647) ) +ROM_END + @@ -1203,8 +1136,8 @@ void zackman_state::zackman(machine_config &config) class bpengo_state : public hh_hmcs40_state { public: - bpengo_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bpengo_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -1212,7 +1145,7 @@ public: DECLARE_WRITE16_MEMBER(grid_w); void update_int0(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); } void bpengo(machine_config &config); }; @@ -1273,7 +1206,7 @@ static INPUT_PORTS_START( bpengo ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, bpengo_state, input_changed, nullptr) PORT_START("IN.4") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) PORT_START("IN.5") // port D PORT_CONFNAME( 0x0800, 0x0000, "Factory Test" ) @@ -1282,11 +1215,6 @@ static INPUT_PORTS_START( bpengo ) PORT_BIT( 0xf7ff, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(bpengo_state::input_changed) -{ - update_int0(); -} - void bpengo_state::bpengo(machine_config &config) { /* basic machine hardware */ @@ -1306,7 +1234,8 @@ void bpengo_state::bpengo(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 759); - screen.set_visarea(0, 1920-1, 0, 759-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1314,6 +1243,17 @@ void bpengo_state::bpengo(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bpengo ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a63", 0x0000, 0x1000, CRC(ebd6bc64) SHA1(0a322c47b9553a2739a85908ce64b9650cf93d49) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 744461, "svg", 0) + ROM_LOAD( "bpengo.svg", 0, 744461, BAD_DUMP CRC(2b9abaa5) SHA1(c70a6ac1fa757fdd3ababfe6e00573ef1410c1eb) ) +ROM_END + @@ -1330,8 +1270,8 @@ void bpengo_state::bpengo(machine_config &config) class bbtime_state : public hh_hmcs40_state { public: - bbtime_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bbtime_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -1339,7 +1279,7 @@ public: DECLARE_WRITE16_MEMBER(grid_w); void update_int0(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); } void bbtime(machine_config &config); }; @@ -1403,14 +1343,9 @@ static INPUT_PORTS_START( bbtime ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, bbtime_state, input_changed, nullptr) PORT_START("IN.5") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(bbtime_state::input_changed) -{ - update_int0(); -} - void bbtime_state::bbtime(machine_config &config) { /* basic machine hardware */ @@ -1429,7 +1364,8 @@ void bbtime_state::bbtime(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(379, 1080); - screen.set_visarea(0, 379-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1437,6 +1373,17 @@ void bbtime_state::bbtime(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bbtime ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a65", 0x0000, 0x1000, CRC(33611faf) SHA1(29b6a30ed543688d31ec2aa18f7938fa4eef30b0) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 461605, "svg", 0) + ROM_LOAD( "bbtime.svg", 0, 461605, BAD_DUMP CRC(5b335271) SHA1(46c45b711358e8397ae707668aecead9e341ab8a) ) +ROM_END + @@ -1453,8 +1400,8 @@ void bbtime_state::bbtime(machine_config &config) class bdoramon_state : public hh_hmcs40_state { public: - bdoramon_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bdoramon_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -1492,10 +1439,10 @@ WRITE16_MEMBER(bdoramon_state::grid_w) static INPUT_PORTS_START( bdoramon ) PORT_START("IN.0") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.1") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) PORT_START("IN.2") // port D PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) @@ -1527,7 +1474,8 @@ void bdoramon_state::bdoramon(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 668); - screen.set_visarea(0, 1920-1, 0, 668-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1535,6 +1483,17 @@ void bdoramon_state::bdoramon(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bdoramon ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800b43", 0x0000, 0x1000, CRC(9387ca42) SHA1(8937e208934b34bd9f49700aa50287dfc8bda76c) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 624751, "svg", 0) + ROM_LOAD( "bdoramon.svg", 0, 624751, CRC(5dc4017c) SHA1(2091765de401969651b8eb22067572be72d12398) ) +ROM_END + @@ -1551,8 +1510,8 @@ void bdoramon_state::bdoramon(machine_config &config) class bultrman_state : public hh_hmcs40_state { public: - bultrman_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + bultrman_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -1591,7 +1550,7 @@ WRITE16_MEMBER(bultrman_state::grid_w) static INPUT_PORTS_START( bultrman ) PORT_START("IN.0") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.1") // port D PORT_CONFNAME( 0x0010, 0x0000, "Factory Test" ) @@ -1618,7 +1577,8 @@ void bultrman_state::bultrman(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 673); - screen.set_visarea(0, 1920-1, 0, 673-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1626,6 +1586,17 @@ void bultrman_state::bultrman(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( bultrman ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800b52", 0x0000, 0x1000, CRC(88d372dc) SHA1(f2ac3b89be8afe6fb65914ccebe1a56316b9472a) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 405717, "svg", 0) + ROM_LOAD( "bultrman.svg", 0, 405717, CRC(13367971) SHA1(f294898712d1e146ff267bb1e3cfd059f972b248) ) +ROM_END + @@ -1642,8 +1613,8 @@ void bultrman_state::bultrman(machine_config &config) class machiman_state : public hh_hmcs40_state { public: - machiman_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + machiman_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -1682,7 +1653,7 @@ WRITE16_MEMBER(machiman_state::grid_w) static INPUT_PORTS_START( machiman ) PORT_START("IN.0") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.1") // port D PORT_BIT( 0x3fff, IP_ACTIVE_HIGH, IPT_UNUSED ) @@ -1707,7 +1678,8 @@ void machiman_state::machiman(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1534, 1080); - screen.set_visarea(0, 1534-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1715,6 +1687,17 @@ void machiman_state::machiman(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( machiman ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a85", 0x0000, 0x1000, CRC(894b4954) SHA1(cab49638a326b031aa548301beb16f818759ef62) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 374097, "svg", 0) + ROM_LOAD( "machiman.svg", 0, 374097, CRC(78af02ac) SHA1(1b4bbea3e46e1bf33149727d9725bc9b18652b9c) ) +ROM_END + @@ -1736,8 +1719,8 @@ void machiman_state::machiman(machine_config &config) class pairmtch_state : public hh_hmcs40_state { public: - pairmtch_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag), + pairmtch_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag), m_audiocpu(*this, "audiocpu"), m_soundlatch(*this, "soundlatch%u", 0) { } @@ -1793,7 +1776,6 @@ WRITE8_MEMBER(pairmtch_state::sound_w) m_soundlatch[0]->write(space, 0, bitswap<8>(data,7,6,5,4,0,1,2,3)); } - // handlers: audiocpu side WRITE8_MEMBER(pairmtch_state::sound2_w) @@ -1873,6 +1855,18 @@ void pairmtch_state::pairmtch(machine_config &config) GENERIC_LATCH_8(config, m_soundlatch[1]); } +// roms + +ROM_START( pairmtch ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a88", 0x0000, 0x1000, CRC(ffa35730) SHA1(5a80b9025aaad2ac0ab0b1436a1355ae8cd3f868) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 0x2000, "audiocpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a89", 0x0000, 0x1000, CRC(3533ec56) SHA1(556d69e78a0ee1bf766fce16ed58992d7272d57f) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + @@ -1891,8 +1885,8 @@ void pairmtch_state::pairmtch(machine_config &config) class alnattck_state : public hh_hmcs40_state { public: - alnattck_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + alnattck_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -1978,7 +1972,8 @@ void alnattck_state::alnattck(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 700); - screen.set_visarea(0, 1920-1, 0, 700-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -1986,6 +1981,17 @@ void alnattck_state::alnattck(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( alnattck ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a25", 0x0000, 0x1000, CRC(18b50869) SHA1(11e9d5f7b4ae818b077b0ee14a3b43190e20bff3) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 564271, "svg", 0) + ROM_LOAD( "alnattck.svg", 0, 564271, CRC(5466d1d4) SHA1(3295272015969e58fddc53272769e1fc1bd4b355) ) +ROM_END + @@ -2003,15 +2009,15 @@ void alnattck_state::alnattck(machine_config &config) class cdkong_state : public hh_hmcs40_state { public: - cdkong_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + cdkong_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); DECLARE_WRITE8_MEMBER(plate_w); DECLARE_WRITE16_MEMBER(grid_w); - void speaker_decay_reset(); + void speaker_update(); TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim); double m_speaker_volume; void cdkong(machine_config &config); @@ -2020,21 +2026,31 @@ protected: virtual void machine_start() override; }; +void cdkong_state::machine_start() +{ + hh_hmcs40_state::machine_start(); + + // zerofill/init + m_speaker_volume = 0; + save_item(NAME(m_speaker_volume)); +} + // handlers -void cdkong_state::speaker_decay_reset() +void cdkong_state::speaker_update() { if (m_r[1] & 8) m_speaker_volume = 1.0; - m_speaker->set_output_gain(0, m_speaker_volume); + int level = (m_d & 8) ? 0x7fff : 0; + m_speaker->level_w(level * m_speaker_volume); } TIMER_DEVICE_CALLBACK_MEMBER(cdkong_state::speaker_decay_sim) { // volume decays when speaker is off (divisor and timer period determine duration) - speaker_decay_reset(); - m_speaker_volume /= 1.015; + speaker_update(); + m_speaker_volume /= 1.02; } void cdkong_state::prepare_display() @@ -2047,7 +2063,7 @@ WRITE8_MEMBER(cdkong_state::plate_w) { // R13: speaker on m_r[offset] = data; - speaker_decay_reset(); + speaker_update(); // R0x-R6x: vfd plate int shift = offset * 4; @@ -2058,7 +2074,8 @@ WRITE8_MEMBER(cdkong_state::plate_w) WRITE16_MEMBER(cdkong_state::grid_w) { // D3: speaker out - m_speaker->level_w(data >> 3 & 1); + m_d = data; + speaker_update(); // D4-D14: vfd grid m_grid = data >> 4 & 0x7ff; @@ -2069,7 +2086,7 @@ WRITE16_MEMBER(cdkong_state::grid_w) static INPUT_PORTS_START( cdkong ) PORT_START("IN.0") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.1") // port D PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) @@ -2079,14 +2096,7 @@ static INPUT_PORTS_START( cdkong ) PORT_BIT( 0x7ff8, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END -void cdkong_state::machine_start() -{ - hh_hmcs40_state::machine_start(); - - // zerofill/init - m_speaker_volume = 0; - save_item(NAME(m_speaker_volume)); -} +static s16 cdkong_speaker_levels[0x8000]; void cdkong_state::cdkong(machine_config &config) { @@ -2107,15 +2117,33 @@ void cdkong_state::cdkong(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(605, 1080); - screen.set_visarea(0, 605-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); + TIMER(config, "speaker_decay").configure_periodic(FUNC(cdkong_state::speaker_decay_sim), attotime::from_msec(1)); + + // set volume levels (set_output_gain is too slow for sub-frame intervals) + for (int i = 0; i < 0x8000; i++) + cdkong_speaker_levels[i] = i; + m_speaker->set_levels(0x8000, cdkong_speaker_levels); } +// roms + +ROM_START( cdkong ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a45", 0x0000, 0x1000, CRC(196b8070) SHA1(da85d1eb4b048b77f3168630662ab94ec9baa262) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 359199, "svg", 0) + ROM_LOAD( "cdkong.svg", 0, 359199, CRC(ba159fd5) SHA1(3188e2ed3234f39ac9ee93a485a7e73314bc3457) ) +ROM_END + @@ -2139,8 +2167,8 @@ void cdkong_state::cdkong(machine_config &config) class cgalaxn_state : public hh_hmcs40_state { public: - cgalaxn_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + cgalaxn_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -2161,6 +2189,13 @@ void cgalaxn_state::prepare_display() display_matrix(15, 12, plate, grid); } +INPUT_CHANGED_MEMBER(cgalaxn_state::player_switch) +{ + // 2-player switch directly enables plate 14 + m_plate = (m_plate & 0x3fff) | (newval ? 0 : 0x4000); + prepare_display(); +} + WRITE8_MEMBER(cgalaxn_state::grid_w) { // R10,R11: input mux @@ -2207,19 +2242,12 @@ static INPUT_PORTS_START( cgalaxn ) PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("IN.2") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.3") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(cgalaxn_state::player_switch) -{ - // 2-player switch directly enables plate 14 - m_plate = (m_plate & 0x3fff) | (newval ? 0 : 0x4000); - prepare_display(); -} - void cgalaxn_state::cgalaxn(machine_config &config) { /* basic machine hardware */ @@ -2235,7 +2263,8 @@ void cgalaxn_state::cgalaxn(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(526, 1080); - screen.set_visarea(0, 526-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -2243,6 +2272,17 @@ void cgalaxn_state::cgalaxn(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( cgalaxn ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a70", 0x0000, 0x1000, CRC(a4c5ed1d) SHA1(0f647cb78437d7e62411febf7c9ce3c5b6753a80) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 712204, "svg", 0) + ROM_LOAD( "cgalaxn.svg", 0, 712204, CRC(67ec57bf) SHA1(195c9867b321da9768ce287d1060ceae50345dd4) ) +ROM_END + @@ -2271,8 +2311,8 @@ void cgalaxn_state::cgalaxn(machine_config &config) class cpacman_state : public hh_hmcs40_state { public: - cpacman_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + cpacman_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -2356,7 +2396,8 @@ void cpacman_state::cpacman(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(484, 1080); - screen.set_visarea(0, 484-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -2364,6 +2405,26 @@ void cpacman_state::cpacman(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( cpacman ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a29", 0x0000, 0x1000, CRC(1082d577) SHA1(0ef73132bd41f6ca1e4c001ae19f7f7c97eaa8d1) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 359765, "svg", 0) + ROM_LOAD( "cpacman.svg", 0, 359765, CRC(e3810a46) SHA1(d0994edd71a6adc8f238c71e360a8606ce397a14) ) +ROM_END + +ROM_START( cpacmanr1 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a28", 0x0000, 0x1000, CRC(d2ed57e5) SHA1(f56f1341485ac28ea9e6cc4d162fab18d8a4c977) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 359765, "svg", 0) + ROM_LOAD( "cpacman.svg", 0, 359765, CRC(e3810a46) SHA1(d0994edd71a6adc8f238c71e360a8606ce397a14) ) +ROM_END + @@ -2387,8 +2448,8 @@ void cpacman_state::cpacman(machine_config &config) class cmspacmn_state : public hh_hmcs40_state { public: - cmspacmn_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + cmspacmn_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -2472,7 +2533,8 @@ void cmspacmn_state::cmspacmn(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(481, 1080); - screen.set_visarea(0, 481-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -2480,6 +2542,17 @@ void cmspacmn_state::cmspacmn(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( cmspacmn ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a61", 0x0000, 0x1000, CRC(76276318) SHA1(9d6ff3f49b4cdaee5c9e238c1ed638bfb9b99aa7) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 849327, "svg", 0) + ROM_LOAD( "cmspacmn.svg", 0, 849327, CRC(4110ad07) SHA1(76113a2ce0fb1c6dab4e26fd59a13dc89d950d75) ) +ROM_END + @@ -2500,8 +2573,8 @@ void cmspacmn_state::cmspacmn(machine_config &config) class sag_state : public hh_hmcs40_state { public: - sag_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + sag_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -2619,6 +2692,26 @@ void sag_state::sag(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( sag_si2 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "inv2_hd38800a31", 0x0000, 0x1000, BAD_DUMP CRC(29c8c100) SHA1(41cd413065659c6d7d5b2408de2ca6d51c49629a) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + +ROM_START( sag_bb4 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "b-b5_hd38800a37", 0x0000, 0x1000, CRC(64852bd5) SHA1(fb1c24ca43934ceb6fc35ac7c35b71e6e843dbc5) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + +ROM_START( sag_pb ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "pinb_hd38800a38", 0x0000, 0x1000, CRC(6e53a56b) SHA1(13f057eab2e4cfbb3ef1247a041abff15ae727c9) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + @@ -2635,8 +2728,8 @@ void sag_state::sag(machine_config &config) class egalaxn2_state : public hh_hmcs40_state { public: - egalaxn2_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + egalaxn2_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -2732,7 +2825,8 @@ void egalaxn2_state::egalaxn2(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(505, 1080); - screen.set_visarea(0, 505-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -2740,6 +2834,17 @@ void egalaxn2_state::egalaxn2(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( egalaxn2 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a13", 0x0000, 0x1000, CRC(112b721b) SHA1(4a185bc57ea03fe64f61f7db4da37b16eeb0cb54) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 507945, "svg", 0) + ROM_LOAD( "egalaxn2.svg", 0, 507945, CRC(b72a8721) SHA1(2d90fca6ce962710525b631e5bc8f75d79332b9d) ) +ROM_END + @@ -2758,8 +2863,8 @@ void egalaxn2_state::egalaxn2(machine_config &config) class epacman2_state : public egalaxn2_state { public: - epacman2_state(const machine_config &mconfig, device_type type, const char *tag) - : egalaxn2_state(mconfig, type, tag) + epacman2_state(const machine_config &mconfig, device_type type, const char *tag) : + egalaxn2_state(mconfig, type, tag) { } void epacman2(machine_config &config); @@ -2804,10 +2909,31 @@ void epacman2_state::epacman2(machine_config &config) egalaxn2(config); /* video hardware */ - subdevice<screen_device>("screen")->set_size(505, 1080); - subdevice<screen_device>("screen")->set_visarea(0, 505-1, 0, 1080-1); + screen_device *screen = subdevice<screen_device>("screen"); + screen->set_size(505, 1080); + screen->set_visarea_full(); } +// roms + +ROM_START( epacman2 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a23", 0x0000, 0x1000, CRC(6eab640f) SHA1(509bdd02be915089e13769f22a08e03509f03af4) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 262480, "svg", 0) + ROM_LOAD( "epacman2.svg", 0, 262480, CRC(73bd9671) SHA1(a3ac754c0e060da50b65f3d0f9630d9c3d871650) ) +ROM_END + +ROM_START( epacman2r ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a23", 0x0000, 0x1000, CRC(6eab640f) SHA1(509bdd02be915089e13769f22a08e03509f03af4) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 262483, "svg", 0) + ROM_LOAD( "epacman2r.svg", 0, 262483, CRC(279b629a) SHA1(4c499fb143aadf4f6722b994a22a0d0d3c5150b6) ) +ROM_END + @@ -2825,8 +2951,8 @@ void epacman2_state::epacman2(machine_config &config) class eturtles_state : public hh_hmcs40_state { public: - eturtles_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag), + eturtles_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag), m_audiocpu(*this, "audiocpu"), m_cop_irq(0) { } @@ -2844,13 +2970,21 @@ public: DECLARE_READ8_MEMBER(cop_ack_r); void update_int(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int(); } void eturtles(machine_config &config); protected: virtual void machine_start() override; }; +void eturtles_state::machine_start() +{ + hh_hmcs40_state::machine_start(); + + // register for savestates + save_item(NAME(m_cop_irq)); +} + // handlers: maincpu side void eturtles_state::prepare_display() @@ -2895,7 +3029,6 @@ void eturtles_state::update_int() set_interrupt(1, inp & 2); } - // handlers: COP side WRITE_LINE_MEMBER(eturtles_state::speaker_w) @@ -2955,19 +3088,6 @@ static INPUT_PORTS_START( eturtles ) PORT_CONFSETTING( 0x01, "2" ) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(eturtles_state::input_changed) -{ - update_int(); -} - -void eturtles_state::machine_start() -{ - hh_hmcs40_state::machine_start(); - - // register for savestates - save_item(NAME(m_cop_irq)); -} - void eturtles_state::eturtles(machine_config &config) { /* basic machine hardware */ @@ -2995,7 +3115,8 @@ void eturtles_state::eturtles(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(484, 1080); - screen.set_visarea(0, 484-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3003,6 +3124,20 @@ void eturtles_state::eturtles(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( eturtles ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a43", 0x0000, 0x1000, CRC(446aa4e2) SHA1(d1c0fb14ea7081def53b1174964b39eed1e5d5e6) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 0x0200, "audiocpu", 0 ) + ROM_LOAD( "cop411l-ked_n", 0x0000, 0x0200, CRC(503d26e9) SHA1(a53d24d62195bfbceff2e4a43199846e0950aef6) ) + + ROM_REGION( 1027626, "svg", 0) + ROM_LOAD( "eturtles.svg", 0, 1027626, CRC(b4f7abff) SHA1(e9b065a3a3fef3c71495002945724a86c2a68eb4) ) +ROM_END + @@ -3020,8 +3155,8 @@ void eturtles_state::eturtles(machine_config &config) class estargte_state : public eturtles_state { public: - estargte_state(const machine_config &mconfig, device_type type, const char *tag) - : eturtles_state(mconfig, type, tag) + estargte_state(const machine_config &mconfig, device_type type, const char *tag) : + eturtles_state(mconfig, type, tag) { } virtual void prepare_display() override; @@ -3103,7 +3238,8 @@ void estargte_state::estargte(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 854); - screen.set_visarea(0, 1920-1, 0, 854-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3111,6 +3247,20 @@ void estargte_state::estargte(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( estargte ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a42", 0x0000, 0x1000, CRC(5f6d55a6) SHA1(0da32149790fa5f16097338fc80536b462169e0c) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 0x0200, "audiocpu", 0 ) + ROM_LOAD( "cop411l-kec_n", 0x0000, 0x0200, CRC(fbd3c2d3) SHA1(65b8b24d38678c3fa970bfd639e9449a75a28927) ) + + ROM_REGION( 462214, "svg", 0) + ROM_LOAD( "estargte.svg", 0, 462214, CRC(282cc090) SHA1(b0f3c21e9a529e5f1e33b90ca25ce3a097fb75a0) ) +ROM_END + @@ -3130,8 +3280,8 @@ void estargte_state::estargte(machine_config &config) class ghalien_state : public hh_hmcs40_state { public: - ghalien_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + ghalien_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -3218,7 +3368,8 @@ void ghalien_state::ghalien(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 699); - screen.set_visarea(0, 1920-1, 0, 699-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3226,6 +3377,17 @@ void ghalien_state::ghalien(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( ghalien ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a04", 0x0000, 0x1000, CRC(019c3328) SHA1(9f1029c5c479f78350952c4f18747341ba5ea7a0) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 462749, "svg", 0) + ROM_LOAD( "ghalien.svg", 0, 462749, CRC(1acbb1e8) SHA1(7bdeb840bc9080792e24812eba923bf84f7865a6) ) +ROM_END + @@ -3246,15 +3408,15 @@ void ghalien_state::ghalien(machine_config &config) class gckong_state : public hh_hmcs40_state { public: - gckong_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + gckong_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); DECLARE_WRITE16_MEMBER(grid_w); void update_int1(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); } void gckong(machine_config &config); }; @@ -3314,7 +3476,7 @@ static INPUT_PORTS_START( gckong ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, gckong_state, input_changed, nullptr) PORT_START("IN.4") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) PORT_START("IN.5") // port D PORT_CONFNAME( 0x0010, 0x0000, DEF_STR( Difficulty ) ) @@ -3323,11 +3485,6 @@ static INPUT_PORTS_START( gckong ) PORT_BIT( 0xffef, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(gckong_state::input_changed) -{ - update_int1(); -} - void gckong_state::gckong(machine_config &config) { /* basic machine hardware */ @@ -3343,15 +3500,28 @@ void gckong_state::gckong(machine_config &config) screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); screen.set_svg_region("svg"); screen.set_refresh_hz(50); - screen.set_size(506, 1080); - screen.set_visarea(0, 506-1, 0, 1080-1); + screen.set_size(479, 1080); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_gckong); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( gckong ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800b01", 0x0000, 0x1000, CRC(d5a2cca3) SHA1(37bb5784383daab672ed1e0e2362c7a40d8d9b3f) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 346588, "svg", 0) + ROM_LOAD( "gckong.svg", 0, 346588, CRC(317af984) SHA1(ff6323526d1f5e46eccf8fa8d979175895be75de) ) +ROM_END + @@ -3368,15 +3538,15 @@ void gckong_state::gckong(machine_config &config) class gdigdug_state : public hh_hmcs40_state { public: - gdigdug_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + gdigdug_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); DECLARE_WRITE16_MEMBER(grid_w); void update_int1(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); } void gdigdug(machine_config &config); }; @@ -3438,14 +3608,9 @@ static INPUT_PORTS_START( gdigdug ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, gdigdug_state, input_changed, nullptr) PORT_START("IN.5") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(gdigdug_state::input_changed) -{ - update_int1(); -} - void gdigdug_state::gdigdug(machine_config &config) { /* basic machine hardware */ @@ -3464,7 +3629,8 @@ void gdigdug_state::gdigdug(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(476, 1080); - screen.set_visarea(0, 476-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3472,6 +3638,17 @@ void gdigdug_state::gdigdug(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( gdigdug ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a69", 0x0000, 0x1000, CRC(501165a9) SHA1(8a15d00c4aa66e870cadde33148426463560d2e6) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 807990, "svg", 0) + ROM_LOAD( "gdigdug.svg", 0, 807990, CRC(a5b8392d) SHA1(3503829bb1a626a9e70115fb60b656dff8908144) ) +ROM_END + @@ -3492,8 +3669,8 @@ void gdigdug_state::gdigdug(machine_config &config) class mwcbaseb_state : public hh_hmcs40_state { public: - mwcbaseb_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + mwcbaseb_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -3624,8 +3801,10 @@ void mwcbaseb_state::mwcbaseb(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 478); - screen.set_visarea(0, 1920-1, 0, 478-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_mwcbaseb); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -3633,6 +3812,156 @@ void mwcbaseb_state::mwcbaseb(machine_config &config) m_speaker->set_levels(8, mwcbaseb_speaker_levels); } +// roms + +ROM_START( mwcbaseb ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a09", 0x0000, 0x1000, CRC(25ba7dc0) SHA1(69e0a867fdcf07b454b1faf835e576ae782432c0) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 178441, "svg", 0) + ROM_LOAD( "mwcbaseb.svg", 0, 178441, CRC(0f631190) SHA1(74a10ad0630af5516f76d5bf5628483d21f6b7be) ) +ROM_END + + + + + +/*************************************************************************** + + Mattel Star Hawk (manufactured in Japan) + * PCB label Kaken, PT-317B + * Hitachi HD38800A73 MCU + * cyan/red VFD display Futaba DM-41ZK, with partial color overlay + bezel + + Before release, it was advertised as "Space Battle"(a Mattel Intellivision game). + Kaken was a subsidiary of Bandai. Star Hawk shell design is the same as Bandai's + games from the same era. It's likely that this was made under contract exclusively + for Mattel. There is no indication that this game was released in Japan by Bandai. + +***************************************************************************/ + +class msthawk_state : public hh_hmcs40_state +{ +public: + msthawk_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) + { } + + void prepare_display(); + DECLARE_WRITE8_MEMBER(plate_w); + DECLARE_WRITE16_MEMBER(grid_w); + + void update_int0(); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); } + void msthawk(machine_config &config); +}; + +// handlers + +void msthawk_state::prepare_display() +{ + u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9); + u32 plate = bitswap<24>(m_plate,23,22,21,19,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0); + display_matrix(21, 10, plate, grid); +} + +WRITE8_MEMBER(msthawk_state::plate_w) +{ + // R0x-R3x: vfd plate + int shift = offset * 4; + m_plate = (m_plate & ~(0xf << shift)) | (data << shift); + prepare_display(); +} + +WRITE16_MEMBER(msthawk_state::grid_w) +{ + // D5: speaker out + m_speaker->level_w(data >> 5 & 1); + + // D10-D15: input mux + u8 inp_mux = data >> 10 & 0x3f; + if (inp_mux != m_inp_mux) + { + m_inp_mux = inp_mux; + update_int0(); + } + + // D6-D15: vfd grid + m_grid = data >> 6 & 0x3ff; + + // D0-D4: more plates + m_plate = (m_plate & 0x00ffff) | (data << 16 & 0x1f0000); + prepare_display(); +} + +void msthawk_state::update_int0() +{ + // INT0 on multiplexed inputs + set_interrupt(0, read_inputs(6)); +} + +// config + +static INPUT_PORTS_START( msthawk ) + PORT_START("IN.0") // D10 INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) PORT_NAME("Score") + + PORT_START("IN.1") // D11 INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) PORT_NAME("Land") + + PORT_START("IN.2") // D12 INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) + + PORT_START("IN.3") // D13 INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) + + PORT_START("IN.4") // D14 INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) + + PORT_START("IN.5") // D15 INT0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, msthawk_state, input_changed, nullptr) + + PORT_START("IN.6") // INT1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) PORT_NAME("Fire") +INPUT_PORTS_END + +void msthawk_state::msthawk(machine_config &config) +{ + /* basic machine hardware */ + HD38800(config, m_maincpu, 400000); // approximation + m_maincpu->write_r<0>().set(FUNC(msthawk_state::plate_w)); + m_maincpu->write_r<1>().set(FUNC(msthawk_state::plate_w)); + m_maincpu->write_r<2>().set(FUNC(msthawk_state::plate_w)); + m_maincpu->write_r<3>().set(FUNC(msthawk_state::plate_w)); + m_maincpu->write_d().set(FUNC(msthawk_state::grid_w)); + + /* video hardware */ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_svg_region("svg"); + screen.set_refresh_hz(50); + screen.set_size(1920, 696); + screen.set_visarea_full(); + + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); + config.set_default_layout(layout_msthawk); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( msthawk ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a73", 0x0000, 0x1000, CRC(a4f9a523) SHA1(465f06b02e2e7d2277218fd447830725790a816c) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 191888, "svg", 0) + ROM_LOAD( "msthawk.svg", 0, 191888, CRC(a607fc0f) SHA1(282a412f6462128e09ee8bd18d682dda01297611) ) +ROM_END + @@ -3649,8 +3978,8 @@ void mwcbaseb_state::mwcbaseb(machine_config &config) class pbqbert_state : public hh_hmcs40_state { public: - pbqbert_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + pbqbert_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -3713,7 +4042,8 @@ void pbqbert_state::pbqbert(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(603, 1080); - screen.set_visarea(0, 603-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3721,6 +4051,17 @@ void pbqbert_state::pbqbert(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( pbqbert ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38820a70", 0x0000, 0x1000, CRC(be7c80b4) SHA1(0617a80ef7fe188ea221de32e760d45fd4318c67) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 456567, "svg", 0) + ROM_LOAD( "pbqbert.svg", 0, 456567, CRC(49853a62) SHA1(869377109fb7163e5ef5efadb26ce3955231f6ca) ) +ROM_END + @@ -3737,8 +4078,8 @@ void pbqbert_state::pbqbert(machine_config &config) class kingman_state : public hh_hmcs40_state { public: - kingman_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + kingman_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -3746,7 +4087,7 @@ public: DECLARE_WRITE16_MEMBER(grid_w); void update_int0(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int0(); } void kingman(machine_config &config); }; @@ -3810,14 +4151,9 @@ static INPUT_PORTS_START( kingman ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, kingman_state, input_changed, nullptr) PORT_START("IN.4") // INT1 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 1) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(kingman_state::input_changed) -{ - update_int0(); -} - void kingman_state::kingman(machine_config &config) { /* basic machine hardware */ @@ -3833,7 +4169,8 @@ void kingman_state::kingman(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(374, 1080); - screen.set_visarea(0, 374-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3841,6 +4178,17 @@ void kingman_state::kingman(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( kingman ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800b23", 0x0000, 0x1000, CRC(f8dfe14f) SHA1(660610d92ae7e5f92bddf5a3bcc2296b2ec3946b) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 396320, "svg", 0) + ROM_LOAD( "kingman.svg", 0, 396320, CRC(3f52d2a9) SHA1(9291f1a1da3d19c3d6dedb995de0a5feba75b442) ) +ROM_END + @@ -3857,8 +4205,8 @@ void kingman_state::kingman(machine_config &config) class tmtron_state : public hh_hmcs40_state { public: - tmtron_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + tmtron_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } void prepare_display(); @@ -3866,7 +4214,7 @@ public: DECLARE_WRITE16_MEMBER(grid_w); void update_int1(); - DECLARE_INPUT_CHANGED_MEMBER(input_changed); + DECLARE_INPUT_CHANGED_MEMBER(input_changed) { update_int1(); } void tmtron(machine_config &config); }; @@ -3930,14 +4278,9 @@ static INPUT_PORTS_START( tmtron ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_CHANGED_MEMBER(DEVICE_SELF, tmtron_state, input_changed, nullptr) PORT_START("IN.4") // INT0 - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, 0) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(tmtron_state::input_changed) -{ - update_int1(); -} - void tmtron_state::tmtron(machine_config &config) { /* basic machine hardware */ @@ -3953,7 +4296,8 @@ void tmtron_state::tmtron(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(1920, 662); - screen.set_visarea(0, 1920-1, 0, 662-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -3961,6 +4305,17 @@ void tmtron_state::tmtron(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } +// roms + +ROM_START( tmtron ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "hd38800a88", 0x0000, 0x1000, CRC(33db9670) SHA1(d6f747a59356526698784047bcfdbb59e79b9a23) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) + + ROM_REGION( 384174, "svg", 0) + ROM_LOAD( "tmtron.svg", 0, 384174, CRC(06bd9e63) SHA1(fb93013ec42dc05f7029ef3c3073c84867f0d077) ) +ROM_END + @@ -3981,8 +4336,8 @@ void tmtron_state::tmtron(machine_config &config) class vinvader_state : public hh_hmcs40_state { public: - vinvader_state(const machine_config &mconfig, device_type type, const char *tag) - : hh_hmcs40_state(mconfig, type, tag) + vinvader_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_hmcs40_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(plate_w); @@ -4047,7 +4402,8 @@ void vinvader_state::vinvader(machine_config &config) screen.set_svg_region("svg"); screen.set_refresh_hz(50); screen.set_size(233, 1080); - screen.set_visarea(0, 233-1, 0, 1080-1); + screen.set_visarea_full(); + TIMER(config, "display_decay").configure_periodic(FUNC(hh_hmcs40_state::display_decay_tick), attotime::from_msec(1)); /* sound hardware */ @@ -4055,351 +4411,7 @@ void vinvader_state::vinvader(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); } - - - - -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ - -ROM_START( bambball ) - ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38750a08", 0x0000, 0x0800, CRC(907fef18) SHA1(73fe7ca7c6332268a3a9abc5ac88ada2991012fb) ) - ROM_CONTINUE( 0x0f00, 0x0080 ) - - ROM_REGION( 281988, "svg", 0) - ROM_LOAD( "bambball.svg", 0, 281988, CRC(63019194) SHA1(cbfb5b051d8f57f6b4d698796030850b3631ed56) ) -ROM_END - - -ROM_START( bmboxing ) - ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38750a07", 0x0000, 0x0800, CRC(7f33e259) SHA1(c5fcdd6bf060c96666354f09f0570c754f6ed4e0) ) - ROM_CONTINUE( 0x0f00, 0x0080 ) - - ROM_REGION( 257144, "svg", 0) - ROM_LOAD( "bmboxing.svg", 0, 257144, CRC(dab81477) SHA1(28b0c844a311e2023ffa71d754e799059b7d050f) ) -ROM_END - - -ROM_START( bfriskyt ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a77", 0x0000, 0x1000, CRC(a2445c4f) SHA1(0aaccfec90b66d27dae194d4462d88e654c41578) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 413577, "svg", 0) - ROM_LOAD( "bfriskyt.svg", 0, 413577, CRC(17090264) SHA1(4512a8a91a459f2ddc258641c6d38c2f48f4160f) ) -ROM_END - - -ROM_START( packmon ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a27", 0x0000, 0x1000, CRC(86e09e84) SHA1(ac7d3c43667d5720ca513f8ff51d146d9f2af124) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 246356, "svg", 0) - ROM_LOAD( "packmon.svg", 0, 246356, CRC(991eea96) SHA1(bf42765aea838e9c26453642b01a962399b3e74c) ) -ROM_END - - -ROM_START( msthawk ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a73", 0x0000, 0x1000, CRC(a4f9a523) SHA1(465f06b02e2e7d2277218fd447830725790a816c) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 197907, "svg", 0) - ROM_LOAD( "msthawk.svg", 0, 197907, CRC(b54efcb9) SHA1(76db2ca156d556bf578995196eca1170b39988bb) ) -ROM_END - - -ROM_START( bzaxxon ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800b19", 0x0000, 0x1000, CRC(4fecb80d) SHA1(7adf079480ffd3825ad5ae1eaa4d892eecbcc42d) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 521080, "svg", 0) - ROM_LOAD( "bzaxxon.svg", 0, 521080, BAD_DUMP CRC(f4fbb2de) SHA1(83db400e67d91ae4bfee3e8568ae9df94ebede19) ) -ROM_END - - -ROM_START( zackman ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a49", 0x0000, 0x1000, CRC(b97f5ef6) SHA1(7fe20e8107361caf9ea657e504be1f8b10b8b03f) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 910689, "svg", 0) - ROM_LOAD( "zackman.svg", 0, 910689, CRC(5f322820) SHA1(4210aff160e5de9a409aba8b915aaebff2a92647) ) -ROM_END - - -ROM_START( bpengo ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a63", 0x0000, 0x1000, CRC(ebd6bc64) SHA1(0a322c47b9553a2739a85908ce64b9650cf93d49) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 744461, "svg", 0) - ROM_LOAD( "bpengo.svg", 0, 744461, BAD_DUMP CRC(2b9abaa5) SHA1(c70a6ac1fa757fdd3ababfe6e00573ef1410c1eb) ) -ROM_END - - -ROM_START( bbtime ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a65", 0x0000, 0x1000, CRC(33611faf) SHA1(29b6a30ed543688d31ec2aa18f7938fa4eef30b0) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 461605, "svg", 0) - ROM_LOAD( "bbtime.svg", 0, 461605, BAD_DUMP CRC(5b335271) SHA1(46c45b711358e8397ae707668aecead9e341ab8a) ) -ROM_END - - -ROM_START( bdoramon ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800b43", 0x0000, 0x1000, CRC(9387ca42) SHA1(8937e208934b34bd9f49700aa50287dfc8bda76c) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 624751, "svg", 0) - ROM_LOAD( "bdoramon.svg", 0, 624751, CRC(5dc4017c) SHA1(2091765de401969651b8eb22067572be72d12398) ) -ROM_END - - -ROM_START( bultrman ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800b52", 0x0000, 0x1000, CRC(88d372dc) SHA1(f2ac3b89be8afe6fb65914ccebe1a56316b9472a) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 405717, "svg", 0) - ROM_LOAD( "bultrman.svg", 0, 405717, CRC(13367971) SHA1(f294898712d1e146ff267bb1e3cfd059f972b248) ) -ROM_END - - -ROM_START( machiman ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a85", 0x0000, 0x1000, CRC(894b4954) SHA1(cab49638a326b031aa548301beb16f818759ef62) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 374097, "svg", 0) - ROM_LOAD( "machiman.svg", 0, 374097, CRC(78af02ac) SHA1(1b4bbea3e46e1bf33149727d9725bc9b18652b9c) ) -ROM_END - - -ROM_START( pairmtch ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a88", 0x0000, 0x1000, CRC(ffa35730) SHA1(5a80b9025aaad2ac0ab0b1436a1355ae8cd3f868) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 0x2000, "audiocpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a89", 0x0000, 0x1000, CRC(3533ec56) SHA1(556d69e78a0ee1bf766fce16ed58992d7272d57f) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) -ROM_END - - -ROM_START( alnattck ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a25", 0x0000, 0x1000, CRC(18b50869) SHA1(11e9d5f7b4ae818b077b0ee14a3b43190e20bff3) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 564271, "svg", 0) - ROM_LOAD( "alnattck.svg", 0, 564271, CRC(5466d1d4) SHA1(3295272015969e58fddc53272769e1fc1bd4b355) ) -ROM_END - - -ROM_START( cdkong ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a45", 0x0000, 0x1000, CRC(196b8070) SHA1(da85d1eb4b048b77f3168630662ab94ec9baa262) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 359199, "svg", 0) - ROM_LOAD( "cdkong.svg", 0, 359199, CRC(ba159fd5) SHA1(3188e2ed3234f39ac9ee93a485a7e73314bc3457) ) -ROM_END - - -ROM_START( cgalaxn ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a70", 0x0000, 0x1000, CRC(a4c5ed1d) SHA1(0f647cb78437d7e62411febf7c9ce3c5b6753a80) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 712204, "svg", 0) - ROM_LOAD( "cgalaxn.svg", 0, 712204, CRC(67ec57bf) SHA1(195c9867b321da9768ce287d1060ceae50345dd4) ) -ROM_END - - -ROM_START( cpacman ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a29", 0x0000, 0x1000, CRC(1082d577) SHA1(0ef73132bd41f6ca1e4c001ae19f7f7c97eaa8d1) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 359765, "svg", 0) - ROM_LOAD( "cpacman.svg", 0, 359765, CRC(e3810a46) SHA1(d0994edd71a6adc8f238c71e360a8606ce397a14) ) -ROM_END - -ROM_START( cpacmanr1 ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a28", 0x0000, 0x1000, CRC(d2ed57e5) SHA1(f56f1341485ac28ea9e6cc4d162fab18d8a4c977) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 359765, "svg", 0) - ROM_LOAD( "cpacman.svg", 0, 359765, CRC(e3810a46) SHA1(d0994edd71a6adc8f238c71e360a8606ce397a14) ) -ROM_END - - -ROM_START( cmspacmn ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a61", 0x0000, 0x1000, CRC(76276318) SHA1(9d6ff3f49b4cdaee5c9e238c1ed638bfb9b99aa7) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 849327, "svg", 0) - ROM_LOAD( "cmspacmn.svg", 0, 849327, CRC(4110ad07) SHA1(76113a2ce0fb1c6dab4e26fd59a13dc89d950d75) ) -ROM_END - - -ROM_START( sag_si2 ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "inv2_hd38800a31", 0x0000, 0x1000, BAD_DUMP CRC(29c8c100) SHA1(41cd413065659c6d7d5b2408de2ca6d51c49629a) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) -ROM_END - - -ROM_START( sag_bb4 ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "b-b5_hd38800a37", 0x0000, 0x1000, CRC(64852bd5) SHA1(fb1c24ca43934ceb6fc35ac7c35b71e6e843dbc5) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) -ROM_END - - -ROM_START( sag_pb ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "pinb_hd38800a38", 0x0000, 0x1000, CRC(6e53a56b) SHA1(13f057eab2e4cfbb3ef1247a041abff15ae727c9) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) -ROM_END - - -ROM_START( egalaxn2 ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a13", 0x0000, 0x1000, CRC(112b721b) SHA1(4a185bc57ea03fe64f61f7db4da37b16eeb0cb54) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 507945, "svg", 0) - ROM_LOAD( "egalaxn2.svg", 0, 507945, CRC(b72a8721) SHA1(2d90fca6ce962710525b631e5bc8f75d79332b9d) ) -ROM_END - - -ROM_START( epacman2 ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a23", 0x0000, 0x1000, CRC(6eab640f) SHA1(509bdd02be915089e13769f22a08e03509f03af4) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 262480, "svg", 0) - ROM_LOAD( "epacman2.svg", 0, 262480, CRC(73bd9671) SHA1(a3ac754c0e060da50b65f3d0f9630d9c3d871650) ) -ROM_END - -ROM_START( epacman2r ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a23", 0x0000, 0x1000, CRC(6eab640f) SHA1(509bdd02be915089e13769f22a08e03509f03af4) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 262483, "svg", 0) - ROM_LOAD( "epacman2r.svg", 0, 262483, CRC(279b629a) SHA1(4c499fb143aadf4f6722b994a22a0d0d3c5150b6) ) -ROM_END - - -ROM_START( estargte ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a42", 0x0000, 0x1000, CRC(5f6d55a6) SHA1(0da32149790fa5f16097338fc80536b462169e0c) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 0x0200, "audiocpu", 0 ) - ROM_LOAD( "cop411l-kec_n", 0x0000, 0x0200, CRC(fbd3c2d3) SHA1(65b8b24d38678c3fa970bfd639e9449a75a28927) ) - - ROM_REGION( 462214, "svg", 0) - ROM_LOAD( "estargte.svg", 0, 462214, CRC(282cc090) SHA1(b0f3c21e9a529e5f1e33b90ca25ce3a097fb75a0) ) -ROM_END - - -ROM_START( eturtles ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a43", 0x0000, 0x1000, CRC(446aa4e2) SHA1(d1c0fb14ea7081def53b1174964b39eed1e5d5e6) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 0x0200, "audiocpu", 0 ) - ROM_LOAD( "cop411l-ked_n", 0x0000, 0x0200, CRC(503d26e9) SHA1(a53d24d62195bfbceff2e4a43199846e0950aef6) ) - - ROM_REGION( 1027626, "svg", 0) - ROM_LOAD( "eturtles.svg", 0, 1027626, CRC(b4f7abff) SHA1(e9b065a3a3fef3c71495002945724a86c2a68eb4) ) -ROM_END - - -ROM_START( ghalien ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a04", 0x0000, 0x1000, CRC(019c3328) SHA1(9f1029c5c479f78350952c4f18747341ba5ea7a0) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 462749, "svg", 0) - ROM_LOAD( "ghalien.svg", 0, 462749, CRC(1acbb1e8) SHA1(7bdeb840bc9080792e24812eba923bf84f7865a6) ) -ROM_END - - -ROM_START( gckong ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800b01", 0x0000, 0x1000, CRC(d5a2cca3) SHA1(37bb5784383daab672ed1e0e2362c7a40d8d9b3f) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 356769, "svg", 0) - ROM_LOAD( "gckong.svg", 0, 356769, CRC(e2559b53) SHA1(519309c3a88b5d7f4c0ac5ae05dcdc1153377765) ) -ROM_END - - -ROM_START( gdigdug ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a69", 0x0000, 0x1000, CRC(501165a9) SHA1(8a15d00c4aa66e870cadde33148426463560d2e6) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 807990, "svg", 0) - ROM_LOAD( "gdigdug.svg", 0, 807990, CRC(a5b8392d) SHA1(3503829bb1a626a9e70115fb60b656dff8908144) ) -ROM_END - - -ROM_START( mwcbaseb ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a09", 0x0000, 0x1000, CRC(25ba7dc0) SHA1(69e0a867fdcf07b454b1faf835e576ae782432c0) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 178441, "svg", 0) - ROM_LOAD( "mwcbaseb.svg", 0, 178441, CRC(0f631190) SHA1(74a10ad0630af5516f76d5bf5628483d21f6b7be) ) -ROM_END - - -ROM_START( pbqbert ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38820a70", 0x0000, 0x1000, CRC(be7c80b4) SHA1(0617a80ef7fe188ea221de32e760d45fd4318c67) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 456567, "svg", 0) - ROM_LOAD( "pbqbert.svg", 0, 456567, CRC(49853a62) SHA1(869377109fb7163e5ef5efadb26ce3955231f6ca) ) -ROM_END - - -ROM_START( kingman ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800b23", 0x0000, 0x1000, CRC(f8dfe14f) SHA1(660610d92ae7e5f92bddf5a3bcc2296b2ec3946b) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 396320, "svg", 0) - ROM_LOAD( "kingman.svg", 0, 396320, CRC(3f52d2a9) SHA1(9291f1a1da3d19c3d6dedb995de0a5feba75b442) ) -ROM_END - - -ROM_START( tmtron ) - ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "hd38800a88", 0x0000, 0x1000, CRC(33db9670) SHA1(d6f747a59356526698784047bcfdbb59e79b9a23) ) - ROM_CONTINUE( 0x1e80, 0x0100 ) - - ROM_REGION( 384174, "svg", 0) - ROM_LOAD( "tmtron.svg", 0, 384174, CRC(06bd9e63) SHA1(fb93013ec42dc05f7029ef3c3073c84867f0d077) ) -ROM_END - +// roms ROM_START( vinvader ) ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 ) @@ -4412,13 +4424,20 @@ ROM_END +} // anonymous namespace + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + // YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS CONS( 1979, bambball, 0, 0, bambball, bambball, bambball_state, empty_init, "Bambino", "Dribble Away Basketball", MACHINE_SUPPORTS_SAVE ) CONS( 1979, bmboxing, 0, 0, bmboxing, bmboxing, bmboxing_state, empty_init, "Bambino", "Knock-Em Out Boxing", MACHINE_SUPPORTS_SAVE ) CONS( 1982, bfriskyt, 0, 0, bfriskyt, bfriskyt, bfriskyt_state, empty_init, "Bandai", "Frisky Tom (Bandai)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, packmon, 0, 0, packmon, packmon, packmon_state, empty_init, "Bandai", "Packri Monster", MACHINE_SUPPORTS_SAVE ) -CONS( 1982, msthawk, 0, 0, msthawk, msthawk, msthawk_state, empty_init, "Bandai (Mattel license)", "Star Hawk (Mattel)", MACHINE_SUPPORTS_SAVE ) CONS( 1982, bzaxxon, 0, 0, bzaxxon, bzaxxon, bzaxxon_state, empty_init, "Bandai", "Zaxxon (Bandai)", MACHINE_SUPPORTS_SAVE ) CONS( 1983, zackman, 0, 0, zackman, zackman, zackman_state, empty_init, "Bandai", "Zackman", MACHINE_SUPPORTS_SAVE ) CONS( 1983, bpengo, 0, 0, bpengo, bpengo, bpengo_state, empty_init, "Bandai", "Pengo (Bandai)", MACHINE_SUPPORTS_SAVE ) @@ -4429,7 +4448,7 @@ CONS( 1984, machiman, 0, 0, machiman, machiman, machiman_state, empty_in CONS( 1984, pairmtch, 0, 0, pairmtch, pairmtch, pairmtch_state, empty_init, "Bandai", "Pair Match", MACHINE_SUPPORTS_SAVE ) CONS( 1981, alnattck, 0, 0, alnattck, alnattck, alnattck_state, empty_init, "Coleco", "Alien Attack", MACHINE_SUPPORTS_SAVE ) -CONS( 1982, cdkong, 0, 0, cdkong, cdkong, cdkong_state, empty_init, "Coleco", "Donkey Kong (Coleco)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) +CONS( 1982, cdkong, 0, 0, cdkong, cdkong, cdkong_state, empty_init, "Coleco", "Donkey Kong (Coleco)", MACHINE_SUPPORTS_SAVE ) CONS( 1982, cgalaxn, 0, 0, cgalaxn, cgalaxn, cgalaxn_state, empty_init, "Coleco", "Galaxian (Coleco)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) CONS( 1981, cpacman, 0, 0, cpacman, cpacman, cpacman_state, empty_init, "Coleco", "Pac-Man (Coleco, Rev. 29)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, cpacman_state, empty_init, "Coleco", "Pac-Man (Coleco, Rev. 28)", MACHINE_SUPPORTS_SAVE ) @@ -4441,14 +4460,15 @@ CONS( 1981, sag_pb, 0, 0, sag, sag, sag_state, empty_in CONS( 1981, egalaxn2, 0, 0, egalaxn2, egalaxn2, egalaxn2_state, empty_init, "Entex", "Galaxian 2 (Entex)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, epacman2, 0, 0, epacman2, epacman2, epacman2_state, empty_init, "Entex", "Pac Man 2 (Entex, cyan Pacman)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, epacman2r, epacman2, 0, epacman2, epacman2, epacman2_state, empty_init, "Entex", "Pac Man 2 (Entex, red Pacman)", MACHINE_SUPPORTS_SAVE ) -CONS( 1982, estargte, 0, 0, estargte, estargte, estargte_state, empty_init, "Entex", "Stargate (Entex)", MACHINE_SUPPORTS_SAVE ) CONS( 1982, eturtles, 0, 0, eturtles, eturtles, eturtles_state, empty_init, "Entex", "Turtles (Entex)", MACHINE_SUPPORTS_SAVE ) +CONS( 1982, estargte, 0, 0, estargte, estargte, estargte_state, empty_init, "Entex", "Stargate (Entex)", MACHINE_SUPPORTS_SAVE ) CONS( 1980, ghalien, 0, 0, ghalien, ghalien, ghalien_state, empty_init, "Gakken", "Heiankyo Alien (Gakken)", MACHINE_SUPPORTS_SAVE ) CONS( 1982, gckong, 0, 0, gckong, gckong, gckong_state, empty_init, "Gakken", "Crazy Kong (Gakken)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) CONS( 1983, gdigdug, 0, 0, gdigdug, gdigdug, gdigdug_state, empty_init, "Gakken", "Dig Dug (Gakken)", MACHINE_SUPPORTS_SAVE ) CONS( 1980, mwcbaseb, 0, 0, mwcbaseb, mwcbaseb, mwcbaseb_state, empty_init, "Mattel", "World Championship Baseball", MACHINE_SUPPORTS_SAVE ) +CONS( 1982, msthawk, 0, 0, msthawk, msthawk, msthawk_state, empty_init, "Mattel", "Star Hawk (Mattel)", MACHINE_SUPPORTS_SAVE ) CONS( 1983, pbqbert, 0, 0, pbqbert, pbqbert, pbqbert_state, empty_init, "Parker Brothers", "Q*Bert (Parker Brothers)", MACHINE_SUPPORTS_SAVE ) |