Misc Taito stuff:

* split I/O devices from video ones
* converted all taito drivers to use these I/O devices
* removed old I/O code from taitoic.c
* added preliminary tc0180vcu video device
This commit is contained in:
Fabio Priuli 2009-12-27 22:14:54 +00:00
parent c0ded3da97
commit 479c405c79
20 changed files with 1510 additions and 1145 deletions

2
.gitattributes vendored
View File

@ -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

View File

@ -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)

View File

@ -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 )

View File

@ -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)

View File

@ -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<size; i++)
offset = size / 2;
for (i = size / 2 + size / 4; i < size; i++)
{
int d1,d2,d3,d4;
int d1, d2, d3, d4;
/* Expand 2bits into 4bits format */
data = gfx[i];
d1 = (data>>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++;
}
}

View File

@ -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).

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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 )

View File

@ -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)

View File

@ -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)

579
src/mame/machine/taitoio.c Normal file
View File

@ -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;
}
}

112
src/mame/machine/taitoio.h Normal file
View File

@ -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__ */

View File

@ -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: \

View File

@ -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;

View File

@ -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 );

View File

@ -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);
}
}

View File

@ -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 );