mame/src/mame/drivers/taitogn.c
2014-02-17 18:07:16 +00:00

1053 lines
39 KiB
C

/*
GNET Motherboard
Taito, 1998
The Taito GNET System comprises the following main parts....
- Sony ZN-2 Motherboard (Main CPU/GPU/SPU, RAM, BIOS, EEPROM & peripheral interfaces)
- Taito FC PCB (Sound hardware & FLASHROMs for storage of PCMCIA cart contents)
- Taito CD PCB (PCMCIA cart interface)
Also available are...
- Optional Communication Interface PCB
- Optional Save PCB
On power-up, the system checks for a PCMCIA cart. If the cart matches the contents of the flashROMs,
the game boots immediately with no delay. If the cart doesn't match, it re-flashes the flashROMs with _some_
of the information contained in the cart, which takes approximately 2-3 minutes. The game then resets
and boots up.
If no cart is present on power-up, the Taito GNET logo is displayed, then a message 'SYSTEM ERROR'
Since the logo is shown on boot even without a cart, there must be another sub-BIOS for the initial booting,
which I suspect is one of the flashROMs that is acting like a standard ROM and is not flashed at all.
Upon inspecting the GNET top board, it appears flash.u30 is the sub-BIOS and perhaps U27 is something sound related.
The flashROMs at U55, U56 & U29 appear to be the ones that are re-flashed when swapping game carts.
PCB Layouts
-----------
(Standard ZN2 Motherboard)
ZN-2 COH-3000 (sticker says COH-3002T denoting Taito GNET BIOS version)
|--------------------------------------------------------|
| LA4705 |---------------------------| |
| |---------------------------| |
| AKM_AK4310VM AT28C16 |
| VOL |
| S301 COH3002T.353 |
| |
| |
|J |
| |
|A 814260 CXD2925Q EPM7064 |
| |
|M 67.73MHz |
| |
|M |
| S551 KM4132G271BQ-8 |
|A |
| CXD8654Q CXD8661R |
| KM4132G271BQ-8 |
|CN505 CN506 53.693MHz 100MHz |
| CAT702 |
| |
|CN504 CN503 |
| |
| MC44200FT |
| NEC_78081G503 KM416V1204BT-L5 KM416V1204BT-L5 |
| |
|CN651 CN652 * * |
| CN654 |
|--------------------------------------------------------|
Notes:
CN506 - Connector for optional 3rd player controls
CN505 - Connector for optional 4th player controls
CN503 - Connector for optional 15kHz external video output (R,G,B,Sync, GND)
CN504 - Connector for optional 2nd speaker (for stereo output)
CN652 - Connector for optional trackball
CN651 - Connector for optional analog controls
CN654 - Connector for optional memory card
S301 - Slide switch for stereo or mono sound output
S551 - Dip switch (4 position, defaults all OFF)
COH3002T.353 - GNET BIOS 4MBit MaskROM type M534002 (SOP40)
AT28C16 - Atmel AT28C16 2K x8 EEPROM
814260-70 - 256K x16 (4MBit) DRAM
KM4132G271BQ-8 - 128K x 32Bit x 2 Banks SGRAM
KM416V1204BT-L5- 1M x16 EDO DRAM
EPM7064 - Altera EPM7064QC100 CPLD (QFP100)
CAT702 - Protection chip labelled 'TT10' (DIP20)
* - Unpopulated position for additional KM416V1204BT-L5 RAMs
NEC_78081G503 - NEC uPD78081 MCU, 5MHz
Video syncs are 59.8260Hz and 15.4333kHz
FC PCB K91X0721B M43X0337B
|--------------------------------------------|
| |---------------------------| |
| |---------------------------| |
| NJM2100 NJM2100 |
| MB87078 |
| *MB3773 XC95108 DIP40 CAT702 |
| *ADM708AR |
| *UPD6379GR |
| FLASH.U30 |
| |
| DIP24 |
| *RF5C296 |
| -------CD-PCB------- _ |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | |-| |
| -------------------- |
| M66220FP FLASH.U55 FLASH16.U29|
| FLASH.U27 FLASH.U56 |
|*LC321664 |
| TMS57002DPHA *ZSG-2 |
| LH52B256 25MHz |
| MN1020012A |
|--------------------------------------------|
Notes:
DIP40 - Unpopulated socket for 8MBit DIP40 EPROM type AM27C800
DIP24 - Unpopulated position for FM1208 DIP24 IC
FLASH.U30 - Intel TE28F160 16MBit FLASHROM (TSOP56)
FLASH.U29/55/56 - Intel TE28F160 16MBit FLASHROM (TSOP56)
FLASH.U27 - Intel E28F400 4MBit FLASHROM (TSOP48)
LH52B256 - Sharp 32K x8 SRAM (SOP28)
LC321664 - Sanyo 64K x16 EDO DRAM (SOP40)
XC95108 - XILINX XC95108 CPLD labelled 'E65-01' (QFP100)
MN1020012A - Panasonic MN1020012A Sound CPU (QFP128)
ZSG-2 - Zoom Corp ZSG-2 Sound DSP (QFP100)
TMS57002DPHA - Texas Instruments TMS57002DPHA Sound DSP (QFP80)
RF5C296 - Ricoh RF5C296 PCMCIA controller (TQFP144)
M66220FP - 256 x8bit Mail-Box (Inter-MPU data transfer)
CAT702 - Protection chip labelled 'TT16' (DIP20)
CD PCB - A PCMCIA cart slot connector mounted onto a small daughterboard
* - These parts located under the PCB
Taito G-Net card info
---------------------
The G-Net system uses a custom PCMCIA card for game software storage. The card is
locked with a password and can't be read by conventional means.
Some of the cards are made in separate pieces and can be opened. However some
are encased in a single-piece steel shell and opening it up destroys the card.
Some of the later games came packaged as a Compact Flash card and a PCMCIA to CF
adapter, however these cards were also locked the same as the older type.
The game uses an analog wheel (5k potentiometer) in the shape of a hand-held
control unit and a trigger (another 5k potentiometer) used for acceleration
and brake. The trigger and wheel are self centering. If the trigger is pulled back
(like firing a gun) the car goes faster. If the trigger is pushed forward the car
slows down. The controller looks a lot like the old Scalextric controllers (remember those? :-)
The controller is connected to the ZN2 main board to the 10 pin connector labelled
'ANALOG'. Using two 5k-Ohm potentiometers, power (+5V) and ground are taken from the JAMMA
edge connector or directly from the power supply. The output of the steering pot is
connected to pin 2 and the output of the acceleration pot is connected to pin 3.
The ANALOG connector output pins are tied directly to a chip next to the connector marked
'NEC 78081G503 9810KX189'. This is a NEC 8-bit 78K0-family microcontroller with on-chip 8k ROM,
256 bytes RAM, 33 I/O ports, 8-bit resolution 8-channel A/D converter, 3-channel timer, 1-channel
3-wire serial interface interrupt control (USART) and other peripheral hardware.
Card PCB Layouts
----------------
Type 1 (standard 'Taito' type, as found on most G-Net games)
------ (This type has separate top and bottom pieces which are glued together and
(can be opened if done 'carefully'. But be careful the edges of the top lid are SHARP!)
Top
---
RO-055A AI AM-1
|-|-------------------------------------|
| | |---------| |--------| |
| | |S2812A150| |CXK58257| |
| | |---------| |--------| |
| | |
| | |-------| |-----------| |
| | | | | | |
| | |ML-101 | | | |
| | | | | F1PACK | |
| | |-------| | | |
| | | | |
| | |-----| |-----------| |
| | |ROM1 | |
| | |-----| |
| | |
|-|-------------------------------------|
Notes:
F1PACK - TEL F1PACK(tm) TE6350B 9744 E0B (TQFP176)
S2812A150 - Seiko Instruments 2k x8 parallel EEPROM (TSOP28)
ML-101 - ML-101 24942-6420 9833 Z03 JAPAN (TQFP100, NOTE! This chip looks like it is Fujitsu-manufactured)
CXK58257 - SONY CXK58257 32k x8 SRAM (TSOP28)
ROM1 - TOSHIBA TC58V32FT 4M x8 (32MBit) CMOS NAND Flash EEPROM 3.3Volt (TSOP44)
The ROMs use a non-standard format and can not be read by conventional methods.
Bottom
------
|-|-------------------------------------|
| | |
| | |-----| |-----| |-----| |
| | |ROM2 | |ROM3 | |ROM4 | |
| | |-----| |-----| |-----| |
| | |
| | |
| | |-----| |-----| |-----| |
| | |ROM5 | |ROM6 | |ROM7 | |
| | |-----| |-----| |-----| |
| | |
| | |
| | |-----| |-----| |-----| |
| | |ROM8 | |ROM9 | |ROM10| |
| | |-----| |-----| |-----| |
| | |
|-|-------------------------------------|
Notes:
ROM2-10 - TOSHIBA TC58V32FT 4M x8 (32MBit) CMOS NAND Flash EEPROM 3.3Volt (TSOP44)
The ROMs use a non-standard format and can not be read by conventional methods.
Note: All ROMs have no markings (except part number) and no labels. There are also
no PCB location marks. The numbers I've assigned to the ROMs are made up for
simplicity. The actual cards have been dumped as a single storage device.
Confirmed usage on.... (not all games listed)
Chaos Heat
Flip Maze
Kollon
Mahjong OH
Nightraid
Otenki Kororin / Weather Tales
Psyvariar Medium Unit
Psyvariar Revision
Ray Crisis
RC de Go
Shanghai Shoryu Sairin
Shikigami no Shiro
Souten Ryu
Space Invaders Anniversary
Super Puzzle Bobble (English)
XIIStag
Zoku Otenami Haiken
Zooo
Type 2 (3rd party type 'sealed' cards)
------
Note only 1 card was sacrificed and opened.
Top
---
|-|-------------------------------------|
| | 18.00 |-----| |
| | |U15 | |
| | |---------| |-----| |
| | |20H2877 | |
| | |IBM0398 | |-----| |
| | |1B37001TQ| |U13 | |
| | |KOREA | |-----| |
| | |---------| |
| | |
| | |
| | |-----| |-------| |
| | |U10 | |D431000| |
| | |-----| |-------| |
| | |
|-|-------------------------------------|
Notes:
IBM0398 - Custom IC marked 20H2877 IBM0398 1B37001TQ KOREA (TQFP176)
D431000 - NEC D431000 128k x8 SRAM (TSOP32)
18.00 - Small square white 'thing', may be an oscillator at 18MHz?
U* - TOSHIBA TC58V32FT 4M x8 (32MBit) CMOS NAND Flash EEPROM 3.3Volt (TSOP44)
The ROMs use a non-standard format and can not be read by conventional methods.
Bottom
------
|-|-------------------------------------|
| | |
| | |-----| |-----| |-----| |
| | |U1 | |U2 | |U3 | |
| | |-----| |-----| |-----| |
| | |
| | |
| | |-----| |-----| |-----| |
| | |U4 | |U5 | |U6 | |
| | |-----| |-----| |-----| |
| | |
| | |
| | |-----| |-----| |
| | |U7 | |U8 | |
| | |-----| |-----| |
| | |
|-|-------------------------------------|
Notes:
U* - TOSHIBA TC58V32FT 4M x8 (32MBit) CMOS NAND Flash EEPROM 3.3Volt (TSOP44)
The ROMs use a non-standard format and can not be read by conventional methods.
U8 not populated in Nightraid card, but may be populated in other cards.
Note: All ROMs have no markings (except part number) and no labels. There are PCB
location marks. The actual cards have been dumped as a single storage device.
Confirmed usage on.... (not all games listed)
Nightraid (another one, not the same as listed above)
Based on card type (made with single sealed steel shell) these are also using the same PCB...
XIIStag (another one, not the same as listed above)
Go By RC
Space Invaders Anniversary (another one, not the same as listed above)
Super Puzzle Bobble (Japan)
Usagi
Type 3 (PCMCIA Compact Flash Adaptor + Compact Flash card, sealed together with the game?s label)
------
The Compact Flash card is read protected, it is a custom Sandisk SDCFB-64 Card (64MByte)
Confirmed usage on.... (not all games listed)
Otenami Haiken Final
Kollon
Zooo
*/
#include "emu.h"
#include "audio/taito_zm.h"
#include "cpu/psx/psx.h"
#include "machine/at28c16.h"
#include "machine/ataflash.h"
#include "machine/bankdev.h"
#include "machine/intelfsh.h"
#include "machine/mb3773.h"
#include "machine/rf5c296.h"
#include "machine/znsec.h"
#include "machine/zndip.h"
#include "sound/spu.h"
#include "video/psx.h"
class taitogn_state : public driver_device
{
public:
taitogn_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_znsec0(*this,"maincpu:sio0:znsec0"),
m_znsec1(*this,"maincpu:sio0:znsec1"),
m_zndip(*this,"maincpu:sio0:zndip"),
m_maincpu(*this, "maincpu"),
m_mn10200(*this, "mn10200"),
m_flashbank(*this, "flashbank"),
m_mb3773(*this, "mb3773"),
m_zoom(*this, "taito_zoom"),
m_pgmflash(*this, "pgmflash"),
m_sndflash0(*this, "sndflash0"),
m_sndflash1(*this, "sndflash1"),
m_sndflash2(*this, "sndflash2")
{
}
DECLARE_READ8_MEMBER(control_r);
DECLARE_WRITE8_MEMBER(control_w);
DECLARE_WRITE16_MEMBER(control2_w);
DECLARE_READ8_MEMBER(control3_r);
DECLARE_WRITE8_MEMBER(control3_w);
DECLARE_READ16_MEMBER(gn_1fb70000_r);
DECLARE_WRITE16_MEMBER(gn_1fb70000_w);
DECLARE_READ16_MEMBER(hack1_r);
DECLARE_READ8_MEMBER(znsecsel_r);
DECLARE_WRITE8_MEMBER(znsecsel_w);
DECLARE_READ8_MEMBER(boardconfig_r);
DECLARE_WRITE8_MEMBER(coin_w);
DECLARE_READ8_MEMBER(coin_r);
DECLARE_READ8_MEMBER(gnet_mahjong_panel_r);
DECLARE_READ32_MEMBER(zsg2_ext_r);
protected:
virtual void driver_start();
virtual void machine_reset();
private:
UINT8 m_control;
UINT16 m_control2;
UINT8 m_control3;
int m_v;
UINT8 m_n_znsecsel;
UINT8 m_coin_info;
required_device<znsec_device> m_znsec0;
required_device<znsec_device> m_znsec1;
required_device<zndip_device> m_zndip;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_mn10200;
required_device<address_map_bank_device> m_flashbank;
required_device<mb3773_device> m_mb3773;
required_device<taito_zoom_device> m_zoom;
required_device<intelfsh16_device> m_pgmflash;
required_device<intelfsh16_device> m_sndflash0;
required_device<intelfsh16_device> m_sndflash1;
required_device<intelfsh16_device> m_sndflash2;
};
// Misc. controls
READ8_MEMBER(taitogn_state::control_r)
{
return m_control;
}
WRITE8_MEMBER(taitogn_state::control_w)
{
// 20 = watchdog
m_mb3773->write_line_ck((data & 0x20) >> 5);
// 10 = soundcpu reset
m_mn10200->set_input_line(INPUT_LINE_RESET, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
if (~data & m_control & 0x10)
{
// assume that this also readys the sound flash chips
m_pgmflash->write(0, 0xff);
m_sndflash0->write(0, 0xff);
m_sndflash1->write(0, 0xff);
m_sndflash2->write(0, 0xff);
}
// 04 = select bank
// According to the rom code, bits 1-0 may be part of the bank
// selection too, but they're always 0.
m_flashbank->set_bank(data & 4);
m_control = data;
}
WRITE16_MEMBER(taitogn_state::control2_w)
{
m_control2 = data;
}
READ8_MEMBER(taitogn_state::control3_r)
{
return m_control3;
}
WRITE8_MEMBER(taitogn_state::control3_w)
{
m_control3 = data;
}
READ16_MEMBER(taitogn_state::gn_1fb70000_r)
{
// (1328) 1348 tests mask 0002, 8 times.
// Called by 1434, exit at 143c
// f -> 4/1
// end with 4x1 -> ok
// end with 4x0 -> configid error
// so returning 2 always works, strange.
return 2;
}
WRITE16_MEMBER(taitogn_state::gn_1fb70000_w)
{
// Writes 0 or 1 all the time, it *may* have somthing to do with
// i/o port width, but then maybe not
}
READ16_MEMBER(taitogn_state::hack1_r)
{
switch(offset)
{
case 0:
m_v = m_v ^ 8;
// Probably something to do with MCU
return m_v;
}
return 0;
}
// Lifted from zn.c
static const UINT8 tt10[ 8 ] = { 0x80, 0x20, 0x38, 0x08, 0xf1, 0x03, 0xfe, 0xfc };
static const UINT8 tt16[ 8 ] = { 0xc0, 0x04, 0xf9, 0xe1, 0x60, 0x70, 0xf2, 0x02 };
READ8_MEMBER(taitogn_state::znsecsel_r)
{
return m_n_znsecsel;
}
WRITE8_MEMBER(taitogn_state::znsecsel_w)
{
m_znsec0->select( ( data >> 2 ) & 1 );
m_znsec1->select( ( data >> 3 ) & 1 );
m_zndip->select( ( data & 0x8c ) != 0x8c );
m_n_znsecsel = data;
}
READ8_MEMBER(taitogn_state::boardconfig_r)
{
// see zn.c
return 64|32|8;
}
WRITE8_MEMBER(taitogn_state::coin_w)
{
/* 0x01=counter
0x02=coin lock 1
0x08=??
0x20=coin lock 2
0x80=??
*/
m_coin_info = data;
}
READ8_MEMBER(taitogn_state::coin_r)
{
return m_coin_info;
}
/* mahjong panel handler (for Usagi & Mahjong Oh) */
READ8_MEMBER(taitogn_state::gnet_mahjong_panel_r)
{
switch(m_coin_info & 0xcc)
{
case 0x04: return ioport("KEY0")->read();
case 0x08: return ioport("KEY1")->read();
case 0x40: return ioport("KEY2")->read();
case 0x80: return ioport("KEY3")->read();
}
/* mux disabled */
return ioport("P4")->read();
}
READ32_MEMBER(taitogn_state::zsg2_ext_r)
{
offset *= 2;
if (offset < 0x100000)
return m_sndflash0->read(offset) | m_sndflash0->read(offset | 1) << 16;
else if (offset < 0x200000)
return m_sndflash1->read(offset & 0xfffff) | m_sndflash0->read((offset & 0xfffff) | 1) << 16;
else
return m_sndflash2->read(offset & 0xfffff) | m_sndflash0->read((offset & 0xfffff) | 1) << 16;
}
// Init and reset
void taitogn_state::driver_start()
{
m_znsec0->init(tt10);
m_znsec1->init(tt16);
}
void taitogn_state::machine_reset()
{
m_control = 0xf8;
// halt sound CPU since it has no valid program at start
m_mn10200->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
static ADDRESS_MAP_START( taitogn_map, AS_PROGRAM, 32, taitogn_state )
AM_RANGE(0x1f000000, 0x1f7fffff) AM_DEVICE16("flashbank", address_map_bank_device, amap16, 0xffffffff)
AM_RANGE(0x1fa00000, 0x1fa00003) AM_READ_PORT("P1")
AM_RANGE(0x1fa00100, 0x1fa00103) AM_READ_PORT("P2")
AM_RANGE(0x1fa00200, 0x1fa00203) AM_READ_PORT("SERVICE")
AM_RANGE(0x1fa00300, 0x1fa00303) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1fa10000, 0x1fa10003) AM_READ_PORT("P3")
AM_RANGE(0x1fa10100, 0x1fa10103) AM_READ_PORT("P4")
AM_RANGE(0x1fa10200, 0x1fa10203) AM_READ8(boardconfig_r, 0x000000ff)
AM_RANGE(0x1fa10300, 0x1fa10303) AM_READWRITE8(znsecsel_r, znsecsel_w, 0x000000ff)
AM_RANGE(0x1fa20000, 0x1fa20003) AM_READWRITE8(coin_r, coin_w, 0x000000ff)
AM_RANGE(0x1fa30000, 0x1fa30003) AM_READWRITE8(control3_r, control3_w, 0x000000ff)
AM_RANGE(0x1fa51c00, 0x1fa51dff) AM_READNOP // systematic read at spu_address + 250000, result dropped, maybe other accesses
AM_RANGE(0x1fa60000, 0x1fa60003) AM_READ16(hack1_r, 0xffffffff)
AM_RANGE(0x1faf0000, 0x1faf07ff) AM_DEVREADWRITE8("at28c16", at28c16_device, read, write, 0xffffffff) /* eeprom */
AM_RANGE(0x1fb00000, 0x1fb0ffff) AM_DEVREADWRITE16("rf5c296", rf5c296_device, io_r, io_w, 0xffffffff)
AM_RANGE(0x1fb40000, 0x1fb40003) AM_READWRITE8(control_r, control_w, 0x000000ff)
AM_RANGE(0x1fb60000, 0x1fb60003) AM_WRITE16(control2_w, 0x0000ffff)
AM_RANGE(0x1fb70000, 0x1fb70003) AM_READWRITE16(gn_1fb70000_r, gn_1fb70000_w, 0x0000ffff)
AM_RANGE(0x1fb80000, 0x1fb80003) AM_DEVWRITE16("taito_zoom", taito_zoom_device, reg_data_w, 0x0000ffff)
AM_RANGE(0x1fb80000, 0x1fb80003) AM_DEVWRITE16("taito_zoom", taito_zoom_device, reg_address_w, 0xffff0000)
AM_RANGE(0x1fba0000, 0x1fba0003) AM_DEVWRITE16("taito_zoom", taito_zoom_device, sound_irq_w, 0x0000ffff)
AM_RANGE(0x1fbc0000, 0x1fbc0003) AM_DEVREAD16("taito_zoom", taito_zoom_device, sound_irq_r, 0x0000ffff)
AM_RANGE(0x1fbe0000, 0x1fbe01ff) AM_DEVREADWRITE8("taito_zoom", taito_zoom_device, shared_ram_r, shared_ram_w, 0x00ff00ff) // M66220FP for comms with the MN10200
ADDRESS_MAP_END
static ADDRESS_MAP_START( flashbank_map, AS_PROGRAM, 16, taitogn_state )
// Bank 0 has access to the subbios, the mn102 flash and the rf5c296 mem zone
AM_RANGE(0x00000000, 0x001fffff) AM_DEVREADWRITE("biosflash", intelfsh16_device, read, write)
AM_RANGE(0x00200000, 0x002fffff) AM_DEVREADWRITE("rf5c296", rf5c296_device, mem_r, mem_w )
AM_RANGE(0x00300000, 0x0037ffff) AM_DEVREADWRITE("pgmflash", intelfsh16_device, read, write)
// Bank 1 has access to the 3 samples flashes
AM_RANGE(0x08000000, 0x081fffff) AM_DEVREADWRITE("sndflash0", intelfsh16_device, read, write)
AM_RANGE(0x08200000, 0x083fffff) AM_DEVREADWRITE("sndflash1", intelfsh16_device, read, write)
AM_RANGE(0x08400000, 0x085fffff) AM_DEVREADWRITE("sndflash2", intelfsh16_device, read, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( taitogn_mp_map, AS_PROGRAM, 32, taitogn_state )
AM_RANGE(0x1fa10100, 0x1fa10103) AM_READ8(gnet_mahjong_panel_r, 0x000000ff)
AM_IMPORT_FROM(taitogn_map)
ADDRESS_MAP_END
static ADDRESS_MAP_START( taitogn_mn_map, AS_PROGRAM, 16, taitogn_state )
AM_RANGE(0x080000, 0x0fffff) AM_DEVREAD("pgmflash", intelfsh16_device, read)
AM_IMPORT_FROM( taitozoom_mn_map )
ADDRESS_MAP_END
SLOT_INTERFACE_START(slot_ataflash)
SLOT_INTERFACE("ataflash", ATA_FLASH_PCCARD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( coh3002t, taitogn_state )
/* basic machine hardware */
MCFG_CPU_ADD( "maincpu", CXD8661R, XTAL_100MHz )
MCFG_CPU_PROGRAM_MAP(taitogn_map)
MCFG_RAM_MODIFY("maincpu:ram")
MCFG_RAM_DEFAULT_SIZE("4M")
MCFG_DEVICE_ADD("maincpu:sio0:znsec0", ZNSEC, 0)
MCFG_DEVICE_ADD("maincpu:sio0:znsec1", ZNSEC, 0)
MCFG_DEVICE_ADD("maincpu:sio0:zndip", ZNDIP, 0)
MCFG_ZNDIP_DATA_HANDLER(IOPORT(":DSW"))
// 5MHz NEC uPD78081 MCU:
// we don't have a 78K0 emulation core yet..
/* video hardware */
MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8654Q, 0x200000, XTAL_53_693175MHz )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SPU_ADD( "spu", XTAL_67_7376MHz/2 )
MCFG_SOUND_ROUTE(0, "lspeaker", 0.35)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.35)
MCFG_AT28C16_ADD( "at28c16", 0 )
MCFG_DEVICE_ADD("rf5c296", RF5C296, 0)
MCFG_RF5C296_SLOT(":pccard")
MCFG_DEVICE_ADD("pccard", PCCARD_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(slot_ataflash, "ataflash", false)
MCFG_MB3773_ADD("mb3773")
MCFG_INTEL_TE28F160_ADD("biosflash")
MCFG_INTEL_E28F400B_ADD("pgmflash")
MCFG_INTEL_TE28F160_ADD("sndflash0")
MCFG_INTEL_TE28F160_ADD("sndflash1")
MCFG_INTEL_TE28F160_ADD("sndflash2")
MCFG_DEVICE_ADD("flashbank", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(flashbank_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(16)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000000)
MCFG_FRAGMENT_ADD( taito_zoom_sound )
MCFG_CPU_MODIFY("mn10200")
MCFG_CPU_PROGRAM_MAP(taitogn_mn_map)
MCFG_SOUND_REPLACE("zsg2", ZSG2, XTAL_25MHz/2)
MCFG_ZSG2_EXT_READ_HANDLER(READ32(taitogn_state, zsg2_ext_r))
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( coh3002t_mp, coh3002t )
MCFG_CPU_MODIFY( "maincpu" )
MCFG_CPU_PROGRAM_MAP(taitogn_mp_map)
MACHINE_CONFIG_END
static INPUT_PORTS_START( coh3002t )
PORT_START("P1")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SERVICE")
PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_START("P3")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW")
PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "S551:1" )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("S551:2") // bios testmode
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "S551:3" )
PORT_DIPNAME( 0x08, 0x08, "Test Mode" ) PORT_DIPLOCATION("S551:4") // game testmode
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
/* input port define for the mahjong panel (standard type) */
static INPUT_PORTS_START( coh3002t_mp )
PORT_INCLUDE( coh3002t )
PORT_START("KEY0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) //rate button
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
//
#define ROM_LOAD16_WORD_BIOS(bios,name,offset,length,hash) \
ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(bios+1)) /* Note '+1' */
#define TAITOGNET_BIOS \
ROM_REGION32_LE( 0x080000, "maincpu:rom", 0 ) \
ROM_LOAD( "coh-3002t.353", 0x000000, 0x080000, CRC(03967fa7) SHA1(0e17fec2286e4e25deb23d40e41ce0986f373d49) ) \
ROM_REGION( 0x2000, "mcu", 0 ) \
ROM_LOAD( "upd78081.655", 0x0000, 0x2000, NO_DUMP ) /* internal rom :( */ \
ROM_REGION( 0x200000, "biosflash", 0 ) \
ROM_SYSTEM_BIOS( 0, "v1", "G-NET Bios v1" ) \
ROM_LOAD16_WORD_BIOS(0, "flash.u30", 0x000000, 0x200000, CRC(c48c8236) SHA1(c6dad60266ce2ff635696bc0d91903c543273559) ) \
ROM_SYSTEM_BIOS( 1, "v2", "G-NET Bios v2" ) \
ROM_LOAD16_WORD_BIOS(1, "flashv2.u30", 0x000000, 0x200000, CRC(CAE462D3) SHA1(f1b10846a8423d9fe021191c5876190857c3d2a4) ) \
ROM_REGION( 0x80000, "mn10200", 0) \
ROM_FILL( 0, 0x80000, 0xff) \
ROM_REGION32_LE( 0x600000, "zsg2", 0) \
ROM_FILL( 0, 0x600000, 0xff)
ROM_START( taitogn )
TAITOGNET_BIOS
ROM_END
/* Taito */
ROM_START(raycris)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "raycris", 0, SHA1(015cb0e6c4421cc38809de28c4793b4491386aee))
ROM_END
ROM_START(gobyrc)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "gobyrc", 0, SHA1(0bee1f495fc8b033fd56aad9260ae94abb35eb58))
ROM_END
ROM_START(rcdego)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "rcdego", 0, SHA1(9e177f2a3954cfea0c8c5a288e116324d10f5dd1))
ROM_END
ROM_START(chaoshea)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "chaosheat", 0, SHA1(c13b7d7025eee05f1f696d108801c7bafb3f1356))
ROM_END
ROM_START(chaosheaj)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "chaosheatj", 0, SHA1(2f211ac08675ea8ec33c7659a13951db94eaa627))
ROM_END
ROM_START(flipmaze)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "flipmaze", 0, SHA1(423b6c06f4f2d9a608ce20b61a3ac11687d22c40) )
ROM_END
ROM_START(spuzbobl)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "spuzbobl", 0, SHA1(1b1c72fb7e5656021485fefaef8f2ba48e2b4ea8))
ROM_END
ROM_START(spuzboblj)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "spuzbobj", 0, SHA1(dac433cf88543d2499bf797d7406b82ae4338726))
ROM_END
ROM_START(soutenry)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "soutenry", 0, SHA1(9204d0be833d29f37b8cd3fbdf09da69b622254b))
ROM_END
ROM_START(shanghss)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "shanghss", 0, SHA1(7964f71ec5c81d2120d83b63a82f97fbad5a8e6d))
ROM_END
ROM_START(sianniv)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "sianniv", 0, SHA1(1e08b813190a9e1baf29bc16884172d6c8da7ae3))
ROM_END
ROM_START(kollon)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "kollon", 0, SHA1(d8ea5b5b0ee99004b16ef89883e23de6c7ddd7ce))
ROM_END
ROM_START(kollonc)
TAITOGNET_BIOS
ROM_DEFAULT_BIOS( "v2" )
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "kollonc", 0, SHA1(ce62181659701cfb8f7c564870ab902be4d8e060)) /* Original Taito Compact Flash version */
ROM_END
ROM_START(shikigam)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "shikigam", 0, SHA1(fa49a0bc47f5cb7c30d7e49e2c3696b21bafb840))
ROM_END
/* Success */
ROM_START(otenamih)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "otenamih", 0, SHA1(b3babe3a1876c43745616ee1e7d87276ce7dad0b) )
ROM_END
ROM_START(psyvaria)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "psyvaria", 0, SHA1(b981a42a10069322b77f7a268beae1d409b4156d))
ROM_END
ROM_START(psyvarrv)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "psyvarrv", 0, SHA1(277c4f52502bcd7acc1889840962ec80d56465f3))
ROM_END
ROM_START(zooo)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "zooo", 0, SHA1(e275b3141b2bc49142990e6b497a5394a314a30b))
ROM_END
ROM_START(zokuoten)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "zokuoten", 0, SHA1(5ce13db00518f96af64935176c71ec68d2a51938))
ROM_END
ROM_START(otenamhf)
TAITOGNET_BIOS
ROM_DEFAULT_BIOS( "v2" )
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "otenamhf", 0, SHA1(5b15c33bf401e5546d78e905f538513d6ffcf562)) /* Original Taito Compact Flash version */
ROM_END
/* Takumi */
ROM_START(nightrai)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "nightrai", 0, SHA1(74d0458f851cbcf10453c5cc4c47bb4388244cdf))
ROM_END
ROM_START(otenki)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "otenki", 0, SHA1(7e745ca4c4570215f452fd09cdd56a42c39caeba))
ROM_END
/* Warashi */
ROM_START(usagi)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "usagi", 0, SHA1(edf9dd271957f6cb06feed238ae21100514bef8e))
ROM_END
ROM_START(mahjngoh)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "mahjngoh", 0, SHA1(3ef1110d15582d7c0187438d7ad61765dd121cff))
ROM_END
ROM_START(shangtou)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "shanghaito", 0, SHA1(9901db5a9aae77e3af4157aa2c601eaab5b7ca85) )
ROM_END
/* Triangle Service */
ROM_START(xiistag)
TAITOGNET_BIOS
DISK_REGION( "pccard:ataflash:image" )
DISK_IMAGE( "xiistag", 0, SHA1(586e37c8d926293b2bd928e5f0d693910cfb05a2))
ROM_END
/* A dummy driver, so that the bios can be debugged, and to serve as */
/* parent for the coh-3002t.353 file, so that we do not have to include */
/* it in every zip file */
GAME( 1997, taitogn, 0, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Taito GNET", GAME_IS_BIOS_ROOT )
GAME( 1998, chaoshea, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Chaos Heat (V2.09O)", GAME_IMPERFECT_SOUND )
GAME( 1998, chaosheaj,chaoshea, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Chaos Heat (V2.08J)", GAME_IMPERFECT_SOUND )
GAME( 1998, raycris, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Ray Crisis (V2.03J)", GAME_IMPERFECT_SOUND )
GAME( 1999, spuzbobl, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Super Puzzle Bobble (V2.05O)", GAME_IMPERFECT_SOUND )
GAME( 1999, spuzboblj,spuzbobl, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Super Puzzle Bobble (V2.04J)", GAME_IMPERFECT_SOUND )
GAME( 1999, gobyrc, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Go By RC (V2.03O)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // custom inputs need calibrating, likely needs mcu emulation
GAME( 1999, rcdego, gobyrc, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "RC De Go (V2.03J)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // "
GAME( 1999, flipmaze, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito / Moss", "Flip Maze (V2.04J)", GAME_IMPERFECT_SOUND )
GAME( 2001, shikigam, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Alfa System / Taito", "Shikigami no Shiro (V2.03J)", GAME_IMPERFECT_SOUND )
GAME( 2003, sianniv, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Taito", "Space Invaders Anniversary (V2.02J)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // IRQ at the wrong time
GAME( 2003, kollon, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (V2.04J)", GAME_IMPERFECT_SOUND )
GAME( 2003, kollonc, kollon, coh3002t, coh3002t, driver_device, 0, ROT0, "Taito", "Kollon (V2.04JC)", GAME_IMPERFECT_SOUND )
GAME( 1999, otenamih, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Success", "Otenami Haiken (V2.04J)", GAME_IMPERFECT_SOUND )
GAME( 2005, otenamhf, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Success / Warashi", "Otenami Haiken Final (V2.07JC)", GAME_IMPERFECT_SOUND )
GAME( 2000, psyvaria, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Medium Unit- (V2.04J)", GAME_IMPERFECT_SOUND )
GAME( 2000, psyvarrv, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Success", "Psyvariar -Revision- (V2.04J)", GAME_IMPERFECT_SOUND )
GAME( 2000, zokuoten, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Success", "Zoku Otenamihaiken (V2.03J)", GAME_IMPERFECT_SOUND )
GAME( 2004, zooo, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Success", "Zooo (V2.01J)", GAME_IMPERFECT_SOUND )
GAME( 1999, mahjngoh, taitogn, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Mahjong Oh (V2.06J)", GAME_IMPERFECT_SOUND )
GAME( 2001, usagi, taitogn, coh3002t_mp, coh3002t_mp, driver_device, 0, ROT0, "Warashi / Mahjong Kobo / Taito", "Usagi (V2.02J)", GAME_IMPERFECT_SOUND )
GAME( 2000, soutenry, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Soutenryu (V2.07J)", GAME_IMPERFECT_SOUND )
GAME( 2000, shanghss, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi", "Shanghai Shoryu Sairin (V2.03J)", GAME_IMPERFECT_SOUND )
GAME( 2002, shangtou, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Warashi / Sunsoft / Taito", "Shanghai Sangokuhai Tougi (Ver 2.01J)", GAME_IMPERFECT_SOUND )
GAME( 2001, nightrai, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Night Raid (V2.03J)", GAME_IMPERFECT_SOUND )
GAME( 2001, otenki, taitogn, coh3002t, coh3002t, driver_device, 0, ROT0, "Takumi", "Otenki Kororin (V2.01J)", GAME_IMPERFECT_SOUND )
GAME( 2002, xiistag, taitogn, coh3002t, coh3002t, driver_device, 0, ROT270, "Triangle Service", "XII Stag (V2.01J)", GAME_IMPERFECT_SOUND )