diff options
-rw-r--r-- | hash/vgmplay.xml | 2 | ||||
-rw-r--r-- | src/mame/drivers/astrohome.cpp | 17 | ||||
-rw-r--r-- | src/mame/drivers/fromance.cpp | 21 | ||||
-rw-r--r-- | src/mame/drivers/galaxian.cpp | 232 | ||||
-rw-r--r-- | src/mame/drivers/galaxold.cpp | 245 | ||||
-rw-r--r-- | src/mame/drivers/hyprduel.cpp | 18 | ||||
-rw-r--r-- | src/mame/drivers/pipedrm.cpp | 176 | ||||
-rw-r--r-- | src/mame/drivers/playmark.cpp | 25 | ||||
-rw-r--r-- | src/mame/drivers/powerbal.cpp | 22 | ||||
-rw-r--r-- | src/mame/drivers/vgmplay.cpp | 2 | ||||
-rw-r--r-- | src/mame/includes/astrocde.h | 1 | ||||
-rw-r--r-- | src/mame/includes/fromance.h | 30 | ||||
-rw-r--r-- | src/mame/includes/galaxian.h | 6 | ||||
-rw-r--r-- | src/mame/includes/galaxold.h | 8 | ||||
-rw-r--r-- | src/mame/includes/playmark.h | 5 | ||||
-rw-r--r-- | src/mame/mame.lst | 4 | ||||
-rw-r--r-- | src/mame/video/fromance.cpp | 30 | ||||
-rw-r--r-- | src/mame/video/galaxold.cpp | 16 |
18 files changed, 406 insertions, 454 deletions
diff --git a/hash/vgmplay.xml b/hash/vgmplay.xml index bb2f90870b5..a27b5f54633 100644 --- a/hash/vgmplay.xml +++ b/hash/vgmplay.xml @@ -242837,7 +242837,7 @@ license:CC0 </part> </software> - <software name="vgm0002"> + <software name="doordoor_fc"> <description>Door Door (Family Computer)</description> <year>1985</year> <publisher>Enix</publisher> diff --git a/src/mame/drivers/astrohome.cpp b/src/mame/drivers/astrohome.cpp index b9d05c6f639..1f8a83e4c96 100644 --- a/src/mame/drivers/astrohome.cpp +++ b/src/mame/drivers/astrohome.cpp @@ -24,6 +24,8 @@ #include "speaker.h" +namespace { + class astrocde_home_state : public astrocde_state { public: @@ -38,9 +40,13 @@ public: void astrocde(machine_config &config); + void init_astrocde(); + +protected: + virtual void machine_start() override; + private: uint8_t inputs_r(offs_t offset); - DECLARE_MACHINE_START(astrocde); void astrocade_io(address_map &map); void astrocade_mem(address_map &map); @@ -187,8 +193,6 @@ void astrocde_home_state::astrocde(machine_config &config) config.set_perfect_quantum(m_maincpu); - MCFG_MACHINE_START_OVERRIDE(astrocde_home_state, astrocde) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(ASTROCADE_CLOCK, 455, 0, 352, 262, 0, 240); @@ -256,12 +260,12 @@ ROM_END * *************************************/ -void astrocde_state::init_astrocde() +void astrocde_home_state::init_astrocde() { m_video_config = AC_SOUND_PRESENT; } -MACHINE_START_MEMBER(astrocde_home_state, astrocde) +void astrocde_home_state::machine_start() { if (m_cart->exists()) m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x3fff, read8sm_delegate(*m_cart, FUNC(astrocade_cart_slot_device::read_rom))); @@ -275,6 +279,9 @@ MACHINE_START_MEMBER(astrocde_home_state, astrocde) } } +} // Anonymous namespace + + /************************************* * * Driver definitions diff --git a/src/mame/drivers/fromance.cpp b/src/mame/drivers/fromance.cpp index 08ec8b8e00d..3e266d3ee60 100644 --- a/src/mame/drivers/fromance.cpp +++ b/src/mame/drivers/fromance.cpp @@ -126,7 +126,7 @@ uint8_t fromance_state::fromance_busycheck_sub_r() void fromance_state::fromance_rombank_w(uint8_t data) { - membank("bank1")->set_entry(data); + m_rombank->set_entry(data); } @@ -261,7 +261,7 @@ void fromance_state::fromance_main_map(address_map &map) void fromance_state::nekkyoku_sub_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0xbfff).bankr("bank1"); + map(0x8000, 0xbfff).bankr(m_rombank); map(0xc000, 0xefff).rw(FUNC(fromance_state::fromance_videoram_r), FUNC(fromance_state::fromance_videoram_w)); map(0xf000, 0xf7ff).ram(); map(0xf800, 0xffff).rw(FUNC(fromance_state::fromance_paletteram_r), FUNC(fromance_state::fromance_paletteram_w)); @@ -270,7 +270,7 @@ void fromance_state::nekkyoku_sub_map(address_map &map) void fromance_state::fromance_sub_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0xbfff).bankr("bank1"); + map(0x8000, 0xbfff).bankr(m_rombank); map(0xc000, 0xc7ff).ram(); map(0xc800, 0xcfff).rw(FUNC(fromance_state::fromance_paletteram_r), FUNC(fromance_state::fromance_paletteram_w)); map(0xd000, 0xffff).rw(FUNC(fromance_state::fromance_videoram_r), FUNC(fromance_state::fromance_videoram_w)); @@ -864,11 +864,11 @@ GFXDECODE_END * *************************************/ -MACHINE_START_MEMBER(fromance_state,fromance) +void fromance_state::machine_start() { uint8_t *ROM = memregion("sub")->base(); - membank("bank1")->configure_entries(0, 0x100, &ROM[0x10000], 0x4000); + m_rombank->configure_entries(0, 0x100, &ROM[0x10000], 0x4000); save_item(NAME(m_portselect)); @@ -879,7 +879,7 @@ MACHINE_START_MEMBER(fromance_state,fromance) /* video-related elements are saved in video_start */ } -MACHINE_RESET_MEMBER(fromance_state,fromance) +void fromance_state::machine_reset() { m_portselect = 0; @@ -914,9 +914,6 @@ void fromance_state::nekkyoku(machine_config &config) GENERIC_LATCH_8(config, m_sublatch); m_sublatch->set_separate_acknowledge(true); - MCFG_MACHINE_START_OVERRIDE(fromance_state,fromance) - MCFG_MACHINE_RESET_OVERRIDE(fromance_state,fromance) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); @@ -958,9 +955,6 @@ void fromance_state::idolmj(machine_config &config) GENERIC_LATCH_8(config, m_sublatch); m_sublatch->set_separate_acknowledge(true); - MCFG_MACHINE_START_OVERRIDE(fromance_state,fromance) - MCFG_MACHINE_RESET_OVERRIDE(fromance_state,fromance) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); @@ -1003,9 +997,6 @@ void fromance_state::fromance(machine_config &config) GENERIC_LATCH_8(config, m_sublatch); m_sublatch->set_separate_acknowledge(true); - MCFG_MACHINE_START_OVERRIDE(fromance_state,fromance) - MCFG_MACHINE_RESET_OVERRIDE(fromance_state,fromance) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index 37030008498..bdd0ba5d3ad 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -630,6 +630,39 @@ p) 'mooncrgx' as a consequence, square around letters is wrong when entering player name for hi-score table when screen not is flipped +q) 'bongo' + + - IN0 bit 1 is supposed to be COIN2 (see coinage routine at 0x0288), but + there is a test on it at 0x0082 (in NMI routine) which jumps to 0xc003 + (unmapped memory) if it pressed (HIGH). + - IN0 bit 7 is tested on startup (code at 0x0048) in combination with bits 0 and 1 + (which are supposed to be COIN1 and COIN2). If all of them are pressed (HIGH), + the game displays a "CREDIT FAULT" message then jumps back to 0x0048. + - IN0 bit 4 and IN1 bit 4 should have been IPT_JOYSTICK_DOWN (Upright and Cocktail) + but their status is discarded with 3 'NOP' instructions at 0x06ca. + - IN0 bit 7 and IN0 bit 6 should have been IPT_BUTTON1 (Upright and Cocktail) + but their status is discarded with 3 'NOP' instructions at 0x06d1. + - IN2 is read via code at 0x2426, but its contents is directly overwritten + with value read from DSW (AY port A) via code at 0x3647. + +r) 'ozon1' + + - Player 2 controls are used for player 2 regardless of the "Cabinet" Dip Switch + (check code at 0x03c6 which changes player and routines that handle players inputs : + 0x0dc3 and 0x1e31 LEFT and RIGHT - 0x0e76 BUTTON1). + - Credits are coded on 1 byte (range 0x00-0xff) and stored at 0x4002. + To display them, they are converted to BCD on 1 byte via routine at 0x1421. + As a result, it will always display 0 to 99 (eg: 0xf0 = 240 will display 40). + When you get 256 credits, 0x4002 = 0x00, so the game thinks you have no credit + at all and enters "attract mode" again (but the game does NOT reset). + - There's an ingame bug when you get 101 or 201 credits : due to code at 0x0239, + the game checks the BCD value (0x01) instead of the correct one at 0x4002, + so you can't start a 2 players game ! + - There is another ingame bug when "Coinage" settings are "A 1C/2C B 1C/1C" + and you press COIN2 : due to code at 0x0473, contents of 0x4004 is NEVER reset + to 0x00, so routine at 0x042a ALWAYS thinks that you've pressed COIN2, + and as a consequence, it ALWAYS adds 1 credit (even when you are playing) ! + TODO: @@ -1631,17 +1664,12 @@ void galaxian_state::mooncrst_map_base(address_map &map) map(0x9000, 0x93ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); map(0x9800, 0x98ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); map(0xa000, 0xa000).mirror(0x07ff).portr("IN0"); - map(0xa000, 0xa002).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); - map(0xa003, 0xa003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w)); -// map(0xa004, 0xa007).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::lfo_freq_w)); map(0xa800, 0xa800).mirror(0x07ff).portr("IN1"); -// map(0xa800, 0xa807).mirror(0x07f8).w("cust", FUNC(galaxian_sound_device::sound_w)); map(0xb000, 0xb000).mirror(0x07ff).portr("IN2"); map(0xb000, 0xb000).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w)); map(0xb004, 0xb004).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w)); map(0xb006, 0xb006).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); map(0xb007, 0xb007).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); -// map(0xb800, 0xb800).mirror(0x07ff).w("cust", FUNC(galaxian_sound_device::pitch_w)); map(0xb800, 0xb800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } @@ -1654,12 +1682,15 @@ void galaxian_state::mooncrst_map(address_map &map) { mooncrst_map_base(map); mooncrst_map_discrete(map); + map(0xa000, 0xa002).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); + map(0xa003, 0xa003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w)); } void galaxian_state::froggermc_map(address_map &map) { mooncrst_map_base(map); // no discrete sound map(0x8400, 0x87ff).ram(); // actually needs 2k of RAM + map(0xa003, 0xa003).mirror(0x7f8).w(FUNC(galaxian_state::coin_count_0_w)); map(0xa800, 0xa800).mirror(0x7ff).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0xb001, 0xb001).mirror(0x7f8).w(FUNC(galaxian_state::froggermc_sound_control_w)); } @@ -1698,6 +1729,22 @@ void galaxian_state::scorpnmc_map(address_map &map) map(0xb001, 0xb001).mirror(0x7f8).w(FUNC(galaxian_state::irq_enable_w)); } +void galaxian_state::bongo_map(address_map &map) +{ + mooncrst_map_base(map); // no discrete sound + map(0x0000, 0x5fff).rom().region("maincpu", 0); // extend ROM + map(0xb000, 0xb000).mirror(0x7f8).nopw(); // interrupt enable moved + map(0xb001, 0xb001).mirror(0x7f8).w(FUNC(galaxian_state::irq_enable_w)); + map(0xb800, 0xb800).mirror(0x7ff).nopw(); // written once at start +} + +void galaxian_state::bongo_io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).w(m_ay8910[0], FUNC(ay8910_device::address_data_w)); + map(0x02, 0x02).r(m_ay8910[0], FUNC(ay8910_device::data_r)); +} + void galaxian_state::fantastc_map(address_map &map) { @@ -1745,6 +1792,26 @@ void galaxian_state::zigzag_map(address_map &map) map(0x7800, 0x7800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r)); } +// not derived from schematics +void galaxian_state::ozon1_map(address_map &map) +{ + map(0x0000, 0x2fff).rom(); + map(0x4000, 0x43ff).ram(); + map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); + map(0x5000, 0x50ff).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + map(0x6801, 0x6801).w(FUNC(galaxian_state::irq_enable_w)); + map(0x6802, 0x6802).w(FUNC(galaxian_state::coin_count_0_w)); + map(0x6806, 0x6806).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); + map(0x6807, 0x6807).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0x8100, 0x8103).rw(m_ppi8255[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); +} + +void galaxian_state::ozon1_io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).w(m_ay8910[0], FUNC(ay8910_device::data_address_w)); +} + /* map derived from schematics */ void galaxian_state::theend_map(address_map &map) @@ -4058,6 +4125,52 @@ static INPUT_PORTS_START( kong ) INPUT_PORTS_END +/* verified from Z80 code */ +static INPUT_PORTS_START( bongo ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* see notes */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN2") + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ + + PORT_START("DSW") + PORT_DIPUNUSED( 0x01, IP_ACTIVE_HIGH ) + PORT_DIPNAME( 0x06, 0x02, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x02, "3" ) + PORT_DIPSETTING( 0x04, "4" ) + PORT_DIPSETTING( 0x06, "5" ) + PORT_DIPNAME( 0x08, 0x00, "Infinite Lives (Cheat)" ) /* always gives 3 lives */ + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPUNUSED( 0x10, IP_ACTIVE_HIGH ) + PORT_DIPUNUSED( 0x20, IP_ACTIVE_HIGH ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) /* also 1C_3C for Coin B if it existed */ + PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) /* also 1C_6C for Coin B if it existed */ + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) +INPUT_PORTS_END + + static INPUT_PORTS_START( tdpgal ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) @@ -4916,6 +5029,45 @@ static INPUT_PORTS_START( olmandingo ) INPUT_PORTS_END +/* verified from Z80 code */ +static INPUT_PORTS_START( ozon1 ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) + + PORT_START("IN1") + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x03, "6" ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x00, "A 1C/1C B 2C/1C" ) + PORT_DIPSETTING( 0x02, "A 1C/2C B 1C/1C" ) /* see notes */ + PORT_DIPSETTING( 0x04, "A 1C/3C B 3C/1C" ) + PORT_DIPSETTING( 0x06, "A 1C/4C B 4C/1C" ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + + static INPUT_PORTS_START( theend ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -6248,7 +6400,6 @@ void galaxian_state::konami_base(machine_config &config) m_ppi8255[1]->out_pb_callback().set(FUNC(galaxian_state::konami_sound_control_w)); m_ppi8255[1]->in_pc_callback().set_ioport("IN3"); m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::konami_portc_1_w)); - } @@ -6501,6 +6652,21 @@ void galaxian_state::scorpnmc(machine_config &config) } +void galaxian_state::bongo(machine_config &config) +{ + galaxian_base(config); + + // alternate memory map + m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::bongo_map); + m_maincpu->set_addrmap(AS_IO, &galaxian_state::bongo_io_map); + + // sound hardware + AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK/3/4); + m_ay8910[0]->port_a_read_callback().set_ioport("DSW"); + m_ay8910[0]->add_route(ALL_OUTPUTS, "speaker", 0.5); +} + + void galaxian_state::fantastc(machine_config &config) { galaxian_base(config); @@ -6695,6 +6861,25 @@ void galaxian_state::theend(machine_config &config) } +void galaxian_state::ozon1(machine_config &config) +{ + konami_base(config); + + // alternate memory map + m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::ozon1_map); + m_maincpu->set_addrmap(AS_IO, &galaxian_state::ozon1_io_map); + + // no watchdog? + config.device_remove("watchdog"); + + // only one PPI, used in input mode only + m_ppi8255[0]->out_pc_callback().set_nop(); + config.device_remove("ppi8255_1"); + + AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK/3/4).add_route(ALL_OUTPUTS, "speaker", 0.5); +} + + // TODO: should be derived from theend, re-sort machine configs later void galaxian_state::scramble(machine_config &config) { @@ -10723,6 +10908,24 @@ ROM_START( kong ) ROM_LOAD( "prom", 0x0000, 0x0020, NO_DUMP ) ROM_END +ROM_START( bongo ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "bg1.bin", 0x0000, 0x1000, CRC(de9a8ec6) SHA1(b5ee99b26d1a39e31b643ad0f5723ee8e364023e) ) + ROM_LOAD( "bg2.bin", 0x1000, 0x1000, CRC(a19da662) SHA1(a2674392d489c5e5eeb9abc51572a37cc6045220) ) + ROM_LOAD( "bg3.bin", 0x2000, 0x1000, CRC(9f6f2150) SHA1(26a1f872686ddddcdb690d7b826ba26c20cdec35) ) + ROM_LOAD( "bg4.bin", 0x3000, 0x1000, CRC(f80372d2) SHA1(078e2c8b947103c168c0c85430f8ebc9d09f8ba7) ) + ROM_LOAD( "bg5.bin", 0x4000, 0x1000, CRC(fc92eade) SHA1(f4012a1c4631388a3e8109a8381bc4084ddc8757) ) + ROM_LOAD( "bg6.bin", 0x5000, 0x1000, CRC(561d9e5d) SHA1(68d7fab3cfb5b3360fe8064c70bf21bb1341032f) ) + + ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_LOAD( "b-h.bin", 0x0000, 0x1000, CRC(fc79d103) SHA1(dac1152221ebdc4cd9bf353b4cc5d45021ca5d9e) ) + ROM_LOAD( "b-k.bin", 0x1000, 0x1000, CRC(94d17bf3) SHA1(2a70968249946de52c5a4cfabafbbf4ecda844a8) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "b-clr.bin", 0x0000, 0x0020, CRC(c4761ada) SHA1(067d12b2d3635ffa6337ed234ba42717447bea00) ) +ROM_END + + ROM_START( mooncmw ) ROM_REGION( 0x8000, "maincpu", 0 ) ROM_LOAD( "60.1x", 0x0000, 0x0800, CRC(322859e6) SHA1(292dccb66c38c8de837ec3ac10928d092494958e) ) @@ -12065,6 +12268,20 @@ ROM_START( theendss ) // The End (SegaSA / Sonic) ROM_LOAD( "6331-1j.86", 0x0000, 0x0020, BAD_DUMP CRC(24652bc4) SHA1(d89575f3749c75dc963317fe451ffeffd9856e4d) ) // Not dumped on this set ROM_END +ROM_START( ozon1 ) + ROM_REGION( 0x3000, "maincpu", 0 ) + ROM_LOAD( "rom1.bin", 0x0000, 0x1000, CRC(54899e8b) SHA1(270af76ae4396ebda767f160535fa77c0b49726a) ) + ROM_LOAD( "rom2.bin", 0x1000, 0x1000, CRC(3c90fbfc) SHA1(92da614dba3a644eac144bb0ed434d78a31fcb1a) ) + ROM_LOAD( "rom3.bin", 0x2000, 0x1000, CRC(79fe313b) SHA1(ef8fd70f5669b7e7d7184eca2baaddcecb55c22d) ) + + ROM_REGION( 0x1000, "gfx1", 0 ) + ROM_LOAD( "rom7.bin", 0x0000, 0x0800, CRC(464285e8) SHA1(fff36b034b95050219c70cdfe05ff3bbc452b73e) ) + ROM_LOAD( "rom8.bin", 0x0800, 0x0800, CRC(92056dcc) SHA1(b162da8701bfee465205e8f274ee494063c52c7b) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ozon1.clr", 0x0000, 0x0020, CRC(605ea6e9) SHA1(d3471e6ef756059c2f7feb32fb8e41181cc1718e) ) +ROM_END + ROM_START( takeoff ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "0p.t.o.10l", 0x0000, 0x1000, CRC(46712d43) SHA1(e1b84494b530dd96d8a51a3f8bd7d7d3ba7560a9) ) @@ -13720,6 +13937,7 @@ GAME( 1980, moonal2b, moonal2, mooncrst, moonal2, galaxian_state, init_ // Larger romspace, interrupt enable moved GAME( 198?, thepitm, thepit, thepitm, thepitm, galaxian_state, init_mooncrsu, ROT90, "bootleg (KZH)", "The Pit (bootleg on Moon Quasar hardware)", MACHINE_SUPPORTS_SAVE ) // on an original MQ-2FJ pcb, even if the memory map appears closer to Moon Cresta +GAME( 1983, bongo, 0, bongo, bongo, galaxian_state, init_kong, ROT90, "Jetsoft", "Bongo", MACHINE_SUPPORTS_SAVE ) // Other games on basic mooncrst hardware GAME( 1982, skybase, 0, skybase, skybase, galaxian_state, init_skybase, ROT90, "Omori Electric Co., Ltd.", "Sky Base", MACHINE_SUPPORTS_SAVE ) @@ -13829,6 +14047,8 @@ GAME( 1981, astroamb, scramble, astroamb, astroamb, galaxian_state, init_ GAME( 1981, atlantis, 0, theend, atlantis, galaxian_state, init_atlantis, ROT90, "Comsoft", "Battle of Atlantis (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, atlantis2, atlantis, theend, atlantis, galaxian_state, init_atlantis, ROT90, "Comsoft", "Battle of Atlantis (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, ozon1, 0, ozon1, ozon1, galaxian_state, init_galaxian, ROT90, "Proma", "Ozon I", MACHINE_SUPPORTS_SAVE ) + // Konami L-1200-2 base board with custom Subelectro 113 rom board GAME( 1981, jungsub, jungler, jungsub, jungsub, galaxian_state, init_jungsub, ROT90, "bootleg (Subelectro)", "Jungler (Subelectro, bootleg on Scramble hardware)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // mostly works, bad GFX ROM causes lots of glitches diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp index faaf405670f..a193f1b441f 100644 --- a/src/mame/drivers/galaxold.cpp +++ b/src/mame/drivers/galaxold.cpp @@ -64,39 +64,6 @@ Stephh's notes (based on the games Z80 code and some tests) for other games : settings (code at 0x5805 for player 1 and player 2 in "Upright" cabinet, or 0x5563 for player 2 in "Cocktail" cabinet). -5) 'bongo' - - - IN0 bit 1 is supposed to be COIN2 (see coinage routine at 0x0288), but - there is a test on it at 0x0082 (in NMI routine) which jumps to 0xc003 - (unmapped memory) if it pressed (HIGH). - - IN0 bit 7 is tested on startup (code at 0x0048) in combination with bits 0 and 1 - (which are supposed to be COIN1 and COIN2). If all of them are pressed (HIGH), - the game displays a "CREDIT FAULT" message then jumps back to 0x0048. - - IN0 bit 4 and IN1 bit 4 should have been IPT_JOYSTICK_DOWN (Upright and Cocktail) - but their status is discarded with 3 'NOP' instructions at 0x06ca. - - IN0 bit 7 and IN0 bit 6 should have been IPT_BUTTON1 (Upright and Cocktail) - but their status is discarded with 3 'NOP' instructions at 0x06d1. - - DSW0 is read via code at 0x2426, but its contents is directly overwritten - with value read from DSW1 (AY port A) via code at 0x3647. - -4) 'ozon1' - - - Player 2 controls are used for player 2 regardless of the "Cabinet" Dip Switch - (check code at 0x03c6 which changes player and routines that handle players inputs : - 0x0dc3 and 0x1e31 LEFT and RIGHT - 0x0e76 BUTTON1). - - Credits are coded on 1 byte (range 0x00-0xff) and stored at 0x4002. - To display them, they are converted to BCD on 1 byte via routine at 0x1421. - As a result, it will always display 0 to 99 (eg: 0xf0 = 240 will display 40). - When you get 256 credits, 0x4002 = 0x00, so the game thinks you have no credit - at all and enters "attract mode" again (but the game does NOT reset). - - There's an ingame bug when you get 101 or 201 credits : due to code at 0x0239, - the game checks the BCD value (0x01) instead of the correct one at 0x4002, - so you can't start a 2 players game ! - - There is another ingame bug when "Coinage" settings are "A 1C/2C B 1C/1C" - and you press COIN2 : due to code at 0x0473, contents of 0x4004 is NEVER reset - to 0x00, so routine at 0x042a ALWAYS thinks that you've pressed COIN2, - and as a consequence, it ALWAYS adds 1 credit (even when you are playing) ! - ***************************************************************************/ #include "emu.h" @@ -106,7 +73,6 @@ Stephh's notes (based on the games Z80 code and some tests) for other games : #include "cpu/z80/z80.h" #include "cpu/s2650/s2650.h" #include "machine/watchdog.h" -#include "sound/ay8910.h" #include "sound/sn76496.h" #include "speaker.h" @@ -613,60 +579,6 @@ void galaxold_state::tazzmang_map(address_map &map) } -void galaxold_state::bongo_map(address_map &map) -{ - map(0x0000, 0x5fff).rom(); - map(0x8000, 0x83ff).ram(); - map(0x8400, 0x87ff).nopw(); // not used - map(0x9000, 0x93ff).ram().w(FUNC(galaxold_state::galaxold_videoram_w)).share("videoram"); - map(0x9400, 0x97ff).nopw(); // not used - map(0x9800, 0x983f).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram"); - map(0x9840, 0x985f).ram().share("spriteram"); - map(0x9860, 0x987f).ram().share("bulletsram"); - map(0xa000, 0xa000).portr("IN0"); - map(0xa800, 0xa800).portr("IN1"); - map(0xb000, 0xb000).portr("DSW0"); - map(0xb001, 0xb001).w(FUNC(galaxold_state::galaxold_nmi_enable_w)); - map(0xb004, 0xb004).w(FUNC(galaxold_state::galaxold_stars_enable_w)); - map(0xb006, 0xb006).w(FUNC(galaxold_state::galaxold_flip_screen_x_w)); - map(0xb007, 0xb007).w(FUNC(galaxold_state::galaxold_flip_screen_y_w)); - map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r)).nopw(); -} - -void galaxold_state::bongo_io(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x01).w("aysnd", FUNC(ay8910_device::address_data_w)); - map(0x02, 0x02).r("aysnd", FUNC(ay8910_device::data_r)); -} - - -void galaxold_state::ozon1_map(address_map &map) -{ - map(0x0000, 0x2fff).rom(); - map(0x4000, 0x4200).ram(); - map(0x4300, 0x43ff).ram(); - map(0x4800, 0x4bff).rw(FUNC(galaxold_state::galaxold_videoram_r), FUNC(galaxold_state::galaxold_videoram_w)).share("videoram"); - map(0x4c00, 0x4fff).w(FUNC(galaxold_state::galaxold_videoram_w)); - map(0x5000, 0x503f).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram"); - map(0x5040, 0x505f).ram().share("spriteram"); - map(0x6801, 0x6801).nopw(); //continuosly 0 and 1 - map(0x6802, 0x6802).w(FUNC(galaxold_state::galaxold_coin_counter_w)); - map(0x6806, 0x6806).w(FUNC(galaxold_state::galaxold_flip_screen_x_w)); - map(0x6807, 0x6807).w(FUNC(galaxold_state::galaxold_flip_screen_y_w)); - map(0x8100, 0x8100).portr("IN0"); - map(0x8101, 0x8101).portr("IN1"); - map(0x8102, 0x8102).portr("IN2"); - map(0x8103, 0x8103).nopw(); //only one 9b at reset -} - -void galaxold_state::ozon1_io_map(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x01).w("aysnd", FUNC(ay8910_device::data_address_w)); -} - - void galaxold_state::hunchbkg_map(address_map &map) { map(0x0000, 0x0fff).rom(); @@ -1837,90 +1749,6 @@ static INPUT_PORTS_START( tazzmang ) INPUT_PORTS_END -/* verified from Z80 code */ -static INPUT_PORTS_START( bongo ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* see notes */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("DSW0") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) /* see notes */ - - PORT_START("DSW1") - PORT_DIPUNUSED( 0x01, IP_ACTIVE_HIGH ) - PORT_DIPNAME( 0x06, 0x02, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x00, "2" ) - PORT_DIPSETTING( 0x02, "3" ) - PORT_DIPSETTING( 0x04, "4" ) - PORT_DIPSETTING( 0x06, "5" ) - PORT_DIPNAME( 0x08, 0x00, "Infinite Lives (Cheat)" ) /* always gives 3 lives */ - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPUNUSED( 0x10, IP_ACTIVE_HIGH ) - PORT_DIPUNUSED( 0x20, IP_ACTIVE_HIGH ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) /* also 1C_3C for Coin B if it existed */ - PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) ) /* also 1C_6C for Coin B if it existed */ - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) -INPUT_PORTS_END - - -/* verified from Z80 code */ -static INPUT_PORTS_START( ozon1 ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) - - PORT_START("IN1") - PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x00, "3" ) - PORT_DIPSETTING( 0x01, "4" ) - PORT_DIPSETTING( 0x02, "5" ) - PORT_DIPSETTING( 0x03, "6" ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x00, "A 1C/1C B 2C/1C" ) - PORT_DIPSETTING( 0x02, "A 1C/2C B 1C/1C" ) /* see notes */ - PORT_DIPSETTING( 0x04, "A 1C/3C B 3C/1C" ) - PORT_DIPSETTING( 0x06, "A 1C/4C B 4C/1C" ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) ) - PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - static INPUT_PORTS_START( hunchbkg ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) @@ -2552,26 +2380,6 @@ void galaxold_state::rockclim(machine_config &config) } -void galaxold_state::ozon1(machine_config &config) -{ - galaxold_base(config); - - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::ozon1_map); - m_maincpu->set_addrmap(AS_IO, &galaxold_state::ozon1_io_map); - m_maincpu->set_vblank_int("screen", FUNC(galaxold_state::nmi_line_pulse)); - - MCFG_MACHINE_RESET_REMOVE() - - /* video hardware */ - m_palette->set_entries(32); - m_palette->set_init(FUNC(galaxold_state::rockclim_palette)); - - MCFG_VIDEO_START_OVERRIDE(galaxold_state,ozon1) - AY8910(config, "aysnd", PIXEL_CLOCK/4).add_route(ALL_OUTPUTS, "speaker", 0.5); -} - - void galaxold_state::drivfrcg(machine_config &config) { /* basic machine hardware */ @@ -2604,26 +2412,6 @@ void galaxold_state::drivfrcg(machine_config &config) } -void galaxold_state::bongo(machine_config &config) -{ - galaxold_base(config); - - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::bongo_map); - m_maincpu->set_addrmap(AS_IO, &galaxold_state::bongo_io); - - /* video hardware */ - MCFG_VIDEO_START_OVERRIDE(galaxold_state,bongo) - - m_screen->set_screen_update(FUNC(galaxold_state::screen_update_galaxold)); - - /* sound hardware */ - ay8910_device &aysnd(AY8910(config, "aysnd", PIXEL_CLOCK/4)); - aysnd.port_a_read_callback().set_ioport("DSW1"); - aysnd.add_route(ALL_OUTPUTS, "speaker", 0.5); -} - - void galaxold_state::hunchbkg(machine_config &config) { galaxold_base(config); @@ -3392,37 +3180,6 @@ ROM_START( tazzmang2 ) // Original Sparcade set ROM_END -ROM_START( bongo ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "bg1.bin", 0x0000, 0x1000, CRC(de9a8ec6) SHA1(b5ee99b26d1a39e31b643ad0f5723ee8e364023e) ) - ROM_LOAD( "bg2.bin", 0x1000, 0x1000, CRC(a19da662) SHA1(a2674392d489c5e5eeb9abc51572a37cc6045220) ) - ROM_LOAD( "bg3.bin", 0x2000, 0x1000, CRC(9f6f2150) SHA1(26a1f872686ddddcdb690d7b826ba26c20cdec35) ) - ROM_LOAD( "bg4.bin", 0x3000, 0x1000, CRC(f80372d2) SHA1(078e2c8b947103c168c0c85430f8ebc9d09f8ba7) ) - ROM_LOAD( "bg5.bin", 0x4000, 0x1000, CRC(fc92eade) SHA1(f4012a1c4631388a3e8109a8381bc4084ddc8757) ) - ROM_LOAD( "bg6.bin", 0x5000, 0x1000, CRC(561d9e5d) SHA1(68d7fab3cfb5b3360fe8064c70bf21bb1341032f) ) - - ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "b-h.bin", 0x0000, 0x1000, CRC(fc79d103) SHA1(dac1152221ebdc4cd9bf353b4cc5d45021ca5d9e) ) - ROM_LOAD( "b-k.bin", 0x1000, 0x1000, CRC(94d17bf3) SHA1(2a70968249946de52c5a4cfabafbbf4ecda844a8) ) - - ROM_REGION( 0x0020, "proms", 0 ) - ROM_LOAD( "b-clr.bin", 0x0000, 0x0020, CRC(c4761ada) SHA1(067d12b2d3635ffa6337ed234ba42717447bea00) ) -ROM_END - -ROM_START( ozon1 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "rom1.bin", 0x0000, 0x1000, CRC(54899e8b) SHA1(270af76ae4396ebda767f160535fa77c0b49726a) ) - ROM_LOAD( "rom2.bin", 0x1000, 0x1000, CRC(3c90fbfc) SHA1(92da614dba3a644eac144bb0ed434d78a31fcb1a) ) - ROM_LOAD( "rom3.bin", 0x2000, 0x1000, CRC(79fe313b) SHA1(ef8fd70f5669b7e7d7184eca2baaddcecb55c22d) ) - - ROM_REGION( 0x1000, "gfx1", 0 ) - ROM_LOAD( "rom7.bin", 0x0000, 0x0800, CRC(464285e8) SHA1(fff36b034b95050219c70cdfe05ff3bbc452b73e) ) - ROM_LOAD( "rom8.bin", 0x0800, 0x0800, CRC(92056dcc) SHA1(b162da8701bfee465205e8f274ee494063c52c7b) ) - - ROM_REGION( 0x0020, "proms", 0 ) - ROM_LOAD( "ozon1.clr", 0x0000, 0x0020, CRC(605ea6e9) SHA1(d3471e6ef756059c2f7feb32fb8e41181cc1718e) ) -ROM_END - ROM_START( hunchbkg ) ROM_REGION( 0x8000, "maincpu", 0 ) ROM_LOAD( "gal_hb_1", 0x0000, 0x0800, CRC(46590e9b) SHA1(5d26578c91adec20d8d8a17d5dade9ef2febcbe5) ) @@ -3805,8 +3562,6 @@ GAME( 1982, porter, dockman, porter, porter, galaxold_state, empty_ini GAME( 1982, portera, dockman, porter, porter, galaxold_state, empty_init, ROT90, "bootleg", "El Estivador (Spanish bootleg of Port Man on Galaxian hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL ) GAME( 1982, tazzmang, tazmania, tazzmang, tazzmang, galaxold_state, empty_init, ROT90, "bootleg", "Tazz-Mania (bootleg on Galaxian hardware)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) GAME( 1982, tazzmang2, tazmania, tazzmang, tazzmang, galaxold_state, empty_init, ROT90, "bootleg", "Tazz-Mania (bootleg on Galaxian hardware with Starfield)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) -GAME( 1983, bongo, 0, bongo, bongo, galaxold_state, empty_init, ROT90, "Jetsoft", "Bongo", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, ozon1, 0, ozon1, ozon1, galaxold_state, empty_init, ROT90, "Proma", "Ozon I", MACHINE_SUPPORTS_SAVE ) GAME( 1982, guttangt, locomotn, guttang, guttangt, galaxold_state, init_guttangt, ROT270, "bootleg (Recreativos Franco?)", "Guttang Gottong (bootleg on Galaxian type hardware)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // or by 'Tren' ? // Videotron cartridge system diff --git a/src/mame/drivers/hyprduel.cpp b/src/mame/drivers/hyprduel.cpp index 8a0ec1f7ba5..320c6e318c7 100644 --- a/src/mame/drivers/hyprduel.cpp +++ b/src/mame/drivers/hyprduel.cpp @@ -49,6 +49,8 @@ fix comms so it boots, it's a bit of a hack for hyperduel at the moment ;-) #include "speaker.h" +namespace { + #define RASTER_LINES 262 #define FIRST_VISIBLE_LINE 0 #define LAST_VISIBLE_LINE 223 @@ -71,6 +73,10 @@ public: void init_magerror(); void init_hyprduel(); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + private: uint8_t irq_cause_r(); void irq_cause_w(uint8_t data); @@ -79,8 +85,6 @@ private: void hyprduel_cpusync_trigger1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t hyprduel_cpusync_trigger2_r(offs_t offset); void hyprduel_cpusync_trigger2_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - DECLARE_MACHINE_START(hyprduel); - DECLARE_MACHINE_START(magerror); TIMER_CALLBACK_MEMBER(vblank_end_callback); DECLARE_WRITE_LINE_MEMBER(vdp_blit_end_w); TIMER_DEVICE_CALLBACK_MEMBER(interrupt); @@ -92,8 +96,6 @@ private: void magerror_map(address_map &map); void magerror_map2(address_map &map); - virtual void machine_reset() override; - /* memory pointers */ required_shared_ptr<uint16_t> m_irq_enable; required_shared_ptr_array<uint16_t, 3> m_sharedram; @@ -424,7 +426,7 @@ void hyprduel_state::machine_reset() *m_irq_enable = 0xff; } -MACHINE_START_MEMBER(hyprduel_state,hyprduel) +void hyprduel_state::machine_start() { save_item(NAME(m_blitter_bit)); save_item(NAME(m_requested_int)); @@ -461,8 +463,6 @@ void hyprduel_state::hyprduel(machine_config &config) M68000(config, m_subcpu, 20000000/2); /* 10MHz */ m_subcpu->set_addrmap(AS_PROGRAM, &hyprduel_state::hyprduel_map2); - MCFG_MACHINE_START_OVERRIDE(hyprduel_state,hyprduel) - /* video hardware */ i4220_config(config); @@ -489,8 +489,6 @@ void hyprduel_state::magerror(machine_config &config) m_subcpu->set_addrmap(AS_PROGRAM, &hyprduel_state::magerror_map2); m_subcpu->set_periodic_int(FUNC(hyprduel_state::irq1_line_hold), attotime::from_hz(968)); /* tempo? */ - MCFG_MACHINE_START_OVERRIDE(hyprduel_state,hyprduel) - /* video hardware */ i4220_config(config); @@ -568,6 +566,8 @@ void hyprduel_state::init_magerror() m_int_num = 0x01; } +} // Anonymous namespace + GAME( 1993, hyprduel, 0, hyprduel, hyprduel, hyprduel_state, init_hyprduel, ROT0, "Technosoft", "Hyper Duel (Japan set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) GAME( 1993, hyprduel2, hyprduel, hyprduel, hyprduel, hyprduel_state, init_hyprduel, ROT0, "Technosoft", "Hyper Duel (Japan set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pipedrm.cpp b/src/mame/drivers/pipedrm.cpp index da4d940bda0..b595e36505a 100644 --- a/src/mame/drivers/pipedrm.cpp +++ b/src/mame/drivers/pipedrm.cpp @@ -172,35 +172,67 @@ Added Multiple Coin Feature: #include "speaker.h" -class pipedrm_state : public fromance_state +namespace { + +class hatris_state : public fromance_state { public: - pipedrm_state(const machine_config &mconfig, device_type type, const char *tag) : + hatris_state(const machine_config &mconfig, device_type type, const char *tag) : fromance_state(mconfig, type, tag), - m_soundlatch(*this, "soundlatch") + m_soundlatch(*this, "soundlatch"), + m_soundbank(*this, "sounbank") { } - void pipedrm(machine_config &config); void hatris(machine_config &config); - void init_pipedrm(); void init_hatris(); -private: +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + required_device<generic_latch_8_device> m_soundlatch; + required_memory_bank m_soundbank; - DECLARE_MACHINE_START(pipedrm); - DECLARE_MACHINE_RESET(pipedrm); - void pipedrm_bankswitch_w(uint8_t data); - void sound_bankswitch_w(uint8_t data); - uint8_t pending_command_r(); - void hatris_sound_portmap(address_map &map); + void sound_portmap(address_map &map); void main_map(address_map &map); void main_portmap(address_map &map); void sound_map(address_map &map); - void sound_portmap(address_map &map); + +private: + void bankswitch_w(uint8_t data); + uint8_t pending_command_r(); }; +class pipedrm_state : public hatris_state +{ +public: + pipedrm_state(const machine_config &mconfig, device_type type, const char *tag) : + hatris_state(mconfig, type, tag), + m_spr_old(*this, "vsystem_spr_old"), + m_spriteram(nullptr), + m_spriteram_size(0) + { } + + void pipedrm(machine_config &config); + + void init_pipedrm(); + +protected: + virtual void video_start() override; + +private: + required_device<vsystem_spr2_device> m_spr_old; + + uint8_t *m_spriteram; + u32 m_spriteram_size; + + void sound_bankswitch_w(uint8_t data); + + void sound_portmap(address_map &map); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); +}; /************************************* * @@ -208,7 +240,7 @@ private: * *************************************/ -void pipedrm_state::pipedrm_bankswitch_w(uint8_t data) +void hatris_state::bankswitch_w(uint8_t data) { /* Bit layout: @@ -222,7 +254,7 @@ void pipedrm_state::pipedrm_bankswitch_w(uint8_t data) */ /* set the memory bank on the Z80 using the low 3 bits */ - membank("bank1")->set_entry(data & 0x7); + m_rombank->set_entry(data & 0x7); /* map to the fromance gfx register */ fromance_gfxreg_w(((data >> 6) & 0x01) | /* flipscreen */ @@ -232,7 +264,7 @@ void pipedrm_state::pipedrm_bankswitch_w(uint8_t data) void pipedrm_state::sound_bankswitch_w(uint8_t data) { - membank("bank2")->set_entry(data & 0x01); + m_soundbank->set_entry(data & 0x01); } @@ -242,7 +274,7 @@ void pipedrm_state::sound_bankswitch_w(uint8_t data) * *************************************/ -uint8_t pipedrm_state::pending_command_r() +uint8_t hatris_state::pending_command_r() { return m_soundlatch->pending_r(); } @@ -250,31 +282,68 @@ uint8_t pipedrm_state::pending_command_r() /************************************* * + * Video + * + *************************************/ + +void pipedrm_state::video_start() +{ + VIDEO_START_CALL_MEMBER(fromance); + m_scrolly_ofs = 0x00; +} + +void hatris_state::video_start() +{ + VIDEO_START_CALL_MEMBER(fromance); + m_scrollx_ofs = 0xB9; + m_scrolly_ofs = 0x00; +} + +uint32_t pipedrm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + uint8_t* sram = m_spriteram; + + /* there seems to be no logical mapping for the X scroll register -- maybe it's gone */ + m_bg_tilemap->set_scrolly(0, m_scrolly[1]); + m_fg_tilemap->set_scrolly(0, m_scrolly[0]); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 0); + m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 1); + return 0; +} + + + +/************************************* + * * Main CPU memory handlers * *************************************/ -void pipedrm_state::main_map(address_map &map) +void hatris_state::main_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x9fff).ram(); - map(0xa000, 0xbfff).bankr("bank1"); + map(0xa000, 0xbfff).bankr(m_rombank); map(0xc000, 0xcfff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); - map(0xd000, 0xffff).rw(FUNC(pipedrm_state::fromance_videoram_r), FUNC(pipedrm_state::fromance_videoram_w)).share("videoram"); + map(0xd000, 0xffff).rw(FUNC(hatris_state::fromance_videoram_r), FUNC(hatris_state::fromance_videoram_w)); } -void pipedrm_state::main_portmap(address_map &map) +void hatris_state::main_portmap(address_map &map) { map.global_mask(0xff); map(0x10, 0x11).w(m_gga, FUNC(vsystem_gga_device::write)); map(0x20, 0x20).portr("P1").w(m_soundlatch, FUNC(generic_latch_8_device::write)); - map(0x21, 0x21).portr("P2").w(FUNC(pipedrm_state::pipedrm_bankswitch_w)); - map(0x22, 0x25).w(FUNC(pipedrm_state::fromance_scroll_w)); + map(0x21, 0x21).portr("P2").w(FUNC(hatris_state::bankswitch_w)); + map(0x22, 0x25).w(FUNC(hatris_state::fromance_scroll_w)); map(0x22, 0x22).portr("DSW1"); map(0x23, 0x23).portr("DSW2"); map(0x24, 0x24).portr("SYSTEM"); - map(0x25, 0x25).r(FUNC(pipedrm_state::pending_command_r)); + map(0x25, 0x25).r(FUNC(hatris_state::pending_command_r)); } @@ -285,11 +354,11 @@ void pipedrm_state::main_portmap(address_map &map) * *************************************/ -void pipedrm_state::sound_map(address_map &map) +void hatris_state::sound_map(address_map &map) { map(0x0000, 0x77ff).rom(); map(0x7800, 0x7fff).ram(); - map(0x8000, 0xffff).bankr("bank2"); + map(0x8000, 0xffff).bankr(m_soundbank); } @@ -303,12 +372,12 @@ void pipedrm_state::sound_portmap(address_map &map) } -void pipedrm_state::hatris_sound_portmap(address_map &map) +void hatris_state::sound_portmap(address_map &map) { map.global_mask(0xff); map(0x00, 0x03).mirror(0x08).rw("ymsnd", FUNC(ym2608_device::read), FUNC(ym2608_device::write)); map(0x04, 0x04).r(m_soundlatch, FUNC(generic_latch_8_device::read)); - map(0x05, 0x05).r(FUNC(pipedrm_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w)); + map(0x05, 0x05).r(FUNC(hatris_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w)); } @@ -550,20 +619,20 @@ GFXDECODE_END * *************************************/ -MACHINE_START_MEMBER(pipedrm_state,pipedrm) +void hatris_state::machine_start() { /* initialize main Z80 bank */ - membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x2000); - membank("bank1")->set_entry(0); + m_rombank->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x2000); + m_rombank->set_entry(0); /* initialize sound bank */ - membank("bank2")->configure_entries(0, 2, memregion("sub")->base() + 0x10000, 0x8000); - membank("bank2")->set_entry(0); + m_soundbank->configure_entries(0, 2, memregion("sub")->base() + 0x10000, 0x8000); + m_soundbank->set_entry(0); /* video-related elements are saved in video_start */ } -MACHINE_RESET_MEMBER(pipedrm_state,pipedrm) +void hatris_state::machine_reset() { m_flipscreen_old = -1; m_scrollx_ofs = 0x159; @@ -590,23 +659,20 @@ void pipedrm_state::pipedrm(machine_config &config) m_subcpu->set_addrmap(AS_PROGRAM, &pipedrm_state::sound_map); m_subcpu->set_addrmap(AS_IO, &pipedrm_state::sound_portmap); - MCFG_MACHINE_START_OVERRIDE(pipedrm_state,pipedrm) - MCFG_MACHINE_RESET_OVERRIDE(pipedrm_state,pipedrm) - /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ m_screen->set_size(44*8, 30*8); m_screen->set_visarea(0*8, 44*8-1, 0*8, 30*8-1); - m_screen->set_screen_update(FUNC(pipedrm_state::screen_update_pipedrm)); + m_screen->set_screen_update(FUNC(pipedrm_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_pipedrm); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048); VSYSTEM_GGA(config, m_gga, XTAL(14'318'181) / 2); // divider not verified - m_gga->write_cb().set(FUNC(fromance_state::fromance_gga_data_w)); + m_gga->write_cb().set(FUNC(pipedrm_state::fromance_gga_data_w)); VSYSTEM_SPR2(config, m_spr_old, 0); m_spr_old->set_gfx_region(2); @@ -614,8 +680,6 @@ void pipedrm_state::pipedrm(machine_config &config) m_spr_old->set_pritype(3); m_spr_old->set_gfxdecode_tag(m_gfxdecode); - MCFG_VIDEO_START_OVERRIDE(pipedrm_state,pipedrm) - /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -630,20 +694,17 @@ void pipedrm_state::pipedrm(machine_config &config) ymsnd.add_route(2, "mono", 1.0); } -void pipedrm_state::hatris(machine_config &config) +void hatris_state::hatris(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 12000000/2); - m_maincpu->set_addrmap(AS_PROGRAM, &pipedrm_state::main_map); - m_maincpu->set_addrmap(AS_IO, &pipedrm_state::main_portmap); - m_maincpu->set_vblank_int("screen", FUNC(pipedrm_state::irq0_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &hatris_state::main_map); + m_maincpu->set_addrmap(AS_IO, &hatris_state::main_portmap); + m_maincpu->set_vblank_int("screen", FUNC(hatris_state::irq0_line_hold)); Z80(config, m_subcpu, 14318000/4); - m_subcpu->set_addrmap(AS_PROGRAM, &pipedrm_state::sound_map); - m_subcpu->set_addrmap(AS_IO, &pipedrm_state::hatris_sound_portmap); - - MCFG_MACHINE_START_OVERRIDE(pipedrm_state,pipedrm) - MCFG_MACHINE_RESET_OVERRIDE(pipedrm_state,pipedrm) + m_subcpu->set_addrmap(AS_PROGRAM, &hatris_state::sound_map); + m_subcpu->set_addrmap(AS_IO, &hatris_state::sound_portmap); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -651,16 +712,14 @@ void pipedrm_state::hatris(machine_config &config) m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ m_screen->set_size(44*8, 30*8); m_screen->set_visarea(0*8, 44*8-1, 0*8, 30*8-1); - m_screen->set_screen_update(FUNC(pipedrm_state::screen_update_fromance)); + m_screen->set_screen_update(FUNC(hatris_state::screen_update_fromance)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_hatris); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048); VSYSTEM_GGA(config, m_gga, XTAL(14'318'181) / 2); // divider not verified - m_gga->write_cb().set(FUNC(fromance_state::fromance_gga_data_w)); - - MCFG_VIDEO_START_OVERRIDE(pipedrm_state,hatris) + m_gga->write_cb().set(FUNC(hatris_state::fromance_gga_data_w)); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -887,11 +946,12 @@ void pipedrm_state::init_pipedrm() } -void pipedrm_state::init_hatris() +void hatris_state::init_hatris() { - m_maincpu->space(AS_IO).install_write_handler(0x21, 0x21, write8smo_delegate(*this, FUNC(pipedrm_state::fromance_gfxreg_w))); + m_maincpu->space(AS_IO).install_write_handler(0x21, 0x21, write8smo_delegate(*this, FUNC(hatris_state::fromance_gfxreg_w))); } +} // Anonymous namespace /************************************* @@ -904,5 +964,5 @@ GAME( 1990, pipedrm, 0, pipedrm, pipedrm, pipedrm_state, init_pipedrm, RO GAME( 1990, pipedrmu, pipedrm, pipedrm, pipedrm, pipedrm_state, init_pipedrm, ROT0, "Video System Co.", "Pipe Dream (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, pipedrmj, pipedrm, pipedrm, pipedrm, pipedrm_state, init_pipedrm, ROT0, "Video System Co.", "Pipe Dream (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, pipedrmt, pipedrm, pipedrm, pipedrm, pipedrm_state, init_pipedrm, ROT0, "Video System Co.", "Pipe Dream (Taiwan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, hatris, 0, hatris, hatris, pipedrm_state, init_hatris, ROT0, "Video System Co.", "Hatris (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, hatrisj, hatris, hatris, hatris, pipedrm_state, init_hatris, ROT0, "Video System Co.", "Hatris (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, hatris, 0, hatris, hatris, hatris_state, init_hatris, ROT0, "Video System Co.", "Hatris (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, hatrisj, hatris, hatris, hatris, hatris_state, init_hatris, ROT0, "Video System Co.", "Hatris (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/playmark.cpp b/src/mame/drivers/playmark.cpp index 4eb6efbb0b7..62f25ba6699 100644 --- a/src/mame/drivers/playmark.cpp +++ b/src/mame/drivers/playmark.cpp @@ -1033,7 +1033,7 @@ void playmark_state::configure_oki_banks() } } -MACHINE_START_MEMBER(playmark_state,playmark) +void playmark_state::machine_start() { save_item(NAME(m_bgscrollx)); save_item(NAME(m_bgscrolly)); @@ -1054,7 +1054,7 @@ MACHINE_START_MEMBER(playmark_state,playmark) -MACHINE_RESET_MEMBER(playmark_state,playmark) +void playmark_state::machine_reset() { m_bgscrollx = 0; m_bgscrolly = 0; @@ -1085,9 +1085,6 @@ void playmark_state::bigtwin(machine_config &config) m_audiocpu->read_c().set(FUNC(playmark_state::playmark_snd_flag_r)); m_audiocpu->write_c().set(FUNC(playmark_state::playmark_snd_control_w)); - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); @@ -1124,9 +1121,6 @@ void playmark_state::bigtwinb(machine_config &config) m_audiocpu->read_c().set(FUNC(playmark_state::playmark_snd_flag_r)); m_audiocpu->write_c().set(FUNC(playmark_state::playmark_snd_control_w)); - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); @@ -1166,9 +1160,6 @@ void playmark_state::wbeachvl(machine_config &config) EEPROM_93C46_16BIT(config, "eeprom").default_value(0); - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); @@ -1205,9 +1196,6 @@ void playmark_state::excelsr(machine_config &config) m_audiocpu->read_c().set(FUNC(playmark_state::playmark_snd_flag_r)); m_audiocpu->write_c().set(FUNC(playmark_state::playmark_snd_control_w)); - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); @@ -1245,9 +1233,6 @@ void playmark_state::hrdtimes(machine_config &config) m_audiocpu->write_c().set(FUNC(playmark_state::hrdtimes_snd_control_w)); m_audiocpu->set_disable(); /* Internal code is not dumped yet */ - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); @@ -1286,9 +1271,6 @@ void playmark_state::hotmind(machine_config &config) EEPROM_93C46_16BIT(config, "eeprom").default_value(0); - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); @@ -1330,9 +1312,6 @@ void playmark_state::luckboomh(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_MACHINE_START_OVERRIDE(playmark_state,playmark) - MCFG_MACHINE_RESET_OVERRIDE(playmark_state,playmark) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(58); diff --git a/src/mame/drivers/powerbal.cpp b/src/mame/drivers/powerbal.cpp index f797e54311b..7099e1bbeeb 100644 --- a/src/mame/drivers/powerbal.cpp +++ b/src/mame/drivers/powerbal.cpp @@ -26,6 +26,8 @@ Magic Sticks: #include "tilemap.h" +namespace { + class powerbal_state : public playmark_state { public: @@ -40,14 +42,15 @@ public: void powerbal(machine_config &config); void atombjt(machine_config &config); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; private: int m_tilebank; int m_bg_yoffset; TILE_GET_INFO_MEMBER(powerbal_get_bg_tile_info); - DECLARE_MACHINE_START(powerbal); - DECLARE_MACHINE_RESET(powerbal); DECLARE_VIDEO_START(powerbal); DECLARE_VIDEO_START(atombjt); uint32_t screen_update_powerbal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -616,12 +619,12 @@ GFXDECODE_END -MACHINE_START_MEMBER(powerbal_state,powerbal) +void powerbal_state::machine_start() { save_item(NAME(m_tilebank)); } -MACHINE_RESET_MEMBER(powerbal_state,powerbal) +void powerbal_state::machine_reset() { m_tilebank = 0; configure_oki_banks(); @@ -634,9 +637,6 @@ void powerbal_state::powerbal(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &powerbal_state::powerbal_main_map); m_maincpu->set_vblank_int("screen", FUNC(powerbal_state::irq2_line_hold)); - MCFG_MACHINE_START_OVERRIDE(powerbal_state,powerbal) - MCFG_MACHINE_RESET_OVERRIDE(powerbal_state,powerbal) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(61); @@ -668,9 +668,6 @@ void powerbal_state::magicstk(machine_config &config) EEPROM_93C46_16BIT(config, "eeprom").default_value(0); - MCFG_MACHINE_START_OVERRIDE(powerbal_state,powerbal) - MCFG_MACHINE_RESET_OVERRIDE(powerbal_state,powerbal) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(61); @@ -867,6 +864,9 @@ void powerbal_state::init_magicstk() m_yoffset = -5; } +} // Anonymous namespace + + /************************* * Game Drivers * *************************/ @@ -875,4 +875,4 @@ void powerbal_state::init_magicstk() GAME( 1994, powerbal, 0, powerbal, powerbal, powerbal_state, init_powerbal, ROT0, "Playmark", "Power Balls", MACHINE_SUPPORTS_SAVE ) GAME( 1995, magicstk, 0, magicstk, magicstk, powerbal_state, init_magicstk, ROT0, "Playmark", "Magic Sticks", MACHINE_SUPPORTS_SAVE ) GAME( 1995, hotminda, hotmind, magicstk, hotminda, powerbal_state, init_magicstk, ROT0, "Playmark", "Hot Mind (adjustable prize)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, atombjt, bjtwin, atombjt, atombjt, powerbal_state, empty_init, ROT270, "bootleg (Kyon K.)", "Atom (bootleg of Bombjack Twin)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // some non-trivial mods to the gfx and sound hw wrt nmk16 hw original, does this really support flip screen? +GAME( 1993, atombjt, bjtwin, atombjt, atombjt, powerbal_state, empty_init, ROT270, "bootleg (Kyon K.)", "Atom (bootleg of Bombjack Twin)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // some non-trivial mods to the gfx and sound hw wrt nmk16 hw original, does this really support flip screen? diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 753042585ba..7ab2ecf66ca 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -70,7 +70,7 @@ #include <vector> #define AS_IO16LE 1 -#define AS_IO16BE 2 +#define AS_IO16BE 4 class vgmplay_disassembler : public util::disasm_interface { diff --git a/src/mame/includes/astrocde.h b/src/mame/includes/astrocde.h index 2535970886e..fe42331227b 100644 --- a/src/mame/includes/astrocde.h +++ b/src/mame/includes/astrocde.h @@ -141,7 +141,6 @@ public: void init_demndrgn(); void init_ebases(); void init_gorf(); - void init_astrocde(); void astrocade_palette(palette_device &palette) const; DECLARE_VIDEO_START(profpac); void profpac_palette(palette_device &palette) const; diff --git a/src/mame/includes/fromance.h b/src/mame/includes/fromance.h index c8b2f4a651e..4882cd897f0 100644 --- a/src/mame/includes/fromance.h +++ b/src/mame/includes/fromance.h @@ -28,14 +28,11 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_subcpu(*this, "sub"), - m_spriteram(nullptr), - m_spriteram_size(0), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_gga(*this, "gga"), - m_spr_old(*this, "vsystem_spr_old"), - m_videoram(*this, "videoram"), + m_rombank(*this, "rombank"), m_sublatch(*this, "sublatch"), m_msm(*this, "msm") { } @@ -46,23 +43,24 @@ public: void init_common(); - void fromance_gga_data_w(offs_t offset, uint8_t data); - protected: + virtual void machine_start() override; + virtual void machine_reset() override; + DECLARE_VIDEO_START(fromance); + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_subcpu; - uint8_t *m_spriteram; - u32 m_spriteram_size; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; required_device<vsystem_gga_device> m_gga; - optional_device<vsystem_spr2_device> m_spr_old; // only used by pipe dream, split this state up and clean things... + required_memory_bank m_rombank; void fromance_gfxreg_w(uint8_t data); uint8_t fromance_videoram_r(offs_t offset); void fromance_videoram_w(offs_t offset, uint8_t data); void fromance_scroll_w(offs_t offset, uint8_t data); + void fromance_gga_data_w(offs_t offset, uint8_t data); uint32_t m_scrolly_ofs; uint32_t m_scrollx_ofs; @@ -73,23 +71,16 @@ protected: uint8_t m_flipscreen_old; uint8_t m_selected_videoram; uint8_t m_selected_paletteram; - - DECLARE_VIDEO_START(hatris); - DECLARE_VIDEO_START(pipedrm); + tilemap_t *m_bg_tilemap; + tilemap_t *m_fg_tilemap; uint32_t screen_update_fromance(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - uint32_t screen_update_pipedrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); private: - /* memory pointers (used by pipedrm) */ - optional_shared_ptr<uint8_t> m_videoram; - optional_device<generic_latch_8_device> m_sublatch; optional_device<msm5205_device> m_msm; /* video-related */ - tilemap_t *m_bg_tilemap; - tilemap_t *m_fg_tilemap; std::unique_ptr<uint8_t[]> m_local_videoram[2]; std::unique_ptr<uint8_t[]> m_local_paletteram; @@ -116,10 +107,7 @@ private: TILE_GET_INFO_MEMBER(get_fromance_fg_tile_info); TILE_GET_INFO_MEMBER(get_nekkyoku_bg_tile_info); TILE_GET_INFO_MEMBER(get_nekkyoku_fg_tile_info); - DECLARE_MACHINE_START(fromance); - DECLARE_MACHINE_RESET(fromance); DECLARE_VIDEO_START(nekkyoku); - DECLARE_VIDEO_START(fromance); TIMER_CALLBACK_MEMBER(crtc_interrupt_gen); inline void get_fromance_tile_info(tile_data &tileinfo, int tile_index, int layer); inline void get_nekkyoku_tile_info(tile_data &tileinfo, int tile_index, int layer); diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index 393057579c2..99a4c586c88 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -312,6 +312,7 @@ public: void moonqsr(machine_config &config); void frogger(machine_config &config); void anteatergg(machine_config &config); + void ozon1(machine_config &config); void theend(machine_config &config); void turtles(machine_config &config); void fantastc(machine_config &config); @@ -354,6 +355,7 @@ public: void thepitm(machine_config &config); void skybase(machine_config &config); void kong(machine_config &config); + void bongo(machine_config &config); void scorpnmc(machine_config &config); void fourplay(machine_config &config); void videight(machine_config &config); @@ -367,6 +369,8 @@ protected: void anteatergg_map(address_map &map); void anteateruk_map(address_map &map); void astroamb_map(address_map &map); + void bongo_map(address_map &map); + void bongo_io_map(address_map &map); void checkmaj_sound_map(address_map &map); void checkman_sound_map(address_map &map); void checkman_sound_portmap(address_map &map); @@ -403,6 +407,8 @@ protected: void mshuttle_decrypted_opcodes_map(address_map &map); void mshuttle_map(address_map &map); void mshuttle_portmap(address_map &map); + void ozon1_map(address_map &map); + void ozon1_io_map(address_map &map); void scobra_map(address_map &map); void scorpion_map(address_map &map); void scorpion_sound_map(address_map &map); diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h index ffe07214594..42ecd82e528 100644 --- a/src/mame/includes/galaxold.h +++ b/src/mame/includes/galaxold.h @@ -200,8 +200,6 @@ public: DECLARE_VIDEO_START(dkongjrmc); DECLARE_VIDEO_START(rockclim); DECLARE_VIDEO_START(galaxold_plain); - DECLARE_VIDEO_START(ozon1); - DECLARE_VIDEO_START(bongo); DECLARE_VIDEO_START(ckongs); DECLARE_VIDEO_START(darkplnt); DECLARE_VIDEO_START(rescue); @@ -274,7 +272,6 @@ public: void galaxold_base(machine_config &config); void ckongg(machine_config &config); void _4in1(machine_config &config); - void bongo(machine_config &config); void racknrol(machine_config &config); void hunchbkg(machine_config &config); void videotron(machine_config &config); @@ -293,7 +290,6 @@ public: void porter(machine_config &config); void scramb2(machine_config &config); void scramb3(machine_config &config); - void ozon1(machine_config &config); void mooncrst(machine_config &config); void guttang(machine_config &config); void ckongmc(machine_config &config); @@ -301,8 +297,6 @@ public: void mooncrst_audio(machine_config &config); void _4in1_map(address_map &map); void bagmanmc_map(address_map &map); - void bongo_map(address_map &map); - void bongo_io(address_map &map); void bullsdrtg_data_map(address_map &map); void ckongg_map(address_map &map); void ckongmc_map(address_map &map); @@ -318,8 +312,6 @@ public: void hunchbkg_data(address_map &map); void hustlerb3_map(address_map &map); void mooncrst_map(address_map &map); - void ozon1_io_map(address_map &map); - void ozon1_map(address_map &map); void racknrol_map(address_map &map); void racknrol_io(address_map &map); void rockclim_map(address_map &map); diff --git a/src/mame/includes/playmark.h b/src/mame/includes/playmark.h index e0bc0d5035d..9a89b15c2ce 100644 --- a/src/mame/includes/playmark.h +++ b/src/mame/includes/playmark.h @@ -46,6 +46,9 @@ public: void init_pic_decode(); protected: + virtual void machine_start() override; + virtual void machine_reset() override; + /* memory pointers */ optional_shared_ptr<uint16_t> m_bgvideoram; required_shared_ptr<uint16_t> m_videoram1; @@ -115,8 +118,6 @@ protected: TILE_GET_INFO_MEMBER(bigtwinb_get_tx_tile_info); TILE_GET_INFO_MEMBER(hrdtimes_get_fg_tile_info); TILE_GET_INFO_MEMBER(hrdtimes_get_bg_tile_info); - DECLARE_MACHINE_START(playmark); - DECLARE_MACHINE_RESET(playmark); DECLARE_VIDEO_START(bigtwin); DECLARE_VIDEO_START(bigtwinb); DECLARE_VIDEO_START(wbeachvl); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f174e62f24a..5fcc8387210 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14185,6 +14185,7 @@ azurian // (c) 1982 Rait Electronics Ltd batman2 // bootleg blkhole // TDS (Tokyo Denshi Sekkei) & MINTS bomber // +bongo // (c) 1983 Jetsoft calipso // (c) 1982 Tago catacomb // 1982 MTM Games checkman // (c) 1982 Zilec-Zenitone @@ -14302,6 +14303,7 @@ olmandingc // bootleg (Calfesa) omegab // bootleg omni // bootleg orbitron // (c) 1982 Signatron USA (Arcade Tv Game List - P.160, Left, 22 from top) +ozon1 // (c) 1983 Proma pacmanbl // bootleg pacmanbla // bootleg pacmanblb // bootleg @@ -14399,7 +14401,6 @@ zigzagb2 // (c) 1982 LAX (bootleg) 4in1 // (c) 1981 Armenia / Food and Fun bagmanm2 // (c) 1984 Valadon Automation / GIB bagmanmc // bootleg -bongo // (c) 1983 Jetsoft bullsdrtg // 1985 Senko ckongcv // 19?? Competitive Video? ckongg // 1981 bootleg @@ -14420,7 +14421,6 @@ hexpool // (c) 1986 Shinkia (Senko Kit) hexpoola // (c) 1986 Shinkia (Senko Kit) hunchbkg // (c) 1983 Century hustlerb3 // bootleg -ozon1 // (c) 1983 Proma porter // 1982 bootleg (Arcade TV Game List - P.98, Left, 15 from bottom) portera // bootleg racknrol // (c) 1986 Status (Shinkia license) (Senko Kit) diff --git a/src/mame/video/fromance.cpp b/src/mame/video/fromance.cpp index 605469344a4..902f2c4cf1a 100644 --- a/src/mame/video/fromance.cpp +++ b/src/mame/video/fromance.cpp @@ -103,19 +103,6 @@ VIDEO_START_MEMBER(fromance_state,nekkyoku) init_common(); } -VIDEO_START_MEMBER(fromance_state,pipedrm) -{ - VIDEO_START_CALL_MEMBER(fromance); - m_scrolly_ofs = 0x00; -} - -VIDEO_START_MEMBER(fromance_state,hatris) -{ - VIDEO_START_CALL_MEMBER(fromance); - m_scrollx_ofs = 0xB9; - m_scrolly_ofs = 0x00; -} - /************************************* * * Graphics control register @@ -314,20 +301,3 @@ uint32_t fromance_state::screen_update_fromance(screen_device &screen, bitmap_in m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } - - -uint32_t fromance_state::screen_update_pipedrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - uint8_t* sram = m_spriteram; - - /* there seems to be no logical mapping for the X scroll register -- maybe it's gone */ - m_bg_tilemap->set_scrolly(0, m_scrolly[1]); - m_fg_tilemap->set_scrolly(0, m_scrolly[0]); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 0); - m_spr_old->turbofrc_draw_sprites((uint16_t*)sram, m_spriteram_size, 0, bitmap, cliprect, screen.priority(), 1); - return 0; -} diff --git a/src/mame/video/galaxold.cpp b/src/mame/video/galaxold.cpp index 7f3a46a8238..b1f857df4da 100644 --- a/src/mame/video/galaxold.cpp +++ b/src/mame/video/galaxold.cpp @@ -696,22 +696,6 @@ VIDEO_START_MEMBER(galaxold_state,harem) m_modify_spritecode = &galaxold_state::harem_modify_spritecode; } -VIDEO_START_MEMBER(galaxold_state,ozon1) -{ - VIDEO_START_CALL_MEMBER(galaxold_plain); - - m_bg_tilemap->set_scrolldx(0, 384-256); -} - -VIDEO_START_MEMBER(galaxold_state,bongo) -{ - VIDEO_START_CALL_MEMBER(galaxold_plain); - - m_bg_tilemap->set_scrolldx(0, 384-256); - - m_modify_spritecode = &galaxold_state::batman2_modify_spritecode; -} - TILE_GET_INFO_MEMBER(galaxold_state::dambustr_get_tile_info2) { uint8_t x = tile_index & 0x1f; |