From decb135282db8463c49b447914d5c8ec1488558f Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 23 Dec 2020 18:14:32 +0100 Subject: [PATCH] champbwl.cpp: removed MACHINE_*_MEMBER macros --- src/mame/drivers/champbwl.cpp | 261 ++++++++++++++++++---------------- 1 file changed, 140 insertions(+), 121 deletions(-) diff --git a/src/mame/drivers/champbwl.cpp b/src/mame/drivers/champbwl.cpp index 5047de71e58..28062894514 100644 --- a/src/mame/drivers/champbwl.cpp +++ b/src/mame/drivers/champbwl.cpp @@ -162,52 +162,82 @@ Notes: #include "screen.h" #include "speaker.h" -class champbwl_state : public driver_device + +namespace { + +class champbwl_base_state : public driver_device { public: - champbwl_state(const machine_config &mconfig, device_type type, const char *tag) : + champbwl_base_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_seta001(*this, "spritegen"), - m_palette(*this, "palette"), - m_x1(*this, "x1snd"), - m_hopper(*this, "hopper"), - m_mainbank(*this, "mainbank"), + m_mainbank(*this, "mainbank") + { } + +protected: + required_device m_maincpu; + required_device m_seta001; + required_memory_bank m_mainbank; + + void palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); +}; + +class champbwl_state : public champbwl_base_state +{ +public: + champbwl_state(const machine_config &mconfig, device_type type, const char *tag) : + champbwl_base_state(mconfig, type, tag), m_fakex(*this, "FAKEX"), m_fakey(*this, "FAKEY") { } - int m_screenflip; + void champbwl(machine_config &config); - required_device m_maincpu; - required_device m_seta001; - required_device m_palette; - required_device m_x1; - optional_device m_hopper; - optional_memory_bank m_mainbank; +protected: + virtual void machine_start() override; + virtual void machine_reset() override; - optional_ioport m_fakex; - optional_ioport m_fakey; - uint8_t m_last_trackball_val[2]; +private: + required_ioport m_fakex; + required_ioport m_fakey; + uint8_t m_last_trackball_val[2]; uint8_t trackball_r(); uint8_t trackball_reset_r(); - void champbwl_misc_w(uint8_t data); - void doraemon_outputs_w(uint8_t data); - DECLARE_MACHINE_START(champbwl); - DECLARE_MACHINE_RESET(champbwl); - DECLARE_MACHINE_START(doraemon); - void champbwl_palette(palette_device &palette) const; - uint32_t screen_update_champbwl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_champbwl); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_doraemon); - void champbwl(machine_config &config); - void doraemon(machine_config &config); - void champbwl_map(address_map &map); - void doraemon_map(address_map &map); + void misc_w(uint8_t data); + + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + + void prg_map(address_map &map); }; -void champbwl_state::champbwl_palette(palette_device &palette) const +class doraemon_state : public champbwl_base_state +{ +public: + doraemon_state(const machine_config &mconfig, device_type type, const char *tag) : + champbwl_base_state(mconfig, type, tag), + m_hopper(*this, "hopper") + { } + + void doraemon(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device m_hopper; + + void outputs_w(uint8_t data); + + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + + void prg_map(address_map &map); +}; + + +void champbwl_base_state::palette(palette_device &palette) const { uint8_t const *const color_prom = memregion("proms")->base(); for (int i = 0; i < palette.entries(); i++) @@ -217,14 +247,12 @@ void champbwl_state::champbwl_palette(palette_device &palette) const } } - uint8_t champbwl_state::trackball_r() { - uint8_t ret; uint8_t port4 = m_fakex->read(); uint8_t port5 = m_fakey->read(); - ret = (((port4 - m_last_trackball_val[0]) & 0x0f)<<4) | ((port5 - m_last_trackball_val[1]) & 0x0f); + uint8_t ret = (((port4 - m_last_trackball_val[0]) & 0x0f) << 4) | ((port5 - m_last_trackball_val[1]) & 0x0f); return ret; } @@ -239,7 +267,7 @@ uint8_t champbwl_state::trackball_reset_r() return 0xff; } -void champbwl_state::champbwl_misc_w(uint8_t data) +void champbwl_state::misc_w(uint8_t data) { machine().bookkeeping().coin_counter_w(0, data & 1); machine().bookkeeping().coin_counter_w(1, data & 2); @@ -250,17 +278,18 @@ void champbwl_state::champbwl_misc_w(uint8_t data) m_mainbank->set_entry((data & 0x30) >> 4); } -void champbwl_state::champbwl_map(address_map &map) + +void champbwl_state::prg_map(address_map &map) { map(0x0000, 0x3fff).rom().region("maincpu", 0); - map(0x4000, 0x7fff).bankr("mainbank"); + map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0x87ff).ram().share("nvram"); map(0xa000, 0xafff).ram().rw(m_seta001, FUNC(seta001_device::spritecodelow_r8), FUNC(seta001_device::spritecodelow_w8)); map(0xb000, 0xbfff).ram().rw(m_seta001, FUNC(seta001_device::spritecodehigh_r8), FUNC(seta001_device::spritecodehigh_w8)); - map(0xc000, 0xdfff).rw(m_x1, FUNC(x1_010_device::read), FUNC(x1_010_device::write)); + map(0xc000, 0xdfff).rw("x1snd", FUNC(x1_010_device::read), FUNC(x1_010_device::write)); map(0xe000, 0xe2ff).ram().rw(m_seta001, FUNC(seta001_device::spriteylow_r8), FUNC(seta001_device::spriteylow_w8)); - map(0xe300, 0xe303).mirror(0xfc).w(m_seta001, FUNC(seta001_device::spritectrl_w8)); /* control registers (0x80 mirror used by Arkanoid 2) */ - map(0xe800, 0xe800).w(m_seta001, FUNC(seta001_device::spritebgflag_w8)); /* enable / disable background transparency */ + map(0xe300, 0xe303).mirror(0xfc).w(m_seta001, FUNC(seta001_device::spritectrl_w8)); // control registers (0x80 mirror used by Arkanoid 2) + map(0xe800, 0xe800).w(m_seta001, FUNC(seta001_device::spritebgflag_w8)); // enable / disable background transparency map(0xf000, 0xf000).r(FUNC(champbwl_state::trackball_r)); map(0xf002, 0xf002).portr("IN0"); @@ -268,48 +297,47 @@ void champbwl_state::champbwl_map(address_map &map) map(0xf006, 0xf006).portr("IN2"); map(0xf007, 0xf007).portr("IN3"); - map(0xf000, 0xf000).w(FUNC(champbwl_state::champbwl_misc_w)); - map(0xf002, 0xf002).nopw(); //buttons light? - map(0xf004, 0xf004).nopw(); //buttons light? - map(0xf006, 0xf006).nopw(); //buttons light? + map(0xf000, 0xf000).w(FUNC(champbwl_state::misc_w)); + map(0xf002, 0xf002).nopw(); // buttons light? + map(0xf004, 0xf004).nopw(); // buttons light? + map(0xf006, 0xf006).nopw(); // buttons light? map(0xf800, 0xf800).nopw(); } - -void champbwl_state::doraemon_outputs_w(uint8_t data) +void doraemon_state::outputs_w(uint8_t data) { machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); // coin in counter machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); // gift out counter - machine().bookkeeping().coin_lockout_w(0, BIT(~data, 3)); // coin lockout - m_hopper->motor_w(BIT(~data, 2)); // gift out motor + machine().bookkeeping().coin_lockout_w(0, BIT(~data, 3)); // coin lockout + m_hopper->motor_w(BIT(~data, 2)); // gift out motor m_mainbank->set_entry((data & 0x30) >> 4); // popmessage("%02x", data); } -void champbwl_state::doraemon_map(address_map &map) + +void doraemon_state::prg_map(address_map &map) { map(0x0000, 0x3fff).rom(); - map(0x4000, 0x7fff).bankr("mainbank"); + map(0x4000, 0x7fff).bankr(m_mainbank); map(0x8000, 0x87ff).ram().share("nvram"); map(0xa000, 0xafff).ram().rw(m_seta001, FUNC(seta001_device::spritecodelow_r8), FUNC(seta001_device::spritecodelow_w8)); map(0xb000, 0xbfff).ram().rw(m_seta001, FUNC(seta001_device::spritecodehigh_r8), FUNC(seta001_device::spritecodehigh_w8)); - map(0xc000, 0xc07f).rw(m_x1, FUNC(x1_010_device::read), FUNC(x1_010_device::write)); // Sound + map(0xc000, 0xc07f).rw("x1snd", FUNC(x1_010_device::read), FUNC(x1_010_device::write)); // Sound map(0xe000, 0xe2ff).ram().rw(m_seta001, FUNC(seta001_device::spriteylow_r8), FUNC(seta001_device::spriteylow_w8)); map(0xe300, 0xe303).w(m_seta001, FUNC(seta001_device::spritectrl_w8)); - map(0xe800, 0xe800).w(m_seta001, FUNC(seta001_device::spritebgflag_w8)); /* enable / disable background transparency */ - map(0xf000, 0xf000).portr("IN0").w(FUNC(champbwl_state::doraemon_outputs_w)); - map(0xf002, 0xf002).portr("IN1").nopw(); // Ack? - map(0xf004, 0xf004).nopw(); // Ack? - map(0xf006, 0xf006).portr("DSW").nopw(); // Ack? - map(0xf800, 0xf800).nopw(); // 0 + map(0xe800, 0xe800).w(m_seta001, FUNC(seta001_device::spritebgflag_w8)); // enable / disable background transparency + map(0xf000, 0xf000).portr("IN0").w(FUNC(doraemon_state::outputs_w)); + map(0xf002, 0xf002).portr("IN1").nopw(); // Ack? + map(0xf004, 0xf004).nopw(); // Ack? + map(0xf006, 0xf006).portr("DSW").nopw(); // Ack? + map(0xf800, 0xf800).nopw(); // 0 } - static INPUT_PORTS_START( champbwl ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) @@ -370,15 +398,13 @@ static INPUT_PORTS_START( champbwl ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("FAKEX") /* FAKE */ + PORT_START("FAKEX") // FAKE PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X )PORT_SENSITIVITY(50) PORT_KEYDELTA(50) PORT_CENTERDELTA(0) - PORT_START("FAKEY") /* FAKE */ + PORT_START("FAKEY") // FAKE PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(45) PORT_CENTERDELTA(0) PORT_REVERSE INPUT_PORTS_END - - static INPUT_PORTS_START( doraemon ) PORT_START("DSW") // f006 PORT_DIPNAME( 0x0f, 0x09, "Gift Out" ) @@ -394,9 +420,9 @@ static INPUT_PORTS_START( doraemon ) PORT_DIPSETTING( 0x06, "40 %" ) PORT_DIPSETTING( 0x05, "60 %" ) PORT_DIPSETTING( 0x04, "80 %" ) -// PORT_DIPSETTING( 0x03, "100 %" ) -// PORT_DIPSETTING( 0x02, "100 %" ) -// PORT_DIPSETTING( 0x01, "100 %" ) + PORT_DIPSETTING( 0x03, "100 %" ) + PORT_DIPSETTING( 0x02, "100 %" ) + PORT_DIPSETTING( 0x01, "100 %" ) PORT_DIPSETTING( 0x00, "100 %" ) PORT_DIPNAME( 0x10, 0x10, "Games For 100 Yen" ) PORT_DIPSETTING( 0x10, "1" ) @@ -433,7 +459,6 @@ static INPUT_PORTS_START( doraemon ) INPUT_PORTS_END - static const gfx_layout charlayout = { 16,16, @@ -451,25 +476,23 @@ static GFXDECODE_START( gfx_champbwl ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) GFXDECODE_END -MACHINE_START_MEMBER(champbwl_state,champbwl) + +void champbwl_state::machine_start() { - uint8_t *ROM = memregion("maincpu")->base(); + uint8_t *rom = memregion("maincpu")->base(); - m_mainbank->configure_entries(0, 4, &ROM[0], 0x4000); + m_mainbank->configure_entries(0, 4, &rom[0], 0x4000); - save_item(NAME(m_screenflip)); save_item(NAME(m_last_trackball_val)); } -MACHINE_RESET_MEMBER(champbwl_state,champbwl) +void champbwl_state::machine_reset() { - m_screenflip = 0; m_last_trackball_val[0] = 0; m_last_trackball_val[1] = 0; - } -uint32_t champbwl_state::screen_update_champbwl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t champbwl_base_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(0x1f0, cliprect); @@ -477,7 +500,7 @@ uint32_t champbwl_state::screen_update_champbwl(screen_device &screen, bitmap_in return 0; } -WRITE_LINE_MEMBER(champbwl_state::screen_vblank_champbwl) +WRITE_LINE_MEMBER(champbwl_state::screen_vblank) { // rising edge if (state) @@ -487,95 +510,88 @@ WRITE_LINE_MEMBER(champbwl_state::screen_vblank_champbwl) void champbwl_state::champbwl(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 16000000/4); /* 4MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::champbwl_map); + // basic machine hardware + Z80(config, m_maincpu, 16_MHz_XTAL / 4); // 4 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::prg_map); m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_MACHINE_START_OVERRIDE(champbwl_state,champbwl) - MCFG_MACHINE_RESET_OVERRIDE(champbwl_state,champbwl) + SETA001_SPRITE(config, m_seta001, 16_MHz_XTAL, "palette", gfx_champbwl); + m_seta001->set_fg_yoffsets(-0x12, 0x0e); + m_seta001->set_bg_yoffsets(0x1, -0x1); - SETA001_SPRITE(config, m_seta001, 16000000, m_palette, gfx_champbwl); - m_seta001->set_fg_yoffsets( -0x12, 0x0e ); - m_seta001->set_bg_yoffsets( 0x1, -0x1 ); - - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(57.5); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 32*8); screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1); - screen.set_screen_update(FUNC(champbwl_state::screen_update_champbwl)); - screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_champbwl)); - screen.set_palette(m_palette); + screen.set_screen_update(FUNC(champbwl_state::screen_update)); + screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank)); + screen.set_palette("palette"); - PALETTE(config, m_palette, FUNC(champbwl_state::champbwl_palette), 512); + PALETTE(config, "palette", FUNC(champbwl_state::palette), 512); - /* sound hardware */ + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - X1_010(config, m_x1, 16000000); - m_x1->add_route(0, "lspeaker", 1.0); - m_x1->add_route(1, "rspeaker", 1.0); + x1_010_device &x1snd(X1_010(config, "x1snd", 16_MHz_XTAL)); + x1snd.add_route(0, "lspeaker", 1.0); + x1snd.add_route(1, "rspeaker", 1.0); } - - -WRITE_LINE_MEMBER(champbwl_state::screen_vblank_doraemon) +WRITE_LINE_MEMBER(doraemon_state::screen_vblank) { // rising edge if (state) m_seta001->setac_eof(); } -MACHINE_START_MEMBER(champbwl_state,doraemon) +void doraemon_state::machine_start() { - uint8_t *ROM = memregion("maincpu")->base(); - m_mainbank->configure_entries(0, 4, &ROM[0], 0x4000); + uint8_t *rom = memregion("maincpu")->base(); + m_mainbank->configure_entries(0, 4, &rom[0], 0x4000); } -void champbwl_state::doraemon(machine_config &config) + +void doraemon_state::doraemon(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(14'318'181)/4); - m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::doraemon_map); - m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold)); + // basic machine hardware + Z80(config, m_maincpu, 14.318181_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &doraemon_state::prg_map); + m_maincpu->set_vblank_int("screen", FUNC(doraemon_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - SETA001_SPRITE(config, m_seta001, 14'318'181, m_palette, gfx_champbwl); - m_seta001->set_bg_yoffsets( 0x00, 0x01 ); - m_seta001->set_fg_yoffsets( 0x00, 0x10 ); + SETA001_SPRITE(config, m_seta001, 14.318181_MHz_XTAL, "palette", gfx_champbwl); + m_seta001->set_bg_yoffsets(0x00, 0x01); + m_seta001->set_fg_yoffsets(0x00, 0x10); TICKET_DISPENSER(config, m_hopper, attotime::from_msec(2000), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW ); - MCFG_MACHINE_START_OVERRIDE(champbwl_state,doraemon) - - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(320, 256); screen.set_visarea(0, 320-1, 16, 256-16-1); - screen.set_screen_update(FUNC(champbwl_state::screen_update_champbwl)); - screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_doraemon)); - screen.set_palette(m_palette); + screen.set_screen_update(FUNC(doraemon_state::screen_update)); + screen.screen_vblank().set(FUNC(doraemon_state::screen_vblank)); + screen.set_palette("palette"); - PALETTE(config, m_palette, FUNC(champbwl_state::champbwl_palette), 512); + PALETTE(config, "palette", FUNC(doraemon_state::palette), 512); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - X1_010(config, m_x1, XTAL(14'318'181)).add_route(ALL_OUTPUTS, "mono", 1.0); + X1_010(config, "x1snd", 14.318181_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); } - ROM_START( champbwl ) - ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 Code */ + ROM_REGION( 0x10000, "maincpu", 0 ) // Z80 Code ROM_LOAD( "ab001001.u1", 0x00000, 0x10000, CRC(6c6f7675) SHA1(19834f25f2644ae5d156c1e1bbb3fc50cae10fd2) ) ROM_REGION( 0x80000, "gfx1", 0 ) @@ -588,13 +604,13 @@ ROM_START( champbwl ) ROM_LOAD( "ab001008.u26", 0x0000, 0x0200, CRC(30ac8d48) SHA1(af034de3f3b8548534effdf4e3717fe3838b7754) ) ROM_LOAD( "ab001009.u27", 0x0200, 0x0200, CRC(3bbd4bcd) SHA1(8c87ccc42ece2432b8ad25f8679cdf886e12a43c) ) - ROM_REGION( 0x100000, "x1snd", 0 ) /* Samples */ + ROM_REGION( 0x100000, "x1snd", 0 ) // Samples ROM_LOAD( "ab002002.2-2", 0x00000, 0x40000, CRC(42ebe997) SHA1(1808b9e5e996a395c1d48ac001067f736f96feec) ) // jingles (for strike, spare etc.) ROM_LOAD( "ab003002.3-2", 0x40000, 0x40000, CRC(7ede8f28) SHA1(b5519c09b4f0019dc76cadca725da1d581912540) ) // basic coin + ball sounds ROM_LOAD( "ab002003.2-3", 0x80000, 0x40000, CRC(3051b8c3) SHA1(5f53596d7af1c79db1dde4bdca3878e07c67b5d1) ) // 'welcome to.. , strike' speech etc. ROM_LOAD( "ab003003.3-3", 0xc0000, 0x40000, CRC(ad40ad10) SHA1(db0e5744ea3fcda87345b545031f82fcb3fec175) ) // 'spare' speech etc. - ROM_REGION( 0x800, "nvram", 0 ) /* default settings, allows game to boot first time without having to reset it */ + ROM_REGION( 0x800, "nvram", 0 ) // default settings, allows game to boot first time without having to reset it ROM_LOAD( "champbwl.nv", 0x000, 0x800, CRC(1d46aa8e) SHA1(a733cf86cfb26d98fb4c491d7f779a7a1c8ff228) ) ROM_END @@ -693,5 +709,8 @@ ROM_START( doraemon ) ROM_LOAD( "u27-01.bin", 0x00200, 0x200, CRC(66245fc7) SHA1(c94d9dce7b557c21a3dc1f3f8a1b29594715c994) ) ROM_END -GAME( 1993?,doraemon, 0, doraemon, doraemon, champbwl_state, empty_init, ROT0, "Sunsoft / Epoch", "Doraemon no Eawase Montage (prototype)", MACHINE_SUPPORTS_SAVE ) // year not shown, datecodes on pcb suggests late-1993 -GAME( 1989, champbwl, 0, champbwl, champbwl, champbwl_state, empty_init, ROT270, "Seta / Romstar Inc.", "Championship Bowling", MACHINE_SUPPORTS_SAVE ) +} // Anonymous namespace + + +GAME( 1993?, doraemon, 0, doraemon, doraemon, doraemon_state, empty_init, ROT0, "Sunsoft / Epoch", "Doraemon no Eawase Montage (prototype)", MACHINE_SUPPORTS_SAVE ) // year not shown, datecodes on pcb suggests late-1993 +GAME( 1989, champbwl, 0, champbwl, champbwl, champbwl_state, empty_init, ROT270, "Seta / Romstar Inc.", "Championship Bowling", MACHINE_SUPPORTS_SAVE )