summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/vgmplay.xml2
-rw-r--r--src/mame/drivers/astrohome.cpp17
-rw-r--r--src/mame/drivers/fromance.cpp21
-rw-r--r--src/mame/drivers/galaxian.cpp232
-rw-r--r--src/mame/drivers/galaxold.cpp245
-rw-r--r--src/mame/drivers/hyprduel.cpp18
-rw-r--r--src/mame/drivers/pipedrm.cpp176
-rw-r--r--src/mame/drivers/playmark.cpp25
-rw-r--r--src/mame/drivers/powerbal.cpp22
-rw-r--r--src/mame/drivers/vgmplay.cpp2
-rw-r--r--src/mame/includes/astrocde.h1
-rw-r--r--src/mame/includes/fromance.h30
-rw-r--r--src/mame/includes/galaxian.h6
-rw-r--r--src/mame/includes/galaxold.h8
-rw-r--r--src/mame/includes/playmark.h5
-rw-r--r--src/mame/mame.lst4
-rw-r--r--src/mame/video/fromance.cpp30
-rw-r--r--src/mame/video/galaxold.cpp16
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;