mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
silkroad.cpp : Cleanup duplicates, ACCESSING_BITS, Reduce unused (#3713)
This commit is contained in:
parent
7da0bb19d6
commit
87a57056a2
@ -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]);
|
||||
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)));
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(silkroad_state::silk_6295_bank_w)
|
||||
{
|
||||
if (ACCESSING_BITS_24_31)
|
||||
{
|
||||
int bank = (data & 0x3000000) >> 24;
|
||||
int bank = (data & 0x3);
|
||||
if(bank < 3)
|
||||
m_oki1->set_rom_bank(bank);
|
||||
}
|
||||
m_okibank->set_entry(bank);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(silkroad_state::silk_coin_counter_w)
|
||||
WRITE8_MEMBER(silkroad_state::coin_w)
|
||||
{
|
||||
if (ACCESSING_BITS_16_23)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x10000);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x80000);
|
||||
}
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x1);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x8);
|
||||
}
|
||||
|
||||
template<int Layer>
|
||||
WRITE32_MEMBER(silkroad_state::vram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_vram[Layer][offset]);
|
||||
m_tilemap[Layer]->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
void silkroad_state::cpu_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x1fffff).rom();
|
||||
map(0x40c000, 0x40cfff).ram().share("sprram"); // sprites
|
||||
map(0x600000, 0x603fff).ram().w(FUNC(silkroad_state::paletteram32_xRRRRRGGGGGBBBBB_dword_w)).share("paletteram"); // palette
|
||||
map(0x800000, 0x803fff).ram().w(FUNC(silkroad_state::silkroad_fgram_w)).share("vidram"); // lower Layer
|
||||
map(0x804000, 0x807fff).ram().w(FUNC(silkroad_state::silkroad_fgram2_w)).share("vidram2"); // mid layer
|
||||
map(0x808000, 0x80bfff).ram().w(FUNC(silkroad_state::silkroad_fgram3_w)).share("vidram3"); // higher layer
|
||||
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::vram_w<0>)).share("vram1"); // lower Layer
|
||||
map(0x804000, 0x807fff).ram().w(FUNC(silkroad_state::vram_w<1>)).share("vram2"); // mid layer
|
||||
map(0x808000, 0x80bfff).ram().w(FUNC(silkroad_state::vram_w<2>)).share("vram3"); // higher layer
|
||||
map(0xc00000, 0xc00003).portr("INPUTS");
|
||||
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(0xc00031, 0xc00031).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0xc00034, 0xc00037).w(FUNC(silkroad_state::silk_6295_bank_w));
|
||||
map(0xc00038, 0xc0003b).w(FUNC(silkroad_state::silk_coin_counter_w));
|
||||
map(0xc00034, 0xc00034).w(FUNC(silkroad_state::okibank_w));
|
||||
map(0xc00039, 0xc00039).w(FUNC(silkroad_state::coin_w));
|
||||
map(0xc0010c, 0xc00123).writeonly().share("regs");
|
||||
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 )
|
||||
PORT_START("INPUTS")
|
||||
@ -274,6 +275,11 @@ static GFXDECODE_START( gfx_silkroad )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x6_layout, 0x0000, 256 )
|
||||
GFXDECODE_END
|
||||
|
||||
void silkroad_state::machine_start()
|
||||
{
|
||||
m_okibank->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(silkroad_state::silkroad)
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -287,12 +293,13 @@ MACHINE_CONFIG_START(silkroad_state::silkroad)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
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_UPDATE_DRIVER(silkroad_state, screen_update_silkroad)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(silkroad_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_silkroad)
|
||||
MCFG_PALETTE_ADD("palette", 0x2000)
|
||||
|
||||
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
|
||||
MCFG_PALETTE_MEMBITS(16)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
@ -303,6 +310,7 @@ MACHINE_CONFIG_START(silkroad_state::silkroad)
|
||||
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_ADDRESS_MAP(0, oki_map)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 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( "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, */
|
||||
/* the second half of the bank is what gets switched */
|
||||
ROM_REGION( 0xc0000, "oki1", 0 ) /* Samples */
|
||||
ROM_COPY( "user1", 0x000000, 0x000000, 0x020000)
|
||||
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, "oki1", 0 )
|
||||
ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) )
|
||||
|
||||
ROM_REGION( 0x080000, "oki2", 0 )
|
||||
ROM_REGION( 0x040000, "oki2", 0 )
|
||||
ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) )
|
||||
ROM_END
|
||||
|
||||
@ -377,20 +377,12 @@ ROM_START( silkroada )
|
||||
ROM_LOAD( "rom11.rom11", 0x0e00000, 0x0200000, CRC(11abaf1c) SHA1(19e86f3ebfec518a96c0520f36cfc1b525e7e55c) ) // 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, */
|
||||
/* the second half of the bank is what gets switched */
|
||||
ROM_REGION( 0xc0000, "oki1", 0 ) /* Samples */
|
||||
ROM_COPY( "user1", 0x000000, 0x000000, 0x020000)
|
||||
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, "oki1", 0 )
|
||||
ROM_LOAD( "rom00.bin", 0x000000, 0x080000, CRC(b10ba7ab) SHA1(a6a3ae71b803af9c31d7e97dc86cfcc123ee9a40) )
|
||||
|
||||
ROM_REGION( 0x080000, "oki2", 0 )
|
||||
ROM_REGION( 0x040000, "oki2", 0 )
|
||||
ROM_LOAD( "rom01.bin", 0x000000, 0x040000, CRC(db8cb455) SHA1(6723b4018208d554bd1bf1e0640b72d2f4f47302) )
|
||||
ROM_END
|
||||
|
||||
|
@ -9,49 +9,40 @@ public:
|
||||
silkroad_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_oki1(*this, "oki1"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_generic_paletteram_32(*this, "paletteram"),
|
||||
m_vidram(*this, "vidram"),
|
||||
m_vidram2(*this, "vidram2"),
|
||||
m_vidram3(*this, "vidram3"),
|
||||
m_vram(*this, "vram%u", 1U),
|
||||
m_sprram(*this, "sprram"),
|
||||
m_regs(*this, "regs") { }
|
||||
m_regs(*this, "regs"),
|
||||
m_okibank(*this, "okibank")
|
||||
{ }
|
||||
|
||||
void silkroad(machine_config &config);
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<okim6295_device> m_oki1;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<uint32_t> m_generic_paletteram_32;
|
||||
required_shared_ptr<uint32_t> m_vidram;
|
||||
required_shared_ptr<uint32_t> m_vidram2;
|
||||
required_shared_ptr<uint32_t> m_vidram3;
|
||||
required_shared_ptr_array<uint32_t, 3> m_vram;
|
||||
required_shared_ptr<uint32_t> m_sprram;
|
||||
required_shared_ptr<uint32_t> m_regs;
|
||||
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_fg2_tilemap;
|
||||
tilemap_t *m_fg3_tilemap;
|
||||
required_memory_bank m_okibank;
|
||||
|
||||
DECLARE_WRITE32_MEMBER(paletteram32_xRRRRRGGGGGBBBBB_dword_w);
|
||||
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);
|
||||
tilemap_t *m_tilemap[3];
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg2_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg3_tile_info);
|
||||
DECLARE_WRITE8_MEMBER(coin_w);
|
||||
template<int Layer> DECLARE_WRITE32_MEMBER(vram_w);
|
||||
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;
|
||||
|
||||
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 cpu_map(address_map &map);
|
||||
void oki_map(address_map &map);
|
||||
};
|
||||
|
@ -54,12 +54,12 @@ void silkroad_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TILE_GET_INFO_MEMBER(silkroad_state::get_fg_tile_info)
|
||||
template<int Layer>
|
||||
TILE_GET_INFO_MEMBER(silkroad_state::get_tile_info)
|
||||
{
|
||||
int code = ((m_vidram[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((m_vidram[tile_index] & 0x000001f));
|
||||
int flipx = ((m_vidram[tile_index] & 0x0000080) >> 7);
|
||||
int code = ((m_vram[Layer][tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((m_vram[Layer][tile_index] & 0x000001f));
|
||||
int flipx = ((m_vram[Layer][tile_index] & 0x0000080) >> 7);
|
||||
|
||||
code += 0x18000;
|
||||
|
||||
@ -69,82 +69,34 @@ TILE_GET_INFO_MEMBER(silkroad_state::get_fg_tile_info)
|
||||
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()
|
||||
{
|
||||
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_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_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[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_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_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_fg2_tilemap->set_transparent_pen(0);
|
||||
m_fg3_tilemap->set_transparent_pen(0);
|
||||
m_tilemap[0]->set_transparent_pen(0);
|
||||
m_tilemap[1]->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);
|
||||
bitmap.fill(0x7c0, cliprect);
|
||||
|
||||
m_fg_tilemap->set_scrollx(0, ((m_regs[0] & 0xffff0000) >> 16) );
|
||||
m_fg_tilemap->set_scrolly(0, (m_regs[0] & 0x0000ffff) >> 0 );
|
||||
m_tilemap[0]->set_scrollx(0, ((m_regs[0] & 0xffff0000) >> 16) );
|
||||
m_tilemap[0]->set_scrolly(0, (m_regs[0] & 0x0000ffff) >> 0 );
|
||||
|
||||
m_fg3_tilemap->set_scrolly(0, (m_regs[1] & 0xffff0000) >> 16 );
|
||||
m_fg3_tilemap->set_scrollx(0, (m_regs[2] & 0xffff0000) >> 16 );
|
||||
m_tilemap[2]->set_scrolly(0, (m_regs[1] & 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_fg2_tilemap->set_scrollx(0, (m_regs[2] & 0x0000ffff) >> 0 );
|
||||
m_tilemap[1]->set_scrolly(0, ((m_regs[5] & 0xffff0000) >> 16));
|
||||
m_tilemap[1]->set_scrollx(0, (m_regs[2] & 0x0000ffff) >> 0 );
|
||||
|
||||
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
||||
m_fg2_tilemap->draw(screen, bitmap, cliprect, 0,1);
|
||||
m_fg3_tilemap->draw(screen, bitmap, cliprect, 0,2);
|
||||
m_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);
|
||||
m_tilemap[1]->draw(screen, bitmap, cliprect, 0,1);
|
||||
m_tilemap[2]->draw(screen, bitmap, cliprect, 0,2);
|
||||
draw_sprites(screen,bitmap,cliprect);
|
||||
|
||||
if (0)
|
||||
|
Loading…
Reference in New Issue
Block a user