diff --git a/src/mame/drivers/toaplan2.c b/src/mame/drivers/toaplan2.c index 34784b2985c..bf01258e463 100644 --- a/src/mame/drivers/toaplan2.c +++ b/src/mame/drivers/toaplan2.c @@ -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") diff --git a/src/mame/video/gp9001.c b/src/mame/video/gp9001.c index 1dea6c7aefb..813abded4ec 100644 --- a/src/mame/video/gp9001.c +++ b/src/mame/video/gp9001.c @@ -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); } /*************************************************************************** diff --git a/src/mame/video/gp9001.h b/src/mame/video/gp9001.h index 1144e565e51..5593c610450 100644 --- a/src/mame/video/gp9001.h +++ b/src/mame/video/gp9001.h @@ -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 );