mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
jackie.cpp: small cleanups (nw)
This commit is contained in:
parent
c83ea12cab
commit
e430c4d97e
1 changed files with 73 additions and 140 deletions
|
@ -64,11 +64,8 @@ public:
|
|||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_screen(*this, "screen")
|
||||
, m_palette(*this, "palette")
|
||||
, m_bg_scroll2(*this, "bg_scroll2")
|
||||
, m_bg_scroll(*this, "bg_scroll")
|
||||
, m_reel1_ram(*this, "reel1_ram")
|
||||
, m_reel2_ram(*this, "reel2_ram")
|
||||
, m_reel3_ram(*this, "reel3_ram")
|
||||
, m_bg_scroll(*this, "bg_scroll%u", 1U)
|
||||
, m_reel_ram(*this, "reel_ram%u", 1U)
|
||||
, m_fg_tile_ram(*this, "fg_tile_ram")
|
||||
, m_fg_color_ram(*this, "fg_color_ram")
|
||||
, m_led(*this, "led")
|
||||
|
@ -84,37 +81,25 @@ public:
|
|||
private:
|
||||
DECLARE_WRITE8_MEMBER(fg_tile_w);
|
||||
DECLARE_WRITE8_MEMBER(fg_color_w);
|
||||
DECLARE_WRITE8_MEMBER(bg_scroll_w);
|
||||
DECLARE_WRITE8_MEMBER(reel1_ram_w);
|
||||
DECLARE_WRITE8_MEMBER(reel2_ram_w);
|
||||
DECLARE_WRITE8_MEMBER(reel3_ram_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_reg1_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_reg2_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_reg3_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_reg1_hi_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_reg2_hi_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_reg3_hi_w);
|
||||
template<uint8_t Which> DECLARE_WRITE8_MEMBER(reel_ram_w);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(nmi_and_coins_w);
|
||||
DECLARE_WRITE8_MEMBER(lamps_w);
|
||||
DECLARE_READ8_MEMBER(igs_irqack_r);
|
||||
DECLARE_WRITE8_MEMBER(igs_irqack_w);
|
||||
DECLARE_READ8_MEMBER(expram_r);
|
||||
|
||||
void unk_reg_lo_w( int offset, uint8_t data, int reg );
|
||||
void unk_reg_hi_w( int offset, uint8_t data, int reg );
|
||||
template<uint8_t Which> DECLARE_WRITE8_MEMBER(unk_reg_lo_w);
|
||||
template<uint8_t Which> DECLARE_WRITE8_MEMBER(unk_reg_hi_w);
|
||||
void show_out();
|
||||
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_reel1_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_reel2_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_reel3_tile_info);
|
||||
|
||||
template<uint8_t Which> TILE_GET_INFO_MEMBER(get_reel_tile_info);
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(irq);
|
||||
void jackie_io_map(address_map &map);
|
||||
void jackie_prg_map(address_map &map);
|
||||
void io_map(address_map &map);
|
||||
void prg_map(address_map &map);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
@ -125,11 +110,8 @@ private:
|
|||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<uint8_t> m_bg_scroll2;
|
||||
required_shared_ptr<uint8_t> m_bg_scroll;
|
||||
required_shared_ptr<uint8_t> m_reel1_ram;
|
||||
required_shared_ptr<uint8_t> m_reel2_ram;
|
||||
required_shared_ptr<uint8_t> m_reel3_ram;
|
||||
required_shared_ptr_array<uint8_t, 2> m_bg_scroll;
|
||||
required_shared_ptr_array<uint8_t, 3> m_reel_ram;
|
||||
required_shared_ptr<uint8_t> m_fg_tile_ram;
|
||||
required_shared_ptr<uint8_t> m_fg_color_ram;
|
||||
output_finder<> m_led;
|
||||
|
@ -137,9 +119,7 @@ private:
|
|||
|
||||
int m_exp_bank;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_reel1_tilemap;
|
||||
tilemap_t *m_reel2_tilemap;
|
||||
tilemap_t *m_reel3_tilemap;
|
||||
tilemap_t *m_reel_tilemap[3];
|
||||
int m_irq_enable;
|
||||
int m_nmi_enable;
|
||||
int m_bg_enable;
|
||||
|
@ -149,8 +129,6 @@ private:
|
|||
};
|
||||
|
||||
|
||||
|
||||
|
||||
TILE_GET_INFO_MEMBER(jackie_state::get_fg_tile_info)
|
||||
{
|
||||
int code = m_fg_tile_ram[tile_index] | (m_fg_color_ram[tile_index] << 8);
|
||||
|
@ -170,63 +148,28 @@ WRITE8_MEMBER(jackie_state::fg_color_w)
|
|||
m_fg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
WRITE8_MEMBER(jackie_state::bg_scroll_w)
|
||||
template<uint8_t Which>
|
||||
WRITE8_MEMBER(jackie_state::reel_ram_w)
|
||||
{
|
||||
m_bg_scroll[offset] = data;
|
||||
m_reel_ram[Which][offset] = data;
|
||||
m_reel_tilemap[Which]->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(jackie_state::reel1_ram_w)
|
||||
template<uint8_t Which>
|
||||
TILE_GET_INFO_MEMBER(jackie_state::get_reel_tile_info)
|
||||
{
|
||||
m_reel1_ram[offset] = data;
|
||||
m_reel1_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(jackie_state::get_reel1_tile_info)
|
||||
{
|
||||
int code = m_reel1_ram[tile_index];
|
||||
SET_TILE_INFO_MEMBER(1, code, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE8_MEMBER(jackie_state::reel2_ram_w)
|
||||
{
|
||||
m_reel2_ram[offset] = data;
|
||||
m_reel2_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(jackie_state::get_reel2_tile_info)
|
||||
{
|
||||
int code = m_reel2_ram[tile_index];
|
||||
SET_TILE_INFO_MEMBER(1, code, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(jackie_state::reel3_ram_w)
|
||||
{
|
||||
m_reel3_ram[offset] = data;
|
||||
m_reel3_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(jackie_state::get_reel3_tile_info)
|
||||
{
|
||||
int code = m_reel3_ram[tile_index];
|
||||
int code = m_reel_ram[Which][tile_index];
|
||||
SET_TILE_INFO_MEMBER(1, code, 0, 0);
|
||||
}
|
||||
|
||||
void jackie_state::video_start()
|
||||
{
|
||||
m_reel1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8);
|
||||
m_reel2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8);
|
||||
m_reel3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8);
|
||||
m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_reel_tile_info<0>),this),TILEMAP_SCAN_ROWS,8,32, 64, 8);
|
||||
m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_reel_tile_info<1>),this),TILEMAP_SCAN_ROWS,8,32, 64, 8);
|
||||
m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_reel_tile_info<2>),this),TILEMAP_SCAN_ROWS,8,32, 64, 8);
|
||||
|
||||
m_reel1_tilemap->set_scroll_cols(64);
|
||||
m_reel2_tilemap->set_scroll_cols(64);
|
||||
m_reel3_tilemap->set_scroll_cols(64);
|
||||
for (int i = 0; i < 3; i++)
|
||||
m_reel_tilemap[i]->set_scroll_cols(64);
|
||||
|
||||
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(jackie_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_fg_tilemap->set_transparent_pen(0);
|
||||
|
@ -235,38 +178,37 @@ void jackie_state::video_start()
|
|||
|
||||
uint32_t jackie_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int i,j;
|
||||
int startclipmin = 0;
|
||||
const rectangle &visarea = screen.visible_area();
|
||||
|
||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||
|
||||
for (i=0;i < 0x40;i++)
|
||||
for (int i = 0; i < 0x40; i++)
|
||||
{
|
||||
m_reel1_tilemap->set_scrolly(i, m_bg_scroll[i+0x000]);
|
||||
m_reel2_tilemap->set_scrolly(i, m_bg_scroll[i+0x040]);
|
||||
m_reel3_tilemap->set_scrolly(i, m_bg_scroll[i+0x080]);
|
||||
m_reel_tilemap[0]->set_scrolly(i, m_bg_scroll[0][i+0x000]);
|
||||
m_reel_tilemap[1]->set_scrolly(i, m_bg_scroll[0][i+0x040]);
|
||||
m_reel_tilemap[2]->set_scrolly(i, m_bg_scroll[0][i+0x080]);
|
||||
}
|
||||
|
||||
for (j=0; j < 0x100-1; j++)
|
||||
for (int j=0; j < 0x100-1; j++)
|
||||
{
|
||||
rectangle clip;
|
||||
int rowenable = m_bg_scroll2[j];
|
||||
int rowenable = m_bg_scroll[1][j];
|
||||
|
||||
/* draw top of screen */
|
||||
clip.set(visarea.min_x, visarea.max_x, startclipmin, startclipmin+1);
|
||||
|
||||
if (rowenable==0)
|
||||
{
|
||||
m_reel1_tilemap->draw(screen, bitmap, clip, 0,0);
|
||||
m_reel_tilemap[0]->draw(screen, bitmap, clip, 0,0);
|
||||
}
|
||||
else if (rowenable==1)
|
||||
{
|
||||
m_reel2_tilemap->draw(screen, bitmap, clip, 0,0);
|
||||
m_reel_tilemap[1]->draw(screen, bitmap, clip, 0,0);
|
||||
}
|
||||
else if (rowenable==2)
|
||||
{
|
||||
m_reel3_tilemap->draw(screen, bitmap, clip, 0,0);
|
||||
m_reel_tilemap[2]->draw(screen, bitmap, clip, 0,0);
|
||||
}
|
||||
else if (rowenable==3)
|
||||
{
|
||||
|
@ -315,28 +257,22 @@ void jackie_state::show_out()
|
|||
#endif
|
||||
}
|
||||
|
||||
void jackie_state::unk_reg_lo_w( int offset, uint8_t data, int reg )
|
||||
template<uint8_t Which>
|
||||
WRITE8_MEMBER(jackie_state::unk_reg_lo_w)
|
||||
{
|
||||
m_unk_reg[reg][offset] &= 0xff00;
|
||||
m_unk_reg[reg][offset] |= data;
|
||||
m_unk_reg[Which][offset] &= 0xff00;
|
||||
m_unk_reg[Which][offset] |= data;
|
||||
show_out();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(jackie_state::unk_reg1_lo_w){ unk_reg_lo_w( offset, data, 0 ); }
|
||||
WRITE8_MEMBER(jackie_state::unk_reg2_lo_w){ unk_reg_lo_w( offset, data, 1 ); }
|
||||
WRITE8_MEMBER(jackie_state::unk_reg3_lo_w){ unk_reg_lo_w( offset, data, 2 ); }
|
||||
|
||||
void jackie_state::unk_reg_hi_w( int offset, uint8_t data, int reg )
|
||||
template<uint8_t Which>
|
||||
WRITE8_MEMBER(jackie_state::unk_reg_hi_w)
|
||||
{
|
||||
m_unk_reg[reg][offset] &= 0xff;
|
||||
m_unk_reg[reg][offset] |= data << 8;
|
||||
m_unk_reg[Which][offset] &= 0xff;
|
||||
m_unk_reg[Which][offset] |= data << 8;
|
||||
show_out();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(jackie_state::unk_reg1_hi_w){ unk_reg_hi_w( offset, data, 0 ); }
|
||||
WRITE8_MEMBER(jackie_state::unk_reg2_hi_w){ unk_reg_hi_w( offset, data, 1 ); }
|
||||
WRITE8_MEMBER(jackie_state::unk_reg3_hi_w){ unk_reg_hi_w( offset, data, 2 ); }
|
||||
|
||||
WRITE8_MEMBER(jackie_state::nmi_and_coins_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
|
||||
|
@ -402,21 +338,21 @@ READ8_MEMBER(jackie_state::expram_r)
|
|||
}
|
||||
|
||||
|
||||
void jackie_state::jackie_prg_map(address_map &map)
|
||||
void jackie_state::prg_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xefff).rom();
|
||||
map(0xf000, 0xffff).ram().region("maincpu", 0xf000);
|
||||
}
|
||||
|
||||
void jackie_state::jackie_io_map(address_map &map)
|
||||
void jackie_state::io_map(address_map &map)
|
||||
{
|
||||
map(0x0520, 0x0524).w(FUNC(jackie_state::unk_reg1_lo_w));
|
||||
map(0x0d20, 0x0d24).w(FUNC(jackie_state::unk_reg1_hi_w));
|
||||
map(0x0560, 0x0564).w(FUNC(jackie_state::unk_reg2_lo_w));
|
||||
map(0x0d60, 0x0d64).w(FUNC(jackie_state::unk_reg2_hi_w));
|
||||
map(0x05a0, 0x05a4).w(FUNC(jackie_state::unk_reg3_lo_w));
|
||||
map(0x0da0, 0x0da4).w(FUNC(jackie_state::unk_reg3_hi_w));
|
||||
map(0x1000, 0x1107).ram().share("bg_scroll2");
|
||||
map(0x0520, 0x0524).w(FUNC(jackie_state::unk_reg_lo_w<0>));
|
||||
map(0x0d20, 0x0d24).w(FUNC(jackie_state::unk_reg_hi_w<0>));
|
||||
map(0x0560, 0x0564).w(FUNC(jackie_state::unk_reg_lo_w<1>));
|
||||
map(0x0d60, 0x0d64).w(FUNC(jackie_state::unk_reg_hi_w<1>));
|
||||
map(0x05a0, 0x05a4).w(FUNC(jackie_state::unk_reg_lo_w<2>));
|
||||
map(0x0da0, 0x0da4).w(FUNC(jackie_state::unk_reg_hi_w<2>));
|
||||
map(0x1000, 0x1107).ram().share(m_bg_scroll[1]);
|
||||
map(0x2000, 0x27ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
|
||||
map(0x2800, 0x2fff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext");
|
||||
map(0x4000, 0x4000).portr("DSW1"); /* DSW1 */
|
||||
|
@ -429,12 +365,12 @@ void jackie_state::jackie_io_map(address_map &map)
|
|||
map(0x50a0, 0x50a0).portr("BUTTONS2");
|
||||
map(0x50b0, 0x50b1).w("ymsnd", FUNC(ym2413_device::write));
|
||||
map(0x50c0, 0x50c0).r(FUNC(jackie_state::igs_irqack_r)).w(FUNC(jackie_state::igs_irqack_w));
|
||||
map(0x6000, 0x60ff).ram().w(FUNC(jackie_state::bg_scroll_w)).share("bg_scroll");
|
||||
map(0x6800, 0x69ff).ram().w(FUNC(jackie_state::reel1_ram_w)).share("reel1_ram");
|
||||
map(0x6a00, 0x6bff).ram().w(FUNC(jackie_state::reel2_ram_w)).share("reel2_ram");
|
||||
map(0x6c00, 0x6dff).ram().w(FUNC(jackie_state::reel3_ram_w)).share("reel3_ram");
|
||||
map(0x7000, 0x77ff).ram().w(FUNC(jackie_state::fg_tile_w)).share("fg_tile_ram");
|
||||
map(0x7800, 0x7fff).ram().w(FUNC(jackie_state::fg_color_w)).share("fg_color_ram");
|
||||
map(0x6000, 0x60ff).ram().share(m_bg_scroll[0]);
|
||||
map(0x6800, 0x69ff).ram().w(FUNC(jackie_state::reel_ram_w<0>)).share(m_reel_ram[0]);
|
||||
map(0x6a00, 0x6bff).ram().w(FUNC(jackie_state::reel_ram_w<1>)).share(m_reel_ram[1]);
|
||||
map(0x6c00, 0x6dff).ram().w(FUNC(jackie_state::reel_ram_w<2>)).share(m_reel_ram[2]);
|
||||
map(0x7000, 0x77ff).ram().w(FUNC(jackie_state::fg_tile_w)).share(m_fg_tile_ram);
|
||||
map(0x7800, 0x7fff).ram().w(FUNC(jackie_state::fg_color_w)).share(m_fg_color_ram);
|
||||
map(0x8000, 0xffff).r(FUNC(jackie_state::expram_r));
|
||||
}
|
||||
|
||||
|
@ -614,13 +550,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(jackie_state::irq)
|
|||
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(jackie_state::jackie)
|
||||
|
||||
void jackie_state::jackie(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000) / 2)
|
||||
MCFG_DEVICE_PROGRAM_MAP(jackie_prg_map)
|
||||
MCFG_DEVICE_IO_MAP(jackie_io_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", jackie_state, irq, "screen", 0, 1)
|
||||
Z80(config, m_maincpu, XTAL(12'000'000) / 2);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &jackie_state::prg_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &jackie_state::io_map);
|
||||
TIMER(config, "scantimer", 0).configure_scanline(FUNC(jackie_state::irq), "screen", 0, 1);
|
||||
|
||||
i8255_device &ppi1(I8255A(config, "ppi1")); // D8255AC
|
||||
ppi1.out_pa_callback().set(FUNC(jackie_state::nmi_and_coins_w));
|
||||
|
@ -632,24 +568,21 @@ MACHINE_CONFIG_START(jackie_state::jackie)
|
|||
ppi2.out_pb_callback().set(FUNC(jackie_state::lamps_w));
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(57)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(64*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0, 32*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jackie_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_refresh_hz(57);
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
m_screen->set_size(64*8, 32*8);
|
||||
m_screen->set_visarea(0*8, 64*8-1, 0, 32*8-1);
|
||||
m_screen->set_screen_update(FUNC(jackie_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_jackie)
|
||||
MCFG_PALETTE_ADD("palette", 2048)
|
||||
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_jackie);
|
||||
PALETTE(config, m_palette, 2048).set_format(PALETTE_FORMAT_xBBBBBGGGGGRRRRR);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
MCFG_DEVICE_ADD("ymsnd", YM2413, 3579545)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
}
|
||||
|
||||
|
||||
ROM_START( jackie )
|
||||
|
|
Loading…
Reference in a new issue