Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 recent contributor

Users who have contributed to this file recently

5628 lines (4622 sloc) 301 KB
// license:BSD-3-Clause
// copyright-holders:Jarek Parchanski, Nicola Salmoria, Mirko Buffoni
/******************************************************************************
Sega System 1 / System 2
driver by Jarek Parchanski, Nicola Salmoria, Mirko Buffoni
Up'n Down, Mister Viking, Flicky, SWAT, Water Match and Bull Fight are known
to run on IDENTICAL hardware (they were sold by Bally-Midway as ROM swaps).
DIP locations verified from manual for:
- wboy
- choplift
TODO: - remove patch in nobb if possible and fully understand the
ports involved in the protection
- different XTAL/divider configurations for some Star Jacker
cabinets? See you.tube/-a7srHVPb_U
*******************************************************************************
Main Snd Gfx1 Gfx2 Max Min
Game ROMs ROMs ROMs ROMs Pal? Intf EPR# EPR#
----------- ----- ----- ----- ----- ---- ---- ---- ----
starjack 6x8k 1x8k 6x8k 2x16k no ppi 5325(b) 5318
starjacks 6x8k 1x8k 6x8k 2x16k no ppi license
upndown 6x8k 1x8k 6x8k 2x16k no ppi 5521 5514
upndownu 6x8k 1x8k 6x8k 2x16k no ppi 5684
regulus 6x8k 1x8k 6x8k 2x16k no ppi 5645(a) 5638
reguluso 6x8k 1x8k 6x8k 2x16k no ppi 5645
regulusu 6x8k 1x8k 6x8k 2x16k no ppi 5955
mrviking 6x8k 1x8k 6x8k 2x16k no ppi 5876 5749
mrvikingj 6x8k 1x8k 6x8k 2x16k no ppi 5756
swat 6x8k 1x8k 6x8k 2x16k no ppi 5812 5805
flickys1 4x8k 1x8k 6x8k 2x16k no ppi ???? 5855
flickyo 4x8k 1x8k 6x8k 2x16k no ppi 5860(a)
flicky 2x16k 1x8k 6x8k 2x16k no pio 5979(a)
flickys2 2x16k 1x8k 6x8k 2x16k no pio 6622
wmatch 6x8k 1x8k 6x8k 2x16k no ppi ???? ????
bullfgt 6x8k 1x8k 6x8k 2x16k no ppi ???? 6069
thetogyu 3x16k 1x8k 6x8k 2x16k no pio 6073
spatter 3x16k 1x8k 6x8k 4x16k no pio 6394 6306
spattera 3x16k 1x8k 6x8k 4x16k no pio 6599 6306
ssanchan 3x16k 1x8k 6x8k 4x16k no pio 6312
pitfall2 3x16k 1x8k 6x8k 2x16k no pio 6458(a) 6454
pitfall2a 3x16k 1x8k 6x8k 2x16k no pio 6506
pitfall2u 3x16k 1x8k 6x8k 2x16k no pio 6625(a)
seganinj 3x16k 1x8k 6x8k 4x16k no pio ???? 6546
seganinju 3x16k 1x8k 6x8k 4x16k no pio 7150
nprinceso 3x16k 1x8k 6x8k 4x16k no pio 6552
nprincesb 3x16k 1x8k 6x8k 4x16k no pio bootleg
ninja 3x16k 1x8k 6x8k 4x16k no pio 6595
nprinces 6x8k 1x8k 6x8k 4x16k no ppi 6617
nprincesu 6x8k 1x8k 6x8k 4x16k no ppi 6578
imsorry 3x16k 1x8k 6x8k 2x16k no pio 6678 6645
imsorryj 3x16k 1x8k 6x8k 2x16k no pio 6649
teddybb 3x16k 1x8k 6x8k 4x16k no pio 6770 6735
teddybbo 3x16k 1x8k 6x8k 4x16k no pio 6741
teddybbobl 3x16k 1x8k 3x16k 4x16k no pio bootleg
hvymetal 3x32k 1x32k 6x16k 4x32k yes 6790 6778
myhero 3x16k 1x8k 6x8k 4x16k no pio 6964 6921
sscandal 3x16k 1x8k 6x8k 4x16k no pio 6927
myherok 3x16k 1x8k 6x8k 4x16k no pio bootleg?
4dwarrio 3x16k 1x8k 6x8k 4x16k no pio ???? ????
shtngmst 3x32k 1x32k 3x32k 7x32k yes 7102
shtngmste 3x32k 1x32k 3x32k 7x32k yes 7102(a) 7104
choplift 3x32k 1x32k 3x32k 4x32k yes 7126 7120
chopliftu 3x32k 1x32k 3x32k 4x32k yes 7154
chopliftbl 3x32k 1x32k 3x32k 4x32k yes bootleg
raflesia 3x16k 1x8k 6x8k 4x16k no pio 7413 7408
wboy2 6x8k 1x8k 6x8k 4x16k no ppi 7592 7485
wboy2u 6x8k 1x8k 6x8k 4x16k no ppi ????
wbdeluxe 6x8k 1x8k 6x8k 4x16k no ppi ????
wboy 3x16k 1x8k 6x8k 4x16k no pio 7491
wboyo 3x16k 1x8k 6x8k 4x16k no pio ????
wboy3 3x16k 1x8k 6x8k 4x16k no pio ????
wboyu 3x16k 1x8k 6x8k 4x16k no pio ????
wboy4 2x32k 1x32k 3x16k 2x32k no ????
wboysys2 2x32k 1x32k 3x32k 2x32k yes 7580
gardia 3x32k 1x16k 3x16k 4x32k yes 10255 10233
gardiab 3x32k 1x16k 3x16k 4x32k yes bootleg
brain 3x32k 1x32k 3x16k 3x32k yes ???? ????
tokisens 3x32k 1x32k 3x32k 4x32k yes 10963 10957
wbml 3x32k 1x32k 3x32k 4x32k yes 11033(a) 11027
wbmljo 3x32k 1x32k 3x32k 4x32k yes 11033
wbmljb 3x64k 1x32k 3x32k 4x32k yes bootleg
wbmlb 3x64k 1x32k 3x32k 4x32k yes bootleg
wbmlg 3x64k 1x32k 3x32k 4x32k yes bootleg
dakkochn 2x32k 1x32k 3x32k 4x32k yes 11225 11220
ufosensi 3x32k 1x32k 3x32k 4x32k yes 11663 11657
ufosensib 3x64k 1x32k 3x32k 4x32k yes bootleg
blockgal 2x16k 1x8k 6x8k 4x16k no ????
blockgalb 1x64k 1x8k 6x8k 4x16k no bootleg
nob 3x32k 1x16k 3x32k 4x32k yes
nobb 3x32k 1x16k 3x32k 4x32k yes
*******************************************************************************
Spatter (315-5099)
Sega 1984
This game runs on Sega System 1 hardware.
834-5583-12 SPATTER (sticker)
834-5542 daughter board with 4 eproms (EPR6306, EPR6307, EPR6308, EPR6309)
834-5540 daughter board with logic ICs
315-5099 custom Z80 CPU w/security
*******************************************************************************
Chop Lifter
Sega 1985
This game runs on Sega System 2 hardware.
171-5303-01
834-5795-03 CHOP LIFTER (sticker)
|-----------------------------------------------------------------|
|DSW2 DSW1 315-5011 EPR-7120.86 CXK5808 Z80A(2) 20MHz |
|TD62003 315-5012 EPR-7121.87 CXK5808 315-5152.10|
| EPR-7122.88 315-5138.11|
| EPR-7123.89 315-5049|
| |
| EPR-7152.90 |
|4 EPR-7153.91 M5M5165 |
|4 EPR-7154.92 M5M5165 |
|W M5M5165 |
|A 8255 DIP40 EPR-7127.4|
|Y 315-5139.50 EPR-7128.5|
| 2148 2148 2148 TL7705 EPR-7129.6|
| 2148 2148 2148 315-5025 |
| 315-5025 |
| 8MHz PR5317.37 315-5025 |
| Z80A(1) LED PR7117.8 |
| VOL 76489(1) PR7118.14 |
| 76489(2) EPR-7130.126 8147 PR7119.20 |
|LA4460 MB8128 8147 MB8128 |
|-----------------------------------------------------------------|
Notes:
315-5011 - Sega Custom IC (DIP40)
315-5012 - Sega Custom IC (DIP48)
315-5025 - Sega Custom IC (DIP18)
315-5138 - PAL16R4 (DIP20)
315-5139 - Signetics CK2605 (= PLS153) stamped '315-5139' (DIP20)
315-5049 - Sega Custom IC (SDIP64)
315-5152 - PAL16R4 (DIP20)
DIP40 - DIP40 socket for 8751 MCU. Some games like this version of Chop Lifter use a small
DIP40-sized board plugged into the socket marked 'SEGA 839-0001'. The board contains
nothing. The bottom of the board may have tracks going to other pins but it's obscured
by the socket connector. The top of the board has no tracks on it.
EPR-* - All EPROMs are 27C256 (DIP28)
MB8128 - Fujitsu MB8128 -10 2k x8 SRAM (DIP24)
2148 - Intel P2148H-3 1k x4 SRAM (DIP18)
2147 - Fujitsu MB2147-45 4k x1 SRAM (DIP18)
TL7705 - Texas Instruments TL7705 Voltage Supply Supervisor and Master Reset IC (DIP8)
LED - Power LED
8255 - NEC D8255 Programmable Peripheral Interface IC (DIP40)
Z80A(1) - Sharp LH0080A Z80A CPU, clock 4.000MHz [8/2]
Z80A(2) - Sharp LH0080A Z80A CPU, clock 4.000MHz [8/2]
CXK5808 - Sony CXK5808 SRAM. Size unknown, maybe 256 bytes x4-bit? (NDIP22)
M5M5165 - Mitsubishi M5M5165 8k x8 SRAM (DIP28)
SN76489(1) - Texas Instruments SN76489 4-channel Programmable Sound Generator. Clock 4.000MHz [8/2] (DIP16)
SN76489(2) - Texas Instruments SN76489 4-channel Programmable Sound Generator. Clock 2.000MHz [8/4] (DIP16)
LA4460 - Sanyo LA4460 12W AF Power Amplifier (SIL10)
TD62003 - Toshiba TD62003 7-channel Darlington Sink Driver (DIP16)
PR5317 - Fujitsu MB7114 Bipolar PROM (DIP16)
PR7117 - Fujitsu MB7114 Bipolar PROM (DIP16)
PR7118 - MMI 63S141 Bipolar PROM (DIP16)
PR7119 - Fujitsu MB7114 Bipolar PROM (DIP16)
Measurements
------------
OSC1 - 7.99992MHz
OSC2 - 19.99982MHz
VSync - 60.0952Hz
HSync - 15.4442kHz
Flicky sets version notes:
flicky, flickyo
---------------
The both seem to be very similar programs. Difficulty is easier than the S1,S2 sets.
DIPs are also shared 100% with each other.
flickys1, flickys2
------------------
Very noticeably more difficult than the other two sets. DIPs have changes (less lives
and bonus options). There is no screen which shows the bonus lives values like the
other two sets, either. flickys1 allows for DEMO SOUND which none of the others sets
seem to have access to.
******************************************************************************/
#include "emu.h"
#include "includes/system1.h"
#include "machine/segacrpt_device.h"
#include "machine/mc8123.h"
#include "sound/sn76496.h"
#include "speaker.h"
#define MASTER_CLOCK XTAL(20'000'000)
#define SOUND_CLOCK XTAL(8'000'000)
/*************************************
*
* Machine initialization
*
*************************************/
/*
About main CPU clocking:
A 20MHz crystal clocks an LS161 which counts up from either 10 or 11 to 16 before
carrying out and forcing a reload. The low bit of the reload value comes from the
Z80's /M1 signal. When /M1 is low (an opcode is being fetched), the reload count
is 10, which means the 20MHz clock is divided by 6. When /M1 is high, the reload
count is 11, which means the clock is divided by 5.
To account for this, we install custom cycle tables for the Z80. We clock the Z80
at 20MHz and count 5 cycles for each original Z80 cycle, plus an extra 2 cycles for
each opcode fetch (since the M1 line is low for 2 cycles per byte).
*/
static const uint8_t cc_op[0x100] = {
4*5+1*2,10*5+3*2, 7*5+1*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2, 4*5+1*2,11*5+1*2, 7*5+1*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2,
8*5+2*2,10*5+3*2, 7*5+1*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2,12*5+2*2,11*5+1*2, 7*5+1*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2,
7*5+2*2,10*5+3*2,16*5+3*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2, 7*5+2*2,11*5+1*2,16*5+3*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2,
7*5+2*2,10*5+3*2,13*5+3*2, 6*5+1*2,11*5+1*2,11*5+1*2,10*5+2*2, 4*5+1*2, 7*5+2*2,11*5+1*2,13*5+3*2, 6*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+2*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
7*5+1*2, 7*5+1*2, 7*5+1*2, 7*5+1*2, 7*5+1*2, 7*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 4*5+1*2, 7*5+1*2, 4*5+1*2,
5*5+1*2,10*5+1*2,10*5+3*2,10*5+3*2,10*5+3*2,11*5+1*2, 7*5+2*2,11*5+1*2, 5*5+1*2,10*5+1*2,10*5+3*2, 0*5 ,10*5+3*2,17*5+3*2, 7*5+2*2,11*5+1*2,
5*5+1*2,10*5+1*2,10*5+3*2,11*5+2*2,10*5+3*2,11*5+1*2, 7*5+2*2,11*5+1*2, 5*5+1*2, 4*5+1*2,10*5+3*2,11*5+2*2,10*5+3*2, 0*5 , 7*5+2*2,11*5+1*2,
5*5+1*2,10*5+1*2,10*5+3*2,19*5+1*2,10*5+3*2,11*5+1*2, 7*5+2*2,11*5+1*2, 5*5+1*2, 4*5+1*2,10*5+3*2, 4*5+1*2,10*5+3*2, 0*5 , 7*5+2*2,11*5+1*2,
5*5+1*2,10*5+1*2,10*5+3*2, 4*5+1*2,10*5+3*2,11*5+1*2, 7*5+2*2,11*5+1*2, 5*5+1*2, 6*5+1*2,10*5+3*2, 4*5+1*2,10*5+3*2, 0*5 , 7*5+2*2,11*5+1*2
};
static const uint8_t cc_cb[0x100] = {
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,15*5+2*2, 8*5+2*2
};
static const uint8_t cc_ed[0x100] = {
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2, 9*5+2*2,12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2, 9*5+2*2,
12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2, 9*5+2*2,12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2, 9*5+2*2,
12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2,18*5+2*2,12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2,18*5+2*2,
12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2, 8*5+2*2,12*5+2*2,12*5+2*2,15*5+2*2,20*5+4*2, 8*5+2*2,14*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
16*5+2*2,16*5+2*2,16*5+2*2,16*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,16*5+2*2,16*5+2*2,16*5+2*2,16*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
16*5+2*2,16*5+2*2,16*5+2*2,16*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,16*5+2*2,16*5+2*2,16*5+2*2,16*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2,
8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2, 8*5+2*2
};
static const uint8_t cc_xy[0x100] = {
( 4+4)*5+2*2,(10+4)*5+4*2,( 7+4)*5+2*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(11+4)*5+2*2,( 7+4)*5+2*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,
( 8+4)*5+3*2,(10+4)*5+4*2,( 7+4)*5+2*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,(12+4)*5+3*2,(11+4)*5+2*2,( 7+4)*5+2*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,
( 7+4)*5+3*2,(10+4)*5+4*2,(16+4)*5+4*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,(16+4)*5+4*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,
( 7+4)*5+3*2,(10+4)*5+4*2,(13+4)*5+4*2,( 6+4)*5+2*2,(23 )*5+3*2,(23 )*5+3*2,(19 )*5+4*2,( 4+4)*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,(13+4)*5+4*2,( 6+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 7+4)*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
(19 )*5+3*2,(19 )*5+3*2,(19 )*5+3*2,(19 )*5+3*2,(19 )*5+3*2,(19 )*5+3*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,( 4+4)*5+2*2,(19 )*5+3*2,( 4+4)*5+2*2,
( 5+4)*5+2*2,(10+4)*5+2*2,(10+4)*5+4*2,(10+4)*5+4*2,(10+4)*5+4*2,(11+4)*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,( 5+4)*5+2*2,(10+4)*5+2*2,(10+4)*5+4*2,( 0 )*5 ,(10+4)*5+4*2,(17+4)*5+4*2,( 7+4)*5+3*2,(11+4)*5+2*2,
( 5+4)*5+2*2,(10+4)*5+2*2,(10+4)*5+4*2,(11+4)*5+3*2,(10+4)*5+4*2,(11+4)*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,( 5+4)*5+2*2,( 4+4)*5+2*2,(10+4)*5+4*2,(11+4)*5+3*2,(10+4)*5+4*2,( 4 )*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,
( 5+4)*5+2*2,(10+4)*5+2*2,(10+4)*5+4*2,(19+4)*5+2*2,(10+4)*5+4*2,(11+4)*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,( 5+4)*5+2*2,( 4+4)*5+2*2,(10+4)*5+4*2,( 4+4)*5+2*2,(10+4)*5+4*2,( 4 )*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,
( 5+4)*5+2*2,(10+4)*5+2*2,(10+4)*5+4*2,( 4+4)*5+2*2,(10+4)*5+4*2,(11+4)*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2,( 5+4)*5+2*2,( 6+4)*5+2*2,(10+4)*5+4*2,( 4+4)*5+2*2,(10+4)*5+4*2,( 4 )*5+2*2,( 7+4)*5+3*2,(11+4)*5+2*2
};
static const uint8_t cc_xycb[0x100] = {
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,
20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,
20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,
20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,20*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,
23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2,23*5+4*2
};
/* extra cycles if jr/jp/call taken and 'interrupt latency' on rst 0-7 */
static const uint8_t cc_ex[0x100] = {
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
5*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, /* DJNZ */
5*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 5*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, /* JR NZ/JR Z */
5*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 5*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, /* JR NC/JR C */
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5, 0*5,
5*5, 5*5, 5*5, 5*5, 0*5, 0*5, 0*5, 0*5, 5*5, 5*5, 5*5, 5*5, 0*5, 0*5, 0*5, 0*5, /* LDIR/CPIR/INIR/OTIR LDDR/CPDR/INDR/OTDR */
6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5, 6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5,
6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5, 6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5,
6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5, 6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5,
6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5, 6*5, 0*5, 0*5, 0*5, 7*5, 0*5, 0*5, 2*5
};
void system1_state::machine_start()
{
uint32_t numbanks = (m_maincpu_region->bytes() - 0x10000) / 0x4000;
if (numbanks > 0)
m_bank1->configure_entries(0, numbanks, m_maincpu_region->base() + 0x10000, 0x4000);
else
m_bank1->configure_entry(0, m_maincpu_region->base() + 0x8000);
m_bank1->set_entry(0);
if (m_banked_decrypted_opcodes)
{
m_bank0d->set_base(m_banked_decrypted_opcodes.get());
m_bank1d->configure_entries(0, numbanks, m_banked_decrypted_opcodes.get() + 0x10000, 0x4000);
m_bank1d->set_entry(0);
}
m_maincpu->z80_set_cycle_tables(cc_op, cc_cb, cc_ed, cc_xy, cc_xycb, cc_ex);
m_mute_xor = 0x00;
save_item(NAME(m_dakkochn_mux_data));
save_item(NAME(m_videomode_prev));
save_item(NAME(m_mcu_control));
save_item(NAME(m_nob_maincpu_latch));
save_item(NAME(m_nob_mcu_latch));
save_item(NAME(m_nob_mcu_status));
}
MACHINE_START_MEMBER(system1_state,system2)
{
system1_state::machine_start();
m_mute_xor = 0x01;
}
void system1_state::machine_reset()
{
m_dakkochn_mux_data = 0;
}
/*************************************
*
* ROM banking
*
*************************************/
void system1_state::bank44_custom_w(uint8_t data, uint8_t prevdata)
{
/* bank bits are bits 6 and 2 */
m_bank1->set_entry(((data & 0x40) >> 5) | ((data & 0x04) >> 2));
}
void system1_state::bank0c_custom_w(uint8_t data, uint8_t prevdata)
{
/* bank bits are bits 3 and 2 */
m_bank1->set_entry((data & 0x0c) >> 2);
if(m_bank1d)
m_bank1d->set_entry((data & 0x0c) >> 2);
}
WRITE8_MEMBER(system1_state::videomode_w)
{
/* bit 6 is connected to the 8751 IRQ */
if (m_mcu != nullptr)
m_mcu->set_input_line(MCS51_INT1_LINE, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
/* handle any custom banking or other stuff */
if (m_videomode_custom != nullptr)
(this->*m_videomode_custom)(data, m_videomode_prev);
m_videomode_prev = data;
/* bit 0 is for the coin counters */
machine().bookkeeping().coin_counter_w(0, data & 1);
/* remaining signals are video-related */
system1_videomode_w(space, 0, data);
}
/*************************************
*
* DakkoChan House custom inputs
*
*************************************/
CUSTOM_INPUT_MEMBER(system1_state::dakkochn_mux_data_r)
{
static const char *const ports[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6" };
return ioport(ports[m_dakkochn_mux_data])->read();
}
CUSTOM_INPUT_MEMBER(system1_state::dakkochn_mux_status_r)
{
/* reads from here indicate which mux port is selected */
return 1 << (m_dakkochn_mux_data);
}
void system1_state::dakkochn_custom_w(uint8_t data, uint8_t prevdata)
{
/* bit 1 toggling on clocks the mux; we store the previous state in the high bit of dakkochn_mux_data */
if ((data & 0x02) && !(prevdata & 0x02))
m_dakkochn_mux_data = (m_dakkochn_mux_data + 1) % 7;
/* remaining stuff acts like bank0c */
bank0c_custom_w(data, prevdata);
}
/*************************************
*
* Shooting Master gun input
*
*************************************/
READ8_MEMBER(system1_state::shtngmst_gunx_r)
{
// x is slightly offset, and has a range of 00-fe
uint8_t x = ioport("GUNX")->read() - 0x12;
return (x == 0xff) ? 0xfe : x;
}
/*************************************
*
* Sound I/O
*
*************************************/
WRITE8_MEMBER(system1_state::sound_control_w)
{
/* bit 0 = MUTE (inverted sense on System 2) */
machine().sound().system_mute((data ^ m_mute_xor) & 1);
/* bit 6 = feedback from sound board that read occurrred */
/* bit 7 controls the sound CPU's NMI line */
m_soundcpu->set_input_line(INPUT_LINE_NMI, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
/* remaining bits are used for video RAM banking */
system1_videoram_bank_w(space, offset, data);
}
READ8_MEMBER(system1_state::sound_data_r)
{
/* if we have an 8255 PPI, get the data from the port and toggle the ack */
if (m_ppi8255 != nullptr)
{
m_ppi8255->pc6_w(0);
m_ppi8255->pc6_w(1);
return m_soundlatch->read();
}
/* if we have a Z80 PIO, get the data from the port and toggle the strobe */
else if (m_pio != nullptr)
{
uint8_t data = m_pio->port_read(z80pio_device::PORT_A);
m_pio->strobe(z80pio_device::PORT_A, false);
m_pio->strobe(z80pio_device::PORT_A, true);
return data;
}
return 0xff;
}
WRITE8_MEMBER(system1_state::soundport_w)
{
/* boost interleave when communicating with the sound CPU */
m_soundlatch->write(data);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
}
TIMER_DEVICE_CALLBACK_MEMBER(system1_state::soundirq_gen)
{
/* sound IRQ is generated on 32V, 96V, ... and auto-acknowledged */
m_soundcpu->set_input_line(0, HOLD_LINE);
}
/*************************************
*
* MCU I/O
*
*************************************/
WRITE8_MEMBER(system1_state::mcu_control_w)
{
/*
Bit 7 -> connects to TD62003 pins 5 & 6 @ IC151
Bit 6 -> via PLS153, when high, asserts the BUSREQ signal, halting the Z80
Bit 5 -> n/c
Bit 4 -> (with bit 3) Memory select: 0=Z80 program space, 1=banked ROM, 2=Z80 I/O space, 3=watchdog?
Bit 3 ->
Bit 2 -> n/c
Bit 1 -> n/c
Bit 0 -> Directly connected to Z80 /INT line
*/
/* boost interleave to ensure that the MCU can break the Z80 out of a HALT */
if (!BIT(m_mcu_control, 6) && BIT(data, 6))
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(10));
m_mcu_control = data;
m_maincpu->set_input_line(INPUT_LINE_HALT, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
m_maincpu->set_input_line(0, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
}
WRITE8_MEMBER(system1_state::mcu_io_w)
{
switch ((m_mcu_control >> 3) & 3)
{
case 0:
m_maincpu->space(AS_PROGRAM).write_byte(offset, data);
break;
case 2:
m_maincpu->space(AS_IO).write_byte(offset, data);
break;
default:
logerror("%03X: MCU movx write mode %02X offset %04X = %02X\n",
m_mcu->pc(), m_mcu_control, offset, data);
break;
}
}
READ8_MEMBER(system1_state::mcu_io_r)
{
switch ((m_mcu_control >> 3) & 3)
{
case 0:
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
case 1:
return m_maincpu_region->base()[offset + 0x10000];
case 2:
return m_maincpu->space(AS_IO).read_byte(offset);
default:
logerror("%03X: MCU movx read mode %02X offset %04X\n",
m_mcu->pc(), m_mcu_control, offset);
return 0xff;
}
}
TIMER_DEVICE_CALLBACK_MEMBER(system1_state::mcu_t0_callback)
{
/* The T0 line is clocked by something; if it is not clocked fast
enough, the MCU will fail; on shtngmst this happens after 3
VBLANKs without a tick.
choplift is even more picky about it, affecting scroll speed
*/
m_mcu->set_input_line(MCS51_T0_LINE, ASSERT_LINE);
m_mcu->set_input_line(MCS51_T0_LINE, CLEAR_LINE);
}
/*************************************
*
* nob MCU
*
*************************************/
READ8_MEMBER(system1_state::nob_mcu_latch_r)
{
return m_nob_mcu_latch;
}
WRITE8_MEMBER(system1_state::nob_mcu_latch_w)
{
m_nob_mcu_latch = data;
}
WRITE8_MEMBER(system1_state::nob_mcu_status_w)
{
m_nob_mcu_status = data;
}
WRITE8_MEMBER(system1_state::nob_mcu_control_p2_w)
{
/* bit 0 triggers a read from MCU port 0 */
if (((m_mcu_control ^ data) & 0x01) && !(data & 0x01))
m_nob_mcu_latch = m_nob_maincpu_latch;
/* bit 1 triggers a write from MCU port 0 */
if (((m_mcu_control ^ data) & 0x02) && !(data & 0x02))
m_nob_maincpu_latch = m_nob_mcu_latch;
/* bit 2 is toggled once near the end of an IRQ */
if (((m_mcu_control ^ data) & 0x04) && !(data & 0x04))
m_mcu->set_input_line(MCS51_INT0_LINE, CLEAR_LINE);
/* bit 3 is toggled once at the start of an IRQ, and again at the end */
if (((m_mcu_control ^ data) & 0x08) && !(data & 0x08))
{
//logerror("MCU IRQ(8) toggle\n");
}
m_mcu_control = data;
}
READ8_MEMBER(system1_state::nob_maincpu_latch_r)
{
return m_nob_maincpu_latch;
}
WRITE8_MEMBER(system1_state::nob_maincpu_latch_w)
{
m_nob_maincpu_latch = data;
m_mcu->set_input_line(MCS51_INT0_LINE, ASSERT_LINE);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
}
READ8_MEMBER(system1_state::nob_mcu_status_r)
{
return m_nob_mcu_status;
}
/*************************************
*
* nob bootleg protection
*
*************************************/
READ8_MEMBER(system1_state::nobb_inport1c_r)
{
// logerror("IN $1c : pc = %04x - data = 0x80\n",m_maincpu->pc());
return(0x80); // infinite loop (at 0x0fb3) until bit 7 is set
}
READ8_MEMBER(system1_state::nobb_inport22_r)
{
// logerror("IN $22 : pc = %04x - data = %02x\n",m_maincpu->pc(),nobb_inport17_step);
return(0);//nobb_inport17_step);
}
READ8_MEMBER(system1_state::nobb_inport23_r)
{
// logerror("IN $23 : pc = %04x - step = %02x\n",m_maincpu->pc(),m_nobb_inport23_step);
return(m_nobb_inport23_step);
}
WRITE8_MEMBER(system1_state::nobb_outport24_w)
{
// logerror("OUT $24 : pc = %04x - data = %02x\n",m_maincpu->pc(),data);
m_nobb_inport23_step = data;
}
/*************************************
*
* Main CPU address maps
*
*************************************/
/* main memory map */
void system1_state::system1_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank1");
map(0xc000, 0xcfff).ram().share("ram");
map(0xd000, 0xd7ff).ram().share("spriteram");
map(0xd800, 0xdfff).ram().w(FUNC(system1_state::system1_paletteram_w)).share("palette");
map(0xe000, 0xefff).rw(FUNC(system1_state::system1_videoram_r), FUNC(system1_state::system1_videoram_w));
map(0xf000, 0xf3ff).rw(FUNC(system1_state::system1_mixer_collision_r), FUNC(system1_state::system1_mixer_collision_w));
map(0xf400, 0xf7ff).w(FUNC(system1_state::system1_mixer_collision_reset_w));
map(0xf800, 0xfbff).rw(FUNC(system1_state::system1_sprite_collision_r), FUNC(system1_state::system1_sprite_collision_w));
map(0xfc00, 0xffff).w(FUNC(system1_state::system1_sprite_collision_reset_w));
}
void system1_state::decrypted_opcodes_map(address_map &map)
{
map(0x0000, 0x7fff).rom().share("decrypted_opcodes");
map(0x8000, 0xbfff).bankr("bank1");
map(0xc000, 0xcfff).ram().share("ram");
map(0xd000, 0xd7ff).ram().share("spriteram");
map(0xd800, 0xdfff).ram().w(FUNC(system1_state::system1_paletteram_w)).share("palette");
}
void system1_state::banked_decrypted_opcodes_map(address_map &map)
{
map(0x0000, 0x7fff).bankr("bank0d");
map(0x8000, 0xbfff).bankr("bank1d");
map(0xc000, 0xcfff).ram().share("ram");
map(0xd000, 0xd7ff).ram().share("spriteram");
map(0xd800, 0xdfff).ram().w(FUNC(system1_state::system1_paletteram_w)).share("palette");
}
/* same as normal System 1 except address map is shuffled (RAM/collision are swapped) */
void system1_state::nobo_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("bank1");
map(0xc000, 0xc3ff).rw(FUNC(system1_state::system1_mixer_collision_r), FUNC(system1_state::system1_mixer_collision_w));
map(0xc400, 0xc7ff).w(FUNC(system1_state::system1_mixer_collision_reset_w));
map(0xc800, 0xcbff).rw(FUNC(system1_state::system1_sprite_collision_r), FUNC(system1_state::system1_sprite_collision_w));
map(0xcc00, 0xcfff).w(FUNC(system1_state::system1_sprite_collision_reset_w));
map(0xd000, 0xd7ff).ram().share("spriteram");
map(0xd800, 0xdfff).ram().w(FUNC(system1_state::system1_paletteram_w)).share("palette");
map(0xe000, 0xefff).rw(FUNC(system1_state::system1_videoram_r), FUNC(system1_state::system1_videoram_w));
map(0xf000, 0xffff).ram().share("ram");
}
/* I/O map for systems with an 8255 PPI */
void system1_state::system1_ppi_io_map(address_map &map)
{
map.global_mask(0x1f);
map(0x00, 0x00).mirror(0x03).portr("P1");
map(0x04, 0x04).mirror(0x03).portr("P2");
map(0x08, 0x08).mirror(0x03).portr("SYSTEM");
map(0x0c, 0x0c).mirror(0x02).portr("SWA"); /* DIP2 */
map(0x0d, 0x0d).mirror(0x02).portr("SWB"); /* DIP1 some games read it from here... */
map(0x10, 0x10).mirror(0x03).portr("SWB"); /* DIP1 ... and some others from here but there are games which check BOTH! */
map(0x14, 0x17).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
}
/* I/O map for systems with a Z80 PIO chip */
void system1_state::system1_pio_io_map(address_map &map)
{
map.global_mask(0x1f);
map(0x00, 0x00).mirror(0x03).portr("P1");
map(0x04, 0x04).mirror(0x03).portr("P2");
map(0x08, 0x08).mirror(0x03).portr("SYSTEM");
map(0x0c, 0x0c).mirror(0x02).portr("SWA"); /* DIP2 */
map(0x0d, 0x0d).mirror(0x02).portr("SWB"); /* DIP1 some games read it from here... */
map(0x10, 0x10).mirror(0x03).portr("SWB"); /* DIP1 ... and some others from here but there are games which check BOTH! */
map(0x18, 0x1b).rw("pio", FUNC(z80pio_device::read), FUNC(z80pio_device::write));
}
/*************************************
*
* Sound CPU address maps
*
*************************************/
void system1_state::sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).mirror(0x1800).ram();
map(0xa000, 0xa000).mirror(0x1fff).w("sn1", FUNC(sn76489a_device::write));
map(0xc000, 0xc000).mirror(0x1fff).w("sn2", FUNC(sn76489a_device::write));
map(0xe000, 0xe000).mirror(0x1fff).r(FUNC(system1_state::sound_data_r));
}
/*************************************
*
* MCU address maps
*
*************************************/
void system1_state::mcu_io_map(address_map &map)
{
map(0x0000, 0xffff).rw(FUNC(system1_state::mcu_io_r), FUNC(system1_state::mcu_io_w));
}
/*************************************
*
* Generic port definitions
*
*************************************/
static INPUT_PORTS_START( system1_generic )
PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_START("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SWA")
PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWA:1,2,3,4")
PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" )
PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" )
PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" )
PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" )
PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
/* PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) Not allowed by mame coinage sorting, but valid */
PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWA:5,6,7,8")
PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" )
PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" )
PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" )
PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" )
PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" )
PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
/* PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) Not allowed by mame coinage sorting, but valid */
PORT_START("SWB")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWB:1")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SWB:2" )
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SWB:3" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SWB:4" )
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SWB:5" )
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SWB:6" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
/* If you don't like the description, feel free to change it */
PORT_DIPNAME( 0x80, 0x80, "SW 0 Read From" ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, "Port $0D" )
PORT_DIPSETTING( 0x00, "Port $10" )
INPUT_PORTS_END
/*************************************
*
* Game-specific port definitions
*
*************************************/
static INPUT_PORTS_START( starjack )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:2,3")
PORT_DIPSETTING( 0x06, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x38, 0x30, DEF_STR (Bonus_Life ) ) PORT_DIPLOCATION("SWB:4,5,6")
PORT_DIPSETTING( 0x38, "Every 20k" )
PORT_DIPSETTING( 0x28, "Every 30k" )
PORT_DIPSETTING( 0x18, "Every 40k" )
PORT_DIPSETTING( 0x08, "Every 50k" )
PORT_DIPSETTING( 0x30, "20k, then every 30k" )
PORT_DIPSETTING( 0x20, "30k, then every 40k" )
PORT_DIPSETTING( 0x10, "40k, then every 50k" )
PORT_DIPSETTING( 0x00, "50k, then every 60k" )
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7,8")
PORT_DIPSETTING( 0xc0, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x80, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
INPUT_PORTS_END
static INPUT_PORTS_START( starjacks )
PORT_INCLUDE( starjack )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x08, 0x08, "Ship" ) PORT_DIPLOCATION("SWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Single ) )
PORT_DIPSETTING( 0x00, "Multi" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "30k, then every 40k" )
PORT_DIPSETTING( 0x20, "40k, then every 50k" )
PORT_DIPSETTING( 0x10, "50k, then every 60k" )
PORT_DIPSETTING( 0x00, "60k, then every 70k" )
INPUT_PORTS_END
static INPUT_PORTS_START( regulus )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
INPUT_PORTS_END
/* Same as 'regulus', but no DEF_STR( Allow_Continue ) Dip Switch */
static INPUT_PORTS_START( reguluso )
PORT_INCLUDE( regulus )
PORT_MODIFY("SWB")
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( upndown )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* no button 2 */
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* no button 2 */
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:2,3")
PORT_DIPSETTING( 0x06, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:4,5,6")
PORT_DIPSETTING( 0x38, "10000" )
PORT_DIPSETTING( 0x30, "20000" )
PORT_DIPSETTING( 0x28, "30000" )
PORT_DIPSETTING( 0x20, "40000" )
PORT_DIPSETTING( 0x18, "50000" )
PORT_DIPSETTING( 0x10, "60000" )
PORT_DIPSETTING( 0x08, "70000" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7,8")
PORT_DIPSETTING( 0xc0, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x80, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
INPUT_PORTS_END
static INPUT_PORTS_START( mrviking )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, "Maximum Credits" ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, "9" )
PORT_DIPSETTING( 0x00, "99" )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "10k, 30k then every 30k" )
PORT_DIPSETTING( 0x20, "20k, 40k then every 30k" )
PORT_DIPSETTING( 0x10, "30k, then every 30k" )
PORT_DIPSETTING( 0x00, "40k, then every 30k" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
/* Same as 'mrviking', but no "Maximum Credits" Dip Switch and "Difficulty" Dip Switch is
handled by bit 7 instead of bit 6 (so bit 6 is unused) */
static INPUT_PORTS_START( mrvikingj )
PORT_INCLUDE( mrviking )
PORT_MODIFY("SWB")
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SWB:2" )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( swat )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:2,3")
PORT_DIPSETTING( 0x06, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:4,5,6")
PORT_DIPSETTING( 0x38, "30000" )
PORT_DIPSETTING( 0x30, "40000" )
PORT_DIPSETTING( 0x28, "50000" )
PORT_DIPSETTING( 0x20, "60000" )
PORT_DIPSETTING( 0x18, "70000" )
PORT_DIPSETTING( 0x10, "80000" )
PORT_DIPSETTING( 0x08, "90000" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( flicky )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* no button 2 */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* only 2way inputs */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* only 2way inputs */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* no button 2 */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* only 2way inputs */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* only 2way inputs */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "30000 80000 160000" )
PORT_DIPSETTING( 0x20, "30000 100000 200000" )
PORT_DIPSETTING( 0x10, "40000 120000 240000" )
PORT_DIPSETTING( 0x00, "40000 140000 280000" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( flickys1 )
PORT_INCLUDE( flicky )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x00, "5 (Infinite)" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "80000" )
PORT_DIPSETTING( 0x20, "160000" )
PORT_DIPSETTING( 0x10, "240000" )
PORT_DIPSETTING( 0x00, "320000" )
INPUT_PORTS_END
static INPUT_PORTS_START( flickys2 )
PORT_INCLUDE( flickys1 )
PORT_MODIFY("SWB")
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SWB:2" )
INPUT_PORTS_END
static INPUT_PORTS_START( wmatch )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_8WAY
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY
PORT_MODIFY("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_MODIFY("SYSTEM")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* TURN P1 */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL /* TURN P2 */
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, "Time" ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x08, "Fast" )
PORT_DIPSETTING( 0x04, "Faster" )
PORT_DIPSETTING( 0x00, "Fastest" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( bullfgt )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "30000" )
PORT_DIPSETTING( 0x20, "50000" )
PORT_DIPSETTING( 0x10, "70000" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
INPUT_PORTS_END
static INPUT_PORTS_START( spatter )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "40k, 120k and 480k" )
PORT_DIPSETTING( 0x20, "50k and 200k" )
PORT_DIPSETTING( 0x10, "100k only" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x40, 0x40, "Reset Timer/Objects On Life Loss" ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
INPUT_PORTS_END
static INPUT_PORTS_START( pitfall2 )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "20000 50000" )
PORT_DIPSETTING( 0x00, "30000 70000" )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_DIPNAME( 0x40, 0x40, "Time" ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x00, "2 Minutes" )
PORT_DIPSETTING( 0x40, "3 Minutes" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( pitfall2u )
PORT_INCLUDE( pitfall2 )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:2,3")
PORT_DIPSETTING( 0x06, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x18, 0x18, "Starting Stage" ) PORT_DIPLOCATION("SWB:4,5")
PORT_DIPSETTING( 0x18, "1" )
PORT_DIPSETTING( 0x10, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x00, "4" )
INPUT_PORTS_END
static INPUT_PORTS_START( seganinj )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_MODIFY("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x00, "240" )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "20k 70k 120k 170k" )
PORT_DIPSETTING( 0x00, "50k 100k 150k 200k" )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( imsorry )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0C, 0x0C, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0C, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "30000" )
PORT_DIPSETTING( 0x20, "40000" )
PORT_DIPSETTING( 0x10, "50000" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
INPUT_PORTS_END
static INPUT_PORTS_START( teddybb )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x00, "252" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "100k 400k" )
PORT_DIPSETTING( 0x20, "200k 600k" )
PORT_DIPSETTING( 0x10, "400k 800k" )
PORT_DIPSETTING( 0x00, "600k" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( hvymetal )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "50000 100000" )
PORT_DIPSETTING( 0x20, "60000 120000" )
PORT_DIPSETTING( 0x10, "70000 150000" )
PORT_DIPSETTING( 0x00, "100000" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
INPUT_PORTS_END
static INPUT_PORTS_START( myhero )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "30000" )
PORT_DIPSETTING( 0x20, "50000" )
PORT_DIPSETTING( 0x10, "70000" )
PORT_DIPSETTING( 0x00, "90000" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( 4dwarrio )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:2,3")
PORT_DIPSETTING( 0x06, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:4,5,6")
PORT_DIPSETTING( 0x38, "30000" )
PORT_DIPSETTING( 0x30, "40000" )
PORT_DIPSETTING( 0x28, "50000" )
PORT_DIPSETTING( 0x20, "60000" )
PORT_DIPSETTING( 0x18, "70000" )
PORT_DIPSETTING( 0x10, "80000" )
PORT_DIPSETTING( 0x08, "90000" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
static INPUT_PORTS_START( brain )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( gardia )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "5k, 20k and 30k" )
PORT_DIPSETTING( 0x20, "10k, 25k and 50k" )
PORT_DIPSETTING( 0x10, "15k, 30k and 60k" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
/* Manual states "Always On" */
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( raflesia )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Infinite ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5,6")
PORT_DIPSETTING( 0x30, "20k, 70k and 120k" )
PORT_DIPSETTING( 0x20, "30k, 80k and 150k" )
PORT_DIPSETTING( 0x10, "50k, 100k and 200k" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
INPUT_PORTS_END
static INPUT_PORTS_START( wboy )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* down - unused */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* up - unused */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* down - unused */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* up - unused */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "30k 100k 170k 240k" )
PORT_DIPSETTING( 0x00, "30k 120k 210k 300k" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x20, DEF_STR( Yes ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( wboy3 )
PORT_INCLUDE( wboy )
PORT_MODIFY("SWB") /* DSW0 */
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "1" )
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x04, "3" )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
INPUT_PORTS_END
/* same as wboy, additional Energy Consumption switch */
static INPUT_PORTS_START( wbdeluxe )
PORT_INCLUDE( wboy )
PORT_MODIFY("P1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Has to be 0 otherwise the game resets */
/* if you die after level 1. */
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x80, 0x00, "Energy Consumption" ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x00, "Slow" )
PORT_DIPSETTING( 0x80, "Fast" )
INPUT_PORTS_END
static INPUT_PORTS_START( wboyu )
PORT_INCLUDE( wboy )
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWB:1")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x06, 0x06, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:2,3")
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x06, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SWA:1,2,3")
PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 4C_2C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 2C_2C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWA:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWA:5")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWA:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, "Mode" ) PORT_DIPLOCATION("SWA:7,8")
PORT_DIPSETTING( 0xc0, "Normal Game" )
PORT_DIPSETTING( 0x80, DEF_STR( Free_Play ) )
PORT_DIPSETTING( 0x40, "Test Mode" )
PORT_DIPSETTING( 0x00, "Endless Game" )
INPUT_PORTS_END
static INPUT_PORTS_START( nob )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) // shot
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) // fly
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // shot
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // fly
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWA:1,2")
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWA:3,4")
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x30, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA:5,6")
PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x30, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA:7")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SWA:8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:1,2")
PORT_DIPSETTING( 0x02, "2" )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "99" )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x08, "40k, 80k, 120k and 160k" )
PORT_DIPSETTING( 0x0c, "50k, 100k and 150k" )
PORT_DIPSETTING( 0x04, "60k, 120k and 180k" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( choplift )
PORT_INCLUDE( system1_generic )
PORT_MODIFY("SWB")
PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWA:1,2,3,4")
PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" )
PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" )
PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" )
PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" )
PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWA:5,6,7,8")
PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" )
PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" )
PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" )
PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" )
PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" )
PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWB:1")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "20k 70k 120k 170k" )
PORT_DIPSETTING( 0x00, "50k 100k 150k 200k" )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( shtngmst )
PORT_INCLUDE( choplift )
PORT_MODIFY("P1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("P2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x01, 0x01, "SWA" ) PORT_DIPLOCATION("SWB:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("TRIGGER") /* trigger is in here */
PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("GUNX") /* 1c */
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(48) PORT_KEYDELTA(8)
PORT_START("GUNY") /* 1d */
PORT_BIT( 0xff, 0x90, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, -1.0, 0.0, 0) PORT_MINMAX(0x20, 0xff) PORT_SENSITIVITY(64) PORT_KEYDELTA(8) PORT_REVERSE
PORT_START("18") /* 18 */
/* what is this? check the game code... */
PORT_DIPNAME( 0x01, 0x01, "port 18" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( wboysys2 )
PORT_INCLUDE( choplift )
PORT_MODIFY("P1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* down - unused */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* up - unused */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_MODIFY("P2")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* down - unused */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* up - unused */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "30k 100k 170k 240k" )
PORT_DIPSETTING( 0x00, "30k 120k 210k 300k" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x20, DEF_STR( Yes ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
INPUT_PORTS_END
/* Notes about the bootleg version (as this is the only "working" one) :
Coinage is almost the same as the other Sega games.
However, when you set DSW1 to 00, you enter a pseudo "free play" mode :
- When you insert a coin, or press the "Service" button, you are given 2 credits
and this number is NEVER incremented nor decremented
- You are given 3 lives at start and this number is NEVER decremented
(it can however be incremented depending on the "Bonus Life" Dip Switch)
If only one nibble is set to 0, it will give a standard 1C_1C.
There is an ingame bug with the "Bonus Life" Dip Switch, but I don't know if it's only
a "feature" of the bootleg :
- Check routine at 0x2366, and you'll notice that 0xc02d (player 1) and 0xc02e (player 2)
act like a "pointer" to the bonus life table (0x5ab6 or 0x5abb)
- Once you get enough points, 1 life is added, and the pointer is incremented
- There is however NO test to the limit of this pointer ! So, once you've got your 5th
extra life at 150k, the pointed value will be 3 (= extra life at 30k), and as your
score is over this value, you'll be given another extra life ... and so on ...
Bits 2 and 6 of DSW0 aren't tested in the game (I can't tell about the "test mode")
Useful addresses:
- 0xc040 : credits (0x00-0x09)
- 0xc019 : player 1 lives
- 0xc021 : player 2 lives
- 0xc018 : player 1 level (0x01-0x14)
- 0xc020 : player 2 level (0x01-0x14)
- 0xc02d : player 1 bonus life "pointer"
- 0xc02e : player 1 bonus life "pointer"
- 0xc01a - 0xc01c : player 1 score (BCD coded - LSB first)
- 0xc022 - 0xc024 : player 1 score (BCD coded - LSB first)
- 0xc050 : when == 01, "free play" mode
- 0xc00c : when == 01, you end the level
*/
static INPUT_PORTS_START( blockgal )
PORT_INCLUDE( choplift )
PORT_MODIFY("P1")
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(60) PORT_KEYDELTA(15) PORT_REVERSE
PORT_MODIFY("P2")
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(60) PORT_KEYDELTA(15) PORT_REVERSE PORT_COCKTAIL
PORT_MODIFY("SYSTEM")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:4")
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "10k 30k 60k 100k 150k" )
PORT_DIPSETTING( 0x00, "30k 50k 100k 200k 300k" )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SWB:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( tokisens )
PORT_INCLUDE( choplift )
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x00, "1" )
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( tokisensa )
PORT_INCLUDE( tokisens )
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( wbml )
PORT_INCLUDE( choplift )
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x04, "3" )
PORT_DIPSETTING( 0x0c, "4" )
PORT_DIPSETTING( 0x08, "5" )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) // starts with 2 coins inserted
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "30000 100000 200000" )
PORT_DIPSETTING( 0x00, "50000 150000 250000" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x40, 0x40, "Test Mode" ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( dakkochn )
PORT_INCLUDE( choplift )
PORT_MODIFY("P1")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(system1_state, dakkochn_mux_data_r)
PORT_MODIFY("P2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(system1_state, dakkochn_mux_status_r)
PORT_MODIFY("SYSTEM")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) /* start 1 & 2 not connected. */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
/*TODO: Dip-Switches */
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x04, "3" )
PORT_DIPSETTING( 0x0c, "4" )
PORT_DIPSETTING( 0x08, "5" )
/* 0x00 gives 4 lives */
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x10, "30000 100000 200000" )
PORT_DIPSETTING( 0x00, "50000 150000 250000" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x40, 0x40, "Test Mode" ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("KEY0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_BET )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("KEY6")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
/*
To enter Test Mode all DIP Switches in DSW1 must be ON (example Difficulty = Easy)
To get Infinite Lives all DIP Switches in DSW0 must be ON
*/
static INPUT_PORTS_START( ufosensi )
PORT_INCLUDE( choplift )
PORT_MODIFY("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_MODIFY("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
PORT_MODIFY("SWA")
PORT_DIPNAME( 0x03, 0x01, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:1,2")
PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x01, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x03, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:3,4")
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x04, "4" )
// PORT_DIPSETTING( 0x08, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWB:5")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:6")
PORT_DIPSETTING( 0x20, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWB:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Invulnerability" ) PORT_DIPLOCATION("SWB:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
/*************************************
*
* Graphics definitions
*
*************************************/
static const gfx_layout charlayout =
{
8,8,
RGN_FRAC(1,3),
3,
{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
{ STEP8(0,1) },
{ STEP8(0,8) },
8*8
};
static GFXDECODE_START( gfx_system1 )
GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 256 )
GFXDECODE_END
/*************************************
*
* Machine driver
*
*************************************/
/* original board with 64kbit ROMs and an 8255 PPI for outputs */
void system1_state::sys1ppi(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MASTER_CLOCK); /* not really, see notes above */
m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::system1_map);
m_maincpu->set_addrmap(AS_IO, &system1_state::system1_ppi_io_map);
m_maincpu->set_vblank_int("screen", FUNC(system1_state::irq0_line_hold));
Z80(config, m_soundcpu, SOUND_CLOCK/2);
m_soundcpu->set_addrmap(AS_PROGRAM, &system1_state::sound_map);
TIMER(config, "soundirq", 0).configure_scanline(FUNC(system1_state::soundirq_gen), "screen", 32, 64);
config.set_maximum_quantum(attotime::from_hz(6000));
I8255A(config, m_ppi8255);
m_ppi8255->out_pa_callback().set(FUNC(system1_state::soundport_w));
m_ppi8255->out_pb_callback().set(FUNC(system1_state::videomode_w));
m_ppi8255->out_pc_callback().set(FUNC(system1_state::sound_control_w));
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); /* needed for proper hardware collisions */
m_screen->set_raw(MASTER_CLOCK/2, 640, 0, 512, 260, 0, 224);
m_screen->set_screen_update(FUNC(system1_state::screen_update_system1));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_system1);
PALETTE(config, m_palette).set_format(palette_device::BGR_233, 2048);
/* sound hardware */
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
SN76489A(config, "sn1", SOUND_CLOCK/4).add_route(ALL_OUTPUTS, "mono", 0.50);
/* 2nd SN's clock is selectable via jumper */
SN76489A(config, "sn2", SOUND_CLOCK/2).add_route(ALL_OUTPUTS, "mono", 0.50);
}
/* reduced visible area for scrolling games */
void system1_state::sys1ppis(machine_config &config)
{
sys1ppi(config);
/* video hardware */
m_screen->set_visarea(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1);
}
/* revised board with 128kbit ROMs and a Z80 PIO for outputs */
void system1_state::sys1pio(machine_config &config)
{
sys1ppi(config);
m_maincpu->set_addrmap(AS_IO, &system1_state::system1_pio_io_map);
config.device_remove("ppi8255");
Z80PIO(config, m_pio, MASTER_CLOCK);
m_pio->out_pa_callback().set(FUNC(system1_state::soundport_w));
m_pio->out_ardy_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI);
m_pio->out_pb_callback().set(FUNC(system1_state::videomode_w));
}
void system1_state::encrypted_sys1ppi_maps(machine_config &config)
{
m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::system1_map);
m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map);
m_maincpu->set_addrmap(AS_IO, &system1_state::system1_ppi_io_map);
m_maincpu->set_vblank_int("screen", FUNC(system1_state::irq0_line_hold));
}
void system1_state::encrypted_sys1pio_maps(machine_config &config)
{
m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::system1_map);
m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map);
m_maincpu->set_addrmap(AS_IO, &system1_state::system1_pio_io_map);
m_maincpu->set_vblank_int("screen", FUNC(system1_state::irq0_line_hold));
}
void system1_state::encrypted_sys2_mc8123_maps(machine_config &config)
{
m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::system1_map);
m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map);
m_maincpu->set_addrmap(AS_IO, &system1_state::system1_ppi_io_map);
m_maincpu->set_vblank_int("screen", FUNC(system1_state::irq0_line_hold));
}
void system1_state::sys1pioxb(machine_config &config)
{
sys1pio(config);
MC8123(config.replace(), m_maincpu, MASTER_CLOCK);
encrypted_sys1pio_maps(config);
}
void system1_state::sys1ppix_315_5178(machine_config &config)
{
sys1ppi(config);
segacrp2_z80_device &z80(SEGA_315_5178(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys1ppix_315_5179(machine_config &config)
{
sys1ppi(config);
segacrp2_z80_device &z80(SEGA_315_5179(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys1ppix_315_5051(machine_config &config)
{
sys1ppi(config);
segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1ppix_315_5048(machine_config &config)
{
sys1ppi(config);
segacrpt_z80_device &z80(SEGA_315_5048(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1ppix_315_5033(machine_config &config)
{
sys1ppi(config);
segacrpt_z80_device &z80(SEGA_315_5033(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1ppix_315_5065(machine_config &config)
{
sys1ppi(config);
segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1ppix_315_5098(machine_config &config)
{
sys1ppi(config);
segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5177(machine_config &config)
{
sys1pio(config);
segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys1piox_315_5162(machine_config &config)
{
sys1pio(config);
segacrp2_z80_device &z80(SEGA_315_5162(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys1piox_317_0006(machine_config &config)
{
sys1pio(config);
segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys1piox_315_5135(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5135(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5132(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5132(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5155(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5155(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5110(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5110(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5051(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5051(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5098(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5098(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5102(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5102(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5133(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5133(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5093(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5093(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piox_315_5065(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5065(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
/* reduced visible area for scrolling games */
void system1_state::sys1pios(machine_config &config)
{
sys1pio(config);
m_screen->set_visarea(2*(0*8+8), 2*(32*8-1-8), 0*8, 28*8-1);
}
void system1_state::sys1piosx_315_5099(machine_config &config)
{
sys1pio(config);
segacrpt_z80_device &z80(SEGA_315_5099(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1piosx_315_spat(machine_config &config)
{
sys1pios(config);
segacrpt_z80_device &z80(SEGA_315_SPAT(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1pio_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1ppisx_315_5064(machine_config &config)
{
sys1ppis(config);
segacrpt_z80_device &z80(SEGA_315_5064(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
void system1_state::sys1ppisx_315_5041(machine_config &config)
{
sys1ppis(config);
segacrpt_z80_device &z80(SEGA_315_5041(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(":decrypted_opcodes");
}
/* this describes the additional 8751 MCU when present */
void system1_state::mcu(machine_config &config)
{
/* basic machine hardware */
m_maincpu->remove_vblank_int();
I8751(config, m_mcu, SOUND_CLOCK);
m_mcu->set_addrmap(AS_IO, &system1_state::mcu_io_map);
m_mcu->port_out_cb<1>().set(FUNC(system1_state::mcu_control_w));
m_screen->screen_vblank().set_inputline("mcu", MCS51_INT0_LINE);
// This interrupt is driven by pin 15 of a PAL16R4 (315-5138 on Choplifter), based on the vertical count.
// The actual duty cycle likely differs from VBLANK, which is another output from the same PAL.
TIMER(config, "mcu_t0", 0).configure_periodic(FUNC(system1_state::mcu_t0_callback), attotime::from_usec(2500));
}
/* alternate program map with RAM/collision swapped */
void system1_state::nob(machine_config &config)
{
sys1ppi(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &system1_state::nobo_map);
}
void system1_state::nobm(machine_config &config)
{
nob(config);
/* basic machine hardware */
I8751(config, m_mcu, SOUND_CLOCK);
m_mcu->port_in_cb<0>().set(FUNC(system1_state::nob_mcu_latch_r));
m_mcu->port_out_cb<0>().set(FUNC(system1_state::nob_mcu_latch_w));
m_mcu->port_out_cb<1>().set(FUNC(system1_state::nob_mcu_status_w));
m_mcu->port_out_cb<2>().set(FUNC(system1_state::nob_mcu_control_p2_w));
}
/* system2 video */
void system1_state::sys2(machine_config &config)
{
sys1ppi(config);
MCFG_MACHINE_START_OVERRIDE(system1_state,system2)
/* video hardware */
MCFG_VIDEO_START_OVERRIDE(system1_state,system2)
m_screen->set_screen_update(FUNC(system1_state::screen_update_system2));
}
void system1_state::sys2x(machine_config &config)
{
sys2(config);
m_maincpu->set_addrmap(AS_OPCODES, &system1_state::decrypted_opcodes_map);
}
void system1_state::sys2_315_5177(machine_config &config)
{
sys2(config);
segacrp2_z80_device &z80(SEGA_315_5177(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys2_315_5176(machine_config &config)
{
sys2(config);
segacrp2_z80_device &z80(SEGA_315_5176(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys2_317_0006(machine_config &config)
{
sys2(config);
segacrp2_z80_device &z80(SEGA_317_0006(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys2_317_0007(machine_config &config)
{
sys2(config);
segacrp2_z80_device &z80(SEGA_317_0007(config.replace(), m_maincpu, MASTER_CLOCK));
encrypted_sys1ppi_maps(config);
z80.set_decrypted_tag(m_decrypted_opcodes);
}
void system1_state::sys2xb(machine_config &config)
{
sys2(config);
MC8123(config.replace(), m_maincpu, MASTER_CLOCK);
encrypted_sys2_mc8123_maps(config);
}
void system1_state::sys2xboot(machine_config &config)
{
sys2(config);
m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map);
}
void system1_state::sys2m(machine_config &config)
{
sys2(config);
mcu(config);
}
/* system2 with rowscroll */
void system1_state::sys2row(machine_config &config)
{
sys2(config);
/* video hardware */
m_screen->set_screen_update(FUNC(system1_state::screen_update_system2_rowscroll));
}
void system1_state::sys2rowxb(machine_config &config)
{
sys2row(config);
MC8123(config.replace(), m_maincpu, MASTER_CLOCK);
encrypted_sys2_mc8123_maps(config);
}
void system1_state::sys2rowxboot(machine_config &config)
{
sys2row(config);
m_maincpu->set_addrmap(AS_OPCODES, &system1_state::banked_decrypted_opcodes_map);
}
void system1_state::sys2rowm(machine_config &config)
{
sys2row(config);
mcu(config);
}
/*************************************
*
* ROM definition(s)
*
*************************************/
/* Since the standard System 1 PROM has part # 5317, Star Jacker, whose first */
/* ROM is #5318, is probably the first or second System 1 game produced */
ROM_START( starjack )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5320b.129", 0x0000, 0x2000, CRC(7ab72ecd) SHA1(28d3f87851cccc94a86eb0217893de0baf8e62fd) )
ROM_LOAD( "epr-5321a.130", 0x2000, 0x2000, CRC(38b99050) SHA1(79fd23bb7db577d1dbf1b50503085eccdd17b98c) )
ROM_LOAD( "epr-5322a.131", 0x4000, 0x2000, CRC(103a595b) SHA1(6bb8a063279c93341ff472351b79c92795845f74) )
ROM_LOAD( "epr-5323.132", 0x6000, 0x2000, CRC(46af0d58) SHA1(6cfa288e28e3b415db5ef3cef8e8849259234af9) )
ROM_LOAD( "epr-5324.133", 0x8000, 0x2000, CRC(1e89efe2) SHA1(d36ef8f176d5e44884d3d0b9af81be6f7fbd0cde) )
ROM_LOAD( "epr-5325.134", 0xa000, 0x2000, CRC(d6e379a1) SHA1(27362b3e10d9d4235647eadb9cd1404700a8fb49) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5332.3", 0x0000, 0x2000, CRC(7a72ab3d) SHA1(4a6ad09949a438562d7043532d628cefdbb5a2fe) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5331.82", 0x0000, 0x2000, CRC(251d898f) SHA1(353067a75d583d5f53ce2f473b52a35dd912639f) )
ROM_LOAD( "epr-5330.65", 0x2000, 0x2000, CRC(eb048745) SHA1(a2e90d20a07608f43273e84d1eb22f195b19626c) )
ROM_LOAD( "epr-5329.81", 0x4000, 0x2000, CRC(3e8bcaed) SHA1(6d19543427b9c4d8d8f5ea0872cdf8cc4fe5018c) )
ROM_LOAD( "epr-5328.64", 0x6000, 0x2000, CRC(9ed7849f) SHA1(cc30d144ff70539bbc82c848c154e156a33b638c) )
ROM_LOAD( "epr-5327.80", 0x8000, 0x2000, CRC(79e92cb1) SHA1(03124ce123684b8469cf42be6ed5f0fffa64c480) )
ROM_LOAD( "epr-5326.63", 0xa000, 0x2000, CRC(ba7e2b47) SHA1(bc7528456fe8dee9aa21212aa996fc347c5d55b4) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5318.86", 0x0000, 0x4000, CRC(6f2e1fd3) SHA1(326d538551245fce67d0fdba85975e27093b7a93) )
ROM_LOAD( "epr-5319.93", 0x4000, 0x4000, CRC(ebee4999) SHA1(bb331be270dc1da63699533d9f02d73ce28f1bc5) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( starjacks )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "star_jacker_a1_ic29.129", 0x0000, 0x2000, CRC(59a22a1f) SHA1(4827b537f8df04429ed53c2119c67a32efcf04a2) )
ROM_LOAD( "star_jacker_a1_ic30.130", 0x2000, 0x2000, CRC(7f4597dc) SHA1(7574853fc2e38880f8493cf628100a890f7aa7dc) )
ROM_LOAD( "star_jacker_a1_ic31.131", 0x4000, 0x2000, CRC(6074c046) SHA1(5d2bd679d6a13a6c3b203662ce5496b801383db9) )
ROM_LOAD( "star_jacker_a1_ic32.132", 0x6000, 0x2000, CRC(1c48a3fa) SHA1(4a2e7798600bc4a5fd68533083547212d148d347) )
ROM_LOAD( "star_jacker_a1_ic33.133", 0x8000, 0x2000, CRC(7598bd51) SHA1(0c18b83dc7874aefcd94593ffbe2b50cc0329367) )
ROM_LOAD( "star_jacker_a1_ic34.134", 0xa000, 0x2000, CRC(f66fa604) SHA1(d7a81920217fcf7a687ba5e2d10abad5c78085d2) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "star_jacker_a1_ic3.3", 0x0000, 0x2000, CRC(7a72ab3d) SHA1(4a6ad09949a438562d7043532d628cefdbb5a2fe) ) /* same as EPR-5332 */
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "star_jacker_a1_ic82.82", 0x0000, 0x2000, CRC(251d898f) SHA1(353067a75d583d5f53ce2f473b52a35dd912639f) )
ROM_LOAD( "star_jacker_a1_ic65.65", 0x2000, 0x2000, CRC(0ab1893c) SHA1(97877f5d8be7a7b80bbf9fe8dae2acd47c411d64) )
ROM_LOAD( "epr-5456.81", 0x4000, 0x2000, CRC(3e8bcaed) SHA1(6d19543427b9c4d8d8f5ea0872cdf8cc4fe5018c) )
ROM_LOAD( "epr-5455.64", 0x6000, 0x2000, CRC(7f628ae6) SHA1(f859a505b543382b42a478c8ae5cd90f3ea2bc2c) ) /* Also found labeled as STAR JACKER A1 IC64 */
ROM_LOAD( "epr-5454.80", 0x8000, 0x2000, CRC(79e92cb1) SHA1(03124ce123684b8469cf42be6ed5f0fffa64c480) )
ROM_LOAD( "epr-5453.63", 0xa000, 0x2000, CRC(5bcb253e) SHA1(8c34a8377344940bcfb2495bfda3ffc6794f261b) ) /* Also found labeled as STAR JACKER A1 IC63 */
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "star_jacker_a1_ic86.86", 0x0000, 0x4000, CRC(6f2e1fd3) SHA1(326d538551245fce67d0fdba85975e27093b7a93) )
ROM_LOAD( "epr-5446.93", 0x4000, 0x4000, CRC(07987244) SHA1(8468b95684b1f62c6de6af1b1d405bfb333e4e26) ) /* Also found labeled as STAR JACKER A1 IC93 */
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( upndown )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr5516a.129", 0x0000, 0x2000, CRC(038c82da) SHA1(b7f403068ed9f97a4b960fb8863615892bb770ed) ) /* encrypted */
ROM_LOAD( "epr5517a.130", 0x2000, 0x2000, CRC(6930e1de) SHA1(8a5564c76e1fd20c8e5d95e5f538980e13c41744) ) /* encrypted */
ROM_LOAD( "epr-5518.131", 0x4000, 0x2000, CRC(2a370c99) SHA1(3d1b2f1cf0d5d2d6369a33e5b3b460a3113d6a3e) ) /* encrypted */
ROM_LOAD( "epr-5519.132", 0x6000, 0x2000, CRC(9d664a58) SHA1(84f2d012dac63e8d0de3935a76f5202539423a74) ) /* encrypted */
ROM_LOAD( "epr-5520.133", 0x8000, 0x2000, CRC(208dfbdf) SHA1(eff0c91ce6c2c1f6e191bcbf9ae83dd377cbb408) )
ROM_LOAD( "epr-5521.134", 0xa000, 0x2000, CRC(e7b8d87a) SHA1(3419318bf6d87b902433bfe3b92baf5e5bad7df3) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5535.3", 0x0000, 0x2000, CRC(cf4e4c45) SHA1(d14a204a9966d37f4b9f3ea4c1d371c9d04e750a) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5527.82", 0x0000, 0x2000, CRC(b2d616f1) SHA1(c079136a5d73e1d55ddbad6efb5e7067d0ff412b) )
ROM_LOAD( "epr-5526.65", 0x2000, 0x2000, CRC(8a8b33c2) SHA1(db796d5c4ab3f749287133eaf05818f89dc2afb7) )
ROM_LOAD( "epr-5525.81", 0x4000, 0x2000, CRC(e749c5ef) SHA1(2022cbd42ff0177cdd661bb00b1004459b6af83a) )
ROM_LOAD( "epr-5524.64", 0x6000, 0x2000, CRC(8b886952) SHA1(6a9c909d10ccb03a8af6fa9d8067946d60b91592) )
ROM_LOAD( "epr-5523.80", 0x8000, 0x2000, CRC(dede35d9) SHA1(6c47fa433e16ccc3fff9347a4fe8f0165d20a3d2) )
ROM_LOAD( "epr-5522.63", 0xa000, 0x2000, CRC(5e6d9dff) SHA1(4f18274f5dc349b99b3daec517ccf5ccbb932d1c) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5514.86", 0x0000, 0x4000, CRC(fcc0a88b) SHA1(ca7db3df10deb6720096e6c50eddd9b74c47f0a0) )
ROM_LOAD( "epr-5515.93", 0x4000, 0x4000, CRC(60908838) SHA1(aedff8ce07ab16942037e5aff212652e51c19e71) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( upndownu )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5679.129", 0x0000, 0x2000, CRC(c4f2f9c2) SHA1(7904ffb46a2c3ef69b9784f343ff37d81bbee11d) )
ROM_LOAD( "epr-5680.130", 0x2000, 0x2000, CRC(837f021c) SHA1(14cc846f03b71e0922689388a6757955cfd88bd8) )
ROM_LOAD( "epr-5681.131", 0x4000, 0x2000, CRC(e1c7ff7e) SHA1(440dc8c18183612c32486c617f5d7f38fd804f0e) )
ROM_LOAD( "epr-5682.132", 0x6000, 0x2000, CRC(4a5edc1e) SHA1(71f06d1c4a580fed07ad32c6d1f2d37d47ed95b1) )
ROM_LOAD( "epr-5520.133", 0x8000, 0x2000, CRC(208dfbdf) SHA1(eff0c91ce6c2c1f6e191bcbf9ae83dd377cbb408) ) /* epr-5683.133 */
ROM_LOAD( "epr-5684.133", 0xa000, 0x2000, CRC(32fa95da) SHA1(ebe87d28dde6b8356d40572e9f2cd35ec240075f) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5528.3", 0x0000, 0x2000, CRC(00cd44ab) SHA1(7f5385aa0773681329a4759b0fa6f975e3de6755) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5527.82", 0x0000, 0x2000, CRC(b2d616f1) SHA1(c079136a5d73e1d55ddbad6efb5e7067d0ff412b) )
ROM_LOAD( "epr-5526.65", 0x2000, 0x2000, CRC(8a8b33c2) SHA1(db796d5c4ab3f749287133eaf05818f89dc2afb7) )
ROM_LOAD( "epr-5525.81", 0x4000, 0x2000, CRC(e749c5ef) SHA1(2022cbd42ff0177cdd661bb00b1004459b6af83a) )
ROM_LOAD( "epr-5524.64", 0x6000, 0x2000, CRC(8b886952) SHA1(6a9c909d10ccb03a8af6fa9d8067946d60b91592) )
ROM_LOAD( "epr-5523.80", 0x8000, 0x2000, CRC(dede35d9) SHA1(6c47fa433e16ccc3fff9347a4fe8f0165d20a3d2) )
ROM_LOAD( "epr-5522.63", 0xa000, 0x2000, CRC(5e6d9dff) SHA1(4f18274f5dc349b99b3daec517ccf5ccbb932d1c) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5514.86", 0x0000, 0x4000, CRC(fcc0a88b) SHA1(ca7db3df10deb6720096e6c50eddd9b74c47f0a0) )
ROM_LOAD( "epr-5515.93", 0x4000, 0x4000, CRC(60908838) SHA1(aedff8ce07ab16942037e5aff212652e51c19e71) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( regulus )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5640a.129", 0x0000, 0x2000, CRC(dafb1528) SHA1(9140c5507bd931df3f8ef8d2910bc74f737b1a5a) ) /* encrypted */
ROM_LOAD( "epr-5641a.130", 0x2000, 0x2000, CRC(0fcc850e) SHA1(d2d6b06bf1e2dc404aa5451cc9f1b919fb5be0f5) ) /* encrypted */
ROM_LOAD( "epr-5642a.131", 0x4000, 0x2000, CRC(4feffa17) SHA1(9d9f4227c4e60a5cc53c369e7c9ce59ea8df3553) ) /* encrypted */
ROM_LOAD( "epr-5643a.132", 0x6000, 0x2000, CRC(b8ac7eb4) SHA1(f96bcde021060a8c1c5270b73487e24d1893e8e5) ) /* encrypted */
ROM_LOAD( "epr-5644.133", 0x8000, 0x2000, CRC(ffd05b7d) SHA1(6fe471548d227d834c012d5d148b1ea1c12dfd00) )
ROM_LOAD( "epr-5645a.134", 0xa000, 0x2000, CRC(6b4bf77c) SHA1(0200efb58b85a6873db44ffa70c3c14dbca958a6) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5652.3", 0x0000, 0x2000, CRC(74edcb98) SHA1(bc181c73a6009ca723e715650adb920b77bd311c) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5651.82", 0x0000, 0x2000, CRC(f07f3e82) SHA1(f86acf2de639ac89f80cdf627d1d6b5f5e4f1557) )
ROM_LOAD( "epr-5650.65", 0x2000, 0x2000, CRC(84c1baa2) SHA1(27ba8e2bb820913e58cb029da9c18d35e67728b8) )
ROM_LOAD( "epr-5649.81", 0x4000, 0x2000, CRC(6774c895) SHA1(28f74bcf1e6bc06db0984dcf86dd527e301b0c01) )
ROM_LOAD( "epr-5648.64", 0x6000, 0x2000, CRC(0c69e92a) SHA1(1ee18562250468f8f09a3062705422c28c740674) )
ROM_LOAD( "epr-5647.80", 0x8000, 0x2000, CRC(9330f7b5) SHA1(2c1be04de6ec652ea8a566eb0eb1a9bcb4c90e66) )
ROM_LOAD( "epr-5646.63", 0xa000, 0x2000, CRC(4dfacbbc) SHA1(e34d1e1aaf3ae7a138e75df5dedebfb4acd79340) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5638.86", 0x0000, 0x4000, CRC(617363dd) SHA1(c8024f541086a8a940e21219fa4522646aeb365a) )
ROM_LOAD( "epr-5639.93", 0x4000, 0x4000, CRC(a4ec5131) SHA1(033bf46d2625f99544a784fe3fa299cc1b1b48e1) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( reguluso )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5640.129", 0x0000, 0x2000, CRC(8324d0d4) SHA1(204713938bc85e8b62c161d8ae00d087ecc9089c) ) /* encrypted */
ROM_LOAD( "epr-5641.130", 0x2000, 0x2000, CRC(0a09f5c7) SHA1(0d45bff29442908b9f4111c89baea0326f0a9ec9) ) /* encrypted */
ROM_LOAD( "epr-5642.131", 0x4000, 0x2000, CRC(ff27b2f6) SHA1(fe294a53deffe2d46afa444fdae213e9d8763316) ) /* encrypted */
ROM_LOAD( "epr-5643.132", 0x6000, 0x2000, CRC(0d867df0) SHA1(adccc78072c0772ec20c0178a0be3426759900bf) ) /* encrypted */
ROM_LOAD( "epr-5644.133", 0x8000, 0x2000, CRC(ffd05b7d) SHA1(6fe471548d227d834c012d5d148b1ea1c12dfd00) )
ROM_LOAD( "epr-5645.134", 0xa000, 0x2000, CRC(57a2b4b4) SHA1(9de8f5948c7993f1b6d8bf7032f7fc3d9dff5c77) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5652.3", 0x0000, 0x2000, CRC(74edcb98) SHA1(bc181c73a6009ca723e715650adb920b77bd311c) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5651.82", 0x0000, 0x2000, CRC(f07f3e82) SHA1(f86acf2de639ac89f80cdf627d1d6b5f5e4f1557) )
ROM_LOAD( "epr-5650.65", 0x2000, 0x2000, CRC(84c1baa2) SHA1(27ba8e2bb820913e58cb029da9c18d35e67728b8) )
ROM_LOAD( "epr-5649.81", 0x4000, 0x2000, CRC(6774c895) SHA1(28f74bcf1e6bc06db0984dcf86dd527e301b0c01) )
ROM_LOAD( "epr-5648.64", 0x6000, 0x2000, CRC(0c69e92a) SHA1(1ee18562250468f8f09a3062705422c28c740674) )
ROM_LOAD( "epr-5647.80", 0x8000, 0x2000, CRC(9330f7b5) SHA1(2c1be04de6ec652ea8a566eb0eb1a9bcb4c90e66) )
ROM_LOAD( "epr-5646.63", 0xa000, 0x2000, CRC(4dfacbbc) SHA1(e34d1e1aaf3ae7a138e75df5dedebfb4acd79340) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5638.86", 0x0000, 0x4000, CRC(617363dd) SHA1(c8024f541086a8a940e21219fa4522646aeb365a) )
ROM_LOAD( "epr-5639.93", 0x4000, 0x4000, CRC(a4ec5131) SHA1(033bf46d2625f99544a784fe3fa299cc1b1b48e1) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( regulusu ) /* Sega game ID# 834-5328-02 REGULUS */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5950.129", 0x0000, 0x2000, CRC(3b047b67) SHA1(0164cb919a50013f23568f59caff19ff2d0bf11f) )
ROM_LOAD( "epr-5951.130", 0x2000, 0x2000, CRC(d66453ab) SHA1(9e339c716c646bd02bedbe27096b75f633554e7c) )
ROM_LOAD( "epr-5952.131", 0x4000, 0x2000, CRC(f3d0158a) SHA1(9b6d8b2e0a0bec45bfbb9f8ccc728e18e909685f) )
ROM_LOAD( "epr-5953.132", 0x6000, 0x2000, CRC(a9ad4f44) SHA1(1e051595aff34db06186542bcfc3849bc88eb5d4) )
ROM_LOAD( "epr-5644.133", 0x8000, 0x2000, CRC(ffd05b7d) SHA1(6fe471548d227d834c012d5d148b1ea1c12dfd00) )
ROM_LOAD( "epr-5955.134", 0xa000, 0x2000, CRC(65ddb2a3) SHA1(4f94eaac900da5ca512289e2339776b1139e03e1) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5652.3", 0x0000, 0x2000, CRC(74edcb98) SHA1(bc181c73a6009ca723e715650adb920b77bd311c) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5651.82", 0x0000, 0x2000, CRC(f07f3e82) SHA1(f86acf2de639ac89f80cdf627d1d6b5f5e4f1557) )
ROM_LOAD( "epr-5650.65", 0x2000, 0x2000, CRC(84c1baa2) SHA1(27ba8e2bb820913e58cb029da9c18d35e67728b8) )
ROM_LOAD( "epr-5649.81", 0x4000, 0x2000, CRC(6774c895) SHA1(28f74bcf1e6bc06db0984dcf86dd527e301b0c01) )
ROM_LOAD( "epr-5648.64", 0x6000, 0x2000, CRC(0c69e92a) SHA1(1ee18562250468f8f09a3062705422c28c740674) )
ROM_LOAD( "epr-5647.80", 0x8000, 0x2000, CRC(9330f7b5) SHA1(2c1be04de6ec652ea8a566eb0eb1a9bcb4c90e66) ) /* PCB pic shows this should be rev A */
ROM_LOAD( "epr-5646.63", 0xa000, 0x2000, CRC(4dfacbbc) SHA1(e34d1e1aaf3ae7a138e75df5dedebfb4acd79340) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5638.86", 0x0000, 0x4000, CRC(617363dd) SHA1(c8024f541086a8a940e21219fa4522646aeb365a) )
ROM_LOAD( "epr-5639.93", 0x4000, 0x4000, CRC(a4ec5131) SHA1(033bf46d2625f99544a784fe3fa299cc1b1b48e1) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( mrviking )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5873.129", 0x0000, 0x2000, CRC(14d21624) SHA1(70e185d03e782be908e6b5c6342cf6a7ebae618c) ) /* encrypted */
ROM_LOAD( "epr-5874.130", 0x2000, 0x2000, CRC(6df7de87) SHA1(c2200e0c2f322a08af10e9c2e9191d1c595801a4) ) /* encrypted */
ROM_LOAD( "epr-5875.131", 0x4000, 0x2000, CRC(ac226100) SHA1(11568db9fbca44013eeb0035c0a0a67d6dd18d00) ) /* encrypted */
ROM_LOAD( "epr-5876.132", 0x6000, 0x2000, CRC(e77db1dc) SHA1(7b1aa19a16fb44f6c69cf053e2e10e5179416796) ) /* encrypted */
ROM_LOAD( "epr-5755.133", 0x8000, 0x2000, CRC(edd62ae1) SHA1(9648f1ae3033c30ed8ab8d9c87b111756dab7b5e) )
ROM_LOAD( "epr-5756.134", 0xa000, 0x2000, CRC(11974040) SHA1(a0904d19d06fb5ef5eb6da0dc4efe556bc29b33e) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5763.3", 0x0000, 0x2000, CRC(d712280d) SHA1(8393dfb57d9af22b3280ecaef736b6f9d856dbee) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5762.82", 0x0000, 0x2000, CRC(4a91d08a) SHA1(4687ecc4061719fca5f85b2b290ebb7ced15ee5b) )
ROM_LOAD( "epr-5761.65", 0x2000, 0x2000, CRC(f7d61b65) SHA1(a7a992f52406413e931945be60b35175f8aea6c2) )
ROM_LOAD( "epr-5760.81", 0x4000, 0x2000, CRC(95045820) SHA1(d1848fc4f3d66603d0e8217373a37148aa2eeef5) )
ROM_LOAD( "epr-5759.64", 0x6000, 0x2000, CRC(5f9bae4e) SHA1(6fff6086a96be6aa28bec05d1c94c257bb29ef1e) )
ROM_LOAD( "epr-5758.80", 0x8000, 0x2000, CRC(808ee706) SHA1(d38ca7c6f36db6e35a3ce87bacdd70f293f23104) )
ROM_LOAD( "epr-5757.63", 0xa000, 0x2000, CRC(480f7074) SHA1(c54a1fa02e312676658d7c5392a5a841bdb15d44) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5749.86", 0x0000, 0x4000, CRC(e24682cd) SHA1(3f626f3e5e2db486ccf727e9869ab488643b4a8c) )
ROM_LOAD( "epr-5750.93", 0x4000, 0x4000, CRC(6564d1ad) SHA1(f246afee7e73bc30054b0e5dcb83fa0edd2d2164) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( mrvikingj )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5751.129", 0x0000, 0x2000, CRC(ae97a4c5) SHA1(12edd757bd5b00d42ada1e10c43817f71cfe77dc) ) /* encrypted */
ROM_LOAD( "epr-5752.130", 0x2000, 0x2000, CRC(d48e6726) SHA1(934b5e7568c85005c5ec40d75e49727a18562d50) ) /* encrypted */
ROM_LOAD( "epr-5753.131", 0x4000, 0x2000, CRC(28c60887) SHA1(9673335586221336c3373f5d7c8ae4fc11cc4b7f) ) /* encrypted */
ROM_LOAD( "epr-5754.132", 0x6000, 0x2000, CRC(1f47ed02) SHA1(d1147cd29fb342111f4f20a1d1d03263dce478f3) ) /* encrypted */
ROM_LOAD( "epr-5755.133", 0x8000, 0x2000, CRC(edd62ae1) SHA1(9648f1ae3033c30ed8ab8d9c87b111756dab7b5e) )
ROM_LOAD( "epr-5756.134", 0xa000, 0x2000, CRC(11974040) SHA1(a0904d19d06fb5ef5eb6da0dc4efe556bc29b33e) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5763.3", 0x0000, 0x2000, CRC(d712280d) SHA1(8393dfb57d9af22b3280ecaef736b6f9d856dbee) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5762.82", 0x0000, 0x2000, CRC(4a91d08a) SHA1(4687ecc4061719fca5f85b2b290ebb7ced15ee5b) )
ROM_LOAD( "epr-5761.65", 0x2000, 0x2000, CRC(f7d61b65) SHA1(a7a992f52406413e931945be60b35175f8aea6c2) )
ROM_LOAD( "epr-5760.81", 0x4000, 0x2000, CRC(95045820) SHA1(d1848fc4f3d66603d0e8217373a37148aa2eeef5) )
ROM_LOAD( "epr-5759.64", 0x6000, 0x2000, CRC(5f9bae4e) SHA1(6fff6086a96be6aa28bec05d1c94c257bb29ef1e) )
ROM_LOAD( "epr-5758.80", 0x8000, 0x2000, CRC(808ee706) SHA1(d38ca7c6f36db6e35a3ce87bacdd70f293f23104) )
ROM_LOAD( "epr-5757.63", 0xa000, 0x2000, CRC(480f7074) SHA1(c54a1fa02e312676658d7c5392a5a841bdb15d44) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5749.86", 0x0000, 0x4000, CRC(e24682cd) SHA1(3f626f3e5e2db486ccf727e9869ab488643b4a8c) )
ROM_LOAD( "epr-5750.93", 0x4000, 0x4000, CRC(6564d1ad) SHA1(f246afee7e73bc30054b0e5dcb83fa0edd2d2164) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( swat )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr5807b.129", 0x0000, 0x2000, CRC(93db9c9f) SHA1(56e9d9a33f04b4d5971c0db24cc8719a52e64678) ) /* encrypted */
ROM_LOAD( "epr-5808.130", 0x2000, 0x2000, CRC(67116665) SHA1(e8aa72f2835d38367be5e8a9313e51b64f452ee7) ) /* encrypted */
ROM_LOAD( "epr-5809.131", 0x4000, 0x2000, CRC(fd792fc9) SHA1(a0b4f0c2e537bd16f7345590da00f2622947d7e4) ) /* encrypted */
ROM_LOAD( "epr-5810.132", 0x6000, 0x2000, CRC(dc2b279d) SHA1(e740cbe239d379705fdffb3e500d6f5a2fece2e2) ) /* encrypted */
ROM_LOAD( "epr-5811.133", 0x8000, 0x2000, CRC(093e3ab1) SHA1(abf1f23dc26a7518357d0c1749e869b539c3bbed) )
ROM_LOAD( "epr-5812.134", 0xa000, 0x2000, CRC(5bfd692f) SHA1(adc8dcf643d8d0b0a1d0dda0494567263ea11a00) )
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5819.3", 0x0000, 0x2000, CRC(f6afd0fd) SHA1(06062648b9ebc70b4b5c30b043f537adc0052047) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5818.82", 0x0000, 0x2000, CRC(b22033d9) SHA1(ad217cd8dad178f3f2f1fd44a58adcc4887fb6b7) )
ROM_LOAD( "epr-5817.65", 0x2000, 0x2000, CRC(fd942797) SHA1(da7378e8d12cc2970df2efa075c944c79b3b74d2) )
ROM_LOAD( "epr-5816.81", 0x4000, 0x2000, CRC(4384376d) SHA1(78ae13a38d6368e44ba95642cce7f5515a5b6022) )
ROM_LOAD( "epr-5815.64", 0x6000, 0x2000, CRC(16ad046c) SHA1(a0b97e016e5cf43f223ecb6c5fe7dec7c8e9c098) )
ROM_LOAD( "epr-5814.80", 0x8000, 0x2000, CRC(be721c99) SHA1(bbb0afe2b195d60418014c36acf3de95adfd90d8) )
ROM_LOAD( "epr-5813.63", 0xa000, 0x2000, CRC(0d42c27e) SHA1(06b1d23cacfef3017e5951dc10e8471e9b3103d5) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5805.86", 0x0000, 0x4000, CRC(5a732865) SHA1(55c54e54f052187ddd957131e56400c9c432a6b2) )
ROM_LOAD( "epr-5806.93", 0x4000, 0x4000, CRC(26ac258c) SHA1(e4e9f929ab8ae7da74f885481cf94335d7553a1c) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.106", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
ROM_START( flicky )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5978a.116", 0x0000, 0x4000, CRC(296f1492) SHA1(52e2c63ce376ab8124b2c68bdfa432b6621cfa78) ) /* encrypted */
ROM_LOAD( "epr-5979a.109", 0x4000, 0x4000, CRC(64b03ef9) SHA1(7519aa7f036bce6d52a5d4be2418139559f9a8a5) ) /* encrypted */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5869.120", 0x0000, 0x2000, CRC(6d220d4e) SHA1(fe02a7a94a1ad046fc775a7f67f460c8d0f6dca6) )
ROM_REGION( 0xc000, "tiles", 0 )
ROM_LOAD( "epr-5868.62", 0x0000, 0x2000, CRC(7402256b) SHA1(5bd660ac24a2d0d8ad983e948674a82a2d2e8b49) )
ROM_LOAD( "epr-5867.61", 0x2000, 0x2000, CRC(2f5ce930) SHA1(4bc3bc6eb8f03926d3710c9f96fcc1b116e918d3) )
ROM_LOAD( "epr-5866.64", 0x4000, 0x2000, CRC(967f1d9a) SHA1(652be7848526c6e61db4a502f75d1689d2ff2f59) )
ROM_LOAD( "epr-5865.63", 0x6000, 0x2000, CRC(03d9a34c) SHA1(e158db3e0b86f2b8ad34cefc2714cb0a942efde7) )
ROM_LOAD( "epr-5864.66", 0x8000, 0x2000, CRC(e659f358) SHA1(cf59f1fb0f9fb77d5ac36be52b6ee946ee85d6de) )
ROM_LOAD( "epr-5863.65", 0xa000, 0x2000, CRC(a496ca15) SHA1(8c629a853486bbe049b1deecdc00f9e16b87698f) )
ROM_REGION( 0x8000, "sprites", 0 )
ROM_LOAD( "epr-5855.117", 0x0000, 0x4000, CRC(b5f894a1) SHA1(2c72dc16739dad155fcd572e1add067a7647f5bd) )
ROM_LOAD( "epr-5856.110", 0x4000, 0x4000, CRC(266af78f) SHA1(dcbfce550d10a1f2b3ce3e7e081fc008cb575708) )
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "pr-5317.76", 0x0000, 0x0100, CRC(648350b8) SHA1(c7986aa9127ef5b50b845434cb4e81dff9861cd2) )
ROM_END
// PCB label: 834-5411-11 FLICKY
ROM_START( flickya )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "epr-5978a.116", 0x0000, 0x4000, CRC(296f1492) SHA1(52e2c63ce376ab8124b2c68bdfa432b6621cfa78) ) /* encrypted */
ROM_LOAD( "epr-5979a.109", 0x4000, 0x4000, CRC(64b03ef9) SHA1(7519aa7f036bce6d52a5d4be2418139559f9a8a5) ) /* encrypted */
ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "epr-5869.120", 0x0000, 0x2000, CRC(6d220d4e) SHA1(fe02a7a94a1ad046fc775a7f67f460c8d0f6dca6) )
ROM_REGION( 0xc000, "tiles", 0