toaplan2.c: fix batrider text layer [Alex Jackson]

This commit is contained in:
Alex W. Jackson 2014-03-01 19:33:23 +00:00
parent 779ba1a5fe
commit 1ae955c3b8
3 changed files with 53 additions and 51 deletions

View File

@ -1076,9 +1076,9 @@ static ADDRESS_MAP_START( truxton2_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x200000, 0x20000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x300fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x402000, 0x402fff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x403000, 0x4031ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x402000, 0x402fff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x403000, 0x4031ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x403200, 0x403fff) AM_RAM
AM_RANGE(0x500000, 0x50ffff) AM_RAM_WRITE(toaplan2_tx_gfxram16_w) AM_SHARE("tx_gfxram16")
AM_RANGE(0x600000, 0x600001) AM_READ(video_count_r)
@ -1143,9 +1143,9 @@ static ADDRESS_MAP_START( fixeight_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x280000, 0x28ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x5021ff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x502000, 0x5021ff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x600000, 0x60ffff) AM_RAM_WRITE(toaplan2_tx_gfxram16_w) AM_SHARE("tx_gfxram16")
AM_RANGE(0x700000, 0x700001) AM_WRITE(fixeight_subcpu_ctrl_w)
AM_RANGE(0x800000, 0x800001) AM_READ(video_count_r)
@ -1165,7 +1165,7 @@ static ADDRESS_MAP_START( fixeightbl_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x20001c, 0x20001d) AM_READ_PORT("DSWA")
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
AM_RANGE(0x800000, 0x87ffff) AM_ROM AM_REGION("maincpu", 0x80000)
ADDRESS_MAP_END
@ -1277,9 +1277,9 @@ static ADDRESS_MAP_START( mahoudai_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x401000, 0x4017ff) AM_RAM // Unused palette RAM
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x503200, 0x503fff) AM_RAM
ADDRESS_MAP_END
@ -1300,9 +1300,9 @@ static ADDRESS_MAP_START( shippumd_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x401000, 0x4017ff) AM_RAM // Unused palette RAM
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x503200, 0x503fff) AM_RAM
ADDRESS_MAP_END
@ -1321,9 +1321,9 @@ static ADDRESS_MAP_START( bgaregga_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x503000, 0x5031ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x503200, 0x503fff) AM_RAM
AM_RANGE(0x600000, 0x600001) AM_WRITE(bgaregga_soundlatch_w)
ADDRESS_MAP_END
@ -1332,10 +1332,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( batrider_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
// actually 200000 - 20ffff is probably all main RAM, and the text and palette RAM are written via DMA
AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x202000, 0x202fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x203000, 0x2031ff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x203200, 0x2033ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x203000, 0x2031ff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x203200, 0x2033ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x203400, 0x207fff) AM_RAM AM_SHARE("mainram16")
AM_RANGE(0x208000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x37ffff) AM_READ(batrider_z80rom_r)
@ -1362,10 +1362,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( bbakraid_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
// actually 200000 - 20ffff is probably all main RAM, and the text and palette RAM are written via DMA
AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
AM_RANGE(0x202000, 0x202fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x203000, 0x2031ff) AM_RAM AM_SHARE("txvram_offs")
AM_RANGE(0x203200, 0x2033ff) AM_RAM_WRITE(toaplan2_txscrollram16_w) AM_SHARE("txscrollram16")
AM_RANGE(0x203000, 0x2031ff) AM_RAM AM_SHARE("tx_lineselect")
AM_RANGE(0x203200, 0x2033ff) AM_RAM_WRITE(toaplan2_tx_linescroll_w) AM_SHARE("tx_linescroll")
AM_RANGE(0x203400, 0x207fff) AM_RAM AM_SHARE("mainram16")
AM_RANGE(0x208000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x33ffff) AM_READ(batrider_z80rom_r)
@ -3073,25 +3073,25 @@ GFXDECODE_END
static GFXDECODE_START( truxton2 )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout , 0, 0x1000 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout , 0, 0x1000 )
GFXDECODE_ENTRY( NULL, 0, truxton2_tx_tilelayout, 0, 128 )
GFXDECODE_ENTRY( NULL, 0, truxton2_tx_tilelayout, 64*16, 64 )
GFXDECODE_END
static GFXDECODE_START( raizing )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 0x1000 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 0x1000 )
GFXDECODE_ENTRY( "gfx2", 0, raizing_textlayout, 0, 128 )
GFXDECODE_ENTRY( "gfx2", 0, raizing_textlayout, 64*16, 64 )
GFXDECODE_END
static GFXDECODE_START( batrider )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 0x1000 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 0x1000 )
GFXDECODE_ENTRY( NULL, 0, batrider_tx_tilelayout, 0, 16 )
GFXDECODE_ENTRY( NULL, 0, batrider_tx_tilelayout, 64*16, 64 )
GFXDECODE_END
static GFXDECODE_START( fixeightbl )
GFXDECODE_ENTRY( "gfx1", 0, tilelayout , 0, 0x1000 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout , 0, 0x1000 )
GFXDECODE_ENTRY( "gfx2", 0, fixeightblayout, 0, 128 )
GFXDECODE_ENTRY( "gfx2", 0, fixeightblayout, 64*16, 64 )
GFXDECODE_END

