silkroad.cpp : Cleanup duplicates, ACCESSING_BITS, Reduce unused (#3713)

This commit is contained in:
cam900 2018-07-03 02:25:58 +09:00 committed by Vas Crabb
parent 7da0bb19d6
commit 87a57056a2
3 changed files with 75 additions and 140 deletions

View File

@ -132,50 +132,51 @@ ROM15.BIN MX29F1610, SOP44 Surface Mounted Mask ROM /
*/ */
WRITE32_MEMBER(silkroad_state::paletteram32_xRRRRRGGGGGBBBBB_dword_w) WRITE8_MEMBER(silkroad_state::okibank_w)
{ {
COMBINE_DATA(&m_generic_paletteram_32[offset]); int bank = (data & 0x3);
m_palette->set_pen_color(offset,pal5bit(m_generic_paletteram_32[offset] >> (10+16)),pal5bit(m_generic_paletteram_32[offset] >> (5+16)),pal5bit(m_generic_paletteram_32[offset] >> (0+16))); if(bank < 3)
m_okibank->set_entry(bank);
} }
WRITE32_MEMBER(silkroad_state::silk_6295_bank_w) WRITE8_MEMBER(silkroad_state::coin_w)
{ {
if (ACCESSING_BITS_24_31) machine().bookkeeping().coin_counter_w(0, data & 0x1);
{ machine().bookkeeping().coin_counter_w(1, data & 0x8);
int bank = (data & 0x3000000) >> 24;
if(bank < 3)
m_oki1->set_rom_bank(bank);
}
} }
WRITE32_MEMBER(silkroad_state::silk_coin_counter_w) template<int Layer>
WRITE32_MEMBER(silkroad_state::vram_w)
{ {
if (ACCESSING_BITS_16_23) COMBINE_DATA(&m_vram[Layer][offset]);
{ m_tilemap[Layer]->mark_tile_dirty(offset);
machine().bookkeeping().coin_counter_w(0, data & 0x10000);
machine().bookkeeping().coin_counter_w(1, data & 0x80000);
}
} }
void silkroad_state::cpu_map(address_map &map) void silkroad_state::cpu_map(address_map &map)
{ {
map(0x000000, 0x1fffff).rom(); map(0x000000, 0x1fffff).rom();
map(0x40c000, 0x40cfff).ram().share("sprram"); // sprites map(0x40c000, 0x40cfff).ram().share("sprram"); // sprites
map(0x600000, 0x603fff).ram().w(FUNC(silkroad_state::paletteram32_xRRRRRGGGGGBBBBB_dword_w)).share("paletteram"); // palette map(0x600000, 0x603fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0xffff0000).share("palette"); // palette
map(0x800000, 0x803fff).ram().w(FUNC(silkroad_state::silkroad_fgram_w)).share("vidram"); // lower Layer map(0x800000, 0x803fff).ram().w(FUNC(silkroad_state::vram_w<0>)).share("vram1"); // lower Layer
map(0x804000, 0x807fff).ram().w(FUNC(silkroad_state::silkroad_fgram2_w)).share("vidram2"); // mid layer map(0x804000, 0x807fff).ram().w(FUNC(silkroad_state::vram_w<1>)).share("vram2"); // mid layer
map(0x808000, 0x80bfff).ram().w(FUNC(silkroad_state::silkroad_fgram3_w)).share("vidram3"); // higher layer map(0x808000, 0x80bfff).ram().w(FUNC(silkroad_state::vram_w<2>)).share("vram3"); // higher layer
map(0xc00000, 0xc00003).portr("INPUTS"); map(0xc00000, 0xc00003).portr("INPUTS");
map(0xc00004, 0xc00007).portr("DSW"); map(0xc00004, 0xc00007).portr("DSW");
map(0xc00025, 0xc00025).rw(m_oki1, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0xc00025, 0xc00025).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xc00028, 0xc0002f).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask32(0x00ff0000); map(0xc00028, 0xc0002f).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask32(0x00ff0000);
map(0xc00031, 0xc00031).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0xc00031, 0xc00031).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xc00034, 0xc00037).w(FUNC(silkroad_state::silk_6295_bank_w)); map(0xc00034, 0xc00034).w(FUNC(silkroad_state::okibank_w));
map(0xc00038, 0xc0003b).w(FUNC(silkroad_state::silk_coin_counter_w)); map(0xc00039, 0xc00039).w(FUNC(silkroad_state::coin_w));
map(0xc0010c, 0xc00123).writeonly().share("regs"); map(0xc0010c, 0xc00123).writeonly().share("regs");
map(0xfe0000, 0xffffff).ram(); map(0xfe0000, 0xffffff).ram();
} }
void silkroad_state::oki_map(address_map &map)
{
map(0x00000, 0x1ffff).rom();
map(0x20000, 0x3ffff).bankr("okibank");
}
static INPUT_PORTS_START( silkroad ) static INPUT_PORTS_START( silkroad )
PORT_START("INPUTS") PORT_START("INPUTS")
@ -274,6 +275,11 @@ static GFXDECODE_START( gfx_silkroad )
GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x6_layout, 0x0000, 256 ) GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x6_layout, 0x0000, 256 )
GFXDECODE_END GFXDECODE_END
void silkroad_state::machine_start()
{
m_okibank->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
}
MACHINE_CONFIG_START(silkroad_state::silkroad) MACHINE_CONFIG_START(silkroad_state::silkroad)
/* basic machine hardware */ /* basic machine hardware */
@ -287,12 +293,13 @@ MACHINE_CONFIG_START(silkroad_state::silkroad)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(6*8+2, 64*8-1-(10*8)-2, 2*8, 32*8-1-(2*8)) MCFG_SCREEN_VISIBLE_AREA(6*8+2, 64*8-1-(10*8)-2, 2*8, 32*8-1-(2*8))
MCFG_SCREEN_UPDATE_DRIVER(silkroad_state, screen_update_silkroad) MCFG_SCREEN_UPDATE_DRIVER(silkroad_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_silkroad) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_silkroad)
MCFG_PALETTE_ADD("palette", 0x2000) MCFG_PALETTE_ADD("palette", 0x2000)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_PALETTE_MEMBITS(16)
/* sound hardware */ /* sound hardware */
SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "lspeaker").front_left();
@ -303,6 +310,7 @@ MACHINE_CONFIG_START(silkroad_state::silkroad)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified (was 1056000) MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'000'000)/32, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified (was 1056000)
MCFG_DEVICE_ADDRESS_MAP(0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.45) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.45)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.45) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.45)
@ -341,20 +349,12 @@ ROM_START( silkroad )
ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 3 ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 3
ROM_LOAD( "rom15.rom15", 0x1600000, 0x0200000, CRC(26a3b168) SHA1(a4b7955cc4d4fbec7c975a9456f2219ef33f1166) ) // 3 ROM_LOAD( "rom15.rom15", 0x1600000, 0x0200000, CRC(26a3b168) SHA1(a4b7955cc4d4fbec7c975a9456f2219ef33f1166) ) // 3
ROM_REGION( 0x080000, "user1", 0 )
ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) )
/* $00000-$20000 stays the same in all sound banks, */ /* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */ /* the second half of the bank is what gets switched */
ROM_REGION( 0xc0000, "oki1", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki1", 0 )
ROM_COPY( "user1", 0x000000, 0x000000, 0x020000) ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) )
ROM_COPY( "user1", 0x020000, 0x020000, 0x020000)
ROM_COPY( "user1", 0x000000, 0x040000, 0x020000)
ROM_COPY( "user1", 0x040000, 0x060000, 0x020000)
ROM_COPY( "user1", 0x000000, 0x080000, 0x020000)
ROM_COPY( "user1", 0x060000, 0x0a0000, 0x020000)
ROM_REGION( 0x080000, "oki2", 0 ) ROM_REGION( 0x040000, "oki2", 0 )
ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) ) ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) )
ROM_END ROM_END
@ -377,20 +377,12 @@ ROM_START( silkroada )
ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 3 ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 3
ROM_LOAD( "rom15.rom15", 0x1600000, 0x0200000, CRC(26a3b168) SHA1(a4b7955cc4d4fbec7c975a9456f2219ef33f1166) ) // 3 ROM_LOAD( "rom15.rom15", 0x1600000, 0x0200000, CRC(26a3b168) SHA1(a4b7955cc4d4fbec7c975a9456f2219ef33f1166) ) // 3
ROM_REGION( 0x080000, "user1", 0 )
ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) )
/* $00000-$20000 stays the same in all sound banks, */ /* $00000-$20000 stays the same in all sound banks, */
/* the second half of the bank is what gets switched */ /* the second half of the bank is what gets switched */
ROM_REGION( 0xc0000, "oki1", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki1", 0 )
ROM_COPY( "user1", 0x000000, 0x000000, 0x020000) ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) )
ROM_COPY( "user1", 0x020000, 0x020000, 0x020000)
ROM_COPY( "user1", 0x000000, 0x040000, 0x020000)
ROM_COPY( "user1", 0x040000, 0x060000, 0x020000)
ROM_COPY( "user1", 0x000000, 0x080000, 0x020000)
ROM_COPY( "user1", 0x060000, 0x0a0000, 0x020000)
ROM_REGION( 0x080000, "oki2", 0 ) ROM_REGION( 0x040000, "oki2", 0 )
ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) ) ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) )
ROM_END ROM_END

