finished modernizing gp9001 [smf]

This commit is contained in:
smf- 2013-06-01 07:59:33 +00:00
parent 0a5ffdd5b0
commit 5e0c3eccc8
3 changed files with 135 additions and 163 deletions

View File

@ -1005,7 +1005,7 @@ static ADDRESS_MAP_START( tekipaki_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x020000, 0x03ffff) AM_ROM // extra for Whoopee
AM_RANGE(0x080000, 0x082fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x180000, 0x180001) AM_READ_PORT("DSWA")
AM_RANGE(0x180010, 0x180011) AM_READ_PORT("DSWB")
AM_RANGE(0x180020, 0x180021) AM_READ_PORT("SYS")
@ -1023,7 +1023,7 @@ static ADDRESS_MAP_START( ghox_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x080000, 0x083fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x100000, 0x100001) AM_READ(ghox_p1_h_analog_r)
AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x180000, 0x180001) AM_READWRITE(ghox_mcu_r, ghox_mcu_w) // really part of shared RAM
AM_RANGE(0x180006, 0x180007) AM_READ_PORT("DSWA")
AM_RANGE(0x180008, 0x180009) AM_READ_PORT("DSWB")
@ -1044,9 +1044,9 @@ static ADDRESS_MAP_START( dogyuun_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) // Coin count/lock + v25 reset line
AM_RANGE(0x210000, 0x21ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE_LEGACY("gp9001vdp1", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE("gp9001vdp1", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r) // test bit 8
ADDRESS_MAP_END
@ -1059,7 +1059,7 @@ static ADDRESS_MAP_START( kbash_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x208014, 0x208015) AM_READ_PORT("IN2")
AM_RANGE(0x208018, 0x208019) AM_READ_PORT("SYS")
AM_RANGE(0x20801c, 0x20801d) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r) // test bit 8
ADDRESS_MAP_END
@ -1081,7 +1081,7 @@ static ADDRESS_MAP_START( kbash2_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x200024, 0x200025) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff)
AM_RANGE(0x200028, 0x200029) AM_WRITE(oki1_bankswitch_w)
AM_RANGE(0x20002c, 0x20002d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
ADDRESS_MAP_END
@ -1089,7 +1089,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( truxton2_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x200000, 0x20000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x200000, 0x20000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x300fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x402000, 0x4021ff) AM_RAM_WRITE(toaplan2_txvideoram16_offs_w) AM_SHARE("txvram_offs")
@ -1114,7 +1114,7 @@ static ADDRESS_MAP_START( pipibibs_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x082fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x190000, 0x190fff) AM_READWRITE(shared_ram_r, shared_ram_w)
AM_RANGE(0x19c01c, 0x19c01d) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x19c020, 0x19c021) AM_READ_PORT("DSWA")
@ -1129,13 +1129,13 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( pipibibi_bootleg_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x082fff) AM_RAM
AM_RANGE(0x083000, 0x0837ff) AM_DEVREADWRITE_LEGACY("gp9001vdp0", pipibibi_bootleg_spriteram16_r, pipibibi_bootleg_spriteram16_w) // SpriteRAM
AM_RANGE(0x083000, 0x0837ff) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, pipibibi_bootleg_spriteram16_r, pipibibi_bootleg_spriteram16_w) // SpriteRAM
AM_RANGE(0x083800, 0x087fff) AM_RAM // SpriteRAM (unused)
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x120000, 0x120fff) AM_RAM // Copy of SpriteRAM ?
// AM_RANGE(0x13f000, 0x13f001) AM_WRITENOP // ???
AM_RANGE(0x180000, 0x182fff) AM_DEVREADWRITE_LEGACY("gp9001vdp0", pipibibi_bootleg_videoram16_r, pipibibi_bootleg_videoram16_w) // TileRAM
AM_RANGE(0x188000, 0x18800f) AM_DEVWRITE_LEGACY("gp9001vdp0", pipibibi_bootleg_scroll_w)
AM_RANGE(0x180000, 0x182fff) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, pipibibi_bootleg_videoram16_r, pipibibi_bootleg_videoram16_w) // TileRAM
AM_RANGE(0x188000, 0x18800f) AM_DEVWRITE("gp9001vdp0", gp9001vdp_device, pipibibi_bootleg_scroll_w)
AM_RANGE(0x190002, 0x190003) AM_READ(shared_ram_r) // Z80 ready ?
AM_RANGE(0x190010, 0x190011) AM_WRITE(shared_ram_w) // Z80 task to perform
AM_RANGE(0x19c01c, 0x19c01d) AM_WRITE(toaplan2_coin_word_w)
@ -1157,7 +1157,7 @@ static ADDRESS_MAP_START( fixeight_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x280000, 0x28ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x5021ff) AM_RAM_WRITE(toaplan2_txvideoram16_offs_w) AM_SHARE("txvram_offs")
@ -1179,7 +1179,7 @@ static ADDRESS_MAP_START( fixeightbl_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x200014, 0x200015) AM_WRITE(fixeightbl_oki_bankswitch_w) // Sound banking. Code at $4084c, $5070
AM_RANGE(0x200018, 0x200019) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
AM_RANGE(0x20001c, 0x20001d) AM_READ_PORT("DSWA")
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x5021ff) AM_RAM_WRITE(toaplan2_txvideoram16_offs_w) AM_SHARE("txvram_offs")
@ -1198,7 +1198,7 @@ static ADDRESS_MAP_START( vfive_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) // Coin count/lock + v25 reset line
AM_RANGE(0x210000, 0x21ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
ADDRESS_MAP_END
@ -1212,9 +1212,9 @@ static ADDRESS_MAP_START( batsugun_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) // Coin count/lock + v25 reset line
AM_RANGE(0x210000, 0x21ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE_LEGACY("gp9001vdp1", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE("gp9001vdp1", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
ADDRESS_MAP_END
@ -1222,7 +1222,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( snowbro2_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x500000, 0x500003) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0x00ff)
AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
@ -1251,7 +1251,7 @@ static ADDRESS_MAP_START( mahoudai_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x401000, 0x4017ff) AM_RAM // Unused palette RAM
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
@ -1275,7 +1275,7 @@ static ADDRESS_MAP_START( shippumd_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x401000, 0x4017ff) AM_RAM // Unused palette RAM
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
@ -1298,7 +1298,7 @@ static ADDRESS_MAP_START( bgaregga_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_txvideoram16_w) AM_SHARE("txvideoram16")
AM_RANGE(0x502000, 0x5021ff) AM_RAM_WRITE(toaplan2_txvideoram16_offs_w) AM_SHARE("txvram_offs")
@ -1319,7 +1319,7 @@ static ADDRESS_MAP_START( batrider_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x203400, 0x207fff) AM_RAM AM_SHARE("mainram16")
AM_RANGE(0x208000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x37ffff) AM_READ(batrider_z80rom_r)
AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_alt_r, gp9001_vdp_alt_w)
AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_alt_r, gp9001_vdp_alt_w)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW")
AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW")
@ -1349,7 +1349,7 @@ static ADDRESS_MAP_START( bbakraid_68k_mem, AS_PROGRAM, 16, toaplan2_state )
AM_RANGE(0x203400, 0x207fff) AM_RAM AM_SHARE("mainram16")
AM_RANGE(0x208000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x33ffff) AM_READ(batrider_z80rom_r)
AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE_LEGACY("gp9001vdp0", gp9001_vdp_alt_r, gp9001_vdp_alt_w)
AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_alt_r, gp9001_vdp_alt_w)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW")
AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW")