View File

@ -24,9 +24,10 @@ public:
: driver_device(mconfig, type, tag),
m_shared_ram(*this, "shared_ram"),
m_shared_ram16(*this, "shared_ram16"),
m_txvideoram16(*this, "txvideoram16"),
m_txvideoram16_offs(*this, "txvram_offs"),
m_txscrollram16(*this, "txscrollram16"),
m_paletteram(*this, "palette"),
m_tx_videoram(*this, "tx_videoram"),
m_tx_lineselect(*this, "tx_lineselect"),
m_tx_linescroll(*this, "tx_linescroll"),
m_tx_gfxram16(*this, "tx_gfxram16"),
m_mainram16(*this, "mainram16"),
m_maincpu(*this, "maincpu"),
@ -42,9 +43,10 @@ public:
optional_shared_ptr<UINT8> m_shared_ram; // 8 bit RAM shared between 68K and sound CPU
optional_shared_ptr<UINT16> m_shared_ram16; // Really 8 bit RAM connected to Z180
optional_shared_ptr<UINT16> m_txvideoram16;
optional_shared_ptr<UINT16> m_txvideoram16_offs;
optional_shared_ptr<UINT16> m_txscrollram16;
optional_shared_ptr<UINT16> m_paletteram;
optional_shared_ptr<UINT16> m_tx_videoram;
optional_shared_ptr<UINT16> m_tx_lineselect;
optional_shared_ptr<UINT16> m_tx_linescroll;
optional_shared_ptr<UINT16> m_tx_gfxram16;
optional_shared_ptr<UINT16> m_mainram16;
@ -107,8 +109,8 @@ public:
DECLARE_WRITE8_MEMBER(batrider_clear_nmi_w);
DECLARE_READ16_MEMBER(bbakraid_eeprom_r);
DECLARE_WRITE16_MEMBER(bbakraid_eeprom_w);
DECLARE_WRITE16_MEMBER(toaplan2_txvideoram16_w);
DECLARE_WRITE16_MEMBER(toaplan2_txscrollram16_w);
DECLARE_WRITE16_MEMBER(toaplan2_tx_videoram_w);
DECLARE_WRITE16_MEMBER(toaplan2_tx_linescroll_w);
DECLARE_WRITE16_MEMBER(toaplan2_tx_gfxram16_w);
DECLARE_WRITE16_MEMBER(batrider_textdata_dma_w);
DECLARE_WRITE16_MEMBER(batrider_unknown_dma_w);

View File

