From 34f4656ccab0c35c2d99701108b0e531bb348cf0 Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Mon, 28 Dec 2009 17:36:00 +0000 Subject: [PATCH] Taito wip: * Fixed TC0100SCN & TC0080VCO device start procedures to avoid pointers to non allocated memory and added missing multiscreen setups * Converted asuka.c, ninjaw.c, othunder.c, taito_h.c, taito_o.c, taitoair.c, warriorb.c and wgp.c to use video devices --- src/mame/drivers/asuka.c | 143 ++++++++++++++++++++---------- src/mame/drivers/ninjaw.c | 107 ++++++++++++++++++----- src/mame/drivers/othunder.c | 26 +++++- src/mame/drivers/taito_h.c | 36 +++++--- src/mame/drivers/taito_o.c | 15 +++- src/mame/drivers/taitoair.c | 15 +++- src/mame/drivers/warriorb.c | 98 +++++++++++++++++---- src/mame/drivers/wgp.c | 35 ++++++-- src/mame/video/asuka.c | 65 +++++--------- src/mame/video/ninjaw.c | 68 +++++---------- src/mame/video/othunder.c | 29 +++---- src/mame/video/taiicdev.c | 94 ++++++-------------- src/mame/video/taiicdev.h | 25 +----- src/mame/video/taito_h.c | 169 +++++++++++++++++------------------- src/mame/video/taito_o.c | 45 +++++----- src/mame/video/taitoair.c | 79 ++++++++--------- src/mame/video/warriorb.c | 64 +++++--------- src/mame/video/wgp.c | 78 ++++++++--------- 18 files changed, 633 insertions(+), 558 deletions(-) diff --git a/src/mame/drivers/asuka.c b/src/mame/drivers/asuka.c index a1f36cfb6d4..bbfffbf6ce9 100644 --- a/src/mame/drivers/asuka.c +++ b/src/mame/drivers/asuka.c @@ -216,7 +216,7 @@ DIP locations verified for: #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" #include "includes/taitoipt.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" @@ -226,9 +226,6 @@ DIP locations verified for: WRITE16_HANDLER( asuka_spritectrl_w ); -VIDEO_START( asuka ); -VIDEO_START( galmedes ); -VIDEO_START( cadash ); VIDEO_UPDATE( asuka ); VIDEO_UPDATE( bonzeadv ); @@ -325,7 +322,7 @@ static ADDRESS_MAP_START( bonzeadv_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_RANGE(0x10c000, 0x10ffff) AM_RAM - AM_RANGE(0x200000, 0x200007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) + AM_RANGE(0x200000, 0x200007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w) AM_RANGE(0x390000, 0x390001) AM_READ_PORT("DSWA") AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w) AM_RANGE(0x3b0000, 0x3b0001) AM_READ_PORT("DSWB") @@ -336,24 +333,24 @@ static ADDRESS_MAP_START( bonzeadv_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x800000, 0x8007ff) AM_READWRITE(bonzeadv_cchip_ram_r, bonzeadv_cchip_ram_w) AM_RANGE(0x800802, 0x800803) AM_READWRITE(bonzeadv_cchip_ctrl_r, bonzeadv_cchip_ctrl_w) AM_RANGE(0x800c00, 0x800c01) AM_WRITE(bonzeadv_cchip_bank_w) - AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ - AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) - AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */ + AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */ ADDRESS_MAP_END static ADDRESS_MAP_START( asuka_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x103fff) AM_RAM AM_RANGE(0x1076f0, 0x1076f1) AM_READNOP /* Mofflott init does dummy reads here */ - AM_RANGE(0x200000, 0x20000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w) AM_RANGE(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w) AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x3e0002, 0x3e0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) - AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ + AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */ AM_RANGE(0xc10000, 0xc103ff) AM_WRITENOP /* error in Asuka init code */ - AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) - AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */ + AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */ ADDRESS_MAP_END static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -364,25 +361,25 @@ static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x107fff) AM_RAM AM_RANGE(0x800000, 0x800fff) AM_RAM /* network ram */ AM_RANGE(0x900000, 0x90000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) - AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_4bpg_word_w) - AM_RANGE(0xb00000, 0xb03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */ - AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ - AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) + AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_4bpg_word_w) + AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */ + AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */ + AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) ADDRESS_MAP_END static ADDRESS_MAP_START( eto_map, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */ AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x10000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) + AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w) AM_RANGE(0x200000, 0x203fff) AM_RAM AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x400000, 0x40000f) AM_DEVREAD8("tc0220ioc", tc0220ioc_r, 0x00ff) /* service mode mirror */ AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w) AM_RANGE(0x4e0000, 0x4e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x4e0002, 0x4e0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) - AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */ - AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* service mode mirror */ - AM_RANGE(0xd00000, 0xd0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ - AM_RANGE(0xd20000, 0xd2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) + AM_RANGE(0xc00000, 0xc03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */ + AM_RANGE(0xc00000, 0xc0ffff) AM_DEVWRITE("tc0100scn", tc0100scn_word_w) + AM_RANGE(0xd00000, 0xd0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */ + AM_RANGE(0xd20000, 0xd2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) ADDRESS_MAP_END @@ -783,9 +780,45 @@ static const msm5205_interface msm5205_config = MACHINE DRIVERS ***********************************************************/ +static const tc0100scn_interface asuka_tc0100scn_intf = +{ + "screen", + 1, 2, /* gfxnum, txnum */ + 0, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const tc0100scn_interface cadash_tc0100scn_intf = +{ + "screen", + 1, 2, /* gfxnum, txnum */ + 1, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const pc090oj_interface asuka_pc090oj_intf = +{ + 0, 0, 8, 0 +}; + +static const pc090oj_interface cadash_pc090oj_intf = +{ + 0, 0, 8, 1 +}; + +static const tc0110pcr_interface asuka_tc0110pcr_intf = +{ + 0 +}; + static VIDEO_EOF( asuka ) { - PC090OJ_eof_callback(); + const device_config *pc090oj = devtag_get_device(machine, "pc090oj"); + pc090oj_eof_callback(pc090oj); } static const tc0220ioc_interface asuka_io_intf = @@ -805,6 +838,9 @@ static MACHINE_DRIVER_START( bonzeadv ) MDRV_CPU_ADD("audiocpu", Z80,4000000) /* sound CPU, also required for test mode */ MDRV_CPU_PROGRAM_MAP(bonzeadv_z80_map) + MDRV_MACHINE_START(asuka) + MDRV_MACHINE_RESET(asuka) + MDRV_QUANTUM_TIME(HZ(600)) /* video hardware */ @@ -817,13 +853,13 @@ static MACHINE_DRIVER_START( bonzeadv ) MDRV_GFXDECODE(asuka) MDRV_PALETTE_LENGTH(4096) - MDRV_MACHINE_START(asuka) - MDRV_MACHINE_RESET(asuka) - - MDRV_VIDEO_START(asuka) MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_UPDATE(bonzeadv) + MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf) + MDRV_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -844,6 +880,9 @@ static MACHINE_DRIVER_START( asuka ) MDRV_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(z80_map) + MDRV_MACHINE_START(asuka) + MDRV_MACHINE_RESET(asuka) + MDRV_QUANTUM_TIME(HZ(600)) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) @@ -858,13 +897,13 @@ static MACHINE_DRIVER_START( asuka ) MDRV_GFXDECODE(asuka) MDRV_PALETTE_LENGTH(4096) - MDRV_MACHINE_START(asuka) - MDRV_MACHINE_RESET(asuka) - - MDRV_VIDEO_START(asuka) MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_UPDATE(asuka) + MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf) + MDRV_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -888,6 +927,9 @@ static MACHINE_DRIVER_START( cadash ) MDRV_CPU_ADD("audiocpu", Z80, XTAL_8MHz/2) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(cadash_z80_map) + MDRV_MACHINE_START(asuka) + MDRV_MACHINE_RESET(asuka) + MDRV_QUANTUM_TIME(HZ(600)) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) @@ -902,13 +944,13 @@ static MACHINE_DRIVER_START( cadash ) MDRV_GFXDECODE(asuka) MDRV_PALETTE_LENGTH(4096) - MDRV_MACHINE_START(asuka) - MDRV_MACHINE_RESET(asuka) - - MDRV_VIDEO_START(cadash) MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_UPDATE(bonzeadv) + MDRV_PC090OJ_ADD("pc090oj", cadash_pc090oj_intf) + MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -928,6 +970,9 @@ static MACHINE_DRIVER_START( mofflott ) MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */ MDRV_CPU_PROGRAM_MAP(z80_map) + MDRV_MACHINE_START(asuka) + MDRV_MACHINE_RESET(asuka) + MDRV_QUANTUM_TIME(HZ(600)) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) @@ -942,13 +987,13 @@ static MACHINE_DRIVER_START( mofflott ) MDRV_GFXDECODE(asuka) MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */ - MDRV_MACHINE_START(asuka) - MDRV_MACHINE_RESET(asuka) - - MDRV_VIDEO_START(galmedes) MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_UPDATE(asuka) + MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf) + MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -972,6 +1017,9 @@ static MACHINE_DRIVER_START( galmedes ) MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */ MDRV_CPU_PROGRAM_MAP(cadash_z80_map) + MDRV_MACHINE_START(asuka) + MDRV_MACHINE_RESET(asuka) + MDRV_QUANTUM_TIME(HZ(600)) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) @@ -986,13 +1034,13 @@ static MACHINE_DRIVER_START( galmedes ) MDRV_GFXDECODE(asuka) MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */ - MDRV_MACHINE_START(asuka) - MDRV_MACHINE_RESET(asuka) - - MDRV_VIDEO_START(galmedes) MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_UPDATE(asuka) + MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf) + MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -1012,6 +1060,9 @@ static MACHINE_DRIVER_START( eto ) MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */ MDRV_CPU_PROGRAM_MAP(cadash_z80_map) + MDRV_MACHINE_START(asuka) + MDRV_MACHINE_RESET(asuka) + MDRV_QUANTUM_TIME(HZ(600)) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) @@ -1026,13 +1077,13 @@ static MACHINE_DRIVER_START( eto ) MDRV_GFXDECODE(asuka) MDRV_PALETTE_LENGTH(4096) - MDRV_MACHINE_START(asuka) - MDRV_MACHINE_RESET(asuka) - - MDRV_VIDEO_START(galmedes) MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_UPDATE(asuka) + MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf) + MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/ninjaw.c b/src/mame/drivers/ninjaw.c index d24cb408cfd..727292a5e0e 100644 --- a/src/mame/drivers/ninjaw.c +++ b/src/mame/drivers/ninjaw.c @@ -314,7 +314,7 @@ rumbling on a subwoofer in the cabinet.) #include "cpu/z80/z80.h" #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" @@ -401,6 +401,17 @@ static WRITE8_HANDLER( ninjaw_pancontrol ) } +WRITE16_HANDLER( tc0100scn_triple_screen_w ) +{ + const device_config *tc0100scn_1 = devtag_get_device(space->machine, "tc0100scn_1"); + const device_config *tc0100scn_2 = devtag_get_device(space->machine, "tc0100scn_2"); + const device_config *tc0100scn_3 = devtag_get_device(space->machine, "tc0100scn_3"); + + tc0100scn_word_w(tc0100scn_1, offset, data, mem_mask); + tc0100scn_word_w(tc0100scn_2, offset, data, mem_mask); + tc0100scn_word_w(tc0100scn_3, offset, data, mem_mask); +} + /*********************************************************** MEMORY STRUCTURES ***********************************************************/ @@ -414,15 +425,15 @@ static ADDRESS_MAP_START( ninjaw_master_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w) AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */ - AM_RANGE(0x2a0000, 0x2a000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w) - AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ - AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w) - AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */ - AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w) - AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */ - AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */ - AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */ + AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */ + AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */ + AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */ + AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */ + AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */ + AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */ ADDRESS_MAP_END // NB there could be conflicts between which cpu writes what to the @@ -435,10 +446,10 @@ static ADDRESS_MAP_START( ninjaw_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") - AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */ - AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */ - AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */ - AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */ + AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */ + AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */ + AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */ + AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */ ADDRESS_MAP_END static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -450,15 +461,15 @@ static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w) AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */ - AM_RANGE(0x2a0000, 0x2a000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w) - AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ - AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w) - AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */ - AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w) - AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */ - AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */ - AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */ + AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */ + AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */ + AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */ + AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */ + AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */ + AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */ ADDRESS_MAP_END static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -468,7 +479,7 @@ static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") - AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */ + AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */ ADDRESS_MAP_END @@ -682,6 +693,40 @@ to the scrolling background. Darius2: arbitrary interleaving of 10 to keep cpus synced. *************************************************************/ +static const tc0100scn_interface darius2_tc0100scn_intf_l = +{ + "lscreen", + 1, 3, /* gfxnum, txnum */ + 22, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const tc0100scn_interface darius2_tc0100scn_intf_m = +{ + "mscreen", + 2, 3, /* gfxnum, txnum */ + 22, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 2, 1 +}; + +static const tc0100scn_interface darius2_tc0100scn_intf_r = +{ + "rscreen", + 2, 3, /* gfxnum, txnum */ + 22, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 4, 1 +}; + +static const tc0110pcr_interface darius2_tc0110pcr_intf_l = { 0 /* pal_offs / 0x1000 */ }; +static const tc0110pcr_interface darius2_tc0110pcr_intf_m = { 1 /* pal_offs / 0x1000 */ }; +static const tc0110pcr_interface darius2_tc0110pcr_intf_r = { 2 /* pal_offs / 0x1000 */ }; + static const tc0220ioc_interface ninjaw_io_intf = { DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), @@ -738,6 +783,13 @@ static MACHINE_DRIVER_START( ninjaw ) MDRV_VIDEO_START(ninjaw) MDRV_VIDEO_UPDATE(ninjaw) + MDRV_TC0100SCN_ADD("tc0100scn_1", darius2_tc0100scn_intf_l) + MDRV_TC0100SCN_ADD("tc0100scn_2", darius2_tc0100scn_intf_m) + MDRV_TC0100SCN_ADD("tc0100scn_3", darius2_tc0100scn_intf_r) + MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2_tc0110pcr_intf_l) + MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2_tc0110pcr_intf_m) + MDRV_TC0110PCR_ADD("tc0110pcr_3", darius2_tc0110pcr_intf_r) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -813,6 +865,13 @@ static MACHINE_DRIVER_START( darius2 ) MDRV_VIDEO_START(ninjaw) MDRV_VIDEO_UPDATE(ninjaw) + MDRV_TC0100SCN_ADD("tc0100scn_1", darius2_tc0100scn_intf_l) + MDRV_TC0100SCN_ADD("tc0100scn_2", darius2_tc0100scn_intf_m) + MDRV_TC0100SCN_ADD("tc0100scn_3", darius2_tc0100scn_intf_r) + MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2_tc0110pcr_intf_l) + MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2_tc0110pcr_intf_m) + MDRV_TC0110PCR_ADD("tc0110pcr_3", darius2_tc0110pcr_intf_r) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/othunder.c b/src/mame/drivers/othunder.c index 4ed720fd34b..86d5c2dda83 100644 --- a/src/mame/drivers/othunder.c +++ b/src/mame/drivers/othunder.c @@ -235,7 +235,7 @@ TODO: #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" #include "machine/eeprom.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" @@ -478,9 +478,9 @@ static ADDRESS_MAP_START( othunder_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x090000, 0x09000f) AM_READWRITE(othunder_tc0220ioc_r, othunder_tc0220ioc_w) // AM_RANGE(0x090006, 0x090007) AM_WRITE(eeprom_w) // AM_RANGE(0x09000c, 0x09000d) AM_WRITENOP /* ?? (keeps writing 0x77) */ - AM_RANGE(0x100000, 0x100007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_rbswap_word_w) /* palette */ - AM_RANGE(0x200000, 0x20ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ - AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) + AM_RANGE(0x100000, 0x100007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_rbswap_word_w) /* palette */ + AM_RANGE(0x200000, 0x20ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */ + AM_RANGE(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) AM_RANGE(0x300000, 0x300003) AM_READWRITE(othunder_sound_r, othunder_sound_w) AM_RANGE(0x400000, 0x4005ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x500000, 0x500007) AM_READWRITE(othunder_lightgun_r, othunder_lightgun_w) @@ -663,6 +663,21 @@ static const ym2610_interface ym2610_config = MACHINE DRIVERS ***********************************************************/ +static const tc0100scn_interface othunder_tc0100scn_intf = +{ + "screen", + 1, 2, /* gfxnum, txnum */ + 4, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const tc0110pcr_interface othunder_tc0110pcr_intf = +{ + 0 +}; + static const tc0220ioc_interface othunder_io_intf = { DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), @@ -701,6 +716,9 @@ static MACHINE_DRIVER_START( othunder ) MDRV_VIDEO_START(othunder) MDRV_VIDEO_UPDATE(othunder) + MDRV_TC0100SCN_ADD("tc0100scn", othunder_tc0100scn_intf) + MDRV_TC0110PCR_ADD("tc0110pcr", othunder_tc0110pcr_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/taito_h.c b/src/mame/drivers/taito_h.c index 0b55a5610d8..fc053de9922 100644 --- a/src/mame/drivers/taito_h.c +++ b/src/mame/drivers/taito_h.c @@ -139,18 +139,16 @@ some kind of zoom table? ****************************************************************************/ - #include "driver.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" #include "includes/taitoipt.h" #include "audio/taitosnd.h" #include "machine/taitoio.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "sound/2610intf.h" - /*************************************************************************** Variable @@ -159,9 +157,6 @@ some kind of zoom table? static UINT16 *taitoh_68000_mainram; -VIDEO_START( syvalion ); -VIDEO_START( recordbr ); -VIDEO_START( dleague ); VIDEO_UPDATE( syvalion ); VIDEO_UPDATE( recordbr ); VIDEO_UPDATE( dleague ); @@ -274,7 +269,7 @@ static ADDRESS_MAP_START( syvalion_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) - AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) + AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) ADDRESS_MAP_END @@ -285,7 +280,7 @@ static ADDRESS_MAP_START( recordbr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) - AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) + AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) ADDRESS_MAP_END @@ -295,7 +290,7 @@ static ADDRESS_MAP_START( dleague_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) - AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) + AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* ?? writes zero once per frame */ ADDRESS_MAP_END @@ -546,6 +541,20 @@ static MACHINE_START( taitoh ) } +static const tc0080vco_interface syvalion_tc0080vco_intf = +{ + 0, 1, /* gfxnum, txnum */ + 1, 1, -2, + 1 +}; + +static const tc0080vco_interface recordbr_tc0080vco_intf = +{ + 0, 1, /* gfxnum, txnum */ + 1, 1, -2, + 0 +}; + static const tc0220ioc_interface taitoh_io_intf = { DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), @@ -580,9 +589,10 @@ static MACHINE_DRIVER_START( syvalion ) MDRV_GFXDECODE(syvalion) MDRV_PALETTE_LENGTH(33*16) - MDRV_VIDEO_START(syvalion) MDRV_VIDEO_UPDATE(syvalion) + MDRV_TC0080VCO_ADD("tc0080vco", syvalion_tc0080vco_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -622,9 +632,10 @@ static MACHINE_DRIVER_START( recordbr ) MDRV_GFXDECODE(recordbr) MDRV_PALETTE_LENGTH(32*16) - MDRV_VIDEO_START(recordbr) MDRV_VIDEO_UPDATE(recordbr) + MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -664,9 +675,10 @@ static MACHINE_DRIVER_START( dleague ) MDRV_GFXDECODE(dleague) MDRV_PALETTE_LENGTH(33*16) - MDRV_VIDEO_START(dleague) MDRV_VIDEO_UPDATE(dleague) + MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/taito_o.c b/src/mame/drivers/taito_o.c index 58521bae290..706406c35a2 100644 --- a/src/mame/drivers/taito_o.c +++ b/src/mame/drivers/taito_o.c @@ -32,12 +32,11 @@ TODO: #include "deprecat.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "sound/2203intf.h" static const int clear_hack=1; -VIDEO_START( parentj ); VIDEO_UPDATE( parentj ); static WRITE16_HANDLER(io_w) @@ -67,7 +66,7 @@ static ADDRESS_MAP_START( parentj_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM AM_RANGE(0x200000, 0x20000f) AM_READWRITE(io_r, io_w) /* TC0220IOC ? */ AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymsnd", ym2203_r, ym2203_w, 0x00ff) - AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) + AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) ADDRESS_MAP_END @@ -232,6 +231,13 @@ static const ym2203_interface ym2203_config = NULL }; +static const tc0080vco_interface parentj_intf = +{ + 0, 1, /* gfxnum, txnum */ + 1, 1, -2, + 0 +}; + static MACHINE_DRIVER_START( parentj ) @@ -249,9 +255,10 @@ static MACHINE_DRIVER_START( parentj ) MDRV_GFXDECODE(parentj) MDRV_PALETTE_LENGTH(33*16) - MDRV_VIDEO_START(parentj) MDRV_VIDEO_UPDATE(parentj) + MDRV_TC0080VCO_ADD("tc0080vco", parentj_intf) + MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD("ymsnd", YM2203, 2000000) /*?? MHz */ diff --git a/src/mame/drivers/taitoair.c b/src/mame/drivers/taitoair.c index c139d2e2c5d..c5e0c762867 100644 --- a/src/mame/drivers/taitoair.c +++ b/src/mame/drivers/taitoair.c @@ -220,7 +220,7 @@ cpu #2 (PC=0000060E): unmapped memory word read from 0000683A & FFFF #include "cpu/m68000/m68000.h" #include "includes/taitoipt.h" #include "audio/taitosnd.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "machine/taitoio.h" #include "cpu/tms32025/tms32025.h" #include "sound/2610intf.h" @@ -231,7 +231,6 @@ static UINT16 *taitoh_68000_mainram; UINT16 *taitoair_line_ram; static UINT16 *dsp_ram; /* Shared 68000/TMS32025 RAM */ -VIDEO_START( taitoair ); VIDEO_UPDATE( taitoair ); @@ -383,7 +382,7 @@ static ADDRESS_MAP_START( airsys_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x183fff) AM_RAM /* "gradiation ram (0)" */ AM_RANGE(0x184000, 0x187fff) AM_RAM /* "gradiation ram (1)" */ AM_RANGE(0x188000, 0x18bfff) AM_RAM_WRITE(airsys_paletteram16_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x800000, 0x820fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) /* tilemaps, sprites */ + AM_RANGE(0x800000, 0x820fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) /* tilemaps, sprites */ AM_RANGE(0x908000, 0x90ffff) AM_RAM AM_BASE(&taitoair_line_ram) /* "line ram" */ AM_RANGE(0x910000, 0x91ffff) AM_RAM AM_BASE(&dsp_ram) /* "dsp common ram" (TMS320C25) */ AM_RANGE(0xa00000, 0xa00007) AM_READ(stick_input_r) @@ -596,6 +595,13 @@ static const ym2610_interface airsys_ym2610_interface = MACHINE DRIVERS ************************************************************/ +static const tc0080vco_interface airsys_tc0080vco_intf = +{ + 0, 1, /* gfxnum, txnum */ + 1, 1, -2, + 0 +}; + static const tc0220ioc_interface airsys_io_intf = { DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), @@ -634,9 +640,10 @@ static MACHINE_DRIVER_START( airsys ) MDRV_GFXDECODE(airsys) MDRV_PALETTE_LENGTH(512*16) - MDRV_VIDEO_START(taitoair) MDRV_VIDEO_UPDATE(taitoair) + MDRV_TC0080VCO_ADD("tc0080vco", airsys_tc0080vco_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/warriorb.c b/src/mame/drivers/warriorb.c index a91a532512f..28dce8d1ab6 100644 --- a/src/mame/drivers/warriorb.c +++ b/src/mame/drivers/warriorb.c @@ -148,7 +148,7 @@ Colscroll effects? #include "includes/taitoipt.h" #include "rendlay.h" #include "cpu/m68000/m68000.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" @@ -157,7 +157,6 @@ Colscroll effects? static MACHINE_START( warriorb ); static MACHINE_RESET( taito_dualscreen ); -VIDEO_START( darius2d ); VIDEO_START( warriorb ); VIDEO_UPDATE( warriorb ); @@ -210,6 +209,14 @@ static WRITE8_HANDLER( warriorb_pancontrol ) } +WRITE16_HANDLER( tc0100scn_dual_screen_w ) +{ + const device_config *tc0100scn_1 = devtag_get_device(space->machine, "tc0100scn_1"); + const device_config *tc0100scn_2 = devtag_get_device(space->machine, "tc0100scn_2"); + + tc0100scn_word_w(tc0100scn_1, offset, data, mem_mask); + tc0100scn_word_w(tc0100scn_2, offset, data, mem_mask); +} /*********************************************************** MEMORY STRUCTURES @@ -218,13 +225,13 @@ static WRITE8_HANDLER( warriorb_pancontrol ) static ADDRESS_MAP_START( darius2d_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM /* main ram */ - AM_RANGE(0x200000, 0x213fff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_dual_screen_w) /* tilemaps (all screens) */ + AM_RANGE(0x200000, 0x213fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_dual_screen_w) /* tilemaps (all screens) */ AM_RANGE(0x214000, 0x2141ff) AM_WRITENOP /* error in screen clearing code ? */ - AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) - AM_RANGE(0x240000, 0x253fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ - AM_RANGE(0x260000, 0x26000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w) - AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */ - AM_RANGE(0x420000, 0x420007) AM_READWRITE(TC0110PCR_word_1_r, TC0110PCR_step1_word_1_w) /* palette (2nd screen) */ + AM_RANGE(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x240000, 0x253fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */ + AM_RANGE(0x260000, 0x26000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */ + AM_RANGE(0x420000, 0x420007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */ AM_RANGE(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) // AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ??? @@ -234,12 +241,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( warriorb_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x200000, 0x213fff) AM_RAM - AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_dual_screen_w) /* tilemaps (all screens) */ - AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) - AM_RANGE(0x340000, 0x353fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ - AM_RANGE(0x360000, 0x36000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w) - AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */ - AM_RANGE(0x420000, 0x420007) AM_READWRITE(TC0110PCR_word_1_r, TC0110PCR_step1_word_1_w) /* palette (2nd screen) */ + AM_RANGE(0x300000, 0x313fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_dual_screen_w) /* tilemaps (all screens) */ + AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x340000, 0x353fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */ + AM_RANGE(0x360000, 0x36000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) + AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */ + AM_RANGE(0x420000, 0x420007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */ AM_RANGE(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) // AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3 @@ -445,6 +452,57 @@ static DEVICE_GET_INFO( subwoofer ) MACHINE DRIVERS ***********************************************************/ +static const tc0100scn_interface darius2d_tc0100scn_intf_l = +{ + "lscreen", + 1, 3, /* gfxnum, txnum */ + 4, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const tc0100scn_interface darius2d_tc0100scn_intf_r = +{ + "rscreen", + 2, 3, /* gfxnum, txnum */ + 4, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 1 +}; + +static const tc0100scn_interface warriorb_tc0100scn_intf_l = +{ + "lscreen", + 1, 3, /* gfxnum, txnum */ + 4, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const tc0100scn_interface warriorb_tc0100scn_intf_r = +{ + "rscreen", + 2, 3, /* gfxnum, txnum */ + 4, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 1, 1 +}; + +static const tc0110pcr_interface darius2d_tc0110pcr_intf_l = +{ + 0 +}; + +static const tc0110pcr_interface darius2d_tc0110pcr_intf_r = +{ + 1 +}; + + static const tc0220ioc_interface darius2d_io_intf = { DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), @@ -491,9 +549,14 @@ static MACHINE_DRIVER_START( darius2d ) MDRV_SCREEN_SIZE(40*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 3*8, 32*8-1) - MDRV_VIDEO_START(darius2d) + MDRV_VIDEO_START(warriorb) MDRV_VIDEO_UPDATE(warriorb) + MDRV_TC0100SCN_ADD("tc0100scn_1", darius2d_tc0100scn_intf_l) + MDRV_TC0100SCN_ADD("tc0100scn_2", darius2d_tc0100scn_intf_r) + MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2d_tc0110pcr_intf_l) + MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2d_tc0110pcr_intf_r) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -554,6 +617,11 @@ static MACHINE_DRIVER_START( warriorb ) MDRV_VIDEO_START(warriorb) MDRV_VIDEO_UPDATE(warriorb) + MDRV_TC0100SCN_ADD("tc0100scn_1", warriorb_tc0100scn_intf_l) + MDRV_TC0100SCN_ADD("tc0100scn_2", warriorb_tc0100scn_intf_r) + MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2d_tc0110pcr_intf_l) + MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2d_tc0110pcr_intf_r) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/wgp.c b/src/mame/drivers/wgp.c index a04cd9fa276..c4020d3cab2 100644 --- a/src/mame/drivers/wgp.c +++ b/src/mame/drivers/wgp.c @@ -398,7 +398,7 @@ Stephh's notes (based on the game M68000 code and some tests) : #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" #include "machine/taitoio.h" -#include "video/taitoic.h" +#include "video/taiicdev.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" @@ -661,8 +661,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x18000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x200000, 0x20000f) AM_READWRITE(wgp_adinput_r,wgp_adinput_w) - AM_RANGE(0x300000, 0x30ffff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_word_0_w) /* tilemaps */ - AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w) + AM_RANGE(0x300000, 0x30ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */ + AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w) AM_RANGE(0x400000, 0x40bfff) AM_RAM AM_BASE(&wgp_spritemap) AM_SIZE(&wgp_spritemap_size) /* sprite tilemaps */ AM_RANGE(0x40c000, 0x40dfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* sprite ram */ AM_RANGE(0x40fff0, 0x40fff1) AM_WRITENOP /* ?? (writes 0x8000 and 0 alternately - Wgp2 just 0) */ @@ -897,9 +897,7 @@ static const gfx_layout charlayout = 32*8 /* every sprite takes 32 consecutive bytes */ }; -/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx - slot */ - +/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx slot */ static GFXDECODE_START( wgp ) GFXDECODE_ENTRY( "gfx3", 0x0, wgp_tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 256 ) /* sprites & playfield */ @@ -951,6 +949,26 @@ static MACHINE_START( wgp ) state_save_register_postload(machine, wgp_postload, NULL); } +static const tc0100scn_interface wgp_tc0100scn_intf = +{ + "screen", + 1, 3, /* gfxnum, txnum */ + 0, 0, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + +static const tc0100scn_interface wgp2_tc0100scn_intf = +{ + "screen", + 1, 3, /* gfxnum, txnum */ + 4, 2, /* x_offset, y_offset */ + 0, 0, /* flip_xoff, flip_yoff */ + 0, 0, /* flip_text_xoff, flip_text_yoff */ + 0, 0 +}; + static const tc0220ioc_interface wgp_io_intf = { DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), @@ -992,6 +1010,8 @@ static MACHINE_DRIVER_START( wgp ) MDRV_VIDEO_START(wgp) MDRV_VIDEO_UPDATE(wgp) + MDRV_TC0100SCN_ADD("tc0100scn", wgp_tc0100scn_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -1010,6 +1030,9 @@ static MACHINE_DRIVER_START( wgp2 ) MDRV_QUANTUM_TIME(HZ(12000)) /* video hardware */ MDRV_VIDEO_START(wgp2) + + MDRV_DEVICE_REMOVE("tc0100scn") + MDRV_TC0100SCN_ADD("tc0100scn", wgp2_tc0100scn_intf) MACHINE_DRIVER_END diff --git a/src/mame/video/asuka.c b/src/mame/video/asuka.c index e3429369200..09334b26f39 100644 --- a/src/mame/video/asuka.c +++ b/src/mame/video/asuka.c @@ -1,32 +1,5 @@ #include "driver.h" -#include "video/taitoic.h" - -#define TC0100SCN_GFX_NUM 1 - - -/**********************************************************/ - -static void asuka_core_video_start(running_machine *machine, int x_offs,int buffering) -{ - PC090OJ_vh_start(machine,0,0,8,buffering); /* gfxset, x offset, y offset, buffering */ - TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,x_offs,0,0,0,0,0,0); - TC0110PCR_vh_start(machine); -} - -VIDEO_START( asuka ) -{ - asuka_core_video_start(machine, 0,0); -} - -VIDEO_START( galmedes ) -{ - asuka_core_video_start(machine, 1,0); -} - -VIDEO_START( cadash ) -{ - asuka_core_video_start(machine, 1,1); -} +#include "video/taiicdev.h" /************************************************************** SPRITE READ AND WRITE HANDLERS @@ -34,8 +7,10 @@ VIDEO_START( cadash ) WRITE16_HANDLER( asuka_spritectrl_w ) { + const device_config *pc090oj = devtag_get_device(space->machine, "pc090oj"); + /* Bits 2-5 are color bank; in asuka games bit 0 is global priority */ - PC090OJ_sprite_ctrl = ((data & 0x3c) >> 2) | ((data & 0x1) << 15); + pc090oj_set_sprite_ctrl(pc090oj, ((data & 0x3c) >> 2) | ((data & 0x1) << 15)); } @@ -45,11 +20,13 @@ WRITE16_HANDLER( asuka_spritectrl_w ) VIDEO_UPDATE( asuka ) { + const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn"); + const device_config *pc090oj = devtag_get_device(screen->machine, "pc090oj"); UINT8 layer[3]; - TC0100SCN_tilemap_update(screen->machine); + tc0100scn_tilemap_update(tc0100scn); - layer[0] = TC0100SCN_bottomlayer(0); + layer[0] = tc0100scn_bottomlayer(tc0100scn); layer[1] = layer[0]^1; layer[2] = 2; @@ -58,36 +35,38 @@ VIDEO_UPDATE( asuka ) /* Ensure screen blanked even when bottom layer not drawn due to disable bit */ bitmap_fill(bitmap, cliprect, 0); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4); /* Sprites may be over or under top bg layer */ - PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,2); + pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 2); return 0; } VIDEO_UPDATE( bonzeadv ) { + const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn"); + const device_config *pc090oj = devtag_get_device(screen->machine, "pc090oj"); UINT8 layer[3]; - TC0100SCN_tilemap_update(screen->machine); + tc0100scn_tilemap_update(tc0100scn); - layer[0] = TC0100SCN_bottomlayer(0); - layer[1] = layer[0]^1; + layer[0] = tc0100scn_bottomlayer(tc0100scn); + layer[1] = layer[0] ^ 1; layer[2] = 2; - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); /* Ensure screen blanked even when bottom layer not drawn due to disable bit */ bitmap_fill(bitmap, cliprect, 0); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4); /* Sprites are always over both bg layers */ - PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,0); + pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 0); return 0; } diff --git a/src/mame/video/ninjaw.c b/src/mame/video/ninjaw.c index 7dbf3b4f601..585534baa98 100644 --- a/src/mame/video/ninjaw.c +++ b/src/mame/video/ninjaw.c @@ -1,7 +1,5 @@ #include "driver.h" -#include "video/taitoic.h" - -#define TC0100SCN_GFX_NUM 1 +#include "video/taiicdev.h" struct tempsprite { @@ -14,43 +12,17 @@ struct tempsprite }; static struct tempsprite *spritelist; -static int taito_hide_pixels; - - /**********************************************************/ -static VIDEO_START( ninjaw_core ) +VIDEO_START( ninjaw ) { - int chips; - int mask; + const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1"); spritelist = auto_alloc_array(machine, struct tempsprite, 0x1000); - chips = TC0100SCN_count(machine); - - assert_always(chips > 0, "we have an erroneous TC0100SCN configuration"); - - TC0100SCN_vh_start(machine,chips,TC0100SCN_GFX_NUM,taito_hide_pixels,0,0,0,0,0,2); - - mask = TC0110PCR_mask(machine); - if (mask & 1) - TC0110PCR_vh_start(machine); - - if (mask & 2) - TC0110PCR_1_vh_start(machine); - - if (mask & 4) - TC0110PCR_2_vh_start(machine); - /* Ensure palette from correct TC0110PCR used for each screen */ - TC0100SCN_set_chip_colbanks(0x0,0x100,0x200); -} - -VIDEO_START( ninjaw ) -{ - taito_hide_pixels = 22; - VIDEO_START_CALL(ninjaw_core); + tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x200); } /************************************************************ @@ -149,51 +121,53 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan VIDEO_UPDATE( ninjaw ) { - int xoffs = 0, screen_number = -1; + int xoffs = 0; UINT8 layer[3], nodraw; const device_config *left_screen = devtag_get_device(screen->machine, "lscreen"); const device_config *middle_screen = devtag_get_device(screen->machine, "mscreen"); const device_config *right_screen = devtag_get_device(screen->machine, "rscreen"); + const device_config *tc0100scn = NULL; if (screen == left_screen) { - xoffs = 36*8*0; - screen_number = 0; + xoffs = 36 * 8 * 0; + tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1"); } else if (screen == middle_screen) { - xoffs = 36*8*1; - screen_number = 1; + xoffs = 36 * 8 * 1; + tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2"); } else if (screen == right_screen) { - xoffs = 36*8*2; - screen_number = 2; + xoffs = 36 * 8 * 2; + tc0100scn = devtag_get_device(screen->machine, "tc0100scn_3"); } - TC0100SCN_tilemap_update(screen->machine); + tc0100scn_tilemap_update(tc0100scn); - layer[0] = TC0100SCN_bottomlayer(0); - layer[1] = layer[0]^1; + layer[0] = tc0100scn_bottomlayer(tc0100scn); + layer[1] = layer[0] ^ 1; layer[2] = 2; /* chip 0 does tilemaps on the left, chip 1 center, chip 2 the right */ // draw bottom layer - nodraw = TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[0],TILEMAP_DRAW_OPAQUE,0); /* left */ + nodraw = tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); /* left */ /* Ensure screen blanked even when bottom layers not drawn due to disable bit */ - if (nodraw) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); + if (nodraw) + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); /* Sprites can be under/over the layer below text layer */ - draw_sprites(screen->machine,bitmap,cliprect,1,xoffs,8); // draw sprites with priority 1 which are under the mid layer + draw_sprites(screen->machine, bitmap, cliprect, 1, xoffs, 8); // draw sprites with priority 1 which are under the mid layer // draw middle layer - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[1],0,0); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0); draw_sprites(screen->machine,bitmap,cliprect,0,xoffs,8); // draw sprites with priority 0 which are over the mid layer // draw top(text) layer - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[2],0,0); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0); return 0; } diff --git a/src/mame/video/othunder.c b/src/mame/video/othunder.c index d269de73948..9bdf4219030 100644 --- a/src/mame/video/othunder.c +++ b/src/mame/video/othunder.c @@ -1,7 +1,5 @@ #include "driver.h" -#include "video/taitoic.h" - -#define TC0100SCN_GFX_NUM 1 +#include "video/taiicdev.h" struct tempsprite { @@ -23,13 +21,7 @@ VIDEO_START( othunder ) /* Up to $800/8 big sprites, requires 0x100 * sizeof(*spritelist) Multiply this by 32 to give room for the number of small sprites, which are what actually get put in the structure. */ - spritelist = auto_alloc_array(machine, struct tempsprite, 0x2000); - - TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,4,0,0,0,0,0,0); - - if (TC0110PCR_mask(machine) & 1) - TC0110PCR_vh_start(machine); } @@ -220,27 +212,28 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); VIDEO_UPDATE( othunder ) { + const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn"); int layer[3]; - TC0100SCN_tilemap_update(screen->machine); + tc0100scn_tilemap_update(tc0100scn); - layer[0] = TC0100SCN_bottomlayer(0); - layer[1] = layer[0]^1; + layer[0] = tc0100scn_bottomlayer(tc0100scn); + layer[1] = layer[0] ^ 1; layer[2] = 2; - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); /* Ensure screen blanked even when bottom layer not drawn due to disable bit */ bitmap_fill(bitmap, cliprect, 0); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4); /* Sprites can be under/over the layer below text layer */ { - static const int primasks[2] = {0xf0,0xfc}; - draw_sprites(screen->machine, bitmap,cliprect,primasks,3); + static const int primasks[2] = {0xf0, 0xfc}; + draw_sprites(screen->machine, bitmap, cliprect, primasks, 3); } return 0; diff --git a/src/mame/video/taiicdev.c b/src/mame/video/taiicdev.c index 547dc7a3cf4..d91b3094025 100644 --- a/src/mame/video/taiicdev.c +++ b/src/mame/video/taiicdev.c @@ -1800,7 +1800,8 @@ void tc0080vco_tilemap_draw( const device_config *device, bitmap_t *bitmap, cons } } -/* FIXME: these could replace the external uses of RAM regions... completely untested! */ +/* FIXME: maybe it would be better to provide pointers to these RAM regions +which can be accessed directly by the drivers... */ READ16_DEVICE_HANDLER( tc0080vco_cram_0_r ) { tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); @@ -1831,36 +1832,6 @@ READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r ) return tc0080vco->flipscreen; } -WRITE16_DEVICE_HANDLER( tc0080vco_cram_0_w ) -{ - tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); - COMBINE_DATA(&tc0080vco->chain_ram_0[offset]); -} - -WRITE16_DEVICE_HANDLER( tc0080vco_cram_1_w ) -{ - tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); - COMBINE_DATA(&tc0080vco->chain_ram_1[offset]); -} - -WRITE16_DEVICE_HANDLER( tc0080vco_sprram_w ) -{ - tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); - COMBINE_DATA(&tc0080vco->spriteram[offset]); -} - -WRITE16_DEVICE_HANDLER( tc0080vco_scrram_w ) -{ - tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); - COMBINE_DATA(&tc0080vco->scroll_ram[offset]); -} - -WRITE_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_w ) -{ - tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); - tc0080vco->flipscreen = state; -} - static STATE_POSTLOAD( tc0080vco_postload ) { @@ -1912,9 +1883,6 @@ static DEVICE_START( tc0080vco ) /* Perform extra initialisations for text layer */ tc0080vco->tilemap[2] = tilemap_create_device(device, tc0080vco_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64); - /* create the char set (gfx will then be updated dynamically from RAM) */ - device->machine->gfx[tc0080vco->tx_gfx] = gfx_element_alloc(device->machine, &tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0); - tilemap_set_scrolldx(tc0080vco->tilemap[2], 0, 0); tilemap_set_scrolldy(tc0080vco->tilemap[2], 48, -448); @@ -1938,6 +1906,9 @@ static DEVICE_START( tc0080vco ) tc0080vco->spriteram = tc0080vco->ram + 0x20400 / 2; tc0080vco->scroll_ram = tc0080vco->ram + 0x20800 / 2; + /* create the char set (gfx will then be updated dynamically from RAM) */ + device->machine->gfx[tc0080vco->tx_gfx] = gfx_element_alloc(device->machine, &tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0); + state_save_register_device_item_pointer(device, 0, tc0080vco->ram, TC0080VCO_RAM_SIZE / 2); state_save_register_postload(device->machine, tc0080vco_postload, tc0080vco); } @@ -2220,21 +2191,6 @@ WRITE16_DEVICE_HANDLER( tc0100scn_word_w ) } } -#if 0 // these must be moved to the drivers -WRITE16_DEVICE_HANDLER( TC0100SCN_dual_screen_w ) -{ - TC0100SCN_word_0_w(space,offset,data,mem_mask); - TC0100SCN_word_1_w(space,offset,data,mem_mask); -} - -WRITE16_DEVICE_HANDLER( TC0100SCN_triple_screen_w ) -{ - TC0100SCN_word_0_w(space,offset,data,mem_mask); - TC0100SCN_word_1_w(space,offset,data,mem_mask); - TC0100SCN_word_2_w(space,offset,data,mem_mask); -} -#endif - READ16_DEVICE_HANDLER( tc0100scn_ctrl_word_r ) { tc0100scn_state *tc0100scn = tc0100scn_get_safe_token(device); @@ -2468,14 +2424,17 @@ static DEVICE_START( tc0100scn ) tc0100scn->screen = devtag_get_device(device->machine, intf->screen); + /* Set up clipping for multi-TC0100SCN games. We assume + this code won't ever affect single screen games: + Thundfox is the only one of those with two chips, and + we're safe as it uses single width tilemaps. */ + tc0100scn->cliprect = *video_screen_get_visible_area(tc0100scn->screen); - /* create the char set (gfx will then be updated dynamically from RAM) */ - device->machine->gfx[intf->txnum] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0); + /* use the given gfx sets for bg/tx tiles*/ + tc0100scn->bg_gfx = intf->gfxnum; /* 2nd/3rd chips will use the same gfx set */ tc0100scn->tx_gfx = intf->txnum; - tc0100scn->bg_gfx = intf->gfxnum; /* use the given gfx set for bg tiles; 2nd/3rd chips will use the same gfx set */ - /* Single width versions */ tc0100scn->tilemap[0][0] = tilemap_create_device(device, tc0100scn_get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 64); tc0100scn->tilemap[1][0] = tilemap_create_device(device, tc0100scn_get_fg_tile_info, tilemap_scan_rows, 8, 8, 64, 64); @@ -2486,13 +2445,6 @@ static DEVICE_START( tc0100scn ) tc0100scn->tilemap[1][1] = tilemap_create_device(device, tc0100scn_get_fg_tile_info, tilemap_scan_rows, 8, 8, 128, 64); tc0100scn->tilemap[2][1] = tilemap_create_device(device, tc0100scn_get_tx_tile_info, tilemap_scan_rows, 8, 8, 128, 32); - /* Set up clipping for multi-TC0100SCN games. We assume - this code won't ever affect single screen games: - Thundfox is the only one of those with two chips, and - we're safe as it uses single width tilemaps. */ - - tc0100scn_set_layer_ptrs(tc0100scn); - tilemap_set_transparent_pen(tc0100scn->tilemap[0][0], 0); tilemap_set_transparent_pen(tc0100scn->tilemap[1][0], 0); tilemap_set_transparent_pen(tc0100scn->tilemap[2][0], 0); @@ -2505,9 +2457,8 @@ static DEVICE_START( tc0100scn ) 7 bits higher and 2 pixels to the left than chip #1 because that's how thundfox wants it. */ - // FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3! - xd = -intf->x_offset; - yd = 8 - intf->y_offset; + xd = (intf->multiscrn_hack == 0) ? (-intf->x_offset) : (-intf->x_offset - 2); + yd = (intf->multiscrn_hack == 0) ? (8 - intf->y_offset) : (1 - intf->y_offset); tilemap_set_scrolldx(tc0100scn->tilemap[0][0], xd - 16, -intf->flip_xoffs - xd - 16); tilemap_set_scrolldy(tc0100scn->tilemap[0][0], yd, -intf->flip_yoffs - yd); @@ -2521,7 +2472,8 @@ static DEVICE_START( tc0100scn ) display not from the edges of individual screens. NB flipscreen tilemap offsets are based on Cameltry */ - // FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3! + xd = -intf->x_offset - intf->multiscrn_xoffs; + yd = 8 - intf->y_offset; tilemap_set_scrolldx(tc0100scn->tilemap[0][1], xd - 16, -intf->flip_xoffs - xd - 16); tilemap_set_scrolldy(tc0100scn->tilemap[0][1], yd, -intf->flip_yoffs - yd); @@ -2546,11 +2498,18 @@ static DEVICE_START( tc0100scn ) if (device->machine->gfx[intf->gfxnum]->color_granularity == 0x40) /* Undrfire */ tc0100scn->tx_col_mult = 4; -//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", -//device->machine->gfx[intf->gfxnum]->color_granularity,TC0100SCN_tx_col_mult); +//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", device->machine->gfx[intf->gfxnum]->color_granularity, tc0100scn->tx_col_mult); tc0100scn->ram = auto_alloc_array_clear(device->machine, UINT16, TC0100SCN_RAM_SIZE / 2); + tc0100scn_set_layer_ptrs(tc0100scn); + + tc0100scn_set_colbanks(device, 0, 0, 0); /* standard values, only Wgp & multiscreen games change them */ + /* we call this here, so that they can be modified at VIDEO_START*/ + + /* create the char set (gfx will then be updated dynamically from RAM) */ + device->machine->gfx[tc0100scn->tx_gfx] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0); + state_save_register_device_item_pointer(device, 0, tc0100scn->ram, TC0100SCN_RAM_SIZE / 2); state_save_register_device_item_array(device, 0, tc0100scn->ctrl); state_save_register_device_item(device, 0, tc0100scn->dblwidth); @@ -2567,7 +2526,6 @@ static DEVICE_RESET( tc0100scn ) tc0100scn->dblwidth = 0; tc0100scn->colbank = 0; tc0100scn->gfxbank = 0; /* Mjnquest uniquely banks tiles */ - tc0100scn_set_colbanks(device, 0, 0, 0); /* standard values, only Wgp changes them */ for (i = 0; i < 8; i++) tc0100scn->ctrl[i] = 0; @@ -2585,7 +2543,7 @@ struct _tc0280grd_state { UINT16 * ram; - tilemap_t *tilemap; + tilemap_t *tilemap; UINT16 ctrl[8]; int gfxnum, base_color; diff --git a/src/mame/video/taiicdev.h b/src/mame/video/taiicdev.h index 7eececd56b6..8a9f0722d6f 100644 --- a/src/mame/video/taiicdev.h +++ b/src/mame/video/taiicdev.h @@ -58,6 +58,7 @@ struct _tc0100scn_interface int flip_text_xoffs, flip_text_yoffs; int multiscrn_xoffs; + int multiscrn_hack; }; @@ -232,23 +233,9 @@ READ16_DEVICE_HANDLER( tc0080vco_cram_1_r ); READ16_DEVICE_HANDLER( tc0080vco_sprram_r ); READ16_DEVICE_HANDLER( tc0080vco_scrram_r ); READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r ); -WRITE16_DEVICE_HANDLER( tc0080vco_cram_0_w ); -WRITE16_DEVICE_HANDLER( tc0080vco_cram_1_w ); -WRITE16_DEVICE_HANDLER( tc0080vco_sprram_w ); -WRITE16_DEVICE_HANDLER( tc0080vco_scrram_w ); -WRITE_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_w ); - -#if 0 -extern UINT16 *TC0080VCO_chain_ram_0; -extern UINT16 *TC0080VCO_chain_ram_1; -extern UINT16 *TC0080VCO_spriteram; -extern UINT16 *TC0080VCO_scroll_ram; -extern int TC0080VCO_flipscreen; -#endif /** TC0100SCN **/ - #define TC0100SCN_SINGLE_VDU 1024 /* Function to set separate color banks for the three tilemapped layers. @@ -276,12 +263,6 @@ WRITE32_DEVICE_HANDLER( tc0100scn_long_w ); READ32_DEVICE_HANDLER( tc0100scn_ctrl_long_r ); WRITE32_DEVICE_HANDLER( tc0100scn_ctrl_long_w ); -#if 0 -/* Functions to write multiple TC0100SCNs with the same data */ -WRITE16_DEVICE_HANDLER( TC0100SCN_dual_screen_w ); -WRITE16_DEVICE_HANDLER( TC0100SCN_triple_screen_w ); -#endif - void tc0100scn_tilemap_update(const device_config *device); int tc0100scn_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int layer, int flags, UINT32 priority); @@ -291,7 +272,6 @@ int tc0100scn_bottomlayer(const device_config *device); /** TC0280GRD & TC0430GRW **/ - READ16_DEVICE_HANDLER( tc0280grd_word_r ); WRITE16_DEVICE_HANDLER( tc0280grd_word_w ); WRITE16_DEVICE_HANDLER( tc0280grd_ctrl_word_w ); @@ -306,7 +286,6 @@ void TC0430GRW_zoom_draw(const device_config *device, bitmap_t *bitmap, const re /** TC0360PRI **/ - WRITE8_DEVICE_HANDLER( tc0360pri_w ); READ8_DEVICE_HANDLER( tc0360pri_r ); @@ -339,7 +318,6 @@ int tc0480scp_get_bg_priority(const device_config *device); //extern int TC0480SCP_pri_reg; - /** TC0150ROD **/ READ16_DEVICE_HANDLER( tc0150rod_word_r ); WRITE16_DEVICE_HANDLER( tc0150rod_word_w ); @@ -365,4 +343,3 @@ WRITE16_DEVICE_HANDLER( tc0180vcu_scroll_w ); READ16_DEVICE_HANDLER( tc0180vcu_word_r ); WRITE16_DEVICE_HANDLER( tc0180vcu_word_w ); void tc0180vcu_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int tmap_num, int plane); - diff --git a/src/mame/video/taito_h.c b/src/mame/video/taito_h.c index af698c3ede5..4718cfba6a4 100644 --- a/src/mame/video/taito_h.c +++ b/src/mame/video/taito_h.c @@ -46,7 +46,7 @@ sprite RAM ***************************************************************************/ #include "driver.h" -#include "taitoic.h" +#include "taiicdev.h" /* These are hand-tuned values */ @@ -65,33 +65,13 @@ static const int zoomy_conv_table[] = }; - -/*************************************************************************** - Initialize and destroy video hardware emulation -***************************************************************************/ - -VIDEO_START( syvalion ) -{ - TC0080VCO_vh_start(machine,0,1,1,1,-2); -} - -VIDEO_START( recordbr ) -{ - TC0080VCO_vh_start(machine,0,0,1,1,-2); -} - -VIDEO_START( dleague ) -{ - TC0080VCO_vh_start(machine,0,0,1,1,-2); -} - - /*************************************************************************** Screen refresh ***************************************************************************/ -static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect) +static void syvalion_draw_sprites( running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect ) { + const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco"); /* Y chain size is 16/32?/64/64? pixels. X chain size is always 64 pixels. */ @@ -103,13 +83,13 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons int tile_offs; /* sprite chain offset */ int zoomx; /* zoomx value */ - for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2) + for (offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2) { - x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; - y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; - zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; - tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; - ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; + x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff; + y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff; + zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8; + tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2; + ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10]; if (tile_offs) { @@ -131,7 +111,7 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons if (x0 >= 0x200) x0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { x0 = 497 - x0; y0 = 498 - y0; @@ -144,21 +124,21 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons } y = y0; - for ( j = 0 ; j < ysize ; j ++ ) + for (j = 0 ; j < ysize ; j++) { x = x0; - for (k = 0 ; k < 4 ; k ++ ) + for (k = 0 ; k < 4 ; k++) { if (tile_offs >= 0x1000) { int tile, color, flipx, flipy; - tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; - color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; - flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; - flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; + tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff; + color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f; + flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040; + flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { flipx ^= 0x0040; flipy ^= 0x0080; @@ -184,6 +164,7 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority) { + const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco"); /* Y chain size is 16/32?/64/64? pixels. X chain size is always 64 pixels. */ @@ -200,12 +181,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co if (offs < 0x01b0 && priority == 0) continue; if (offs >= 0x01b0 && priority == 1) continue; - x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; - y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; - zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; - zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f); - tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; - ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; + x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff; + y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff; + zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8; + zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f); + tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2; + ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10]; if (tile_offs) { @@ -241,7 +222,7 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co if (x0 >= 0x200) x0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { x0 = 497 - x0; y0 = 498 - y0; @@ -264,12 +245,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co { int tile, color, flipx, flipy; - tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; - color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; - flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; - flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; + tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff; + color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f; + flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040; + flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { flipx ^= 0x0040; flipy ^= 0x0080; @@ -295,6 +276,7 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority) { + const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco"); /* Y chain size is 16/32?/64/64? pixels. X chain size is always 64 pixels. */ @@ -309,12 +291,12 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2) { - x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; - y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; - zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; - tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; - pribit = (TC0080VCO_spriteram[offs + 0] & 0x1000) >> 12; - ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; + x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff; + y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff; + zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8; + tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2; + pribit = (tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x1000) >> 12; + ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10]; if (tile_offs) { @@ -334,13 +316,13 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con zx = (dx + ex) << 12; } - if (TC0080VCO_scroll_ram[0x0002] & 0x8000) + if (tc0080vco_scrram_r(tc0080vco, 0x0002, 0xffff) & 0x8000) pribit = 1; if (x0 >= 0x200) x0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { x0 = 497 - x0; y0 = 498 - y0; @@ -352,24 +334,25 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con y0 += 2; } - if ( priority == pribit ) + if (priority == pribit) { y = y0; - for ( j = 0 ; j < ysize ; j ++ ) + for (j = 0; j < ysize; j ++) { x = x0; - for (k = 0 ; k < 4 ; k ++ ) + for (k = 0; k < 4; k ++ ) { if (tile_offs >= 0x1000) /* or pitcher gets blanked */ { int tile, color, flipx, flipy; - tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; - color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; - flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; - flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; + tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff; + color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f; + flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040; + flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080; - if (TC0080VCO_flipscreen) + + if (tc0080vco_flipscreen_r(tc0080vco)) { flipx ^= 0x0040; flipy ^= 0x0080; @@ -409,23 +392,27 @@ static void taitoh_log_vram(running_machine *machine) VIDEO_UPDATE( syvalion ) { - TC0080VCO_tilemap_update(screen->machine); + const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco"); + + tc0080vco_tilemap_update(tc0080vco); taitoh_log_vram(screen->machine); bitmap_fill(bitmap, cliprect, 0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); - syvalion_draw_sprites(screen->machine,bitmap,cliprect); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); + syvalion_draw_sprites(screen->machine, bitmap,cliprect); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0); return 0; } VIDEO_UPDATE( recordbr ) { - TC0080VCO_tilemap_update(screen->machine); + const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco"); + + tc0080vco_tilemap_update(tc0080vco); taitoh_log_vram(screen->machine); @@ -433,28 +420,30 @@ VIDEO_UPDATE( recordbr ) #ifdef MAME_DEBUG if ( !input_code_pressed(screen->machine, KEYCODE_A) ) - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); if ( !input_code_pressed(screen->machine, KEYCODE_S) ) - recordbr_draw_sprites(screen->machine,bitmap,cliprect,0); + recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0); if ( !input_code_pressed(screen->machine, KEYCODE_D) ) - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); if ( !input_code_pressed(screen->machine, KEYCODE_F) ) - recordbr_draw_sprites(screen->machine,bitmap,cliprect,1); + recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1); #else - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0); - recordbr_draw_sprites(screen->machine,bitmap,cliprect,0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); - recordbr_draw_sprites(screen->machine,bitmap,cliprect,1); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); + recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); + recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1); #endif - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0); return 0; } VIDEO_UPDATE( dleague ) { - TC0080VCO_tilemap_update(screen->machine); + const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco"); + + tc0080vco_tilemap_update(tc0080vco); taitoh_log_vram(screen->machine); @@ -462,21 +451,21 @@ VIDEO_UPDATE( dleague ) #ifdef MAME_DEBUG if ( !input_code_pressed(screen->machine, KEYCODE_A) ) - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); if ( !input_code_pressed(screen->machine, KEYCODE_S) ) - dleague_draw_sprites(screen->machine,bitmap,cliprect,0); + dleague_draw_sprites(screen->machine, bitmap, cliprect, 0); if ( !input_code_pressed(screen->machine, KEYCODE_D) ) - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); if ( !input_code_pressed(screen->machine, KEYCODE_F) ) - dleague_draw_sprites(screen->machine,bitmap,cliprect,1); + dleague_draw_sprites(screen->machine, bitmap, cliprect, 1); #else - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0); - dleague_draw_sprites (screen->machine,bitmap,cliprect,0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); - dleague_draw_sprites (screen->machine,bitmap,cliprect,1); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); + dleague_draw_sprites (screen->machine, bitmap, cliprect, 0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); + dleague_draw_sprites (screen->machine, bitmap, cliprect, 1); #endif - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0); return 0; } diff --git a/src/mame/video/taito_o.c b/src/mame/video/taito_o.c index 0eec53fec2d..5b05a90ce2b 100644 --- a/src/mame/video/taito_o.c +++ b/src/mame/video/taito_o.c @@ -5,7 +5,7 @@ Based on taito_h.c ***************************************************************************/ #include "driver.h" -#include "taitoic.h" +#include "taiicdev.h" /* These are hand-tuned values */ @@ -23,14 +23,10 @@ static const int zoomy_conv_table[] = 0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f }; -VIDEO_START( parentj ) -{ - TC0080VCO_vh_start(machine,0,0,1,1,-2); -} - static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority) { + const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco"); /* Y chain size is 16/32?/64/64? pixels. X chain size is always 64 pixels. */ @@ -47,12 +43,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con if (offs < 0x01b0 && priority == 0) continue; if (offs >= 0x01b0 && priority == 1) continue; - x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; - y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; - zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; - zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f); - tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; - ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; + x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff; + y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff; + zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8; + zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f); + tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2; + ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10]; if (tile_offs) { @@ -88,7 +84,7 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con if (x0 >= 0x200) x0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { x0 = 497 - x0; y0 = 498 - y0; @@ -111,12 +107,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con { int tile, color, flipx, flipy; - tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; - color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; - flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; - flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; + tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff; + color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f; + flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040; + flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { flipx ^= 0x0040; flipy ^= 0x0080; @@ -143,13 +139,14 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con VIDEO_UPDATE( parentj ) { - TC0080VCO_tilemap_update(screen->machine); + const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco"); + tc0080vco_tilemap_update(tc0080vco); bitmap_fill(bitmap, cliprect, 0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0); - parentj_draw_sprites(screen->machine,bitmap,cliprect,0); - parentj_draw_sprites(screen->machine,bitmap,cliprect,1); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); + parentj_draw_sprites(screen->machine, bitmap, cliprect, 0); + parentj_draw_sprites(screen->machine, bitmap, cliprect, 1); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0); return 0; } diff --git a/src/mame/video/taitoair.c b/src/mame/video/taitoair.c index a37ea349d42..ee1de37f9e8 100644 --- a/src/mame/video/taitoair.c +++ b/src/mame/video/taitoair.c @@ -46,7 +46,7 @@ sprite RAM ***************************************************************************/ #include "driver.h" -#include "taitoic.h" +#include "taiicdev.h" /* These are hand-tuned values */ @@ -64,24 +64,13 @@ static const int zoomy_conv_table[] = 0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f }; - - -/*************************************************************************** - Initialize and destroy video hardware emulation -***************************************************************************/ - -VIDEO_START( taitoair ) -{ - TC0080VCO_vh_start(machine,0,0,1,1,-2); -} - - /*************************************************************************** Screen refresh ***************************************************************************/ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority) { + const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco"); /* Y chain size is 16/32?/64/64? pixels. X chain size is always 64 pixels. */ @@ -93,17 +82,17 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta int tile_offs; /* sprite chain offset */ int zoomx, zoomy; /* zoom value */ - for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2) + for (offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2) { if (offs < 0x01b0 && priority == 0) continue; if (offs >= 0x01b0 && priority == 1) continue; - x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; - y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; - zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; - zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f); - tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; - ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; + x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff; + y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff; + zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8; + zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f); + tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2; + ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10]; if (tile_offs) { @@ -139,7 +128,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta if (x0 >= 0x200) x0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { x0 = 497 - x0; y0 = 498 - y0; @@ -153,21 +142,21 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta } y = y0; - for (j = 0 ; j < ysize ; j ++) + for (j = 0; j < ysize; j ++) { x = x0; - for (k = 0 ; k < 4 ; k ++) + for (k = 0; k < 4; k ++) { if (tile_offs >= 0x1000) { int tile, color, flipx, flipy; - tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; - color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; - flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; - flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; + tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff; + color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f; + flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040; + flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080; - if (TC0080VCO_flipscreen) + if (tc0080vco_flipscreen_r(tc0080vco)) { flipx ^= 0x0040; flipy ^= 0x0080; @@ -356,29 +345,32 @@ static void fill_poly(bitmap_t *bitmap, const struct poly *q) VIDEO_UPDATE( taitoair ) { - TC0080VCO_tilemap_update(screen->machine); + const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco"); + + tc0080vco_tilemap_update(tc0080vco); bitmap_fill(bitmap, cliprect, 0x41); #ifdef MAME_DEBUG if ( !input_code_pressed(screen->machine, KEYCODE_A) ) - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, 0, 0); if ( !input_code_pressed(screen->machine, KEYCODE_S) ) - draw_sprites(screen->machine,bitmap,cliprect,0); + draw_sprites(screen->machine, bitmap, cliprect, 0); if ( !input_code_pressed(screen->machine, KEYCODE_D) ) - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); if ( !input_code_pressed(screen->machine, KEYCODE_F) ) - draw_sprites(screen->machine,bitmap,cliprect,1); + draw_sprites(screen->machine, bitmap, cliprect, 1); #else - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,0,0); - draw_sprites (screen->machine,bitmap,cliprect,0); - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); - draw_sprites (screen->machine,bitmap,cliprect,1); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect, 0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect, 1); #endif - TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); + tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0); - if(taitoair_line_ram[0x3fff]) { + if (taitoair_line_ram[0x3fff]) + { int adr = 0x3fff; struct poly q; view.x1 = cliprect->min_x; @@ -386,16 +378,19 @@ VIDEO_UPDATE( taitoair ) view.x2 = cliprect->max_x; view.y2 = cliprect->max_y; - while(adr>=0 && taitoair_line_ram[adr] && taitoair_line_ram[adr] != 0x4000) { + while(adr>=0 && taitoair_line_ram[adr] && taitoair_line_ram[adr] != 0x4000) + { int pcount; - if(!(taitoair_line_ram[adr] & 0x8000) || adr<10) { + if(!(taitoair_line_ram[adr] & 0x8000) || adr < 10) + { logerror("quad: unknown value %04x at %04x\n", taitoair_line_ram[adr], adr); break; } q.col = (taitoair_line_ram[adr] & 0x7fff) + 0x300; adr--; pcount = 0; - while(pcount < POLY_MAX_PT && adr>=1 && !(taitoair_line_ram[adr] & 0xc000)) { + while(pcount < POLY_MAX_PT && adr>=1 && !(taitoair_line_ram[adr] & 0xc000)) + { q.p[pcount].y = taitoair_line_ram[adr]+3*16; q.p[pcount].x = taitoair_line_ram[adr-1]; pcount++; diff --git a/src/mame/video/warriorb.c b/src/mame/video/warriorb.c index 29a4835b725..703782a3ac6 100644 --- a/src/mame/video/warriorb.c +++ b/src/mame/video/warriorb.c @@ -1,40 +1,14 @@ #include "driver.h" -#include "video/taitoic.h" - -#define TC0100SCN_GFX_NUM 1 +#include "video/taiicdev.h" /**********************************************************/ -static void warriorb_core_vh_start(running_machine *machine, int x_offs,int multiscrn_xoffs) -{ - int chips; - int mask; - - chips = TC0100SCN_count(machine); - - assert_always(chips > 0, "erroneous TC0100SCN configuration"); - - TC0100SCN_vh_start(machine,chips,TC0100SCN_GFX_NUM,x_offs,0,0,0,0,0,multiscrn_xoffs); - - mask = TC0110PCR_mask(machine); - if (mask & 1) - TC0110PCR_vh_start(machine); - - if (mask & 2) - TC0110PCR_1_vh_start(machine); - - /* Ensure palette from correct TC0110PCR used for each screen */ - TC0100SCN_set_chip_colbanks(0,0x100,0x0); -} - -VIDEO_START( darius2d ) -{ - warriorb_core_vh_start(machine, 4,0); -} - VIDEO_START( warriorb ) { - warriorb_core_vh_start(machine, 4,1); + const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1"); + + /* Ensure palette from correct TC0110PCR used for each screen */ + tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x0); } @@ -110,27 +84,28 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan VIDEO_UPDATE( warriorb ) { - int xoffs = 0, screen_number = -1; + int xoffs = 0; UINT8 layer[3], nodraw; const device_config *left_screen = devtag_get_device(screen->machine, "lscreen"); const device_config *right_screen = devtag_get_device(screen->machine, "rscreen"); + const device_config *tc0100scn = NULL; if (screen == left_screen) { - xoffs = 40*8*0; - screen_number = 0; + xoffs = 40 * 8 * 0; + tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1"); } else if (screen == right_screen) { - xoffs = 40*8*1; - screen_number = 1; + xoffs = 40 * 8 * 1; + tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2"); } - TC0100SCN_tilemap_update(screen->machine); + tc0100scn_tilemap_update(tc0100scn); - layer[0] = TC0100SCN_bottomlayer(0); - layer[1] = layer[0]^1; + layer[0] = tc0100scn_bottomlayer(tc0100scn); + layer[1] = layer[0] ^ 1; layer[2] = 2; /* Clear priority bitmap */ @@ -138,18 +113,19 @@ VIDEO_UPDATE( warriorb ) /* chip 0 does tilemaps on the left, chip 1 does the ones on the right */ // draw bottom layer - nodraw = TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[0],TILEMAP_DRAW_OPAQUE,0); /* left */ + nodraw = tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); /* left */ /* Ensure screen blanked even when bottom layers not drawn due to disable bit */ - if(nodraw) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); + if (nodraw) + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); // draw middle layer - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[1],0,1); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 1); /* Sprites can be under/over the layer below text layer */ - draw_sprites(screen->machine, bitmap,cliprect,xoffs,8); // draw sprites + draw_sprites(screen->machine, bitmap, cliprect, xoffs, 8); // draw sprites // draw top(text) layer - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[2],0,0); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0); return 0; } diff --git a/src/mame/video/wgp.c b/src/mame/video/wgp.c index 39085b39fa9..169620d414d 100644 --- a/src/mame/video/wgp.c +++ b/src/mame/video/wgp.c @@ -1,7 +1,5 @@ #include "driver.h" -#include "video/taitoic.h" - -#define TC0100SCN_GFX_NUM 1 +#include "video/taiicdev.h" static tilemap_t *wgp_piv_tilemap[3]; @@ -47,46 +45,41 @@ static TILE_GET_INFO( get_piv2_tile_info ) } -static void wgp_core_vh_start(running_machine *machine, int x_offs,int y_offs,int piv_xoffs,int piv_yoffs) +static void wgp_core_vh_start(running_machine *machine, int piv_xoffs, int piv_yoffs) { - wgp_piv_tilemap[0] = tilemap_create(machine, get_piv0_tile_info,tilemap_scan_rows,16,16,64,64); - wgp_piv_tilemap[1] = tilemap_create(machine, get_piv1_tile_info,tilemap_scan_rows,16,16,64,64); - wgp_piv_tilemap[2] = tilemap_create(machine, get_piv2_tile_info,tilemap_scan_rows,16,16,64,64); + const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn"); - TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,x_offs,y_offs,0,0,0,0,0); - - if (TC0110PCR_mask(machine) & 1) - TC0110PCR_vh_start(machine); + wgp_piv_tilemap[0] = tilemap_create(machine, get_piv0_tile_info, tilemap_scan_rows, 16, 16, 64, 64); + wgp_piv_tilemap[1] = tilemap_create(machine, get_piv1_tile_info, tilemap_scan_rows, 16, 16, 64, 64); + wgp_piv_tilemap[2] = tilemap_create(machine, get_piv2_tile_info, tilemap_scan_rows, 16, 16, 64, 64); wgp_piv_xoffs = piv_xoffs; wgp_piv_yoffs = piv_yoffs; - tilemap_set_transparent_pen( wgp_piv_tilemap[0],0 ); - tilemap_set_transparent_pen( wgp_piv_tilemap[1],0 ); - tilemap_set_transparent_pen( wgp_piv_tilemap[2],0 ); + tilemap_set_transparent_pen(wgp_piv_tilemap[0], 0); + tilemap_set_transparent_pen(wgp_piv_tilemap[1], 0); + tilemap_set_transparent_pen(wgp_piv_tilemap[2], 0); /* flipscreen n/a */ - tilemap_set_scrolldx( wgp_piv_tilemap[0],-piv_xoffs,0 ); - tilemap_set_scrolldx( wgp_piv_tilemap[1],-piv_xoffs,0 ); - tilemap_set_scrolldx( wgp_piv_tilemap[2],-piv_xoffs,0 ); - tilemap_set_scrolldy( wgp_piv_tilemap[0],-piv_yoffs,0 ); - tilemap_set_scrolldy( wgp_piv_tilemap[1],-piv_yoffs,0 ); - tilemap_set_scrolldy( wgp_piv_tilemap[2],-piv_yoffs,0 ); + tilemap_set_scrolldx(wgp_piv_tilemap[0], -piv_xoffs, 0); + tilemap_set_scrolldx(wgp_piv_tilemap[1], -piv_xoffs, 0); + tilemap_set_scrolldx(wgp_piv_tilemap[2], -piv_xoffs, 0); + tilemap_set_scrolldy(wgp_piv_tilemap[0], -piv_yoffs, 0); + tilemap_set_scrolldy(wgp_piv_tilemap[1], -piv_yoffs, 0); + tilemap_set_scrolldy(wgp_piv_tilemap[2], -piv_yoffs, 0); - /* We don't need tilemap_set_scroll_rows, as the custom draw routine - applies rowscroll manually */ - - TC0100SCN_set_colbanks(0x80,0xc0,0x40); + /* We don't need tilemap_set_scroll_rows, as the custom draw routine applies rowscroll manually */ + tc0100scn_set_colbanks(tc0100scn, 0x80, 0xc0, 0x40); } VIDEO_START( wgp ) { - wgp_core_vh_start(machine, 0,0,32,16); + wgp_core_vh_start(machine, 32, 16); } VIDEO_START( wgp2 ) { - wgp_core_vh_start(machine, 4,2,32,16); + wgp_core_vh_start(machine, 32, 16); } @@ -646,6 +639,7 @@ static void wgp_piv_layer_draw(running_machine *machine,bitmap_t *bitmap,const r VIDEO_UPDATE( wgp ) { + const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn"); int i; UINT8 layer[3]; @@ -685,7 +679,7 @@ VIDEO_UPDATE( wgp ) tilemap_set_scrolly(wgp_piv_tilemap[i], 0, wgp_piv_scrolly[i]); } - TC0100SCN_tilemap_update(screen->machine); + tc0100scn_tilemap_update(tc0100scn); bitmap_fill(bitmap, cliprect, 0); @@ -702,36 +696,34 @@ VIDEO_UPDATE( wgp ) /* We should draw the following on a 1024x1024 bitmap... */ #ifdef MAME_DEBUG - if (dislayer[layer[0]]==0) + if (dislayer[layer[0]] == 0) #endif - wgp_piv_layer_draw(screen->machine,bitmap,cliprect,layer[0],TILEMAP_DRAW_OPAQUE,1); + wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); #ifdef MAME_DEBUG - if (dislayer[layer[1]]==0) + if (dislayer[layer[1]] == 0) #endif - wgp_piv_layer_draw(screen->machine,bitmap,cliprect,layer[1],0,2); + wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[1], 0, 2); #ifdef MAME_DEBUG - if (dislayer[layer[2]]==0) + if (dislayer[layer[2]] == 0) #endif - wgp_piv_layer_draw(screen->machine,bitmap,cliprect,layer[2],0,4); + wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[2], 0, 4); - draw_sprites(screen->machine, bitmap,cliprect,16); + draw_sprites(screen->machine, bitmap, cliprect, 16); -/* ... then here we should apply rotation from wgp_sate_ctrl[] to - the bitmap before we draw the TC0100SCN layers on it */ - - layer[0] = TC0100SCN_bottomlayer(0); - layer[1] = layer[0]^1; +/* ... then here we should apply rotation from wgp_sate_ctrl[] to the bitmap before we draw the TC0100SCN layers on it */ + layer[0] = tc0100scn_bottomlayer(tc0100scn); + layer[1] = layer[0] ^ 1; layer[2] = 2; - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],0,0); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], 0, 0); #ifdef MAME_DEBUG - if (dislayer[3]==0) + if (dislayer[3] == 0) #endif - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,0); - TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,0); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0); + tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0); #if 0 {