[wrap]
/*****************************************************************************
ToaPlan game hardware from 1991 - 1994
Raizing/8ing game hardware from 1993 onwards
-------------------------------------------------
Driver by: Quench and Yochizo
Raizing games and Truxton 2 are heavily dependent on the Raine source -
many thanks to Richard Bush and the Raine team. [Yochizo]
Supported games:
Name Board No Maker Game name
----------------------------------------------------------------------------
tekipaki TP-020 Toaplan Teki Paki
ghox TP-021 Toaplan Ghox (Spinner with single up/down axis control)
ghoxj TP-021 Toaplan Ghox (8-Way Joystick controls)
dogyuun TP-022 Toaplan Dogyuun
kbash TP-023 Toaplan Knuckle Bash
kbash2 bootleg Toaplan Knuckle Bash 2
truxton2 TP-024 Toaplan Truxton 2 / Tatsujin Oh
pipibibs TP-025 Toaplan Pipi & Bibis
whoopee TP-025 Toaplan Whoopee
pipibibi bootleg Toaplan Pipi & Bibis
fixeight TP-026 Toaplan FixEight
fixeighb bootleg Toaplan FixEight
grindstm TP-027 Toaplan Grind Stormer (1992)
grindsta TP-027 Toaplan Grind Stormer (1992) (older)
vfive TP-027 Toaplan V-V (V-Five) (1993 - Japan only)
batsugun TP-030 Toaplan Batsugun
batugnsp TP-030 Toaplan Batsugun (Special Version)
snowbro2 ?????? Toaplan Snow Bros. 2 - With New Elves
sstriker RA-MA7893-01 Raizing Sorcer Striker
mahoudai RA-MA7893-01 Raizing Mahou Daisakusen
kingdmgp RA-MA9402-03 Raizing/8ing Kingdom Grandprix
shippumd RA-MA9402-03 Raizing/8ing Shippu Mahou Daisakusen
bgaregga RA9503 Raizing/8ing Battle Garegga (World - Sat Feb 3 1996)
bgareghk RA9503 Raizing/8ing Battle Garegga (Hong Kong (and Austria?) - Sat Feb 3 1996)
bgaregnv RA9503 Raizing/8ing Battle Garegga - New Version (Hong Kong (and Austria?) - Sat Mar 2 1996)
bgaregt2 RA9503 Raizing/8ing Battle Garegga - Type 2 (World - Sat Mar 2 1996)
bgaregcn RA9503 Raizing/8ing Battle Garegga - Type 2 (China (and Denmark?) - Tue Apr 2 1996)
batrider RA9704 Raizing/8ing Armed Police Batrider - B Version (Japan - Fri Feb 13 1998)
batridra RA9704 Raizing/8ing Armed Police Batrider (Japan - Mon Dec 22 1997)
batridrk RA9704 Raizing/8ing Armed Police Batrider (Korea - Fri Feb 13 1998)
bbakraid ET68-V99 8ing Battle Bakraid (Japan - Wed Apr 7th, 1999)
bbakradu ET68-V99 8ing Battle Bakraid - Unlimited Version (Japan - Tue Jun 8th, 1999)
SET NOTES:
sstriker - The region jumper is read with this set but even when set to Japan you get all english
text etc which seems a little odd. However this has been verified correct on two boards.
kingdmgp - might be a bootleg / hack, some of the tiles needed for the credits screen have been
stripped out, doesn't seem very professional, since its rare and should probably only
have a different graphics rom its nearly impossible for us to verify, a lot of boards
being sold as 'Kingdom Grand Prix' are infact conversions using Neill Corlett's hack
** The above two look like genuine Korean release boards, Raizing probably just missed a few things
bgaregga - the clones have fewer types of enemy bullets (not fewer bullets, just fewer types!)
and Stage Edit is disabled - the dipswitch is still listed in service mode but it
doesn't do anything. In addition to these changes, bgaregt2 has no third button!
Instead of being able to change the formation of your options with a button press,
each of the selectable ships has a different, fixed option formation.
batrider - original release was marketed as a two button game, but actually needed a third button
to fully use some of the ships' weaponry! This error was rectified in the B Version
(which is fully playable with either two or three buttons)
bbakraid - the Unlimited Version can display more score digits (as players managed to counter stop
the original within days of its release!) and adds a "team" mode ala Batrider where you
select a different ship for each of your three lives
****************************************************************************
* Battle Garegga and Armed Police Batrider have secret characters. *
* Try to input the following commands to use them. *
* ======================================================================== *
* Battle Garegga *
* After inserting a coin (pushing a credit button), input *
* UP UP DOWN DOWN LEFT RIGHT LEFT RIGHT A B C START *
* then you can use Mahou Daisakusen characters. *
* *
* ------------------------------------------------------------------------ *
* Armed Police Batrider *
* After inserting a coin (pushing a credit button), input *
* UP UP DOWN DOWN LEFT RIGHT LEFT RIGHT A B START *
* then you can use Mahou Daisakusen and Battle Garegga characters. *
* *
****************************************************************************
############################################################################
# Battle Bakraid has unlocking codes to gain access to extra players #
# and game features. #
# Special thanks go to the 'R8ZING Shooter Tribute' page for finding #
# and publishing this info. #
# #
# ======================================================================== #
# PLAYER SELECT: PHASE 2 #
# Result: 3 more fighter planes available: #
# Code: UP UP DOWN DOWN LEFT RIGHT LEFT RIGHT A B Start #
# Conditions: #
# 1. Start from the title screen #
# 2. Insert Coin #
# 3. Watch the 20 sec. counter and enter each part of the code right #
# between the counting. #
# Example: 12,up,11,up,10,down,9,down,8,left,7,right,6.left,5,r.. #
# After entering the [B] button a chime should sound. Phase 2 unlocked! #
# #
# ------------------------------------------------------------------------ #
# PLAYER SELECT: PHASE 3 #
# Result: 2 more fighter planes available: #
# Code: UP UP DOWN DOWN LEFT RIGHT LEFT RIGHT B A Start #
# Conditions: #
# 1. Start from the title screen #
# 2. Insert Coin #
# 3. Watch the 20 sec. counter and enter each part of the code right #
# between the counting. #
# Important: The entering of this code has to be finished before the #
# counter passes 10 ! To do so, you will have to start after coin #
# insertion, right before it starts to count: #
# Example: up,19,up,18,down,17,down,16,left,15,right,14.left,.. #
# After entering the [A] button a chime should sound. Phase 3 unlocked! #
# #
# ------------------------------------------------------------------------ #
# TEAM EDIT: ENABLE (Unlimited Version only) #
# Result: Unlocks the 'team edit' feature to select a team of different #
# ships. See selection secrets on how to enter the team edit mode.#
# Code: UP DOWN UP DOWN LEFT RIGHT LEFT RIGHT A B Start #
# Conditions: #
# 1. Start from the title screen #
# 2. Insert Coin #
# 3. Watch the 20 sec. counter and enter each part of the code right #
# between the counting. #
# Important: This code hast to be entered so that the counter is at 0 when #
# you press the final button [B]. To do so, start after second 9: #
# Example: 9,up,8,down,7,up,6,down,5,left,4,right,3,left,2,right,1,A,0,B #
# After entering the [B] button a chime should sound. Team edit unlocked! #
# #
# ------------------------------------------------------------------------ #
# SPECIAL COURSE: ENABLE #
# Result: Unlocks the boss mode, a game mode where you fight the bosses #
# only. #
# Code: UP DOWN UP DOWN LEFT RIGHT LEFT RIGHT B A Start #
# Conditions: #
# 1. Start from the title screen #
# 2. Hold [C] button #
# 3. Insert Coin #
# 4. Watch the 20 sec. counter and enter each part of the code right #
# between the counting. #
# 5. Release [C] button #
# After entering the [A] button a chime should sound. Special course #
# unlocked! #
############################################################################
*************** Hardware Info ***************
CPU:
MC68000P10
TMP68HC000N-16
Sound CPU/MCU:
HD647180X0FS6 (Hitachi Z180 Compatible CPU with internal 16k ROM)
Z84C0006PEC (Z80)
NEC V25+
Sound Chips:
YM3812
YM2151
YM2151 + YM3014
YM2151 + M6295
YM2151 + M6295 + M6295
YMZ280B-F + YAC516-E (Digital to Analog Converter)
Graphics Custom 208pin QFP:
GP9001 L7A0498 TOA PLAN
Found on....
Fixeight
Grind Stormer
Truxton II
Ghox
Armed Police Batrider
Battle Garegga
Mahou Daisakusen
Battle Bakraid
*********************************************************************
Game status:
Teki Paki Working, but no sound. Missing sound MCU dump. Chip is protected. It's a QFP80 Hitachi HD647180.
Ghox Working, but no sound. Missing sound MCU dump. It's a QFP80 Hitachi HD647180.
Dogyuun Working, but no sound. MCU type is likely a NEC V25+. Chip is a PLCC94 stamped 'TS-002-MACH'.
Knuckle Bash Working, but sound FX only (missing music). MCU type is a NEC V25+. Chip is a PLCC94 stamped 'TS-004-DASH'.
Some PCBs use another version stamped 'NITRO' which is the same chip type.
Truxton 2 Working.
Pipi & Bibis Working.
Whoopee Working. Missing sound MCU dump. It's a Hitachi HD647180. Using bootleg sound CPU dump for now.
Pipi & Bibis (Ryouta Kikaku) Working.
FixEight Not working properly. Missing background GFX, and sound FX only (missing music). Both controlled by PLCC94 NEC V25+ MCU stamped 'TS-001-TURBO'
FixEight bootleg Working. One unknown ROM (same as pipibibi one). Region hardcoded to Korea (@ $4d8)
Grind Stormer Working, but no sound. MCU type is a NEC V25+. Chip is a PLCC94 stamped 'TS-007-SPY'.
VFive Working, but no sound. MCU type is a NEC V25+. Chip is a PLCC94 stamped 'TS-007-SPY'.
Batsugun Working, but sound FX only (missing music) and wrong GFX priorities. MCU type is a NEC V25+. Chip is a PLCC94 stamped 'TS-007-SPY'.
Batsugun Sp' Working, but sound FX only (missing music) and wrong GFX priorities. MCU type is a NEC V25+. Chip is a PLCC94 stamped 'TS-007-SPY'.
Snow Bros. 2 Working.
Mahou Daisakusen Working.
Shippu Mahou Daisakusen Working.
Battle Garegga Working.
Armed Police Batrider Working.
Battle Bakraid Working.
Notes:
See Input Port definition header below, for instructions
on how to enter pause/slow motion modes.
Code at $20A26 forces territory to Japan in V-Five. Some stuff
NOP'd at reset vector, and NEC V25+ CPU post test is skipped (bootleg ?)
To Do / Unknowns:
- Whoopee/Teki Paki sometimes tests bit 5 of the territory port
just after testing for vblank. Why ?
- Whoppee is currently using the sound CPU ROM (Z80) from a differnt
(pirate ?) version of Pipi and Bibis (Ryouta Kikaku copyright).
It really has a HD647180 CPU, and its internal ROM needs to be dumped.
- Fix top character text layer (implement the line position table).
- Priority problem on 2nd player side of selection screen in FixEight (both original and bootleg)
- Fixeight bootleg text in sound check mode does not display properly
with the CPU set to 10MHz (ok at 16MHz). Possible error in video_count_r routine.
- Need to sort out the video status register.
- Find out how exactly how sound CPU communication really works in bgaregga/batrider/bbakraid
current emulation seems to work (plays all sounds), but there are still some unknown reads/writes
*****************************************************************************/
#include "driver.h"
#include "deprecat.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/eeprom.h"
#include "machine/nmk112.h"
#include "sound/2151intf.h"
#include "sound/3812intf.h"
#include "sound/okim6295.h"
#include "sound/ymz280b.h"
#include "includes/toaplan2.h"
/**************** Machine stuff ******************/
#define USE_HD64x180 0 /* Define if CPU support is available */
#define USE_V25 0
#define CPU_2_NONE 0x00
#define CPU_2_Z80 0x5a
#define CPU_2_HD647180 0xa5
#define CPU_2_V25 0xff
/************ Machine RAM related values ************/
static UINT8 *toaplan2_shared_ram;
static UINT8 *raizing_shared_ram; /* Shared ram used in Shippumd and Mahoudai */
static UINT16 *toaplan2_shared_ram16; /* Really 8bit RAM connected to Z180 */
static UINT16 *V25_shared_ram; /* Really 8bit RAM connected to Z180 */
static UINT16 *fixeight_sec_cpu_mem;
/********** Status related values **********/
int toaplan2_sub_cpu = 0;
static UINT16 mcu_data = 0;
static UINT16 video_status;
static INT8 old_p1_paddle_h; /* For Ghox */
static INT8 old_p2_paddle_h;
static INT8 current_bank; /* Z80 bank used in Battle Garegga and Batrider */
static int raizing_sndirq_line; /* IRQ4 for batrider, IRQ2 for bbakraid */
static UINT16 raizing_Z80_busreq;
static int bbakraid_unlimited_ver;
static MACHINE_RESET(batsugun);
#if USE_V25
static READ16_HANDLER( batsugun_share_r );
static READ16_HANDLER( batsugun_share2_r );
static WRITE16_HANDLER( batsugun_share_w );
static WRITE16_HANDLER( batsugun_share2_w );
#endif
/***************************************************************************
Initialisation handlers
***************************************************************************/
static void toaplan2_reset(const device_config *device)
{
if (device->machine->cpu[1] != NULL)
cpu_set_input_line(device->machine->cpu[1], INPUT_LINE_RESET, PULSE_LINE);
}
static MACHINE_RESET( toaplan2 )
{
mcu_data = 0x00;
/*
All games execute a RESET instruction on init, presumably to reset the sound CPU.
This is important for games with common RAM; the RAM test will fail
when leaving service mode if the sound CPU is not reset.
*/
cpu_set_info_fct(machine->cpu[0], CPUINFO_PTR_M68K_RESET_CALLBACK, (genf *)toaplan2_reset);
}
static MACHINE_RESET( ghox )
{
MACHINE_RESET_CALL(toaplan2);
old_p1_paddle_h = 0;
old_p2_paddle_h = 0;
}
static MACHINE_RESET( dogyuun )
{
MACHINE_RESET_CALL(batsugun);
mcu_data = 0xffaa;
}
static MACHINE_RESET( vfive )
{
MACHINE_RESET_CALL(batsugun);
mcu_data = 0xffaa;
}
static MACHINE_RESET( bgaregga )
{
UINT8 *Z80 = (UINT8 *)memory_region(machine, "audio");
// Set Z80 bank switch - default bank is 2
current_bank = 4;
memory_configure_bank(machine, 1, 0, 16, Z80, 0x4000);
memory_set_bank(machine, 1, 4);
if (memory_region(machine, "oki1") != NULL)
NMK112_init(0, "oki1", "oki2");
else
NMK112_init(0, "oki", "oki");
MACHINE_RESET_CALL(toaplan2);
}
static void register_state_save(void)
{
state_save_register_global(mcu_data);
state_save_register_global(video_status);
state_save_register_global(old_p1_paddle_h);
state_save_register_global(old_p2_paddle_h);
state_save_register_global(current_bank);
state_save_register_global(raizing_Z80_busreq);
}
static DRIVER_INIT( T2_Z80 ) /* init_t2_Z80(); */
{
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( T2_Z180 )
{
toaplan2_sub_cpu = CPU_2_HD647180;
register_state_save();
}
static DRIVER_INIT( T2_V25 )
{
toaplan2_sub_cpu = CPU_2_V25;
register_state_save();
}
static DRIVER_INIT( T2_noZ80 )
{
toaplan2_sub_cpu = CPU_2_NONE;
register_state_save();
}
static DRIVER_INIT( fixeight )
{
#if USE_V25
#else
memory_install_readwrite16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x28f002, 0x28fbff, 0, 0, SMH_BANK2, SMH_BANK2 );
memory_set_bankptr(machine, 2, fixeight_sec_cpu_mem);
#endif
toaplan2_sub_cpu = CPU_2_V25;
register_state_save();
}
static DRIVER_INIT( fixeighb )
{
UINT16 *bgdata = (UINT16 *)memory_region(machine, "main");
memory_set_bankptr(machine, 1, &bgdata[0x40000]); /* $80000 - $fffff */
toaplan2_sub_cpu = CPU_2_NONE;
register_state_save();
}
static DRIVER_INIT( pipibibi )
{
int A;
int oldword, newword;
UINT16 *pipibibi_68k_rom = (UINT16 *)(memory_region(machine, "main"));
/* unscramble the 68K ROM data. */
for (A = 0; A < (0x040000/2); A+=4)
{
newword = 0;
oldword = pipibibi_68k_rom[A];
newword |= ((oldword & 0x0001) << 9);
newword |= ((oldword & 0x0002) << 14);
newword |= ((oldword & 0x0004) << 8);
newword |= ((oldword & 0x0018) << 1);
newword |= ((oldword & 0x0020) << 9);
newword |= ((oldword & 0x0040) << 7);
newword |= ((oldword & 0x0080) << 5);
newword |= ((oldword & 0x0100) << 3);
newword |= ((oldword & 0x0200) >> 1);
newword |= ((oldword & 0x0400) >> 8);
newword |= ((oldword & 0x0800) >> 10);
newword |= ((oldword & 0x1000) >> 12);
newword |= ((oldword & 0x6000) >> 7);
newword |= ((oldword & 0x8000) >> 12);
pipibibi_68k_rom[A] = newword;
newword = 0;
oldword = pipibibi_68k_rom[A+1];
newword |= ((oldword & 0x0001) << 8);
newword |= ((oldword & 0x0002) << 12);
newword |= ((oldword & 0x0004) << 5);
newword |= ((oldword & 0x0008) << 11);
newword |= ((oldword & 0x0010) << 2);
newword |= ((oldword & 0x0020) << 10);
newword |= ((oldword & 0x0040) >> 1);
newword |= ((oldword & 0x0080) >> 7);
newword |= ((oldword & 0x0100) >> 4);
newword |= ((oldword & 0x0200) << 0);
newword |= ((oldword & 0x0400) >> 7);
newword |= ((oldword & 0x0800) >> 1);
newword |= ((oldword & 0x1000) >> 10);
newword |= ((oldword & 0x2000) >> 2);
newword |= ((oldword & 0x4000) >> 13);
newword |= ((oldword & 0x8000) >> 3);
pipibibi_68k_rom[A+1] = newword;
newword = 0;
oldword = pipibibi_68k_rom[A+2];
newword |= ((oldword & 0x000f) << 4);
newword |= ((oldword & 0x00f0) >> 4);
newword |= ((oldword & 0x0100) << 3);
newword |= ((oldword & 0x0200) << 1);
newword |= ((oldword & 0x0400) >> 1);
newword |= ((oldword & 0x0800) >> 3);
newword |= ((oldword & 0x1000) << 3);
newword |= ((oldword & 0x2000) << 1);
newword |= ((oldword & 0x4000) >> 1);
newword |= ((oldword & 0x8000) >> 3);
pipibibi_68k_rom[A+2] = newword;
newword = 0;
oldword = pipibibi_68k_rom[A+3];
newword |= ((oldword & 0x000f) << 4);
newword |= ((oldword & 0x00f0) >> 4);
newword |= ((oldword & 0x0100) << 7);
newword |= ((oldword & 0x0200) << 5);
newword |= ((oldword & 0x0400) << 3);
newword |= ((oldword & 0x0800) << 1);
newword |= ((oldword & 0x1000) >> 1);
newword |= ((oldword & 0x2000) >> 3);
newword |= ((oldword & 0x4000) >> 5);
newword |= ((oldword & 0x8000) >> 7);
pipibibi_68k_rom[A+3] = newword;
}
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( batrider )
{
raizing_sndirq_line = 4;
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( bbakraid )
{
bbakraid_unlimited_ver = 0;
raizing_sndirq_line = 2;
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
static DRIVER_INIT( bbakradu )
{
bbakraid_unlimited_ver = 1;
raizing_sndirq_line = 2;
toaplan2_sub_cpu = CPU_2_Z80;
register_state_save();
}
/***************************************************************************
Toaplan games
***************************************************************************/
static READ16_HANDLER( toaplan2_inputport_0_word_r )
{
return ((video_screen_get_vpos(space->machine->primary_screen) + 15) % 262) >= 245;
}
static TIMER_CALLBACK( toaplan2_raise_irq )
{
cpu_set_input_line(machine->cpu[0], param, HOLD_LINE);
}
static void toaplan2_vblank_irq(running_machine *machine, int irq_line)
{
/* the IRQ appears to fire at line 0xe6 */
timer_set(video_screen_get_time_until_pos(machine->primary_screen, 0xe6, 0), NULL, irq_line, toaplan2_raise_irq);
}
static INTERRUPT_GEN( toaplan2_vblank_irq1 ) { toaplan2_vblank_irq(device->machine, 1); }
static INTERRUPT_GEN( toaplan2_vblank_irq2 ) { toaplan2_vblank_irq(device->machine, 2); }
static INTERRUPT_GEN( toaplan2_vblank_irq4 ) { toaplan2_vblank_irq(device->machine, 4); }
static READ16_HANDLER( video_count_r )
{
/* +---------+---------+--------+---------------------------+ */
/* | /H-Sync | /V-Sync | /Blank | Scanline Count | */
/* | Bit 15 | Bit 14 | Bit 8 | Bit 7-0 (count from #EF) | */
/* +---------+---------+--------+---------------------------+ */
/*************** Control Signals are active low ***************/
int hpos = video_screen_get_hpos(space->machine->primary_screen);
int vpos = video_screen_get_vpos(space->machine->primary_screen);
video_status = 0xff00; /* Set signals inactive */
vpos = (vpos + 15) % 262;
if ((hpos > 325) && (hpos < 380))
video_status &= ~0x8000;
if ((vpos >= 247) && (vpos <= 250))
video_status &= ~0x4000;
if (vpos >= 245)
video_status &= ~0x0100;
if (vpos < 256)
video_status |= (vpos & 0xff);
else
video_status |= 0xff;
// logerror("VC: vpos=%04x hpos=%04x VBL=%04x\n",vpos,hpos,video_screen_get_vblank(space->machine->primary_screen));
return video_status;
}
static WRITE8_HANDLER( toaplan2_coin_w )
{
/* +----------------+------ Bits 7-5 not used ------+--------------+ */
/* | Coin Lockout 2 | Coin Lockout 1 | Coin Count 2 | Coin Count 1 | */
/* | Bit 3 | Bit 2 | Bit 1 | Bit 0 | */
if (data & 0x0f)
{
coin_lockout_w( 0, ((data & 4) ? 0 : 1) );
coin_lockout_w( 1, ((data & 8) ? 0 : 1) );
coin_counter_w( 0, (data & 1) );
coin_counter_w( 1, (data & 2) );
}
else
{
coin_lockout_global_w(1); /* Lock all coin slots */
}
if (data & 0xe0)
{
logerror("Writing unknown upper bits (%02x) to coin control\n",data);
}
}
static WRITE16_HANDLER( toaplan2_coin_word_w )
{
if (ACCESSING_BITS_0_7)
{
toaplan2_coin_w(space, offset, data & 0xff);
}
if (ACCESSING_BITS_8_15 && (data & 0xff00) )
{
logerror("Writing unknown upper MSB command (%04x) to coin control\n",data & 0xff00);
}
}
static WRITE16_HANDLER( toaplan2_v25_coin_word_w )
{
// logerror("toaplan2_v25_coin_word_w %04x\n",data);
if (ACCESSING_BITS_0_7)
{
toaplan2_coin_w(space, offset, data & 0x0f);
#if USE_V25
/* only the ram-based V25 based games access the following bits */
//cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, (data & 0x0020) ? CLEAR_LINE : ASSERT_LINE );
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_HALT, (data & 0x0010) ? CLEAR_LINE : ASSERT_LINE);
#endif
}
if (ACCESSING_BITS_8_15 && (data & 0xff00) )
{
logerror("Writing unknown upper MSB command (%04x) to coin control\n",data & 0xff00);
}
}
static WRITE16_HANDLER( shippumd_coin_word_w )
{
if (ACCESSING_BITS_0_7)
{
toaplan2_coin_w(space, offset, data & 0xff);
okim6295_set_bank_base(0, (((data & 0x10) >> 4) * 0x40000));
}
if (ACCESSING_BITS_8_15 && (data & 0xff00) )
{
logerror("Writing unknown upper MSB command (%04x) to coin control\n",data & 0xff00);
}
}
static READ16_HANDLER( toaplan2_shared_r )
{
return toaplan2_shared_ram[offset] & 0xff;
}
static WRITE16_HANDLER( toaplan2_shared_w )
{
if (ACCESSING_BITS_0_7)
{
toaplan2_shared_ram[offset] = data & 0xff;
}
}
static WRITE16_HANDLER( toaplan2_hd647180_cpu_w )
{
/* Command sent to secondary CPU. Support for HD647180 will be
required when a ROM dump becomes available for this hardware */
if (ACCESSING_BITS_0_7)
{
if (toaplan2_sub_cpu == CPU_2_Z80) /* Whoopee */
{
toaplan2_shared_ram[0] = data & 0xff;
}
else /* Teki Paki */
{
mcu_data = data & 0xff;
logerror("PC:%08x Writing command (%04x) to secondary CPU shared port\n",cpu_get_previouspc(space->cpu),mcu_data);
}
}
}
static CUSTOM_INPUT( c2map_r )
{
/* For Teki Paki hardware */
/* bit 4 high signifies secondary CPU is ready */
/* bit 5 is tested low before V-Blank bit ??? */
switch (toaplan2_sub_cpu)
{
case CPU_2_Z80: mcu_data = toaplan2_shared_ram[0]; break; /* Whoopee */
case CPU_2_HD647180: mcu_data = 0xff; break; /* Teki Paki */
default: mcu_data = 0x00; break;
}
return (mcu_data == 0xff) ? 0x01 : 0x00;
}
static READ16_HANDLER( pipibibi_z80_status_r )
{
return toaplan2_shared_ram[0] & 0xff;
}
static WRITE16_HANDLER( pipibibi_z80_task_w )
{
if (ACCESSING_BITS_0_7)
{
toaplan2_shared_ram[0] = data & 0xff;
}
}
static READ16_HANDLER( ghox_p1_h_analog_r )
{
INT8 value, new_value;
new_value = input_port_read(space->machine, "PAD1");
if (new_value == old_p1_paddle_h) return 0;
value = new_value - old_p1_paddle_h;
old_p1_paddle_h = new_value;
return value;
}
static READ16_HANDLER( ghox_p2_h_analog_r )
{
INT8 value, new_value;
new_value = input_port_read(space->machine, "PAD2");
if (new_value == old_p2_paddle_h) return 0;
value = new_value - old_p2_paddle_h;
old_p2_paddle_h = new_value;
return value;
}
static READ16_HANDLER( ghox_mcu_r )
{
return 0xff;
}
static WRITE16_HANDLER( ghox_mcu_w )
{
if (ACCESSING_BITS_0_7)
{
mcu_data = data;
if ((data >= 0xd0) && (data < 0xe0))
{
offset = ((data & 0x0f) * 2) + (0x38 / 2);
toaplan2_shared_ram16[offset ] = 0x0005; /* Return address for */
toaplan2_shared_ram16[offset-1] = 0x0056; /* RTS instruction */
}
else
{
logerror("PC:%08x Writing %08x to HD647180 cpu shared ram status port\n",cpu_get_previouspc(space->cpu),mcu_data);
}
toaplan2_shared_ram16[0x56 / 2] = 0x004e; /* Return a RTS instruction */
toaplan2_shared_ram16[0x58 / 2] = 0x0075;
if (data == 0xd3)
{
toaplan2_shared_ram16[0x56 / 2] = 0x003a; // move.w d1,d5
toaplan2_shared_ram16[0x58 / 2] = 0x0001;
toaplan2_shared_ram16[0x5a / 2] = 0x0008; // bclr.b #0,d5
toaplan2_shared_ram16[0x5c / 2] = 0x0085;
toaplan2_shared_ram16[0x5e / 2] = 0x0000;
toaplan2_shared_ram16[0x60 / 2] = 0x0000;
toaplan2_shared_ram16[0x62 / 2] = 0x00cb; // muls.w #3,d5
toaplan2_shared_ram16[0x64 / 2] = 0x00fc;
toaplan2_shared_ram16[0x66 / 2] = 0x0000;
toaplan2_shared_ram16[0x68 / 2] = 0x0003;
toaplan2_shared_ram16[0x6a / 2] = 0x0090; // sub.w d5,d0
toaplan2_shared_ram16[0x6c / 2] = 0x0045;
toaplan2_shared_ram16[0x6e / 2] = 0x00e5; // lsl.b #2,d1
toaplan2_shared_ram16[0x70 / 2] = 0x0009;
toaplan2_shared_ram16[0x72 / 2] = 0x004e; // rts
toaplan2_shared_ram16[0x74 / 2] = 0x0075;
}
}
}
static READ16_HANDLER( ghox_shared_ram_r )
{
/* Ghox 68K reads data from MCU shared RAM and writes it to main RAM.
It then subroutine jumps to main RAM and executes this code.
Here, we're just returning a RTS instruction for now.
See above ghox_mcu_w routine.
Offset $56 and $58 are accessed from around PC:0F814
Offset $38 and $36 are accessed from around PC:0DA7C
Offset $3c and $3a are accessed from around PC:02E3C
Offset $40 and $3E are accessed from around PC:103EE
Offset $44 and $42 are accessed from around PC:0FB52
Offset $48 and $46 are accessed from around PC:06776
*/
return toaplan2_shared_ram16[offset] & 0xff;
}
static WRITE16_HANDLER( ghox_shared_ram_w )
{
if (ACCESSING_BITS_0_7)
{
toaplan2_shared_ram16[offset] = data & 0xff;
}
}
static READ16_HANDLER( shared_ram_r )
{
/* Other games using a NEC V25+ secondary CPU, have shared memory between
the 68000 and the V25+ CPU. The 68000 reads the status of the V25+
via a location of the shared memory.
*/
return toaplan2_shared_ram16[offset] & 0xff;
}
static WRITE16_HANDLER( shared_ram_w )
{
if (ACCESSING_BITS_0_7)
{
data &= 0xff;
switch (offset * 2)
{
case 0x6e8:
case 0x9e8:
case 0x9f0:
case 0xcf0:
case 0xcf8:
case 0xff8: toaplan2_shared_ram16[offset + 1] = data; /* Dogyuun */
toaplan2_shared_ram16[offset + 2] = data; /* FixEight */
logerror("PC:%08x Writing (%04x) to shared RAM at %04x\n",cpu_get_previouspc(space->cpu),data,(offset*2));
if (data == 0x81) data = 0x0001;
break;
default: break;
}
toaplan2_shared_ram16[offset] = data;
}
}
static READ16_HANDLER( toaplan2_snd_cpu_r )
{
/*** Status port includes NEC V25+ CPU POST codes. ************
*** This is actually a part of the 68000/V25+ Shared RAM */
int response = 0xffff;
/* Provide successful POST responses */
if (mcu_data == 0xffaa) /* Dogyuun */
{
response = 0xffaa;
mcu_data = 0xffff;
}
logerror("PC:%06x reading status %08x from the NEC V25+ secondary CPU port\n",cpu_get_previouspc(space->cpu),response);
return response;
}
static WRITE16_HANDLER( dogyuun_snd_cpu_w )
{
if (ACCESSING_BITS_0_7)
{
mcu_data = data;
dogyuun_okisnd_w(space, data);
}
logerror("PC:%06x Writing command (%04x) to the NEC V25+ secondary CPU port\n",cpu_get_previouspc(space->cpu),mcu_data);
}
static READ16_HANDLER( kbash_snd_cpu_r )
{
/* Knuckle Bash's 68000 reads secondary CPU status via an I/O port.
If a value of 2 is read, then secondary CPU is busy.
Secondary CPU must report 0xff when no longer busy, to signify that it
has passed POST.
*/
return 0xff;
}
static WRITE16_HANDLER( kbash_snd_cpu_w )
{
if (ACCESSING_BITS_0_7)
{
kbash_okisnd_w(space, data);
}
logerror("PC:%06x Writing Sound command (%04x) to the NEC V25+ secondary CPU\n",cpu_get_previouspc(space->cpu),data);
}
static READ16_HANDLER( fixeight_sec_cpu_r )
{
/*** Status port includes NEC V25+ CPU POST codes. ************
*** This is actually a part of the 68000/V25+ Shared RAM */
int response = 0xffff;
if ((mcu_data & 0xffff) == 0x0faa)
{
mcu_data = 0xffff;
response = 0xffaa;
}
if ((mcu_data & 0xffff) == 0xff00)
{
mcu_data = 0x0faa;
response = 0xffaa; /* Second CPU passed POST response */
}
if ((mcu_data & 0xff00) == 0x0000)
{
response = mcu_data; /* Return the shared RAM data during POST */
}
logerror("PC:%06x reading status %08x from the NEC V25+ secondary CPU port\n",cpu_get_previouspc(space->cpu),response);
return response;
}
static WRITE16_HANDLER( fixeight_sec_cpu_w )
{
if (ACCESSING_BITS_0_7)
{
if (mcu_data & 0xff00)
{
mcu_data = (mcu_data & 0xff00) | (data & 0xff);
fixeight_okisnd_w(space, data);
}
else if (mcu_data == 0xff00)
{
#if 0 /* check the 37B6 code */
/* copy nvram data to shared ram after post is complete */
fixeight_sharedram[0] = fixeight_nvram[0]; /* Dip Switch A */
fixeight_sharedram[1] = fixeight_nvram[1]; /* Dip Switch B */
fixeight_sharedram[2] = fixeight_nvram[2]; /* Territory */
#endif
/* Hack Alert ! Fixeight does not have any DSW. The main CPU has a */
/* game keeping service mode. It writes/reads the settings to/from */
/* these shared RAM locations. The secondary CPU reads/writes them */
/* from/to nvram to store the settings (a 93C45 EEPROM) */
memory_install_readwrite16_handler(space, 0x28f002, 0x28fbff, 0, 0, SMH_BANK2, SMH_BANK2);
memory_set_bankptr(space->machine, 2, fixeight_sec_cpu_mem);
memory_install_readwrite16_handler(space, 0x28f004, 0x28f005, 0, 0, input_port_read_handler16(space->machine->portconfig, "DSWA"), SMH_NOP); /* Dip Switch A - Wrong !!! */
memory_install_readwrite16_handler(space, 0x28f006, 0x28f007, 0, 0, input_port_read_handler16(space->machine->portconfig, "DSWB"), SMH_NOP); /* Dip Switch B - Wrong !!! */
memory_install_readwrite16_handler(space, 0x28f008, 0x28f009, 0, 0, input_port_read_handler16(space->machine->portconfig, "JMPR"), SMH_NOP); /* Territory Jumper block - Wrong !!! */
mcu_data = data;
}
else
{
mcu_data = data;
}
}
logerror("PC:%06x Writing command (%04x) to the NEC V25+ secondary CPU port\n",cpu_get_previouspc(space->cpu),mcu_data);
}
static WRITE16_HANDLER( vfive_snd_cpu_w )
{
if (ACCESSING_BITS_0_7)
{
mcu_data = data;
}
logerror("PC:%06x Writing command (%04x) to the NEC V25+ secondary CPU port\n",cpu_get_previouspc(space->cpu),mcu_data);
}
static WRITE16_HANDLER( batsugun_snd_cpu_w )
{
if (ACCESSING_BITS_0_7)
{
mcu_data = data;
batsugun_okisnd_w(space, data);
}
logerror("PC:%06x Writing command (%04x) to the NEC V25+ secondary CPU port %02x\n",cpu_get_previouspc(space->cpu),mcu_data,(offset*2));
}
static READ16_HANDLER( V25_sharedram_r )
{
return V25_shared_ram[offset] & 0xff;
}
static WRITE16_HANDLER( V25_sharedram_w )
{
if (ACCESSING_BITS_0_7)
{
V25_shared_ram[offset] = data & 0xff;
}
}
static WRITE16_HANDLER( oki_bankswitch_w )
{
if (ACCESSING_BITS_0_7)
{
okim6295_set_bank_base(0, (data & 1) * 0x40000);
}
}
static WRITE16_HANDLER( fixeighb_oki_bankswitch_w )
{
if (ACCESSING_BITS_0_7)
{
data &= 7;
if (data <= 4)
{
UINT8 *fixeighb_oki = memory_region(space->machine, "oki");
memcpy(&fixeighb_oki[0x30000], &fixeighb_oki[(data * 0x10000) + 0x40000], 0x10000);
}
}
}
/***************************************************************************
Raizing games
***************************************************************************/
static READ16_HANDLER( raizing_shared_ram_r )
{
return raizing_shared_ram[offset] & 0xff;
}
static WRITE16_HANDLER( raizing_shared_ram_w )
{
if (ACCESSING_BITS_0_7)
{
raizing_shared_ram[offset] = data & 0xff;
}
}
static WRITE16_HANDLER( bgaregga_soundlatch_w )
{
if (ACCESSING_BITS_0_7)
{
soundlatch_w(space, offset, data & 0xff);
cpu_set_input_line(space->machine->cpu[1], 0, HOLD_LINE);
}
}
static READ8_HANDLER( bgaregga_E01D_r )
{
// the Z80 reads this address during its IRQ routine,
// and reads the soundlatch only if the lowest bit is clear.
return 0;
}
static WRITE8_HANDLER( bgaregga_E00C_w )
{
// the Z80 writes here after reading the soundlatch.
// I would think that this was an acknowledge latch like
// batrider and bbakraid have, except that on the 68000 side
// there's no corresponding read...
}
static WRITE8_HANDLER( bgaregga_bankswitch_w )
{
int bank = (data & 0x0f) - 10 + 4;
if (bank != current_bank)
{
current_bank = bank;
memory_set_bank(space->machine, 1, bank);
}
}
// bgaregga and batrider don't actually have a NMK112, but rather a GAL
// programmed to bankswitch the sound ROMs in a similar fashion.
// it may not be a coincidence that the composer and sound designer for
// these two games, Manabu "Santaruru" Namiki, came to Raizing from NMK...
static WRITE8_HANDLER( raizing_okim6295_bankselect_0 )
{
NMK112_okibank_w(space, 0, data & 0x0f); // chip 0 bank 0
NMK112_okibank_w(space, 1, (data >> 4) & 0x0f); // chip 0 bank 1
}
static WRITE8_HANDLER( raizing_okim6295_bankselect_1 )
{
NMK112_okibank_w(space, 2, data & 0x0f); // chip 0 bank 2
NMK112_okibank_w(space, 3, (data >> 4) & 0x0f); // chip 0 bank 3
}
static WRITE8_HANDLER( raizing_okim6295_bankselect_2 )
{
NMK112_okibank_w(space, 4, data & 0x0f); // chip 1 bank 0
NMK112_okibank_w(space, 5, (data >> 4) & 0x0f); // chip 1 bank 1
}
static WRITE8_HANDLER( raizing_okim6295_bankselect_3 )
{
NMK112_okibank_w(space, 6, data & 0x0f); // chip 1 bank 2
NMK112_okibank_w(space, 7, (data >> 4) & 0x0f); // chip 1 bank 3
}
static WRITE8_HANDLER( batrider_bankswitch_w )
{
int bank = data & 0x0f;
bank = (bank > 1) ? bank + 2 : bank;
if (bank != current_bank)
{
current_bank = bank;
memory_set_bank(space->machine, 1, bank);
}
}
static READ16_HANDLER( batrider_z80_busack_r )
{
/* Bit 1 returns the status of BUSAK from the Z80.
BUSRQ is activated via bit 0x10 on the NVRAM write port.
These accesses are made when the 68K wants to read the Z80
ROM code. Failure to return the correct status incurrs a Sound Error.
*/
return raizing_Z80_busreq; /* Loop BUSRQ to BUSAK */
}
static WRITE16_HANDLER( batrider_z80_busreq_w )
{
if (ACCESSING_BITS_0_7)
{
raizing_Z80_busreq = (data & 0xff);
}
}
static READ16_HANDLER( raizing_z80rom_r )
{
UINT8 *Z80_ROM_test = (UINT8 *)memory_region(space->machine, "audio");
if (offset < 0x8000)
return Z80_ROM_test[offset] & 0xff;
return Z80_ROM_test[offset + 0x8000] & 0xff;
}
// these two latches are always written together, via a single move.l instruction
static WRITE16_HANDLER( batrider_soundlatch_w )
{
if (ACCESSING_BITS_0_7)
{
soundlatch_w(space, offset, data & 0xff);
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_NMI, ASSERT_LINE);
}
}
static WRITE16_HANDLER( batrider_soundlatch2_w )
{
if (ACCESSING_BITS_0_7)
{
soundlatch2_w(space, offset, data & 0xff);
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_NMI, ASSERT_LINE);
}
}
static WRITE16_HANDLER( raizing_unknown_w )
{
// the 68K writes here when it wants a sound acknowledge IRQ from the Z80
// for bbakraid this is on every sound command; for batrider, only on certain commands
}
static WRITE16_HANDLER( raizing_clear_sndirq_w )
{
// not sure whether this is correct
// the 68K writes here during the sound IRQ handler, and nowhere else...
cpu_set_input_line(space->machine->cpu[0], raizing_sndirq_line, CLEAR_LINE);
}
static WRITE8_HANDLER( raizing_sndirq_w )
{
// if raizing_clear_sndirq_w() is correct, should this be ASSERT_LINE?
cpu_set_input_line(space->machine->cpu[0], raizing_sndirq_line, HOLD_LINE);
}
static WRITE8_HANDLER( raizing_clear_nmi_w )
{
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_NMI, CLEAR_LINE);
}
/*###################### Battle Bakraid ##############################*/
/* EEPROM contents with Battle Bakraid Unlimited version features unlocked */
static const UINT8 bbakraid_unlimited_nvram[512] = {
0xc2,0x49,0x00,0x07,0xa1,0x20,0x2a,0x2a,0x2a,0x90,0x90,0x90,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x1a,0x80,0x2a,0x2a,0x2a,0x94,
0x94,0x94,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,
0x93,0xe0,0x2a,0x2a,0x2a,0x98,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x03,0x0d,0x40,0x2a,0x2a,0x2a,0x9c,0x9c,0x9c,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x86,0xa0,0x2a,0x2a,
0x2a,0xa0,0xa0,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
0x00,0x07,0xa1,0x20,0x2b,0x2b,0x2b,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x1a,0x80,0x2b,0x2b,0x2b,0x94,0x94,0x94,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x93,0xe0,
0x2b,0x2b,0x2b,0x98,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x03,0x0d,0x40,0x2b,0x2b,0x2b,0x9c,0x9c,0x9c,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x86,0xa0,0x2b,0x2b,0x2b,0xa0,
0xa0,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x07,
0xa1,0x20,0x23,0x23,0x23,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x06,0x1a,0x80,0x23,0x23,0x23,0x94,0x94,0x94,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x93,0xe0,0x23,0x23,
0x23,0x98,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
0x00,0x03,0x0d,0x40,0x23,0x23,0x23,0x9c,0x9c,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x86,0xa0,0x23,0x23,0x23,0xa0,0xa0,0xa0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x07,0xa1,0x20,
0x3f,0x3f,0x3f,0x90,0x90,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x06,0x1a,0x80,0x3f,0x3f,0x3f,0x94,0x94,0x94,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x93,0xe0,0x3f,0x3f,0x3f,0x98,
0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,
0x0d,0x40,0x3f,0x3f,0x3f,0x9c,0x9c,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x01,0x86,0xa0,0x3f,0x3f,0x3f,0xa0,0xa0,0xa0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0xc2,0x49,0xc2,0x49,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xcf,0x00,0x04,0x00,0x00,0x21,0xd5,
0x00,0x05,0x06,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc2,0x49
};
static const eeprom_interface eeprom_interface_93C66 =
{
/* Pin 6 of the 93C66 is connected to Gnd!
So it's configured for 512 bytes */
9, // address bits
8, // data bits
"*110", // read 110 aaaaaaaaa
"*101", // write 101 aaaaaaaaa dddddddd
"*111", // erase 111 aaaaaaaaa
"*10000xxxxxxx",// lock 100x 00xxxx
"*10011xxxxxxx",// unlock 100x 11xxxx
// "*10001xxxx", // write all 1 00 01xxxx dddddddd
// "*10010xxxx" // erase all 1 00 10xxxx
};
static NVRAM_HANDLER( bbakraid )
{
/* Pin 6 of 93C66 is connected to Gnd! */
if (read_or_write)
eeprom_save(file);
else
{
eeprom_init(&eeprom_interface_93C66);
if (file) eeprom_load(file);
else
{
if (bbakraid_unlimited_ver == 1)
eeprom_set_data(bbakraid_unlimited_nvram, sizeof(bbakraid_unlimited_nvram));
}
}
}
static READ16_HANDLER( bbakraid_nvram_r )
{
/* Bit 1 returns the status of BUSAK from the Z80.
BUSRQ is activated via bit 0x10 on the NVRAM write port.
These accesses are made when the 68K wants to read the Z80
ROM code. Failure to return the correct status incurrs a Sound Error.
*/
int data;
data = ((eeprom_read_bit() & 0x01) << 4);
data |= ((raizing_Z80_busreq >> 4) & 0x01); /* Loop BUSRQ to BUSAK */
return data;
}
static WRITE16_HANDLER( bbakraid_nvram_w )
{
if (data & ~0x001f)
logerror("CPU #0 PC:%06X - Unknown EEPROM data being written %04X\n",cpu_get_pc(space->cpu),data);
if ( ACCESSING_BITS_0_7 )
{
// chip select
eeprom_set_cs_line((data & 0x01) ? CLEAR_LINE : ASSERT_LINE );
// latch the bit
eeprom_write_bit( (data & 0x04) >> 2 );
// clock line asserted: write latch or select next bit to read
eeprom_set_clock_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE );
}
raizing_Z80_busreq = data & 0x10; /* see bbakraid_nvram_r above */
}
static void bbakraid_irqhandler(running_machine *machine, int state)
{
/* Not used ??? Connected to a test pin (TP082) */
logerror("YMZ280 is generating an interrupt. State=%08x\n",state);
}
static INTERRUPT_GEN( bbakraid_snd_interrupt )
{
cpu_set_input_line(device, 0, HOLD_LINE);
}
static ADDRESS_MAP_START( tekipaki_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x01ffff) AM_ROM
AM_RANGE(0x020000, 0x03ffff) AM_ROM /* extra for Whoopee */
AM_RANGE(0x080000, 0x082fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x140000, 0x140001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x140004, 0x140007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x140008, 0x140009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x14000c, 0x14000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x180000, 0x180001) AM_READ_PORT("DSWA")
AM_RANGE(0x180010, 0x180011) AM_READ_PORT("DSWB")
AM_RANGE(0x180020, 0x180021) AM_READ_PORT("SYS")
AM_RANGE(0x180030, 0x180031) AM_READ_PORT("JMPR") /* CPU 2 busy and Territory Jumper block */
AM_RANGE(0x180040, 0x180041) AM_WRITE(toaplan2_coin_word_w) /* Coin count/lock */
AM_RANGE(0x180050, 0x180051) AM_READ_PORT("IN1")
AM_RANGE(0x180060, 0x180061) AM_READ_PORT("IN2")
AM_RANGE(0x180070, 0x180071) AM_WRITE(toaplan2_hd647180_cpu_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ghox_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x040001) AM_READ(ghox_p2_h_analog_r) /* Paddle 2 */
AM_RANGE(0x080000, 0x083fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x100000, 0x100001) AM_READ(ghox_p1_h_analog_r) /* Paddle 1 */
AM_RANGE(0x140000, 0x140001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x140004, 0x140007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x140008, 0x140009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x14000c, 0x14000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x180000, 0x180001) AM_READWRITE(ghox_mcu_r, ghox_mcu_w) /* really part of shared RAM */
AM_RANGE(0x180006, 0x180007) AM_READ_PORT("DSWA")
AM_RANGE(0x180008, 0x180009) AM_READ_PORT("DSWB")
AM_RANGE(0x180010, 0x180011) AM_READ_PORT("SYS")
AM_RANGE(0x18000c, 0x18000d) AM_READ_PORT("IN1")
AM_RANGE(0x18000e, 0x18000f) AM_READ_PORT("IN2")
AM_RANGE(0x180500, 0x180fff) AM_READWRITE(ghox_shared_ram_r, ghox_shared_ram_w) AM_BASE(&toaplan2_shared_ram16)
AM_RANGE(0x181000, 0x181001) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x18100c, 0x18100d) AM_READ_PORT("JMPR")
ADDRESS_MAP_END
static ADDRESS_MAP_START( dogyuun_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("IN1")
AM_RANGE(0x200014, 0x200015) AM_READ_PORT("IN2")
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w)
#if USE_V25
// AM_RANGE(0x21e000, 0x21fbff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16) /* $21f000 status port */
// AM_RANGE(0x21fc00, 0x21ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
AM_RANGE(0x210000, 0x21efff) AM_READWRITE( batsugun_share2_r, batsugun_share2_w )
AM_RANGE(0x21f000, 0x21ffff) AM_READWRITE( batsugun_share_r, batsugun_share_w )
#else
AM_RANGE(0x21e000, 0x21efff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16)
AM_RANGE(0x21f000, 0x21f001) AM_READWRITE(toaplan2_snd_cpu_r, dogyuun_snd_cpu_w) /* V25+ status/command port */
AM_RANGE(0x21f004, 0x21f005) AM_READ_PORT("DSWA")
AM_RANGE(0x21f006, 0x21f007) AM_READ_PORT("DSWB")
AM_RANGE(0x21f008, 0x21f009) AM_READ_PORT("JMPR")
AM_RANGE(0x21fc00, 0x21ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
#endif
/***** The following locations in 0x30000x are for video controller 1 ******/
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
/***** The following loctions in 0x50000x are for video controller 2 ******/
AM_RANGE(0x500000, 0x500001) AM_WRITE(toaplan2_1_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x500004, 0x500007) AM_READWRITE(toaplan2_1_videoram16_r, toaplan2_1_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x500008, 0x500009) AM_WRITE(toaplan2_1_scroll_reg_select_w)
AM_RANGE(0x50000c, 0x50000d) AM_WRITE(toaplan2_1_scroll_reg_data_w)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r) /* test bit 8 */
ADDRESS_MAP_END
static ADDRESS_MAP_START( kbash_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x200000, 0x200001) AM_READWRITE(kbash_snd_cpu_r, kbash_snd_cpu_w) /* Sound number to play */
AM_RANGE(0x200002, 0x200003) AM_WRITENOP /* Control info to V25+ */
AM_RANGE(0x200004, 0x200005) AM_READ_PORT("DSWA")
AM_RANGE(0x200006, 0x200007) AM_READ_PORT("DSWB")
AM_RANGE(0x200008, 0x200009) AM_READ_PORT("JMPR")
AM_RANGE(0x208010, 0x208011) AM_READ_PORT("IN1")
AM_RANGE(0x208014, 0x208015) AM_READ_PORT("IN2")
AM_RANGE(0x208018, 0x208019) AM_READ_PORT("SYS")
AM_RANGE(0x20801c, 0x20801d) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r) /* test bit 8 */
ADDRESS_MAP_END
static ADDRESS_MAP_START( kbash2_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x104000, 0x10401f) AM_RAM /* Sound related? */
AM_RANGE(0x200000, 0x200001) AM_NOP /* Left over from original code - Sound Number write, Status read */
AM_RANGE(0x200002, 0x200003) AM_WRITENOP /* Left over from original code - Reset Sound */
AM_RANGE(0x200004, 0x200005) AM_READ_PORT("DSWA")
AM_RANGE(0x200008, 0x200009) AM_READ_PORT("DSWB")
AM_RANGE(0x20000c, 0x20000d) AM_READ_PORT("JMPR")
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("IN1")
AM_RANGE(0x200014, 0x200015) AM_READ_PORT("IN2")
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x200020, 0x200021) AM_READWRITE(okim6295_status_1_lsb_r, okim6295_data_1_lsb_w)
AM_RANGE(0x200024, 0x200025) AM_READWRITE(okim6295_status_0_lsb_r, okim6295_data_0_lsb_w)
AM_RANGE(0x200028, 0x200029) AM_WRITE(oki_bankswitch_w)
AM_RANGE(0x20002c, 0x20002d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
ADDRESS_MAP_END
static ADDRESS_MAP_START( truxton2_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x200000, 0x200001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x200004, 0x200007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w)
AM_RANGE(0x200008, 0x200009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x20000c, 0x20000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x300000, 0x300fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x400000, 0x401fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size)
AM_RANGE(0x402000, 0x4021ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x402200, 0x402fff) AM_RAM
AM_RANGE(0x403000, 0x4031ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x403200, 0x403fff) AM_RAM
AM_RANGE(0x500000, 0x50ffff) AM_READWRITE(toaplan2_tx_gfxram16_r, toaplan2_tx_gfxram16_w) AM_BASE(&toaplan2_tx_gfxram16)
AM_RANGE(0x600000, 0x600001) AM_READ(video_count_r)
AM_RANGE(0x700000, 0x700001) AM_READ_PORT("DSWA")
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSWB")
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("JMPR")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("IN1")
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("IN2")
AM_RANGE(0x70000a, 0x70000b) AM_READ_PORT("SYS")
AM_RANGE(0x700010, 0x700011) AM_READWRITE(okim6295_status_0_lsb_r, okim6295_data_0_lsb_w)
AM_RANGE(0x700014, 0x700015) AM_WRITE(ym2151_register_port_0_lsb_w)
AM_RANGE(0x700016, 0x700017) AM_READWRITE(ym2151_status_port_0_lsb_r, ym2151_data_port_0_lsb_w)
AM_RANGE(0x70001e, 0x70001f) AM_WRITE(toaplan2_coin_word_w) /* Coin count/lock */
ADDRESS_MAP_END
static ADDRESS_MAP_START( pipibibs_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x082fff) AM_RAM
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x140000, 0x140001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x140004, 0x140007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w)
AM_RANGE(0x140008, 0x140009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x14000c, 0x14000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x190000, 0x190fff) AM_READWRITE(toaplan2_shared_r, toaplan2_shared_w)
AM_RANGE(0x19c01c, 0x19c01d) AM_WRITE(toaplan2_coin_word_w) /* Coin count/lock */
AM_RANGE(0x19c020, 0x19c021) AM_READ_PORT("DSWA")
AM_RANGE(0x19c024, 0x19c025) AM_READ_PORT("DSWB")
AM_RANGE(0x19c028, 0x19c029) AM_READ_PORT("JMPR")
AM_RANGE(0x19c02c, 0x19c02d) AM_READ_PORT("SYS")
AM_RANGE(0x19c030, 0x19c031) AM_READ_PORT("IN1")
AM_RANGE(0x19c034, 0x19c035) AM_READ_PORT("IN2")
ADDRESS_MAP_END
static ADDRESS_MAP_START( pipibibi_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x082fff) AM_RAM
AM_RANGE(0x083000, 0x0837ff) AM_READWRITE(pipibibi_spriteram16_r, pipibibi_spriteram16_w) /* SpriteRAM */
AM_RANGE(0x083800, 0x087fff) AM_RAM /* SpriteRAM (unused) */
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x120000, 0x120fff) AM_RAM /* Copy of SpriteRAM ? */
// AM_RANGE(0x13f000, 0x13f001) AM_WRITENOP /* ??? */
AM_RANGE(0x180000, 0x182fff) AM_READWRITE(pipibibi_videoram16_r, pipibibi_videoram16_w) /* TileRAM */
AM_RANGE(0x188000, 0x18800f) AM_WRITE(pipibibi_scroll_w)
AM_RANGE(0x190002, 0x190003) AM_READ(pipibibi_z80_status_r) /* Z80 ready ? */
AM_RANGE(0x190010, 0x190011) AM_WRITE(pipibibi_z80_task_w) /* Z80 task to perform */
AM_RANGE(0x19c01c, 0x19c01d) AM_WRITE(toaplan2_coin_word_w) /* Coin count/lock */
AM_RANGE(0x19c020, 0x19c021) AM_READ_PORT("DSWA")
AM_RANGE(0x19c024, 0x19c025) AM_READ_PORT("DSWB")
AM_RANGE(0x19c028, 0x19c029) AM_READ_PORT("JMPR")
AM_RANGE(0x19c02c, 0x19c02d) AM_READ_PORT("SYS")
AM_RANGE(0x19c030, 0x19c031) AM_READ_PORT("IN1")
AM_RANGE(0x19c034, 0x19c035) AM_READ_PORT("IN2")
ADDRESS_MAP_END
#if USE_V25
// guess, could be wrong
WRITE16_HANDLER( fixeight_subcpu_ctrl )
{
/* 0x18 used */
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_HALT, (data & 0x0010) ? CLEAR_LINE : ASSERT_LINE);
}
#endif
/* this one is rather different to the other v25 based ones, shared ram is moved for example */
static ADDRESS_MAP_START( fixeight_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x200000, 0x200001) AM_READ_PORT("IN1")
AM_RANGE(0x200004, 0x200005) AM_READ_PORT("IN2")
AM_RANGE(0x200008, 0x200009) AM_READ_PORT("IN3")
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_coin_word_w) /* Coin count/lock */
#if USE_V25
// AM_RANGE(0x28e000, 0x28fbff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16) /* $28f000 status port */
// AM_RANGE(0x28fc00, 0x28ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
AM_RANGE(0x280000, 0x28efff) AM_READWRITE( batsugun_share2_r, batsugun_share2_w )
AM_RANGE(0x28f000, 0x28ffff) AM_READWRITE( batsugun_share_r, batsugun_share_w )
AM_RANGE(0x700000, 0x700001) AM_WRITE(fixeight_subcpu_ctrl) // guess!!!
#else
AM_RANGE(0x280000, 0x28dfff) AM_RAM /* part of shared ram ? */
AM_RANGE(0x28e000, 0x28efff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16)
AM_RANGE(0x28f000, 0x28f001) AM_READWRITE(fixeight_sec_cpu_r, fixeight_sec_cpu_w) AM_BASE(&fixeight_sec_cpu_mem) /* V25+ Command/Status port */
// AM_RANGE(0x28f002, 0x28f003) AM_READ(SMH_RAM) /* part of shared ram */
// AM_RANGE(0x28f004, 0x28f005) AM_READ_PORT("DSWA") /* Dip Switch A - Wrong !!! */
// AM_RANGE(0x28f006, 0x28f007) AM_READ_PORT("DSWB") /* Dip Switch B - Wrong !!! */
// AM_RANGE(0x28f008, 0x28f009) AM_READ_PORT("JMPR") /* Territory Jumper block - Wrong !!! */
// AM_RANGE(0x28f00a, 0x28fbff) AM_READ(SMH_RAM) /* part of shared ram */
AM_RANGE(0x28fc00, 0x28ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
#endif
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x500000, 0x501fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size)
AM_RANGE(0x502000, 0x5021ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x503000, 0x5031ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x600000, 0x60ffff) AM_READWRITE(toaplan2_tx_gfxram16_r, toaplan2_tx_gfxram16_w) AM_BASE(&toaplan2_tx_gfxram16)
AM_RANGE(0x800000, 0x800001) AM_READ(video_count_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( fixeighb_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM /* 0-$7ffff ?*/
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* 100000 - 107fff 105000-105xxx 106000-106xxx 108000 - related to sound ?*/
AM_RANGE(0x200000, 0x200001) AM_READ_PORT("IN1")
AM_RANGE(0x200004, 0x200005) AM_READ_PORT("IN2")
AM_RANGE(0x200008, 0x200009) AM_READ_PORT("IN3")
AM_RANGE(0x20000c, 0x20000d) AM_READ_PORT("DSWB")
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("SYS")
AM_RANGE(0x200014, 0x200015) AM_WRITE(fixeighb_oki_bankswitch_w) /* Sound banking. Code at $4084c, $5070 */
AM_RANGE(0x200018, 0x200019) AM_READWRITE(okim6295_status_0_lsb_r, okim6295_data_0_lsb_w)
AM_RANGE(0x20001c, 0x20001d) AM_READ_PORT("DSWA")
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x500000, 0x501fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size)
AM_RANGE(0x502000, 0x5021ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x503000, 0x5031ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
AM_RANGE(0x800000, 0x87ffff) AM_READ(SMH_BANK1)
ADDRESS_MAP_END
static ADDRESS_MAP_START( vfive_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
// AM_RANGE(0x200000, 0x20ffff) AM_ROM /* Sound ROM is here ??? */
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("IN1")
AM_RANGE(0x200014, 0x200015) AM_READ_PORT("IN2")
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) /* Coin count/lock */
#if USE_V25
// AM_RANGE(0x21e000, 0x21fbff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16) /* $21f000 status port */
// AM_RANGE(0x21fc00, 0x21ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
AM_RANGE(0x210000, 0x21efff) AM_READWRITE( batsugun_share2_r, batsugun_share2_w )
AM_RANGE(0x21f000, 0x21ffff) AM_READWRITE( batsugun_share_r, batsugun_share_w )
#else
AM_RANGE(0x21e000, 0x21efff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16)
AM_RANGE(0x21f000, 0x21f001) AM_READWRITE(toaplan2_snd_cpu_r, vfive_snd_cpu_w) /* V25+ Command/Status port */
AM_RANGE(0x21f004, 0x21f005) AM_READ_PORT("DSWA")
AM_RANGE(0x21f006, 0x21f007) AM_READ_PORT("DSWB")
AM_RANGE(0x21f008, 0x21f009) AM_READ_PORT("JMPR")
AM_RANGE(0x21fc00, 0x21ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
#endif
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
ADDRESS_MAP_END
#if USE_V25
static UINT8* batsugun_share;
static UINT8* batsugun_share2;
static READ16_HANDLER( batsugun_share_r )
{
return batsugun_share[offset] | batsugun_share[offset]<<8;
}
static WRITE16_HANDLER( batsugun_share_w )
{
/*
if (ACCESSING_BITS_8_15)
{
batsugun_share[offset] = data >> 8;
}
*/
if (ACCESSING_BITS_0_7)
{
batsugun_share[offset] = data;
}
}
static READ16_HANDLER( batsugun_share2_r )
{
return batsugun_share2[offset] | batsugun_share2[offset]<<8;
}
static WRITE16_HANDLER( batsugun_share2_w )
{
/*
if (ACCESSING_BITS_8_15)
{
batsugun_share2[offset] = data >> 8;
}
*/
if (ACCESSING_BITS_0_7)
{
batsugun_share2[offset] = data;
}
}
#endif
static ADDRESS_MAP_START( batsugun_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x200010, 0x200011) AM_READ_PORT("IN1")
AM_RANGE(0x200014, 0x200015) AM_READ_PORT("IN2")
AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) /* Coin count/lock + v25 reset/hold control lines? */
#if USE_V25
// AM_RANGE(0x21e000, 0x21fbff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16) /* $21f000 status port */
// AM_RANGE(0x21fc00, 0x21ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
AM_RANGE(0x210000, 0x21efff) AM_READWRITE( batsugun_share2_r, batsugun_share2_w )
AM_RANGE(0x21f000, 0x21ffff) AM_READWRITE( batsugun_share_r, batsugun_share_w )
#else
AM_RANGE(0x210000, 0x21bbff) AM_RAM
AM_RANGE(0x21e000, 0x21efff) AM_READWRITE(shared_ram_r, shared_ram_w) AM_BASE(&toaplan2_shared_ram16)
AM_RANGE(0x21f000, 0x21f001) AM_READWRITE(toaplan2_snd_cpu_r, batsugun_snd_cpu_w) /* V25+ Command/Status port */
AM_RANGE(0x21f004, 0x21f005) AM_READ_PORT("DSWA")
AM_RANGE(0x21f006, 0x21f007) AM_READ_PORT("DSWB")
AM_RANGE(0x21f008, 0x21f009) AM_READ_PORT("JMPR")
AM_RANGE(0x21fc00, 0x21ffff) AM_READWRITE(V25_sharedram_r, V25_sharedram_w) AM_BASE(&V25_shared_ram) /* 16-bit on 68000 side, 8-bit on V25+ side */
#endif
/***** The following in 0x30000x are for video controller 1 ******/
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
/***** The following in 0x50000x are for video controller 2 ******/
AM_RANGE(0x500000, 0x500001) AM_WRITE(toaplan2_1_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x500004, 0x500007) AM_READWRITE(toaplan2_1_videoram16_r, toaplan2_1_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x500008, 0x500009) AM_WRITE(toaplan2_1_scroll_reg_select_w)
AM_RANGE(0x50000c, 0x50000d) AM_WRITE(toaplan2_1_scroll_reg_data_w)
AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( snowbro2_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w) /* VideoRAM selector/offset */
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x500000, 0x500001) AM_WRITE(ym2151_register_port_0_lsb_w)
AM_RANGE(0x500002, 0x500003) AM_READWRITE(ym2151_status_port_0_lsb_r, ym2151_data_port_0_lsb_w)
AM_RANGE(0x600000, 0x600001) AM_READWRITE(okim6295_status_0_lsb_r, okim6295_data_0_lsb_w)
AM_RANGE(0x700000, 0x700001) AM_READ_PORT("JMPR")
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("DSWA")
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("DSWB")
AM_RANGE(0x70000c, 0x70000d) AM_READ_PORT("IN1")
AM_RANGE(0x700010, 0x700011) AM_READ_PORT("IN2")
AM_RANGE(0x700014, 0x700015) AM_READ_PORT("IN3")
AM_RANGE(0x700018, 0x700019) AM_READ_PORT("IN4")
AM_RANGE(0x70001c, 0x70001d) AM_READ_PORT("SYS")
AM_RANGE(0x700030, 0x700031) AM_WRITE(oki_bankswitch_w) /* Sample bank switch */
AM_RANGE(0x700034, 0x700035) AM_WRITE(toaplan2_coin_word_w) /* Coin count/lock */
ADDRESS_MAP_END
static ADDRESS_MAP_START( mahoudai_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x218000, 0x21bfff) AM_READWRITE(raizing_shared_ram_r, raizing_shared_ram_w)
AM_RANGE(0x21c01c, 0x21c01d) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x21c020, 0x21c021) AM_READ_PORT("IN1")
AM_RANGE(0x21c024, 0x21c025) AM_READ_PORT("IN2")
AM_RANGE(0x21c028, 0x21c029) AM_READ_PORT("SYS")
AM_RANGE(0x21c02c, 0x21c02d) AM_READ_PORT("DSWA")
AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x401000, 0x4017ff) AM_RAM /* Unused PaletteRAM */
AM_RANGE(0x500000, 0x501fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size)
AM_RANGE(0x502000, 0x5021ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x502200, 0x502fff) AM_RAM
AM_RANGE(0x503000, 0x5031ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x503200, 0x503fff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( shippumd_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x218000, 0x21bfff) AM_READWRITE(raizing_shared_ram_r, raizing_shared_ram_w)
// AM_RANGE(0x21c008, 0x21c009) AM_WRITENOP /* ??? */
AM_RANGE(0x21c01c, 0x21c01d) AM_WRITE(shippumd_coin_word_w)
AM_RANGE(0x21c020, 0x21c021) AM_READ_PORT("IN1")
AM_RANGE(0x21c024, 0x21c025) AM_READ_PORT("IN2")
AM_RANGE(0x21c028, 0x21c029) AM_READ_PORT("SYS")
AM_RANGE(0x21c02c, 0x21c02d) AM_READ_PORT("DSWA")
AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x401000, 0x4017ff) AM_RAM /* Unused PaletteRAM */
AM_RANGE(0x500000, 0x501fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size)
AM_RANGE(0x502000, 0x5021ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x502200, 0x502fff) AM_RAM
AM_RANGE(0x503000, 0x5031ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x503200, 0x503fff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( bgaregga_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM
AM_RANGE(0x218000, 0x21bfff) AM_READWRITE(raizing_shared_ram_r, raizing_shared_ram_w)
AM_RANGE(0x21c01c, 0x21c01d) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x21c020, 0x21c021) AM_READ_PORT("IN1")
AM_RANGE(0x21c024, 0x21c025) AM_READ_PORT("IN2")
AM_RANGE(0x21c028, 0x21c029) AM_READ_PORT("SYS")
AM_RANGE(0x21c02c, 0x21c02d) AM_READ_PORT("DSWA")
AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
AM_RANGE(0x300000, 0x300001) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x300004, 0x300007) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x300008, 0x300009) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x30000c, 0x30000d) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x500000, 0x501fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size)
AM_RANGE(0x502000, 0x5021ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x502200, 0x502fff) AM_RAM
AM_RANGE(0x503000, 0x5031ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x503200, 0x503fff) AM_RAM
AM_RANGE(0x600000, 0x600001) AM_WRITE(bgaregga_soundlatch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( batrider_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x200000, 0x201fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size) /* Text VideoRAM */
AM_RANGE(0x202000, 0x202fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16) AM_SIZE(&batrider_paletteram16_size)
AM_RANGE(0x203000, 0x2031ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x203200, 0x2033ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x203400, 0x207fff) AM_READWRITE(raizing_tx_gfxram16_r, raizing_tx_gfxram16_w) /* Main RAM actually */
AM_RANGE(0x208000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x37ffff) AM_READ(raizing_z80rom_r)
AM_RANGE(0x400000, 0x400001) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400004, 0x400005) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x400008, 0x40000b) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x40000c, 0x40000d) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW")
AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW")
AM_RANGE(0x500006, 0x500007) AM_READ(video_count_r)
AM_RANGE(0x500008, 0x500009) AM_READ(soundlatch3_word_r)
AM_RANGE(0x50000a, 0x50000b) AM_READ(soundlatch4_word_r)
AM_RANGE(0x50000c, 0x50000d) AM_READ(batrider_z80_busack_r)
AM_RANGE(0x500010, 0x500011) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x500020, 0x500021) AM_WRITE(batrider_soundlatch_w)
AM_RANGE(0x500022, 0x500023) AM_WRITE(batrider_soundlatch2_w)
AM_RANGE(0x500024, 0x500025) AM_WRITE(raizing_unknown_w)
AM_RANGE(0x500026, 0x500027) AM_WRITE(raizing_clear_sndirq_w)
AM_RANGE(0x500060, 0x500061) AM_WRITE(batrider_z80_busreq_w)
AM_RANGE(0x500080, 0x500081) AM_WRITE(batrider_textdata_decode)
AM_RANGE(0x5000c0, 0x5000cf) AM_WRITE(batrider_objectbank_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bbakraid_68k_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x200000, 0x201fff) AM_READWRITE(toaplan2_txvideoram16_r, toaplan2_txvideoram16_w) AM_BASE(&toaplan2_txvideoram16) AM_SIZE(&toaplan2_tx_vram_size) /* Text VideoRAM */
AM_RANGE(0x202000, 0x202fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16) AM_SIZE(&batrider_paletteram16_size)
AM_RANGE(0x203000, 0x2031ff) AM_READWRITE(toaplan2_txvideoram16_offs_r, toaplan2_txvideoram16_offs_w) AM_BASE(&toaplan2_txvideoram16_offs) AM_SIZE(&toaplan2_tx_offs_vram_size)
AM_RANGE(0x203200, 0x2033ff) AM_READWRITE(toaplan2_txscrollram16_r, toaplan2_txscrollram16_w) AM_BASE(&toaplan2_txscrollram16) AM_SIZE(&toaplan2_tx_scroll_vram_size)
AM_RANGE(0x203400, 0x207fff) AM_READWRITE(raizing_tx_gfxram16_r, raizing_tx_gfxram16_w) /* Main RAM actually */
AM_RANGE(0x208000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x33ffff) AM_READ(raizing_z80rom_r)
AM_RANGE(0x400000, 0x400001) AM_READWRITE(toaplan2_inputport_0_word_r, toaplan2_0_scroll_reg_data_w) /* VBlank */
AM_RANGE(0x400004, 0x400005) AM_WRITE(toaplan2_0_scroll_reg_select_w)
AM_RANGE(0x400008, 0x40000b) AM_READWRITE(toaplan2_0_videoram16_r, toaplan2_0_videoram16_w) /* Tile/Sprite VideoRAM */
AM_RANGE(0x40000c, 0x40000d) AM_WRITE(toaplan2_0_voffs_w)
AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN")
AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW")
AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW")
AM_RANGE(0x500006, 0x500007) AM_READ(video_count_r)
AM_RANGE(0x500008, 0x500009) AM_WRITE(toaplan2_coin_word_w)
AM_RANGE(0x500010, 0x500011) AM_READ(soundlatch3_word_r)
AM_RANGE(0x500012, 0x500013) AM_READ(soundlatch4_word_r)
AM_RANGE(0x500014, 0x500015) AM_WRITE(batrider_soundlatch_w)
AM_RANGE(0x500016, 0x500017) AM_WRITE(batrider_soundlatch2_w)
AM_RANGE(0x500018, 0x500019) AM_READ(bbakraid_nvram_r)
AM_RANGE(0x50001a, 0x50001b) AM_WRITE(raizing_unknown_w)
AM_RANGE(0x50001c, 0x50001d) AM_WRITE(raizing_clear_sndirq_w)
AM_RANGE(0x50001e, 0x50001f) AM_WRITE(bbakraid_nvram_w)
AM_RANGE(0x500080, 0x500081) AM_WRITE(batrider_textdata_decode)
AM_RANGE(0x5000c0, 0x5000cf) AM_WRITE(batrider_objectbank_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE(&toaplan2_shared_ram)
AM_RANGE(0xe000, 0xe000) AM_READWRITE(ym3812_status_port_0_r, ym3812_control_port_0_w)
AM_RANGE(0xe001, 0xe001) AM_WRITE(ym3812_write_port_0_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( raizing_sound_z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_BASE(&raizing_shared_ram)
AM_RANGE(0xe000, 0xe000) AM_WRITE(ym2151_register_port_0_w)
AM_RANGE(0xe001, 0xe001) AM_READWRITE(ym2151_status_port_0_r, ym2151_data_port_0_w)
AM_RANGE(0xe004, 0xe004) AM_READWRITE(okim6295_status_0_r, okim6295_data_0_w)
AM_RANGE(0xe00e, 0xe00e) AM_WRITE(toaplan2_coin_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bgaregga_sound_z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_BASE(&raizing_shared_ram)
AM_RANGE(0xe000, 0xe000) AM_WRITE(ym2151_register_port_0_w)
AM_RANGE(0xe001, 0xe001) AM_READWRITE(ym2151_status_port_0_r, ym2151_data_port_0_w)
AM_RANGE(0xe004, 0xe004) AM_READWRITE(okim6295_status_0_r, okim6295_data_0_w)
AM_RANGE(0xe006, 0xe006) AM_WRITE(raizing_okim6295_bankselect_0)
AM_RANGE(0xe008, 0xe008) AM_WRITE(raizing_okim6295_bankselect_1)
AM_RANGE(0xe00a, 0xe00a) AM_WRITE(bgaregga_bankswitch_w)
AM_RANGE(0xe00c, 0xe00c) AM_WRITE(bgaregga_E00C_w)
AM_RANGE(0xe01c, 0xe01c) AM_READ(soundlatch_r)
AM_RANGE(0xe01d, 0xe01d) AM_READ(bgaregga_E01D_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( batrider_sound_z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xdfff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( batrider_sound_z80_port, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x40, 0x40) AM_WRITE(soundlatch3_w)
AM_RANGE(0x42, 0x42) AM_WRITE(soundlatch4_w)
AM_RANGE(0x44, 0x44) AM_WRITE(raizing_sndirq_w)
AM_RANGE(0x46, 0x46) AM_WRITE(raizing_clear_nmi_w)
AM_RANGE(0x48, 0x48) AM_READ(soundlatch_r)
AM_RANGE(0x4a, 0x4a) AM_READ(soundlatch2_r)
AM_RANGE(0x80, 0x80) AM_WRITE(ym2151_register_port_0_w)
AM_RANGE(0x81, 0x81) AM_READWRITE(ym2151_status_port_0_r, ym2151_data_port_0_w)
AM_RANGE(0x82, 0x82) AM_READWRITE(okim6295_status_0_r, okim6295_data_0_w)
AM_RANGE(0x84, 0x84) AM_READWRITE(okim6295_status_1_r, okim6295_data_1_w)
AM_RANGE(0x88, 0x88) AM_WRITE(batrider_bankswitch_w)
AM_RANGE(0xc0, 0xc0) AM_WRITE(raizing_okim6295_bankselect_0)
AM_RANGE(0xc2, 0xc2) AM_WRITE(raizing_okim6295_bankselect_1)
AM_RANGE(0xc4, 0xc4) AM_WRITE(raizing_okim6295_bankselect_2)
AM_RANGE(0xc6, 0xc6) AM_WRITE(raizing_okim6295_bankselect_3)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bbakraid_sound_z80_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM /* Only 2FFFh valid code */
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xffff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( bbakraid_sound_z80_port, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x40, 0x40) AM_WRITE(soundlatch3_w)
AM_RANGE(0x42, 0x42) AM_WRITE(soundlatch4_w)
AM_RANGE(0x44, 0x44) AM_WRITE(raizing_sndirq_w)
AM_RANGE(0x46, 0x46) AM_WRITE(raizing_clear_nmi_w)
AM_RANGE(0x48, 0x48) AM_READ(soundlatch_r)
AM_RANGE(0x4a, 0x4a) AM_READ(soundlatch2_r)
AM_RANGE(0x80, 0x80) AM_WRITE(ymz280b_register_0_w)
AM_RANGE(0x81, 0x81) AM_READWRITE(ymz280b_status_0_r, ymz280b_data_0_w)
ADDRESS_MAP_END
#if USE_HD64x180
static ADDRESS_MAP_START( hd647180_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xfe00, 0xffff) AM_RAM /* Internal 512 bytes of RAM */
ADDRESS_MAP_END
#endif
#if USE_V25
/* this seems to be the map for the ROM based game, Knuckle Bash */
static ADDRESS_MAP_START( V25_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x00000, 0x03fff) AM_ROM
// AM_RANGE(0x00000, 0x007ff) AM_RAM /* External shared RAM (Banked) */
AM_RANGE(0x04000, 0x04000) AM_READWRITE(ym2151_status_port_0_r, ym2151_register_port_0_w)
AM_RANGE(0x04001, 0x04001) AM_WRITE(ym2151_data_port_0_w)
AM_RANGE(0x04002, 0x04002) AM_READWRITE(okim6295_status_0_r, okim6295_data_0_w)
// AM_RANGE(0x04004, 0x04004) AM_WRITE(oki_bankswitch_w)
AM_RANGE(0x04008, 0x04008) AM_READ_PORT("IN1")
AM_RANGE(0x0400a, 0x0400a) AM_READ_PORT("IN2")
AM_RANGE(0x0400c, 0x0400c) AM_READ_PORT("SYS")
AM_RANGE(0x0400e, 0x0400e) AM_WRITE(toaplan2_coin_w)
AM_RANGE(0x0fe00, 0x0ffff) AM_RAM /* Internal 512 bytes of RAM */
// AM_RANGE(0x80000, 0x87fff) AM_RAM AM_BASE(&V25_sharedram) /* External shared RAM (ROM for KBASH) */
ADDRESS_MAP_END
static ADDRESS_MAP_START( V25_port, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x0060, 0x0060) AM_READ_PORT("DSWA") /* Directly mapped I/O ports */
AM_RANGE(0x0061, 0x0061) AM_READ_PORT("DSWA") /* Directly mapped I/O ports */
AM_RANGE(0x0062, 0x0062) AM_READ_PORT("JMPR") /* Directly mapped I/O ports */
ADDRESS_MAP_END
/* the others upload the V25 code into shared RAM and have this map (incomplete)
Batsugun code is not encrypted, but requires additional v25 features to be emulated.
Others are encrypted
*/
static ADDRESS_MAP_START( V25_rambased_mem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x00000, 0x00000) AM_WRITE( ym2151_register_port_0_w )
AM_RANGE(0x00001, 0x00001) AM_READWRITE(ym2151_status_port_0_r, ym2151_data_port_0_w)
AM_RANGE(0x07800, 0x07fff) AM_RAM AM_SHARE(6)
AM_RANGE(0x40000, 0x477ff) AM_RAM AM_SHARE(7)
AM_RANGE(0x87800, 0x87fff) AM_RAM AM_SHARE(6)
AM_RANGE(0xa0000, 0xa77ff) AM_RAM AM_SHARE(7) AM_BASE(&batsugun_share2)
AM_RANGE(0xa7800, 0xa7fff) AM_RAM AM_SHARE(6)
AM_RANGE(0xff800, 0xfffff) AM_RAM AM_SHARE(6) AM_BASE(&batsugun_share)
ADDRESS_MAP_END
#endif
/*****************************************************************************
Input Port definitions
Service input of the TOAPLAN2_SYSTEM_INPUTS is used as a Pause type input.
If you press then release the following buttons, the following occurs:
Service & P2 start : The game will pause.
P1 start : The game will continue.
Service & P1 start & P2 start : The game will play in slow motion.
*****************************************************************************/
#define TOAPLAN2_COINAGE( mask, value) \
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6") \
PORT_DIPSETTING( 0x0030, DEF_STR( 4C_1C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value) \
PORT_DIPSETTING( 0x0020, DEF_STR( 3C_1C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value) \
PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value) \
PORT_DIPSETTING( 0x0020, DEF_STR( 2C_1C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) \
PORT_DIPSETTING( 0x0030, DEF_STR( 2C_3C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPSETTING( 0x0010, DEF_STR( 1C_2C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPNAME( 0x00c0, 0x0000, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,8") \
PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPSETTING( 0x00c0, DEF_STR( 2C_3C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_2C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_NOTEQUALS,value) \
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value) \
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_3C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value) \
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_4C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value) \
PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_6C ) ) PORT_CONDITION("JMPR",mask,PORTCOND_EQUALS,value)
static INPUT_PORTS_START( toaplan2 )
PORT_START("VBL")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_BIT( 0xfffe, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("IN2")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("SYS")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SERVICE1 )
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
PORT_SERVICE_DIPLOC(0x0004, IP_ACTIVE_HIGH, "SW1:3")
PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
PORT_BIT( 0x00f0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Modified below */
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("DSWB")
PORT_DIPNAME( 0x0003, 0x0000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0003, DEF_STR( Hardest ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Easy ) )
/* Various features on bit mask 0x00fc */
PORT_BIT( 0x00fc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Modified below */
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("JMPR") /* (6) Territory Jumper block */
/* Territory settings on bit mask 0x000f */
PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Modified below */
PORT_BIT( 0xfff0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
INPUT_PORTS_END
static INPUT_PORTS_START( tekipaki )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
/* Various features on bit mask 0x000f - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x000f, 0x0002 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0000, "Game Mode" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, "Stop" )
PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0002, "Territory" )
PORT_DIPSETTING( 0x0002, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0001, DEF_STR( USA ) )
PORT_DIPSETTING( 0x0007, "USA (Romstar)" )
PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x000f, "Japan (Distributed by Tecmo)" )
PORT_DIPSETTING( 0x0004, "Korea" )
PORT_DIPSETTING( 0x0003, "Hong Kong" )
PORT_DIPSETTING( 0x0008, "Hong Kong (Honest Trading Co.)" )
PORT_DIPSETTING( 0x0005, "Taiwan" )
PORT_DIPSETTING( 0x0006, "Taiwan (Spacy Co. Ltd)" )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(c2map_r, NULL)
INPUT_PORTS_END
static INPUT_PORTS_START( ghox )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
/* Various features on bit mask 0x000f - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x80000, 0x80000 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "100k only" )
PORT_DIPSETTING( 0x0004, "100k and 300k" )
PORT_DIPSETTING( 0x0000, "100k and every 200k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
PORT_MODIFY("JMPR")
/* Bit Mask 0x80000 is used here to signify European Coinage for MAME purposes - not read on the real board! */
PORT_DIPNAME( 0x8000f, 0x80002, "Territory" )
PORT_DIPSETTING( 0x80002, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x8000a, "Europe (Nova Apparate GMBH & Co)" )
PORT_DIPSETTING( 0x8000d, "Europe (Taito Corporation Japan)" )
PORT_DIPSETTING( 0x00001, DEF_STR( USA ) )
PORT_DIPSETTING( 0x00009, "USA (Romstar)" )
PORT_DIPSETTING( 0x0000b, "USA (Taito America Corporation)" )
PORT_DIPSETTING( 0x0000c, "USA (Taito Corporation Japan)" )
PORT_DIPSETTING( 0x00000, DEF_STR( Japan ) )
// PORT_DIPSETTING( 0x0000e, "Japan (Taito Corporation)" )
PORT_DIPSETTING( 0x00004, "Korea" )
PORT_DIPSETTING( 0x00003, "Hong Kong (Honest Trading Co.)" )
PORT_DIPSETTING( 0x00005, "Taiwan" )
PORT_DIPSETTING( 0x80006, "Spain & Portugal (APM Electronics SA)" )
PORT_DIPSETTING( 0x80007, "Italy (Star Electronica SRL)" )
PORT_DIPSETTING( 0x80008, "UK (JP Leisure Ltd)" )
PORT_START("PAD1") /* Paddle 1 (left-right) read at $100000 */
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("PAD2") /* Paddle 2 (left-right) read at $040000 */
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2)
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
INPUT_PORTS_END
static INPUT_PORTS_START( dogyuun )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("IN1")
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_MODIFY("IN2")
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Free_Play) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x000f, 0x0003 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "400k only" )
PORT_DIPSETTING( 0x0000, "200k only" )
PORT_DIPSETTING( 0x0004, "200k, 400k and 600k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0003, "Territory" )
PORT_DIPSETTING( 0x0003, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0001, DEF_STR( USA ) )
// PORT_DIPSETTING( 0x0007, DEF_STR( USA ) )
PORT_DIPSETTING( 0x0002, "USA (Atari Games Corp license)" )
// PORT_DIPSETTING( 0x000c, "USA (Atari Games Corp license)" )
PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x000f, "Japan (Taito Corp license)" )
PORT_DIPSETTING( 0x0008, "South East Asia (Charterfield license)" )
// PORT_DIPSETTING( 0x000d, "South East Asia (Charterfield license)" )
PORT_DIPSETTING( 0x0005, "Korea (Unite Trading license)" )
// PORT_DIPSETTING( 0x000a, "Korea (Unite Trading license)" )
PORT_DIPSETTING( 0x0004, "Hong Kong (Charterfield license)" )
// PORT_DIPSETTING( 0x0009, "Hong Kong (Charterfield license)" )
PORT_DIPSETTING( 0x0006, "Taiwan" )
// PORT_DIPSETTING( 0x000b, "Taiwan" )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Sound ready */
INPUT_PORTS_END
static INPUT_PORTS_START( kbash )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("IN1")
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_MODIFY("IN2")
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, "Continue Mode" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0001, "Discount" )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x0007, 0x0002 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "200k only" )
PORT_DIPSETTING( 0x0004, "100k only" )
PORT_DIPSETTING( 0x0000, "100k and 400k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0000, "2" )
PORT_DIPSETTING( 0x0020, "3" )
PORT_DIPSETTING( 0x0010, "4" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0002, "Territory" )
PORT_DIPSETTING( 0x000a, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0002, "Europe, USA (Atari license)" )
PORT_DIPSETTING( 0x0009, DEF_STR( USA ) )
PORT_DIPSETTING( 0x0001, "USA, Europe (Atari license)" )
PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x0006, "South East Asia" ) /*Service Mode lists European Coinage */
PORT_DIPSETTING( 0x0003, "Korea" )
PORT_DIPSETTING( 0x0004, "Hong Kong" )
INPUT_PORTS_END
static INPUT_PORTS_START( kbash2 )
PORT_INCLUDE(kbash)
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0006, "Territory" )
PORT_DIPSETTING( 0x0000, "Japan (Taito Corp license)" )
PORT_DIPSETTING( 0x000e, "South East Asia" ) /*Service Mode lists European Coinage */
PORT_DIPSETTING( 0x0006, "South East Asia (Charterfield license)" ) /*Service Mode lists European Coinage */
PORT_DIPSETTING( 0x000b, "Korea" )
PORT_DIPSETTING( 0x0003, "Korea (Unite license)" )
PORT_DIPSETTING( 0x0004, "Hong Kong" )
PORT_DIPSETTING( 0x0005, "Taiwan" )
INPUT_PORTS_END
static INPUT_PORTS_START( truxton2 )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("IN1")
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_MODIFY("IN2")
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, "Rapid Fire" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x0007, 0x0002 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, "200k only" )
PORT_DIPSETTING( 0x0008, "100k only" )
PORT_DIPSETTING( 0x0004, "100k and 250k" )
PORT_DIPSETTING( 0x0000, "70k and 200k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0020, "4" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x0007, 0x0002, "Territory" )
PORT_DIPSETTING( 0x0002, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0001, DEF_STR( USA ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x0006, "South East Asia" )
PORT_DIPSETTING( 0x0004, "Korea" )
PORT_DIPSETTING( 0x0003, "Hong Kong" )
PORT_DIPSETTING( 0x0005, "Taiwan" )
INPUT_PORTS_END
static INPUT_PORTS_START( pipibibs )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
/* Various features on bit mask 0x000f - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x0006, 0x0006 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "200k only" )
PORT_DIPSETTING( 0x0000, "200k and every 300k" )
PORT_DIPSETTING( 0x0004, "150k and every 200k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x0008, 0x0000, "Nudity" )
PORT_DIPSETTING( 0x0008, DEF_STR( Low ) )
PORT_DIPSETTING( 0x0000, "High, but censored" )
PORT_DIPNAME( 0x0007, 0x0006, "Territory" )
PORT_DIPSETTING( 0x0006, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0007, "Europe (Nova Apparate GMBH & Co)" )
PORT_DIPSETTING( 0x0004, DEF_STR( USA ) )
PORT_DIPSETTING( 0x0005, "USA (Romstar)" )
PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Asia ) )
PORT_DIPSETTING( 0x0002, "Hong Kong (Honest Trading Co.)" )
PORT_DIPSETTING( 0x0003, "Taiwan" )
INPUT_PORTS_END
static INPUT_PORTS_START( whoopee )
PORT_INCLUDE(pipibibs)
PORT_MODIFY("JMPR")
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(c2map_r, NULL) /* bit 0x10 sound ready */
INPUT_PORTS_END
static INPUT_PORTS_START( pipibibi )
PORT_INCLUDE(pipibibs)
PORT_MODIFY("VBL")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* This video HW doesn't use this VBlank input */
PORT_MODIFY("DSWA")
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_DIPLOCATION("SW1:2") /* This video HW doesn't support flip screen */
/* Various features on bit mask 0x000d - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x80000, 0x80000 )
PORT_MODIFY("JMPR")
/* Bit Mask 0x80000 is used here to signify European Coinage for MAME purposes - not read on the real board! */
PORT_DIPNAME( 0x80007, 0x00007, "Territory" )
PORT_DIPSETTING( 0x00002, DEF_STR( World ) )
// PORT_DIPSETTING( 0x00003, DEF_STR( World ) )
PORT_DIPSETTING( 0x00007, "World (Ryouta Kikaku)" )
PORT_DIPSETTING( 0x80005, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x00004, DEF_STR( USA ) )
PORT_DIPSETTING( 0x00000, "Japan (Ryouta Kikaku)" )
PORT_DIPSETTING( 0x00001, "Hong Kong (Honest Trading Co.)" )
PORT_DIPSETTING( 0x80006, "Spain & Portugal (APM Electronics SA)" )
INPUT_PORTS_END
static INPUT_PORTS_START( fixeight )
PORT_INCLUDE( toaplan2 )
PORT_START("IN3")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START3 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_MODIFY("SYS")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_SERVICE_NO_TOGGLE(0x0004, IP_ACTIVE_HIGH) /* Service input is a push-button marked 'Test SW' */
#if 0
PORT_START("FAKE") /* Fake input, to display message */
PORT_DIPNAME( 0x0000, 0x0000, " Press service button" )
PORT_DIPSETTING( 0x0000, "" )
PORT_DIPNAME( 0x0000, 0x0000, " for game keeping options" )
PORT_DIPSETTING( 0x0000, "" )
PORT_DIPNAME( 0x0000, 0x0000, "" )
PORT_DIPSETTING( 0x0000, "" )
#endif
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, "Maximum Players" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, "2" )
PORT_DIPSETTING( 0x0001, "3" )
PORT_DIPNAME( 0x0004, 0x0004, "Shooting style" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0004, "Semi-auto" )
PORT_DIPSETTING( 0x0000, "Fully-auto" )
/* Various features on bit mask 0x000a - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x000e, 0x0008 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0000, "500k and every 500k" )
PORT_DIPSETTING( 0x0008, "300k only" )
PORT_DIPSETTING( 0x0004, "300k and every 300k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0009, "Territory" )
PORT_DIPSETTING( 0x0009, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0008, "Europe (Taito Corp)" )
PORT_DIPSETTING( 0x000b, DEF_STR( USA ) )
PORT_DIPSETTING( 0x000a, "USA (Taito America Corp)" )
PORT_DIPSETTING( 0x000e, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x000f, "Japan (Taito corp)" )
PORT_DIPSETTING( 0x0007, "South East Asia" )
PORT_DIPSETTING( 0x0006, "South East Asia (Taito corp)" )
PORT_DIPSETTING( 0x0001, "Korea" )
PORT_DIPSETTING( 0x0000, "Korea (Taito Corp)" )
PORT_DIPSETTING( 0x0003, "Hong Kong" )
PORT_DIPSETTING( 0x0002, "Hong Kong (Taito Corp)" )
PORT_DIPSETTING( 0x0005, "Taiwan" )
PORT_DIPSETTING( 0x0004, "Taiwan (Taito corp)" )
INPUT_PORTS_END
static INPUT_PORTS_START( fixeighb )
PORT_INCLUDE(fixeight)
PORT_MODIFY("DSWA")
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_DIPLOCATION("SW1:2") /* This video HW doesn't support flip screen */
PORT_MODIFY("JMPR")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Doesn't exist? */
INPUT_PORTS_END
static INPUT_PORTS_START( grindstm )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Cocktail ) )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x000f, 0x0009 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "200k only" )
PORT_DIPSETTING( 0x0000, "300k and 800k" )
PORT_DIPSETTING( 0x0004, "300k and every 800k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0009, "Territory" )
PORT_DIPSETTING( 0x0009, DEF_STR( Europe ) )
// PORT_DIPSETTING( 0x0008, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x000d, DEF_STR( USA ) )
// PORT_DIPSETTING( 0x000b, DEF_STR( USA ) )
PORT_DIPSETTING( 0x000c, "USA (American Sammy Corporation license)" )
// PORT_DIPSETTING( 0x000a, "USA (American Sammy Corporation license)" )
PORT_DIPSETTING( 0x0007, "South East Asia" )
PORT_DIPSETTING( 0x0006, "South East Asia (Charterfield license)" )
// PORT_DIPSETTING( 0x000f, "Korea" )
// PORT_DIPSETTING( 0x000e, "Korea" )
PORT_DIPSETTING( 0x0001, "Korea" )
PORT_DIPSETTING( 0x0000, "Korea (Unite Trading license)" )
PORT_DIPSETTING( 0x0003, "Hong Kong" )
PORT_DIPSETTING( 0x0002, "Hong Kong (Charterfield license)" )
PORT_DIPSETTING( 0x0005, "Taiwan" )
PORT_DIPSETTING( 0x0004, "Taiwan (Anomoto International Inc license)" )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* bit 0x10 sound ready */
INPUT_PORTS_END
static INPUT_PORTS_START( vfive )
PORT_INCLUDE(grindstm)
PORT_MODIFY("JMPR") /* (6) Territory Jumper block */
/* Territory is forced to Japan in this set. */
PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* bit 0x10 sound ready */
INPUT_PORTS_END
static INPUT_PORTS_START( batsugun )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, "Continue Mode" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0001, "Discount" )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x00ff, 0x00ff ) /* Actually European coinage isn't used */
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "1500k only" )
PORT_DIPSETTING( 0x0000, "1000k only" )
PORT_DIPSETTING( 0x0004, "500k and every 600k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000f, 0x0009, "Territory" )
PORT_DIPSETTING( 0x0009, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0008, "Europe (Taito Corp license)" )
PORT_DIPSETTING( 0x000b, DEF_STR( USA ) )
PORT_DIPSETTING( 0x000a, "USA (Taito Corp license)" )
PORT_DIPSETTING( 0x000f, DEF_STR( Japan ) )
// PORT_DIPSETTING( 0x000e, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x000d, "Japan (Taito Corp license)" )
// PORT_DIPSETTING( 0x000c, "Japan (Taito Corp license)" )
PORT_DIPSETTING( 0x0007, "South East Asia" )
PORT_DIPSETTING( 0x0006, "South East Asia (Taito Corp license)" )
PORT_DIPSETTING( 0x0001, "Korea" )
PORT_DIPSETTING( 0x0000, "Korea (Unite Trading license)" )
PORT_DIPSETTING( 0x0003, "Hong Kong" )
PORT_DIPSETTING( 0x0002, "Hong Kong (Taito Corp license)" )
PORT_DIPSETTING( 0x0005, "Taiwan" )
PORT_DIPSETTING( 0x0004, "Taiwan (Taito Corp license)" )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* bit 0x10 sound ready */
INPUT_PORTS_END
static INPUT_PORTS_START( snowbro2 )
PORT_INCLUDE( toaplan2 )
PORT_START("IN3")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START3 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("IN4")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START4 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, "Continue Mode" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0001, "Discount" )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see TOAPLAN2_COINAGE above */
TOAPLAN2_COINAGE( 0x1C00, 0x0800 ) /* European coinage is shown in service mode, but not used */
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "200k only" )
PORT_DIPSETTING( 0x0000, "100k only" )
PORT_DIPSETTING( 0x0004, "100k and every 500k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "4" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, "Maximum Players" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, "2" )
PORT_DIPSETTING( 0x0000, "4" )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x2000, 0x0000, "Show All Rights Reserved" )
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Yes ) )
PORT_DIPNAME( 0x1c00, 0x0800, "Territory" )
PORT_DIPSETTING( 0x0800, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0400, DEF_STR( USA ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) )
PORT_DIPSETTING( 0x1800, "South East Asia" )
PORT_DIPSETTING( 0x0c00, "Korea" )
PORT_DIPSETTING( 0x1000, "Hong Kong" )
PORT_DIPSETTING( 0x1400, "Taiwan" )
PORT_BIT( 0xc3ff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( sstriker )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see RAIZING8_COINAGE above */
TOAPLAN2_COINAGE( 0x000e, 0x0004 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "200k only" )
PORT_DIPSETTING( 0x0000, "Every 300k" )
PORT_DIPSETTING( 0x0004, "200k and 500k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000e, 0x0004, "Territory" )
PORT_DIPSETTING( 0x0004, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0002, DEF_STR( USA ) )
// PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) ) /* Wrong Title screen - use Mahoudai*/
PORT_DIPSETTING( 0x0006, "South East Asia" )
PORT_DIPSETTING( 0x0008, "China" )
PORT_DIPSETTING( 0x000a, "Korea (Unite Trading license)" )
PORT_DIPSETTING( 0x000c, "Hong Kong" )
PORT_DIPSETTING( 0x000e, "Taiwan" )
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( mahoudai )
PORT_INCLUDE(sstriker)
PORT_MODIFY("JMPR")
/* Not used, it seems. This setting forces Japan for Territory */
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( kingdmgp )
PORT_INCLUDE( toaplan2 )
PORT_MODIFY("DSWA")
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
/* Various features on bit mask 0x000e - see above */
/* Coinage on bit mask 0x00f0 - see RAIZING8_COINAGE above */
TOAPLAN2_COINAGE( 0x000e, 0x0004 )
PORT_MODIFY("DSWB")
/* Difficulty on bit mask 0x0003 - see above */
PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x000c, DEF_STR( None ) )
PORT_DIPSETTING( 0x0008, "200k only" )
PORT_DIPSETTING( 0x0000, "Every 300k" )
PORT_DIPSETTING( 0x0004, "200k and 500k" )
PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "5" )
PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_MODIFY("JMPR")
PORT_DIPNAME( 0x000e, 0x0004, "Territory" )
PORT_DIPSETTING( 0x0004, DEF_STR( Europe ) )
PORT_DIPSETTING( 0x0002, DEF_STR( USA ) )
// PORT_DIPSETTING( 0x0000, DEF_STR( Japan ) ) /* Title screen is wrong when set to Japan */
PORT_DIPSETTING( 0x0006, "South East Asia" )
PORT_DIPSETTING( 0x0008, "China" )
PORT_DIPSETTING( 0x000a, "Korea (Unite Trading license)" )
PORT_DIPSETTING( 0x000c, "Hong Kong" )
PORT_DIPSETTING( 0x000e, "Taiwan" )
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( shippumd )
PORT_INCLUDE(kingdmgp)
PORT_MODIFY("JMPR")
/* Title screen is corrupt for anything but Japan setting so this forces it to Japan */
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( bgaregga )
PORT_START("VBL")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_BIT( 0xfffe, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("IN2")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("SYS")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SERVICE1 )
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_SERVICE2 )
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Unknown/Unused */
PORT_START("DSWA")
PORT_SERVICE_DIPLOC(0x0001, IP_ACTIVE_HIGH, "SW1:1")
PORT_DIPNAME( 0x0002, 0x0000, "Credits to Start" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0000, "1" )
PORT_DIPSETTING( 0x0002, "2" )
PORT_DIPNAME( 0x001c, 0x0000, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:3,4,5")
PORT_DIPSETTING( 0x0018, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0014, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x001c, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x00e0, 0x0000, DEF_STR( Coin_B ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c) PORT_DIPLOCATION("SW1:6,7,8")
PORT_DIPSETTING( 0x00c0, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
PORT_DIPSETTING( 0x00a0, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
// PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
PORT_DIPSETTING( 0x0060, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_NOTEQUALS,0x001c)
/* When Coin_A is set to Free_Play, Coin_A becomes Coin_A and Coin_B, and the following dips occur */
PORT_DIPNAME( 0x0020, 0x0000, "Joystick Mode" ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0000, "90 degrees ACW" ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c)
PORT_DIPSETTING( 0x0020, DEF_STR( Normal ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c)
PORT_DIPNAME( 0x0040, 0x0000, "Effect" ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c)
PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c)
PORT_DIPNAME( 0x0080, 0x0000, "Music" ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c)
PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) PORT_CONDITION("DSWA",0x001c,PORTCOND_EQUALS,0x001c)
PORT_START("DSWB")
PORT_DIPNAME( 0x0003, 0x0000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0003, DEF_STR( Hardest ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Easy ) )
PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0070, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6,7")
PORT_DIPSETTING( 0x0030, "1" )
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_DIPSETTING( 0x0010, "4" )
PORT_DIPSETTING( 0x0040, "5" )
PORT_DIPSETTING( 0x0050, "6" )
PORT_DIPSETTING( 0x0060, DEF_STR( Infinite ) )
PORT_DIPSETTING( 0x0070, "Invulnerability (Cheat)" )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0000, DEF_STR( None ) ) PORT_CONDITION("JMPR",0x0003,PORTCOND_NOTEQUALS,0x0000) /* Non-Japan */
PORT_DIPSETTING( 0x0080, "Every 2000k" ) PORT_CONDITION("JMPR",0x0003,P