champbwl.cpp: removed MACHINE_*_MEMBER macros

This commit is contained in:
Ivan Vangelista 2020-12-23 18:14:32 +01:00
parent 0d77739c27
commit decb135282

View File

@ -162,52 +162,82 @@ Notes:
#include "screen.h" #include "screen.h"
#include "speaker.h" #include "speaker.h"
class champbwl_state : public driver_device
namespace {
class champbwl_base_state : public driver_device
{ {
public: 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), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_seta001(*this, "spritegen"), m_seta001(*this, "spritegen"),
m_palette(*this, "palette"), m_mainbank(*this, "mainbank")
m_x1(*this, "x1snd"), { }
m_hopper(*this, "hopper"),
m_mainbank(*this, "mainbank"), protected:
required_device<cpu_device> m_maincpu;
required_device<seta001_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_fakex(*this, "FAKEX"),
m_fakey(*this, "FAKEY") m_fakey(*this, "FAKEY")
{ } { }
int m_screenflip; void champbwl(machine_config &config);
required_device<cpu_device> m_maincpu; protected:
required_device<seta001_device> m_seta001; virtual void machine_start() override;
required_device<palette_device> m_palette; virtual void machine_reset() override;
required_device<x1_010_device> m_x1;
optional_device<ticket_dispenser_device> m_hopper;
optional_memory_bank m_mainbank;
optional_ioport m_fakex; private:
optional_ioport m_fakey; required_ioport m_fakex;
uint8_t m_last_trackball_val[2]; required_ioport m_fakey;
uint8_t m_last_trackball_val[2];
uint8_t trackball_r(); uint8_t trackball_r();
uint8_t trackball_reset_r(); uint8_t trackball_reset_r();
void champbwl_misc_w(uint8_t data); void misc_w(uint8_t data);
void doraemon_outputs_w(uint8_t data);
DECLARE_MACHINE_START(champbwl); DECLARE_WRITE_LINE_MEMBER(screen_vblank);
DECLARE_MACHINE_RESET(champbwl);
DECLARE_MACHINE_START(doraemon); void prg_map(address_map &map);
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 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<ticket_dispenser_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(); uint8_t const *const color_prom = memregion("proms")->base();
for (int i = 0; i < palette.entries(); i++) 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 champbwl_state::trackball_r()
{ {
uint8_t ret;
uint8_t port4 = m_fakex->read(); uint8_t port4 = m_fakex->read();
uint8_t port5 = m_fakey->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; return ret;
} }
@ -239,7 +267,7 @@ uint8_t champbwl_state::trackball_reset_r()
return 0xff; 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(0, data & 1);
machine().bookkeeping().coin_counter_w(1, data & 2); 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); 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(0x0000, 0x3fff).rom().region("maincpu", 0);
map(0x4000, 0x7fff).bankr("mainbank"); map(0x4000, 0x7fff).bankr(m_mainbank);
map(0x8000, 0x87ff).ram().share("nvram"); map(0x8000, 0x87ff).ram().share("nvram");
map(0xa000, 0xafff).ram().rw(m_seta001, FUNC(seta001_device::spritecodelow_r8), FUNC(seta001_device::spritecodelow_w8)); 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(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(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(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(0xe800, 0xe800).w(m_seta001, FUNC(seta001_device::spritebgflag_w8)); // enable / disable background transparency
map(0xf000, 0xf000).r(FUNC(champbwl_state::trackball_r)); map(0xf000, 0xf000).r(FUNC(champbwl_state::trackball_r));
map(0xf002, 0xf002).portr("IN0"); map(0xf002, 0xf002).portr("IN0");
@ -268,48 +297,47 @@ void champbwl_state::champbwl_map(address_map &map)
map(0xf006, 0xf006).portr("IN2"); map(0xf006, 0xf006).portr("IN2");
map(0xf007, 0xf007).portr("IN3"); map(0xf007, 0xf007).portr("IN3");
map(0xf000, 0xf000).w(FUNC(champbwl_state::champbwl_misc_w)); map(0xf000, 0xf000).w(FUNC(champbwl_state::misc_w));
map(0xf002, 0xf002).nopw(); //buttons light? map(0xf002, 0xf002).nopw(); // buttons light?
map(0xf004, 0xf004).nopw(); //buttons light? map(0xf004, 0xf004).nopw(); // buttons light?
map(0xf006, 0xf006).nopw(); //buttons light? map(0xf006, 0xf006).nopw(); // buttons light?
map(0xf800, 0xf800).nopw(); map(0xf800, 0xf800).nopw();
} }
void doraemon_state::outputs_w(uint8_t data)
void champbwl_state::doraemon_outputs_w(uint8_t data)
{ {
machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); // coin in counter 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_counter_w(1, BIT(data, 1)); // gift out counter
machine().bookkeeping().coin_lockout_w(0, BIT(~data, 3)); // coin lockout machine().bookkeeping().coin_lockout_w(0, BIT(~data, 3)); // coin lockout
m_hopper->motor_w(BIT(~data, 2)); // gift out motor m_hopper->motor_w(BIT(~data, 2)); // gift out motor
m_mainbank->set_entry((data & 0x30) >> 4); m_mainbank->set_entry((data & 0x30) >> 4);
// popmessage("%02x", data); // popmessage("%02x", data);
} }
void champbwl_state::doraemon_map(address_map &map)
void doraemon_state::prg_map(address_map &map)
{ {
map(0x0000, 0x3fff).rom(); map(0x0000, 0x3fff).rom();
map(0x4000, 0x7fff).bankr("mainbank"); map(0x4000, 0x7fff).bankr(m_mainbank);
map(0x8000, 0x87ff).ram().share("nvram"); map(0x8000, 0x87ff).ram().share("nvram");
map(0xa000, 0xafff).ram().rw(m_seta001, FUNC(seta001_device::spritecodelow_r8), FUNC(seta001_device::spritecodelow_w8)); 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(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(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(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(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(0xf000, 0xf000).portr("IN0").w(FUNC(doraemon_state::outputs_w));
map(0xf002, 0xf002).portr("IN1").nopw(); // Ack? map(0xf002, 0xf002).portr("IN1").nopw(); // Ack?
map(0xf004, 0xf004).nopw(); // Ack? map(0xf004, 0xf004).nopw(); // Ack?
map(0xf006, 0xf006).portr("DSW").nopw(); // Ack? map(0xf006, 0xf006).portr("DSW").nopw(); // Ack?
map(0xf800, 0xf800).nopw(); // 0 map(0xf800, 0xf800).nopw(); // 0
} }
static INPUT_PORTS_START( champbwl ) static INPUT_PORTS_START( champbwl )
PORT_START("IN0") PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) 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( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) 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_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 PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(45) PORT_CENTERDELTA(0) PORT_REVERSE
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( doraemon ) static INPUT_PORTS_START( doraemon )
PORT_START("DSW") // f006 PORT_START("DSW") // f006
PORT_DIPNAME( 0x0f, 0x09, "Gift Out" ) PORT_DIPNAME( 0x0f, 0x09, "Gift Out" )
@ -394,9 +420,9 @@ static INPUT_PORTS_START( doraemon )
PORT_DIPSETTING( 0x06, "40 %" ) PORT_DIPSETTING( 0x06, "40 %" )
PORT_DIPSETTING( 0x05, "60 %" ) PORT_DIPSETTING( 0x05, "60 %" )
PORT_DIPSETTING( 0x04, "80 %" ) PORT_DIPSETTING( 0x04, "80 %" )
// PORT_DIPSETTING( 0x03, "100 %" ) PORT_DIPSETTING( 0x03, "100 %" )
// PORT_DIPSETTING( 0x02, "100 %" ) PORT_DIPSETTING( 0x02, "100 %" )
// PORT_DIPSETTING( 0x01, "100 %" ) PORT_DIPSETTING( 0x01, "100 %" )
PORT_DIPSETTING( 0x00, "100 %" ) PORT_DIPSETTING( 0x00, "100 %" )
PORT_DIPNAME( 0x10, 0x10, "Games For 100 Yen" ) PORT_DIPNAME( 0x10, 0x10, "Games For 100 Yen" )
PORT_DIPSETTING( 0x10, "1" ) PORT_DIPSETTING( 0x10, "1" )
@ -433,7 +459,6 @@ static INPUT_PORTS_START( doraemon )
INPUT_PORTS_END INPUT_PORTS_END
static const gfx_layout charlayout = static const gfx_layout charlayout =
{ {
16,16, 16,16,
@ -451,25 +476,23 @@ static GFXDECODE_START( gfx_champbwl )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 )
GFXDECODE_END 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)); 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[0] = 0;
m_last_trackball_val[1] = 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); bitmap.fill(0x1f0, cliprect);
@ -477,7 +500,7 @@ uint32_t champbwl_state::screen_update_champbwl(screen_device &screen, bitmap_in
return 0; return 0;
} }
WRITE_LINE_MEMBER(champbwl_state::screen_vblank_champbwl) WRITE_LINE_MEMBER(champbwl_state::screen_vblank)
{ {
// rising edge // rising edge
if (state) if (state)
@ -487,95 +510,88 @@ WRITE_LINE_MEMBER(champbwl_state::screen_vblank_champbwl)
void champbwl_state::champbwl(machine_config &config) void champbwl_state::champbwl(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
Z80(config, m_maincpu, 16000000/4); /* 4MHz */ Z80(config, m_maincpu, 16_MHz_XTAL / 4); // 4 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::champbwl_map); m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::prg_map);
m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold)); m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
MCFG_MACHINE_START_OVERRIDE(champbwl_state,champbwl) SETA001_SPRITE(config, m_seta001, 16_MHz_XTAL, "palette", gfx_champbwl);
MCFG_MACHINE_RESET_OVERRIDE(champbwl_state,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); // video hardware
m_seta001->set_fg_yoffsets( -0x12, 0x0e );
m_seta001->set_bg_yoffsets( 0x1, -0x1 );
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(57.5); screen.set_refresh_hz(57.5);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 32*8); screen.set_size(64*8, 32*8);
screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1); screen.set_visarea(0*8, 48*8-1, 1*8, 31*8-1);
screen.set_screen_update(FUNC(champbwl_state::screen_update_champbwl)); screen.set_screen_update(FUNC(champbwl_state::screen_update));
screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_champbwl)); screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank));
screen.set_palette(m_palette); 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, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right(); SPEAKER(config, "rspeaker").front_right();
X1_010(config, m_x1, 16000000); x1_010_device &x1snd(X1_010(config, "x1snd", 16_MHz_XTAL));
m_x1->add_route(0, "lspeaker", 1.0); x1snd.add_route(0, "lspeaker", 1.0);
m_x1->add_route(1, "rspeaker", 1.0); x1snd.add_route(1, "rspeaker", 1.0);
} }
WRITE_LINE_MEMBER(doraemon_state::screen_vblank)
WRITE_LINE_MEMBER(champbwl_state::screen_vblank_doraemon)
{ {
// rising edge // rising edge
if (state) if (state)
m_seta001->setac_eof(); m_seta001->setac_eof();
} }
MACHINE_START_MEMBER(champbwl_state,doraemon) void doraemon_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);
} }
void champbwl_state::doraemon(machine_config &config)
void doraemon_state::doraemon(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
Z80(config, m_maincpu, XTAL(14'318'181)/4); Z80(config, m_maincpu, 14.318181_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &champbwl_state::doraemon_map); m_maincpu->set_addrmap(AS_PROGRAM, &doraemon_state::prg_map);
m_maincpu->set_vblank_int("screen", FUNC(champbwl_state::irq0_line_hold)); m_maincpu->set_vblank_int("screen", FUNC(doraemon_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
SETA001_SPRITE(config, m_seta001, 14'318'181, m_palette, gfx_champbwl); SETA001_SPRITE(config, m_seta001, 14.318181_MHz_XTAL, "palette", gfx_champbwl);
m_seta001->set_bg_yoffsets( 0x00, 0x01 ); m_seta001->set_bg_yoffsets(0x00, 0x01);
m_seta001->set_fg_yoffsets( 0x00, 0x10 ); m_seta001->set_fg_yoffsets(0x00, 0x10);
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(2000), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW ); 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_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(320, 256); screen.set_size(320, 256);
screen.set_visarea(0, 320-1, 16, 256-16-1); screen.set_visarea(0, 320-1, 16, 256-16-1);
screen.set_screen_update(FUNC(champbwl_state::screen_update_champbwl)); screen.set_screen_update(FUNC(doraemon_state::screen_update));
screen.screen_vblank().set(FUNC(champbwl_state::screen_vblank_doraemon)); screen.screen_vblank().set(FUNC(doraemon_state::screen_vblank));
screen.set_palette(m_palette); 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(); 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_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_LOAD( "ab001001.u1", 0x00000, 0x10000, CRC(6c6f7675) SHA1(19834f25f2644ae5d156c1e1bbb3fc50cae10fd2) )
ROM_REGION( 0x80000, "gfx1", 0 ) ROM_REGION( 0x80000, "gfx1", 0 )
@ -588,13 +604,13 @@ ROM_START( champbwl )
ROM_LOAD( "ab001008.u26", 0x0000, 0x0200, CRC(30ac8d48) SHA1(af034de3f3b8548534effdf4e3717fe3838b7754) ) ROM_LOAD( "ab001008.u26", 0x0000, 0x0200, CRC(30ac8d48) SHA1(af034de3f3b8548534effdf4e3717fe3838b7754) )
ROM_LOAD( "ab001009.u27", 0x0200, 0x0200, CRC(3bbd4bcd) SHA1(8c87ccc42ece2432b8ad25f8679cdf886e12a43c) ) 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( "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( "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( "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_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_LOAD( "champbwl.nv", 0x000, 0x800, CRC(1d46aa8e) SHA1(a733cf86cfb26d98fb4c491d7f779a7a1c8ff228) )
ROM_END ROM_END
@ -693,5 +709,8 @@ ROM_START( doraemon )
ROM_LOAD( "u27-01.bin", 0x00200, 0x200, CRC(66245fc7) SHA1(c94d9dce7b557c21a3dc1f3f8a1b29594715c994) ) ROM_LOAD( "u27-01.bin", 0x00200, 0x200, CRC(66245fc7) SHA1(c94d9dce7b557c21a3dc1f3f8a1b29594715c994) )
ROM_END 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 } // Anonymous namespace
GAME( 1989, champbwl, 0, champbwl, champbwl, champbwl_state, empty_init, ROT270, "Seta / Romstar Inc.", "Championship Bowling", MACHINE_SUPPORTS_SAVE )
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 )