View File

@ -9,49 +9,40 @@ public:
silkroad_state(const machine_config &mconfig, device_type type, const char *tag) silkroad_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_oki1(*this, "oki1"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_generic_paletteram_32(*this, "paletteram"), m_vram(*this, "vram%u", 1U),
m_vidram(*this, "vidram"),
m_vidram2(*this, "vidram2"),
m_vidram3(*this, "vidram3"),
m_sprram(*this, "sprram"), m_sprram(*this, "sprram"),
m_regs(*this, "regs") { } m_regs(*this, "regs"),
m_okibank(*this, "okibank")
{ }
void silkroad(machine_config &config); void silkroad(machine_config &config);
private: private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<okim6295_device> m_oki1;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_shared_ptr<uint32_t> m_generic_paletteram_32; required_shared_ptr_array<uint32_t, 3> m_vram;
required_shared_ptr<uint32_t> m_vidram;
required_shared_ptr<uint32_t> m_vidram2;
required_shared_ptr<uint32_t> m_vidram3;
required_shared_ptr<uint32_t> m_sprram; required_shared_ptr<uint32_t> m_sprram;
required_shared_ptr<uint32_t> m_regs; required_shared_ptr<uint32_t> m_regs;
tilemap_t *m_fg_tilemap; required_memory_bank m_okibank;
tilemap_t *m_fg2_tilemap;
tilemap_t *m_fg3_tilemap;
DECLARE_WRITE32_MEMBER(paletteram32_xRRRRRGGGGGBBBBB_dword_w); tilemap_t *m_tilemap[3];
DECLARE_WRITE32_MEMBER(silk_coin_counter_w);
DECLARE_WRITE32_MEMBER(silkroad_fgram_w);
DECLARE_WRITE32_MEMBER(silkroad_fgram2_w);
DECLARE_WRITE32_MEMBER(silkroad_fgram3_w);
DECLARE_WRITE32_MEMBER(silk_6295_bank_w);
TILE_GET_INFO_MEMBER(get_fg_tile_info); DECLARE_WRITE8_MEMBER(coin_w);
TILE_GET_INFO_MEMBER(get_fg2_tile_info); template<int Layer> DECLARE_WRITE32_MEMBER(vram_w);
TILE_GET_INFO_MEMBER(get_fg3_tile_info); DECLARE_WRITE8_MEMBER(okibank_w);
template<int Layer> TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override;
virtual void video_start() override; virtual void video_start() override;
uint32_t screen_update_silkroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void cpu_map(address_map &map); void cpu_map(address_map &map);
void oki_map(address_map &map);
}; };

