diff --git a/.gitattributes b/.gitattributes index 7694d01eda4..edd4e9eea15 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3057,6 +3057,8 @@ src/mame/machine/subs.c svneol=native#text/plain src/mame/machine/system16.c svneol=native#text/plain src/mame/machine/tait8741.c svneol=native#text/plain src/mame/machine/tait8741.h svneol=native#text/plain +src/mame/machine/taitoio.c svneol=native#text/plain +src/mame/machine/taitoio.h svneol=native#text/plain src/mame/machine/taitosj.c svneol=native#text/plain src/mame/machine/tatsumi.c svneol=native#text/plain src/mame/machine/tecmosys.c svneol=native#text/plain diff --git a/src/mame/drivers/asuka.c b/src/mame/drivers/asuka.c index 8e03a7909be..66f85f43496 100644 --- a/src/mame/drivers/asuka.c +++ b/src/mame/drivers/asuka.c @@ -217,6 +217,7 @@ DIP locations verified for: #include "cpu/m68000/m68000.h" #include "includes/taitoipt.h" #include "video/taitoic.h" +#include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "sound/2151intf.h" @@ -348,7 +349,7 @@ static ADDRESS_MAP_START( asuka_map, ADDRESS_SPACE_PROGRAM, 16 ) 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_READWRITE8(TC0220IOC_r, TC0220IOC_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(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) @@ -362,7 +363,7 @@ static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0c0002, 0x0c0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0x100000, 0x107fff) AM_RAM AM_RANGE(0x800000, 0x800fff) AM_RAM /* network ram */ - AM_RANGE(0x900000, 0x90000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + 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 */ @@ -373,8 +374,8 @@ static ADDRESS_MAP_START( eto_map, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x10000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) AM_RANGE(0x200000, 0x203fff) AM_RAM - AM_RANGE(0x300000, 0x30000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) - AM_RANGE(0x400000, 0x40000f) AM_READ8(TC0220IOC_r, 0x00ff) /* service mode mirror */ + 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) @@ -787,6 +788,12 @@ static VIDEO_EOF( asuka ) PC090OJ_eof_callback(); } +static const tc0220ioc_interface asuka_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( bonzeadv ) @@ -839,6 +846,8 @@ static MACHINE_DRIVER_START( asuka ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -881,6 +890,8 @@ static MACHINE_DRIVER_START( cadash ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -919,6 +930,8 @@ static MACHINE_DRIVER_START( mofflott ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -961,6 +974,8 @@ static MACHINE_DRIVER_START( galmedes ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -999,6 +1014,8 @@ static MACHINE_DRIVER_START( eto ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/ninjaw.c b/src/mame/drivers/ninjaw.c index cd60b122dd6..a1fa68fed54 100644 --- a/src/mame/drivers/ninjaw.c +++ b/src/mame/drivers/ninjaw.c @@ -315,6 +315,7 @@ rumbling on a subwoofer in the cabinet.) #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" #include "video/taitoic.h" +#include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "sound/flt_vol.h" @@ -407,8 +408,8 @@ static WRITE8_HANDLER( ninjaw_pancontrol ) static ADDRESS_MAP_START( ninjaw_master_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_RANGE(0x0c0000, 0x0cffff) AM_RAM /* main ram */ - AM_RANGE(0x200000, 0x200001) AM_READWRITE8(TC0220IOC_portreg_r,TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x200002, 0x200003) AM_READWRITE8(TC0220IOC_port_r,TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x200000, 0x200001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff) + AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x210000, 0x210001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w) AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") @@ -430,8 +431,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ninjaw_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_RANGE(0x080000, 0x08ffff) AM_RAM /* main ram */ - AM_RANGE(0x200000, 0x200001) AM_READWRITE8(TC0220IOC_portreg_r,TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x200002, 0x200003) AM_READWRITE8(TC0220IOC_port_r,TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x200000, 0x200001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff) + 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) */ @@ -443,8 +444,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_RANGE(0x0c0000, 0x0cffff) AM_RAM /* main ram */ - AM_RANGE(0x200000, 0x200001) AM_READWRITE8(TC0220IOC_portreg_r,TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x200002, 0x200003) AM_READWRITE8(TC0220IOC_port_r,TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x200000, 0x200001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff) + AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x210000, 0x210001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w) AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") @@ -463,8 +464,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_RANGE(0x080000, 0x08ffff) AM_RAM /* main ram */ - AM_RANGE(0x200000, 0x200001) AM_READWRITE8(TC0220IOC_portreg_r,TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x200002, 0x200003) AM_READWRITE8(TC0220IOC_port_r,TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x200000, 0x200001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff) + 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) */ @@ -681,6 +682,12 @@ to the scrolling background. Darius2: arbitrary interleaving of 10 to keep cpus synced. *************************************************************/ +static const tc0220ioc_interface ninjaw_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( ninjaw ) /* basic machine hardware */ @@ -700,6 +707,8 @@ static MACHINE_DRIVER_START( ninjaw ) MDRV_MACHINE_START(ninjaw) MDRV_MACHINE_RESET(ninjaw) + MDRV_TC0220IOC_ADD("tc0220ioc", ninjaw_io_intf) + /* video hardware */ MDRV_GFXDECODE(ninjaw) MDRV_PALETTE_LENGTH(4096*3) @@ -773,6 +782,8 @@ static MACHINE_DRIVER_START( darius2 ) MDRV_MACHINE_START(ninjaw) MDRV_MACHINE_RESET(ninjaw) + MDRV_TC0220IOC_ADD("tc0220ioc", ninjaw_io_intf) + /* video hardware */ MDRV_GFXDECODE(ninjaw) MDRV_PALETTE_LENGTH(4096*3) @@ -1015,4 +1026,3 @@ static MACHINE_RESET( ninjaw ) GAME( 1987, ninjaw, 0, ninjaw, ninjaw, 0, ROT0, "Taito Corporation Japan", "The Ninja Warriors (World)", 0 ) GAME( 1987, ninjawj, ninjaw, ninjaw, ninjawj, 0, ROT0, "Taito Corporation", "The Ninja Warriors (Japan)", 0 ) GAME( 1989, darius2, 0, darius2, darius2, 0, ROT0, "Taito Corporation", "Darius II (Japan)", 0 ) - diff --git a/src/mame/drivers/othunder.c b/src/mame/drivers/othunder.c index 361c80e2366..8d2ca1d88ad 100644 --- a/src/mame/drivers/othunder.c +++ b/src/mame/drivers/othunder.c @@ -236,6 +236,7 @@ TODO: #include "cpu/m68000/m68000.h" #include "machine/eepromdev.h" #include "video/taitoic.h" +#include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "sound/flt_vol.h" @@ -299,18 +300,6 @@ The eeprom unlock command is different, and the write/clock/reset bits are different. ******************************************************************/ -static const UINT8 default_eeprom[128]= -{ - 0x00,0x00,0x00,0xff,0x00,0x01,0x41,0x41,0x00,0x00,0x00,0xff,0x00,0x00,0xf0,0xf0, - 0x00,0x00,0x00,0xff,0x00,0x01,0x41,0x41,0x00,0x00,0x00,0xff,0x00,0x00,0xf0,0xf0, - 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x01,0x40,0x00,0x00,0x00,0xf0,0x00, - 0x00,0x01,0x42,0x85,0x00,0x00,0xf1,0xe3,0x00,0x01,0x40,0x00,0x00,0x00,0xf0,0x00, - 0x00,0x01,0x42,0x85,0x00,0x00,0xf1,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -}; - static const eeprom_interface eeprom_intf = { 6, /* address bits */ @@ -322,9 +311,10 @@ static const eeprom_interface eeprom_intf = "0100111111" /* unlock command */ }; -static WRITE16_HANDLER( othunder_TC0220IOC_w ) +static WRITE16_HANDLER( othunder_tc0220ioc_w ) { const device_config *device; + if (ACCESSING_BITS_0_7) { switch (offset) @@ -353,7 +343,8 @@ if (data & 4) break; default: - TC0220IOC_w(space,offset,data & 0xff); + device = devtag_get_device(space->machine, "tc0220ioc"); + tc0220ioc_w(device, offset, data & 0xff); } } } @@ -363,9 +354,10 @@ if (data & 4) GAME INPUTS **********************************************************/ -static READ16_HANDLER( othunder_TC0220IOC_r ) +static READ16_HANDLER( othunder_tc0220ioc_r ) { const device_config *device; + switch (offset) { case 0x03: @@ -373,7 +365,8 @@ static READ16_HANDLER( othunder_TC0220IOC_r ) return (eepromdev_read_bit(device) & 1) << 7; default: - return TC0220IOC_r( space, offset ); + device = devtag_get_device(space->machine, "tc0220ioc"); + return tc0220ioc_r(device, offset); } } @@ -482,7 +475,7 @@ static WRITE8_HANDLER( othunder_TC0310FAM_w ) static ADDRESS_MAP_START( othunder_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x080000, 0x08ffff) AM_RAM - AM_RANGE(0x090000, 0x09000f) AM_READWRITE(othunder_TC0220IOC_r, othunder_TC0220IOC_w) + 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 */ @@ -670,6 +663,12 @@ static const ym2610_interface ym2610_config = MACHINE DRIVERS ***********************************************************/ +static const tc0220ioc_interface othunder_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( othunder ) /* basic machine hardware */ @@ -686,6 +685,8 @@ static MACHINE_DRIVER_START( othunder ) MDRV_MACHINE_START(othunder) MDRV_MACHINE_RESET(othunder) + MDRV_TC0220IOC_ADD("tc0220ioc", othunder_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/slapshot.c b/src/mame/drivers/slapshot.c index 2b8744d9f75..59363939b66 100644 --- a/src/mame/drivers/slapshot.c +++ b/src/mame/drivers/slapshot.c @@ -138,6 +138,7 @@ Region byte at offset 0x031: #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "machine/timekpr.h" +#include "machine/taitoio.h" VIDEO_EOF( taito_no_buffer ); @@ -198,14 +199,15 @@ static INTERRUPT_GEN( slapshot_interrupt ) static READ16_HANDLER( slapshot_service_input_r ) { + const device_config *tc0640fio = devtag_get_device(space->machine, "tc0640fio"); switch (offset) { case 0x03: - return ((input_port_read(space->machine, "IN1") & 0xef) | + return ((input_port_read(space->machine, "SYSTEM") & 0xef) | (input_port_read(space->machine, "SERVICE") & 0x10)) << 8; /* IN3 + service switch */ default: - return TC0640FIO_r(space,offset) << 8; + return tc0640fio_r(tc0640fio, offset) << 8; } } @@ -287,7 +289,7 @@ static ADDRESS_MAP_START( slapshot_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x900000, 0x907fff) AM_READWRITE(color_ram_word_r, color_ram_word_w) AM_BASE(&color_ram) /* 8bpg palette */ AM_RANGE(0xa00000, 0xa03fff) AM_DEVREADWRITE8("mk48t08", timekeeper_r, timekeeper_w, 0xff00) /* nvram (only low bytes used) */ AM_RANGE(0xb00000, 0xb0001f) AM_WRITE8(TC0360PRI_w, 0xff00) /* priority chip */ - AM_RANGE(0xc00000, 0xc0000f) AM_READWRITE(TC0640FIO_halfword_byteswap_r, TC0640FIO_halfword_byteswap_w) + AM_RANGE(0xc00000, 0xc0000f) AM_DEVREADWRITE("tc0640fio", tc0640fio_halfword_byteswap_r, tc0640fio_halfword_byteswap_w) AM_RANGE(0xc00020, 0xc0002f) AM_READ(slapshot_service_input_r) /* service mirror */ AM_RANGE(0xd00000, 0xd00003) AM_READWRITE(slapshot_msb_sound_r, slapshot_msb_sound_w) ADDRESS_MAP_END @@ -302,7 +304,7 @@ static ADDRESS_MAP_START( opwolf3_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x900000, 0x907fff) AM_READWRITE(color_ram_word_r, color_ram_word_w) AM_BASE(&color_ram) /* 8bpg palette */ AM_RANGE(0xa00000, 0xa03fff) AM_DEVREADWRITE8("mk48t08", timekeeper_r, timekeeper_w, 0xff00) /* nvram (only low bytes used) */ AM_RANGE(0xb00000, 0xb0001f) AM_WRITE8(TC0360PRI_w, 0xff00) /* priority chip */ - AM_RANGE(0xc00000, 0xc0000f) AM_READWRITE(TC0640FIO_halfword_byteswap_r, TC0640FIO_halfword_byteswap_w) + AM_RANGE(0xc00000, 0xc0000f) AM_DEVREADWRITE("tc0640fio", tc0640fio_halfword_byteswap_r, tc0640fio_halfword_byteswap_w) AM_RANGE(0xc00020, 0xc0002f) AM_READ(slapshot_service_input_r) /* service mirror */ AM_RANGE(0xd00000, 0xd00003) AM_READWRITE(slapshot_msb_sound_r, slapshot_msb_sound_w) AM_RANGE(0xe00000, 0xe00007) AM_READWRITE(opwolf3_adc_r, opwolf3_adc_req_w) @@ -317,7 +319,7 @@ static ADDRESS_MAP_START( opwolf3_z80_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc000, 0xdfff) AM_RAM AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE("ymsnd", ym2610_r,ym2610_w) AM_RANGE(0xe200, 0xe200) AM_READNOP AM_WRITE(taitosound_slave_port_w) - AM_RANGE(0xe201, 0xe201) AM_READWRITE(taitosound_slave_comm_r,taitosound_slave_comm_w) + AM_RANGE(0xe201, 0xe201) AM_READWRITE(taitosound_slave_comm_r, taitosound_slave_comm_w) AM_RANGE(0xe400, 0xe403) AM_WRITENOP /* pan */ AM_RANGE(0xea00, 0xea00) AM_READNOP AM_RANGE(0xee00, 0xee00) AM_WRITENOP /* ? */ @@ -332,17 +334,7 @@ ADDRESS_MAP_END /* Tags below are the ones expected by TC0640FIO_halfword_byteswap_r */ static INPUT_PORTS_START( slapshot ) - PORT_START("DSWA") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("DSWB") + PORT_START("COINS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -352,7 +344,7 @@ static INPUT_PORTS_START( slapshot ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN0") + PORT_START("BUTTONS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) @@ -362,7 +354,7 @@ static INPUT_PORTS_START( slapshot ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") + PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -372,7 +364,7 @@ static INPUT_PORTS_START( slapshot ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") + PORT_START("JOY") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) @@ -388,17 +380,7 @@ INPUT_PORTS_END /* Tags below are the ones expected by TC0640FIO_halfword_byteswap_r */ static INPUT_PORTS_START( opwolf3 ) - PORT_START("DSWA") /* IN0, all bogus */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("DSWB") + PORT_START("COINS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -408,7 +390,7 @@ static INPUT_PORTS_START( opwolf3 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_START("IN0") + PORT_START("BUTTONS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("1 Player Start/Button3")// also button 3 @@ -418,7 +400,7 @@ static INPUT_PORTS_START( opwolf3 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("2 Player Start/Button3")// also button 3 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") + PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -428,7 +410,7 @@ static INPUT_PORTS_START( opwolf3 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") + PORT_START("JOY") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -438,19 +420,19 @@ static INPUT_PORTS_START( opwolf3 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("SERVICE") /* IN5, so we can OR in service switch */ + PORT_START("SERVICE") PORT_SERVICE_NO_TOGGLE(0x10, IP_ACTIVE_LOW) - PORT_START("GUN1X") /* IN 6, P1X */ + PORT_START("GUN1X") PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_REVERSE PORT_PLAYER(1) - PORT_START("GUN1Y") /* IN 7, P1Y */ + PORT_START("GUN1Y") PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_PLAYER(1) - PORT_START("GUN2X") /* IN 8, P2X */ + PORT_START("GUN2X") PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_REVERSE PORT_PLAYER(2) - PORT_START("GUN2Y") /* IN 9, P2Y */ + PORT_START("GUN2Y") PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_PLAYER(2) INPUT_PORTS_END @@ -513,6 +495,12 @@ static const ym2610_interface ym2610_config = MACHINE DRIVERS ***********************************************************/ +static const tc0640fio_interface slapshot_io_intf = +{ + DEVCB_NULL, DEVCB_INPUT_PORT("COINS"), + DEVCB_INPUT_PORT("BUTTONS"), DEVCB_INPUT_PORT("SYSTEM"), DEVCB_INPUT_PORT("JOY") /* port read handlers */ +}; + static MACHINE_DRIVER_START( slapshot ) /* basic machine hardware */ @@ -527,6 +515,8 @@ static MACHINE_DRIVER_START( slapshot ) MDRV_MACHINE_START(slapshot) + MDRV_TC0640FIO_ADD("tc0640fio", slapshot_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -567,6 +557,8 @@ static MACHINE_DRIVER_START( opwolf3 ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0640FIO_ADD("tc0640fio", slapshot_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -691,25 +683,25 @@ static DRIVER_INIT( slapshot ) { UINT32 offset,i; UINT8 *gfx = memory_region(machine, "gfx2"); - int size=memory_region_length(machine, "gfx2"); + int size = memory_region_length(machine, "gfx2"); int data; - offset = size/2; - for (i = size/2+size/4; i>0) & 3; - d2 = (data>>2) & 3; - d3 = (data>>4) & 3; - d4 = (data>>6) & 3; + d1 = (data >> 0) & 3; + d2 = (data >> 2) & 3; + d3 = (data >> 4) & 3; + d4 = (data >> 6) & 3; - gfx[offset] = (d1<<2) | (d2<<6); + gfx[offset] = (d1 << 2) | (d2 << 6); offset++; - gfx[offset] = (d3<<2) | (d4<<6); + gfx[offset] = (d3 << 2) | (d4 << 6); offset++; } } diff --git a/src/mame/drivers/taito_b.c b/src/mame/drivers/taito_b.c index e7c4f96153d..9ab3f9cfb6d 100644 --- a/src/mame/drivers/taito_b.c +++ b/src/mame/drivers/taito_b.c @@ -171,9 +171,9 @@ Notes: #include "cpu/z80/z80.h" #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" -#include "video/taitoic.h" #include "machine/eepromdev.h" #include "machine/mb87078.h" +#include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2203intf.h" #include "sound/2610intf.h" @@ -339,7 +339,7 @@ static WRITE16_HANDLER( gain_control_w ) { if (ACCESSING_BITS_8_15) { - if (offset==0) + if (offset == 0) { MB87078_data_w(space->machine, 0, data>>8, 0); //logerror("MB87078 dsel=0 data=%4x\n",data); @@ -428,13 +428,14 @@ static WRITE16_HANDLER( player_34_coin_ctrl_w ) static READ16_HANDLER( pbobble_input_bypass_r ) { + const device_config *tc0640fio = devtag_get_device(space->machine, "tc0640fio"); switch (offset) { case 0x01: - return input_port_read(space->machine, "DSWB") << 8; + return input_port_read(space->machine, "COIN") << 8; default: - return TC0640FIO_r(space, offset) << 8; + return tc0640fio_r(tc0640fio, offset) << 8; } } @@ -456,13 +457,13 @@ static ADDRESS_MAP_START( rastsag2_map, ADDRESS_SPACE_PROGRAM, 16 ) TC0180VCU_MEMRW( 0x400000 ) AM_RANGE(0x800000, 0x800001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x800002, 0x800003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) - AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) + AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) ADDRESS_MAP_END static ADDRESS_MAP_START( crimec_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) TC0180VCU_MEMRW( 0x400000 ) AM_RANGE(0x600000, 0x600001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x600002, 0x600003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -476,7 +477,7 @@ static ADDRESS_MAP_START( tetrist_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x200001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x200002, 0x200003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) TC0180VCU_MEMRW( 0x400000 ) - AM_RANGE(0x600000, 0x60000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) + AM_RANGE(0x600000, 0x60000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0x800000, 0x807fff) AM_RAM /* Main RAM */ AM_RANGE(0xa00000, 0xa01fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram) ADDRESS_MAP_END @@ -485,8 +486,8 @@ static ADDRESS_MAP_START( tetrista_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) TC0180VCU_MEMRW( 0x400000 ) - AM_RANGE(0x600000, 0x600001) AM_READWRITE8(TC0220IOC_portreg_r, TC0220IOC_portreg_w, 0xff00) - AM_RANGE(0x600002, 0x600003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0xff00) + AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0xff00) + AM_RANGE(0x600002, 0x600003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0x800000, 0x803fff) AM_RAM /* Main RAM */ AM_RANGE(0xa00000, 0xa00001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0xa00002, 0xa00003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -496,7 +497,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( hitice_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM TC0180VCU_MEMRW( 0x400000 ) - AM_RANGE(0x600000, 0x60000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) + AM_RANGE(0x600000, 0x60000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0x610000, 0x610001) AM_READ_PORT("P3_P4") AM_RANGE(0x700000, 0x700001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x700002, 0x700003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -514,7 +515,7 @@ static ADDRESS_MAP_START( rambo3_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x200001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x200002, 0x200003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) TC0180VCU_MEMRW( 0x400000 ) - AM_RANGE(0x600000, 0x60000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) + AM_RANGE(0x600000, 0x60000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0x600010, 0x600011) AM_READ(tracky1_lo_r) /*player 1*/ AM_RANGE(0x600012, 0x600013) AM_READ(tracky1_hi_r) AM_RANGE(0x600014, 0x600015) AM_READ(trackx1_lo_r) @@ -531,11 +532,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pbobble_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM TC0180VCU_MEMRW( 0x400000 ) - AM_RANGE(0x500000, 0x50000f) AM_READWRITE(pbobble_input_bypass_r, TC0640FIO_halfword_byteswap_w) - AM_RANGE(0x500024, 0x500025) AM_READ_PORT("IN3") /* shown in service mode, game omits to read it */ + AM_RANGE(0x500000, 0x50000f) AM_READ(pbobble_input_bypass_r) AM_DEVWRITE("tc0640fio", tc0640fio_halfword_byteswap_w) + AM_RANGE(0x500024, 0x500025) AM_READ_PORT("P3_P4_A") /* shown in service mode, game omits to read it */ AM_RANGE(0x500026, 0x500027) AM_READWRITE(eep_latch_r, eeprom_w) AM_RANGE(0x500028, 0x500029) AM_WRITE(player_34_coin_ctrl_w) /* simply locks coins 3&4 out */ - AM_RANGE(0x50002e, 0x50002f) AM_READ_PORT("IN4") /* shown in service mode, game omits to read it */ + AM_RANGE(0x50002e, 0x50002f) AM_READ_PORT("P3_P4_B") /* shown in service mode, game omits to read it */ AM_RANGE(0x600000, 0x600003) AM_WRITE(gain_control_w) AM_RANGE(0x700000, 0x700001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x700002, 0x700003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -547,11 +548,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( spacedx_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM TC0180VCU_MEMRW( 0x400000 ) - AM_RANGE(0x500000, 0x50000f) AM_READWRITE(pbobble_input_bypass_r, TC0640FIO_halfword_byteswap_w) - AM_RANGE(0x500024, 0x500025) AM_READ_PORT("IN3") + AM_RANGE(0x500000, 0x50000f) AM_READ(pbobble_input_bypass_r) AM_DEVWRITE("tc0640fio", tc0640fio_halfword_byteswap_w) + AM_RANGE(0x500024, 0x500025) AM_READ_PORT("P3_P4_A") AM_RANGE(0x500026, 0x500027) AM_READWRITE(eep_latch_r, eeprom_w) AM_RANGE(0x500028, 0x500029) AM_WRITE(player_34_coin_ctrl_w) /* simply locks coins 3&4 out */ - AM_RANGE(0x50002e, 0x50002f) AM_READ_PORT("IN4") + AM_RANGE(0x50002e, 0x50002f) AM_READ_PORT("P3_P4_B") AM_RANGE(0x600000, 0x600003) AM_WRITE(gain_control_w) AM_RANGE(0x700000, 0x700001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x700002, 0x700003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -564,7 +565,7 @@ static ADDRESS_MAP_START( spacedxo_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x100001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x100002, 0x100003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x210000, 0x210001) AM_READ_PORT("IN3") AM_RANGE(0x220000, 0x220001) AM_READ_PORT("IN4") AM_RANGE(0x230000, 0x230001) AM_READ_PORT("IN5") @@ -576,11 +577,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( qzshowby_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_READWRITE(pbobble_input_bypass_r, TC0640FIO_halfword_byteswap_w) - AM_RANGE(0x200024, 0x200025) AM_READ_PORT("IN3") /* player 3,4 start */ + AM_RANGE(0x200000, 0x20000f) AM_READ(pbobble_input_bypass_r) AM_DEVWRITE("tc0640fio", tc0640fio_halfword_byteswap_w) + AM_RANGE(0x200024, 0x200025) AM_READ_PORT("P3_P4_A") /* player 3,4 start */ AM_RANGE(0x200026, 0x200027) AM_WRITE(eeprom_w) AM_RANGE(0x200028, 0x200029) AM_READWRITE(player_34_coin_ctrl_r, player_34_coin_ctrl_w) - AM_RANGE(0x20002e, 0x20002f) AM_READ_PORT("IN4") /* player 3,4 buttons */ + AM_RANGE(0x20002e, 0x20002f) AM_READ_PORT("P3_P4_B") /* player 3,4 buttons */ TC0180VCU_MEMRW( 0x400000 ) AM_RANGE(0x600000, 0x600001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x600002, 0x600003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -596,7 +597,7 @@ static ADDRESS_MAP_START( viofight_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200002, 0x200003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) TC0180VCU_MEMRW( 0x400000 ) AM_RANGE(0x600000, 0x601fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x800000, 0x80000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) + AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0xa00000, 0xa03fff) AM_RAM /* Main RAM */ ADDRESS_MAP_END @@ -606,8 +607,8 @@ static ADDRESS_MAP_START( masterw_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x200000, 0x203fff) AM_RAM /* Main RAM */ TC0180VCU_MEMRW( 0x400000 ) AM_RANGE(0x600000, 0x601fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x800000, 0x800001) AM_READWRITE8(TC0220IOC_portreg_r, TC0220IOC_portreg_w, 0xff00) - AM_RANGE(0x800002, 0x800003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0xff00) + AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0xff00) + AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) AM_RANGE(0xa00000, 0xa00001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0xa00002, 0xa00003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) ADDRESS_MAP_END @@ -619,7 +620,7 @@ static ADDRESS_MAP_START( silentd_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100002, 0x100003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) // AM_RANGE(0x10001a, 0x10001b) AM_READNOP // ??? read at $1e344 // AM_RANGE(0x10001c, 0x10001d) AM_READNOP // ??? read at $1e356 - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x210000, 0x210001) AM_READ_PORT("IN3") AM_RANGE(0x220000, 0x220001) AM_READ_PORT("IN4") AM_RANGE(0x230000, 0x230001) AM_READ_PORT("IN5") @@ -636,8 +637,8 @@ static ADDRESS_MAP_START( selfeena_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x103fff) AM_RAM /* Main RAM */ TC0180VCU_MEMRW( 0x200000 ) AM_RANGE(0x300000, 0x301fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x400000, 0x40000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) - AM_RANGE(0x410000, 0x41000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0xff00) /* mirror address - seems to be only used for coin control */ + AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) + AM_RANGE(0x410000, 0x41000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00) /* mirror address - seems to be only used for coin control */ AM_RANGE(0x500000, 0x500001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x500002, 0x500003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) ADDRESS_MAP_END @@ -647,7 +648,7 @@ static ADDRESS_MAP_START( sbm_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM /* Main RAM */ AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x300000, 0x30000f) AM_READWRITE(TC0510NIO_halfword_wordswap_r, TC0510NIO_halfword_wordswap_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_wordswap_r, tc0510nio_halfword_wordswap_w) AM_RANGE(0x320000, 0x320001) AM_READNOP AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) TC0180VCU_MEMRW( 0x900000 ) @@ -1189,7 +1190,7 @@ static INPUT_PORTS_START( hitice ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_START("P3_P4") /* IN5 IN6 */ + PORT_START("P3_P4") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) @@ -1325,9 +1326,8 @@ INPUT_PORTS_END /* Helps document the input ports. */ -/* Tags below are the ones expected by TC0640FIO_r */ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ - PORT_START("DSWA") + PORT_START("SERVICE") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ @@ -1337,7 +1337,7 @@ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) /*ok*/ - PORT_START("DSWB") + PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eepromdev_read_bit) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1347,7 +1347,7 @@ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) /*ok*/ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(2) /*ok*/ - PORT_START("IN0") + PORT_START("START") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE2 ) @@ -1357,7 +1357,7 @@ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 ) - PORT_START("IN1") + PORT_START("P1_P2_A") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) @@ -1367,7 +1367,7 @@ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ - PORT_START("IN2") + PORT_START("P1_P2_B") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) @@ -1377,7 +1377,7 @@ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_START("IN3") + PORT_START("P3_P4_A") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) @@ -1387,7 +1387,7 @@ static INPUT_PORTS_START( pbobble ) /* Missing P3&4 controls ! */ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ - PORT_START("IN4") + PORT_START("P3_P4_B") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) @@ -1488,9 +1488,8 @@ static INPUT_PORTS_START( spacedxo ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END -/* Tags below are the ones expected by TC0640FIO_r */ static INPUT_PORTS_START( qzshowby ) - PORT_START("DSWA") + PORT_START("SERVICE") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ @@ -1500,7 +1499,7 @@ static INPUT_PORTS_START( qzshowby ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /*unused in test mode*/ PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) /*ok*/ - PORT_START("DSWB") + PORT_START("COIN") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eepromdev_read_bit) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1510,7 +1509,7 @@ static INPUT_PORTS_START( qzshowby ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) /*ok*/ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(2) /*ok*/ - PORT_START("IN0") /* IN0 */ /*all OK*/ + PORT_START("START") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE2 ) @@ -1520,17 +1519,17 @@ static INPUT_PORTS_START( qzshowby ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 ) - PORT_START("IN1") /* IN 1 */ /*all OK*/ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* IPT_START1 in test mode */ + PORT_START("P1_P2_A") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* IPT_START1 in test mode */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* IPT_START2 in test mode */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* IPT_START2 in test mode */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") /* IN2 */ /*all OK*/ + PORT_START("P1_P2_B") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) @@ -1540,7 +1539,7 @@ static INPUT_PORTS_START( qzshowby ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) - PORT_START("IN3") + PORT_START("P3_P4_A") PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* IPT_START3 in test mode */ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1550,7 +1549,7 @@ static INPUT_PORTS_START( qzshowby ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN4") + PORT_START("P3_P4_B") PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3) @@ -1914,7 +1913,7 @@ static INPUT_PORTS_START( ryujin ) INPUT_PORTS_END static INPUT_PORTS_START( sbm ) - PORT_START("DSWA") /* DSW A *///+-ok + PORT_START("DSWA") //+-ok PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off )) PORT_DIPSETTING( 0x00, DEF_STR( On )) @@ -1937,7 +1936,7 @@ static INPUT_PORTS_START( sbm ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("DSWB") /* DSW B */ //+-ok + PORT_START("DSWB") //+-ok TAITO_DIFFICULTY PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) @@ -1958,7 +1957,7 @@ static INPUT_PORTS_START( sbm ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("IN0") + PORT_START("JOY") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)//sound select UP PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)//sound select DOWN PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)//ok (object test) @@ -1968,7 +1967,7 @@ static INPUT_PORTS_START( sbm ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)//BEN IN (ticket dispenser) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)//LADY ???? - PORT_START("IN1") + PORT_START("START") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )//select; ok (1P in object test) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )//start ; ok (2P in object test) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1978,7 +1977,7 @@ static INPUT_PORTS_START( sbm ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") + PORT_START("PHOTOSENSOR") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) //ok PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) //ok PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) //ok @@ -2122,6 +2121,25 @@ static MACHINE_RESET( mb87078 ) } +static const tc0220ioc_interface taitob_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + +static const tc0640fio_interface pbobble_io_intf = +{ + DEVCB_INPUT_PORT("SERVICE"), DEVCB_INPUT_PORT("COIN"), + DEVCB_INPUT_PORT("START"), DEVCB_INPUT_PORT("P1_P2_A"), DEVCB_INPUT_PORT("P1_P2_B") /* port read handlers */ +}; + +static const tc0510nio_interface sbm_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("JOY"), DEVCB_INPUT_PORT("START"), DEVCB_INPUT_PORT("PHOTOSENSOR") /* port read handlers */ +}; + + static MACHINE_DRIVER_START( rastsag2 ) /* basic machine hardware */ @@ -2134,6 +2152,8 @@ static MACHINE_DRIVER_START( rastsag2 ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2172,6 +2192,8 @@ static MACHINE_DRIVER_START( ashura ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2210,6 +2232,8 @@ static MACHINE_DRIVER_START( crimec ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2248,6 +2272,8 @@ static MACHINE_DRIVER_START( tetrist ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2285,6 +2311,8 @@ static MACHINE_DRIVER_START( tetrista ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2323,6 +2351,8 @@ static MACHINE_DRIVER_START( hitice ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2367,6 +2397,8 @@ static MACHINE_DRIVER_START( rambo3 ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2405,6 +2437,8 @@ static MACHINE_DRIVER_START( rambo3a ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2430,7 +2464,6 @@ static MACHINE_DRIVER_START( rambo3a ) MDRV_SOUND_ROUTE(2, "mono", 1.0) MACHINE_DRIVER_END - static MACHINE_DRIVER_START( pbobble ) /* basic machine hardware */ @@ -2446,6 +2479,8 @@ static MACHINE_DRIVER_START( pbobble ) MDRV_MACHINE_RESET(mb87078) MDRV_EEPROM_ADD("eeprom", taitob_eeprom_intf) + MDRV_TC0640FIO_ADD("tc0640fio", pbobble_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2487,6 +2522,8 @@ static MACHINE_DRIVER_START( spacedx ) MDRV_MACHINE_RESET(mb87078) MDRV_EEPROM_ADD("eeprom", taitob_eeprom_intf) + MDRV_TC0640FIO_ADD("tc0640fio", pbobble_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2525,6 +2562,8 @@ static MACHINE_DRIVER_START( spacedxo ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2566,6 +2605,8 @@ static MACHINE_DRIVER_START( qzshowby ) MDRV_MACHINE_RESET(mb87078) MDRV_EEPROM_ADD("eeprom", taitob_eeprom_intf) + MDRV_TC0640FIO_ADD("tc0640fio", pbobble_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2604,6 +2645,8 @@ static MACHINE_DRIVER_START( viofight ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2646,6 +2689,8 @@ static MACHINE_DRIVER_START( masterw ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2685,6 +2730,8 @@ static MACHINE_DRIVER_START( silentd ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2723,6 +2770,8 @@ static MACHINE_DRIVER_START( selfeena ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2770,6 +2819,8 @@ static MACHINE_DRIVER_START( ryujin ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitob_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2815,6 +2866,8 @@ static MACHINE_DRIVER_START( sbm ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0510NIO_ADD("tc0510nio", sbm_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3602,9 +3655,9 @@ GAME( 1992, silentdu, silentd, silentd, silentdj, taito_b, ROT0, "Taito Ameri GAME( 1993, ryujin, 0, ryujin, ryujin, taito_b, ROT270, "Taito Corporation", "Ryu Jin (Japan)", GAME_SUPPORTS_SAVE ) GAME( 1993, qzshowby, 0, qzshowby, qzshowby, taito_b, ROT0, "Taito Corporation", "Quiz Sekai wa SHOW by shobai (Japan)", GAME_SUPPORTS_SAVE ) GAME( 1994, pbobble, 0, pbobble, pbobble, taito_b, ROT0, "Taito Corporation", "Puzzle Bobble (Japan, B-System)", GAME_SUPPORTS_SAVE ) -GAME( 1994, spacedx, 0, spacedx, pbobble, taito_b, ROT0, "Taito Corporation", "Space Invaders DX (US) v2.1", GAME_SUPPORTS_SAVE ) -GAME( 1994, spacedxj, spacedx, spacedx, pbobble, taito_b, ROT0, "Taito Corporation", "Space Invaders DX (Japan) v2.1", GAME_SUPPORTS_SAVE ) -GAME( 1994, spacedxo, spacedx, spacedxo, spacedxo, taito_b, ROT0, "Taito Corporation", "Space Invaders DX (Japan) v2.0", GAME_SUPPORTS_SAVE ) +GAME( 1994, spacedx, 0, spacedx, pbobble, taito_b, ROT0, "Taito Corporation", "Space Invaders DX (US, v2.1)", GAME_SUPPORTS_SAVE ) +GAME( 1994, spacedxj, spacedx, spacedx, pbobble, taito_b, ROT0, "Taito Corporation", "Space Invaders DX (Japan, v2.1)", GAME_SUPPORTS_SAVE ) +GAME( 1994, spacedxo, spacedx, spacedxo, spacedxo, taito_b, ROT0, "Taito Corporation", "Space Invaders DX (Japan, v2.0)", GAME_SUPPORTS_SAVE ) /* Sonic Blast Man is a ticket dispensing game. (Japanese version however does not dispense them, only US does - try the "sbm_patch" in the machine_config). diff --git a/src/mame/drivers/taito_f2.c b/src/mame/drivers/taito_f2.c index 26588e1404f..a035fd5ce4a 100644 --- a/src/mame/drivers/taito_f2.c +++ b/src/mame/drivers/taito_f2.c @@ -298,6 +298,7 @@ Notes: #include "cpu/m68000/m68000.h" #include "video/taitoic.h" #include "audio/taitosnd.h" +#include "machine/taitoio.h" #include "includes/taito_f2.h" #include "sound/2203intf.h" #include "sound/2610intf.h" @@ -695,7 +696,7 @@ static ADDRESS_MAP_START( finalb_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x200007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_word_w) /* palette */ - AM_RANGE(0x300000, 0x30000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x320000, 0x320001) AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -709,7 +710,7 @@ static ADDRESS_MAP_START( dondokod_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x300000, 0x30000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x320000, 0x320001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -724,7 +725,7 @@ static ADDRESS_MAP_START( megab_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x100001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x100002, 0x100003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) - AM_RANGE(0x120000, 0x12000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x120000, 0x12000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x180000, 0x180fff) AM_READWRITE(cchip2_word_r, cchip2_word_w) AM_BASE(&cchip2_ram) AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_RANGE(0x300000, 0x301fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) @@ -738,7 +739,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( thundfox_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x101fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x220000, 0x220001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x220002, 0x220003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) AM_RANGE(0x300000, 0x30ffff) AM_RAM @@ -754,7 +755,7 @@ static ADDRESS_MAP_START( cameltry_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x300000, 0x30000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x300018, 0x30001f) AM_READ(cameltry_paddle_r) AM_RANGE(0x320000, 0x320001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -770,7 +771,7 @@ static ADDRESS_MAP_START( qtorimon_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x200007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_word_w) /* palette */ - AM_RANGE(0x500000, 0x50000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x500000, 0x50000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x600000, 0x600001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x600002, 0x600003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -783,7 +784,7 @@ static ADDRESS_MAP_START( liquidk_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x300000, 0x30000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* I/O */ + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x320000, 0x320001) AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -815,7 +816,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ssi_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x100000, 0x10000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_RANGE(0x300000, 0x301fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x400000, 0x400001) AM_WRITE8(taitosound_port_w, 0xff00) @@ -830,7 +831,7 @@ static ADDRESS_MAP_START( gunfront_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x300000, 0x30000f) AM_READWRITE(TC0510NIO_halfword_wordswap_r, TC0510NIO_halfword_wordswap_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_wordswap_r, tc0510nio_halfword_wordswap_w) AM_RANGE(0x320000, 0x320001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -907,7 +908,7 @@ static ADDRESS_MAP_START( koshien_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x300000, 0x30000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x320000, 0x320001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x320002, 0x320003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -919,7 +920,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( yuyugogo_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x400000, 0x400001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x400002, 0x400003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) AM_RANGE(0x800000, 0x80ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ @@ -970,7 +971,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( qzquest_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x17ffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x300000, 0x300001) AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) @@ -994,7 +995,7 @@ static ADDRESS_MAP_START( pulirula_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x820000, 0x82000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xa00000, 0xa0001f) AM_WRITE8(TC0360PRI_w, 0xff00) - AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0xb00000, 0xb0000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) ADDRESS_MAP_END static ADDRESS_MAP_START( metalb_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -1006,7 +1007,7 @@ static ADDRESS_MAP_START( metalb_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x530000, 0x53002f) AM_READWRITE(TC0480SCP_ctrl_word_r, TC0480SCP_ctrl_word_w) AM_RANGE(0x600000, 0x60001f) AM_WRITE8(TC0360PRI_w, 0x00ff) AM_RANGE(0x700000, 0x703fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x800000, 0x80000f) AM_READWRITE(TC0510NIO_halfword_wordswap_r, TC0510NIO_halfword_wordswap_w) + AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_wordswap_r, tc0510nio_halfword_wordswap_w) AM_RANGE(0x900000, 0x900001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0x900002, 0x900003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) // AM_RANGE(0xa00000, 0xa00001) AM_WRITENOP /* ??? */ @@ -1014,7 +1015,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( qzchikyu_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x17ffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x300000, 0x300001) AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) @@ -1066,7 +1067,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( dinorex_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x2fffff) AM_ROM - AM_RANGE(0x300000, 0x30000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x400000, 0x400fff) AM_WRITE(taitof2_sprite_extension_w) AM_BASE(&f2_sprite_extension) AM_SIZE(&f2_spriteext_size) AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBxxxx_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x600000, 0x60ffff) AM_RAM @@ -1091,7 +1092,7 @@ static ADDRESS_MAP_START( qjinsei_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x820000, 0x82000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xa00000, 0xa0001f) AM_WRITE8(TC0360PRI_w, 0x00ff) /* ?? */ - AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0xb00000, 0xb0000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) ADDRESS_MAP_END static ADDRESS_MAP_START( qcrayon_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -1106,7 +1107,7 @@ static ADDRESS_MAP_START( qcrayon_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x900000, 0x90ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ AM_RANGE(0x920000, 0x92000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) - AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0xb00000, 0xb0001f) AM_WRITE8(TC0360PRI_w, 0x00ff) /* ?? */ ADDRESS_MAP_END @@ -1118,7 +1119,7 @@ static ADDRESS_MAP_START( qcrayon2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x500000, 0x50ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ AM_RANGE(0x520000, 0x52000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0x600000, 0x67ffff) AM_ROM AM_REGION("extra", 0) /* extra data rom */ - AM_RANGE(0x700000, 0x70000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x700000, 0x70000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x900000, 0x90001f) AM_WRITE8(TC0360PRI_w, 0x00ff) /* ?? */ AM_RANGE(0xa00000, 0xa00001) AM_WRITE8(taitosound_port_w, 0xff00) AM_RANGE(0xa00002, 0xa00003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0xff00) @@ -1137,7 +1138,7 @@ static ADDRESS_MAP_START( driftout_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x820000, 0x82000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xa00000, 0xa0001f) AM_WRITE8(TC0360PRI_w, 0xff00) - AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0xb00000, 0xb0000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0xb00018, 0xb00019) AM_READ_PORT("PADDLE1") AM_RANGE(0xb0001a, 0xb0001b) AM_READ_PORT("PADDLE2") ADDRESS_MAP_END @@ -1154,7 +1155,7 @@ static ADDRESS_MAP_START( driveout_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x820000, 0x82000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xa00000, 0xa0001f) AM_WRITE8(TC0360PRI_w, 0xff00) - AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0xb00000, 0xb0000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0xb00018, 0xb00019) AM_READ_PORT("PADDLE1") AM_RANGE(0xb0001a, 0xb0001b) AM_READ_PORT("PADDLE2") ADDRESS_MAP_END @@ -3161,6 +3162,19 @@ static const ym2203_interface ym2203_config = MACHINE DRIVERS ***********************************************************/ +static const tc0220ioc_interface taitof2_io220_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + +static const tc0510nio_interface taitof2_io510_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + + static MACHINE_START( f2 ) { memory_configure_bank(machine, "bank2", 0, 8, memory_region(machine, "audiocpu") + 0x10000, 0x4000); @@ -3204,11 +3218,27 @@ static MACHINE_DRIVER_START( taito_f2 ) MDRV_SOUND_ROUTE(2, "rspeaker", 1.0) MACHINE_DRIVER_END +static MACHINE_DRIVER_START( taito_f2_tc0220ioc ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(taito_f2) + + MDRV_TC0220IOC_ADD("tc0220ioc", taitof2_io220_intf) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( taito_f2_tc0510nio ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(taito_f2) + + MDRV_TC0510NIO_ADD("tc0510nio", taitof2_io510_intf) +MACHINE_DRIVER_END + static MACHINE_DRIVER_START( finalb ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(finalb_map) @@ -3222,7 +3252,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( dondokod ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(dondokod_map) @@ -3237,7 +3267,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( megab ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(megab_map) @@ -3250,7 +3280,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( thundfox ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(thundfox_map) @@ -3265,7 +3295,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( cameltry ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(cameltry_map) @@ -3279,7 +3309,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( qtorimon ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(qtorimon_map) @@ -3292,7 +3322,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( liquidk ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0220ioc) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(liquidk_map) @@ -3319,7 +3349,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( ssi ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(ssi_map) @@ -3333,7 +3363,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( gunfront ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(gunfront_map) @@ -3401,7 +3431,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( koshien ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(koshien_map) @@ -3414,7 +3444,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( yuyugogo ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(yuyugogo_map) @@ -3454,7 +3484,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( qzquest ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(qzquest_map) @@ -3466,7 +3496,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( pulirula ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(pulirula_map) @@ -3480,7 +3510,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( metalb ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(metalb_map) @@ -3495,7 +3525,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( qzchikyu ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(qzchikyu_map) @@ -3550,7 +3580,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( dinorex ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(dinorex_map) @@ -3563,7 +3593,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( qjinsei ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(qjinsei_map) @@ -3576,7 +3606,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( qcrayon ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(qcrayon_map) @@ -3589,7 +3619,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( qcrayon2 ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(qcrayon2_map) @@ -3602,7 +3632,7 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( driftout ) /* basic machine hardware */ - MDRV_IMPORT_FROM(taito_f2) + MDRV_IMPORT_FROM(taito_f2_tc0510nio) MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(driftout_map) @@ -3623,6 +3653,8 @@ static MACHINE_DRIVER_START( cameltrya ) MDRV_CPU_ADD("audiocpu", Z80,24000000/4) /* verifed on pcb */ MDRV_CPU_PROGRAM_MAP(cameltrya_sound_map) + MDRV_TC0220IOC_ADD("tc0220ioc", taitof2_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3664,6 +3696,8 @@ static MACHINE_DRIVER_START( driveout ) MDRV_CPU_ADD("audiocpu", Z80,24000000/6) /* 4 MHz */ MDRV_CPU_PROGRAM_MAP(driveout_sound_map) + MDRV_TC0510NIO_ADD("tc0510nio", taitof2_io510_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/taito_h.c b/src/mame/drivers/taito_h.c index 5c069cb2300..682cec7a596 100644 --- a/src/mame/drivers/taito_h.c +++ b/src/mame/drivers/taito_h.c @@ -145,6 +145,7 @@ some kind of zoom table? #include "cpu/m68000/m68000.h" #include "includes/taitoipt.h" #include "audio/taitosnd.h" +#include "machine/taitoio.h" #include "video/taitoic.h" #include "sound/2610intf.h" @@ -199,7 +200,8 @@ static READ8_HANDLER( syvalion_input_bypass_r ) { /* Bypass TC0220IOC controller for analog input */ - UINT8 port = TC0220IOC_port_r(space,0); /* read port number */ + const device_config *tc0220ioc = devtag_get_device(space->machine, "tc0220ioc"); + UINT8 port = tc0220ioc_port_r(tc0220ioc, 0); /* read port number */ switch( port ) { @@ -240,7 +242,7 @@ static READ8_HANDLER( syvalion_input_bypass_r ) return 0x00; default: - return TC0220IOC_portreg_r( space,offset ); + return tc0220ioc_portreg_r(tc0220ioc, offset); } } @@ -268,8 +270,8 @@ static WRITE8_HANDLER( sound_bankswitch_w ) static ADDRESS_MAP_START( syvalion_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM AM_BASE(&taitoh_68000_mainram) - AM_RANGE(0x200000, 0x200001) AM_READWRITE8(syvalion_input_bypass_r, TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x200002, 0x200003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x200000, 0x200001) AM_READ8(syvalion_input_bypass_r, 0x00ff) AM_DEVWRITE8("tc0220ioc", tc0220ioc_portreg_w, 0x00ff) + 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) @@ -279,8 +281,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( recordbr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM AM_BASE(&taitoh_68000_mainram) - AM_RANGE(0x200000, 0x200001) AM_READWRITE8(TC0220IOC_portreg_r, TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x200002, 0x200003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x200000, 0x200001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff) + 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) @@ -290,7 +292,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( dleague_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM AM_BASE(&taitoh_68000_mainram) - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + 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) @@ -544,6 +546,12 @@ static MACHINE_START( taitoh ) } +static const tc0220ioc_interface taitoh_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( syvalion ) /* basic machine hardware */ @@ -559,6 +567,8 @@ static MACHINE_DRIVER_START( syvalion ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoh_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -599,6 +609,8 @@ static MACHINE_DRIVER_START( recordbr ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoh_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -639,6 +651,8 @@ static MACHINE_DRIVER_START( dleague ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoh_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/taito_z.c b/src/mame/drivers/taito_z.c index 89aa4db2435..20e278a05c5 100644 --- a/src/mame/drivers/taito_z.c +++ b/src/mame/drivers/taito_z.c @@ -884,6 +884,7 @@ J1100256A VIDEO PCB #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "sound/flt_vol.h" +#include "machine/taitoio.h" #include "contcirc.lh" #include "dblaxle.lh" @@ -1049,6 +1050,7 @@ static READ16_HANDLER( eep_latch_r ) static WRITE16_HANDLER( spacegun_output_bypass_w ) { + const device_config *tc0220ioc = devtag_get_device(space->machine, "tc0220ioc"); switch (offset) { case 0x03: @@ -1064,7 +1066,7 @@ static WRITE16_HANDLER( spacegun_output_bypass_w ) break; default: - TC0220IOC_w(space, offset, data); /* might be a 510NIO ! */ + tc0220ioc_w(tc0220ioc, offset, data); /* might be a 510NIO ! */ } } @@ -1077,7 +1079,8 @@ static READ8_HANDLER( contcirc_input_bypass_r ) { /* Bypass TC0220IOC controller for analog input */ - UINT8 port = TC0220IOC_port_r(space, 0); /* read port number */ + const device_config *tc0220ioc = devtag_get_device(space->machine, "tc0220ioc"); + UINT8 port = tc0220ioc_port_r(tc0220ioc, 0); /* read port number */ int steer = 0; int fake = input_port_read(space->machine, "FAKE"); @@ -1108,7 +1111,7 @@ static READ8_HANDLER( contcirc_input_bypass_r ) return steer >> 8; default: - return TC0220IOC_portreg_r(space, offset); + return tc0220ioc_portreg_r(tc0220ioc, offset); } } @@ -1117,7 +1120,8 @@ static READ8_HANDLER( chasehq_input_bypass_r ) { /* Bypass TC0220IOC controller for extra inputs */ - UINT8 port = TC0220IOC_port_r(space, 0); /* read port number */ + const device_config *tc0220ioc = devtag_get_device(space->machine, "tc0220ioc"); + UINT8 port = tc0220ioc_port_r(tc0220ioc, 0); /* read port number */ int steer = 0; int fake = input_port_read(space->machine, "FAKE"); @@ -1159,7 +1163,7 @@ static READ8_HANDLER( chasehq_input_bypass_r ) return steer >> 8; default: - return TC0220IOC_portreg_r(space, offset); + return tc0220ioc_portreg_r(tc0220ioc, offset); } } @@ -1261,6 +1265,7 @@ static READ16_HANDLER( sci_steer_input_r ) static READ16_HANDLER( spacegun_input_bypass_r ) { const device_config *eeprom = devtag_get_device(space->machine, "eeprom"); + const device_config *tc0220ioc = devtag_get_device(space->machine, "tc0220ioc"); switch (offset) { @@ -1268,7 +1273,7 @@ static READ16_HANDLER( spacegun_input_bypass_r ) return eepromdev_read_bit(eeprom) << 7; default: - return TC0220IOC_r(space, offset); /* might be a 510NIO ! */ + return tc0220ioc_r(tc0220ioc, offset); /* might be a 510NIO ! */ } } @@ -1516,8 +1521,8 @@ static ADDRESS_MAP_START( contcirc_cpub_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x080000, 0x083fff) AM_RAM AM_RANGE(0x084000, 0x087fff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x100000, 0x100001) AM_READWRITE8(contcirc_input_bypass_r, TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x100002, 0x100003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0x00ff) /* (actually game uses TC040IOC) */ + AM_RANGE(0x100000, 0x100001) AM_READ8(contcirc_input_bypass_r, 0x00ff) AM_DEVWRITE8("tc0220ioc", tc0220ioc_portreg_w, 0x00ff) + AM_RANGE(0x100002, 0x100003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) /* (actually game uses TC040IOC) */ AM_RANGE(0x200000, 0x200003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) ADDRESS_MAP_END @@ -1527,8 +1532,8 @@ static ADDRESS_MAP_START( chasehq_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x107fff) AM_RAM AM_RANGE(0x108000, 0x10bfff) AM_RAM AM_SHARE("share1") AM_RANGE(0x10c000, 0x10ffff) AM_RAM - AM_RANGE(0x400000, 0x400001) AM_READWRITE8(chasehq_input_bypass_r, TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x400002, 0x400003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x400000, 0x400001) AM_READ8(chasehq_input_bypass_r, 0x00ff) AM_DEVWRITE8("tc0220ioc", tc0220ioc_portreg_w, 0x00ff) + AM_RANGE(0x400002, 0x400003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x800000, 0x800001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x820000, 0x820003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) AM_RANGE(0xa00000, 0xa00007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette */ @@ -1563,8 +1568,8 @@ static ADDRESS_MAP_START( enforce_cpub_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x103fff) AM_RAM AM_RANGE(0x104000, 0x107fff) AM_RAM AM_SHARE("share1") AM_RANGE(0x200000, 0x200003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) - AM_RANGE(0x300000, 0x300001) AM_READWRITE8(TC0220IOC_portreg_r, TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x300002, 0x300003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x300000, 0x300001) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff) + AM_RANGE(0x300002, 0x300003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) ADDRESS_MAP_END @@ -1572,7 +1577,7 @@ static ADDRESS_MAP_START( bshark_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x110000, 0x113fff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x400000, 0x40000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x600000, 0x600001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x800000, 0x800007) AM_READWRITE(bshark_stick_r, bshark_stick_w) AM_RANGE(0xa00000, 0xa01fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) @@ -1599,7 +1604,7 @@ static ADDRESS_MAP_START( sci_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x107fff) AM_RAM AM_RANGE(0x108000, 0x10bfff) AM_RAM AM_SHARE("share1") AM_RANGE(0x10c000, 0x10ffff) AM_RAM - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x200010, 0x20001f) AM_READ(sci_steer_input_r) // AM_RANGE(0x400000, 0x400001) AM_WRITE(cpua_ctrl_w) // ?? doesn't seem to fit what's written AM_RANGE(0x420000, 0x420003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) @@ -1622,7 +1627,7 @@ static ADDRESS_MAP_START( nightstr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_RANGE(0x110000, 0x113fff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x400000, 0x40000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x800000, 0x800001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x820000, 0x820003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) AM_RANGE(0xa00000, 0xa00007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette */ @@ -1659,7 +1664,7 @@ static ADDRESS_MAP_START( aquajack_cpub_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x100000, 0x103fff) AM_RAM AM_RANGE(0x104000, 0x107fff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x200000, 0x20000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x300000, 0x300003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) AM_RANGE(0x800800, 0x80083f) AM_READ(aquajack_unknown_r) // Read regularly after write to 800800... // AM_RANGE(0x800800, 0x800801) AM_WRITE(taitoz_unknown_w) @@ -1695,7 +1700,7 @@ static ADDRESS_MAP_START( dblaxle_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x200000, 0x203fff) AM_RAM AM_RANGE(0x210000, 0x21ffff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x400000, 0x40000f) AM_READWRITE(TC0510NIO_halfword_wordswap_r, TC0510NIO_halfword_wordswap_w) + AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_wordswap_r, tc0510nio_halfword_wordswap_w) AM_RANGE(0x400010, 0x40001f) AM_READ(dblaxle_steer_input_r) AM_RANGE(0x600000, 0x600001) AM_WRITE(cpua_ctrl_w) /* could this be causing int6 ? */ AM_RANGE(0x620000, 0x620003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) @@ -1720,7 +1725,7 @@ static ADDRESS_MAP_START( racingb_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x103fff) AM_RAM AM_RANGE(0x110000, 0x11ffff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x300000, 0x30000f) AM_READWRITE(TC0510NIO_halfword_wordswap_r, TC0510NIO_halfword_wordswap_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_wordswap_r, tc0510nio_halfword_wordswap_w) AM_RANGE(0x300010, 0x30001f) AM_READ(dblaxle_steer_input_r) AM_RANGE(0x500002, 0x500003) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x520000, 0x520003) AM_READWRITE(taitoz_sound_r, taitoz_sound_w) @@ -2022,7 +2027,7 @@ ADDRESS_MAP_END static INPUT_PORTS_START( contcirc ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW A:1") PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, "Cockpit" ) // analogue accelerator pedal @@ -2033,7 +2038,7 @@ static INPUT_PORTS_START( contcirc ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_WORLD_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") PORT_DIPNAME( 0x03, 0x03, "Difficulty 1 (time/speed)" ) PORT_DIPLOCATION("SW B:1,2") PORT_DIPSETTING( 0x02, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x03, DEF_STR( Normal ) ) @@ -2053,7 +2058,7 @@ static INPUT_PORTS_START( contcirc ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW B:7" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW B:8" ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) @@ -2063,7 +2068,7 @@ static INPUT_PORTS_START( contcirc ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) /* main accel key */ - PORT_START("IN1") /* IN1: b3 not mapped: standardized on holding b4=lo gear */ + PORT_START("IN1") /* b3 not mapped: standardized on holding b4=lo gear */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT ) @@ -2073,13 +2078,13 @@ static INPUT_PORTS_START( contcirc ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) /* main brake key */ - PORT_START("IN2") /* IN2, unused */ + PORT_START("IN2") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("STEER") /* IN3, "handle" i.e. steering */ + PORT_START("STEER") /* "handle" i.e. steering */ PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1) - PORT_START("FAKE") /* IN4, fake allowing digital steer */ + PORT_START("FAKE") /* fake allowing digital steer */ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_DIPNAME( 0x10, 0x00, "Steering type" ) @@ -2095,7 +2100,7 @@ static INPUT_PORTS_START( contcrcu ) INPUT_PORTS_END static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW A:1,2") /* US Manual states DIPS 1 & 2 "MUST REMAIN OFF" */ PORT_DIPSETTING( 0x03, "Upright / Steering Lock" ) PORT_DIPSETTING( 0x02, "Upright / No Steering Lock" ) @@ -2107,7 +2112,7 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_WORLD_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPNAME( 0x0c, 0x0c, "Timer Setting" ) PORT_DIPLOCATION("SW B:3,4") PORT_DIPSETTING( 0x08, "70 Seconds" ) @@ -2127,7 +2132,7 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) @@ -2137,7 +2142,7 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* turbo */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2147,10 +2152,10 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") /* IN2, unused */ + PORT_START("IN2") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("UNK1") /* IN3, ??? */ + PORT_START("UNK1") /* ??? */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2160,7 +2165,7 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("UNK2") /* IN4, ??? */ + PORT_START("UNK2") /* ??? */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2170,7 +2175,7 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("UNK3") /* IN5, ??? */ + PORT_START("UNK3") /* ??? */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2180,7 +2185,7 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("UNK4") /* IN6, ??? */ + PORT_START("UNK4") /* ??? */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2190,10 +2195,10 @@ static INPUT_PORTS_START( chasehq ) // IN3-6 perhaps used with cockpit setup? // PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("STEER") /* IN7, steering */ + PORT_START("STEER") /* steering */ PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(1) - PORT_START("FAKE") /* IN8, fake allowing digital steer */ + PORT_START("FAKE") /* fake allowing digital steer */ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_DIPNAME( 0x10, 0x00, "Steering type" ) @@ -2209,7 +2214,7 @@ static INPUT_PORTS_START( chasehqj ) INPUT_PORTS_END static INPUT_PORTS_START( enforce ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW A:1" ) PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW A:2" ) PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW A:3" ) @@ -2218,7 +2223,7 @@ static INPUT_PORTS_START( enforce ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) // Says SHIFT LO in test mode !? TAITO_COINAGE_JAPAN_OLD_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW B:3" ) PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW B:4" ) @@ -2229,7 +2234,7 @@ static INPUT_PORTS_START( enforce ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW B:7" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW B:8" ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) @@ -2239,7 +2244,7 @@ static INPUT_PORTS_START( enforce ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* Bomb */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* Laser */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT ) @@ -2249,12 +2254,12 @@ static INPUT_PORTS_START( enforce ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_START("IN2") /* IN2, unused */ + PORT_START("IN2") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( bshark ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPNAME( 0x01, 0x01, "Mirror screen" ) PORT_DIPLOCATION("SW A:1") // manual says it must be off PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -2265,7 +2270,7 @@ static INPUT_PORTS_START( bshark ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_US_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPNAME( 0x0c, 0x04, "Speed of Sight" ) PORT_DIPLOCATION("SW B:3,4") PORT_DIPSETTING( 0x0c, "Slow" ) @@ -2277,7 +2282,7 @@ static INPUT_PORTS_START( bshark ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW B:7" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW B:8" ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) @@ -2287,10 +2292,10 @@ static INPUT_PORTS_START( bshark ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") /* IN1, unused */ + PORT_START("IN1") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("IN2") /* IN2, b2-5 affect sound num in service mode but otherwise useless (?) */ + PORT_START("IN2") /* b2-5 affect sound num in service mode but otherwise useless (?) */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) @@ -2321,7 +2326,7 @@ static INPUT_PORTS_START( bsharkj ) INPUT_PORTS_END static INPUT_PORTS_START( sci ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW A:1") PORT_DIPSETTING( 0x01, "Cockpit" ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) @@ -2332,7 +2337,7 @@ static INPUT_PORTS_START( sci ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_WORLD_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPNAME( 0x0c, 0x0c, "Timer Setting" ) PORT_DIPLOCATION("SW B:3,4") PORT_DIPSETTING( 0x08, "70 Seconds" ) @@ -2352,7 +2357,7 @@ static INPUT_PORTS_START( sci ) PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x00, DEF_STR( Low ) ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* fire */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -2362,7 +2367,7 @@ static INPUT_PORTS_START( sci ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) /* turbo */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) /* "center" */ @@ -2372,13 +2377,13 @@ static INPUT_PORTS_START( sci ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") /* IN2, unused */ + PORT_START("IN2") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("STEER") /* IN3, steering */ + PORT_START("STEER") /* steering */ PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(15) PORT_PLAYER(1) - PORT_START("FAKE") /* IN4, fake allowing digital steer */ + PORT_START("FAKE") /* fake allowing digital steer */ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_DIPNAME( 0x10, 0x00, "Steering type" ) @@ -2401,7 +2406,7 @@ static INPUT_PORTS_START( scij ) INPUT_PORTS_END static INPUT_PORTS_START( nightstr ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW A:1") PORT_DIPSETTING( 0x01, "Cockpit" ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) @@ -2412,7 +2417,7 @@ static INPUT_PORTS_START( nightstr ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_WORLD_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPNAME( 0x0c, 0x0c, "Bonus Shields" ) PORT_DIPLOCATION("SW B:3,4") PORT_DIPSETTING( 0x08, "3" ) @@ -2431,7 +2436,7 @@ static INPUT_PORTS_START( nightstr ) PORT_DIPSETTING( 0x80, "7 Shots / Second" ) PORT_DIPSETTING( 0x00, "10 Shots / Second" ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -2441,10 +2446,10 @@ static INPUT_PORTS_START( nightstr ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_TILT ) - PORT_START("IN1") /* IN1, unused */ + PORT_START("IN1") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("IN2") /* IN2 */ + PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) @@ -2482,7 +2487,7 @@ static INPUT_PORTS_START( nghtstru ) INPUT_PORTS_END static INPUT_PORTS_START( aquajack ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW A:1") PORT_DIPSETTING( 0x80, "Cockpit" ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) @@ -2502,7 +2507,7 @@ static INPUT_PORTS_START( aquajack ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_4C ) ) /* 2 Coins to Continue */ PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) /* 3 Coins to Continue */ - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW B:2,1") PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) ) @@ -2528,7 +2533,7 @@ static INPUT_PORTS_START( aquajack ) /* PORT_DIPSETTING( 0x01, "Normal Game" ) */ /* PORT_DIPSETTING( 0x00, "Endless Game" ) */ - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -2538,7 +2543,7 @@ static INPUT_PORTS_START( aquajack ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) @@ -2548,7 +2553,7 @@ static INPUT_PORTS_START( aquajack ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") /* IN2, what is it ??? */ + PORT_START("IN2") /* what is it ??? */ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(1) INPUT_PORTS_END @@ -2569,7 +2574,7 @@ static INPUT_PORTS_START( aquajckj ) INPUT_PORTS_END static INPUT_PORTS_START( spacegun ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW A:1" ) // Manual says Always Off PORT_DIPNAME( 0x02, 0x02, "Always have gunsight power up" ) PORT_DIPLOCATION("SW A:2") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) @@ -2580,7 +2585,7 @@ static INPUT_PORTS_START( spacegun ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_WORLD_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW B:3" ) // Manual lists dips 3 through 6 and 8 as Always off PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW B:4" ) @@ -2593,7 +2598,7 @@ static INPUT_PORTS_START( spacegun ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) @@ -2603,10 +2608,10 @@ static INPUT_PORTS_START( spacegun ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2) - PORT_START("IN1") /* IN1, unused */ + PORT_START("IN1") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("IN2") /* IN2 */ + PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) @@ -2635,7 +2640,7 @@ static INPUT_PORTS_START( spacegun ) INPUT_PORTS_END static INPUT_PORTS_START( dblaxle ) - PORT_START("DSWA") /* DSW A */ + PORT_START("DSWA") PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW A:1" ) PORT_DIPNAME( 0x02, 0x02, "Gear shift" ) PORT_DIPLOCATION("SW A:2") PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) @@ -2646,7 +2651,7 @@ static INPUT_PORTS_START( dblaxle ) PORT_DIPSETTING( 0x08, DEF_STR( On ) ) TAITO_COINAGE_US_LOC(SW A) - PORT_START("DSWB") /* DSW B */ + PORT_START("DSWB") TAITO_DIFFICULTY_LOC(SW B) PORT_DIPNAME( 0x04, 0x00, "Multi-machine hookup ?" ) PORT_DIPLOCATION("SW B:3") // doesn't boot if on PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) @@ -2661,7 +2666,7 @@ static INPUT_PORTS_START( dblaxle ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW B:7" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW B:8" ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) /* shift */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -2671,7 +2676,7 @@ static INPUT_PORTS_START( dblaxle ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) /* "back" */ - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* nitro */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) /* "center" */ @@ -2681,13 +2686,13 @@ static INPUT_PORTS_START( dblaxle ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") /* IN2, unused */ + PORT_START("IN2") /* unused */ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("STEER") /* IN3, steering */ + PORT_START("STEER") /* steering */ PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(40) PORT_KEYDELTA(10) PORT_PLAYER(1) - PORT_START("FAKE") /* IN4, fake allowing digital steer */ + PORT_START("FAKE") /* fake allowing digital steer */ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_DIPNAME( 0x10, 0x00, "Steering type" ) @@ -2868,6 +2873,20 @@ Contcirc road glitchiness in attract? ***********************************************************/ + +static const tc0220ioc_interface taitoz_io220_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + +static const tc0510nio_interface taitoz_io510_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + + /* Contcirc vis area seems narrower than the other games... */ static MACHINE_DRIVER_START( contcirc ) @@ -2886,6 +2905,8 @@ static MACHINE_DRIVER_START( contcirc ) MDRV_MACHINE_START(taitoz) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2942,6 +2963,8 @@ static MACHINE_DRIVER_START( chasehq ) MDRV_MACHINE_START(taitoz) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -2998,6 +3021,8 @@ static MACHINE_DRIVER_START( enforce ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3052,6 +3077,8 @@ static MACHINE_DRIVER_START( bshark ) MDRV_QUANTUM_TIME(HZ(6000)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3107,6 +3134,8 @@ static MACHINE_DRIVER_START( sci ) MDRV_QUANTUM_TIME(HZ(3000)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3162,6 +3191,8 @@ static MACHINE_DRIVER_START( nightstr ) MDRV_QUANTUM_TIME(HZ(6000)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3218,6 +3249,8 @@ static MACHINE_DRIVER_START( aquajack ) MDRV_QUANTUM_TIME(HZ(30000)) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3271,6 +3304,8 @@ static MACHINE_DRIVER_START( spacegun ) MDRV_EEPROM_ADD("eeprom", spacegun_eeprom_intf) MDRV_EEPROM_DATA(spacegun_default_eeprom, 128) + MDRV_TC0220IOC_ADD("tc0220ioc", taitoz_io220_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3326,6 +3361,8 @@ static MACHINE_DRIVER_START( dblaxle ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_TC0510NIO_ADD("tc0510nio", taitoz_io510_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -3380,6 +3417,8 @@ static MACHINE_DRIVER_START( racingb ) MDRV_MACHINE_START(taitoz) MDRV_QUANTUM_TIME(HZ(6000)) + MDRV_TC0510NIO_ADD("tc0510nio", taitoz_io510_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/taitoair.c b/src/mame/drivers/taitoair.c index 99359548582..223c8a95877 100644 --- a/src/mame/drivers/taitoair.c +++ b/src/mame/drivers/taitoair.c @@ -221,6 +221,7 @@ cpu #2 (PC=0000060E): unmapped memory word read from 0000683A & FFFF #include "includes/taitoipt.h" #include "audio/taitosnd.h" #include "video/taitoic.h" +#include "machine/taitoio.h" #include "cpu/tms32025/tms32025.h" #include "sound/2610intf.h" @@ -387,7 +388,7 @@ static ADDRESS_MAP_START( airsys_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x910000, 0x91ffff) AM_RAM AM_BASE(&dsp_ram) /* "dsp common ram" (TMS320C25) */ AM_RANGE(0xa00000, 0xa00007) AM_READ(stick_input_r) AM_RANGE(0xa00100, 0xa00107) AM_READ(stick2_input_r) - AM_RANGE(0xa00200, 0xa0020f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) /* other I/O */ + AM_RANGE(0xa00200, 0xa0020f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) /* other I/O */ AM_RANGE(0xa80000, 0xa80001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) AM_RANGE(0xa80002, 0xa80003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff) AM_RANGE(0xb00000, 0xb007ff) AM_RAM /* "power common ram" (mecha drive) */ @@ -595,6 +596,12 @@ static const ym2610_interface airsys_ym2610_interface = MACHINE DRIVERS ************************************************************/ +static const tc0220ioc_interface airsys_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( airsys ) /* basic machine hardware */ @@ -614,6 +621,8 @@ static MACHINE_DRIVER_START( airsys ) MDRV_MACHINE_START(taitoair) + MDRV_TC0220IOC_ADD("tc0220ioc", airsys_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/topspeed.c b/src/mame/drivers/topspeed.c index 24f345edc14..36627d6d721 100644 --- a/src/mame/drivers/topspeed.c +++ b/src/mame/drivers/topspeed.c @@ -234,6 +234,7 @@ Stephh's notes (based on the game M68000 code and some tests) : #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" #include "video/taitoic.h" +#include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2151intf.h" #include "sound/msm5205.h" @@ -335,10 +336,11 @@ static INTERRUPT_GEN( topspeed_cpub_interrupt ) static READ8_HANDLER( topspeed_input_bypass_r ) { - UINT8 port = TC0220IOC_port_r(space,0); /* read port number */ + const device_config *tc0220ioc = devtag_get_device(space->machine, "tc0220ioc"); + UINT8 port = tc0220ioc_port_r(tc0220ioc, 0); /* read port number */ int steer = 0; - int analogue_steer = input_port_read_safe(space->machine, STEER_PORT_TAG,0x00); - int fake = input_port_read_safe(space->machine, FAKE_PORT_TAG,0x00); + int analogue_steer = input_port_read_safe(space->machine, STEER_PORT_TAG, 0x00); + int fake = input_port_read_safe(space->machine, FAKE_PORT_TAG, 0x00); if (!(fake & 0x10)) /* Analogue steer (the real control method) */ { @@ -356,9 +358,7 @@ static READ8_HANDLER( topspeed_input_bypass_r ) if (fake & 0x01) /* pressing left */ steer = 0xff80; - /* To allow hiscore input we must let you return to - continuous input type while you press up */ - + /* To allow hiscore input we must let you return to continuous input type while you press up */ if (fake & 0x04) /* pressing up */ steer = analogue_steer; } @@ -372,7 +372,7 @@ static READ8_HANDLER( topspeed_input_bypass_r ) return steer >> 8; default: - return TC0220IOC_portreg_r(space,offset); + return tc0220ioc_portreg_r(tc0220ioc, offset); } } @@ -474,8 +474,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( topspeed_cpub_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x400000, 0X40ffff) AM_READWRITE(sharedram_r, sharedram_w) AM_BASE(&sharedram) - AM_RANGE(0x880000, 0x880001) AM_READWRITE8(topspeed_input_bypass_r, TC0220IOC_portreg_w, 0x00ff) - AM_RANGE(0x880002, 0x880003) AM_READWRITE8(TC0220IOC_port_r, TC0220IOC_port_w, 0x00ff) + AM_RANGE(0x880000, 0x880001) AM_READ8(topspeed_input_bypass_r, 0x00ff) AM_DEVWRITE8("tc0220ioc", tc0220ioc_portreg_w, 0x00ff) + AM_RANGE(0x880002, 0x880003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff) AM_RANGE(0x900000, 0x9003ff) AM_READWRITE(topspeed_motor_r, topspeed_motor_w) /* motor CPU */ ADDRESS_MAP_END @@ -670,6 +670,12 @@ static MACHINE_RESET( topspeed ) adpcm_data = -1; } +static const tc0220ioc_interface topspeed_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( topspeed ) /* basic machine hardware */ @@ -687,6 +693,8 @@ static MACHINE_DRIVER_START( topspeed ) MDRV_MACHINE_START(topspeed) MDRV_MACHINE_RESET(topspeed) + MDRV_TC0220IOC_ADD("tc0220ioc", topspeed_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -857,4 +865,3 @@ static DRIVER_INIT( topspeed ) GAMEL( 1987, topspeed, 0, topspeed, topspeed, topspeed, ROT0, "Taito Corporation Japan", "Top Speed (World)", 0, layout_topspeed ) GAMEL( 1987, topspeedu,topspeed, topspeed, fullthrl, topspeed, ROT0, "Taito America Corporation (Romstar license)", "Top Speed (US)", 0, layout_topspeed ) GAMEL( 1987, fullthrl, topspeed, topspeed, fullthrl, topspeed, ROT0, "Taito Corporation", "Full Throttle (Japan)", 0, layout_topspeed ) - diff --git a/src/mame/drivers/warriorb.c b/src/mame/drivers/warriorb.c index 013b22e21b9..ff19af69c46 100644 --- a/src/mame/drivers/warriorb.c +++ b/src/mame/drivers/warriorb.c @@ -149,6 +149,7 @@ Colscroll effects? #include "rendlay.h" #include "cpu/m68000/m68000.h" #include "video/taitoic.h" +#include "machine/taitoio.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" #include "sound/flt_vol.h" @@ -225,7 +226,7 @@ static ADDRESS_MAP_START( darius2d_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x800000, 0x80000f) AM_READWRITE8(TC0220IOC_r, TC0220IOC_w, 0x00ff) + AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) // AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ??? AM_RANGE(0x830000, 0x830003) AM_READWRITE(warriorb_sound_r, warriorb_sound_w) ADDRESS_MAP_END @@ -240,7 +241,7 @@ static ADDRESS_MAP_START( warriorb_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x800000, 0x80000f) AM_READWRITE(TC0510NIO_halfword_r, TC0510NIO_halfword_w) + AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) // AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3 AM_RANGE(0x830000, 0x830003) AM_READWRITE(warriorb_sound_r, warriorb_sound_w) ADDRESS_MAP_END @@ -444,6 +445,18 @@ static DEVICE_GET_INFO( subwoofer ) MACHINE DRIVERS ***********************************************************/ +static const tc0220ioc_interface darius2d_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + +static const tc0510nio_interface warriorb_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( darius2d ) /* basic machine hardware */ @@ -457,6 +470,8 @@ static MACHINE_DRIVER_START( darius2d ) MDRV_MACHINE_START( warriorb ) MDRV_MACHINE_RESET( taito_dualscreen ) + MDRV_TC0220IOC_ADD("tc0220ioc", darius2d_io_intf) + /* video hardware */ MDRV_GFXDECODE(warriorb) MDRV_PALETTE_LENGTH(4096*2) @@ -515,6 +530,8 @@ static MACHINE_DRIVER_START( warriorb ) MDRV_MACHINE_START( warriorb ) MDRV_MACHINE_RESET( taito_dualscreen ) + MDRV_TC0510NIO_ADD("tc0510nio", warriorb_io_intf) + /* video hardware */ MDRV_GFXDECODE(warriorb) MDRV_PALETTE_LENGTH(4096*2) diff --git a/src/mame/drivers/wgp.c b/src/mame/drivers/wgp.c index 5a7818e88dd..96865c2a34f 100644 --- a/src/mame/drivers/wgp.c +++ b/src/mame/drivers/wgp.c @@ -397,6 +397,7 @@ Stephh's notes (based on the game M68000 code and some tests) : #include "cpu/z80/z80.h" #include "includes/taitoipt.h" #include "cpu/m68000/m68000.h" +#include "machine/taitoio.h" #include "video/taitoic.h" #include "audio/taitosnd.h" #include "sound/2610intf.h" @@ -657,7 +658,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM /* main CPUA ram */ AM_RANGE(0x140000, 0x143fff) AM_RAM AM_BASE(&sharedram) AM_SIZE(&sharedram_size) - AM_RANGE(0x180000, 0x18000f) AM_READWRITE8(TC0220IOC_r,TC0220IOC_w, 0xff00) + 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 */ @@ -940,7 +941,7 @@ static MACHINE_RESET( wgp ) { banknum = -1; cpua_ctrl = 0xff; - port_sel=0; + port_sel = 0; } static MACHINE_START( wgp ) @@ -950,6 +951,12 @@ static MACHINE_START( wgp ) state_save_register_postload(machine, wgp_postload, NULL); } +static const tc0220ioc_interface wgp_io_intf = +{ + DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), + DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_INPUT_PORT("IN2") /* port read handlers */ +}; + static MACHINE_DRIVER_START( wgp ) /* basic machine hardware */ @@ -969,6 +976,8 @@ static MACHINE_DRIVER_START( wgp ) MDRV_QUANTUM_TIME(HZ(30000)) + MDRV_TC0220IOC_ADD("tc0220ioc", wgp_io_intf) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/machine/taitoio.c b/src/mame/machine/taitoio.c new file mode 100644 index 00000000000..877c36da429 --- /dev/null +++ b/src/mame/machine/taitoio.c @@ -0,0 +1,579 @@ +/*************************************************************************** + +TC0220IOC +--------- +A simple I/O interface with integrated watchdog. +It has four address inputs, which would suggest 16 bytes of addressing space, +but only the first 8 seem to be used. + +000 R IN00-07 (DSA) +000 W watchdog reset +001 R IN08-15 (DSB) +002 R IN16-23 (1P) +002 W unknown. Usually written on startup: initialize? +003 R IN24-31 (2P) +004 RW coin counters and lockout +005 W unknown +006 W unknown +007 R INB0-7 (coin) + + +TC0510NIO +--------- +Newer version of the I/O chip + +000 R DSWA +000 W watchdog reset +001 R DSWB +001 W unknown (ssi) +002 R 1P +003 R 2P +003 W unknown (yuyugogo, qzquest and qzchikyu use it a lot) +004 RW coin counters and lockout +005 W unknown +006 W unknown (koshien and pulirula use it a lot) +007 R coin + + +TC0640FIO +--------- +Newer version of the I/O chip ? + + +***************************************************************************/ + +#include "driver.h" +#include "machine/taitoio.h" + + +/***************************************************************************/ +/* */ +/* TC0220IOC */ +/* */ +/***************************************************************************/ + +typedef struct _tc0220ioc_state tc0220ioc_state; +struct _tc0220ioc_state +{ + UINT8 regs[8]; + UINT8 port; + + devcb_resolved_read8 read_0; + devcb_resolved_read8 read_1; + devcb_resolved_read8 read_2; + devcb_resolved_read8 read_3; + devcb_resolved_read8 read_7; +}; + +/***************************************************************************** + INLINE FUNCTIONS +*****************************************************************************/ + +INLINE tc0220ioc_state *tc0220ioc_get_safe_token( const device_config *device ) +{ + assert(device != NULL); + assert(device->token != NULL); + assert(device->type == TC0220IOC); + + return (tc0220ioc_state *)device->token; +} + +INLINE const tc0220ioc_interface *tc0220ioc_get_interface( const device_config *device ) +{ + assert(device != NULL); + assert((device->type == TC0220IOC)); + return (const tc0220ioc_interface *) device->static_config; +} + +/***************************************************************************** + DEVICE HANDLERS +*****************************************************************************/ + +READ8_DEVICE_HANDLER( tc0220ioc_r ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + + switch (offset) + { + case 0x00: + return devcb_call_read8(&tc0220ioc->read_0, 0); + + case 0x01: + return devcb_call_read8(&tc0220ioc->read_1, 0); + + case 0x02: + return devcb_call_read8(&tc0220ioc->read_2, 0); + + case 0x03: + return devcb_call_read8(&tc0220ioc->read_3, 0); + + case 0x04: /* coin counters and lockout */ + return tc0220ioc->regs[4]; + + case 0x07: + return devcb_call_read8(&tc0220ioc->read_7, 0); + + default: +//logerror("PC %06x: warning - read TC0220IOC address %02x\n",cpu_get_pc(space->cpu),offset); + return 0xff; + } +} + +WRITE8_DEVICE_HANDLER( tc0220ioc_w ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + + tc0220ioc->regs[offset] = data; + + switch (offset) + { + case 0x00: + watchdog_reset(device->machine); + break; + + case 0x04: /* coin counters and lockout, hi nibble irrelevant */ + coin_lockout_w(device->machine, 0, ~data & 0x01); + coin_lockout_w(device->machine, 1, ~data & 0x02); + coin_counter_w(device->machine, 0, data & 0x04); + coin_counter_w(device->machine, 1, data & 0x08); + +//if (data & 0xf0) +//logerror("PC %06x: warning - write %02x to TC0220IOC address %02x\n",cpu_get_pc(space->cpu),data,offset); + + break; + + default: +//logerror("PC %06x: warning - write %02x to TC0220IOC address %02x\n",cpu_get_pc(space->cpu),data,offset); + break; + } +} + +READ8_DEVICE_HANDLER( tc0220ioc_port_r ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + return tc0220ioc->port; +} + +WRITE8_DEVICE_HANDLER( tc0220ioc_port_w ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + tc0220ioc->port = data; +} + +READ8_DEVICE_HANDLER( tc0220ioc_portreg_r ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + return tc0220ioc_r(device, tc0220ioc->port); +} + +WRITE8_DEVICE_HANDLER( tc0220ioc_portreg_w ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + tc0220ioc_w(device, tc0220ioc->port, data); +} + + +/***************************************************************************** + DEVICE INTERFACE +*****************************************************************************/ + +static DEVICE_START( tc0220ioc ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + const tc0220ioc_interface *intf = tc0220ioc_get_interface(device); + + devcb_resolve_read8(&tc0220ioc->read_0, &intf->read_0, device); + devcb_resolve_read8(&tc0220ioc->read_1, &intf->read_1, device); + devcb_resolve_read8(&tc0220ioc->read_2, &intf->read_2, device); + devcb_resolve_read8(&tc0220ioc->read_3, &intf->read_3, device); + devcb_resolve_read8(&tc0220ioc->read_7, &intf->read_7, device); + + state_save_register_device_item_array(device, 0, tc0220ioc->regs); + state_save_register_device_item(device, 0, tc0220ioc->port); +} + +static DEVICE_RESET( tc0220ioc ) +{ + tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + int i; + + tc0220ioc->port = 0; + + for (i = 0; i < 8; i++) + tc0220ioc->regs[i] = 0; +} + + +/***************************************************************************/ +/* */ +/* TC0510NIO */ +/* */ +/***************************************************************************/ + +typedef struct _tc0510nio_state tc0510nio_state; +struct _tc0510nio_state +{ + UINT8 regs[8]; + + devcb_resolved_read8 read_0; + devcb_resolved_read8 read_1; + devcb_resolved_read8 read_2; + devcb_resolved_read8 read_3; + devcb_resolved_read8 read_7; +}; + +/***************************************************************************** + INLINE FUNCTIONS +*****************************************************************************/ + +INLINE tc0510nio_state *tc0510nio_get_safe_token( const device_config *device ) +{ + assert(device != NULL); + assert(device->token != NULL); + assert(device->type == TC0510NIO); + + return (tc0510nio_state *)device->token; +} + +INLINE const tc0510nio_interface *tc0510nio_get_interface( const device_config *device ) +{ + assert(device != NULL); + assert((device->type == TC0510NIO)); + return (const tc0510nio_interface *) device->static_config; +} + +/***************************************************************************** + DEVICE HANDLERS +*****************************************************************************/ + +READ8_DEVICE_HANDLER( tc0510nio_r ) +{ + tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); + + switch (offset) + { + case 0x00: + return devcb_call_read8(&tc0510nio->read_0, 0); + + case 0x01: + return devcb_call_read8(&tc0510nio->read_1, 0); + + case 0x02: + return devcb_call_read8(&tc0510nio->read_2, 0); + + case 0x03: + return devcb_call_read8(&tc0510nio->read_3, 0); + + case 0x04: /* coin counters and lockout */ + return tc0510nio->regs[4]; + + case 0x07: + return devcb_call_read8(&tc0510nio->read_7, 0); + + default: +//logerror("PC %06x: warning - read TC0510NIO address %02x\n",cpu_get_pc(space->cpu),offset); + return 0xff; + } +} + +WRITE8_DEVICE_HANDLER( tc0510nio_w ) +{ + tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); + + tc0510nio->regs[offset] = data; + + switch (offset) + { + case 0x00: + watchdog_reset(device->machine); + break; + + case 0x04: /* coin counters and lockout */ + coin_lockout_w(device->machine, 0, ~data & 0x01); + coin_lockout_w(device->machine, 1, ~data & 0x02); + coin_counter_w(device->machine, 0, data & 0x04); + coin_counter_w(device->machine, 1, data & 0x08); + break; + + default: +//logerror("PC %06x: warning - write %02x to TC0510NIO address %02x\n",cpu_get_pc(space->cpu),data,offset); + break; + } +} + +READ16_DEVICE_HANDLER( tc0510nio_halfword_r ) +{ + return tc0510nio_r(device, offset); +} + +WRITE16_DEVICE_HANDLER( tc0510nio_halfword_w ) +{ + if (ACCESSING_BITS_0_7) + tc0510nio_w(device, offset, data & 0xff); + else + { + /* driftout writes the coin counters here - bug? */ +//logerror("CPU #0 PC %06x: warning - write to MSB of TC0510NIO address %02x\n",cpu_get_pc(space->cpu),offset); + tc0510nio_w(device, offset, (data >> 8) & 0xff); + } +} + +READ16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_r ) +{ + return tc0510nio_halfword_r(device, offset ^ 1, mem_mask); +} + +WRITE16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_w ) +{ + tc0510nio_halfword_w(device, offset ^ 1,data, mem_mask); +} + + +/***************************************************************************** + DEVICE INTERFACE +*****************************************************************************/ + +static DEVICE_START( tc0510nio ) +{ + tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); + const tc0510nio_interface *intf = tc0510nio_get_interface(device); + + devcb_resolve_read8(&tc0510nio->read_0, &intf->read_0, device); + devcb_resolve_read8(&tc0510nio->read_1, &intf->read_1, device); + devcb_resolve_read8(&tc0510nio->read_2, &intf->read_2, device); + devcb_resolve_read8(&tc0510nio->read_3, &intf->read_3, device); + devcb_resolve_read8(&tc0510nio->read_7, &intf->read_7, device); + + state_save_register_device_item_array(device, 0, tc0510nio->regs); +} + +static DEVICE_RESET( tc0510nio ) +{ + tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); + int i; + + for (i = 0; i < 8; i++) + tc0510nio->regs[i] = 0; +} + +/***************************************************************************/ +/* */ +/* TC0640FIO */ +/* */ +/***************************************************************************/ + +typedef struct _tc0640fio_state tc0640fio_state; +struct _tc0640fio_state +{ + UINT8 regs[8]; + + devcb_resolved_read8 read_0; + devcb_resolved_read8 read_1; + devcb_resolved_read8 read_2; + devcb_resolved_read8 read_3; + devcb_resolved_read8 read_7; +}; + +/***************************************************************************** + INLINE FUNCTIONS +*****************************************************************************/ + +INLINE tc0640fio_state *tc0640fio_get_safe_token( const device_config *device ) +{ + assert(device != NULL); + assert(device->token != NULL); + assert(device->type == TC0640FIO); + + return (tc0640fio_state *)device->token; +} + +INLINE const tc0640fio_interface *tc0640fio_get_interface( const device_config *device ) +{ + assert(device != NULL); + assert((device->type == TC0640FIO)); + return (const tc0640fio_interface *) device->static_config; +} + +/***************************************************************************** + DEVICE HANDLERS +*****************************************************************************/ + +READ8_DEVICE_HANDLER( tc0640fio_r ) +{ + tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); + + switch (offset) + { + case 0x00: + return devcb_call_read8(&tc0640fio->read_0, 0); + + case 0x01: + return devcb_call_read8(&tc0640fio->read_1, 0); + + case 0x02: + return devcb_call_read8(&tc0640fio->read_2, 0); + + case 0x03: + return devcb_call_read8(&tc0640fio->read_3, 0); + + case 0x04: /* coin counters and lockout */ + return tc0640fio->regs[4]; + + case 0x07: + return devcb_call_read8(&tc0640fio->read_7, 0); + + default: +//logerror("PC %06x: warning - read TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); + return 0xff; + } +} + +WRITE8_DEVICE_HANDLER( tc0640fio_w ) +{ + tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); + + tc0640fio->regs[offset] = data; + + switch (offset) + { + case 0x00: + watchdog_reset(device->machine); + break; + + case 0x04: /* coin counters and lockout */ + coin_lockout_w(device->machine, 0, ~data & 0x01); + coin_lockout_w(device->machine, 1, ~data & 0x02); + coin_counter_w(device->machine, 0, data & 0x04); + coin_counter_w(device->machine, 1, data & 0x08); + break; + + default: +//logerror("PC %06x: warning - write %02x to TC0640FIO address %02x\n",cpu_get_pc(space->cpu),data,offset); + break; + } +} + +READ16_DEVICE_HANDLER( tc0640fio_halfword_r ) +{ + return tc0640fio_r(device, offset); +} + +WRITE16_DEVICE_HANDLER( tc0640fio_halfword_w ) +{ + if (ACCESSING_BITS_0_7) + tc0640fio_w(device, offset, data & 0xff); + else + { + tc0640fio_w(device, offset, (data >> 8) & 0xff); +//logerror("CPU #0 PC %06x: warning - write to MSB of TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); + } +} + +READ16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_r ) +{ + return tc0640fio_halfword_r(device, offset, mem_mask) << 8; +} + +WRITE16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_w ) +{ + if (ACCESSING_BITS_8_15) + tc0640fio_w(device, offset, (data >> 8) & 0xff); + else + { + tc0640fio_w(device, offset, data & 0xff); +//logerror("CPU #0 PC %06x: warning - write to LSB of TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); + } +} + +/***************************************************************************** + DEVICE INTERFACE +*****************************************************************************/ + +static DEVICE_START( tc0640fio ) +{ + tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); + const tc0640fio_interface *intf = tc0640fio_get_interface(device); + + devcb_resolve_read8(&tc0640fio->read_0, &intf->read_0, device); + devcb_resolve_read8(&tc0640fio->read_1, &intf->read_1, device); + devcb_resolve_read8(&tc0640fio->read_2, &intf->read_2, device); + devcb_resolve_read8(&tc0640fio->read_3, &intf->read_3, device); + devcb_resolve_read8(&tc0640fio->read_7, &intf->read_7, device); + + state_save_register_device_item_array(device, 0, tc0640fio->regs); +} + +static DEVICE_RESET( tc0640fio ) +{ + tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); + int i; + + for (i = 0; i < 8; i++) + tc0640fio->regs[i] = 0; +} + +DEVICE_GET_INFO( tc0220ioc ) +{ + switch (state) + { + /* --- the following bits of info are returned as 64-bit signed integers --- */ + case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0220ioc_state); break; + case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_VIDEO; break; + + /* --- the following bits of info are returned as pointers to data or functions --- */ + case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0220ioc); break; + case DEVINFO_FCT_STOP: /* Nothing */ break; + case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0220ioc); break; + + /* --- the following bits of info are returned as NULL-terminated strings --- */ + case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0220IOC"); break; + case DEVINFO_STR_FAMILY: strcpy(info->s, "Taito I/O"); break; + case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; + case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; + case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright MAME Team"); break; + } +} + +DEVICE_GET_INFO( tc0510nio ) +{ + switch (state) + { + /* --- the following bits of info are returned as 64-bit signed integers --- */ + case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0510nio_state); break; + case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_VIDEO; break; + + /* --- the following bits of info are returned as pointers to data or functions --- */ + case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0510nio); break; + case DEVINFO_FCT_STOP: /* Nothing */ break; + case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0510nio); break; + + /* --- the following bits of info are returned as NULL-terminated strings --- */ + case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0510NIO"); break; + case DEVINFO_STR_FAMILY: strcpy(info->s, "Taito I/O"); break; + case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; + case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; + case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright MAME Team"); break; + } +} + +DEVICE_GET_INFO( tc0640fio ) +{ + switch (state) + { + /* --- the following bits of info are returned as 64-bit signed integers --- */ + case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0640fio_state); break; + case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_VIDEO; break; + + /* --- the following bits of info are returned as pointers to data or functions --- */ + case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0640fio); break; + case DEVINFO_FCT_STOP: /* Nothing */ break; + case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0640fio); break; + + /* --- the following bits of info are returned as NULL-terminated strings --- */ + case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0640FIO"); break; + case DEVINFO_STR_FAMILY: strcpy(info->s, "Taito I/O"); break; + case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; + case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; + case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright MAME Team"); break; + } +} diff --git a/src/mame/machine/taitoio.h b/src/mame/machine/taitoio.h new file mode 100644 index 00000000000..3317545c2dd --- /dev/null +++ b/src/mame/machine/taitoio.h @@ -0,0 +1,112 @@ +/************************************************************************* + + taitoio.h + + Implementation of various Taito custom I/O ICs + +**************************************************************************/ + +#ifndef __TAITOIO_H__ +#define __TAITOIO_H__ + +#include "devcb.h" + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +typedef struct _tc0220ioc_interface tc0220ioc_interface; +struct _tc0220ioc_interface +{ + devcb_read8 read_0; + devcb_read8 read_1; + devcb_read8 read_2; + devcb_read8 read_3; + devcb_read8 read_7; +}; + + +typedef struct _tc0510nio_interface tc0510nio_interface; +struct _tc0510nio_interface +{ + devcb_read8 read_0; + devcb_read8 read_1; + devcb_read8 read_2; + devcb_read8 read_3; + devcb_read8 read_7; +}; + + +typedef struct _tc0640fio_interface tc0640fio_interface; +struct _tc0640fio_interface +{ + devcb_read8 read_0; + devcb_read8 read_1; + devcb_read8 read_2; + devcb_read8 read_3; + devcb_read8 read_7; +}; + +/*************************************************************************** + FUNCTION PROTOTYPES +***************************************************************************/ + +DEVICE_GET_INFO( tc0220ioc ); +DEVICE_GET_INFO( tc0510nio ); +DEVICE_GET_INFO( tc0640fio ); + +/*************************************************************************** + DEVICE CONFIGURATION MACROS +***************************************************************************/ + +#define TC0220IOC DEVICE_GET_INFO_NAME( tc0220ioc ) + +#define MDRV_TC0220IOC_ADD(_tag, _interface) \ + MDRV_DEVICE_ADD(_tag, TC0220IOC, 0) \ + MDRV_DEVICE_CONFIG(_interface) + +#define TC0510NIO DEVICE_GET_INFO_NAME( tc0510nio ) + +#define MDRV_TC0510NIO_ADD(_tag, _interface) \ + MDRV_DEVICE_ADD(_tag, TC0510NIO, 0) \ + MDRV_DEVICE_CONFIG(_interface) + +#define TC0640FIO DEVICE_GET_INFO_NAME( tc0640fio ) + +#define MDRV_TC0640FIO_ADD(_tag, _interface) \ + MDRV_DEVICE_ADD(_tag, TC0640FIO, 0) \ + MDRV_DEVICE_CONFIG(_interface) + + +/*************************************************************************** + DEVICE I/O FUNCTIONS +***************************************************************************/ + +/** TC0220IOC **/ +READ8_DEVICE_HANDLER( tc0220ioc_r ); +WRITE8_DEVICE_HANDLER( tc0220ioc_w ); +READ8_DEVICE_HANDLER( tc0220ioc_port_r ); +WRITE8_DEVICE_HANDLER( tc0220ioc_port_w ); +READ8_DEVICE_HANDLER( tc0220ioc_portreg_r ); +WRITE8_DEVICE_HANDLER( tc0220ioc_portreg_w ); + + +/** TC0510NIO **/ +READ8_DEVICE_HANDLER( tc0510nio_r ); +WRITE8_DEVICE_HANDLER( tc0510nio_w ); +READ16_DEVICE_HANDLER( tc0510nio_halfword_r ); +WRITE16_DEVICE_HANDLER( tc0510nio_halfword_w ); +READ16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_r ); +WRITE16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_w ); + + +/** TC0640FIO**/ +READ8_DEVICE_HANDLER( tc0640fio_r ); +WRITE8_DEVICE_HANDLER( tc0640fio_w ); +READ16_DEVICE_HANDLER( tc0640fio_halfword_r ); +WRITE16_DEVICE_HANDLER( tc0640fio_halfword_w ); +READ16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_r ); +WRITE16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_w ); + + +#endif /* __TAITOIO_H__ */ diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 7bc02cd0520..7918bb75cb3 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -1324,6 +1324,7 @@ $(MAMEOBJ)/taito.a: \ $(MACHINE)/daikaiju.o \ $(AUDIO)/taitosnd.o \ $(AUDIO)/t5182.o \ + $(MACHINE)/taitoio.o \ $(VIDEO)/taitoic.o $(VIDEO)/taiicdev.o \ $(MAMEOBJ)/tatsumi.a: \ diff --git a/src/mame/video/taiicdev.c b/src/mame/video/taiicdev.c index 679e59e35e4..ff0c4287069 100644 --- a/src/mame/video/taiicdev.c +++ b/src/mame/video/taiicdev.c @@ -490,46 +490,6 @@ The data bus is 16 bits wide. 004 W unknown, often written to -TC0220IOC ---------- -A simple I/O interface with integrated watchdog. -It has four address inputs, which would suggest 16 bytes of addressing space, -but only the first 8 seem to be used. - -000 R IN00-07 (DSA) -000 W watchdog reset -001 R IN08-15 (DSB) -002 R IN16-23 (1P) -002 W unknown. Usually written on startup: initialize? -003 R IN24-31 (2P) -004 RW coin counters and lockout -005 W unknown -006 W unknown -007 R INB0-7 (coin) - - -TC0510NIO ---------- -Newer version of the I/O chip - -000 R DSWA -000 W watchdog reset -001 R DSWB -001 W unknown (ssi) -002 R 1P -003 R 2P -003 W unknown (yuyugogo, qzquest and qzchikyu use it a lot) -004 RW coin counters and lockout -005 W unknown -006 W unknown (koshien and pulirula use it a lot) -007 R coin - - -TC0640FIO ---------- -Newer version of the I/O chip ? - - ***************************************************************************/ #include "driver.h" @@ -1066,8 +1026,6 @@ static DEVICE_START( pc080sn ) } -/***************************************************************************/ - /***************************************************************************/ /* */ /* PC090OJ */ @@ -1842,6 +1800,67 @@ void tc0080vco_tilemap_draw( const device_config *device, bitmap_t *bitmap, cons } } +/* FIXME: these could replace the external uses of RAM regions... completely untested! */ +READ16_DEVICE_HANDLER( tc0080vco_cram_0_r ) +{ + tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); + return tc0080vco->chain_ram_0[offset]; +} + +READ16_DEVICE_HANDLER( tc0080vco_cram_1_r ) +{ + tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); + return tc0080vco->chain_ram_1[offset]; +} + +READ16_DEVICE_HANDLER( tc0080vco_sprram_r ) +{ + tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); + return tc0080vco->spriteram[offset]; +} + +READ16_DEVICE_HANDLER( tc0080vco_scrram_r ) +{ + tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); + return tc0080vco->scroll_ram[offset]; +} + +READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r ) +{ + tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); + 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 ) { @@ -4772,440 +4791,284 @@ static DEVICE_RESET( tc0110pcr ) /***************************************************************************/ /* */ -/* TC0220IOC */ +/* TC0180VCU */ /* */ /***************************************************************************/ -typedef struct _tc0220ioc_state tc0220ioc_state; -struct _tc0220ioc_state +typedef struct _tc0180vcu_state tc0180vcu_state; +struct _tc0180vcu_state { - UINT8 regs[8]; - UINT8 port; + UINT16 ctrl[0x10]; - devcb_resolved_read8 read_0; - devcb_resolved_read8 read_1; - devcb_resolved_read8 read_2; - devcb_resolved_read8 read_3; - devcb_resolved_read8 read_7; + UINT16 * ram; + UINT16 * scrollram; + + tilemap *tilemap[3]; + + UINT16 bg_rambank[2], fg_rambank[2], tx_rambank; + UINT8 framebuffer_page; + UINT8 video_control; + + int bg_color_base; + int fg_color_base; + int tx_color_base; }; /***************************************************************************** INLINE FUNCTIONS *****************************************************************************/ -INLINE tc0220ioc_state *tc0220ioc_get_safe_token( const device_config *device ) +INLINE tc0180vcu_state *tc0180vcu_get_safe_token( const device_config *device ) { assert(device != NULL); assert(device->token != NULL); - assert(device->type == TC0220IOC); + assert(device->type == TC0180VCU); - return (tc0220ioc_state *)device->token; + return (tc0180vcu_state *)device->token; } -INLINE const tc0220ioc_interface *tc0220ioc_get_interface( const device_config *device ) +INLINE const tc0180vcu_interface *tc0180vcu_get_interface( const device_config *device ) { assert(device != NULL); - assert((device->type == TC0220IOC)); - return (const tc0220ioc_interface *) device->static_config; + assert((device->type == TC0180VCU)); + return (const tc0180vcu_interface *) device->static_config; } /***************************************************************************** DEVICE HANDLERS *****************************************************************************/ -READ8_DEVICE_HANDLER( tc0220ioc_r ) +/* TC0180VCU control registers: +* offset: +* 0 - -----xxx bg ram page 0 (tile codes) +* -xxx---- bg ram page 1 (attributes) +* 1 - -----xxx fg ram page 0 (tile codes) +* -xxx---- fg ram page 1 (attributes) +* 2 - xxxxxxxx number of independent foreground scrolling blocks (see below) +* 3 - xxxxxxxx number of independent background scrolling blocks +* 4 - --xxxxxx text tile bank 0 +* 5 - --xxxxxx text tile bank 1 +* 6 - ----xxxx text ram page +* 7 - xxxxxxxx video control: pixelram page and enable, screen flip, sprite to foreground priority (see below) +* 8 to f - unused (always zero) +* +****************************************************************************************** +* +* offset 6 - text video page register: +* This location controls which page of video text ram to view +* hitice: +* 0x08 (00001000) - show game text: credits XX, player1 score +* 0x09 (00001001) - show FBI logo +* rambo3: +* 0x08 (00001000) - show game text +* 0x09 (00001001) - show taito logo +* 0x0a (00001010) - used in pair with 0x09 to smooth screen transitions (attract mode) +* +* Is bit 3 (0x08) video text enable/disable ? +* +****************************************************************************************** +* +* offset 7 - video control register: +* bit 0 (0x01) 1 = don't erase sprite frame buffer "after the beam" +* bit 3 (0x08) sprite to foreground priority +* 1 = bg, fg, obj, tx +* 0 = bg, obj1, fg, obj0, tx (obj0/obj1 selected by bit 0 of color code) +* bit 4 (0x10) screen flip (active HI) (this one is for sure) +* bit 5 (0x20) could be global video enable switch (Hit the Ice clears this +* bit, clears videoram portions and sets this bit) +* bit 6 (0x40) frame buffer page to show when bit 7 is set +* bit 7 (0x80) don't flip frame buffer every vblank, use the page selected by bit 6 +* +*/ + +READ8_DEVICE_HANDLER( tc0180vcu_fb_page_r ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + return tc0180vcu->framebuffer_page; +} - switch (offset) +static void tc0180vcu_video_control( const device_config *device, UINT8 data ) +{ + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); +#if 0 + if (data != tc0180vcu->video_control) + popmessage("video control = %02x", data); +#endif + + tc0180vcu->video_control = data; + + if (tc0180vcu->video_control & 0x80) + tc0180vcu->framebuffer_page = (~tc0180vcu->video_control & 0x40) >> 6; + + tilemap_set_flip_all(device->machine, (tc0180vcu->video_control & 0x10) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0 ); +} + +READ16_DEVICE_HANDLER( tc0180vcu_ctrl_r ) +{ + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + return tc0180vcu->ctrl[offset]; +} + +WRITE16_DEVICE_HANDLER( tc0180vcu_ctrl_w ) +{ + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + UINT16 oldword = tc0180vcu->ctrl[offset]; + + COMBINE_DATA (&tc0180vcu->ctrl[offset]); + + if (oldword != tc0180vcu->ctrl[offset]) { - case 0x00: - return devcb_call_read8(&tc0220ioc->read_0, 0); - - case 0x01: - return devcb_call_read8(&tc0220ioc->read_1, 0); - - case 0x02: - return devcb_call_read8(&tc0220ioc->read_2, 0); - - case 0x03: - return devcb_call_read8(&tc0220ioc->read_3, 0); - - case 0x04: /* coin counters and lockout */ - return tc0220ioc->regs[4]; - - case 0x07: - return devcb_call_read8(&tc0220ioc->read_7, 0); - - default: -//logerror("PC %06x: warning - read TC0220IOC address %02x\n",cpu_get_pc(space->cpu),offset); - return 0xff; + if (ACCESSING_BITS_8_15) + { + switch(offset) + { + case 0: + tilemap_mark_all_tiles_dirty(tc0180vcu->tilemap[1]); + tc0180vcu->fg_rambank[0] = (((tc0180vcu->ctrl[offset] >> 8) & 0x0f) << 12); + tc0180vcu->fg_rambank[1] = (((tc0180vcu->ctrl[offset] >> 12) & 0x0f) << 12); + break; + case 1: + tilemap_mark_all_tiles_dirty(tc0180vcu->tilemap[0]); + tc0180vcu->bg_rambank[0] = (((tc0180vcu->ctrl[offset] >> 8) & 0x0f) << 12); + tc0180vcu->bg_rambank[1] = (((tc0180vcu->ctrl[offset] >> 12) & 0x0f) << 12); + break; + case 4: + case 5: + tilemap_mark_all_tiles_dirty(tc0180vcu->tilemap[2]); + break; + case 6: + tilemap_mark_all_tiles_dirty(tc0180vcu->tilemap[2]); + tc0180vcu->tx_rambank = (((tc0180vcu->ctrl[offset] >> 8) & 0x0f) << 11); + break; + case 7: + tc0180vcu_video_control(device, (tc0180vcu->ctrl[offset] >> 8) & 0xff); + break; + default: + break; + } + } } } -WRITE8_DEVICE_HANDLER( tc0220ioc_w ) +static TILE_GET_INFO_DEVICE( get_bg_tile_info ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + int tile = tc0180vcu->ram[tile_index + tc0180vcu->bg_rambank[0]]; + int color = tc0180vcu->ram[tile_index + tc0180vcu->bg_rambank[1]]; - tc0220ioc->regs[offset] = data; - - switch (offset) - { - case 0x00: - watchdog_reset(device->machine); - break; - - case 0x04: /* coin counters and lockout, hi nibble irrelevant */ - coin_lockout_w(device->machine, 0, ~data & 0x01); - coin_lockout_w(device->machine, 1, ~data & 0x02); - coin_counter_w(device->machine, 0, data & 0x04); - coin_counter_w(device->machine, 1, data & 0x08); - -//if (data & 0xf0) -//logerror("PC %06x: warning - write %02x to TC0220IOC address %02x\n",cpu_get_pc(space->cpu),data,offset); - - break; - - default: -//logerror("PC %06x: warning - write %02x to TC0220IOC address %02x\n",cpu_get_pc(space->cpu),data,offset); - break; - } + SET_TILE_INFO_DEVICE( + 1, + tile, + tc0180vcu->bg_color_base + (color & 0x3f), + TILE_FLIPYX((color & 0x00c0) >> 6)); } -READ8_DEVICE_HANDLER( tc0220ioc_port_r ) +static TILE_GET_INFO_DEVICE( get_fg_tile_info ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); - return tc0220ioc->port; + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + int tile = tc0180vcu->ram[tile_index + tc0180vcu->fg_rambank[0]]; + int color = tc0180vcu->ram[tile_index + tc0180vcu->fg_rambank[1]]; + + SET_TILE_INFO_DEVICE( + 1, + tile, + tc0180vcu->fg_color_base + (color & 0x3f), + TILE_FLIPYX((color & 0x00c0) >> 6)); } -WRITE8_DEVICE_HANDLER( tc0220ioc_port_w ) +static TILE_GET_INFO_DEVICE( get_tx_tile_info ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); - tc0220ioc->port = data; + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + int tile = tc0180vcu->ram[tile_index + tc0180vcu->tx_rambank]; + + SET_TILE_INFO_DEVICE( + 0, + (tile & 0x07ff) | ((tc0180vcu->ctrl[4 + ((tile & 0x800) >> 11)]>>8) << 11), + tc0180vcu->tx_color_base + ((tile >> 12) & 0x0f), + 0); } -READ8_DEVICE_HANDLER( tc0220ioc_portreg_r ) +READ16_DEVICE_HANDLER( tc0180vcu_scroll_r ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); - return tc0220ioc_r(device, tc0220ioc->port); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + return tc0180vcu->scrollram[offset]; } -WRITE8_DEVICE_HANDLER( tc0220ioc_portreg_w ) +WRITE16_DEVICE_HANDLER( tc0180vcu_scroll_w ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); - tc0220ioc_w(device, tc0220ioc->port, data); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + COMBINE_DATA(&tc0180vcu->scrollram[offset]); } -/***************************************************************************** - DEVICE INTERFACE -*****************************************************************************/ - -static DEVICE_START( tc0220ioc ) +READ16_DEVICE_HANDLER( tc0180vcu_word_r ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); - const tc0220ioc_interface *intf = tc0220ioc_get_interface(device); - - devcb_resolve_read8(&tc0220ioc->read_0, &intf->read_0, device); - devcb_resolve_read8(&tc0220ioc->read_1, &intf->read_1, device); - devcb_resolve_read8(&tc0220ioc->read_2, &intf->read_2, device); - devcb_resolve_read8(&tc0220ioc->read_3, &intf->read_3, device); - devcb_resolve_read8(&tc0220ioc->read_7, &intf->read_7, device); - - state_save_register_device_item_array(device, 0, tc0220ioc->regs); - state_save_register_device_item(device, 0, tc0220ioc->port); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + return tc0180vcu->ram[offset]; } -static DEVICE_RESET( tc0220ioc ) +WRITE16_DEVICE_HANDLER( tc0180vcu_word_w ) { - tc0220ioc_state *tc0220ioc = tc0220ioc_get_safe_token(device); - int i; + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + COMBINE_DATA(&tc0180vcu->ram[offset]); - tc0220ioc->port = 0; + if ((offset & 0x7000) == tc0180vcu->fg_rambank[0] || (offset & 0x7000) == tc0180vcu->fg_rambank[1]) + tilemap_mark_tile_dirty(tc0180vcu->tilemap[1], offset & 0x0fff); - for (i = 0; i < 8; i++) - tc0220ioc->regs[i] = 0; + if ((offset & 0x7000) == tc0180vcu->bg_rambank[0] || (offset & 0x7000) == tc0180vcu->bg_rambank[1]) + tilemap_mark_tile_dirty(tc0180vcu->tilemap[0], offset & 0x0fff); + + if ((offset & 0x7800) == tc0180vcu->tx_rambank) + tilemap_mark_tile_dirty(tc0180vcu->tilemap[2], offset & 0x7ff); } - -/***************************************************************************/ -/* */ -/* TC0510NIO */ -/* */ -/***************************************************************************/ - -typedef struct _tc0510nio_state tc0510nio_state; -struct _tc0510nio_state +void tc0180vcu_tilemap_draw( const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int tmap_num, int plane ) { - UINT8 regs[8]; + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); - devcb_resolved_read8 read_0; - devcb_resolved_read8 read_1; - devcb_resolved_read8 read_2; - devcb_resolved_read8 read_3; - devcb_resolved_read8 read_7; -}; + assert(tmap_num < 3); -/***************************************************************************** - INLINE FUNCTIONS -*****************************************************************************/ - -INLINE tc0510nio_state *tc0510nio_get_safe_token( const device_config *device ) -{ - assert(device != NULL); - assert(device->token != NULL); - assert(device->type == TC0510NIO); - - return (tc0510nio_state *)device->token; -} - -INLINE const tc0510nio_interface *tc0510nio_get_interface( const device_config *device ) -{ - assert(device != NULL); - assert((device->type == TC0510NIO)); - return (const tc0510nio_interface *) device->static_config; -} - -/***************************************************************************** - DEVICE HANDLERS -*****************************************************************************/ - -READ8_DEVICE_HANDLER( tc0510nio_r ) -{ - tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); - - switch (offset) - { - case 0x00: - return devcb_call_read8(&tc0510nio->read_0, 0); - - case 0x01: - return devcb_call_read8(&tc0510nio->read_1, 0); - - case 0x02: - return devcb_call_read8(&tc0510nio->read_2, 0); - - case 0x03: - return devcb_call_read8(&tc0510nio->read_3, 0); - - case 0x04: /* coin counters and lockout */ - return tc0510nio->regs[4]; - - case 0x07: - return devcb_call_read8(&tc0510nio->read_7, 0); - - default: -//logerror("PC %06x: warning - read TC0510NIO address %02x\n",cpu_get_pc(space->cpu),offset); - return 0xff; - } -} - -WRITE8_DEVICE_HANDLER( tc0510nio_w ) -{ - tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); - - tc0510nio->regs[offset] = data; - - switch (offset) - { - case 0x00: - watchdog_reset(device->machine); - break; - - case 0x04: /* coin counters and lockout */ - coin_lockout_w(device->machine, 0, ~data & 0x01); - coin_lockout_w(device->machine, 1, ~data & 0x02); - coin_counter_w(device->machine, 0, data & 0x04); - coin_counter_w(device->machine, 1, data & 0x08); - break; - - default: -//logerror("PC %06x: warning - write %02x to TC0510NIO address %02x\n",cpu_get_pc(space->cpu),data,offset); - break; - } -} - -READ16_DEVICE_HANDLER( tc0510nio_halfword_r ) -{ - return tc0510nio_r(device, offset); -} - -WRITE16_DEVICE_HANDLER( tc0510nio_halfword_w ) -{ - if (ACCESSING_BITS_0_7) - tc0510nio_w(device, offset, data & 0xff); + if (tmap_num == 2) + tilemap_draw(bitmap, cliprect, tc0180vcu->tilemap[2], 0, 0); /* not much to do for tx_tilemap */ else { - /* driftout writes the coin counters here - bug? */ -//logerror("CPU #0 PC %06x: warning - write to MSB of TC0510NIO address %02x\n",cpu_get_pc(space->cpu),offset); - tc0510nio_w(device, offset, (data >> 8) & 0xff); - } -} + /*plane = 0 fg tilemap*/ + /*plane = 1 bg tilemap*/ + rectangle my_clip; + int i; + int scrollx, scrolly; + int lines_per_block; /* number of lines scrolled by the same amount (per one scroll value) */ + int number_of_blocks; /* number of such blocks per _screen_ (256 lines) */ -READ16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_r ) -{ - return tc0510nio_halfword_r(device, offset ^ 1, mem_mask); -} + lines_per_block = 256 - (tc0180vcu->ctrl[2 + plane] >> 8); + number_of_blocks = 256 / lines_per_block; -WRITE16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_w ) -{ - tc0510nio_halfword_w(device, offset ^ 1,data, mem_mask); -} + my_clip.min_x = cliprect->min_x; + my_clip.max_x = cliprect->max_x; + for (i = 0; i < number_of_blocks; i++) + { + scrollx = tc0180vcu->scrollram[plane * 0x200 + i * 2 * lines_per_block]; + scrolly = tc0180vcu->scrollram[plane * 0x200 + i * 2 * lines_per_block + 1]; -/***************************************************************************** - DEVICE INTERFACE -*****************************************************************************/ + my_clip.min_y = i * lines_per_block; + my_clip.max_y = (i + 1) * lines_per_block - 1; -static DEVICE_START( tc0510nio ) -{ - tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); - const tc0510nio_interface *intf = tc0510nio_get_interface(device); + if (tc0180vcu->video_control & 0x10) /*flip screen*/ + { + my_clip.min_y = bitmap->height - 1 - (i + 1) * lines_per_block - 1; + my_clip.max_y = bitmap->height - 1 - i * lines_per_block; + } - devcb_resolve_read8(&tc0510nio->read_0, &intf->read_0, device); - devcb_resolve_read8(&tc0510nio->read_1, &intf->read_1, device); - devcb_resolve_read8(&tc0510nio->read_2, &intf->read_2, device); - devcb_resolve_read8(&tc0510nio->read_3, &intf->read_3, device); - devcb_resolve_read8(&tc0510nio->read_7, &intf->read_7, device); + sect_rect(&my_clip, cliprect); - state_save_register_device_item_array(device, 0, tc0510nio->regs); -} - -static DEVICE_RESET( tc0510nio ) -{ - tc0510nio_state *tc0510nio = tc0510nio_get_safe_token(device); - int i; - - for (i = 0; i < 8; i++) - tc0510nio->regs[i] = 0; -} - -/***************************************************************************/ -/* */ -/* TC0640FIO */ -/* */ -/***************************************************************************/ - -typedef struct _tc0640fio_state tc0640fio_state; -struct _tc0640fio_state -{ - UINT8 regs[8]; - - devcb_resolved_read8 read_0; - devcb_resolved_read8 read_1; - devcb_resolved_read8 read_2; - devcb_resolved_read8 read_3; - devcb_resolved_read8 read_7; -}; - -/***************************************************************************** - INLINE FUNCTIONS -*****************************************************************************/ - -INLINE tc0640fio_state *tc0640fio_get_safe_token( const device_config *device ) -{ - assert(device != NULL); - assert(device->token != NULL); - assert(device->type == TC0640FIO); - - return (tc0640fio_state *)device->token; -} - -INLINE const tc0640fio_interface *tc0640fio_get_interface( const device_config *device ) -{ - assert(device != NULL); - assert((device->type == TC0640FIO)); - return (const tc0640fio_interface *) device->static_config; -} - -/***************************************************************************** - DEVICE HANDLERS -*****************************************************************************/ - -READ8_DEVICE_HANDLER( tc0640fio_r ) -{ - tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); - - switch (offset) - { - case 0x00: - return devcb_call_read8(&tc0640fio->read_0, 0); - - case 0x01: - return devcb_call_read8(&tc0640fio->read_1, 0); - - case 0x02: - return devcb_call_read8(&tc0640fio->read_2, 0); - - case 0x03: - return devcb_call_read8(&tc0640fio->read_3, 0); - - case 0x04: /* coin counters and lockout */ - return tc0640fio->regs[4]; - - case 0x07: - return devcb_call_read8(&tc0640fio->read_7, 0); - - default: -//logerror("PC %06x: warning - read TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); - return 0xff; - } -} - -WRITE8_DEVICE_HANDLER( tc0640fio_w ) -{ - tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); - - tc0640fio->regs[offset] = data; - - switch (offset) - { - case 0x00: - watchdog_reset(device->machine); - break; - - case 0x04: /* coin counters and lockout */ - coin_lockout_w(device->machine, 0, ~data & 0x01); - coin_lockout_w(device->machine, 1, ~data & 0x02); - coin_counter_w(device->machine, 0, data & 0x04); - coin_counter_w(device->machine, 1, data & 0x08); - break; - - default: -//logerror("PC %06x: warning - write %02x to TC0640FIO address %02x\n",cpu_get_pc(space->cpu),data,offset); - break; - } -} - -READ16_DEVICE_HANDLER( tc0640fio_halfword_r ) -{ - return tc0640fio_r(device, offset); -} - -WRITE16_DEVICE_HANDLER( tc0640fio_halfword_w ) -{ - if (ACCESSING_BITS_0_7) - tc0640fio_w(device, offset, data & 0xff); - else - { - tc0640fio_w(device, offset, (data >> 8) & 0xff); -//logerror("CPU #0 PC %06x: warning - write to MSB of TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); - } -} - -READ16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_r ) -{ - return tc0640fio_halfword_r(device, offset, mem_mask) << 8; -} - -WRITE16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_w ) -{ - if (ACCESSING_BITS_8_15) - tc0640fio_w(device, offset, (data >> 8) & 0xff); - else - { - tc0640fio_w(device, offset, data & 0xff); -//logerror("CPU #0 PC %06x: warning - write to LSB of TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); + if (my_clip.min_y <= my_clip.max_y) + { + tilemap_set_scrollx(tc0180vcu->tilemap[tmap_num], 0, -scrollx); + tilemap_set_scrolly(tc0180vcu->tilemap[tmap_num], 0, -scrolly); + tilemap_draw(bitmap, &my_clip, tc0180vcu->tilemap[tmap_num], 0, 0); + } + } } } @@ -5213,27 +5076,58 @@ WRITE16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_w ) DEVICE INTERFACE *****************************************************************************/ -static DEVICE_START( tc0640fio ) +static DEVICE_START( tc0180vcu ) { - tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); - const tc0640fio_interface *intf = tc0640fio_get_interface(device); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); + const tc0180vcu_interface *intf = tc0180vcu_get_interface(device); - devcb_resolve_read8(&tc0640fio->read_0, &intf->read_0, device); - devcb_resolve_read8(&tc0640fio->read_1, &intf->read_1, device); - devcb_resolve_read8(&tc0640fio->read_2, &intf->read_2, device); - devcb_resolve_read8(&tc0640fio->read_3, &intf->read_3, device); - devcb_resolve_read8(&tc0640fio->read_7, &intf->read_7, device); + tc0180vcu->bg_color_base = intf->bg_color_base; + tc0180vcu->fg_color_base = intf->fg_color_base; + tc0180vcu->tx_color_base = intf->tx_color_base; - state_save_register_device_item_array(device, 0, tc0640fio->regs); + tc0180vcu->tilemap[0] = tilemap_create_device(device, get_bg_tile_info, tilemap_scan_rows, 16, 16, 64, 64); + tc0180vcu->tilemap[1] = tilemap_create_device(device, get_fg_tile_info, tilemap_scan_rows, 16, 16, 64, 64); + tc0180vcu->tilemap[2] = tilemap_create_device(device, get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + + tilemap_set_transparent_pen(tc0180vcu->tilemap[1], 0); + tilemap_set_transparent_pen(tc0180vcu->tilemap[2], 0); + + tilemap_set_scrolldx(tc0180vcu->tilemap[0], 0, 24 * 8); + tilemap_set_scrolldx(tc0180vcu->tilemap[1], 0, 24 * 8); + tilemap_set_scrolldx(tc0180vcu->tilemap[2], 0, 24 * 8); + + state_save_register_device_item_array(device, 0, tc0180vcu->bg_rambank); + state_save_register_device_item_array(device, 0, tc0180vcu->fg_rambank); + state_save_register_device_item(device, 0, tc0180vcu->tx_rambank); + + state_save_register_device_item(device, 0, tc0180vcu->framebuffer_page); + + state_save_register_device_item(device, 0, tc0180vcu->video_control); + state_save_register_device_item_array(device, 0, tc0180vcu->ctrl); + +// tc0180vcu->ram = auto_alloc_array_clear(device->machine, UINT16, PC090OJ_RAM_SIZE / 2); +// tc0180vcu->scrollram = auto_alloc_array_clear(device->machine, UINT16, PC090OJ_RAM_SIZE / 2); + +// state_save_register_device_item_pointer(device, 0, tc0180vcu->ram, PC090OJ_RAM_SIZE / 2); +// state_save_register_device_item_pointer(device, 0, tc0180vcu->scrollram, PC090OJ_RAM_SIZE / 2); } -static DEVICE_RESET( tc0640fio ) +static DEVICE_RESET( tc0180vcu ) { - tc0640fio_state *tc0640fio = tc0640fio_get_safe_token(device); + tc0180vcu_state *tc0180vcu = tc0180vcu_get_safe_token(device); int i; - for (i = 0; i < 8; i++) - tc0640fio->regs[i] = 0; + for (i = 0; i < 0x10; i++) + tc0180vcu->ctrl[i] = 0; + + tc0180vcu->bg_rambank[0] = 0; + tc0180vcu->bg_rambank[1] = 0; + tc0180vcu->fg_rambank[0] = 0; + tc0180vcu->fg_rambank[1] = 0; + tc0180vcu->tx_rambank = 0; + + tc0180vcu->framebuffer_page = 0; + tc0180vcu->video_control = 0; } @@ -5441,65 +5335,21 @@ DEVICE_GET_INFO( tc0150rod ) } } -DEVICE_GET_INFO( tc0220ioc ) +DEVICE_GET_INFO( tc0180vcu ) { switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0220ioc_state); break; + case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0180vcu_state); break; case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_VIDEO; break; /* --- the following bits of info are returned as pointers to data or functions --- */ - case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0220ioc); break; + case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0180vcu); break; case DEVINFO_FCT_STOP: /* Nothing */ break; - case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0220ioc); break; + case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0180vcu); break; /* --- the following bits of info are returned as NULL-terminated strings --- */ - case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0220IOC"); break; - case DEVINFO_STR_FAMILY: strcpy(info->s, "Taito Video IC"); break; - case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; - case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; - case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright MAME Team"); break; - } -} - -DEVICE_GET_INFO( tc0510nio ) -{ - switch (state) - { - /* --- the following bits of info are returned as 64-bit signed integers --- */ - case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0510nio_state); break; - case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_VIDEO; break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0510nio); break; - case DEVINFO_FCT_STOP: /* Nothing */ break; - case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0510nio); break; - - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0510NIO"); break; - case DEVINFO_STR_FAMILY: strcpy(info->s, "Taito Video IC"); break; - case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; - case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; - case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright MAME Team"); break; - } -} - -DEVICE_GET_INFO( tc0640fio ) -{ - switch (state) - { - /* --- the following bits of info are returned as 64-bit signed integers --- */ - case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(tc0640fio_state); break; - case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_VIDEO; break; - - /* --- the following bits of info are returned as pointers to data or functions --- */ - case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(tc0640fio); break; - case DEVINFO_FCT_STOP: /* Nothing */ break; - case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(tc0640fio); break; - - /* --- the following bits of info are returned as NULL-terminated strings --- */ - case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0640FIO"); break; + case DEVINFO_STR_NAME: strcpy(info->s, "Taito TC0180VCU"); break; case DEVINFO_STR_FAMILY: strcpy(info->s, "Taito Video IC"); break; case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break; case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break; diff --git a/src/mame/video/taiicdev.h b/src/mame/video/taiicdev.h index c663273dfd0..48c05060d27 100644 --- a/src/mame/video/taiicdev.h +++ b/src/mame/video/taiicdev.h @@ -97,37 +97,12 @@ struct _tc0110pcr_interface int pal_offs; }; - -typedef struct _tc0220ioc_interface tc0220ioc_interface; -struct _tc0220ioc_interface +typedef struct _tc0180vcu_interface tc0180vcu_interface; +struct _tc0180vcu_interface { - devcb_read8 read_0; - devcb_read8 read_1; - devcb_read8 read_2; - devcb_read8 read_3; - devcb_read8 read_7; -}; - - -typedef struct _tc0510nio_interface tc0510nio_interface; -struct _tc0510nio_interface -{ - devcb_read8 read_0; - devcb_read8 read_1; - devcb_read8 read_2; - devcb_read8 read_3; - devcb_read8 read_7; -}; - - -typedef struct _tc0640fio_interface tc0640fio_interface; -struct _tc0640fio_interface -{ - devcb_read8 read_0; - devcb_read8 read_1; - devcb_read8 read_2; - devcb_read8 read_3; - devcb_read8 read_7; + int bg_color_base; + int fg_color_base; + int tx_color_base; }; @@ -144,10 +119,7 @@ DEVICE_GET_INFO( tc0360pri ); DEVICE_GET_INFO( tc0480scp ); DEVICE_GET_INFO( tc0150rod ); DEVICE_GET_INFO( tc0110pcr ); -DEVICE_GET_INFO( tc0220ioc ); -DEVICE_GET_INFO( tc0510nio ); -DEVICE_GET_INFO( tc0640fio ); - +DEVICE_GET_INFO( tc0180vcu ); /*************************************************************************** DEVICE CONFIGURATION MACROS @@ -211,22 +183,10 @@ DEVICE_GET_INFO( tc0640fio ); MDRV_DEVICE_ADD(_tag, TC0110PCR, 0) \ MDRV_DEVICE_CONFIG(_interface) -#define TC0220IOC DEVICE_GET_INFO_NAME( tc0220ioc ) +#define TC0180VCU DEVICE_GET_INFO_NAME( tc0180vcu ) -#define MDRV_TC0220IOC_ADD(_tag, _interface) \ - MDRV_DEVICE_ADD(_tag, TC0220IOC, 0) \ - MDRV_DEVICE_CONFIG(_interface) - -#define TC0510NIO DEVICE_GET_INFO_NAME( tc0510nio ) - -#define MDRV_TC0510NIO_ADD(_tag, _interface) \ - MDRV_DEVICE_ADD(_tag, TC0510NIO, 0) \ - MDRV_DEVICE_CONFIG(_interface) - -#define TC0640FIO DEVICE_GET_INFO_NAME( tc0640fio ) - -#define MDRV_TC0640FIO_ADD(_tag, _interface) \ - MDRV_DEVICE_ADD(_tag, TC0640FIO, 0) \ +#define MDRV_TC0180VCU_ADD(_tag, _interface) \ + MDRV_DEVICE_ADD(_tag, TC0180VCU, 0) \ MDRV_DEVICE_CONFIG(_interface) @@ -262,11 +222,22 @@ void pc090oj_draw_sprites(const device_config *device, bitmap_t *bitmap, const r /** TC0080VCO **/ READ16_DEVICE_HANDLER( tc0080vco_word_r ); -WRITE16_DEVICE_HANDLER( ct0080vco_word_w ); +WRITE16_DEVICE_HANDLER( tc0080vco_word_w ); void tc0080vco_tilemap_update(const device_config *device); void tc0080vco_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int layer, int flags, UINT32 priority); +READ16_DEVICE_HANDLER( tc0080vco_cram_0_r ); +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; @@ -383,31 +354,5 @@ WRITE16_DEVICE_HANDLER( tc0110pcr_step1_rbswap_word_w ); /* swaps red and blue c WRITE16_DEVICE_HANDLER( tc0110pcr_step1_4bpg_word_w ); /* only 4 bits per color gun */ +/** TC0180VCU **/ -/* I/O chips, all extremely similar. The TC0220IOC was sometimes addressed through a port, typically on earlier games. */ - -/** TC0220IOC **/ -READ8_DEVICE_HANDLER( tc0220ioc_r ); -WRITE8_DEVICE_HANDLER( tc0220ioc_w ); -READ8_DEVICE_HANDLER( tc0220ioc_port_r ); -WRITE8_DEVICE_HANDLER( tc0220ioc_port_w ); -READ8_DEVICE_HANDLER( tc0220ioc_portreg_r ); -WRITE8_DEVICE_HANDLER( tc0220ioc_portreg_w ); - - -/** TC0510NIO **/ -READ8_DEVICE_HANDLER( tc0510nio_r ); -WRITE8_DEVICE_HANDLER( tc0510nio_w ); -READ16_DEVICE_HANDLER( tc0510nio_halfword_r ); -WRITE16_DEVICE_HANDLER( tc0510nio_halfword_w ); -READ16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_r ); -WRITE16_DEVICE_HANDLER( tc0510nio_halfword_wordswap_w ); - - -/** TC0640FIO**/ -READ8_DEVICE_HANDLER( tc0640fio_r ); -WRITE8_DEVICE_HANDLER( tc0640fio_w ); -READ16_DEVICE_HANDLER( tc0640fio_halfword_r ); -WRITE16_DEVICE_HANDLER( tc0640fio_halfword_w ); -READ16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_r ); -WRITE16_DEVICE_HANDLER( tc0640fio_halfword_byteswap_w ); diff --git a/src/mame/video/taitoic.c b/src/mame/video/taitoic.c index a3cc48203ba..73940a855d6 100644 --- a/src/mame/video/taitoic.c +++ b/src/mame/video/taitoic.c @@ -489,47 +489,6 @@ The data bus is 16 bits wide. 002 RW read/write palette RAM 004 W unknown, often written to - -TC0220IOC ---------- -A simple I/O interface with integrated watchdog. -It has four address inputs, which would suggest 16 bytes of addressing space, -but only the first 8 seem to be used. - -000 R IN00-07 (DSA) -000 W watchdog reset -001 R IN08-15 (DSB) -002 R IN16-23 (1P) -002 W unknown. Usually written on startup: initialize? -003 R IN24-31 (2P) -004 RW coin counters and lockout -005 W unknown -006 W unknown -007 R INB0-7 (coin) - - -TC0510NIO ---------- -Newer version of the I/O chip - -000 R DSWA -000 W watchdog reset -001 R DSWB -001 W unknown (ssi) -002 R 1P -003 R 2P -003 W unknown (yuyugogo, qzquest and qzchikyu use it a lot) -004 RW coin counters and lockout -005 W unknown -006 W unknown (koshien and pulirula use it a lot) -007 R coin - - -TC0640FIO ---------- -Newer version of the I/O chip ? - - ***************************************************************************/ #include "driver.h" @@ -4762,258 +4721,3 @@ logerror("PC %06x: warning - write %04x to TC0110PCR address %02x\n",cpu_get_pc( break; } } - -/***************************************************************************/ - - -static UINT8 TC0220IOC_regs[8]; -static UINT8 TC0220IOC_port; - -READ8_HANDLER( TC0220IOC_r ) -{ - switch (offset) - { - case 0x00: /* IN00-07 (DSA) */ - return input_port_read(space->machine, "DSWA"); - - case 0x01: /* IN08-15 (DSB) */ - return input_port_read(space->machine, "DSWB"); - - case 0x02: /* IN16-23 (1P) */ - return input_port_read(space->machine, "IN0"); - - case 0x03: /* IN24-31 (2P) */ - return input_port_read(space->machine, "IN1"); - - case 0x04: /* coin counters and lockout */ - return TC0220IOC_regs[4]; - - case 0x07: /* INB0-7 (coin) */ - return input_port_read(space->machine, "IN2"); - - default: -logerror("PC %06x: warning - read TC0220IOC address %02x\n",cpu_get_pc(space->cpu),offset); - return 0xff; - } -} - -WRITE8_HANDLER( TC0220IOC_w ) -{ - TC0220IOC_regs[offset] = data; - - switch (offset) - { - case 0x00: - watchdog_reset(space->machine); - break; - - case 0x04: /* coin counters and lockout, hi nibble irrelevant */ - coin_lockout_w(space->machine, 0,~data & 0x01); - coin_lockout_w(space->machine, 1,~data & 0x02); - coin_counter_w(space->machine, 0,data & 0x04); - coin_counter_w(space->machine, 1,data & 0x08); - -//if (data &0xf0) -//logerror("PC %06x: warning - write %02x to TC0220IOC address %02x\n",cpu_get_pc(space->cpu),data,offset); - - break; - - default: -logerror("PC %06x: warning - write %02x to TC0220IOC address %02x\n",cpu_get_pc(space->cpu),data,offset); - break; - } -} - -READ8_HANDLER( TC0220IOC_port_r ) -{ - return TC0220IOC_port; -} - -WRITE8_HANDLER( TC0220IOC_port_w ) -{ - TC0220IOC_port = data; -} - -READ8_HANDLER( TC0220IOC_portreg_r ) -{ - return TC0220IOC_r(space, TC0220IOC_port); -} - -WRITE8_HANDLER( TC0220IOC_portreg_w ) -{ - TC0220IOC_w(space, TC0220IOC_port, data); -} - - -/***************************************************************************/ - - -static UINT8 TC0510NIO_regs[8]; - -READ8_HANDLER( TC0510NIO_r ) -{ - switch (offset) - { - case 0x00: /* DSA */ - return input_port_read(space->machine, "DSWA"); - - case 0x01: /* DSB */ - return input_port_read(space->machine, "DSWB"); - - case 0x02: /* 1P */ - return input_port_read(space->machine, "IN0"); - - case 0x03: /* 2P */ - return input_port_read(space->machine, "IN1"); - - case 0x04: /* coin counters and lockout */ - return TC0510NIO_regs[4]; - - case 0x07: /* coin */ - return input_port_read(space->machine, "IN2"); - - default: -logerror("PC %06x: warning - read TC0510NIO address %02x\n",cpu_get_pc(space->cpu),offset); - return 0xff; - } -} - -WRITE8_HANDLER( TC0510NIO_w ) -{ - TC0510NIO_regs[offset] = data; - - switch (offset) - { - case 0x00: - watchdog_reset(space->machine); - break; - - case 0x04: /* coin counters and lockout */ - coin_lockout_w(space->machine, 0,~data & 0x01); - coin_lockout_w(space->machine, 1,~data & 0x02); - coin_counter_w(space->machine, 0,data & 0x04); - coin_counter_w(space->machine, 1,data & 0x08); - break; - - default: -logerror("PC %06x: warning - write %02x to TC0510NIO address %02x\n",cpu_get_pc(space->cpu),data,offset); - break; - } -} - -READ16_HANDLER( TC0510NIO_halfword_r ) -{ - return TC0510NIO_r(space,offset); -} - -WRITE16_HANDLER( TC0510NIO_halfword_w ) -{ - if (ACCESSING_BITS_0_7) - TC0510NIO_w(space,offset,data & 0xff); - else - { - /* driftout writes the coin counters here - bug? */ -logerror("CPU #0 PC %06x: warning - write to MSB of TC0510NIO address %02x\n",cpu_get_pc(space->cpu),offset); - TC0510NIO_w(space,offset,(data >> 8) & 0xff); - } -} - -READ16_HANDLER( TC0510NIO_halfword_wordswap_r ) -{ - return TC0510NIO_halfword_r(space,offset ^ 1,mem_mask); -} - -WRITE16_HANDLER( TC0510NIO_halfword_wordswap_w ) -{ - TC0510NIO_halfword_w(space,offset ^ 1,data,mem_mask); -} - - -/***************************************************************************/ - -static UINT8 TC0640FIO_regs[8]; - -READ8_HANDLER( TC0640FIO_r ) -{ - switch (offset) - { - case 0x00: /* DSA */ - return input_port_read(space->machine, "DSWA"); - - case 0x01: /* DSB */ - return input_port_read(space->machine, "DSWB"); - - case 0x02: /* 1P */ - return input_port_read(space->machine, "IN0"); - - case 0x03: /* 2P */ - return input_port_read(space->machine, "IN1"); - - case 0x04: /* coin counters and lockout */ - return TC0640FIO_regs[4]; - - case 0x07: /* coin */ - return input_port_read(space->machine, "IN2"); - - default: -logerror("PC %06x: warning - read TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); - return 0xff; - } -} - -WRITE8_HANDLER( TC0640FIO_w ) -{ - TC0640FIO_regs[offset] = data; - - switch (offset) - { - case 0x00: - watchdog_reset(space->machine); - break; - - case 0x04: /* coin counters and lockout */ - coin_lockout_w(space->machine, 0,~data & 0x01); - coin_lockout_w(space->machine, 1,~data & 0x02); - coin_counter_w(space->machine, 0,data & 0x04); - coin_counter_w(space->machine, 1,data & 0x08); - break; - - default: -logerror("PC %06x: warning - write %02x to TC0640FIO address %02x\n",cpu_get_pc(space->cpu),data,offset); - break; - } -} - -READ16_HANDLER( TC0640FIO_halfword_r ) -{ - return TC0640FIO_r(space,offset); -} - -WRITE16_HANDLER( TC0640FIO_halfword_w ) -{ - if (ACCESSING_BITS_0_7) - TC0640FIO_w(space,offset,data & 0xff); - else - { - TC0640FIO_w(space,offset,(data >> 8) & 0xff); -logerror("CPU #0 PC %06x: warning - write to MSB of TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); - } -} - -READ16_HANDLER( TC0640FIO_halfword_byteswap_r ) -{ - return TC0640FIO_halfword_r(space,offset,mem_mask) << 8; -} - -WRITE16_HANDLER( TC0640FIO_halfword_byteswap_w ) -{ - if (ACCESSING_BITS_8_15) - TC0640FIO_w(space,offset,(data >> 8) & 0xff); - else - { - TC0640FIO_w(space,offset,data & 0xff); -logerror("CPU #0 PC %06x: warning - write to LSB of TC0640FIO address %02x\n",cpu_get_pc(space->cpu),offset); - } -} - - diff --git a/src/mame/video/taitoic.h b/src/mame/video/taitoic.h index 59bb3b28b6d..cb47d27cb7d 100644 --- a/src/mame/video/taitoic.h +++ b/src/mame/video/taitoic.h @@ -193,33 +193,3 @@ WRITE16_HANDLER( TC0110PCR_step1_4bpg_word_w ); /* only 4 bits per color gun */ void TC0360PRI_vh_start(running_machine *machine); /* must be called to ensure regs saved in state.c */ WRITE8_HANDLER( TC0360PRI_w ); - - -/***************************************************************************/ - -/* I/O chips, all extremely similar. The TC0220IOC was sometimes addressed - through a port, typically on earlier games. */ - -READ8_HANDLER ( TC0220IOC_r ); -WRITE8_HANDLER( TC0220IOC_w ); -READ8_HANDLER ( TC0220IOC_port_r ); -WRITE8_HANDLER( TC0220IOC_port_w ); -READ8_HANDLER ( TC0220IOC_portreg_r ); -WRITE8_HANDLER( TC0220IOC_portreg_w ); - -READ8_HANDLER ( TC0510NIO_r ); -WRITE8_HANDLER( TC0510NIO_w ); - -READ16_HANDLER ( TC0510NIO_halfword_r ); -WRITE16_HANDLER( TC0510NIO_halfword_w ); -READ16_HANDLER ( TC0510NIO_halfword_wordswap_r ); -WRITE16_HANDLER( TC0510NIO_halfword_wordswap_w ); - -READ8_HANDLER ( TC0640FIO_r ); -WRITE8_HANDLER( TC0640FIO_w ); - -READ16_HANDLER ( TC0640FIO_halfword_r ); -WRITE16_HANDLER( TC0640FIO_halfword_w ); -READ16_HANDLER ( TC0640FIO_halfword_byteswap_r ); -WRITE16_HANDLER( TC0640FIO_halfword_byteswap_w ); -