@ -38,9 +38,9 @@ TILE_GET_INFO_MEMBER(toaplan2_state::get_text_tile_info)
{
int color, tile_number, attrib;
attrib = m_txvideoram16[tile_index];
attrib = m_tx_videoram[tile_index];
tile_number = attrib & 0x3ff;
color = ((attrib >> 10) | 0x40) & 0x7f;
color = attrib >> 10;
SET_TILE_INFO_MEMBER(m_gfxdecode,
2,
tile_number,
@ -156,19 +156,19 @@ VIDEO_START_MEMBER(toaplan2_state,batrider)
m_vdp0->gp9001_gfxrom_is_banked = 1;
}
WRITE16_MEMBER(toaplan2_state::toaplan2_txvideoram16_w)
WRITE16_MEMBER(toaplan2_state::toaplan2_tx_videoram_w)
{
COMBINE_DATA(&m_txvideoram16[offset]);
COMBINE_DATA(&m_tx_videoram[offset]);
if (offset < 64*32)
m_tx_tilemap->mark_tile_dirty(offset);
}
WRITE16_MEMBER(toaplan2_state::toaplan2_txscrollram16_w)
WRITE16_MEMBER(toaplan2_state::toaplan2_tx_linescroll_w)
{
/*** Line-Scroll RAM for Text Layer ***/
COMBINE_DATA(&m_txscrollram16[offset]);
COMBINE_DATA(&m_tx_linescroll[offset]);
m_tx_tilemap->set_scrollx(offset, m_txscrollram16[offset]);
m_tx_tilemap->set_scrollx(offset, m_tx_linescroll[offset]);
}
WRITE16_MEMBER(toaplan2_state::toaplan2_tx_gfxram16_w)
@ -192,14 +192,14 @@ WRITE16_MEMBER(toaplan2_state::batrider_textdata_dma_w)
UINT16 *dest = m_tx_gfxram16;
memcpy(dest, m_txvideoram16, m_txvideoram16.bytes());
dest += (m_txvideoram16.bytes()/2);
memcpy(dest, m_generic_paletteram_16, m_generic_paletteram_16.bytes());
dest += (m_generic_paletteram_16.bytes()/2);
memcpy(dest, m_txvideoram16_offs, m_txvideoram16_offs.bytes());
dest += (m_txvideoram16_offs.bytes()/2);
memcpy(dest, m_txscrollram16, m_txscrollram16.bytes());
dest += (m_txscrollram16.bytes()/2);
memcpy(dest, m_tx_videoram, m_tx_videoram.bytes());
dest += (m_tx_videoram.bytes()/2);
memcpy(dest, m_paletteram, m_paletteram.bytes());
dest += (m_paletteram.bytes()/2);
memcpy(dest, m_tx_lineselect, m_tx_lineselect.bytes());
dest += (m_tx_lineselect.bytes()/2);
memcpy(dest, m_tx_linescroll, m_tx_linescroll.bytes());
dest += (m_tx_linescroll.bytes()/2);
memcpy(dest, m_mainram16, m_mainram16.bytes());
for (int i = 0; i < 1024; i++)
@ -379,13 +379,13 @@ UINT32 toaplan2_state::screen_update_truxton2(screen_device &screen, bitmap_ind1
/* it seems likely that flipx can be set per line! */
/* however, none of the games does it, and emulating it in the */
/* MAME tilemap system without being ultra slow would be tricky */
m_tx_tilemap->set_flip(m_txvideoram16_offs[0] & 0x8000 ? 0 : TILEMAP_FLIPX);
m_tx_tilemap->set_flip(m_tx_lineselect[0] & 0x8000 ? 0 : TILEMAP_FLIPX);
/* line select is used for 'for use in' and '8ing' screen on bbakraid, 'Raizing' logo on batrider */
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
clip.min_y = clip.max_y = y;
m_tx_tilemap->set_scrolly(0, m_txvideoram16_offs[y] - y);
m_tx_tilemap->set_scrolly(0, m_tx_lineselect[y] - y);
m_tx_tilemap->draw(screen, bitmap, clip, 0);
}
return 0;