Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
5458 lines (4392 sloc) 255 KB
// license:BSD-3-Clause
// copyright-holders:David Graves, Bryan McPhail, Brad Oliver, Andrew Prime, Brian Troha, Nicola Salmoria
// thanks-to:Richard Bush
/***************************************************************************
Taito F2 System
driver by David Graves, Bryan McPhail, Brad Oliver, Andrew Prime, Brian
Troha, Nicola Salmoria with some initial help from Richard Bush
The Taito F2 system is a fairly flexible hardware platform. The main board
supports three 64x64 tiled scrolling background planes of 8x8 tiles, and a
powerful sprite engine capable of handling all the video chores by itself
(used in e.g. Super Space Invaders). The front tilemap has characters which
are generated in RAM for maximum versatility (fading effects etc.).
The expansion board can have additional gfx chip e.g. for a zooming/rotating
tilemap, or additional tilemap planes.
Sound is handled by a Z80 with a YM2610 connected to it.
The memory map for each of the games is similar but shuffled around.
Notes:
- Metal Black has secret command to select stage.
Start the machine with holding service switch.
Then push 1p start, 1p start, 1p start, service SW, 1p start
while error message is displayed.
(This also works in many of the other games. Use in Don Doko Don to play
an extra set of fifty levels.)
Custom chips
------------
The old version of the F2 main board (larger) has
TC0100SCN (tilemaps)
TC0200OBJ+TC0210FBC (sprites)
TC0140SYT (sound communication & other stuff)
The new version has
TC0100SCN (tilemaps)
TC0540OBN+TC0520TBC (sprites)
TC0530SYC (sound communication & other stuff)
I/O Priority / Palette Additional gfx Other
--------- ------------------- ----------------------- ----------------------------
finalb TC0220IOC TC0110PCR TC0070RGB
dondokod TC0220IOC TC0360PRI TC0260DAR TC0280GRD(x2)(zoom/rot)
megab TC0220IOC TC0360PRI TC0260DAR TC0030CMD(C-Chip protection)
thundfox TC0220IOC TC0360PRI TC0260DAR TC0100SCN (so it has two)
cameltry TC0220IOC TC0360PRI TC0260DAR TC0280GRD(x2)(zoom/rot)
qtorimon TC0220IOC TC0110PCR TC0070RGB
liquidk TC0220IOC TC0360PRI TC0260DAR
quizhq TMP82C265 TC0110PCR TC0070RGB
ssi TC0510NIO TC0260DAR
gunfront TC0510NIO TC0360PRI TC0260DAR
growl TMP82C265 TC0360PRI TC0260DAR TC0190FMC(sprite banking?)
mjnquest TC0110PCR TC0070RGB
footchmp TE7750 TC0360PRI TC0260DAR TC0480SCP(tilemaps) TC0190FMC(sprite banking?)
koshien TC0510NIO TC0360PRI TC0260DAR
yuyugogo TC0510NIO TC0260DAR
ninjak TE7750 TC0360PRI TC0260DAR TC0190FMC(sprite banking?)
solfigtr TMP82C265 TC0360PRI TC0260DAR TC0190FMC(sprite banking?)
qzquest TC0510NIO TC0260DAR
pulirula TC0510NIO TC0360PRI TC0260DAR TC0430GRW(zoom/rot)
metalb TC0510NIO TC0360PRI TC0260DAR TC0480SCP(tilemaps)
qzchikyu TC0510NIO TC0260DAR
yesnoj TMP82C265 TC0260DAR TC8521AP(RTC)
deadconx TE7750 TC0360PRI TC0260DAR TC0480SCP(tilemaps) TC0190FMC(sprite banking?)
dinorex TC0510NIO TC0360PRI TC0260DAR
qjinsei TC0510NIO TC0360PRI TC0260DAR
qcrayon TC0510NIO TC0360PRI TC0260DAR
qcrayon2 TC0510NIO TC0360PRI TC0260DAR
driftout TC0510NIO TC0360PRI TC0260DAR TC0430GRW(zoom/rot)
A complete list of Taito Games can be still accessed with archive.org:
http://web.archive.org/web/20010502131808/www.taito.co.jp/game-history/
F2 Motherboard ( Big ) K1100432A, J1100183A
(Small) K1100608A, J1100242A
Apr.1989 Final Blow (B82, M4300123A, K1100433A)
Jul.1989 Don Doko Don (B95, M4300131A, K1100454A, J1100195A)
Oct.1989 Mega Blast (C11)
Feb.1990 Quiz Torimonochou (C41, K1100554A)
Apr.1990 Cameltry (C38, M4300167A, K1100556A)
Jul.1990 Quiz H.Q. (C53, K1100594A)
Aug.1990 Thunder Fox (C28, M4300181A, K1100580A) (exists in F1 version too)
Sep.1990 Liquid Kids/Mizubaku Daibouken (C49, K1100593A)
Nov.1990 MJ-12/Super Space Invaders (C64, M4300195A, K1100616A, J1100248A)
Jan.1991 Gun Frontier (C71, M4300199A, K1100625A, K1100629A(overseas))
Feb.1991 Growl/Runark (C74, M4300210A, K1100639A)
Mar.1991 Hat Trick Hero/Euro Football Championship (C80, K11J0646A)
Mar.1991 Yuu-yu no Quiz de Go!Go! (C83, K11J0652A)
Apr.1991 Ah Eikou no Koshien (C81, M43J0214A, K11J654A)
Apr.1991 Ninja Kids (C85, M43J0217A, K11J0659A)
May.1991 Mahjong Quest (C77, K1100637A, K1100637B)
Jul.1991 Quiz Quest (C92, K11J0678A)
Sep.1991 Metal Black (D12)
Oct.1991 Drift Out (Visco) (M43X0241A, K11X0695A)
Nov.1991 PuLiRuLa (C98, M43J0225A, K11J0672A)
Feb.1992 Quiz Chikyu Boueigun (D19, K11J0705A)
Jul.1992 Dead Connection (D28, K11J0715A)
Nov.1992 Dinorex (D39, K11J0254A)
Mar.1993 Quiz Jinsei Gekijou (D48, M43J0262A, K11J0742A)
Aug.1993 Quiz Crayon Shinchan (D55, K11J0758A)
Dec.1993 Crayon Shinchan Orato Asobo (D63, M43J0276A, K11J0779A)
Mar.1992 Yes.No. Shinri Tokimeki Chart (Fortune teller machine) (D20, K11J0706B)
Thunder Fox, Drift Out, "Quiz Crayon Shinchan", and "Crayon Shinchan
Orato Asobo" has "Not F2" version PCB.
Foreign version of Cameltry uses different hardware (B89's PLD,
K1100573A, K1100574A).
Sprite extension area types
===========================
These games need a special value for f2_spriteext:
Yuyugogo = 1
Pulirula = 2
Dinorex = 3
Quiz Crayon 1&2 = 3
Quiz Jinsei = 3
(all other games need it to be zero)
TODO Lists
==========
- The sprite system is still partly a mystery, and not an accurate emulation.
A lot of sprite glitches are caused by data in sprite ram not being correct,
part from one frame and part from the previous one. There has to be some
buffering inside the chip but it's not clear how. See below the irq section
for a long list of observations on sprite glitches.
Other limitations include: misplaced tile of the zooming title in Qcrayon
(the one on the yellow background in attract); sprites when you get a home
run in Koshien are often out on x axis by 1 pixel.
- TC0480SCP emulation (footchmp, metalb, deadconx) has slight inaccuracies.
Zoomed layers and zoomed pixel rows are not precisely positioned.
- DIPS, still many unknown
- Restored save states on some games tend to hang.
- All non-quiz games except Solfigtr have 2 country sets dumped: if 1 byte diff
then create the third set.
Don Doko Don
------------
Roz layer is one pixel out vertically when screen flipped.
Cameltry (cameltrya)
--------
Alt version with YM2203 and M6295
Sound frequencies may be incorrect
Gun Frontier
------------
There are mask sprites used on the waterfall in the first round
of attract demo, however it's not clear what they should mask since
there don't seem to be sprites below them. Shadow maybe?
(BM161104 - Fixed)
Pulirula
--------
In level 3, the mask sprites used for the door are misaligned by one pixel to
the left.
(BM100705 - Not a bug - various alignment problems seem to be confirmed from a real pcb).
Shadows appear to have some kind of flicker effect on real pcb - not emulated/understood.
Metal Black
-----------
Tilemap screenflip support has an issue: blue planet early in attract
should be 1 pixel left.
Sprite emulation issues may be responsible for minor glitches on the
"bolts" on round 4 boss ship: some sprite/tilemap lag creeps in.
Missing two blend effects: there's a sun sprite underneath tilemaps
in round 1; and the boss sprite crosses under the tilemaps at start
of round 5 finale.
(BM161104 - Fixed)
Yesnoj
------
Input mapping incomplete. There's a 0x01 one which only seems to be
used in printer [printer test?] mode. It seems to be a printer status
input. With the value currently returned, it sounds an alarm and says
[Japanese trans.] "Error detected on the printer. Call machine operator."
Update (2008.10.09) Printer shall now be correct but it's still not clear
how the inputs are physically connected and what the are supposed to do.
[Coin lockout/ctr?]
Calendar / Time in "test mode" always reset to default settings.
Quiz Crayon 2
-------------
There should be a highlight circle around the player while it moves on the
map. This is done by a sprite which doesn't have priority over the
background. This is probably the same thing as the waterfall in Gun Frontier.
(BM161104 - Fixed)
Driftout
--------
Sprites are 1 pixel too far right in screenflip.
Roz layer is around 4 pixels too far down in screenflip.
PCB Layout
----------
K11T0658A
NINJA KIDS
|----------------------------------------------|
|PAL PAL C85-12*.49 C85-15*.50 DSWA DSWB |
|68000P12 C85-06.49 C85-07.50 OSC1 TE7750 |
| |
| 84256 84256 C85-03.65 |
| MB3771 |
| TC0190FMC TC0100SCN TC51832 |
|C85-02.19 84256 84256 TC51832 J|
|C85-01.17 HM3-65764KS A|
| M|
|TC51832 TC51832 TC0360PRI M|
|TC51832 TC51832 TC0540OBN TC0260DAR A|
|TC51832 TC51832 |
|TC51832 TC51832 TC0520TBC |
|TC51832 TC51832 OSC2 Z80A |
|TC51832 TC51832 TC0530SYC |
|TC51832 TC51832 C85-05.33 C85-14.54 |
| C85-04.31 YM2610 YM3016 |
|----------------------------------------------|
Notes:
OSC1 = 26.686MHz
OSC2 = 24.000MHz
68000 clock: 12.000MHz (24 / 2)
Z80 clock: 4.000MHz (24 / 6)
YM2610 clock: 8.000MHz (24 / 3)
Vsync: 60Hz
***************************************************************************/
#include "emu.h"
#include "includes/taito_f2.h"
#include "includes/taitoipt.h"
#include "audio/taitosnd.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/rp5c01.h"
#include "machine/te7750.h"
#include "machine/watchdog.h"
#include "sound/2203intf.h"
#include "sound/2610intf.h"
#include "sound/okim6295.h"
#include "speaker.h"
/**********************************************************
GAME INPUTS
**********************************************************/
void taitof2_state::coin_nibble_w(u8 data)
{
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
machine().bookkeeping().coin_counter_w(0, data & 0x04);
machine().bookkeeping().coin_counter_w(1, data & 0x08);
}
void taitof2_state::growl_coin_word_w(u8 data)/* what about coins 3&4 ?? */
{
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
machine().bookkeeping().coin_counter_w(0, data & 0x04);
machine().bookkeeping().coin_counter_w(1, data & 0x08);
}
void taitof2_state::_4p_coin_word_w(u8 data)
{
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
machine().bookkeeping().coin_lockout_w(2, ~data & 0x04);
machine().bookkeeping().coin_lockout_w(3, ~data & 0x08);
machine().bookkeeping().coin_counter_w(0, data & 0x10);
machine().bookkeeping().coin_counter_w(1, data & 0x20);
machine().bookkeeping().coin_counter_w(2, data & 0x40);
machine().bookkeeping().coin_counter_w(3, data & 0x80);
}
u16 taitof2_state::cameltry_paddle_r(offs_t offset)
{
int curr, res = 0xff;
switch (offset)
{
case 0x00:
curr = m_io_paddle[0]->read();
res = curr - m_last[0];
m_last[0] = curr;
return res;
case 0x02:
curr = m_io_paddle[1]->read();
res = curr - m_last[1];
m_last[1] = curr;
return res;
}
logerror("CPU #0 PC %06x: warning - read unmapped paddle offset %06x\n", m_maincpu->pc(), offset);
return 0;
}
u16 taitof2_state::mjnquest_dsw_r(offs_t offset)
{
switch (offset)
{
case 0x00:
{
return (m_io_in[5]->read() << 8) + m_io_dswa->read(); /* DSW A + coin */
}
case 0x01:
{
return (m_io_in[6]->read() << 8) + m_io_dswb->read(); /* DSW B + coin */
}
}
logerror("CPU #0 PC %06x: warning - read unmapped dsw_r offset %06x\n", m_maincpu->pc(), offset);
return 0xff;
}
u16 taitof2_state::mjnquest_input_r()
{
switch (m_mjnquest_input)
{
case 0x01:
return m_io_in[0]->read();
case 0x02:
return m_io_in[1]->read();
case 0x04:
return m_io_in[2]->read();
case 0x08:
return m_io_in[3]->read();
case 0x10:
return m_io_in[4]->read();
}
logerror("CPU #0 mjnquest_input %06x: warning - read unknown input %06x\n", m_maincpu->pc(), m_mjnquest_input);
return 0xff;
}
void taitof2_state::mjnquest_inputselect_w(u16 data)
{
m_mjnquest_input = (data >> 6);
}
/******************************************************************
INTERRUPTS (still a WIP)
The are two interrupt request signals: VBL and DMA. DMA comes
from the sprite generator (maybe when it has copied the data to
a private buffer, or rendered the current frame, or who knows what
else).
The requests are mapped through a PAL so no hardwiring, but the PAL
could be the same across all the games. All the games have just two
valid vectors, IRQ5 and IRQ6.
It seems that usually VBL maps to IRQ5 and DMA to IRQ6. However
there are jumpers on the board allowing to swap the two interrupt
request signals, so this could explain a need for certain games to
have them in the opposite order.
There are lots of sprite glitches in many games because the sprite ram
is often updated in two out-of-sync chunks. I am almost sure there is
some partial buffering going on in the sprite chip, and DMA has to
play a part in it.
sprite ctrl regs interrupts & sprites
0006 000a 8006 800a
---------------------- -----------------------------------------------
finalb 8000 0300 0000 0000 Needs partial buffering like dondokod to avoid glitches
dondokod 8000 0000/8 0000 0000 IRQ6 just sets a flag. IRQ5 waits for that flag,
toggles ctrl register 0000<->0008, and copies bytes
0 and 8 *ONLY* of sprite data (code, color, flip,
ctrl). The other bytes of sprite data (coordinates
and zoom) are updated by the main program.
Caching sprite data and using bytes 0 and 8 from
previous frame and the others from *TWO* frames
before is enough to get glitch-free sprites that seem
to be perfectly in sync with scrolling (check the tree
mouths during level change).
thundfox 8000 0000 0000 0000 IRQ6 copies bytes 0 and 8 *ONLY* of sprite data (code,
color, flip, ctrl). The other bytes of sprite data
(coordinates and zoom) are updated (I think) by the
main program.
The same sprite data caching that works for dondokod
improves sprites, but there are still glitches related
to zoom (check third round of attract mode). Those
glitches can be fixed by buffering also the zoom ctrl
byte.
Moreover, sprites are not in perfect sync with the
background (sometimes they are one frame behind, but
not always).
qtorimon 8000 0000 0000 0000 IRQ6 does some stuff but doesn't seem to deal with
sprites. IRQ5 copies bytes 0, 8 *AND ALSO 2* of sprite
data in one routine, and immediately after that the
remaining bytes 4 and 6 in another routine, without
doing, it seems, any waiting inbetween.
Nevertheless, separated sprite data caching like in
dondokod is still required to avoid glitches.
liquidk 8000 0000/8 0000 0000 Same as dondokod. An important difference is that
the sprite ctrl register doesn't toggle every frame
(because the handler can't complete the frame in
time?). This can be seen easily in the attract mode,
where sprite glitches appear.
Correctly handling the ctrl register and sprite data
caching seems to be vital to avoid sprite glitches.
quizhq 8000 0000 0000 0000 Both IRQ5 and IRQ6 do stuff, I haven't investigated.
There is a very subtle sprite glitch if sprite data
buffering is not used: the blinking INSERT COIN in
the right window will get moved as garbage chars on
the left window score and STOCK for one frame when
INSERT COINS disappears from the right. This happens
because bytes 0 and 8 of the sprite data are one
frame behind and haven't been cleared yet.
ssi 8000 0000 0000 0000 IRQ6 does nothing. IRQ5 copies bytes 0 and 8 *ONLY*
of sprite data (code, color, flip, ctrl). The other
bytes of sprite data (coordinates and zoom) are
updated by the main program.
The same sprite data caching that works for dondokod
avoids major glitches, but I'm not sure it's working
right when the big butterfly (time bonus) is on
screen (it flickers on and off every frame).
gunfront 8000 1000/1 8001 1000/1 The toggling bit in the control register selects the
sprite bank used. It normally toggles every frame but
sticks for two frame when lots of action is going on
(see smart bombs in attract mode) and glitches will
appear if it is not respected.
IRQ6 writes the sprite ctrl registers, and also writes
related data to the sprites at 9033e0/90b3e0. The
active one gets 8000/8001 in byte 6 and 1001/1000 in
byte 10, while the other gets 0. Note that the value
in byte 10 is inverted from the active bank, as if it
were a way to tell the sprite hardware "after this, go
to the other bank".
Note also that IRQ6 isn't the only one writing to the
sprite ctrl registers, this is done also in the parts
that actually change the sprite data (I think it's
main program, not interrupt), so it's not clear who's
"in charge". Actually it seems that what IRQ6 writes
is soon overwritten so that what I outlined above
regarding 9033e0/90b3e0 is no longer true, and they
are no longer in sync with the ctrl registers, messing
up smart bombs.
There don't seem to be other glitches even without
sprite data buffering.
growl 8000 0000 8001 0001 IRQ6 just sets a flag. I haven't investigated who
updates the sprite ram.
This game uses sprite banks like gunfront, but unlike
gunfront it doesn't change the ctrl registers. What it
does is change the sprites at 903210/90b210; 8000/8001
is always written in byte 6, while byte 10 receives
the active bank (1000 or 1001). There are also end of
list markers placed before that though, and those seem
to always match what's stored in the ctrl registers
(8000 1000 for the first bank and 8001 1001 for the
second).
There don't seem to be sprite glitches even without
sprite data buffering, but sprites are not in sync with
the background.
mjnquest 8000 0800/8 0000 0000
footchmp 8000 0000 8001 0001 IRQ6 just sets a flag (and writes to an unknown memory
location).
This games uses sprite banks as well, this time it
writes markers at 2033e0/20b3e0, it always writes
1000/1001 to byte 10, while it writes 8000 or 8001 to
byte 6 depending on the active bank. This is the exact
opposite of growl...
hthero
koshien 8000 0000 8001 0001 Another game using banks.The markers are again at
9033e0/90b3e0 but this time byte 6 receives 9000/9001.
Byte 10 is 1000 or 1001 depending on the active bank.
yuyugogo 8000 0800/8 0000 0000
ninjak 8000 0000 8001 0001 uses banks
solfigtr 8000 0000 8001 0001 uses banks
qzquest 8000 0000 0000 0000 Separated sprite data caching like in dondokod is
required to avoid glitches.
pulirula 8000 0000 8001 0001 uses banks
qzchikyu 8000 0000 0000 0000 With this game there are glitches and the sprite data
caching done in dondokod does NOT fix them.
deadconx 8/9000 0000/1 8/9001 0000/1 I guess it's not a surprise that this game uses banks
in yet another different way.
dinorex 8000 0000 8001 0001 uses banks
driftout 8000 0000/8 0000 0000 The first control changes from 8000 to 0000 at the end
of the attract demo and seems to stay that way.
******************************************************************/
void taitof2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_INTERRUPT6:
m_maincpu->set_input_line(6, HOLD_LINE);
break;
default:
assert_always(false, "Unknown id in taitof2_state::device_timer");
}
}
INTERRUPT_GEN_MEMBER(taitof2_state::interrupt)
{
m_int6_timer->adjust(m_maincpu->cycles_to_attotime(500));
device.execute().set_input_line(5, HOLD_LINE);
}
INTERRUPT_GEN_MEMBER(taitof2_state::megab_interrupt)
{
interrupt(device);
m_cchip->ext_interrupt(ASSERT_LINE);
m_cchip_irq_clear->adjust(attotime::zero);
}
TIMER_DEVICE_CALLBACK_MEMBER(taitof2_state::cchip_irq_clear_cb)
{
m_cchip->ext_interrupt(CLEAR_LINE);
}
/****************************************************************
SOUND
****************************************************************/
void taitof2_state::sound_bankswitch_w(u8 data)
{
m_audiobank->set_entry(data & 7);
#ifdef MAME_DEBUG
if ((data & 7) > 2)
logerror("CPU #1 switch to ROM bank %06x: should only happen if Z80 prg rom is 128K!\n",data & 7);
#endif
}
u8 taitof2_state::driveout_sound_command_r()
{
m_audiocpu->set_input_line(0, CLEAR_LINE);
// logerror("sound IRQ OFF (sound command=%02x)\n", m_driveout_sound_latch);
return m_driveout_sound_latch;
}
void taitof2_state::oki_bank_w(u8 data)
{
if (data & 4)
{
m_okibank->set_entry((data & 3));
}
}
void taitof2_state::driveout_sound_command_w(offs_t offset, u8 data)
{
if (offset == 0)
{
m_nibble = data & 1;
}
else
{
if (m_nibble == 0)
{
m_driveout_sound_latch = (data & 0x0f) | (m_driveout_sound_latch & 0xf0);
}
else
{
m_driveout_sound_latch = ((data << 4) & 0xf0) | (m_driveout_sound_latch & 0x0f);
m_audiocpu->set_input_line(0, ASSERT_LINE);
}
}
}
/***********************************************************
MEMORY STRUCTURES
***********************************************************/
void taitof2_state::finalb_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x200007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::word_w)); /* palette */
map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x320001, 0x320001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x320003, 0x320003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x810000, 0x81ffff).nopw(); /* error in game init code ? */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xb00002, 0xb00003).nopw(); /* ?? */
}
void taitof2_state::dondokod_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x320000, 0x320000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x320002, 0x320002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa01fff).rw(m_tc0280grd, FUNC(tc0280grd_device::tc0280grd_word_r), FUNC(tc0280grd_device::tc0280grd_word_w)); /* ROZ tilemap */
map(0xa02000, 0xa0200f).w(m_tc0280grd, FUNC(tc0280grd_device::tc0280grd_ctrl_word_w));
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::megab_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x100000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x100002, 0x100002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x120000, 0x12000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x180000, 0x1807ff).rw(m_cchip, FUNC(taito_cchip_device::mem68_r), FUNC(taito_cchip_device::mem68_w)).umask16(0x00ff);
map(0x180800, 0x180fff).rw(m_cchip, FUNC(taito_cchip_device::asic_r), FUNC(taito_cchip_device::asic68_w)).umask16(0x00ff);
map(0x200000, 0x20ffff).ram();
map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x400000, 0x40001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
map(0x600000, 0x60ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x610000, 0x61ffff).ram(); /* unused? */
map(0x620000, 0x62000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x800000, 0x80ffff).ram().share("spriteram");
}
void taitof2_state::thundfox_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x101fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x200000, 0x20000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x220000, 0x220000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x220002, 0x220002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x300000, 0x30ffff).ram();
map(0x400000, 0x40ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x420000, 0x42000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x500000, 0x50ffff).rw(m_tc0100scn[1], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x520000, 0x52000f).rw(m_tc0100scn[1], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x600000, 0x60ffff).ram().share("spriteram");
map(0x800000, 0x80001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0xff00);
}
void taitof2_state::cameltry_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x300018, 0x30001f).r(FUNC(taitof2_state::cameltry_paddle_r));
map(0x320000, 0x320000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x320002, 0x320002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x813fff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa01fff).rw(m_tc0280grd, FUNC(tc0280grd_device::tc0280grd_word_r), FUNC(tc0280grd_device::tc0280grd_word_w)); /* ROZ tilemap */
map(0xa02000, 0xa0200f).w(m_tc0280grd, FUNC(tc0280grd_device::tc0280grd_ctrl_word_w));
map(0xd00000, 0xd0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::cameltrya_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x300018, 0x30001f).r(FUNC(taitof2_state::cameltry_paddle_r));
map(0x320000, 0x320000).w("ciu", FUNC(pc060ha_device::master_port_w));
map(0x320002, 0x320002).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
map(0x800000, 0x813fff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa01fff).rw(m_tc0280grd, FUNC(tc0280grd_device::tc0280grd_word_r), FUNC(tc0280grd_device::tc0280grd_word_w)); /* ROZ tilemap */
map(0xa02000, 0xa0200f).w(m_tc0280grd, FUNC(tc0280grd_device::tc0280grd_ctrl_word_w));
map(0xd00000, 0xd0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::qtorimon_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x200007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::word_w)); /* palette */
map(0x500000, 0x50000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x600000, 0x600000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x600002, 0x600002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0x910000, 0x9120ff).nopw(); /* error in init code ? */
}
void taitof2_state::liquidk_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
map(0x320001, 0x320001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x320003, 0x320003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::quizhq_map(address_map &map)
{
map(0x000000, 0x0bffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x200007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::word_w)); /* palette */
map(0x500005, 0x500005).w(FUNC(taitof2_state::growl_coin_word_w));
map(0x500000, 0x500001).portr("DSWB");
map(0x500002, 0x500003).portr("IN0");
map(0x580000, 0x580001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* ??? */
map(0x580006, 0x580007).nopw(); /* ??? */
map(0x580000, 0x580001).portr("DSWA");
map(0x580002, 0x580003).portr("IN1");
map(0x580004, 0x580005).portr("IN2");
map(0x600001, 0x600001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x600003, 0x600003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x680000, 0x680001).nopw(); /* ??? */
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x810000, 0x81ffff).nopw(); /* error in init code ? */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
}
void taitof2_state::ssi_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x200000, 0x20ffff).ram();
map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x400000, 0x400000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x400002, 0x400002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
// AM_RANGE(0x500000, 0x500001) AM_WRITENOP /* ?? */
map(0x600000, 0x60ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps (not used) */
map(0x620000, 0x62000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x800000, 0x80ffff).ram().share("spriteram"); /* sprite ram */
}
void taitof2_state::gunfront_map(address_map &map)
{
map(0x000000, 0x0bffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w));
map(0x320000, 0x320000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x320002, 0x320002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
// AM_RANGE(0xa00000, 0xa00001) AM_WRITENOP /* ?? */
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::growl_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300005, 0x300005).w(FUNC(taitof2_state::growl_coin_word_w));
map(0x300000, 0x300001).portr("DSWA");
map(0x300002, 0x300003).portr("DSWB");
map(0x320000, 0x320001).portr("IN0");
map(0x320002, 0x320003).portr("IN1");
map(0x320004, 0x320005).portr("IN2");
map(0x340000, 0x340001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x400000, 0x400000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x400002, 0x400002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x500000, 0x50000f).w(FUNC(taitof2_state::spritebank_w));
map(0x504000, 0x504001).nopw(); /* unknown... various values */
map(0x508000, 0x50800f).portr("IN3");
map(0x50c000, 0x50c00f).portr("IN4");
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::mjnquest_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x110000, 0x11ffff).ram(); /* "sram" */
map(0x120000, 0x12ffff).ram();
map(0x200000, 0x200007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::word_w)); /* palette */
map(0x300000, 0x30000f).r(FUNC(taitof2_state::mjnquest_dsw_r));
map(0x310000, 0x310001).r(FUNC(taitof2_state::mjnquest_input_r));
map(0x320000, 0x320001).w(FUNC(taitof2_state::mjnquest_inputselect_w));
map(0x330000, 0x330001).nopw(); /* watchdog ? */
map(0x350000, 0x350001).nopw(); /* watchdog ? */
map(0x360000, 0x360000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x360002, 0x360002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x380001, 0x380001).w(FUNC(taitof2_state::mjnquest_gfxbank_w)); /* scr gfx bank select */
map(0x400000, 0x40ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x420000, 0x42000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x500000, 0x50ffff).ram().share("spriteram");
}
void taitof2_state::footchmp_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x20ffff).ram().share("spriteram");
map(0x300000, 0x30000f).w(FUNC(taitof2_state::spritebank_w)); /* updated at $a6e, off irq5 */
map(0x400000, 0x40ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
map(0x430000, 0x43002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x500000, 0x50001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* 500002 written like a watchdog?! */
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x700000, 0x70001f).rw("te7750", FUNC(te7750_device::read), FUNC(te7750_device::write)).umask16(0x00ff);
map(0x800000, 0x800001).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w)); /* ??? */
map(0xa00001, 0xa00001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0xa00003, 0xa00003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
}
void taitof2_state::koshien_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x320000, 0x320000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x320002, 0x320002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa20000, 0xa20001).w(FUNC(taitof2_state::koshien_spritebank_w));
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0xff00);
}
void taitof2_state::yuyugogo_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x200000, 0x20000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x400000, 0x400000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x400002, 0x400002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa01fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xb00000, 0xb10fff).ram(); /* deliberate writes to $b10xxx, I think */
map(0xc00000, 0xc01fff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
map(0xd00000, 0xdfffff).rom().region("extra", 0);
}
void taitof2_state::ninjak_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x30001f).rw("te7750", FUNC(te7750_device::read), FUNC(te7750_device::write)).umask16(0xff00);
map(0x380000, 0x380001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* ??? */
map(0x400000, 0x400000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x400002, 0x400002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x600000, 0x60000f).w(FUNC(taitof2_state::spritebank_w));
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* b00002 written like a watchdog?! */
}
void taitof2_state::solfigtr_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x201fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300005, 0x300005).w(FUNC(taitof2_state::growl_coin_word_w)); /* NOT VERIFIED */
map(0x300000, 0x300001).portr("DSWA");
map(0x300002, 0x300003).portr("DSWB");
map(0x320000, 0x320001).portr("IN0");
map(0x320002, 0x320003).portr("IN1");
map(0x320004, 0x320005).portr("IN2");
map(0x340000, 0x340001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* NOT VERIFIED */
map(0x400000, 0x400000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x400002, 0x400002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x500000, 0x50000f).w(FUNC(taitof2_state::spritebank_w));
map(0x504000, 0x504001).nopw(); /* unknown... various values */
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::qzquest_map(address_map &map)
{
map(0x000000, 0x17ffff).rom();
map(0x200000, 0x20000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x300001, 0x300001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x300003, 0x300003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x400000, 0x401fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x500000, 0x50ffff).ram();
map(0x600000, 0x60ffff).ram().share("spriteram");
map(0x700000, 0x70ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x720000, 0x72000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
}
void taitof2_state::pulirula_map(address_map &map)
{
map(0x000000, 0x0bffff).rom();
map(0x200000, 0x200000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x200002, 0x200002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x300000, 0x30ffff).ram();
map(0x400000, 0x401fff).rw(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_word_r), FUNC(tc0280grd_device::tc0430grw_word_w)); /* ROZ tilemap */
map(0x402000, 0x40200f).w(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_ctrl_word_w));
// AM_RANGE(0x500000, 0x500001) AM_WRITENOP /* ??? */
map(0x600000, 0x603fff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0xff00);
map(0xb00000, 0xb0000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
}
void taitof2_state::metalb_map(address_map &map)
{
map(0x000000, 0x0bffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x300000, 0x30ffff).ram().share("spriteram");
// AM_RANGE(0x42000c, 0x42000f) AM_WRITENOP /* zeroed */
map(0x500000, 0x50ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
map(0x530000, 0x53002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x600000, 0x60001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff);
map(0x700000, 0x703fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w));
map(0x900000, 0x900000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x900002, 0x900002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
// AM_RANGE(0xa00000, 0xa00001) AM_WRITENOP /* ??? */
}
void taitof2_state::qzchikyu_map(address_map &map)
{
map(0x000000, 0x17ffff).rom();
map(0x200000, 0x20000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x300001, 0x300001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x300003, 0x300003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x400000, 0x401fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x500000, 0x50ffff).ram();
map(0x600000, 0x60ffff).ram().share("spriteram");
map(0x700000, 0x70ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x720000, 0x72000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
}
void taitof2_state::yesnoj_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x200000, 0x20ffff).ram();
map(0x400000, 0x40ffff).ram().share("spriteram");
map(0x500000, 0x50ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x520000, 0x52000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x700000, 0x70001f).rw("rtc", FUNC(tc8521_device::read), FUNC(tc8521_device::write)).umask16(0x00ff);
map(0x800000, 0x800000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x800002, 0x800002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x900002, 0x900003).nopw(); /* lots of similar writes */
map(0xa00000, 0xa00001).portr("IN0");
map(0xa00002, 0xa00003).portr("IN1");
map(0xa00004, 0xa00005).portr("IN2");
map(0xb00000, 0xb00001).portr("DSWA");
map(0xc00000, 0xc00001).nopw(); /* watchdog ?? */
map(0xd00000, 0xd00001).nopw(); /* lots of similar writes */
}
void taitof2_state::deadconx_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x10ffff).ram();
map(0x200000, 0x20ffff).ram().share("spriteram");
map(0x300000, 0x30000f).w(FUNC(taitof2_state::spritebank_w));
map(0x400000, 0x40ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */
// AM_RANGE(0x42000c, 0x42000f) AM_WRITENOP /* zeroed */
map(0x430000, 0x43002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w));
map(0x500000, 0x50001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* uses 500002 like a watchdog !? */
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x700000, 0x70001f).rw("te7750", FUNC(te7750_device::read), FUNC(te7750_device::write)).umask16(0x00ff);
map(0x800000, 0x800001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); /* ??? */
map(0xa00000, 0xa00000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0xa00002, 0xa00002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
}
void taitof2_state::dinorex_map(address_map &map)
{
map(0x000000, 0x2fffff).rom();
map(0x300000, 0x30000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x400000, 0x400fff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
map(0x500000, 0x501fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x600000, 0x60ffff).ram();
map(0x700000, 0x70001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
map(0x800000, 0x80ffff).ram().share("spriteram");
map(0x900000, 0x90ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x920000, 0x92000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0xa00000, 0xa00000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0xa00002, 0xa00002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0xb00000, 0xb00001).nopw(); /* watchdog? */
}
void taitof2_state::qjinsei_map(address_map &map)
{
map(0x000000, 0x1fffff).rom();
map(0x200000, 0x200000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x200002, 0x200002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x300000, 0x30ffff).ram();
map(0x500000, 0x500001).nopw(); /* watchdog ? */
map(0x600000, 0x603fff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
map(0xb00000, 0xb0000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
}
void taitof2_state::qcrayon_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x100000, 0x10ffff).ram();
// AM_RANGE(0x200000, 0x200001) AM_WRITENOP /* unknown */
map(0x300000, 0x3fffff).rom().region("extra", 0); /* extra data rom */
map(0x500000, 0x500000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x500002, 0x500002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x600000, 0x603fff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80ffff).ram().share("spriteram");
map(0x900000, 0x90ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x920000, 0x92000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0xa00000, 0xa0000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0xb00000, 0xb0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
}
void taitof2_state::qcrayon2_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x200000, 0x20ffff).ram();
map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x400000, 0x40ffff).ram().share("spriteram");
map(0x500000, 0x50ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x520000, 0x52000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x600000, 0x67ffff).rom().region("extra", 0); /* extra data rom */
map(0x700000, 0x70000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0x900000, 0x90001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0x00ff); /* ?? */
map(0xa00000, 0xa00000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0xa00002, 0xa00002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0xb00000, 0xb017ff).w(FUNC(taitof2_state::sprite_extension_w)).share("sprite_ext");
}
void taitof2_state::driftout_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x200000, 0x200000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x200002, 0x200002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
map(0x300000, 0x30ffff).ram();
map(0x400000, 0x401fff).rw(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_word_r), FUNC(tc0280grd_device::tc0430grw_word_w)); /* ROZ tilemap */
map(0x402000, 0x40200f).w(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_ctrl_word_w));
map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0xff00);
map(0xb00000, 0xb0000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0xb00018, 0xb00019).portr("PADDLE1");
map(0xb0001a, 0xb0001b).portr("PADDLE2");
}
/* same as driftout, except for sound address 0x200000 */
void taitof2_state::driveout_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x200000, 0x200003).nopr().w(FUNC(taitof2_state::driveout_sound_command_w)).umask16(0xff00);
map(0x300000, 0x30ffff).ram();
map(0x400000, 0x401fff).rw(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_word_r), FUNC(tc0280grd_device::tc0430grw_word_w)); /* ROZ tilemap */
map(0x402000, 0x40200f).w(m_tc0430grw, FUNC(tc0280grd_device::tc0430grw_ctrl_word_w));
map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x800000, 0x80ffff).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
map(0x820000, 0x82000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
map(0x900000, 0x90ffff).ram().share("spriteram");
map(0xa00000, 0xa0001f).w(m_tc0360pri, FUNC(tc0360pri_device::write)).umask16(0xff00);
map(0xb00000, 0xb0000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_r), FUNC(tc0510nio_device::halfword_w));
map(0xb00018, 0xb00019).portr("PADDLE1");
map(0xb0001a, 0xb0001b).portr("PADDLE2");
}
/***************************************************************************/
void taitof2_state::sound_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x7fff).bankr("audiobank");
map(0xc000, 0xdfff).ram();
map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
map(0xe200, 0xe200).nopr().w("tc0140syt", FUNC(tc0140syt_device::slave_port_w));
map(0xe201, 0xe201).rw("tc0140syt", FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w));
map(0xe400, 0xe403).nopw(); /* pan */
map(0xea00, 0xea00).nopr();
map(0xee00, 0xee00).nopw(); /* ? */
map(0xf000, 0xf000).nopw(); /* ? */
map(0xf200, 0xf200).w(FUNC(taitof2_state::sound_bankswitch_w)); /* ?? */
}
/* Alt version of Cameltry, YM2203 + M6925 sound */
void taitof2_state::cameltrya_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom(); // I can't see a bank control, but there ARE some bytes past 0x8000
map(0x8000, 0x8fff).ram();
map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w));
map(0xa001, 0xa001).rw("ciu", FUNC(pc060ha_device::slave_comm_r), FUNC(pc060ha_device::slave_comm_w));
// AM_RANGE(0xb000, 0xb000) AM_WRITE(unknown_w) // probably controlling sample player?
map(0xb000, 0xb001).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
}
void taitof2_state::driveout_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0x9000, 0x9000).w(FUNC(taitof2_state::oki_bank_w));
map(0x9800, 0x9800).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xa000, 0xa000).r(FUNC(taitof2_state::driveout_sound_command_r));
}
void taitof2_state::driveout_oki_map(address_map &map)
{
map(0x00000, 0x1ffff).bankr("okibank");
map(0x20000, 0x3ffff).rom().region("oki", 0x80000);
}
/***********************************************************
INPUT PORTS, DIPs
***********************************************************/
#define TAITO_F2_SYSTEM_INPUT \
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) \
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) \
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) \
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
/* The other bits vary from one game to another, so they are not included here */
static INPUT_PORTS_START( finalb )
PORT_START("DSWA")
/* Not sure how to handle alternate controls */
PORT_DIPNAME( 0x01, 0x01, "Alternate Controls" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
TAITO_DSWA_BITS_1_TO_3_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT /* controls below are DIP selectable */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) /* 1P sen.sw.? */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) /* 1P ducking? */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) /* 2P sen.sw.? */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) /* 2P ducking? */
INPUT_PORTS_END
static INPUT_PORTS_START( finalbj )
PORT_INCLUDE(finalb)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( finalbu )
PORT_INCLUDE(finalb)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( dondokod )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "10k and 100k" )
PORT_DIPSETTING( 0x08, "10k and 150k" )
PORT_DIPSETTING( 0x04, "10k and 250k" )
PORT_DIPSETTING( 0x00, "10k and 350k" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x00, "4" )
PORT_DIPSETTING( 0x10, "5" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( dondokodu )
PORT_INCLUDE(dondokod)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( dondokodj )
PORT_INCLUDE(dondokod)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( megab )
PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "100k only" )
PORT_DIPSETTING( 0x04, "150k only" )
PORT_DIPSETTING( 0x08, "200k only" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x10, "1" )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x20, "4" )
PORT_DIPNAME( 0x40, 0x40, "Upright Controls" ) PORT_DIPLOCATION("SW2:7") /* ie single or two players at once */
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x40, DEF_STR( Dual ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( megabu )
PORT_INCLUDE(megab)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( megabj )
PORT_INCLUDE(megab)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( thundfox )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x04, 0x04, "Timer" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x80, DEF_STR( Dual ) )
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( thundfoxu )
PORT_INCLUDE(thundfox)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( thundfoxj )
PORT_INCLUDE(thundfox)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( cameltry )
PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SW1)
TAITO_COINAGE_US_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Start remain time" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x00, "35" )
PORT_DIPSETTING( 0x04, "40" )
PORT_DIPSETTING( 0x0c, "50" )
PORT_DIPSETTING( 0x08, "60" )
PORT_DIPNAME( 0x30, 0x30, "Continue play time" ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x00, "+20" )
PORT_DIPSETTING( 0x10, "+25" )
PORT_DIPSETTING( 0x30, "+30" )
PORT_DIPSETTING( 0x20, "+40" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x80, DEF_STR( Single ) )
PORT_DIPSETTING( 0x00, DEF_STR( Dual ) )
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 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
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_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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("PADDLE1") /* Paddle A */
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(1)
PORT_START("PADDLE2") /* Paddle B */
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( cameltryj )
PORT_INCLUDE(cameltry)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( qtorimon )
PORT_START("DSWA")
PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW1:1" )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" )
TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x10, "1" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x00, "4" )
PORT_DIPNAME( 0x40, 0x40, "Show Correct Answer" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x40, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
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_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
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_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( liquidk )
PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "30k and 100k" )
PORT_DIPSETTING( 0x08, "30k and 150k" )
PORT_DIPSETTING( 0x04, "50k and 250k" )
PORT_DIPSETTING( 0x00, "50k and 350k" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x00, "4" )
PORT_DIPSETTING( 0x10, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x80, DEF_STR( Single ) )
PORT_DIPSETTING( 0x00, DEF_STR( Dual ) )
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( liquidku )
PORT_INCLUDE(liquidk)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( mizubaku )
PORT_INCLUDE(liquidk)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( ssi )
PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Shields" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPSETTING( 0x0c, "1")
PORT_DIPSETTING( 0x04, "2")
PORT_DIPSETTING( 0x08, "3")
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x00, "2")
PORT_DIPSETTING( 0x10, "3")
PORT_DIPNAME( 0xa0, 0xa0, "2 Players Mode" ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0xa0, "Simultaneous")
PORT_DIPSETTING( 0x80, "Alternate, Single")
PORT_DIPSETTING( 0x00, "Alternate, Dual")
PORT_DIPSETTING( 0x20, "Not Allowed")
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( majest12u )
PORT_INCLUDE(ssi)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( majest12j )
PORT_INCLUDE(ssi)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( growl )
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" )
PORT_DIPNAME( 0x30, 0x30, "Cabinet Type" ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x30, "2 Players" )
PORT_DIPSETTING( 0x20, "4 Players / 4 Coin Slots" ) // Push Player button A to start
PORT_DIPSETTING( 0x10, "4 Players / 2 cabinets combined" )
PORT_DIPSETTING( 0x00, "4 Players / 2 Coin Slots" )
PORT_DIPNAME( 0x40, 0x40, "Final Boss Continue" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
PORT_START("IN3")
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)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START4 )
PORT_START("IN4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE2 )
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( growlu )
PORT_INCLUDE(growl)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( runark )
PORT_INCLUDE(growl)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( pulirula )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Magic" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
// PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPNAME( 0x80, 0x80, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x80, DEF_STR( Dual ) )
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( pulirulaj )
PORT_INCLUDE(pulirula)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( qzquest )
PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2) //??
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
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_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( qzchikyu )
PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2) //??
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
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_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( footchmp )
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_TILT )
PORT_START("DSWA")
PORT_DIPNAME( 0x01, 0x00, "Game Over Type" ) PORT_DIPLOCATION("SW1:1") // 2p simultaneous play
PORT_DIPSETTING( 0x01, "Both Teams' Games Over" )
PORT_DIPSETTING( 0x00, "Losing Team's Game is Over" )
TAITO_DSWA_BITS_1_TO_3_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x00, "1.5 Minutes" )
PORT_DIPSETTING( 0x0c, " 2 Minutes" )
PORT_DIPSETTING( 0x04, "2.5 Minutes" )
PORT_DIPSETTING( 0x08, " 3 Minutes" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x30, "2 Players" )
PORT_DIPSETTING( 0x20, "4 Players / 4 Coin Slots" ) // Push Player button A to start
PORT_DIPSETTING( 0x10, "4 Players / 2 cabinets combined" )
PORT_DIPSETTING( 0x00, "4 Players / 2 Coin Slots" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Game Version" ) PORT_DIPLOCATION("SW2:8") // Not used for Hat Trick Hero / Euro Champ '92
PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x80, "European" )
PORT_START("IN3")
TAITO_JOY_UDLR_2_BUTTONS_START( 3 )
PORT_START("IN4")
TAITO_JOY_UDLR_2_BUTTONS_START( 4 )
INPUT_PORTS_END
static INPUT_PORTS_START( hthero )
PORT_INCLUDE(footchmp)
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x80, 0x00, "Game Over Type" ) PORT_DIPLOCATION("SW1:1") // 2p simultaneous play
PORT_DIPSETTING( 0x80, "Both Teams' Games Over" )
PORT_DIPSETTING( 0x00, "Losing Team's Game is Over" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:3" )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:6,5")
PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:8,7")
PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_MODIFY("DSWB")
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:2,1")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0xc0, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x80, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("SW2:4,3")
PORT_DIPSETTING( 0x00, "1.5 Minutes" )
PORT_DIPSETTING( 0x30, " 2 Minutes" )
PORT_DIPSETTING( 0x20, "2.5 Minutes" )
PORT_DIPSETTING( 0x10, " 3 Minutes" )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:6,5")
PORT_DIPSETTING( 0x0c, "2 Players" )
PORT_DIPSETTING( 0x04, "4 Players / 4 Coin Slots" ) // Push Player button A to start
PORT_DIPSETTING( 0x08, "4 Players / 2 cabinets combined" )
PORT_DIPSETTING( 0x00, "4 Players / 2 Coin Slots" )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( footchmpbl )
PORT_INCLUDE(footchmp)
PORT_MODIFY("IN1")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // doesn't boot otherwise?
INPUT_PORTS_END
static INPUT_PORTS_START( ninjak )
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
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("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Cabinet Type" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "2 players" )
PORT_DIPSETTING( 0x08, "TROG (4 players / 2 coin slots)" )
PORT_DIPSETTING( 0x04, "MTX2 (4 players / 2 cabinets combined)" )
PORT_DIPSETTING( 0x00, "TMNT (4 players / 4 coin slots)" )
PORT_DIPNAME( 0x30, 0x10, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Game Type" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x00, "1 Player only" )
PORT_DIPSETTING( 0x80, "Multiplayer" )
PORT_START("IN3")
TAITO_JOY_UDLR_2_BUTTONS_START( 3 )
PORT_START("IN4")
TAITO_JOY_UDLR_2_BUTTONS_START( 4 )
INPUT_PORTS_END
static INPUT_PORTS_START( ninjaku )
PORT_INCLUDE(ninjak)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( ninjakj )
PORT_INCLUDE(ninjak)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( driftout )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Control" ) PORT_DIPLOCATION("SW2:3,4") /* correct acc. to service mode */
PORT_DIPSETTING( 0x0c, DEF_STR( Joystick ) )
PORT_DIPSETTING( 0x08, "Paddle" )
PORT_DIPSETTING( 0x04, DEF_STR( Joystick ) )
PORT_DIPSETTING( 0x00, "Steering wheel" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* 2P not used? */
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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("PADDLE1") /* Paddle A */
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("PADDLE2") /* Paddle B */
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( gunfront )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x08, "10k and every 80k" )
PORT_DIPSETTING( 0x0c, "20k and every 80k" )
PORT_DIPSETTING( 0x04, "30k and every 80k" )
PORT_DIPSETTING( 0x00, "60k and every 80k" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x80, DEF_STR( Dual ) )
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( gunfrontj )
PORT_INCLUDE(gunfront)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( metalb )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x04, "80k and every 160k" )
PORT_DIPSETTING( 0x0c, "70k and every 150k" )
PORT_DIPSETTING( 0x00, "100k and every 200k" )
PORT_DIPSETTING( 0x08, "50k and every 120k" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x00, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x20, "4" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x80, DEF_STR( Dual ) )
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( metalbj )
PORT_INCLUDE(metalb)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( deadconx )
PORT_START("IN0")
TAITO_JOY_UDLR_2_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_2_BUTTONS_START( 2 )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_OPTIONAL // input test only
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_OPTIONAL // input test only
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service A") PORT_CODE(KEYCODE_9)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service B") PORT_CODE(KEYCODE_0)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service C") PORT_CODE(KEYCODE_MINUS)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_TILT )
PORT_START("IN3") // all input test only
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) PORT_OPTIONAL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) PORT_OPTIONAL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) PORT_OPTIONAL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) PORT_OPTIONAL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_OPTIONAL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_OPTIONAL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 ) PORT_OPTIONAL
PORT_START("IN4") // all input test only
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) PORT_OPTIONAL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) PORT_OPTIONAL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) PORT_OPTIONAL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) PORT_OPTIONAL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_OPTIONAL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_OPTIONAL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 ) PORT_OPTIONAL
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB") /* DSW B, missing a timer speed maybe? */
PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "NOT USE" */
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW2:2" ) /* Listed as "NOT USE" */
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "NOT USE" */
PORT_DIPNAME( 0x18, 0x18, "Life Meter") PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x10, "8" )
PORT_DIPSETTING( 0x18, "10" )
PORT_DIPSETTING( 0x08, "12" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "NOT USE" */
PORT_DIPNAME( 0xc0, 0xc0, "Number of Enemies 1/2 Player" ) PORT_DIPLOCATION("SW2:7,8")
PORT_DIPSETTING( 0xc0, "30/50" )
PORT_DIPSETTING( 0x80, "40/60" )
PORT_DIPSETTING( 0x40, "25/45" )
PORT_DIPSETTING( 0x00, "50/70" )
INPUT_PORTS_END
static INPUT_PORTS_START( deadconxj ) /* Matches PDF of Dip Sheet but not matching current taito coin macros */
PORT_INCLUDE(deadconx)
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3,4")
PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" ) /* Listed as "NOT USE" */
INPUT_PORTS_END
static INPUT_PORTS_START( dinorex )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Damage" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x08, "Small" )
PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x04, "Big" )
PORT_DIPSETTING( 0x00, "Biggest" )
PORT_DIPNAME( 0x10, 0x10, "Timer Speed" ) PORT_DIPLOCATION("SW2:5") // Appears to make little difference
PORT_DIPSETTING( 0x10, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_DIPNAME( 0x20, 0x20, "Match Type" ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x20, "Best of 3" )
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPNAME( 0x80, 0x80, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
PORT_DIPSETTING( 0x80, DEF_STR( Dual ) )
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( dinorexj )
PORT_INCLUDE(dinorex)
PORT_MODIFY("DSWA")
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( dinorexu )
PORT_INCLUDE(dinorex)
PORT_MODIFY("DSWA")
TAITO_COINAGE_US_LOC(SW1)
INPUT_PORTS_END
static INPUT_PORTS_START( solfigtr )
PORT_START("IN0")
TAITO_JOY_UDLR_3_BUTTONS_START( 1 )
PORT_START("IN1")
TAITO_JOY_UDLR_3_BUTTONS_START( 2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_WORLD_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
INPUT_PORTS_END
static INPUT_PORTS_START( koshien )
PORT_START("DSWA") /* DSW A, one lets you control fielders ? */
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
TAITO_DSWA_BITS_1_TO_3_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x04, 0x04, "Timer" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x80, DEF_STR( Single ) )
PORT_DIPSETTING( 0x00, DEF_STR( Dual ) )
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
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_START2 )
PORT_START("IN1")
TAITO_F2_SYSTEM_INPUT
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("IN2")
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_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
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)
INPUT_PORTS_END
static INPUT_PORTS_START( quizhq )
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Time" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "5 seconds" )
PORT_DIPSETTING( 0x08, "10 seconds" )
PORT_DIPSETTING( 0x04, "15 seconds" )
PORT_DIPSETTING( 0x00, "20 seconds" )
PORT_DIPNAME( 0x30, 0x30, "Stock" ) PORT_DIPLOCATION("SW2:5,6") /* AKA "Lives" */
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x30, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Upright Controls" ) PORT_DIPLOCATION("SW2:8") /* ie single or two players at once */
PORT_DIPSETTING( 0x80, DEF_STR( Single ) )
PORT_DIPSETTING( 0x00, DEF_STR( Dual ) )
INPUT_PORTS_END
static INPUT_PORTS_START( qjinsei )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( qcrayon )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, "Default Time" ) PORT_DIPLOCATION("SW2:3,4") /* Can be affected ingame by some items and/or player location */
PORT_DIPSETTING( 0x00, "6 seconds" )
PORT_DIPSETTING( 0x04, "7 seconds" )
PORT_DIPSETTING( 0x08, "8 seconds" )
PORT_DIPSETTING( 0x0c, "10 seconds" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( qcrayon2 )
PORT_START("DSWA")
PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW1:1" )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW1:3" )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* These 2 Dip Switches were designed to change the default timer */
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* but the 10 seconds setting is duplicated 4 times in the tables */
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPNAME( 0x80, 0x80, "Game Control" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Joystick ) )
PORT_DIPSETTING( 0x00, "4 Buttons" )
PORT_START("IN0")
/* Joystick Control */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
/* 4 Buttons Control */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_START("IN1")
/* Joystick Control */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
/* 4 Buttons Control */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( yuyugogo )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
PORT_START("IN0")
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)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN2")
TAITO_F2_SYSTEM_INPUT
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 )
INPUT_PORTS_END
static INPUT_PORTS_START( mjnquest )
PORT_START("IN0")
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("IN1")
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( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN2")
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( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN3")
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 )
PORT_START("IN4")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) // ?
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN6")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSWA")
TAITO_MACHINE_NO_COCKTAIL_LOC(SW1)
TAITO_COINAGE_JAPAN_NEW_LOC(SW1)
PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( yesnoj )
/* 0xb00000 -> 0x20c0e0.b ($40e0,A5) */
PORT_START("DSWA")
PORT_DIPNAME( 0x01, 0x00, "Print Results" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Printer" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, "2 Players Game" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x08, "1 Credit" )
PORT_DIPSETTING( 0x00, "2 Credits" )
TAITO_COINAGE_US_COIN_START_LOC(SW1)
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW1:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" )
PORT_START("DSWB") /* does it physically exist ? */
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME( "P1 Yes" )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME( "P1 No" )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME( "P2 Yes" )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME( "P2 No" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_SERVICE_NO_TOGGLE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) /* printer : paper time-out ? */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN1")
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_HIGH, IPT_CUSTOM ) /* printer : unknown */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* printer : paper */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) /* printer : unknown */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) /* not mapped in "test mode" */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) /* not mapped in "test mode" */
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 )
INPUT_PORTS_END
/***********************************************************
GFX DECODING
***********************************************************/
static const gfx_layout layout_6bpp_hi =
{
16,16,
RGN_FRAC(1,1),
2,
{ STEP2(0,1) },
{ STEP4(3*2,-2), STEP4(7*2,-2), STEP4(11*2,-2), STEP4(15*2,-2) },
{ STEP16(0,16*2) },
16*16*2
};
static GFXDECODE_START( gfx_taitof2 )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */
GFXDECODE_END
static GFXDECODE_START( gfx_finalb )
GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_lsb, 0, 256 ) // low 4bpp of 6bpp sprites
GFXDECODE_ENTRY( "sprites_hi", 0, layout_6bpp_hi, 0, 256 ) // hi 2bpp of 6bpp sprites
GFXDECODE_END
static const gfx_layout footchmpbl_tilelayout =
{
16,16, /* 16*16 sprites */
RGN_FRAC(1,4),
4, /* 4 bits per pixel */
{ RGN_FRAC(0,4), RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) },
{ STEP16(0,1) },
{ STEP16(0,16) },
16*16 /* every sprite takes 128 consecutive bytes */
};
static GFXDECODE_START( gfx_footchmpbl )
GFXDECODE_ENTRY( "sprites", 0, footchmpbl_tilelayout, 0, 256 ) /* sprites */
GFXDECODE_END
void taitof2_state::cameltrya_porta_w(u8 data)
{
// Implement //
}
/***********************************************************
MACHINE DRIVERS
***********************************************************/
void taitof2_state::machine_start()
{
if (m_audiobank)
{
const int banks = memregion("audiocpu")->bytes() / 0x4000;
int i = 0;
while (i < 8)
{
m_audiobank->configure_entry(i, memregion("audiocpu")->base() + (0x4000 * (i % banks))); // TODO : mirrored?
i++;
}
}
m_int6_timer = timer_alloc(TIMER_INTERRUPT6);
}
void taitof2_state::taito_f2(machine_config &config)
{
/* basic machine hardware */
M68000(config, m_maincpu, 24000000/2); /* 12 MHz */
m_maincpu->set_vblank_int("screen", FUNC(taitof2_state::interrupt));
Z80(config, m_audiocpu, 24000000/6); /* 4 MHz */
m_audiocpu->set_addrmap(AS_PROGRAM, &taitof2_state::sound_map);
WATCHDOG_TIMER(config, "watchdog");
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); /* frames per second, vblank duration */
m_screen->set_size(40*8, 32*8);
m_screen->set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
m_screen->set_screen_update(FUNC(taitof2_state::screen_update));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_no_buffer));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_taitof2);
PALETTE(config, m_palette).set_format(palette_device::RGBx_444, 4096);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
ym2610_device &ymsnd(YM2610(config, "ymsnd", 24000000/3)); /* Was 16000000/2, but only a 24Mhz OSC */
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.add_route(0, "lspeaker", 0.25);
ymsnd.add_route(0, "rspeaker", 0.25);
ymsnd.add_route(1, "lspeaker", 1.0);
ymsnd.add_route(2, "rspeaker", 1.0);
tc0140syt_device &tc0140syt(TC0140SYT(config, "tc0140syt", 0));
tc0140syt.set_master_tag(m_maincpu);
tc0140syt.set_slave_tag(m_audiocpu);
}
void taitof2_state::taito_f2_tc0220ioc(machine_config &config)
{
taito_f2(config);
/* basic machine hardware */
config.device_remove("watchdog");
TC0220IOC(config, m_tc0220ioc, 0);
m_tc0220ioc->read_0_callback().set_ioport("DSWA");
m_tc0220ioc->read_1_callback().set_ioport("DSWB");
m_tc0220ioc->read_2_callback().set_ioport("IN0");
m_tc0220ioc->read_3_callback().set_ioport("IN1");
m_tc0220ioc->write_4_callback().set(FUNC(taitof2_state::coin_nibble_w));
m_tc0220ioc->read_7_callback().set_ioport("IN2");
}
void taitof2_state::taito_f2_tc0510nio(machine_config &config)
{
taito_f2(config);
/* basic machine hardware */
config.device_remove("watchdog");
TC0510NIO(config, m_tc0510nio, 0);
m_tc0510nio->read_0_callback().set_ioport("DSWA");
m_tc0510nio->read_1_callback().set_ioport("DSWB");
m_tc0510nio->read_2_callback().set_ioport("IN0");
m_tc0510nio->read_3_callback().set_ioport("IN1");
m_tc0510nio->write_4_callback().set(FUNC(taitof2_state::coin_nibble_w));
m_tc0510nio->read_7_callback().set_ioport("IN2");
m_palette->set_format(palette_device::xRGB_555, 4096);
}
void taitof2_state::taito_f2_te7750(machine_config &config)
{
taito_f2(config);
te7750_device &te7750(TE7750(config, "te7750"));
te7750.in_port1_cb().set_ioport("DSWA");
te7750.in_port2_cb().set_ioport("DSWB");
te7750.in_port3_cb().set_ioport("IN2");
te7750.out_port4_cb().set(FUNC(taitof2_state::_4p_coin_word_w));
te7750.in_port6_cb().set_ioport("IN0");
te7750.in_port7_cb().set_ioport("IN1");
te7750.in_port8_cb().set_ioport("IN3");
te7750.in_port9_cb().set_ioport("IN4");
}
void taitof2_state::taito_f2_tc0110pcr(machine_config &config)
{
TC0110PCR(config, m_tc0110pcr, 0);
m_gfxdecode->set_palette(m_tc0110pcr);
m_screen->set_palette(m_tc0110pcr);
}
void taitof2_state::finalb(machine_config &config)
{
taito_f2_tc0220ioc(config);
taito_f2_tc0110pcr(config);
config.device_remove("palette");
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::finalb_map);
/* video hardware */
m_gfxdecode->set_info(gfx_finalb);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,finalb)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(1, 0);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
}
void taitof2_state::dondokod(machine_config &config)
{
taito_f2_tc0220ioc(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::dondokod_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,dondokod)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0280GRD(config, m_tc0280grd, 0);
m_tc0280grd->set_color_base(0);
m_tc0280grd->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::megab(machine_config &config)
{
taito_f2_tc0220ioc(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::megab_map);
m_maincpu->set_vblank_int("screen", FUNC(taitof2_state::megab_interrupt));
TAITO_CCHIP(config, m_cchip, 24_MHz_XTAL/2); // 12MHz
// the ports don't appear to hook up to anything
TIMER(config, "cchip_irq_clear").configure_generic(FUNC(taitof2_state::cchip_irq_clear_cb));
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,megab)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::thundfox(machine_config &config)
{
taito_f2_tc0220ioc(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::thundfox_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,thundfox)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_thundfox));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed_thundfox));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_offsets_flip(5, 0);
m_tc0100scn[0]->set_offsets_fliptx(4, 1);
m_tc0100scn[0]->set_palette(m_palette);
TC0100SCN(config, m_tc0100scn[1], 0);
m_tc0100scn[1]->set_offsets(3, 0);
m_tc0100scn[1]->set_offsets_flip(5, 0);
m_tc0100scn[1]->set_offsets_fliptx(4, 1);
m_tc0100scn[1]->set_multiscr_xoffs(tc0100scn_device::SINGLE_VDU);
m_tc0100scn[1]->set_multiscr_hack(1);
m_tc0100scn[1]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::cameltry(machine_config &config)
{
taito_f2_tc0220ioc(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::cameltry_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,dondokod)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0280GRD(config, m_tc0280grd, 0);
m_tc0280grd->set_color_base(0);
m_tc0280grd->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::qtorimon(machine_config &config)
{
taito_f2_tc0220ioc(config);
taito_f2_tc0110pcr(config);
config.device_remove("palette");
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::qtorimon_map);
/* video hardware */
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
}
void taitof2_state::liquidk(machine_config &config)
{
taito_f2_tc0220ioc(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::liquidk_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,megab)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::quizhq(machine_config &config)
{
taito_f2(config);
taito_f2_tc0110pcr(config);
config.device_remove("palette");
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::quizhq_map);
/* video hardware */
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
}
void taitof2_state::ssi(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::ssi_map);
m_palette->set_format(palette_device::RGBx_444, 4096);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,ssi)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_ssi));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed_thundfox));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
}
void taitof2_state::gunfront(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::gunfront_map);
m_palette->set_format(palette_device::RGBx_444, 4096);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,gunfront)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::growl(machine_config &config)
{
taito_f2(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::growl_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,growl)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::mjnquest(machine_config &config)
{
taito_f2(config);
taito_f2_tc0110pcr(config);
config.device_remove("palette");
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::mjnquest_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,mjnquest)
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_palette(m_tc0110pcr);
m_tc0100scn[0]->set_tile_callback(FUNC(taitof2_state::mjnquest_tmap_cb), this);
}
void taitof2_state::footchmp(machine_config &config)
{
taito_f2_te7750(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::footchmp_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,footchmp)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_full_buffer_delayed));
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
m_tc0480scp->set_offsets(0x1d + 3, 0x08);
m_tc0480scp->set_offsets_tx(-1, 0);
m_tc0480scp->set_offsets_flip(-1, 0);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::footchmpbl(machine_config &config)
{
footchmp(config);
/* video hardware */
m_tc0480scp->set_gfxlayout(TC0480SCP_LAYOUT_BOOTLEG);
m_gfxdecode->set_info(gfx_footchmpbl);
}
void taitof2_state::hthero(machine_config &config)
{
taito_f2_te7750(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::footchmp_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,hthero)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_full_buffer_delayed));
TC0360PRI(config, m_tc0360pri, 0);
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
m_tc0480scp->set_offsets(0x33 + 3, -0x04);
m_tc0480scp->set_offsets_tx(-1, 0);
m_tc0480scp->set_offsets_flip(-1, 0);
}
void taitof2_state::koshien(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::koshien_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,koshien)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(1, 0);
m_tc0100scn[0]->set_offsets_flip(2, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::yuyugogo(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::yuyugogo_map);
m_palette->set_format(palette_device::RGBx_444, 4096);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,yuyugogo)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_yesnoj));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
}
void taitof2_state::ninjak(machine_config &config)
{
taito_f2(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::ninjak_map);
te7750_device &te7750(TE7750(config, "te7750"));
te7750.in_port1_cb().set_ioport("DSWA");
te7750.in_port2_cb().set_ioport("DSWB");
te7750.in_port3_cb().set_ioport("IN0");
te7750.in_port4_cb().set_ioport("IN1");
te7750.in_port5_cb().set_ioport("IN3");
te7750.in_port6_cb().set_ioport("IN4");
te7750.in_port7_cb().set_ioport("IN2");
te7750.out_port8_cb().set(FUNC(taitof2_state::_4p_coin_word_w));
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,ninjak)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(1, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::solfigtr(machine_config &config)
{
taito_f2(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::solfigtr_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,solfigtr)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_offsets_flip(6, 0);
m_tc0100scn[0]->set_offsets_fliptx(6, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::qzquest(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::qzquest_map);
/* video hardware */
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_palette(m_palette);
}
void taitof2_state::pulirula(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::pulirula_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,pulirula)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri_roz));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC0430GRW(config, m_tc0430grw, 0);
m_tc0430grw->set_color_base(0);
m_tc0430grw->set_palette(m_palette);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::metalb(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::metalb_map);
/* video hardware */
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 8192);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,metalb)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_metalb));
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
m_tc0480scp->set_offsets(0x32 + 3, -0x04);
m_tc0480scp->set_offsets_tx(1, 0);
m_tc0480scp->set_offsets_flip(-1, 0);
m_tc0480scp->set_col_base(4096);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::qzchikyu(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::qzchikyu_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,qzchikyu)
m_screen->screen_vblank().set(FUNC(taitof2_state::screen_vblank_partial_buffer_delayed_qzchikyu));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_offsets(0, 0);
m_tc0100scn[0]->set_offsets_flip(-4, 0);
m_tc0100scn[0]->set_offsets_fliptx(-11, 0);
m_tc0100scn[0]->set_palette(m_palette);
}
void taitof2_state::yesnoj(machine_config &config)
{
taito_f2(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::yesnoj_map);
/* video hardware */
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,yesnoj)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_yesnoj));
TC0100SCN(config, m_tc0100scn[0], 0);
m_tc0100scn[0]->set_gfxlayout(TC0100SCN_LAYOUT_1BPP);
m_tc0100scn[0]->set_offsets(3, 0);
m_tc0100scn[0]->set_palette(m_palette);
TC8521(config, "rtc", XTAL(32'768));
}
void taitof2_state::deadconx(machine_config &config)
{
taito_f2_te7750(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::deadconx_map);
/* video hardware */
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);
MCFG_VIDEO_START_OVERRIDE(taitof2_state,deadconx)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
m_tc0480scp->set_offsets(0x1e + 3, 0x08);
m_tc0480scp->set_offsets_tx(-1, 0);
m_tc0480scp->set_offsets_flip(-1, 0);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::deadconxj(machine_config &config)
{
taito_f2_te7750(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::deadconx_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,deadconxj)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_deadconx));
TC0480SCP(config, m_tc0480scp, 0);
m_tc0480scp->set_palette(m_palette);
m_tc0480scp->set_offsets(0x34 + 3, -0x05);
m_tc0480scp->set_offsets_tx(-1, 0);
m_tc0480scp->set_offsets_flip(-1, 0);
TC0360PRI(config, m_tc0360pri, 0);
}
void taitof2_state::dinorex(machine_config &config)
{
taito_f2_tc0510nio(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &taitof2_state::dinorex_map);
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(taitof2_state,dinorex)
m_screen->set_screen_update(FUNC(taitof2_state::screen_update_pri));
m_palette->set_format(palette_device::RRRRGGGGBBBBRGBx, 4096);