View File

@ -54,12 +54,12 @@ void silkroad_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
} }
} }
template<int Layer>
TILE_GET_INFO_MEMBER(silkroad_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(silkroad_state::get_tile_info)
{ {
int code = ((m_vidram[tile_index] & 0xffff0000) >> 16 ); int code = ((m_vram[Layer][tile_index] & 0xffff0000) >> 16 );
int color = ((m_vidram[tile_index] & 0x000001f)); int color = ((m_vram[Layer][tile_index] & 0x000001f));
int flipx = ((m_vidram[tile_index] & 0x0000080) >> 7); int flipx = ((m_vram[Layer][tile_index] & 0x0000080) >> 7);
code += 0x18000; code += 0x18000;
@ -69,82 +69,34 @@ TILE_GET_INFO_MEMBER(silkroad_state::get_fg_tile_info)
TILE_FLIPYX(flipx)); TILE_FLIPYX(flipx));
} }
WRITE32_MEMBER(silkroad_state::silkroad_fgram_w)
{
COMBINE_DATA(&m_vidram[offset]);
m_fg_tilemap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(silkroad_state::get_fg2_tile_info)
{
int code = ((m_vidram2[tile_index] & 0xffff0000) >> 16 );
int color = ((m_vidram2[tile_index] & 0x000001f));
int flipx = ((m_vidram2[tile_index] & 0x0000080) >> 7);
code += 0x18000;
SET_TILE_INFO_MEMBER(0,
code,
color,
TILE_FLIPYX(flipx));
}
WRITE32_MEMBER(silkroad_state::silkroad_fgram2_w)
{
COMBINE_DATA(&m_vidram2[offset]);
m_fg2_tilemap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(silkroad_state::get_fg3_tile_info)
{
int code = ((m_vidram3[tile_index] & 0xffff0000) >> 16 );
int color = ((m_vidram3[tile_index] & 0x000001f));
int flipx = ((m_vidram3[tile_index] & 0x0000080) >> 7);
code += 0x18000;
SET_TILE_INFO_MEMBER(0,
code,
color,
TILE_FLIPYX(flipx));
}
WRITE32_MEMBER(silkroad_state::silkroad_fgram3_w)
{
COMBINE_DATA(&m_vidram3[offset]);
m_fg3_tilemap->mark_tile_dirty(offset);
}
void silkroad_state::video_start() void silkroad_state::video_start()
{ {
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silkroad_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silkroad_state::get_tile_info<0>),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_fg2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silkroad_state::get_fg2_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silkroad_state::get_tile_info<1>),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_fg3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silkroad_state::get_fg3_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(silkroad_state::get_tile_info<2>),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
m_fg_tilemap->set_transparent_pen(0); m_tilemap[0]->set_transparent_pen(0);
m_fg2_tilemap->set_transparent_pen(0); m_tilemap[1]->set_transparent_pen(0);
m_fg3_tilemap->set_transparent_pen(0); m_tilemap[2]->set_transparent_pen(0);
} }
uint32_t silkroad_state::screen_update_silkroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t silkroad_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
screen.priority().fill(0, cliprect); screen.priority().fill(0, cliprect);
bitmap.fill(0x7c0, cliprect); bitmap.fill(0x7c0, cliprect);
m_fg_tilemap->set_scrollx(0, ((m_regs[0] & 0xffff0000) >> 16) ); m_tilemap[0]->set_scrollx(0, ((m_regs[0] & 0xffff0000) >> 16) );
m_fg_tilemap->set_scrolly(0, (m_regs[0] & 0x0000ffff) >> 0 ); m_tilemap[0]->set_scrolly(0, (m_regs[0] & 0x0000ffff) >> 0 );
m_fg3_tilemap->set_scrolly(0, (m_regs[1] & 0xffff0000) >> 16 ); m_tilemap[2]->set_scrolly(0, (m_regs[1] & 0xffff0000) >> 16 );
m_fg3_tilemap->set_scrollx(0, (m_regs[2] & 0xffff0000) >> 16 ); m_tilemap[2]->set_scrollx(0, (m_regs[2] & 0xffff0000) >> 16 );
m_fg2_tilemap->set_scrolly(0, ((m_regs[5] & 0xffff0000) >> 16)); m_tilemap[1]->set_scrolly(0, ((m_regs[5] & 0xffff0000) >> 16));
m_fg2_tilemap->set_scrollx(0, (m_regs[2] & 0x0000ffff) >> 0 ); m_tilemap[1]->set_scrollx(0, (m_regs[2] & 0x0000ffff) >> 0 );
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0); m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
m_fg2_tilemap->draw(screen, bitmap, cliprect, 0,1); m_tilemap[1]->draw(screen, bitmap, cliprect, 0,1);
m_fg3_tilemap->draw(screen, bitmap, cliprect, 0,2); m_tilemap[2]->draw(screen, bitmap, cliprect, 0,2);
draw_sprites(screen,bitmap,cliprect); draw_sprites(screen,bitmap,cliprect);
if (0) if (0)