summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/othunder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/othunder.cpp')
-rw-r--r--src/mame/drivers/othunder.cpp887
1 files changed, 0 insertions, 887 deletions
diff --git a/src/mame/drivers/othunder.cpp b/src/mame/drivers/othunder.cpp
deleted file mode 100644
index 1c74e0cb0cf..00000000000
--- a/src/mame/drivers/othunder.cpp
+++ /dev/null
@@ -1,887 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Graves
-// thanks-to:Richard Bush
-/***************************************************************************
-
-Operation Thunderbolt (Taito)
----------------------
-
-David Graves
-
-(this is based on the F2 driver by Bryan McPhail, Brad Oliver, Andrew Prime,
-Nicola Salmoria. Thanks to Richard Bush and the Raine team, whose open
-source was very helpful in many areas particularly the sprites.)
-
-*************************************************************************
-
-Operation Thunderbolt
-Taito, 1988
-
-PCB Layout
-----------
-
-K1100381A
-J1100166A MAIN PCB
-|-----------------------------------------------------------------------|
-| VOL VOL TC0310FAM YM3016 B67-13.40 16MHz 24MHz PAL |
-| TL074 |------|TC0310FAM TL074 |
-| MB3735 MB3735|TAITO | Z80 |
-| |TC0140| 6264.46 26.686MHz 6116 6116 |
-| |SYT | 6116 6116 |
-| |------| YM2610 6116 6116 |
-| ADC0808 B67-08.67 6116 6116 |
-| MB3771 B67-07.44 |------| |
-|2 B67-06.66 |TAITO | |------| |
-|8 |------| |TC0020| |TAITO | |
-|| |TAITO | 62256.57 62256.55 |VAR | |TC0050| |
-|W |TC0220| |------| |------| |VDZ | |
-|A |IOC | |TAITO | B67-05.43 |------| |
-|Y |------| |TC0100| 6116.56 |
-| |SCN | 6116.54 |------| |
-| DSWA DSWB |------| B67-05.43 |TAITO | |
-| |TC0050| |
-| 93C46 |------| |VDZ | |
-| |------| B67-23.64 |TAITO | |----| |------| B67-04.4 |
-| |TAITO | |TC0320| | 6 | |
-| 555 |TC0110| B67-20.63 |OBR | | 8 | PAL |------| B67-03.3 |
-| |PCR | |------| | 0 | |TAITO | |
-| |------| B67-15.62 62256.52 | 0 | PAL |TC0050| B67-02.2 |
-| 6264.73 6264.74 | 0 | |VDZ | |
-| TC0070RGB B67-14.61 62256.51 |----| PAL |------| B67-01.1 |
-|-----------------------------------------------------------------------|
-Notes:
- 68000 running at 12.000MHz [24/2]
- Z80 running at 4.000MHz [24/6]
- YM2610 running at 8.000MHz [16/2]
- 62256.51 & 52 - Main program 68000 work RAM
- 6264.46 - Sound program Z80 work RAM
- 62256.55 & 57 - Background RAM, tied to TC0100SCN
- 6116.56 & 54 - Sprite attribute/enable RAM, tied to TC0320OBR
- Other 6116 RAM - Sprite RAM, connected to TC0020VAR & TC0050VDZ
- 6264.73 & 74 - Color RAM
-
- Taito Custom ICs -
- TC0220IOC
- TC0110PCR
- TC0140SYT
- TC0100SCN
- TC0320OBR
- TC0020VAR
- TC0050VDZ (x3)
- TC0070RGB (ceramic module)
- TC0310FAM (ceramic module)
- VSync: 60.0552Hz
- HSync: 15.4938kHz
-
- Note: The hardware outputs reversed video because the cabinet uses a mirror.
- The video can't be flipped/reversed with the DIPs, it's fixed in hardware.
-
- PCB edge connector is 28-way non-JAMMA.
- The gun is NOT a light gun, it uses two 5k-ohm potentiometers for the X-Y position
-
- Solder | Parts
- -------+-------
- Ground | 1 Ground
- Ground | 2 Ground
- +5v | 3 +5v
- +5v | 4 +5v
- -5v | 5 -5v
- 12v | 6 12v
- Key | 7 Key
- - L Speaker | 8 + L Speaker
- - R Speaker | 9 + R Speaker
- |10
- |11
- 1 P Start |12
- 2 P Start |13
- 1 P Bomb |14
- 1 P Trigger |15 2 P Bomb
- 2 P Trigger |16 Service Credit
- Coin B |17 Coin A
- Coin Counter B |18 Coin Counter A
- |19
- 2 P Gun Solenoid |20 1 P Gun Solenoid
- Video Green |21 Video Red
- Video Sync |22 Video Blue
- 2 P Gun X Position |23 Ground
- 2 P Gun Y Position |24 1 P Gun X Position
- |25 1 P Gun Y Position
- |26
- Ground |27 Ground
- Ground |28 Ground
-
-*************************************************************************
-
-Operation Thunderbolt operates on hardware very similar to the Taito Z
-system, in particular the game Spacegun. The lightgun hardware in these
-two (as well as the eeprom and calibration process) looks identical.
-
-The game has 4 separate layers of graphics - one 64x64 tiled scrolling
-background plane of 8x8 tiles, a similar foreground plane, a sprite plane,
-and a text plane with character definitions held in ram.
-
-The sprites are 16x8 tiles aggregated through a spritemap rom into 64x64
-zoomable sprites.
-
-The main difference is that Operation Thunderbolt uses only a single 68000
-CPU, whereas Spacegun has twin 68Ks. (Operation Thunderbolt has a Z80
-taking over sound duties, which Spacegun doesn't.)
-
-
-custom ICs
-----------
-TC0020VAR sprites??
-TC0050VDZ x3 sprites??
-TC0070RGB video DAC
-TC0100SCN tilemaps
-TC0110PCR palette
-TC0140SYT main/sub CPU interface + sub cpu address decoder and I/O interface
-TC0220IOC I/O interface
-TC0310FAM x2 sound volume and panning
-TC0320OBR sprites
-
-
-memory map
-----------
-68000:
-
-The address decoding is done by two PALs (IC37 and IC33). Part of the decoding,
-and also interrupt control, is done by another PAL (IC36). Luckily this time,
-the PALs HAVE been read, so the memory map is accurate :)
-
-Address Dir Data Name Description
------------------------- --- ---------------- --------- -----------------------
-000000xxxxxxxxxxxxxxxxx- R xxxxxxxxxxxxxxxx TROM0 program ROM
-000001xxxxxxxxxxxxxxxxx- R xxxxxxxxxxxxxxxx TROM1 program ROM
-00001000xxxxxxxxxxxxxxxx R/W xxxxxxxxxxxxxxxx TRAMH work RAM
-00001001-----------xxxx- R/W --------xxxxxxxx II/O TC0220IOC
-0001-----------------xxx R/W xxxxxxxxxxxxxxxx CLCS TC0110PCR
-0010--xxxxxxxxxxxxxxxxxx R/W xxxxxxxxxxxxxxxx SCCS TC0100SCN
-0011------------------xx R/W ------------xxxx SSCS TC0140SYT
-0100---------xxxxxxxxxxx R/W xxxxxxxxxxxxxxxx OBCS TC0320OBR
-0101----------------xxx- R/W --------xxxxxxxx A/DOE ADC0808 A/D converter (for lightgun)
-0110----------------000- W ---------------- IRQ5 acknowledge (automatically enabled on reset)
-0110----------------001- W ---------------- 6PR IRQ6 acknowledge (automatically enabled on reset)
-0110----------------010- W ---------------- n.c.
-0110----------------011- W ---------------- n.c.
-0110----------------100- W ---------------- n.c.
-0110----------------101- W ---------------- n.c.
-0110----------------110- W ---------------- n.c.
-0110----------------111- W ---------------- n.c.
-
-
-Z80:
-
-all of the address decoding is done by the TC0140SYT, which uses address bits
-A0 and A9-A15, and data bits D0-D3.
-
-Address Dir Data Name Description
----------------- --- -------- ----------- -----------------------
-00xxxxxxxxxxxxxx R xxxxxxxx ROM program ROM (TC0140SYT ROMCS0 pin)
-01xxxxxxxxxxxxxx R xxxxxxxx ROM program ROM (banked) (TC0140SYT ROMCS0, ROMA14 and ROMA15 pins)
-110xxxxxxxxxxxxx R/W xxxxxxxx SRAM work RAM (TC0140SYT RAMCS pin)
-1110000-------xx R/W xxxxxxxx OP_T YM2610 (TC0140SYT OPX pin)
-1110001--------x R/W ----xxxx TC0140SYT control
-1110010-------00 W ---xxxxx CH1_VOLR_CT TC0310FAM #1 CS2 (TC0140SYT CSA pin)
-1110010-------01 W ---xxxxx CH1_VOLF_CT TC0310FAM #1 CS1 (TC0140SYT CSA pin)
-1110010-------10 W ---xxxxx CH2_VOLR_CT TC0310FAM #2 CS2 (TC0140SYT CSA pin)
-1110010-------11 W ---xxxxx CH2_VOLF_CT TC0310FAM #2 CS1 (TC0140SYT CSA pin)
-1110011--------- W ??
-1110100---------
-1110101--------- R -------x ROTARY 1 TC0140SYT I/OA0 pin
-1110101--------- R ------x- ROTARY 2 TC0140SYT I/OA1 pin
-1110101--------- R -----x-- ROTARY 3 TC0140SYT I/OA2 pin
-1110110---------
-1110111--------- W ??
-1111000--------- W ??
-1111001--------- W ----xxxx TC0140SYT ROM bankswitch
-
-
-
-Notes:
-------
-- The game checks an external input called ROTARY in the schematics, not
- mentioned in the manual. The ROTARY input controls the separation between
- left and right players, the game adjusts the values written to the external
- volume controller depending on it.
- Possible values are: 111 (max) 011 (high) -01 (med) --0 (low). It's a
- rotary control so only one bit is supposed to be low.
-
-(Changed set led output to proper output port. --HowardC)
-- The outputs I'm turning on are actually the gun solenoid outputs, which
- would rattle the gun while firing.
-
-
-- BM, 060108 - The original flyer for this game has screenshots which clearly
- show the background is 4 pixels to the left on several game stages (you can
- see the edge of sprites overlapping past the right edge). Therefore I
- do not believe the TC0100SCN problem mentioned above actually exists. The
- current emulation appears to be accurate.
-
-
-Stephh's notes (based on the game M68000 code and some tests) :
-
-1) 'othunder', 'othundrj' and 'othunduo'
-
- - Region stored at 0x03fffe.w
- - Sets :
- * 'othunder' : region = 0x0003
- * 'othundrj' : region = 0x0001
- * 'othunduo' : region = 0x0002
- - These 3 games are 100% the same, only region differs !
- - Coinage relies on the region (code at 0x000db2) :
- * 0x0001 (Japan) and 0x0002 (US) use TAITO_COINAGE_JAPAN_OLD
- * 0x0003 (World) and 0x0004 (licensed to xxx) use TAITO_COINAGE_WORLD
- - Notice screen only if region = 0x0001
- - According to the manual, DSWB bit 6 determines continue pricing :
-
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Continue_Price ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x40, "Same as Start" )
-
- However, many conditions are required to make it work due to code at 0x00e0c4 :
- * region must not be 0x0001
- * "Allow Continue" Dip Switch must be set to "Yes"
- * coinage must be 2C_1C for both slots
- This is why this Dip Switch has NO effect in the following sets :
- * 'othunder' : coinage can't be 2C_1C for the 2 slots (coin B)
- * 'othundrj' : region = 0x0001
- - DSWB bit 7 ("Language") affects parts of the texts (not the ones in "demo mode")
- but the voices are always in English regardless of the region !
-
-
-2) 'othundu'
-
- - Region stored at 0x03fffe.w
- - Sets :
- * 'othundu' : region = 0x0002
- - Comparison with 'othunder' :
- * slightly different code at 0x023c4c
- * additional data from 0x023eee to 0x0240ed (0x0200 bytes)
- * same other notes as for 'othunder'
-
-
-TODO:
------
-
-- The "FIRE!" arrows pointing to padlocks are not in perfect sync with the
- background scrolling. Should they?
-
-- The quality of the zoomed sprites could probably be better. Drawing them as
- made by 16x8 tiles loses precision due to limitations of drawgfxzoom().
-
-- Schematics show a OBPRI output to control sprite priority. This doesn't seem
- to be used however, and isn't hooked up. See tc0220ioc_w().
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/othunder.h"
-#include "includes/taitoipt.h"
-#include "audio/taitosnd.h"
-
-#include "cpu/m68000/m68000.h"
-#include "cpu/z80/z80.h"
-#include "machine/adc0808.h"
-#include "machine/eepromser.h"
-#include "sound/2610intf.h"
-#include "sound/flt_vol.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-/***********************************************************
- INTERRUPTS
-***********************************************************/
-
-void othunder_state::irq_ack_w(offs_t offset, u16 data)
-{
- switch (offset)
- {
- case 0:
- m_maincpu->set_input_line(5, CLEAR_LINE);
- break;
-
- case 1:
- m_maincpu->set_input_line(6, CLEAR_LINE);
- break;
- }
-}
-
-WRITE_LINE_MEMBER( othunder_state::vblank_w )
-{
- if (state)
- m_maincpu->set_input_line(5, ASSERT_LINE);
-}
-
-WRITE_LINE_MEMBER( othunder_state::adc_eoc_w )
-{
- if (state)
- m_maincpu->set_input_line(6, ASSERT_LINE);
-}
-
-
-/******************************************************************
- EEPROM
-
-This is an earlier version of the eeprom used in some TaitoB games.
-The eeprom unlock command is different, and the write/clock/reset
-bits are different.
-******************************************************************/
-
-void othunder_state::eeprom_w(u8 data)
-{
-
-/* 0000000x SOL-1 (gun solenoid)
- 000000x0 SOL-2 (gun solenoid)
- 00000x00 OBPRI (sprite priority)
- 0000x000 (unused)
- 000x0000 eeprom reset (active low)
- 00x00000 eeprom clock
- 0x000000 eeprom in data
- x0000000 eeprom out data */
-
- /* Recoil Piston Motor Status */
- output().set_value("Player1_Recoil_Piston", data & 0x1 );
- output().set_value("Player2_Recoil_Piston", (data & 0x2) >>1 );
-
- if (data & 4)
- popmessage("OBPRI SET!");
-
- m_eeprom->di_write((data & 0x40) >> 6);
- m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
- m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-void othunder_state::coins_w(u8 data)
-{
- machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
- machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
- machine().bookkeeping().coin_counter_w(0, data & 0x04);
- machine().bookkeeping().coin_counter_w(1, data & 0x08);
-}
-
-
-/*****************************************
- SOUND
-*****************************************/
-
-void othunder_state::sound_bankswitch_w(u8 data)
-{
- m_z80bank->set_entry(data & 3);
-}
-
-void othunder_state::tc0310fam_w(offs_t offset, u8 data)
-{
- /* there are two TC0310FAM, one for CH1 and one for CH2 from the YM2610. The
- PSG output is routed to both chips. */
- int voll, volr;
-
- m_pan[offset] = data & 0x1f;
-
- /* PSG output (single ANALOG OUT pin on the YM2610, but we have three channels
- because we are using the AY-3-8910 emulation. */
- volr = (m_pan[0] + m_pan[2]) * 100 / (2 * 0x1f);
- voll = (m_pan[1] + m_pan[3]) * 100 / (2 * 0x1f);
- m_2610_0l->flt_volume_set_volume(voll / 100.0);
- m_2610_0r->flt_volume_set_volume(volr / 100.0);
-
- /* CH1 */
- volr = m_pan[0] * 100 / 0x1f;
- voll = m_pan[1] * 100 / 0x1f;
- m_2610_1l->flt_volume_set_volume(voll / 100.0);
- m_2610_1r->flt_volume_set_volume(volr / 100.0);
-
- /* CH2 */
- volr = m_pan[2] * 100 / 0x1f;
- voll = m_pan[3] * 100 / 0x1f;
- m_2610_2l->flt_volume_set_volume(voll / 100.0);
- m_2610_2r->flt_volume_set_volume(volr / 100.0);
-}
-
-
-/***********************************************************
- MEMORY STRUCTURES
-***********************************************************/
-
-void othunder_state::othunder_map(address_map &map)
-{
- map(0x000000, 0x07ffff).rom();
- map(0x080000, 0x08ffff).ram();
- map(0x090000, 0x09000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
-// map(0x09000c, 0x09000d).nopw(); /* ?? (keeps writing 0x77) */
- map(0x100000, 0x100007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_rbswap_word_w)); /* palette */
- map(0x200000, 0x20ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */
- map(0x220000, 0x22000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
- map(0x300001, 0x300001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w));
- map(0x300003, 0x300003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
- map(0x400000, 0x4005ff).ram().share("spriteram");
- map(0x500000, 0x500007).rw("adc", FUNC(adc0808_device::data_r), FUNC(adc0808_device::address_offset_start_w)).umask16(0x00ff);
- map(0x600000, 0x600003).w(FUNC(othunder_state::irq_ack_w));
-}
-
-
-/***************************************************************************/
-
-void othunder_state::z80_sound_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x7fff).bankr("z80bank");
- map(0xc000, 0xdfff).ram();
- map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
- map(0xe200, 0xe200).nopr().w(m_tc0140syt, FUNC(tc0140syt_device::slave_port_w));
- map(0xe201, 0xe201).rw(m_tc0140syt, FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w));
- map(0xe400, 0xe403).w(FUNC(othunder_state::tc0310fam_w)); /* pan */
- map(0xe600, 0xe600).nopw(); /* ? */
- map(0xea00, 0xea00).portr("ROTARY"); /* rotary input */
- map(0xee00, 0xee00).nopw(); /* ? */
- map(0xf000, 0xf000).nopw(); /* ? */
- map(0xf200, 0xf200).w(FUNC(othunder_state::sound_bankswitch_w));
-}
-
-
-
-/***********************************************************
- INPUT PORTS, DIPs
-***********************************************************/
-
-static INPUT_PORTS_START( othunder )
- /* 0x090000 -> 0x08a000 */
- PORT_START("DSWA")
- PORT_DIPUNUSED( 0x01, IP_ACTIVE_LOW )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Allow_Continue ) )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
- TAITO_DSWA_BITS_2_TO_3
- TAITO_COINAGE_WORLD
-
- /* 0x090002 -> 0x08a002 */
- PORT_START("DSWB")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x03, DEF_STR( Medium ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x0c, 0x0c, "Magazines/Rockets" )
- PORT_DIPSETTING( 0x0c, "5/3" )
- PORT_DIPSETTING( 0x08, "6/4" )
- PORT_DIPSETTING( 0x04, "7/5" )
- PORT_DIPSETTING( 0x00, "8/6" )
- PORT_DIPNAME( 0x30, 0x30, "Bullets per Magazine" )
- PORT_DIPSETTING( 0x00, "30" )
- PORT_DIPSETTING( 0x10, "35" )
- PORT_DIPSETTING( 0x30, "40" )
- PORT_DIPSETTING( 0x20, "50" )
- PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) /* see notes */
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Language ) )
- PORT_DIPSETTING( 0x00, DEF_STR( English ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) )
-
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
-
- PORT_START("IN1") /* unused */
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- /* speed of 13 is compromise between moving aim around screen fast
- enough and being accurate enough not to miss targets. 20 is too
- inaccurate, and 10 is too slow. */
-
- PORT_START("P1X")
- PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(13) PORT_REVERSE PORT_PLAYER(1)
-
- PORT_START("P1Y")
- PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_CROSSHAIR(Y, 1.0, -0.057, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(13) PORT_PLAYER(1)
-
- PORT_START("P2X")
- PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(13) PORT_REVERSE PORT_PLAYER(2)
-
- PORT_START("P2Y")
- PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_CROSSHAIR(Y, 1.0, -0.057, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(13) PORT_PLAYER(2)
-
- /* rotary volume control */
- PORT_START("ROTARY")
- PORT_CONFNAME( 0x07, 0x07, "Stereo Separation" )
- PORT_CONFSETTING( 0x07, "Maximum" )
- PORT_CONFSETTING( 0x03, DEF_STR( High ) )
- PORT_CONFSETTING( 0x01, DEF_STR( Medium ) )
- PORT_CONFSETTING( 0x00, DEF_STR( Low ) )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( othundrj )
- PORT_INCLUDE( othunder )
-
- PORT_MODIFY( "DSWA" )
- TAITO_COINAGE_JAPAN_OLD
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( othundu )
- PORT_INCLUDE( othundrj )
-
- PORT_MODIFY( "DSWB" )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Continue_Price ) ) /* see notes */
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x40, "Same as Start" )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Language ) )
- PORT_DIPSETTING( 0x00, DEF_STR( English ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) )
-INPUT_PORTS_END
-
-
-
-/***********************************************************
- GFX DECODING
-***********************************************************/
-
-static const gfx_layout tile16x8_layout =
-{
- 16,8,
- RGN_FRAC(1,1),
- 4,
- { STEP4(0,16) },
- { STEP16(0,1) },
- { STEP8(0,16*4) },
- 64*8
-};
-
-static GFXDECODE_START( gfx_othunder )
- GFXDECODE_ENTRY( "sprites", 0, tile16x8_layout, 0, 256 ) /* sprite parts */
-GFXDECODE_END
-
-
-/***********************************************************
- MACHINE DRIVERS
-***********************************************************/
-
-void othunder_state::machine_start()
-{
- m_z80bank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000);
-
- save_item(NAME(m_pan));
-}
-
-void othunder_state::othunder(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, 24_MHz_XTAL/2);
- m_maincpu->set_addrmap(AS_PROGRAM, &othunder_state::othunder_map);
-
- Z80(config, m_audiocpu, 16_MHz_XTAL/2/2);
- m_audiocpu->set_addrmap(AS_PROGRAM, &othunder_state::z80_sound_map);
-
- EEPROM_93C46_16BIT(config, m_eeprom);
-
- adc0808_device &adc(ADC0808(config, "adc", 16_MHz_XTAL/2/2/8));
- adc.eoc_callback().set(FUNC(othunder_state::adc_eoc_w));
- adc.in_callback<0>().set_ioport("P1X");
- adc.in_callback<1>().set_ioport("P1Y");
- adc.in_callback<2>().set_ioport("P2X");
- adc.in_callback<3>().set_ioport("P2Y");
-
- TC0220IOC(config, m_tc0220ioc, 0);
- m_tc0220ioc->read_0_callback().set_ioport("DSWA");
- m_tc0220ioc->read_1_callback().set_ioport("DSWB");
- m_tc0220ioc->read_2_callback().set_ioport("IN0");
- m_tc0220ioc->read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7);
- m_tc0220ioc->write_3_callback().set(FUNC(othunder_state::eeprom_w));
- m_tc0220ioc->write_4_callback().set(FUNC(othunder_state::coins_w));
- m_tc0220ioc->read_7_callback().set_ioport("IN2");
-
- /* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(60);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
- screen.set_size(40*8, 32*8);
- screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1);
- screen.set_screen_update(FUNC(othunder_state::screen_update));
- screen.set_palette(m_tc0110pcr);
- screen.screen_vblank().set(FUNC(othunder_state::vblank_w));
-
- GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_othunder);
-
- TC0100SCN(config, m_tc0100scn, 0);
- m_tc0100scn->set_offsets(4, 0);
- m_tc0100scn->set_palette(m_tc0110pcr);
-
- TC0110PCR(config, m_tc0110pcr, 0);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
-
- ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2));
- ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
- ymsnd.add_route(0, "2610.0l", 0.25);
- ymsnd.add_route(0, "2610.0r", 0.25);
- ymsnd.add_route(1, "2610.1l", 1.0);
- ymsnd.add_route(1, "2610.1r", 1.0);
- ymsnd.add_route(2, "2610.2l", 1.0);
- ymsnd.add_route(2, "2610.2r", 1.0);
-
- FILTER_VOLUME(config, "2610.0l").add_route(ALL_OUTPUTS, "speaker", 1.0);
- FILTER_VOLUME(config, "2610.0r").add_route(ALL_OUTPUTS, "speaker", 1.0);
- FILTER_VOLUME(config, "2610.1l").add_route(ALL_OUTPUTS, "speaker", 1.0);
- FILTER_VOLUME(config, "2610.1r").add_route(ALL_OUTPUTS, "speaker", 1.0);
- FILTER_VOLUME(config, "2610.2l").add_route(ALL_OUTPUTS, "speaker", 1.0);
- FILTER_VOLUME(config, "2610.2r").add_route(ALL_OUTPUTS, "speaker", 1.0);
-
- TC0140SYT(config, m_tc0140syt, 0);
- m_tc0140syt->set_master_tag(m_maincpu);
- m_tc0140syt->set_slave_tag(m_audiocpu);
-}
-
-
-/***************************************************************************
- DRIVERS
-***************************************************************************/
-
-ROM_START( othunder )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 512K for 68000 code */
- ROM_LOAD16_BYTE( "b67-20-1.ic63", 0x00000, 0x20000, CRC(851a453b) SHA1(48b8c379e78cd79463f1e24dc23816a97cf819b8) )
- ROM_LOAD16_BYTE( "b67-23-1.ic64", 0x00001, 0x20000, CRC(6e4f3d56) SHA1(99a29c0cbea0aea42355a036aa7f2174ca997872) )
- ROM_LOAD16_BYTE( "b67-14.ic61", 0x40000, 0x20000, CRC(7f3dd724) SHA1(2f2eeae0ee31e20082237b9a947c6848771eb73c) )
- ROM_LOAD16_BYTE( "b67-15.ic62", 0x40001, 0x20000, CRC(e84f62d0) SHA1(3b4a55a14dee7d592467fde9a75bde64deabd27d) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
- ROM_LOAD( "b67-13.ic40", 0x00000, 0x10000, CRC(2936b4b1) SHA1(39b41643464dd89e456ab6eb15a0ff0aef30afde) )
-
- ROM_REGION( 0x80000, "tc0100scn", 0 )
- ROM_LOAD16_WORD_SWAP( "b67-06.ic66", 0x00000, 0x80000, CRC(b9a38d64) SHA1(7ae8165b444d9da6ccdbc4a769535bcbb6738aaa) ) /* SCN */
-
- ROM_REGION( 0x200000, "sprites", 0 )
- ROM_LOAD64_WORD_SWAP( "b67-01.ic1", 0x00000, 0x80000, CRC(81ad9acb) SHA1(d9ad3f6332c6ca6b9872da57526a8158a3cf5b2f) ) /* OBJ: each rom has 1 bitplane, forming 16x8 tiles */
- ROM_LOAD64_WORD_SWAP( "b67-02.ic2", 0x00002, 0x80000, CRC(c20cd2fb) SHA1(b015e1fe167e19826aa451b45cd143d66a6db83c) )
- ROM_LOAD64_WORD_SWAP( "b67-03.ic3", 0x00004, 0x80000, CRC(bc9019ed) SHA1(7eddc83d71be97ce6637e6b35c226d58e6c39c3f) )
- ROM_LOAD64_WORD_SWAP( "b67-04.ic4", 0x00006, 0x80000, CRC(2af4c8af) SHA1(b2ae7aad0c59ffc368811f4bd5546dbb6860f9a9) )
-
- ROM_REGION16_LE( 0x80000, "sprmap_rom", 0 )
- ROM_LOAD16_WORD( "b67-05.ic43", 0x00000, 0x80000, CRC(9593e42b) SHA1(54b5538c302a1734ff4b752ab87a8c45d5c6b23d) ) /* index used to create 64x64 sprites on the fly */
-
- ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
- ROM_LOAD( "b67-08.ic67", 0x00000, 0x80000, CRC(458f41fb) SHA1(acca7c95acd1ae7a1cc51fb7fe644ad6d00ff5ac) )
-
- ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */
- ROM_LOAD( "b67-07.ic44", 0x00000, 0x80000, CRC(4f834357) SHA1(f34705ce64870a8b24ec2639505079cc031fb719) )
-
- ROM_REGION( 0x0800, "plds", 0 )
- ROM_LOAD( "plhs18p8b-b67-09.ic15", 0x0000, 0x0149, CRC(62035487) SHA1(5d9538ea9eabff324d274772b1e1fc9a9aec9100) )
- ROM_LOAD( "pal16l8a-b67-11.ic36", 0x0200, 0x0104, CRC(3177fb06) SHA1(c128277fe03342d9ec8da3c6e08a404a3f010547) )
- ROM_LOAD( "pal20l8b-b67-12.ic37", 0x0400, 0x0144, CRC(a47c2798) SHA1(8c963efd416b3f6586cb12afb9417dc95c2bc574) )
- ROM_LOAD( "pal20l8b-b67-10.ic33", 0x0600, 0x0144, CRC(4ced09c7) SHA1(519e6152cc5e4cb3ec24c4dc09101dddf22988aa) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "93c46_eeprom-othunder.ic86", 0x0000, 0x0080, CRC(3729b844) SHA1(f6bb41d293d1e47214f8b2d147991404f3278ebf) )
-ROM_END
-
-ROM_START( othundero )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 512K for 68000 code */
- ROM_LOAD16_BYTE( "b67-20.ic63", 0x00000, 0x20000, CRC(21439ea2) SHA1(d5b5a194e9698cf43513c0d56146772e8132ab07) )
- ROM_LOAD16_BYTE( "b67-23.ic64", 0x00001, 0x20000, CRC(789e9daa) SHA1(15bb0eec68aeea0b9f55889566338c9ce0ac9b5e) )
- ROM_LOAD16_BYTE( "b67-14.ic61", 0x40000, 0x20000, CRC(7f3dd724) SHA1(2f2eeae0ee31e20082237b9a947c6848771eb73c) )
- ROM_LOAD16_BYTE( "b67-15.ic62", 0x40001, 0x20000, CRC(e84f62d0) SHA1(3b4a55a14dee7d592467fde9a75bde64deabd27d) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
- ROM_LOAD( "b67-13.ic40", 0x00000, 0x10000, CRC(2936b4b1) SHA1(39b41643464dd89e456ab6eb15a0ff0aef30afde) )
-
- ROM_REGION( 0x80000, "tc0100scn", 0 )
- ROM_LOAD16_WORD_SWAP( "b67-06.ic66", 0x00000, 0x80000, CRC(b9a38d64) SHA1(7ae8165b444d9da6ccdbc4a769535bcbb6738aaa) ) /* SCN */
-
- ROM_REGION( 0x200000, "sprites", 0 )
- ROM_LOAD64_WORD_SWAP( "b67-01.ic1", 0x00000, 0x80000, CRC(81ad9acb) SHA1(d9ad3f6332c6ca6b9872da57526a8158a3cf5b2f) ) /* OBJ: each rom has 1 bitplane, forming 16x8 tiles */
- ROM_LOAD64_WORD_SWAP( "b67-02.ic2", 0x00002, 0x80000, CRC(c20cd2fb) SHA1(b015e1fe167e19826aa451b45cd143d66a6db83c) )
- ROM_LOAD64_WORD_SWAP( "b67-03.ic3", 0x00004, 0x80000, CRC(bc9019ed) SHA1(7eddc83d71be97ce6637e6b35c226d58e6c39c3f) )
- ROM_LOAD64_WORD_SWAP( "b67-04.ic4", 0x00006, 0x80000, CRC(2af4c8af) SHA1(b2ae7aad0c59ffc368811f4bd5546dbb6860f9a9) )
-
- ROM_REGION16_LE( 0x80000, "sprmap_rom", 0 )
- ROM_LOAD16_WORD( "b67-05.ic43", 0x00000, 0x80000, CRC(9593e42b) SHA1(54b5538c302a1734ff4b752ab87a8c45d5c6b23d) ) /* index used to create 64x64 sprites on the fly */
-
- ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
- ROM_LOAD( "b67-08.ic67", 0x00000, 0x80000, CRC(458f41fb) SHA1(acca7c95acd1ae7a1cc51fb7fe644ad6d00ff5ac) )
-
- ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */
- ROM_LOAD( "b67-07.ic44", 0x00000, 0x80000, CRC(4f834357) SHA1(f34705ce64870a8b24ec2639505079cc031fb719) )
-
- ROM_REGION( 0x0800, "plds", 0 )
- ROM_LOAD( "plhs18p8b-b67-09.ic15", 0x0000, 0x0149, CRC(62035487) SHA1(5d9538ea9eabff324d274772b1e1fc9a9aec9100) )
- ROM_LOAD( "pal16l8a-b67-11.ic36", 0x0200, 0x0104, CRC(3177fb06) SHA1(c128277fe03342d9ec8da3c6e08a404a3f010547) )
- ROM_LOAD( "pal20l8b-b67-12.ic37", 0x0400, 0x0144, CRC(a47c2798) SHA1(8c963efd416b3f6586cb12afb9417dc95c2bc574) )
- ROM_LOAD( "pal20l8b-b67-10.ic33", 0x0600, 0x0144, CRC(4ced09c7) SHA1(519e6152cc5e4cb3ec24c4dc09101dddf22988aa) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "93c46_eeprom-othunder.ic86", 0x0000, 0x0080, CRC(3729b844) SHA1(f6bb41d293d1e47214f8b2d147991404f3278ebf) )
-ROM_END
-
-ROM_START( othunderu )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 512K for 68000 code */
- ROM_LOAD16_BYTE( "b67-20-1.ic63", 0x00000, 0x20000, CRC(851a453b) SHA1(48b8c379e78cd79463f1e24dc23816a97cf819b8) )
- ROM_LOAD16_BYTE( "b67-22-1.ic64", 0x00001, 0x20000, CRC(19480dc0) SHA1(8bbc982c89f0878e7639330970df5aa93ecbb083) )
- ROM_LOAD16_BYTE( "b67-14.ic61", 0x40000, 0x20000, CRC(7f3dd724) SHA1(2f2eeae0ee31e20082237b9a947c6848771eb73c) )
- ROM_LOAD16_BYTE( "b67-15.ic62", 0x40001, 0x20000, CRC(e84f62d0) SHA1(3b4a55a14dee7d592467fde9a75bde64deabd27d) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
- ROM_LOAD( "b67-13.ic40", 0x00000, 0x10000, CRC(2936b4b1) SHA1(39b41643464dd89e456ab6eb15a0ff0aef30afde) )
-
- ROM_REGION( 0x80000, "tc0100scn", 0 )
- ROM_LOAD16_WORD_SWAP( "b67-06.ic66", 0x00000, 0x80000, CRC(b9a38d64) SHA1(7ae8165b444d9da6ccdbc4a769535bcbb6738aaa) ) /* SCN */
-
- ROM_REGION( 0x200000, "sprites", 0 )
- ROM_LOAD64_WORD_SWAP( "b67-01.ic1", 0x00000, 0x80000, CRC(81ad9acb) SHA1(d9ad3f6332c6ca6b9872da57526a8158a3cf5b2f) ) /* OBJ: each rom has 1 bitplane, forming 16x8 tiles */
- ROM_LOAD64_WORD_SWAP( "b67-02.ic2", 0x00002, 0x80000, CRC(c20cd2fb) SHA1(b015e1fe167e19826aa451b45cd143d66a6db83c) )
- ROM_LOAD64_WORD_SWAP( "b67-03.ic3", 0x00004, 0x80000, CRC(bc9019ed) SHA1(7eddc83d71be97ce6637e6b35c226d58e6c39c3f) )
- ROM_LOAD64_WORD_SWAP( "b67-04.ic4", 0x00006, 0x80000, CRC(2af4c8af) SHA1(b2ae7aad0c59ffc368811f4bd5546dbb6860f9a9) )
-
- ROM_REGION16_LE( 0x80000, "sprmap_rom", 0 )
- ROM_LOAD16_WORD( "b67-05.ic43", 0x00000, 0x80000, CRC(9593e42b) SHA1(54b5538c302a1734ff4b752ab87a8c45d5c6b23d) ) /* index used to create 64x64 sprites on the fly */
-
- ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
- ROM_LOAD( "b67-08.ic67", 0x00000, 0x80000, CRC(458f41fb) SHA1(acca7c95acd1ae7a1cc51fb7fe644ad6d00ff5ac) )
-
- ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */
- ROM_LOAD( "b67-07.ic44", 0x00000, 0x80000, CRC(4f834357) SHA1(f34705ce64870a8b24ec2639505079cc031fb719) )
-
- ROM_REGION( 0x0800, "plds", 0 )
- ROM_LOAD( "plhs18p8b-b67-09.ic15", 0x0000, 0x0149, CRC(62035487) SHA1(5d9538ea9eabff324d274772b1e1fc9a9aec9100) )
- ROM_LOAD( "pal16l8a-b67-11.ic36", 0x0200, 0x0104, CRC(3177fb06) SHA1(c128277fe03342d9ec8da3c6e08a404a3f010547) )
- ROM_LOAD( "pal20l8b-b67-12.ic37", 0x0400, 0x0144, CRC(a47c2798) SHA1(8c963efd416b3f6586cb12afb9417dc95c2bc574) )
- ROM_LOAD( "pal20l8b-b67-10.ic33", 0x0600, 0x0144, CRC(4ced09c7) SHA1(519e6152cc5e4cb3ec24c4dc09101dddf22988aa) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "93c46_eeprom-othunder.ic86", 0x0000, 0x0080, CRC(3729b844) SHA1(f6bb41d293d1e47214f8b2d147991404f3278ebf) )
-ROM_END
-
-ROM_START( othunderuo )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 512K for 68000 code */
- ROM_LOAD16_BYTE( "b67-20.ic63", 0x00000, 0x20000, CRC(21439ea2) SHA1(d5b5a194e9698cf43513c0d56146772e8132ab07) )
- ROM_LOAD16_BYTE( "b67-22.ic64", 0x00001, 0x20000, CRC(0f99ad3c) SHA1(dd6c9e822470ca867ec01e642443a871e879bae5) )
- ROM_LOAD16_BYTE( "b67-14.ic61", 0x40000, 0x20000, CRC(7f3dd724) SHA1(2f2eeae0ee31e20082237b9a947c6848771eb73c) )
- ROM_LOAD16_BYTE( "b67-15.ic62", 0x40001, 0x20000, CRC(e84f62d0) SHA1(3b4a55a14dee7d592467fde9a75bde64deabd27d) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
- ROM_LOAD( "b67-13.ic40", 0x00000, 0x10000, CRC(2936b4b1) SHA1(39b41643464dd89e456ab6eb15a0ff0aef30afde) )
-
- ROM_REGION( 0x80000, "tc0100scn", 0 )
- ROM_LOAD16_WORD_SWAP( "b67-06.ic66", 0x00000, 0x80000, CRC(b9a38d64) SHA1(7ae8165b444d9da6ccdbc4a769535bcbb6738aaa) ) /* SCN */
-
- ROM_REGION( 0x200000, "sprites", 0 )
- ROM_LOAD64_WORD_SWAP( "b67-01.ic1", 0x00000, 0x80000, CRC(81ad9acb) SHA1(d9ad3f6332c6ca6b9872da57526a8158a3cf5b2f) ) /* OBJ: each rom has 1 bitplane, forming 16x8 tiles */
- ROM_LOAD64_WORD_SWAP( "b67-02.ic2", 0x00002, 0x80000, CRC(c20cd2fb) SHA1(b015e1fe167e19826aa451b45cd143d66a6db83c) )
- ROM_LOAD64_WORD_SWAP( "b67-03.ic3", 0x00004, 0x80000, CRC(bc9019ed) SHA1(7eddc83d71be97ce6637e6b35c226d58e6c39c3f) )
- ROM_LOAD64_WORD_SWAP( "b67-04.ic4", 0x00006, 0x80000, CRC(2af4c8af) SHA1(b2ae7aad0c59ffc368811f4bd5546dbb6860f9a9) )
-
- ROM_REGION16_LE( 0x80000, "sprmap_rom", 0 )
- ROM_LOAD16_WORD( "b67-05.ic43", 0x00000, 0x80000, CRC(9593e42b) SHA1(54b5538c302a1734ff4b752ab87a8c45d5c6b23d) ) /* index used to create 64x64 sprites on the fly */
-
- ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
- ROM_LOAD( "b67-08.ic67", 0x00000, 0x80000, CRC(458f41fb) SHA1(acca7c95acd1ae7a1cc51fb7fe644ad6d00ff5ac) )
-
- ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */
- ROM_LOAD( "b67-07.ic44", 0x00000, 0x80000, CRC(4f834357) SHA1(f34705ce64870a8b24ec2639505079cc031fb719) )
-
- ROM_REGION( 0x0800, "plds", 0 )
- ROM_LOAD( "plhs18p8b-b67-09.ic15", 0x0000, 0x0149, CRC(62035487) SHA1(5d9538ea9eabff324d274772b1e1fc9a9aec9100) )
- ROM_LOAD( "pal16l8a-b67-11.ic36", 0x0200, 0x0104, CRC(3177fb06) SHA1(c128277fe03342d9ec8da3c6e08a404a3f010547) )
- ROM_LOAD( "pal20l8b-b67-12.ic37", 0x0400, 0x0144, CRC(a47c2798) SHA1(8c963efd416b3f6586cb12afb9417dc95c2bc574) )
- ROM_LOAD( "pal20l8b-b67-10.ic33", 0x0600, 0x0144, CRC(4ced09c7) SHA1(519e6152cc5e4cb3ec24c4dc09101dddf22988aa) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "93c46_eeprom-othunder.ic86", 0x0000, 0x0080, CRC(3729b844) SHA1(f6bb41d293d1e47214f8b2d147991404f3278ebf) )
-ROM_END
-
-ROM_START( othunderj )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 512K for 68000 code */
- ROM_LOAD16_BYTE( "b67-20.ic63", 0x00000, 0x20000, CRC(21439ea2) SHA1(d5b5a194e9698cf43513c0d56146772e8132ab07) )
- ROM_LOAD16_BYTE( "b67-21.ic64", 0x00001, 0x20000, CRC(9690fc86) SHA1(4e695554fc9cc91c5f8cff95dc290333bb56d571) )
- ROM_LOAD16_BYTE( "b67-14.ic61", 0x40000, 0x20000, CRC(7f3dd724) SHA1(2f2eeae0ee31e20082237b9a947c6848771eb73c) )
- ROM_LOAD16_BYTE( "b67-15.ic62", 0x40001, 0x20000, CRC(e84f62d0) SHA1(3b4a55a14dee7d592467fde9a75bde64deabd27d) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
- ROM_LOAD( "b67-13.ic40", 0x00000, 0x10000, CRC(2936b4b1) SHA1(39b41643464dd89e456ab6eb15a0ff0aef30afde) )
-
- ROM_REGION( 0x80000, "tc0100scn", 0 )
- ROM_LOAD16_WORD_SWAP( "b67-06.ic66", 0x00000, 0x80000, CRC(b9a38d64) SHA1(7ae8165b444d9da6ccdbc4a769535bcbb6738aaa) ) /* SCN */
-
- ROM_REGION( 0x200000, "sprites", 0 )
- ROM_LOAD64_WORD_SWAP( "b67-01.ic1", 0x00000, 0x80000, CRC(81ad9acb) SHA1(d9ad3f6332c6ca6b9872da57526a8158a3cf5b2f) ) /* OBJ: each rom has 1 bitplane, forming 16x8 tiles */
- ROM_LOAD64_WORD_SWAP( "b67-02.ic2", 0x00002, 0x80000, CRC(c20cd2fb) SHA1(b015e1fe167e19826aa451b45cd143d66a6db83c) )
- ROM_LOAD64_WORD_SWAP( "b67-03.ic3", 0x00004, 0x80000, CRC(bc9019ed) SHA1(7eddc83d71be97ce6637e6b35c226d58e6c39c3f) )
- ROM_LOAD64_WORD_SWAP( "b67-04.ic4", 0x00006, 0x80000, CRC(2af4c8af) SHA1(b2ae7aad0c59ffc368811f4bd5546dbb6860f9a9) )
-
- ROM_REGION16_LE( 0x80000, "sprmap_rom", 0 )
- ROM_LOAD16_WORD( "b67-05.ic43", 0x00000, 0x80000, CRC(9593e42b) SHA1(54b5538c302a1734ff4b752ab87a8c45d5c6b23d) ) /* index used to create 64x64 sprites on the fly */
-
- ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
- ROM_LOAD( "b67-08.ic67", 0x00000, 0x80000, CRC(458f41fb) SHA1(acca7c95acd1ae7a1cc51fb7fe644ad6d00ff5ac) )
-
- ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */
- ROM_LOAD( "b67-07.ic44", 0x00000, 0x80000, CRC(4f834357) SHA1(f34705ce64870a8b24ec2639505079cc031fb719) )
-
- ROM_REGION( 0x0800, "plds", 0 )
- ROM_LOAD( "plhs18p8b-b67-09.ic15", 0x0000, 0x0149, CRC(62035487) SHA1(5d9538ea9eabff324d274772b1e1fc9a9aec9100) )
- ROM_LOAD( "pal16l8a-b67-11.ic36", 0x0200, 0x0104, CRC(3177fb06) SHA1(c128277fe03342d9ec8da3c6e08a404a3f010547) )
- ROM_LOAD( "pal20l8b-b67-12.ic37", 0x0400, 0x0144, CRC(a47c2798) SHA1(8c963efd416b3f6586cb12afb9417dc95c2bc574) )
- ROM_LOAD( "pal20l8b-b67-10.ic33", 0x0600, 0x0144, CRC(4ced09c7) SHA1(519e6152cc5e4cb3ec24c4dc09101dddf22988aa) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "93c46_eeprom-othunder.ic86", 0x0000, 0x0080, CRC(3729b844) SHA1(f6bb41d293d1e47214f8b2d147991404f3278ebf) )
-ROM_END
-
-ROM_START( othunderjsc ) // SC stands for Shopping Center. It was put in a smaller, single player cabinet aimed at children
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 512K for 68000 code */
- ROM_LOAD16_BYTE( "b67-24.ic63", 0x00000, 0x20000, CRC(18670e0b) SHA1(d848623046905471e3f859db6f179e1e4b3e4d51) ) // 27C1001
- ROM_LOAD16_BYTE( "b67-25.ic64", 0x00001, 0x20000, CRC(3d422991) SHA1(22d18fdd9c4511774e0a4b246a293d27f7498735) ) // 27C1001
- ROM_LOAD16_BYTE( "b67-14.ic61", 0x40000, 0x20000, CRC(7f3dd724) SHA1(2f2eeae0ee31e20082237b9a947c6848771eb73c) )
- ROM_LOAD16_BYTE( "b67-15.ic62", 0x40001, 0x20000, CRC(e84f62d0) SHA1(3b4a55a14dee7d592467fde9a75bde64deabd27d) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */
- ROM_LOAD( "b67-13.ic40", 0x00000, 0x10000, CRC(2936b4b1) SHA1(39b41643464dd89e456ab6eb15a0ff0aef30afde) )
-
- ROM_REGION( 0x80000, "tc0100scn", 0 )
- ROM_LOAD16_WORD_SWAP( "b67-06.ic66", 0x00000, 0x80000, CRC(b9a38d64) SHA1(7ae8165b444d9da6ccdbc4a769535bcbb6738aaa) ) /* SCN */
-
- ROM_REGION( 0x200000, "sprites", 0 )
- ROM_LOAD64_WORD_SWAP( "b67-01.ic1", 0x00000, 0x80000, CRC(81ad9acb) SHA1(d9ad3f6332c6ca6b9872da57526a8158a3cf5b2f) ) /* OBJ: each rom has 1 bitplane, forming 16x8 tiles */
- ROM_LOAD64_WORD_SWAP( "b67-02.ic2", 0x00002, 0x80000, CRC(c20cd2fb) SHA1(b015e1fe167e19826aa451b45cd143d66a6db83c) )
- ROM_LOAD64_WORD_SWAP( "b67-03.ic3", 0x00004, 0x80000, CRC(bc9019ed) SHA1(7eddc83d71be97ce6637e6b35c226d58e6c39c3f) )
- ROM_LOAD64_WORD_SWAP( "b67-04.ic4", 0x00006, 0x80000, CRC(2af4c8af) SHA1(b2ae7aad0c59ffc368811f4bd5546dbb6860f9a9) )
-
- ROM_REGION16_LE( 0x80000, "sprmap_rom", 0 )
- ROM_LOAD16_WORD( "b67-05.ic43", 0x00000, 0x80000, CRC(9593e42b) SHA1(54b5538c302a1734ff4b752ab87a8c45d5c6b23d) ) /* index used to create 64x64 sprites on the fly */
-
- ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */
- ROM_LOAD( "b67-08.ic67", 0x00000, 0x80000, CRC(458f41fb) SHA1(acca7c95acd1ae7a1cc51fb7fe644ad6d00ff5ac) )
-
- ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */
- ROM_LOAD( "b67-07.ic44", 0x00000, 0x80000, CRC(4f834357) SHA1(f34705ce64870a8b24ec2639505079cc031fb719) )
-
- ROM_REGION( 0x0800, "plds", 0 )
- ROM_LOAD( "plhs18p8b-b67-09.ic15", 0x0000, 0x0149, CRC(62035487) SHA1(5d9538ea9eabff324d274772b1e1fc9a9aec9100) )
- ROM_LOAD( "pal16l8a-b67-11.ic36", 0x0200, 0x0104, CRC(3177fb06) SHA1(c128277fe03342d9ec8da3c6e08a404a3f010547) )
- ROM_LOAD( "pal20l8b-b67-12.ic37", 0x0400, 0x0144, CRC(a47c2798) SHA1(8c963efd416b3f6586cb12afb9417dc95c2bc574) )
- ROM_LOAD( "pal20l8b-b67-10.ic33", 0x0600, 0x0144, CRC(4ced09c7) SHA1(519e6152cc5e4cb3ec24c4dc09101dddf22988aa) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 )
- ROM_LOAD16_WORD( "93c46_eeprom-othunder.ic86", 0x0000, 0x0080, CRC(3729b844) SHA1(f6bb41d293d1e47214f8b2d147991404f3278ebf) )
-ROM_END
-
-GAME( 1988, othunder, 0, othunder, othunder, othunder_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Operation Thunderbolt (World, rev 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, othundero, othunder, othunder, othunder, othunder_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Operation Thunderbolt (World)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, othunderu, othunder, othunder, othundu, othunder_state, empty_init, ORIENTATION_FLIP_X, "Taito America Corporation", "Operation Thunderbolt (US, rev 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, othunderuo, othunder, othunder, othundu, othunder_state, empty_init, ORIENTATION_FLIP_X, "Taito America Corporation", "Operation Thunderbolt (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, othunderj, othunder, othunder, othundrj, othunder_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation", "Operation Thunderbolt (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, othunderjsc, othunder, othunder, othundrj, othunder_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation", "Operation Thunderbolt (Japan, SC)", MACHINE_SUPPORTS_SAVE )