View File

@ -148,62 +148,54 @@ Pipi & Bibis | Fix Eight | V-Five | Snow Bros. 2 |
#define GP9001_PRIMASK (0x000e)
static WRITE16_DEVICE_HANDLER( gp9001_bg_tmap_w )
WRITE16_MEMBER( gp9001vdp_device::gp9001_bg_tmap_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
COMBINE_DATA(&vdp->bg.vram16[offset]);
vdp->bg.tmap->mark_tile_dirty(offset/2);
COMBINE_DATA(&bg.vram16[offset]);
bg.tmap->mark_tile_dirty(offset/2);
}
static WRITE16_DEVICE_HANDLER( gp9001_fg_tmap_w )
WRITE16_MEMBER( gp9001vdp_device::gp9001_fg_tmap_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
COMBINE_DATA(&vdp->fg.vram16[offset]);
vdp->fg.tmap->mark_tile_dirty(offset/2);
COMBINE_DATA(&fg.vram16[offset]);
fg.tmap->mark_tile_dirty(offset/2);
}
static WRITE16_DEVICE_HANDLER( gp9001_top_tmap_w )
WRITE16_MEMBER( gp9001vdp_device::gp9001_top_tmap_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
COMBINE_DATA(&vdp->top.vram16[offset]);
vdp->top.tmap->mark_tile_dirty(offset/2);
COMBINE_DATA(&top.vram16[offset]);
top.tmap->mark_tile_dirty(offset/2);
}
static READ16_DEVICE_HANDLER( gp9001_bg_tmap_r )
READ16_MEMBER( gp9001vdp_device::gp9001_bg_tmap_r )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
return vdp->bg.vram16[offset];
return bg.vram16[offset];
}
static READ16_DEVICE_HANDLER( gp9001_fg_tmap_r )
READ16_MEMBER( gp9001vdp_device::gp9001_fg_tmap_r )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
return vdp->fg.vram16[offset];
return fg.vram16[offset];
}
static READ16_DEVICE_HANDLER( gp9001_top_tmap_r )
READ16_MEMBER( gp9001vdp_device::gp9001_top_tmap_r )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
return vdp->top.vram16[offset];
return top.vram16[offset];
}
static READ16_DEVICE_HANDLER( gp9001_spram_r )
READ16_MEMBER( gp9001vdp_device::gp9001_spram_r )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
return vdp->sp.vram16[offset];
return sp.vram16[offset];
}
static WRITE16_DEVICE_HANDLER( gp9001_spram_w )
WRITE16_MEMBER( gp9001vdp_device::gp9001_spram_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
COMBINE_DATA(&vdp->sp.vram16[offset]);
COMBINE_DATA(&sp.vram16[offset]);
}
static ADDRESS_MAP_START( gp9001vdp_map, AS_0, 16, gp9001vdp_device )
AM_RANGE(0x0000, 0x0fff) AM_DEVREADWRITE_LEGACY(DEVICE_SELF, gp9001_bg_tmap_r, gp9001_bg_tmap_w)
AM_RANGE(0x1000, 0x1fff) AM_DEVREADWRITE_LEGACY(DEVICE_SELF, gp9001_fg_tmap_r, gp9001_fg_tmap_w)
AM_RANGE(0x2000, 0x2fff) AM_DEVREADWRITE_LEGACY(DEVICE_SELF, gp9001_top_tmap_r, gp9001_top_tmap_w)
AM_RANGE(0x3000, 0x37ff) AM_DEVREADWRITE_LEGACY(DEVICE_SELF, gp9001_spram_r, gp9001_spram_w)
AM_RANGE(0x0000, 0x0fff) AM_READWRITE(gp9001_bg_tmap_r, gp9001_bg_tmap_w)
AM_RANGE(0x1000, 0x1fff) AM_READWRITE(gp9001_fg_tmap_r, gp9001_fg_tmap_w)
AM_RANGE(0x2000, 0x2fff) AM_READWRITE(gp9001_top_tmap_r, gp9001_top_tmap_w)
AM_RANGE(0x3000, 0x37ff) AM_READWRITE(gp9001_spram_r, gp9001_spram_w)
AM_RANGE(0x3800, 0x3fff) AM_RAM // sprite mirror?
ADDRESS_MAP_END
@ -391,65 +383,43 @@ void gp9001vdp_device::device_reset()
}
static void gp9001_voffs_w(gp9001vdp_device *vdp, offs_t offset, UINT16 data, UINT16 mem_mask)
void gp9001vdp_device::gp9001_voffs_w(offs_t offset, UINT16 data, UINT16 mem_mask)
{
COMBINE_DATA(&vdp->gp9001_voffs);
COMBINE_DATA(&gp9001_voffs);
}
static int gp9001_videoram16_r(gp9001vdp_device *vdp, offs_t offset)
int gp9001vdp_device::gp9001_videoram16_r(offs_t offset)
{
int offs = vdp->gp9001_voffs;
vdp->gp9001_voffs++;
return vdp->space().read_word(offs*2);
int offs = gp9001_voffs;
gp9001_voffs++;
return space().read_word(offs*2);
}
static void gp9001_videoram16_w(gp9001vdp_device *vdp, offs_t offset, UINT16 data, UINT16 mem_mask)
void gp9001vdp_device::gp9001_videoram16_w(offs_t offset, UINT16 data, UINT16 mem_mask)
{
int offs = vdp->gp9001_voffs;
vdp->gp9001_voffs++;
vdp->space().write_word(offs*2, data, mem_mask);
}
static WRITE16_DEVICE_HANDLER( gp9001_devvoffs_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device *)device;
gp9001_voffs_w(vdp, offset, data, mem_mask);
int offs = gp9001_voffs;
gp9001_voffs++;
space().write_word(offs*2, data, mem_mask);
}
static READ16_DEVICE_HANDLER( gp9001_devvideoram16_r )
UINT16 gp9001vdp_device::gp9001_vdpstatus_r()
{
gp9001vdp_device *vdp = (gp9001vdp_device *)device;
return gp9001_videoram16_r(vdp, offset);
return ((machine().primary_screen->vpos() + 15) % 262) >= 245;
}
static WRITE16_DEVICE_HANDLER( gp9001_devvideoram16_w )
void gp9001vdp_device::gp9001_scroll_reg_select_w( offs_t offset, UINT16 data, UINT16 mem_mask )
{
gp9001vdp_device *vdp = (gp9001vdp_device *)device;
gp9001_videoram16_w(vdp, offset, data, mem_mask);
}
static READ16_DEVICE_HANDLER( gp9001_vdpstatus_r )
{
return ((space.machine().primary_screen->vpos() + 15) % 262) >= 245;
}
static WRITE16_DEVICE_HANDLER( gp9001_scroll_reg_select_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device *)device;
if (ACCESSING_BITS_0_7)
{
vdp->gp9001_scroll_reg = data & 0x8f;
gp9001_scroll_reg = data & 0x8f;
if (data & 0x70)
logerror("Hmmm, selecting unknown LSB video control register (%04x) Video controller %01x \n",vdp->gp9001_scroll_reg,vdp->tile_region>>1);
logerror("Hmmm, selecting unknown LSB video control register (%04x) Video controller %01x \n",gp9001_scroll_reg,tile_region>>1);
}
else
{
logerror("Hmmm, selecting unknown MSB video control register (%04x) Video controller %01x \n",vdp->gp9001_scroll_reg,vdp->tile_region>>1);
logerror("Hmmm, selecting unknown MSB video control register (%04x) Video controller %01x \n",gp9001_scroll_reg,tile_region>>1);
}
}
@ -530,7 +500,7 @@ static void gp9001_set_sprite_scrolly_and_flip_reg(gp9001spritelayer* layer, UIN
}
}
static void gp9001_scroll_reg_data_w(gp9001vdp_device *vdp, offs_t offset, UINT16 data, UINT16 mem_mask)
void gp9001vdp_device::gp9001_scroll_reg_data_w(offs_t offset, UINT16 data, UINT16 mem_mask)
{
/************************************************************************/
/***** layer X and Y flips can be set independently, so emulate it ******/
@ -539,21 +509,21 @@ static void gp9001_scroll_reg_data_w(gp9001vdp_device *vdp, offs_t offset, UINT1
//printf("gp9001_scroll_reg_data_w %04x %04x\n", offset, data);
// writes with 8x set turn on flip for the specified layer / axis
int flip = vdp->gp9001_scroll_reg & 0x80;
int flip = gp9001_scroll_reg & 0x80;
switch(vdp->gp9001_scroll_reg&0x7f)
switch(gp9001_scroll_reg&0x7f)
{
case 0x00: gp9001_set_scrollx_and_flip_reg(&vdp->bg, data, mem_mask, flip); break;
case 0x01: gp9001_set_scrolly_and_flip_reg(&vdp->bg, data, mem_mask, flip); break;
case 0x00: gp9001_set_scrollx_and_flip_reg(&bg, data, mem_mask, flip); break;
case 0x01: gp9001_set_scrolly_and_flip_reg(&bg, data, mem_mask, flip); break;
case 0x02: gp9001_set_scrollx_and_flip_reg(&vdp->fg, data, mem_mask, flip); break;
case 0x03: gp9001_set_scrolly_and_flip_reg(&vdp->fg, data, mem_mask, flip); break;
case 0x02: gp9001_set_scrollx_and_flip_reg(&fg, data, mem_mask, flip); break;
case 0x03: gp9001_set_scrolly_and_flip_reg(&fg, data, mem_mask, flip); break;
case 0x04: gp9001_set_scrollx_and_flip_reg(&vdp->top,data, mem_mask, flip); break;
case 0x05: gp9001_set_scrolly_and_flip_reg(&vdp->top,data, mem_mask, flip); break;
case 0x04: gp9001_set_scrollx_and_flip_reg(&top,data, mem_mask, flip); break;
case 0x05: gp9001_set_scrolly_and_flip_reg(&top,data, mem_mask, flip); break;
case 0x06: gp9001_set_sprite_scrollx_and_flip_reg(&vdp->sp, data,mem_mask,flip); break;
case 0x07: gp9001_set_sprite_scrolly_and_flip_reg(&vdp->sp, data,mem_mask,flip); break;
case 0x06: gp9001_set_sprite_scrollx_and_flip_reg(&sp, data,mem_mask,flip); break;
case 0x07: gp9001_set_sprite_scrolly_and_flip_reg(&sp, data,mem_mask,flip); break;
case 0x0e: /******* Initialise video controller register ? *******/
@ -561,7 +531,7 @@ static void gp9001_scroll_reg_data_w(gp9001vdp_device *vdp, offs_t offset, UINT1
case 0x0f: break;
default: logerror("Hmmm, writing %08x to unknown video control register (%08x) Video controller %01x !!!\n",data ,vdp->gp9001_scroll_reg,vdp->tile_region>>1);
default: logerror("Hmmm, writing %08x to unknown video control register (%08x) Video controller %01x !!!\n",data ,gp9001_scroll_reg,tile_region>>1);
break;
}
}
@ -579,24 +549,17 @@ void gp9001vdp_device::init_scroll_regs()
}
static WRITE16_DEVICE_HANDLER( gp9001_scroll_reg_devvdata_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
gp9001_scroll_reg_data_w(vdp, offset, data, mem_mask);
}
READ16_DEVICE_HANDLER( gp9001_vdp_r )
READ16_MEMBER( gp9001vdp_device::gp9001_vdp_r )
{
switch (offset)
{
case 0x04/2:
case 0x06/2:
return gp9001_devvideoram16_r(device, space, offset-0x04/2, mem_mask);
return gp9001_videoram16_r(offset-0x04/2);
case 0x0c/2:
return gp9001_vdpstatus_r(device, space, offset-0x0c/2, mem_mask);
return gp9001_vdpstatus_r();
default:
logerror("gp9001_vdp_r: read from unhandled offset %04x\n",offset*2);
@ -605,25 +568,25 @@ READ16_DEVICE_HANDLER( gp9001_vdp_r )
return 0xffff;
}
WRITE16_DEVICE_HANDLER( gp9001_vdp_w )
WRITE16_MEMBER( gp9001vdp_device::gp9001_vdp_w )
{
switch (offset)
{
case 0x00/2:
gp9001_devvoffs_w(device, space, offset-0x00/2, data, mem_mask);
gp9001_voffs_w(offset-0x00/2, data, mem_mask);
break;
case 0x04/2:
case 0x06/2:
gp9001_devvideoram16_w(device, space, offset-0x04/2, data, mem_mask);
gp9001_videoram16_w(offset-0x04/2, data, mem_mask);
break;
case 0x08/2:
gp9001_scroll_reg_select_w(device, space, offset-0x08/2, data, mem_mask);
gp9001_scroll_reg_select_w(offset-0x08/2, data, mem_mask);
break;
case 0x0c/2:
gp9001_scroll_reg_devvdata_w(device, space, offset-0x0c/2, data, mem_mask);
gp9001_scroll_reg_data_w(offset-0x0c/2, data, mem_mask);
break;
default:
@ -633,16 +596,16 @@ WRITE16_DEVICE_HANDLER( gp9001_vdp_w )
}
/* some raizing games have a different layout */
READ16_DEVICE_HANDLER( gp9001_vdp_alt_r )
READ16_MEMBER( gp9001vdp_device::gp9001_vdp_alt_r )
{
switch (offset)
{
case 0x00/2:
return gp9001_vdpstatus_r(device, space, offset-0x0c/2, mem_mask);
return gp9001_vdpstatus_r();
case 0x08/2:
case 0x0a/2:
return gp9001_devvideoram16_r(device, space, offset-0x04/2, mem_mask);
return gp9001_videoram16_r(offset-0x04/2);
default:
@ -652,25 +615,25 @@ READ16_DEVICE_HANDLER( gp9001_vdp_alt_r )
return 0xffff;
}
WRITE16_DEVICE_HANDLER( gp9001_vdp_alt_w )
WRITE16_MEMBER( gp9001vdp_device::gp9001_vdp_alt_w )
{
switch (offset)
{
case 0x00/2:
gp9001_scroll_reg_devvdata_w(device, space, offset-0x0c/2, data, mem_mask);
gp9001_scroll_reg_data_w(offset-0x0c/2, data, mem_mask);
break;
case 0x04/2:
gp9001_scroll_reg_select_w(device, space, offset-0x08/2, data, mem_mask);
gp9001_scroll_reg_select_w(offset-0x08/2, data, mem_mask);
break;
case 0x08/2:
case 0x0a/2:
gp9001_devvideoram16_w(device, space, offset-0x04/2, data, mem_mask);
gp9001_videoram16_w(offset-0x04/2, data, mem_mask);
break;
case 0x0c/2:
gp9001_devvoffs_w(device, space, offset-0x00/2, data, mem_mask);
gp9001_voffs_w(offset-0x00/2, data, mem_mask);
break;
default:
@ -684,10 +647,8 @@ WRITE16_DEVICE_HANDLER( gp9001_vdp_alt_w )
/***************************************************************************/
/**************** PIPIBIBI bootleg interface into this video driver ********/
WRITE16_DEVICE_HANDLER( pipibibi_bootleg_scroll_w )
WRITE16_MEMBER( gp9001vdp_device::pipibibi_bootleg_scroll_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device *)device;
if (ACCESSING_BITS_8_15 && ACCESSING_BITS_0_7)
{
switch(offset)
@ -703,41 +664,33 @@ WRITE16_DEVICE_HANDLER( pipibibi_bootleg_scroll_w )
default: logerror("PIPIBIBI writing %04x to unknown scroll register %04x",data, offset);
}
vdp->gp9001_scroll_reg = offset;
gp9001_scroll_reg_data_w(vdp, offset, data, mem_mask);
gp9001_scroll_reg = offset;
gp9001_scroll_reg_data_w(offset, data, mem_mask);
}
}
READ16_DEVICE_HANDLER( pipibibi_bootleg_videoram16_r )
READ16_MEMBER( gp9001vdp_device::pipibibi_bootleg_videoram16_r )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
gp9001_voffs_w(vdp, 0, offset, 0xffff);
return gp9001_videoram16_r(vdp, 0);
gp9001_voffs_w(0, offset, 0xffff);
return gp9001_videoram16_r(0);
}
WRITE16_DEVICE_HANDLER( pipibibi_bootleg_videoram16_w )
WRITE16_MEMBER( gp9001vdp_device::pipibibi_bootleg_videoram16_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
gp9001_voffs_w(vdp, 0, offset, 0xffff);
gp9001_videoram16_w(vdp, 0, data, mem_mask);
gp9001_voffs_w(0, offset, 0xffff);
gp9001_videoram16_w(0, data, mem_mask);
}
READ16_DEVICE_HANDLER( pipibibi_bootleg_spriteram16_r )
READ16_MEMBER( gp9001vdp_device::pipibibi_bootleg_spriteram16_r )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
gp9001_voffs_w(vdp, 0, (0x1800 + offset), 0);
return gp9001_videoram16_r(vdp, 0);
gp9001_voffs_w(0, (0x1800 + offset), 0);
return gp9001_videoram16_r(0);
}
WRITE16_DEVICE_HANDLER( pipibibi_bootleg_spriteram16_w )
WRITE16_MEMBER( gp9001vdp_device::pipibibi_bootleg_spriteram16_w )
{
gp9001vdp_device *vdp = (gp9001vdp_device*)device;
gp9001_voffs_w(vdp, 0, (0x1800 + offset), mem_mask);
gp9001_videoram16_w(vdp, 0, data, mem_mask);
gp9001_voffs_w(0, (0x1800 + offset), mem_mask);
gp9001_videoram16_w(0, data, mem_mask);
}
/***************************************************************************

View File

@ -63,6 +63,29 @@ public:
bitmap_ind8 *custom_priority_bitmap;
// access to VDP
DECLARE_READ16_MEMBER( gp9001_vdp_r );
DECLARE_WRITE16_MEMBER( gp9001_vdp_w );
DECLARE_READ16_MEMBER( gp9001_vdp_alt_r );
DECLARE_WRITE16_MEMBER( gp9001_vdp_alt_w );
// this bootleg has strange access
DECLARE_READ16_MEMBER( pipibibi_bootleg_videoram16_r );
DECLARE_WRITE16_MEMBER( pipibibi_bootleg_videoram16_w );
DECLARE_READ16_MEMBER( pipibibi_bootleg_spriteram16_r );
DECLARE_WRITE16_MEMBER( pipibibi_bootleg_spriteram16_w );
DECLARE_WRITE16_MEMBER( pipibibi_bootleg_scroll_w );
// internal handlers
DECLARE_WRITE16_MEMBER( gp9001_bg_tmap_w );
DECLARE_WRITE16_MEMBER( gp9001_fg_tmap_w );
DECLARE_WRITE16_MEMBER( gp9001_top_tmap_w );
DECLARE_READ16_MEMBER( gp9001_bg_tmap_r );
DECLARE_READ16_MEMBER( gp9001_fg_tmap_r );
DECLARE_READ16_MEMBER( gp9001_top_tmap_r );
DECLARE_READ16_MEMBER( gp9001_spram_r );
DECLARE_WRITE16_MEMBER( gp9001_spram_w );
protected:
virtual void device_validity_check(validity_checker &valid) const;
virtual void device_start();
@ -76,6 +99,14 @@ protected:
TILE_GET_INFO_MEMBER(get_top0_tile_info);
TILE_GET_INFO_MEMBER(get_fg0_tile_info);
TILE_GET_INFO_MEMBER(get_bg0_tile_info);
private:
void gp9001_voffs_w(offs_t offset, UINT16 data, UINT16 mem_mask);
int gp9001_videoram16_r(offs_t offset);
void gp9001_videoram16_w(offs_t offset, UINT16 data, UINT16 mem_mask);
UINT16 gp9001_vdpstatus_r();
void gp9001_scroll_reg_select_w( offs_t offset, UINT16 data, UINT16 mem_mask );
void gp9001_scroll_reg_data_w(offs_t offset, UINT16 data, UINT16 mem_mask);
};
extern const device_type GP9001_VDP;
@ -97,15 +128,3 @@ extern const device_type GP9001_VDP;
#define MCFG_DEVICE_ADD_VDP1 \
MCFG_DEVICE_ADD("gp9001vdp1", GP9001_VDP, 0) \
gp9001vdp_device::static_set_gfx_region(*device, 2);
// access to VDP
DECLARE_READ16_DEVICE_HANDLER( gp9001_vdp_r );
DECLARE_WRITE16_DEVICE_HANDLER( gp9001_vdp_w );
DECLARE_READ16_DEVICE_HANDLER( gp9001_vdp_alt_r );
DECLARE_WRITE16_DEVICE_HANDLER( gp9001_vdp_alt_w );
// this bootleg has strange access
DECLARE_READ16_DEVICE_HANDLER ( pipibibi_bootleg_videoram16_r );
DECLARE_WRITE16_DEVICE_HANDLER( pipibibi_bootleg_videoram16_w );
DECLARE_READ16_DEVICE_HANDLER ( pipibibi_bootleg_spriteram16_r );
DECLARE_WRITE16_DEVICE_HANDLER( pipibibi_bootleg_spriteram16_w );
DECLARE_WRITE16_DEVICE_HANDLER( pipibibi_bootleg_scroll_w );