slapfght driver update from stephh, getstar / tiger heli changes etc.

I don't have the changelist, stephh should really commit his own stuff.
This commit is contained in:
davidhay 2008-07-11 23:22:42 +00:00
parent 5d5550c907
commit 6f5ef31d90
4 changed files with 1111 additions and 404 deletions

View File

@ -183,6 +183,126 @@ $8006 - $8035 High score table
$8609 - $860f High score characters to display to screen for highest score $8609 - $860f High score characters to display to screen for highest score
****************************************************************************
Stephh's notes (based on the games Z80 code and some tests) :
0) all games
- All these games have a specific way of handling inputs :
* when cabinet is set to "Upright", any player can use inputs
from player 1 OR from player 2
* when cabinet is set to "Cocktail", each player has its own inputs
See Mantis bug ID 01746 attached files with Z80 explanations
1) 'tigerh' and clones
1a) 'tigerh'
- US version
- MCU dumped and emulated
- Game inputs aren't working after heliport 4 (area 35);
I can't tell at the moment if it's an ingame bug or not.
See Mantis bug ID 01785 for more details.
1b) 'tigerhj'
- Japan version
- MCU dumped and emulated
- Game inputs aren't working after heliport 4 (area 35);
I can't tell at the moment if it's an ingame bug or not.
See Mantis bug ID 01785 for more details.
1c) 'tigerhb1'
- Bootleg based on 'tigerhj'
- I can't tell if a specific MCU is required for this game :
* MCU status doesn't seem to be required
(see nop instructions at 0x10da, 0x10db, 0x10e5 and 0x10e6)
* there is patched code at 0x0f9c which is called instead of
standard call to 0x10cc, and there is no call to 0x0f88
* there are writes to unknown ports 0x0e and 0x0f
* hardware test is still computed at 0x109d but there is
no delay to wait for correct value (0x83) to be returned
(thus the need of specific read/write handlers)
- Game inputs aren't working after heliport 4 (area 35);
I can't tell at the moment if it's an ingame bug or not.
See Mantis bug ID 01785 for more details.
1d) 'tigerhb2'
- Bootleg based on 'tigerhj'
- MCU reads/writes are patched.as well as ROM check
- Game inputs are still working after heliport 4 (area 35);
This is the ONLY set with this behaviour !
See Mantis bug ID 01785 for more details.
1e) 'tigerhb3'
- Bootleg based on 'tigerhj'
- MCU reads/writes are patched.
- There is extra code at 0x10e2 (where MCU status was checked)
that prevents player to get any extra lives (even by collecting
10 diamonds) when Dip Switch is set to "20k then every 80k"
(see Mantis bug ID 00652 with Z80 explanations).
- Game inputs aren't working after heliport 4 (area 35);
I can't tell at the moment if it's an ingame bug or not.
See Mantis bug ID 01785 for more details.
2) 'getstar' and clones
2a) 'getstar'
- US version, licenced to Kitkorp - name "Guardian".
- MCU missing and simulated.
- Difficulty determines the number of energy bars you get.
- Each hit removes 1 enegy bar.
- According to the manual, default difficulty shall be set to "Hard".
- You can only get ONE extra life.
- I don't know if it's an ingame bug, but you always have to enter
your initials after a game ends, even if you score less than 10th place.
2b) 'getstarj'
- Japan version - name "Get Star".
- MCU missing and simulated.
- You always get 4 energy bars.
- Difficulty determines how many energy bars you lose when you get hit.
- I don't know what default difficulty shall be, so I set it to "Easy".
- You can get multiple extra lives.
2c) 'gtstarb1'
- Bootleg based on 'getstarj'
- MCU reads/writes are patched, but this hasn't been done in the "test mode".
- The game seems to have its own protection on startup (check code at 0x6d1a).
2d) 'gtstarb2'
- Bootleg based on 'getstarj'
- MCU reads/writes are patched, but this hasn't been done in the "test mode".
- The game seems to have its own protection (check code at 0x0569 and 0x0ac6).
- Patches are coded diffrently than in 'gtstarb1' and code isn't always perfect
(lazy coding ?) which causes LOTS of ingames bugs or strange behaviours :
* patched command 0x20 : NO continue play
* patched command 0x21 : as soon as a player loses all his lives,
the game is over (even if other player still has lives)
* patched command 0x22 : difficulty is ALWAYS set to "Easy" at start
so "Difficulty" Dip Switches have no effect when you are playing
(it still has an effect in the "test mode" though)
* patched command 0x23 : different lives settings
(thus the need of a specific INPUT_PORTS definition for this game)
* patched command 0x25 : right and down directions are swapped
(thus the need of a specific INPUT_PORTS definition for this game)
* patched command 0x2a : player flag (which determines if player 1 or
player 2 is playing) is NOT updated, causing the following things :
. current player score will ALWAYS be dusplayed under player 1
. when cabinet is set to "Cocktail", player 2 uses player 1 inputs
* patched command 0x38 : laser position does NOT change according to
player position (it ALWATS starts from the middle of the screen)
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
@ -191,6 +311,9 @@ $8609 - $860f High score characters to display to screen for highest score
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "includes/slapfght.h" #include "includes/slapfght.h"
int getstar_id;
static ADDRESS_MAP_START( perfrman_readmem, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( perfrman_readmem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_READ(SMH_ROM) AM_RANGE(0x0000, 0x7fff) AM_READ(SMH_ROM)
AM_RANGE(0x8000, 0x87ff) AM_READ(SMH_RAM) AM_RANGE(0x8000, 0x87ff) AM_READ(SMH_RAM)
@ -382,134 +505,130 @@ static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xd000, 0xffff) AM_WRITE(SMH_RAM) AM_RANGE(0xd000, 0xffff) AM_WRITE(SMH_RAM)
ADDRESS_MAP_END ADDRESS_MAP_END
#define COMMON_START\
PORT_START_TAG("IN0")\ static INPUT_PORTS_START( slapfght_generic )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY\ PORT_START_TAG("IN0")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY\ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY\ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY\ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x10, 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( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_START_TAG("IN1")\ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )\
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )\ PORT_START_TAG("IN1")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL\ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL\ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )\ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )\ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )\ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
static INPUT_PORTS_START( perfrman )
COMMON_START
PORT_START_TAG("DSW1") PORT_START_TAG("DSW1")
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8,7,6")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) // PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
/* Actually, the following DIPSW doesnt seem to do anything */
PORT_DIPNAME( 0x20, 0x20, "Screen Test" ) PORT_CODE(KEYCODE_F1) PORT_TOGGLE
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
// PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:5")
PORT_START_TAG("DSW2")
PORT_DIPNAME( 0xf0, 0x70, DEF_STR( Bonus_Life ) )
PORT_DIPSETTING( 0xb0, "20k, then each 100k" )
PORT_DIPSETTING( 0xa0, "40k, then each 100k" )
PORT_DIPSETTING( 0x90, "60k, then each 100k" )
PORT_DIPSETTING( 0x70, "20k, then each 200k" )
PORT_DIPSETTING( 0x60, "40k, then each 200k" )
PORT_DIPSETTING( 0x50, "60k, then each 200k" )
PORT_DIPSETTING( 0x30, "20k, then each 300k" )
PORT_DIPSETTING( 0x20, "40k, then each 300k" )
PORT_DIPSETTING( 0x10, "60k, then each 300k" )
PORT_DIPSETTING( 0xf0, "20k" )
PORT_DIPSETTING( 0xe0, "40k" )
PORT_DIPSETTING( 0xd0, "60k" )
PORT_DIPSETTING( 0xc0, DEF_STR( None ) )
PORT_DIPNAME( 0x0c, 0x0c, "Game Level" )
PORT_DIPSETTING( 0x0c, "0" )
PORT_DIPSETTING( 0x08, "1" )
PORT_DIPSETTING( 0x04, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x01, "1" )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "5" )
INPUT_PORTS_END
static INPUT_PORTS_START( tigerh )
COMMON_START
PORT_START_TAG("DSW1")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
// PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) ) PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE( 0x40, IP_ACTIVE_LOW ) PORT_SERVICE_DIPLOC(0x40, IP_ACTIVE_LOW, "SW1:2" )
PORT_DIPNAME( 0x80, 0x80, "Player Speed" ) PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:1" )
PORT_DIPSETTING( 0x80, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_START_TAG("DSW2") PORT_START_TAG("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:8,7")
PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x01, "1" )
PORT_DIPSETTING( 0x00, "2" ) PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x03, "3" ) PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "5" ) PORT_DIPSETTING( 0x02, "5" )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,5")
PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x08, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x08, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) /* Filled by "Bonus Lives" settings */
PORT_DIPSETTING( 0x10, "20000 80000" ) PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:4" )
PORT_DIPSETTING( 0x00, "50000 120000" ) PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:3" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW2:2" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:1" )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( perfrman )
PORT_INCLUDE(slapfght_generic)
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x20, 0x20, "Intermissions" ) PORT_DIPLOCATION("SW1:3") /* "Screen Test" in the "test mode" */
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0xf0, 0x70, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,3,2,1")
PORT_DIPSETTING( 0xb0, "20k, 120k, then every 100k" )
PORT_DIPSETTING( 0xa0, "40k, 120k, then every 100k" )
PORT_DIPSETTING( 0x90, "60k, 160k, then every 100k" )
PORT_DIPSETTING( 0x80, "Every 100k" )
PORT_DIPSETTING( 0x70, "20k, 220k, then every 200k" )
PORT_DIPSETTING( 0x60, "40k, 240k, then every 200k" )
PORT_DIPSETTING( 0x50, "60k, 260k, then every 200k" )
PORT_DIPSETTING( 0x40, "Every 200k" )
PORT_DIPSETTING( 0x30, "20k, 320k, then every 300k" )
PORT_DIPSETTING( 0x20, "40k, 340k, then every 300k" )
PORT_DIPSETTING( 0x10, "60k, 360k, then every 300k" )
PORT_DIPSETTING( 0x00, "Every 300k" )
PORT_DIPSETTING( 0xf0, "20k only" )
PORT_DIPSETTING( 0xe0, "40k only" )
PORT_DIPSETTING( 0xd0, "60k only" )
PORT_DIPSETTING( 0xc0, DEF_STR( None ) )
INPUT_PORTS_END
static INPUT_PORTS_START( tigerh )
PORT_INCLUDE(slapfght_generic)
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x80, 0x80, "Player Speed" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:8,7")
PORT_DIPSETTING( 0x01, "1" )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:6,5")
PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x08, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x10, "20k, 100k, then every 80k" ) // see notes for 'tigerhb3'
PORT_DIPSETTING( 0x00, "50k, 170k, then every 120k" )
PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW2:2" )
PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:1" )
INPUT_PORTS_END
static INPUT_PORTS_START( slapfigh ) static INPUT_PORTS_START( slapfigh )
COMMON_START PORT_INCLUDE(slapfght_generic)
PORT_START_TAG("DSW1")
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) )
PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
@ -533,7 +652,7 @@ COMMON_START
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
PORT_START_TAG("DSW2") PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@ -557,141 +676,57 @@ INPUT_PORTS_END
static INPUT_PORTS_START( getstar ) static INPUT_PORTS_START( getstar )
PORT_START_TAG("IN0") PORT_INCLUDE(slapfght_generic)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_START_TAG("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_START_TAG("DSW1") PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) /* harder default difficulty (confirmed by manual) */
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,5")
// PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START_TAG("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x03, "240 (Cheat)")
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x08, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x08, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4,3")
PORT_DIPSETTING( 0x10, "30000 100000" ) PORT_DIPSETTING( 0x30, "50k only" )
PORT_DIPSETTING( 0x00, "50000 150000" ) PORT_DIPSETTING( 0x20, "100k only" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x10, "150k only" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, "200k only" )
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 INPUT_PORTS_END
static INPUT_PORTS_START( gtstarba ) static INPUT_PORTS_START( getstarj )
PORT_START_TAG("IN0") PORT_INCLUDE(getstar)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) 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_TAG("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_START_TAG("DSW1") /* easier default difficulty (to be confirmed) and different bonus lives settings */
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_MODIFY("DSW2")
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,5")
// PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START_TAG("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x03, "240 (Cheat)")
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x0c, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x08, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x08, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x10, "30000 100000" ) PORT_DIPSETTING( 0x10, "30k, 130k, then every 100k" )
PORT_DIPSETTING( 0x00, "50000 150000" ) PORT_DIPSETTING( 0x00, "50k, 200k, then every 150k" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:3" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) INPUT_PORTS_END
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) static INPUT_PORTS_START( gtstarb2 )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_INCLUDE(getstarj)
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) /* RIGHT and DOWN are swapped due to code at 0x0551 */
PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_MODIFY("IN0")
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
/* different lives settings due to code at 0x0e36 */
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:8,7")
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x03, "240 (Cheat)")
/* difficulty settings have no effect due to code at 0x0e7c */
/* I don't mark the Dips as "unused" because they are still read in the "test mode" */
INPUT_PORTS_END INPUT_PORTS_END
@ -935,6 +970,7 @@ static MACHINE_DRIVER_START( tigerh )
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_DRIVER_END MACHINE_DRIVER_END
static MACHINE_DRIVER_START( slapfigh ) static MACHINE_DRIVER_START( slapfigh )
/* basic machine hardware */ /* basic machine hardware */
@ -981,7 +1017,6 @@ static MACHINE_DRIVER_START( slapfigh )
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_DRIVER_END MACHINE_DRIVER_END
/* identical to slapfigh_ but writemem has different scroll registers */ /* identical to slapfigh_ but writemem has different scroll registers */
static MACHINE_DRIVER_START( slapbtuk ) static MACHINE_DRIVER_START( slapbtuk )
@ -1087,42 +1122,6 @@ ROM_START( tigerh )
ROM_LOAD( "pal16r4a.2e", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */ ROM_LOAD( "pal16r4a.2e", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_END ROM_END
ROM_START( tigerh2 )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "b0.5", 0x00000, 0x4000, CRC(6ae7e13c) SHA1(47ef34635f8648e883a850293d92a46e95976a50) )
ROM_LOAD( "a47_01.bin", 0x04000, 0x4000, CRC(65df2152) SHA1(8e1516905a4af379cb0d0b9d42ff1cc3179c3589) )
ROM_LOAD( "a47_02.bin", 0x08000, 0x4000, CRC(633d324b) SHA1(70a17d17ebe003bfb2246e92e925a343a92553e5) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "a47_03.bin", 0x0000, 0x2000, CRC(d105260f) SHA1(f6a0e393e29354bb37fb723828f3267d030a45ea) )
ROM_REGION( 0x0800, REGION_CPU3, 0 )
/* is this the right mcu for this set? the mcu handling code in the roms seems patched and it doesn't
work correctly */
ROM_LOAD( "a47_14.6a", 0x0000, 0x0800, CRC(4042489f) SHA1(b977e0821b6b1aa5a0a0f349cd78150af1a231df) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "a47_05.bin", 0x00000, 0x2000, CRC(c5325b49) SHA1(6df9051e7545dcac4995340f80957510457aaf64) ) /* Chars */
ROM_LOAD( "a47_04.bin", 0x02000, 0x2000, CRC(cd59628e) SHA1(7be6479f20eb51b79b93e6fd65ab219096d54984) )
ROM_REGION( 0x10000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "a47_09.bin", 0x00000, 0x4000, CRC(31fae8a8) SHA1(ef8c23776431f00a74b25c5800755b6fa8d585ec) ) /* Tiles */
ROM_LOAD( "a47_08.bin", 0x04000, 0x4000, CRC(e539af2b) SHA1(0c8369a0fac1cbe40c07b51e16e8f8a9b8ed03b8) )
ROM_LOAD( "a47_07.bin", 0x08000, 0x4000, CRC(02fdd429) SHA1(fa392f2e57cfb6af4c124e0c151a4652f83e5577) )
ROM_LOAD( "a47_06.bin", 0x0c000, 0x4000, CRC(11fbcc8c) SHA1(b4fdb9ee00b749e1a54cfc0cdf55cc5e9bee3662) )
ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE )
ROM_LOAD( "a47_13.bin", 0x00000, 0x4000, CRC(739a7e7e) SHA1(5fee71d9e1540903a6cf7bcaab30acaa088d35ed) ) /* Sprites */
ROM_LOAD( "a47_12.bin", 0x04000, 0x4000, CRC(c064ecdb) SHA1(fa8d712e2b2bda78b9375d96c93a4d7549c94075) )
ROM_LOAD( "a47_11.bin", 0x08000, 0x4000, CRC(744fae9b) SHA1(b324350469c51043e1d90ce58808d966467435b9) )
ROM_LOAD( "a47_10.bin", 0x0c000, 0x4000, CRC(e1cf844e) SHA1(eeb8eff09f96c693e147d155a8c0a87416d64603) )
ROM_REGION( 0x0300, REGION_PROMS, 0 )
ROM_LOAD( "82s129.12q", 0x0000, 0x0100, CRC(2c69350d) SHA1(658bf63c6d1e718f99494cd1c9346c3622913beb) )
ROM_LOAD( "82s129.12m", 0x0100, 0x0100, CRC(7142e972) SHA1(4a854c2fdd006077aecb695832110ae6bf5819c1) )
ROM_LOAD( "82s129.12n", 0x0200, 0x0100, CRC(25f273f2) SHA1(2c696745f42fa09b64295a39536aeba08ab58d67) )
ROM_END
ROM_START( tigerhj ) ROM_START( tigerhj )
ROM_REGION( 0x10000, REGION_CPU1, 0 ) ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "a47_00.bin", 0x00000, 0x4000, CRC(cbdbe3cc) SHA1(5badf76cdf4a7f0ae9e85ee602420ba5c128efef) ) ROM_LOAD( "a47_00.bin", 0x00000, 0x4000, CRC(cbdbe3cc) SHA1(5badf76cdf4a7f0ae9e85ee602420ba5c128efef) )
@ -1159,13 +1158,17 @@ ROM_END
ROM_START( tigerhb1 ) ROM_START( tigerhb1 )
ROM_REGION( 0x10000, REGION_CPU1, 0 ) ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "14", 0x00000, 0x4000, CRC(ca59dd73) SHA1(c07961fcc209ec10ace3830d79c8ccc1cfda9765) ) ROM_LOAD( "b0.5", 0x00000, 0x4000, CRC(6ae7e13c) SHA1(47ef34635f8648e883a850293d92a46e95976a50) )
ROM_LOAD( "13", 0x04000, 0x4000, CRC(38bd54db) SHA1(75e999f606c410d7481bc4d29c4b523d45847649) ) ROM_LOAD( "a47_01.bin", 0x04000, 0x4000, CRC(65df2152) SHA1(8e1516905a4af379cb0d0b9d42ff1cc3179c3589) )
ROM_LOAD( "a47_02.bin", 0x08000, 0x4000, CRC(633d324b) SHA1(70a17d17ebe003bfb2246e92e925a343a92553e5) ) ROM_LOAD( "a47_02.bin", 0x08000, 0x4000, CRC(633d324b) SHA1(70a17d17ebe003bfb2246e92e925a343a92553e5) )
ROM_REGION( 0x10000, REGION_CPU2, 0 ) ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "a47_03.bin", 0x0000, 0x2000, CRC(d105260f) SHA1(f6a0e393e29354bb37fb723828f3267d030a45ea) ) ROM_LOAD( "a47_03.bin", 0x0000, 0x2000, CRC(d105260f) SHA1(f6a0e393e29354bb37fb723828f3267d030a45ea) )
ROM_REGION( 0x0800, REGION_CPU3, 0 )
/* is this the right mcu for this set? the mcu handling code in the roms seems patched and it doesn't work correctly */
// ROM_LOAD( "a47_14.6a", 0x0000, 0x0800, CRC(4042489f) SHA1(b977e0821b6b1aa5a0a0f349cd78150af1a231df) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "a47_05.bin", 0x00000, 0x2000, CRC(c5325b49) SHA1(6df9051e7545dcac4995340f80957510457aaf64) ) /* Chars */ ROM_LOAD( "a47_05.bin", 0x00000, 0x2000, CRC(c5325b49) SHA1(6df9051e7545dcac4995340f80957510457aaf64) ) /* Chars */
ROM_LOAD( "a47_04.bin", 0x02000, 0x2000, CRC(cd59628e) SHA1(7be6479f20eb51b79b93e6fd65ab219096d54984) ) ROM_LOAD( "a47_04.bin", 0x02000, 0x2000, CRC(cd59628e) SHA1(7be6479f20eb51b79b93e6fd65ab219096d54984) )
@ -1219,6 +1222,37 @@ ROM_START( tigerhb2 )
ROM_LOAD( "82s129.12n", 0x0200, 0x0100, CRC(25f273f2) SHA1(2c696745f42fa09b64295a39536aeba08ab58d67) ) ROM_LOAD( "82s129.12n", 0x0200, 0x0100, CRC(25f273f2) SHA1(2c696745f42fa09b64295a39536aeba08ab58d67) )
ROM_END ROM_END
ROM_START( tigerhb3 )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "14", 0x00000, 0x4000, CRC(ca59dd73) SHA1(c07961fcc209ec10ace3830d79c8ccc1cfda9765) )
ROM_LOAD( "13", 0x04000, 0x4000, CRC(38bd54db) SHA1(75e999f606c410d7481bc4d29c4b523d45847649) )
ROM_LOAD( "a47_02.bin", 0x08000, 0x4000, CRC(633d324b) SHA1(70a17d17ebe003bfb2246e92e925a343a92553e5) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "a47_03.bin", 0x0000, 0x2000, CRC(d105260f) SHA1(f6a0e393e29354bb37fb723828f3267d030a45ea) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "a47_05.bin", 0x00000, 0x2000, CRC(c5325b49) SHA1(6df9051e7545dcac4995340f80957510457aaf64) ) /* Chars */
ROM_LOAD( "a47_04.bin", 0x02000, 0x2000, CRC(cd59628e) SHA1(7be6479f20eb51b79b93e6fd65ab219096d54984) )
ROM_REGION( 0x10000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "a47_09.bin", 0x00000, 0x4000, CRC(31fae8a8) SHA1(ef8c23776431f00a74b25c5800755b6fa8d585ec) ) /* Tiles */
ROM_LOAD( "a47_08.bin", 0x04000, 0x4000, CRC(e539af2b) SHA1(0c8369a0fac1cbe40c07b51e16e8f8a9b8ed03b8) )
ROM_LOAD( "a47_07.bin", 0x08000, 0x4000, CRC(02fdd429) SHA1(fa392f2e57cfb6af4c124e0c151a4652f83e5577) )
ROM_LOAD( "a47_06.bin", 0x0c000, 0x4000, CRC(11fbcc8c) SHA1(b4fdb9ee00b749e1a54cfc0cdf55cc5e9bee3662) )
ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE )
ROM_LOAD( "a47_13.bin", 0x00000, 0x4000, CRC(739a7e7e) SHA1(5fee71d9e1540903a6cf7bcaab30acaa088d35ed) ) /* Sprites */
ROM_LOAD( "a47_12.bin", 0x04000, 0x4000, CRC(c064ecdb) SHA1(fa8d712e2b2bda78b9375d96c93a4d7549c94075) )
ROM_LOAD( "a47_11.bin", 0x08000, 0x4000, CRC(744fae9b) SHA1(b324350469c51043e1d90ce58808d966467435b9) )
ROM_LOAD( "a47_10.bin", 0x0c000, 0x4000, CRC(e1cf844e) SHA1(eeb8eff09f96c693e147d155a8c0a87416d64603) )
ROM_REGION( 0x0300, REGION_PROMS, 0 )
ROM_LOAD( "82s129.12q", 0x0000, 0x0100, CRC(2c69350d) SHA1(658bf63c6d1e718f99494cd1c9346c3622913beb) )
ROM_LOAD( "82s129.12m", 0x0100, 0x0100, CRC(7142e972) SHA1(4a854c2fdd006077aecb695832110ae6bf5819c1) )
ROM_LOAD( "82s129.12n", 0x0200, 0x0100, CRC(25f273f2) SHA1(2c696745f42fa09b64295a39536aeba08ab58d67) )
ROM_END
ROM_START( slapfigh ) ROM_START( slapfigh )
ROM_REGION( 0x18000, REGION_CPU1, 0 ) ROM_REGION( 0x18000, REGION_CPU1, 0 )
ROM_LOAD( "sf_r19.bin", 0x00000, 0x8000, CRC(674c0e0f) SHA1(69fc17881c89cc5e82b0fefec49c4116054f9e3b) ) ROM_LOAD( "sf_r19.bin", 0x00000, 0x8000, CRC(674c0e0f) SHA1(69fc17881c89cc5e82b0fefec49c4116054f9e3b) )
@ -1287,6 +1321,39 @@ ROM_START( slapfiga )
ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) ) ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) )
ROM_END ROM_END
ROM_START( alcon )
ROM_REGION( 0x18000, REGION_CPU1, 0 )
ROM_LOAD( "00", 0x00000, 0x8000, CRC(2ba82d60) SHA1(b37659aa18a3f96a3cc7fa93db2439f36487b8c8) )
ROM_LOAD( "01", 0x10000, 0x8000, CRC(18bb2f12) SHA1(7c16d4bbb8b5e22f227aff170e5e6326c5968968) ) /* banked at 8000 */
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "sf_r05.bin", 0x0000, 0x2000, CRC(87f4705a) SHA1(a90d5644ce268f3321047a4f96df96ac294d2f1b) )
ROM_REGION( 0x0800, REGION_CPU3, 0 ) /* 2k for the microcontroller */
ROM_LOAD( "68705.bin", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "04", 0x00000, 0x2000, CRC(31003483) SHA1(7014ceb6313ac5a3d2dcb735643dfd8bfabaa185) ) /* Chars */
ROM_LOAD( "03", 0x02000, 0x2000, CRC(404152c0) SHA1(d05bc9baa1f336475fffc2f19f1018e9f0547f10) )
ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "sf_r06.bin", 0x00000, 0x8000, CRC(b6358305) SHA1(c7bb4236a75ec6b88f011bc30f8fb9a718e2ca3e) ) /* Tiles */
ROM_LOAD( "sf_r09.bin", 0x08000, 0x8000, CRC(e92d9d60) SHA1(2554617e0e6615ca8c85a49299a4a0e762478339) )
ROM_LOAD( "sf_r08.bin", 0x10000, 0x8000, CRC(5faeeea3) SHA1(696fba24bcf1f3a7e914a4403854da5eededaf7f) )
ROM_LOAD( "sf_r07.bin", 0x18000, 0x8000, CRC(974e2ea9) SHA1(3840550fc3a833828dad8f3e300d2ea583d69ce7) )
ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE )
ROM_LOAD( "sf_r03.bin", 0x00000, 0x8000, CRC(8545d397) SHA1(9a1fd5bfd8fb830b8e46643c08eef32ba968fc23) ) /* Sprites */
ROM_LOAD( "sf_r01.bin", 0x08000, 0x8000, CRC(b1b7b925) SHA1(199b0b52bbeb384211171eca5c50a1c0ebf6826f) )
ROM_LOAD( "sf_r04.bin", 0x10000, 0x8000, CRC(422d946b) SHA1(c251ef9597a11ec8de39be4fcbddaba84e649ef2) )
ROM_LOAD( "sf_r02.bin", 0x18000, 0x8000, CRC(587113ae) SHA1(90abe961494a1af7c87693a419fbabf7a58a5dee) )
ROM_REGION( 0x0300, REGION_PROMS, 0 )
ROM_LOAD( "sf_col21.bin", 0x0000, 0x0100, CRC(a0efaf99) SHA1(5df01663480acad1f89abab8662d437617a66d1c) )
ROM_LOAD( "sf_col20.bin", 0x0100, 0x0100, CRC(a56d57e5) SHA1(bfbd0db52b23fe1b4994e05103be3d412c1c013e) )
ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) )
ROM_END
ROM_START( slapbtjp ) ROM_START( slapbtjp )
ROM_REGION( 0x18000, REGION_CPU1, 0 ) ROM_REGION( 0x18000, REGION_CPU1, 0 )
ROM_LOAD( "sf_r19jb.bin", 0x00000, 0x8000, CRC(9a7ac8b3) SHA1(01fbad9b4fc80f2406eff18db20e196e212d0c17) ) ROM_LOAD( "sf_r19jb.bin", 0x00000, 0x8000, CRC(9a7ac8b3) SHA1(01fbad9b4fc80f2406eff18db20e196e212d0c17) )
@ -1381,39 +1448,6 @@ ROM_START( slapfgtr )
ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) ) ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) )
ROM_END ROM_END
ROM_START( alcon )
ROM_REGION( 0x18000, REGION_CPU1, 0 )
ROM_LOAD( "00", 0x00000, 0x8000, CRC(2ba82d60) SHA1(b37659aa18a3f96a3cc7fa93db2439f36487b8c8) )
ROM_LOAD( "01", 0x10000, 0x8000, CRC(18bb2f12) SHA1(7c16d4bbb8b5e22f227aff170e5e6326c5968968) ) /* banked at 8000 */
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "sf_r05.bin", 0x0000, 0x2000, CRC(87f4705a) SHA1(a90d5644ce268f3321047a4f96df96ac294d2f1b) )
ROM_REGION( 0x0800, REGION_CPU3, 0 ) /* 2k for the microcontroller */
ROM_LOAD( "68705.bin", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
ROM_LOAD( "04", 0x00000, 0x2000, CRC(31003483) SHA1(7014ceb6313ac5a3d2dcb735643dfd8bfabaa185) ) /* Chars */
ROM_LOAD( "03", 0x02000, 0x2000, CRC(404152c0) SHA1(d05bc9baa1f336475fffc2f19f1018e9f0547f10) )
ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE )
ROM_LOAD( "sf_r06.bin", 0x00000, 0x8000, CRC(b6358305) SHA1(c7bb4236a75ec6b88f011bc30f8fb9a718e2ca3e) ) /* Tiles */
ROM_LOAD( "sf_r09.bin", 0x08000, 0x8000, CRC(e92d9d60) SHA1(2554617e0e6615ca8c85a49299a4a0e762478339) )
ROM_LOAD( "sf_r08.bin", 0x10000, 0x8000, CRC(5faeeea3) SHA1(696fba24bcf1f3a7e914a4403854da5eededaf7f) )
ROM_LOAD( "sf_r07.bin", 0x18000, 0x8000, CRC(974e2ea9) SHA1(3840550fc3a833828dad8f3e300d2ea583d69ce7) )
ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE )
ROM_LOAD( "sf_r03.bin", 0x00000, 0x8000, CRC(8545d397) SHA1(9a1fd5bfd8fb830b8e46643c08eef32ba968fc23) ) /* Sprites */
ROM_LOAD( "sf_r01.bin", 0x08000, 0x8000, CRC(b1b7b925) SHA1(199b0b52bbeb384211171eca5c50a1c0ebf6826f) )
ROM_LOAD( "sf_r04.bin", 0x10000, 0x8000, CRC(422d946b) SHA1(c251ef9597a11ec8de39be4fcbddaba84e649ef2) )
ROM_LOAD( "sf_r02.bin", 0x18000, 0x8000, CRC(587113ae) SHA1(90abe961494a1af7c87693a419fbabf7a58a5dee) )
ROM_REGION( 0x0300, REGION_PROMS, 0 )
ROM_LOAD( "sf_col21.bin", 0x0000, 0x0100, CRC(a0efaf99) SHA1(5df01663480acad1f89abab8662d437617a66d1c) )
ROM_LOAD( "sf_col20.bin", 0x0100, 0x0100, CRC(a56d57e5) SHA1(bfbd0db52b23fe1b4994e05103be3d412c1c013e) )
ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) )
ROM_END
ROM_START( getstar ) ROM_START( getstar )
ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Region 0 - main cpu code */ ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Region 0 - main cpu code */
ROM_LOAD( "rom0", 0x00000, 0x4000, CRC(6a8bdc6c) SHA1(c923bca539bd2eb9a34cb9c7a67a199e28bc081a) ) ROM_LOAD( "rom0", 0x00000, 0x4000, CRC(6a8bdc6c) SHA1(c923bca539bd2eb9a34cb9c7a67a199e28bc081a) )
@ -1482,38 +1516,7 @@ ROM_START( getstarj )
ROM_LOAD( "rom19", 0x0200, 0x0100, CRC(513224f0) SHA1(15b34612206138f6fc5f7478925b1fff2ed56aa8) ) ROM_LOAD( "rom19", 0x0200, 0x0100, CRC(513224f0) SHA1(15b34612206138f6fc5f7478925b1fff2ed56aa8) )
ROM_END ROM_END
ROM_START( getstarb ) ROM_START( gtstarb1 )
ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Region 0 - main cpu code */
ROM_LOAD( "gs_14.rom", 0x00000, 0x4000, CRC(1a57a920) SHA1(b1e9d5b29c0e3632eec3ad1ee51bf3392e4b816d) )
ROM_LOAD( "gs_13.rom", 0x04000, 0x4000, CRC(805f8e77) SHA1(c3ad6eae842d2d10f716998d5a803038fa7b338f) )
ROM_LOAD( "a68_02.bin", 0x10000, 0x8000, CRC(3567da17) SHA1(29d698606d0bd30abfc3171d79bfad95b0de89fc) )
ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Region 3 - sound cpu code */
ROM_LOAD( "a68-03", 0x0000, 0x2000, CRC(18daa44c) SHA1(1a3d22a186c591321d1b836ee30d89fba4771122) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68_05.bin", 0x00000, 0x2000, CRC(e3d409e7) SHA1(0b6be4767f110729f4dd1a472ef8d9a0c718b684) ) /* Chars */
ROM_LOAD( "a68_04.bin", 0x02000, 0x2000, CRC(6e5ac9d4) SHA1(74f90b7a1ceb3b1c2fd92dff100d92dea0155530) )
ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68_09", 0x00000, 0x8000, CRC(a293cc2e) SHA1(a2c2598e92982d13b51cbb6efb4b963142233433) ) /* Tiles */
ROM_LOAD( "a68_08", 0x08000, 0x8000, CRC(37662375) SHA1(46ba8a3f0b553d476ecf431d0d20556896b4ca43) )
ROM_LOAD( "a68_07", 0x10000, 0x8000, CRC(cf1a964c) SHA1(e9223c8d4f3bdafed193a1ded63e377f16f45e17) )
ROM_LOAD( "a68_06", 0x18000, 0x8000, CRC(05f9eb9a) SHA1(a71640a63b259799086d361ef293aa26cec46a0c) )
ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68-13", 0x00000, 0x8000, CRC(643fb282) SHA1(d904d3c27c2b56341929c5eed4ea97e948c53c34) ) /* Sprites */
ROM_LOAD( "a68-12", 0x08000, 0x8000, CRC(11f74e32) SHA1(02d8b4cc679f45a02c4989f2b62cde91b7418235) )
ROM_LOAD( "a68-11", 0x10000, 0x8000, CRC(f24158cf) SHA1(db4c6b68a488b0798ea5f793ac8ced283a8ecab2) )
ROM_LOAD( "a68-10", 0x18000, 0x8000, CRC(83161ed0) SHA1(a6aa28f22f487dc3a2ec07935e6d42bcdd1eff81) )
ROM_REGION( 0x0300, REGION_PROMS, 0 )
ROM_LOAD( "rom21", 0x0000, 0x0100, CRC(d6360b4d) SHA1(3e64548c82a3378fc091e104cdc2b0c7e592fc44) )
ROM_LOAD( "rom20", 0x0100, 0x0100, CRC(4ca01887) SHA1(2892c89d5e60f1d10593adffff55c1a9654e8209) )
ROM_LOAD( "rom19", 0x0200, 0x0100, CRC(513224f0) SHA1(15b34612206138f6fc5f7478925b1fff2ed56aa8) )
ROM_END
ROM_START( gtstarba )
ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Region 0 - main cpu code */ ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Region 0 - main cpu code */
ROM_LOAD( "gs_rb_1.bin", 0x00000, 0x4000, CRC(9afad7e0) SHA1(6b2e82a6b7fcbfed5f4d250959ecc571fdf0cbc2) ) ROM_LOAD( "gs_rb_1.bin", 0x00000, 0x4000, CRC(9afad7e0) SHA1(6b2e82a6b7fcbfed5f4d250959ecc571fdf0cbc2) )
ROM_LOAD( "gs_rb_2.bin", 0x04000, 0x4000, CRC(5feb0a60) SHA1(b1300055180ddf6ca96475eb3a27a17722273fc6) ) ROM_LOAD( "gs_rb_2.bin", 0x04000, 0x4000, CRC(5feb0a60) SHA1(b1300055180ddf6ca96475eb3a27a17722273fc6) )
@ -1549,56 +1552,143 @@ ROM_START( gtstarba )
ROM_LOAD( "rom19", 0x0200, 0x0100, CRC(513224f0) SHA1(15b34612206138f6fc5f7478925b1fff2ed56aa8) ) ROM_LOAD( "rom19", 0x0200, 0x0100, CRC(513224f0) SHA1(15b34612206138f6fc5f7478925b1fff2ed56aa8) )
ROM_END ROM_END
ROM_START( gtstarb2 )
ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Region 0 - main cpu code */
ROM_LOAD( "gs_14.rom", 0x00000, 0x4000, CRC(1a57a920) SHA1(b1e9d5b29c0e3632eec3ad1ee51bf3392e4b816d) )
ROM_LOAD( "gs_13.rom", 0x04000, 0x4000, CRC(805f8e77) SHA1(c3ad6eae842d2d10f716998d5a803038fa7b338f) )
ROM_LOAD( "a68_02.bin", 0x10000, 0x8000, CRC(3567da17) SHA1(29d698606d0bd30abfc3171d79bfad95b0de89fc) )
ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Region 3 - sound cpu code */
ROM_LOAD( "a68-03", 0x0000, 0x2000, CRC(18daa44c) SHA1(1a3d22a186c591321d1b836ee30d89fba4771122) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68_05.bin", 0x00000, 0x2000, CRC(e3d409e7) SHA1(0b6be4767f110729f4dd1a472ef8d9a0c718b684) ) /* Chars */
ROM_LOAD( "a68_04.bin", 0x02000, 0x2000, CRC(6e5ac9d4) SHA1(74f90b7a1ceb3b1c2fd92dff100d92dea0155530) )
ROM_REGION( 0x20000, REGION_GFX2, ROMREGION_DISPOSE ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68_09", 0x00000, 0x8000, CRC(a293cc2e) SHA1(a2c2598e92982d13b51cbb6efb4b963142233433) ) /* Tiles */
ROM_LOAD( "a68_08", 0x08000, 0x8000, CRC(37662375) SHA1(46ba8a3f0b553d476ecf431d0d20556896b4ca43) )
ROM_LOAD( "a68_07", 0x10000, 0x8000, CRC(cf1a964c) SHA1(e9223c8d4f3bdafed193a1ded63e377f16f45e17) )
ROM_LOAD( "a68_06", 0x18000, 0x8000, CRC(05f9eb9a) SHA1(a71640a63b259799086d361ef293aa26cec46a0c) )
ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68-13", 0x00000, 0x8000, CRC(643fb282) SHA1(d904d3c27c2b56341929c5eed4ea97e948c53c34) ) /* Sprites */
ROM_LOAD( "a68-12", 0x08000, 0x8000, CRC(11f74e32) SHA1(02d8b4cc679f45a02c4989f2b62cde91b7418235) )
ROM_LOAD( "a68-11", 0x10000, 0x8000, CRC(f24158cf) SHA1(db4c6b68a488b0798ea5f793ac8ced283a8ecab2) )
ROM_LOAD( "a68-10", 0x18000, 0x8000, CRC(83161ed0) SHA1(a6aa28f22f487dc3a2ec07935e6d42bcdd1eff81) )
ROM_REGION( 0x0300, REGION_PROMS, 0 )
ROM_LOAD( "rom21", 0x0000, 0x0100, CRC(d6360b4d) SHA1(3e64548c82a3378fc091e104cdc2b0c7e592fc44) )
ROM_LOAD( "rom20", 0x0100, 0x0100, CRC(4ca01887) SHA1(2892c89d5e60f1d10593adffff55c1a9654e8209) )
ROM_LOAD( "rom19", 0x0200, 0x0100, CRC(513224f0) SHA1(15b34612206138f6fc5f7478925b1fff2ed56aa8) )
ROM_END
static DRIVER_INIT( tigerh ) static DRIVER_INIT( tigerh )
{ {
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, tigerh_mcu_r, tigerh_mcu_w ); memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, tigerh_mcu_r, tigerh_mcu_w );
} }
static READ8_HANDLER( getstar_mcu_r ) static DRIVER_INIT( tigerhb )
{ {
/* pass the first check only */ memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, tigerhb_e803_r, tigerhb_e803_w );
return 0x76;
} }
static DRIVER_INIT( getstar )
{
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, getstar_mcu_r );
// memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, getstar_mcu_w );
}
static DRIVER_INIT( getstarb ) static READ8_HANDLER( gtstarb1_port_0_read )
{ {
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, getstar_e803_r ); /* The bootleg has it's own 'protection' on startup ?
} 6D1A: 06 04 ld b,$04
6D1C: DB 00 in a,($00)
static READ8_HANDLER( gtstarba_port_0_read ) 6D1E: E6 06 and $06
{ 6D20: 20 FA jr nz,$6D1C
/* the bootleg has it's own 'protection' on startup? */ 6D22: DB 00 in a,($00)
6D24: E6 06 and $06
6D26: FE 06 cp $06
6D28: 20 F8 jr nz,$6D22
6D2A: DB 00 in a,($00)
6D2C: E6 06 and $06
6D2E: FE 02 cp $02
6D30: 20 F8 jr nz,$6D2A
6D32: DB 00 in a,($00)
6D34: E6 06 and $06
6D36: FE 04 cp $04
6D38: 20 F8 jr nz,$6D32
6D3A: 10 E0 djnz $6D1C
*/
if (activecpu_get_pc() == 0x6d1e) return 0; if (activecpu_get_pc() == 0x6d1e) return 0;
if (activecpu_get_pc() == 0x6d24) return 6; if (activecpu_get_pc() == 0x6d24) return 6;
if (activecpu_get_pc() == 0x6d2c) return 2; if (activecpu_get_pc() == 0x6d2c) return 2;
if (activecpu_get_pc() == 0x6d34) return 4; if (activecpu_get_pc() == 0x6d34) return 4;
/* The bootleg hangs in the "test mode" before diplaying (wrong) lives settings :
6AD4: DB 00 in a,($00)
6AD6: CB 4F bit 1,a
6AD8: 28 FA jr z,$6AD4
6ADA: 3E 23 ld a,$23
6ADC: CD 52 11 call $1152
6ADF: 32 03 E8 ld ($E803),a
6AE2: DB 00 in a,($00)
6AE4: CB 4F bit 1,a
6AE6: 28 FA jr z,$6AE2
6AE8: 3A 0A C8 ld a,($C80A)
6AEB: E6 03 and $03
6AED: CD 52 11 call $1152
6AF0: 32 03 E8 ld ($E803),a
6AF3: DB 00 in a,($00)
6AF5: CB 57 bit 2,a
6AF7: 20 FA jr nz,$6AF3
This seems to be what used to be the MCU status.
*/
if (activecpu_get_pc() == 0x6ad6) return 2; /* bit 1 must be ON */
if (activecpu_get_pc() == 0x6ae4) return 2; /* bit 1 must be ON */
if (activecpu_get_pc() == 0x6af5) return 0; /* bit 2 must be OFF */
logerror("Port Read PC=%04x\n",activecpu_get_pc()); logerror("Port Read PC=%04x\n",activecpu_get_pc());
return 0; return 0;
} }
static READ8_HANDLER( gtstarba_dpram_r ) static READ8_HANDLER( gtstarb1_dpram_r )
{ {
/* requires this or it gets stuck with 'rom test' on screen */ /* requires this or it gets stuck with 'rom test' on screen */
/* it is possible the program roms are slighly corrupt like the gfx roms, or /* it is possible the program roms are slighly corrupt like the gfx roms, or
that the bootleg simply shouldn't execute the code due to the modified that the bootleg simply shouldn't execute the code due to the modified roms */
roms */
if (activecpu_get_pc()==0x6d54) return 0xff; if (activecpu_get_pc()==0x6d54) return 0xff;
return slapfight_dpram[offset]; return slapfight_dpram[offset];
} }
static DRIVER_INIT( gtstarba ) static void getstar_init( running_machine *machine )
{ {
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_IO, 0x0, 0x0, 0, 0, gtstarba_port_0_read ); memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe803, 0xe803, 0, 0, getstar_e803_r, getstar_e803_w );
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xc800, 0xc80f, 0, 0, gtstarba_dpram_r ); }
static DRIVER_INIT( getstar )
{
getstar_id = GETSTAR;
getstar_init(machine);
}
static DRIVER_INIT( getstarj )
{
getstar_id = GETSTARJ;
getstar_init(machine);
}
static DRIVER_INIT( gtstarb1 )
{
getstar_id = GTSTARB1;
getstar_init(machine);
/* specific handlers for this bootleg */
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_IO, 0x0, 0x0, 0, 0, gtstarb1_port_0_read );
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xc800, 0xc80f, 0, 0, gtstarb1_dpram_r );
}
static DRIVER_INIT( gtstarb2 )
{
getstar_id = GTSTARB2;
getstar_init(machine);
} }
@ -1638,17 +1728,17 @@ static DRIVER_INIT( slapfigh )
GAME( 1985, perfrman, 0, perfrman, perfrman, 0, ROT270, "[Toaplan] Data East Corporation", "Performan (Japan)", 0 ) GAME( 1985, perfrman, 0, perfrman, perfrman, 0, ROT270, "[Toaplan] Data East Corporation", "Performan (Japan)", 0 )
GAME( 1985, perfrmau, perfrman, perfrman, perfrman, 0, ROT270, "[Toaplan] Data East USA", "Performan (US)", 0 ) GAME( 1985, perfrmau, perfrman, perfrman, perfrman, 0, ROT270, "[Toaplan] Data East USA", "Performan (US)", 0 )
GAME( 1985, tigerh, 0, tigerh, tigerh, tigerh, ROT270, "Taito America Corp.", "Tiger Heli (US)", GAME_NO_COCKTAIL ) GAME( 1985, tigerh, 0, tigerh, tigerh, tigerh, ROT270, "Taito America Corp.", "Tiger Heli (US)", GAME_NO_COCKTAIL )
GAME( 1985, tigerh2, tigerh, tigerh, tigerh, tigerh, ROT270, "Taito", "Tiger Heli (Japan set 1)", GAME_NOT_WORKING | GAME_NO_COCKTAIL ) GAME( 1985, tigerhj, tigerh, tigerh, tigerh, tigerh, ROT270, "Taito", "Tiger Heli (Japan)", GAME_NO_COCKTAIL )
GAME( 1985, tigerhj, tigerh, tigerh, tigerh, tigerh, ROT270, "Taito", "Tiger Heli (Japan set 2)", GAME_NO_COCKTAIL ) GAME( 1985, tigerhb1, tigerh, tigerhb, tigerh, tigerhb, ROT270, "bootleg", "Tiger Heli (bootleg set 1)", GAME_NO_COCKTAIL )
GAME( 1985, tigerhb1, tigerh, tigerhb, tigerh, 0, ROT270, "bootleg", "Tiger Heli (bootleg set 1)", 0 )
GAME( 1985, tigerhb2, tigerh, tigerhb, tigerh, 0, ROT270, "bootleg", "Tiger Heli (bootleg set 2)", GAME_NO_COCKTAIL ) GAME( 1985, tigerhb2, tigerh, tigerhb, tigerh, 0, ROT270, "bootleg", "Tiger Heli (bootleg set 2)", GAME_NO_COCKTAIL )
GAME( 1985, tigerhb3, tigerh, tigerhb, tigerh, 0, ROT270, "bootleg", "Tiger Heli (bootleg set 3)", GAME_NO_COCKTAIL )
GAME( 1986, slapfigh, 0, slapfigh, slapfigh, slapfigh, ROT270, "Taito", "Slap Fight (set 1)", GAME_NOT_WORKING | GAME_NO_COCKTAIL ) GAME( 1986, slapfigh, 0, slapfigh, slapfigh, slapfigh, ROT270, "Taito", "Slap Fight (set 1)", GAME_NOT_WORKING | GAME_NO_COCKTAIL )
GAME( 1986, slapfiga, slapfigh, slapfigh, slapfigh, slapfigh, ROT270, "Taito", "Slap Fight (set 2)", GAME_NOT_WORKING | GAME_NO_COCKTAIL ) GAME( 1986, slapfiga, slapfigh, slapfigh, slapfigh, slapfigh, ROT270, "Taito", "Slap Fight (set 2)", GAME_NOT_WORKING | GAME_NO_COCKTAIL )
GAME( 1986, alcon, slapfigh, slapfigh, slapfigh, slapfigh, ROT270, "Taito America Corp.", "Alcon", GAME_NOT_WORKING | GAME_NO_COCKTAIL )
GAME( 1986, slapbtjp, slapfigh, slapfigh, slapfigh, 0, ROT270, "bootleg", "Slap Fight (Japan bootleg)", GAME_NO_COCKTAIL ) GAME( 1986, slapbtjp, slapfigh, slapfigh, slapfigh, 0, ROT270, "bootleg", "Slap Fight (Japan bootleg)", GAME_NO_COCKTAIL )
GAME( 1986, slapbtuk, slapfigh, slapbtuk, slapfigh, 0, ROT270, "bootleg", "Slap Fight (English bootleg)", GAME_NO_COCKTAIL ) GAME( 1986, slapbtuk, slapfigh, slapbtuk, slapfigh, 0, ROT270, "bootleg", "Slap Fight (English bootleg)", GAME_NO_COCKTAIL )
GAME( 1986, slapfgtr, slapfigh, slapbtuk, slapfigh, 0, ROT270, "bootleg", "Slap Fight (bootleg)", GAME_NO_COCKTAIL ) // PCB labeled 'slap fighter' GAME( 1986, slapfgtr, slapfigh, slapbtuk, slapfigh, 0, ROT270, "bootleg", "Slap Fight (bootleg)", GAME_NO_COCKTAIL ) // PCB labeled 'slap fighter'
GAME( 1986, alcon, slapfigh, slapfigh, slapfigh, slapfigh, ROT270, "Taito America Corp.", "Alcon", GAME_NOT_WORKING | GAME_NO_COCKTAIL ) GAME( 1986, getstar, 0, slapfigh, getstar, getstar, ROT0, "Taito America Corporation (Kitkorp license)", "Guardian (US)", GAME_NO_COCKTAIL )
GAME( 1986, getstar, 0, slapfigh, getstar, getstar, ROT0, "Taito", "Guardian", GAME_NOT_WORKING | GAME_NO_COCKTAIL ) GAME( 1986, getstarj, getstar, slapfigh, getstarj, getstarj, ROT0, "Taito", "Get Star (Japan)", GAME_NO_COCKTAIL )
GAME( 1986, getstarj, getstar, slapfigh, getstar, getstar, ROT0, "Taito", "Get Star (Japan)", GAME_NOT_WORKING | GAME_NO_COCKTAIL ) GAME( 1986, gtstarb1, getstar, slapfigh, getstarj, gtstarb1, ROT0, "bootleg", "Get Star (bootleg set 1)", GAME_NO_COCKTAIL )
GAME( 1986, getstarb, getstar, slapfigh, getstar, getstarb, ROT0, "bootleg", "Get Star (bootleg set 1)", GAME_NO_COCKTAIL ) GAME( 1986, gtstarb2, getstar, slapfigh, gtstarb2, gtstarb2, ROT0, "bootleg", "Get Star (bootleg set 2)", GAME_NO_COCKTAIL )
GAME( 1986, gtstarba, getstar, slapfigh, gtstarba, gtstarba, ROT0, "bootleg", "Get Star (bootleg set 2)", GAME_NO_COCKTAIL )

View File

@ -1,3 +1,35 @@
#include "cpu/z80/z80.h"
/* This it the best way to allow game specific kludges until the system is fully understood */
enum {
GETSTUNK=0, /* unknown for inclusion of possible new sets */
GETSTAR,
GETSTARJ,
GTSTARB1, /* "good" bootleg with same behaviour as 'getstarj' */
GTSTARB2, /* "lame" bootleg with lots of ingame bugs */
};
/*----------- defines -----------*/
/* due to code at 0x108d (GUARDIAN) or 0x1152 (GETSTARJ),
register C is a unaltered copy of register A */
# define GS_SAVE_REGS gs_a = activecpu_get_reg(Z80_BC) >> 0; \
gs_d = activecpu_get_reg(Z80_DE) >> 8; \
gs_e = activecpu_get_reg(Z80_DE) >> 0;
# define GS_RESET_REGS gs_a = 0; \
gs_d = 0; \
gs_e = 0;
/*----------- defined in drivers/slapfght.c -----------*/
extern int getstar_id;
/*----------- defined in machine/slapfght.c -----------*/ /*----------- defined in machine/slapfght.c -----------*/
MACHINE_RESET( slapfight ); MACHINE_RESET( slapfight );
@ -15,7 +47,10 @@ WRITE8_HANDLER( slapfight_port_07_w );
WRITE8_HANDLER( slapfight_port_08_w ); WRITE8_HANDLER( slapfight_port_08_w );
WRITE8_HANDLER( slapfight_port_09_w ); WRITE8_HANDLER( slapfight_port_09_w );
READ8_HANDLER( getstar_e803_r ); READ8_HANDLER( getstar_e803_r );
WRITE8_HANDLER( getstar_e803_w );
READ8_HANDLER ( tigerh_68705_portA_r ); READ8_HANDLER ( tigerh_68705_portA_r );
WRITE8_HANDLER( tigerh_68705_portA_w ); WRITE8_HANDLER( tigerh_68705_portA_w );
@ -30,6 +65,10 @@ WRITE8_HANDLER( tigerh_mcu_w );
READ8_HANDLER ( tigerh_mcu_r ); READ8_HANDLER ( tigerh_mcu_r );
READ8_HANDLER ( tigerh_mcu_status_r ); READ8_HANDLER ( tigerh_mcu_status_r );
READ8_HANDLER( tigerhb_e803_r );
WRITE8_HANDLER( tigerhb_e803_w );
WRITE8_HANDLER( getstar_sh_intenable_w ); WRITE8_HANDLER( getstar_sh_intenable_w );
INTERRUPT_GEN( getstar_interrupt ); INTERRUPT_GEN( getstar_interrupt );

View File

@ -22,6 +22,16 @@ static int slapfight_status_state;
static UINT8 mcu_val; static UINT8 mcu_val;
/* used for MCU simulation of 'getstar' and its clones */
static UINT8 getstar_cmd;
/* copy of some Z80 registers for 'getstar' and its clones */
static UINT8 gs_a, gs_d, gs_e;
/* used for MCU simulation of 'tigerhb1' */
static UINT8 tigerhb_cmd;
/* Perform basic machine initialisation */ /* Perform basic machine initialisation */
MACHINE_RESET( slapfight ) MACHINE_RESET( slapfight )
{ {
@ -114,21 +124,559 @@ READ8_HANDLER( slapfight_port_00_r )
} }
/*
Reads at e803 expect a sequence of values such that:
- first value is different from successive
- third value is (first+5)^0x56
I don't know what writes to this address do (connected to port 0 reads?).
*/
READ8_HANDLER( getstar_e803_r ) READ8_HANDLER( getstar_e803_r )
{ {
static const UINT8 seq[] = { 0, 1, ((0+5)^0x56) }; UINT16 tmp = 0; /* needed for values computed on 16 bits */
UINT8 val; UINT8 getstar_val = 0;
UINT8 phase_lookup_table[] = {0x00, 0x01, 0x03, 0xff, 0xff, 0x02, 0x05, 0xff, 0xff, 0x05}; /* table at 0x0e05 in 'gtstarb1' */
UINT8 lives_lookup_table[] = {0x03, 0x05, 0x01, 0x02}; /* table at 0x0e62 in 'gtstarb1' */
UINT8 lgsb2_lookup_table[] = {0x00, 0x03, 0x04, 0x05}; /* fake tanle for "test mode" in 'gtstarb2' */
val = seq[getstar_sequence_index]; switch (getstar_id)
getstar_sequence_index = (getstar_sequence_index+1)%3; {
return val; case GETSTAR:
case GETSTARJ:
switch (getstar_cmd)
{
case 0x20: /* continue play */
getstar_val = ((gs_a & 0x30) == 0x30) ? 0x20 : 0x80;
break;
case 0x21: /* lose life */
getstar_val = (gs_a << 1) | (gs_a >> 7);
break;
case 0x22: /* starting difficulty */
getstar_val = ((gs_a & 0x0c) >> 2) + 1;
break;
case 0x23: /* starting lives */
getstar_val = lives_lookup_table[gs_a];
break;
case 0x24: /* game phase */
getstar_val = phase_lookup_table[((gs_a & 0x18) >> 1) | (gs_a & 0x03)];
break;
case 0x25: /* players inputs */
getstar_val = BITSWAP8(gs_a, 3, 2, 1, 0, 7, 5, 6, 4);
break;
case 0x26: /* background (1st read) */
tmp = 0x8800 + (0x001f * gs_a);
getstar_val = (tmp & 0x00ff) >> 0;
getstar_cmd |= 0x80; /* to allow a second consecutive read */
break;
case 0xa6: /* background (2nd read) */
tmp = 0x8800 + (0x001f * gs_a);
getstar_val = (tmp & 0xff00) >> 8;
break;
case 0x29: /* unknown effect */
getstar_val = 0x00;
break;
case 0x2a: /* change player (if 2 players game) */
getstar_val = (gs_a ^ 0x40);
break;
case 0x37: /* foreground (1st read) */
tmp = ((0xd0 + ((gs_e >> 2) & 0x0f)) << 8) | (0x40 * (gs_e & 03) + gs_d);
getstar_val = (tmp & 0x00ff) >> 0;
getstar_cmd |= 0x80; /* to allow a second consecutive read */
break;
case 0xb7: /* foreground (2nd read) */
tmp = ((0xd0 + ((gs_e >> 2) & 0x0f)) << 8) | (0x40 * (gs_e & 03) + gs_d);
getstar_val = (tmp & 0xff00) >> 8;
break;
case 0x38: /* laser position (1st read) */
tmp = 0xf740 - (((gs_e >> 4) << 8) | ((gs_e & 0x08) ? 0x80 : 0x00)) + (0x02 + (gs_d >> 2));
getstar_val = (tmp & 0x00ff) >> 0;
getstar_cmd |= 0x80; /* to allow a second consecutive read */
break;
case 0xb8: /* laser position (2nd read) */
tmp = 0xf740 - (((gs_e >> 4) << 8) | ((gs_e & 0x08) ? 0x80 : 0x00)) + (0x02 + (gs_d >> 2));
getstar_val = (tmp & 0xff00) >> 8;
break;
case 0x73: /* avoid "BAD HW" message */
getstar_val = 0x76;
break;
default:
logerror("%04x: getstar_e803_r - cmd = %02x\n",activecpu_get_pc(),getstar_cmd);
break;
}
break;
case GTSTARB1:
/* value isn't computed by the bootleg but we want to please the "test mode" */
if (activecpu_get_pc() == 0x6b04) return (lives_lookup_table[gs_a]);
break;
case GTSTARB2:
/*
056B: 21 03 E8 ld hl,$E803
056E: 7E ld a,(hl)
056F: BE cp (hl)
0570: 28 FD jr z,$056F
0572: C6 05 add a,$05
0574: EE 56 xor $56
0576: BE cp (hl)
0577: C2 6E 05 jp nz,$056E
*/
if (activecpu_get_pc() == 0x056e) return (getstar_val);
if (activecpu_get_pc() == 0x0570) return (getstar_val+1);
if (activecpu_get_pc() == 0x0577) return ((getstar_val+0x05) ^ 0x56);
/* value isn't computed by the bootleg but we want to please the "test mode" */
if (activecpu_get_pc() == 0x6b04) return (lgsb2_lookup_table[gs_a]);
break;
default:
logerror("%04x: getstar_e803_r - cmd = %02x - unknown set !\n",activecpu_get_pc(),getstar_cmd);
break;
}
return getstar_val;
}
WRITE8_HANDLER( getstar_e803_w )
{
switch (getstar_id)
{
case GETSTAR:
/* unknown effect - not read back */
if (activecpu_get_pc() == 0x00bf)
{
getstar_cmd = 0x00;
GS_RESET_REGS
}
/* players inputs */
if (activecpu_get_pc() == 0x0560)
{
getstar_cmd = 0x25;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x056d)
{
getstar_cmd = 0x25;
GS_SAVE_REGS
}
/* lose life */
if (activecpu_get_pc() == 0x0a0a)
{
getstar_cmd = 0x21;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0a17)
{
getstar_cmd = 0x21;
GS_SAVE_REGS
}
/* unknown effect */
if (activecpu_get_pc() == 0x0a51)
{
getstar_cmd = 0x29;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0a6e)
{
getstar_cmd = 0x29;
GS_SAVE_REGS
}
/* continue play */
if (activecpu_get_pc() == 0x0ae3)
{
getstar_cmd = 0x20;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0af0)
{
getstar_cmd = 0x20;
GS_SAVE_REGS
}
/* unknown effect - not read back */
if (activecpu_get_pc() == 0x0b62)
{
getstar_cmd = 0x00; /* 0x1f */
GS_RESET_REGS
}
/* change player (if 2 players game) */
if (activecpu_get_pc() == 0x0bab)
{
getstar_cmd = 0x2a;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0bb8)
{
getstar_cmd = 0x2a;
GS_SAVE_REGS
}
/* game phase */
if (activecpu_get_pc() == 0x0d37)
{
getstar_cmd = 0x24;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0d44)
{
getstar_cmd = 0x24;
GS_SAVE_REGS
}
/* starting lives */
if (activecpu_get_pc() == 0x0d79)
{
getstar_cmd = 0x23;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0d8a)
{
getstar_cmd = 0x23;
GS_SAVE_REGS
}
/* starting difficulty */
if (activecpu_get_pc() == 0x0dc1)
{
getstar_cmd = 0x22;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0dd0)
{
getstar_cmd = 0x22;
GS_SAVE_REGS
}
/* starting lives (again) */
if (activecpu_get_pc() == 0x1011)
{
getstar_cmd = 0x23;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x101e)
{
getstar_cmd = 0x23;
GS_SAVE_REGS
}
/* hardware test */
if (activecpu_get_pc() == 0x107a)
{
getstar_cmd = 0x73;
GS_RESET_REGS
}
/* game phase (again) */
if (activecpu_get_pc() == 0x10c6)
{
getstar_cmd = 0x24;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x10d3)
{
getstar_cmd = 0x24;
GS_SAVE_REGS
}
/* background */
if (activecpu_get_pc() == 0x1910)
{
getstar_cmd = 0x26;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x191d)
{
getstar_cmd = 0x26;
GS_SAVE_REGS
}
/* foreground */
if (activecpu_get_pc() == 0x19d5)
{
getstar_cmd = 0x37;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x19e4)
{
getstar_cmd = 0x37;
GS_SAVE_REGS
}
if (activecpu_get_pc() == 0x19f1)
{
getstar_cmd = 0x37;
/* do NOT update the registers because there are 2 writes before 2 reads ! */
}
/* laser position */
if (activecpu_get_pc() == 0x26af)
{
getstar_cmd = 0x38;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x26be)
{
getstar_cmd = 0x38;
GS_SAVE_REGS
}
if (activecpu_get_pc() == 0x26cb)
{
getstar_cmd = 0x38;
/* do NOT update the registers because there are 2 writes before 2 reads ! */
}
/* starting lives (for "test mode") */
if (activecpu_get_pc() == 0x6a27)
{
getstar_cmd = 0x23;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x6a38)
{
getstar_cmd = 0x23;
GS_SAVE_REGS
}
break;
case GETSTARJ:
/* unknown effect - not read back */
if (activecpu_get_pc() == 0x00bf)
{
getstar_cmd = 0x00;
GS_RESET_REGS
}
/* players inputs */
if (activecpu_get_pc() == 0x0560)
{
getstar_cmd = 0x25;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x056d)
{
getstar_cmd = 0x25;
GS_SAVE_REGS
}
/* lose life */
if (activecpu_get_pc() == 0x0ad5)
{
getstar_cmd = 0x21;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0ae2)
{
getstar_cmd = 0x21;
GS_SAVE_REGS
}
/* unknown effect */
if (activecpu_get_pc() == 0x0b1c)
{
getstar_cmd = 0x29;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0b29)
{
getstar_cmd = 0x29;
GS_SAVE_REGS
}
/* continue play */
if (activecpu_get_pc() == 0x0bae)
{
getstar_cmd = 0x20;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0bbb)
{
getstar_cmd = 0x20;
GS_SAVE_REGS
}
/* unknown effect - not read back */
if (activecpu_get_pc() == 0x0c2d)
{
getstar_cmd = 0x00; /* 0x1f */
GS_RESET_REGS
}
/* change player (if 2 players game) */
if (activecpu_get_pc() == 0x0c76)
{
getstar_cmd = 0x2a;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0c83)
{
getstar_cmd = 0x2a;
GS_SAVE_REGS
}
/* game phase */
if (activecpu_get_pc() == 0x0e02)
{
getstar_cmd = 0x24;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0e0f)
{
getstar_cmd = 0x24;
GS_SAVE_REGS
}
/* starting lives */
if (activecpu_get_pc() == 0x0e44)
{
getstar_cmd = 0x23;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0e55)
{
getstar_cmd = 0x23;
GS_SAVE_REGS
}
/* starting difficulty */
if (activecpu_get_pc() == 0x0e8c)
{
getstar_cmd = 0x22;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x0e9b)
{
getstar_cmd = 0x22;
GS_SAVE_REGS
}
/* starting lives (again) */
if (activecpu_get_pc() == 0x10d6)
{
getstar_cmd = 0x23;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x10e3)
{
getstar_cmd = 0x23;
GS_SAVE_REGS
}
/* hardware test */
if (activecpu_get_pc() == 0x113f)
{
getstar_cmd = 0x73;
GS_RESET_REGS
}
/* game phase (again) */
if (activecpu_get_pc() == 0x118b)
{
getstar_cmd = 0x24;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x1198)
{
getstar_cmd = 0x24;
GS_SAVE_REGS
}
/* background */
if (activecpu_get_pc() == 0x19f8)
{
getstar_cmd = 0x26;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x1a05)
{
getstar_cmd = 0x26;
GS_SAVE_REGS
}
/* foreground */
if (activecpu_get_pc() == 0x1abd)
{
getstar_cmd = 0x37;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x1acc)
{
getstar_cmd = 0x37;
GS_SAVE_REGS
}
if (activecpu_get_pc() == 0x1ad9)
{
getstar_cmd = 0x37;
/* do NOT update the registers because there are 2 writes before 2 reads ! */
}
/* laser position */
if (activecpu_get_pc() == 0x2792)
{
getstar_cmd = 0x38;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x27a1)
{
getstar_cmd = 0x38;
GS_SAVE_REGS
}
if (activecpu_get_pc() == 0x27ae)
{
getstar_cmd = 0x38;
/* do NOT update the registers because there are 2 writes before 2 reads ! */
}
/* starting lives (for "test mode") */
if (activecpu_get_pc() == 0x6ae2)
{
getstar_cmd = 0x23;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x6af3)
{
getstar_cmd = 0x23;
GS_SAVE_REGS
}
break;
case GTSTARB1:
/* "Test mode" doesn't compute the lives value :
6ADA: 3E 23 ld a,$23
6ADC: CD 52 11 call $1152
6ADF: 32 03 E8 ld ($E803),a
6AE2: DB 00 in a,($00)
6AE4: CB 4F bit 1,a
6AE6: 28 FA jr z,$6AE2
6AE8: 3A 0A C8 ld a,($C80A)
6AEB: E6 03 and $03
6AED: CD 52 11 call $1152
6AF0: 32 03 E8 ld ($E803),a
6AF3: DB 00 in a,($00)
6AF5: CB 57 bit 2,a
6AF7: 20 FA jr nz,$6AF3
6AF9: 00 nop
6AFA: 00 nop
6AFB: 00 nop
6AFC: 00 nop
6AFD: 00 nop
6AFE: 00 nop
6AFF: 00 nop
6B00: 00 nop
6B01: 3A 03 E8 ld a,($E803)
We save the regs though to hack it in 'getstar_e803_r' read handler.
*/
if (activecpu_get_pc() == 0x6ae2)
{
getstar_cmd = 0x00;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x6af3)
{
getstar_cmd = 0x00;
GS_SAVE_REGS
}
break;
case GTSTARB2:
/* "Test mode" doesn't compute the lives value :
6ADA: 3E 23 ld a,$23
6ADC: CD 52 11 call $1152
6ADF: 32 03 E8 ld ($E803),a
6AE2: DB 00 in a,($00)
6AE4: CB 4F bit 1,a
6AE6: 00 nop
6AE7: 00 nop
6AE8: 3A 0A C8 ld a,($C80A)
6AEB: E6 03 and $03
6AED: CD 52 11 call $1152
6AF0: 32 03 E8 ld ($E803),a
6AF3: DB 00 in a,($00)
6AF5: CB 57 bit 2,a
6AF7: 00 nop
6AF8: 00 nop
6AF9: 00 nop
6AFA: 00 nop
6AFB: 00 nop
6AFC: 00 nop
6AFD: 00 nop
6AFE: 00 nop
6AFF: 00 nop
6B00: 00 nop
6B01: 3A 03 E8 ld a,($E803)
We save the regs though to hack it in 'getstar_e803_r' read handler.
*/
if (activecpu_get_pc() == 0x6ae2)
{
getstar_cmd = 0x00;
GS_RESET_REGS
}
if (activecpu_get_pc() == 0x6af3)
{
getstar_cmd = 0x00;
GS_SAVE_REGS
}
break;
default:
logerror("%04x: getstar_e803_w - data = %02x - unknown set !\n",activecpu_get_pc(),data);
break;
}
} }
/* Enable hardware interrupt of sound cpu */ /* Enable hardware interrupt of sound cpu */
@ -249,3 +797,33 @@ READ8_HANDLER( tigerh_mcu_status_r )
return res; return res;
} }
READ8_HANDLER( tigerhb_e803_r )
{
UINT8 tigerhb_val = 0;
switch (tigerhb_cmd)
{
case 0x73: /* avoid "BAD HW" message */
tigerhb_val = 0x83;
break;
default:
logerror("%04x: tigerhb_e803_r - cmd = %02x\n",activecpu_get_pc(),getstar_cmd);
break;
}
return tigerhb_val;
}
WRITE8_HANDLER( tigerhb_e803_w )
{
switch (data)
{
/* hardware test */
case 0x73:
tigerhb_cmd = 0x73;
break;
default:
logerror("%04x: tigerhb_e803_w - data = %02x\n",activecpu_get_pc(),data);
tigerhb_cmd = 0x00;
break;
}
}

View File

@ -2029,10 +2029,10 @@ const game_driver * const drivers[] =
DRIVER( perfrman ) /* (c) 1985 Data East Corporation (Japan) */ DRIVER( perfrman ) /* (c) 1985 Data East Corporation (Japan) */
DRIVER( perfrmau ) /* (c) 1985 Data East USA (US) */ DRIVER( perfrmau ) /* (c) 1985 Data East USA (US) */
DRIVER( tigerh ) /* A47 (c) 1985 Taito America Corporation GX-551 [not a Konami board!] */ DRIVER( tigerh ) /* A47 (c) 1985 Taito America Corporation GX-551 [not a Konami board!] */
DRIVER( tigerh2 ) /* A47 (c) 1985 Taito Corporation GX-551 [not a Konami board!] */
DRIVER( tigerhj ) /* A47 (c) 1985 Taito Corporation GX-551 [not a Konami board!] */ DRIVER( tigerhj ) /* A47 (c) 1985 Taito Corporation GX-551 [not a Konami board!] */
DRIVER( tigerhb1 ) /* bootleg but (c) 1985 Taito Corporation */ DRIVER( tigerhb1 ) /* bootleg but (c) 1985 Taito Corporation */
DRIVER( tigerhb2 ) /* bootleg but (c) 1985 Taito Corporation */ DRIVER( tigerhb2 ) /* bootleg but (c) 1985 Taito Corporation */
DRIVER( tigerhb3 ) /* bootleg but (c) 1985 Taito Corporation */
DRIVER( slapfigh ) /* A76 / TP-??? */ DRIVER( slapfigh ) /* A76 / TP-??? */
DRIVER( slapfiga ) /* A76 / TP-??? */ DRIVER( slapfiga ) /* A76 / TP-??? */
DRIVER( slapbtjp ) /* bootleg but (c) 1986 Taito Corporation */ DRIVER( slapbtjp ) /* bootleg but (c) 1986 Taito Corporation */
@ -2041,8 +2041,8 @@ const game_driver * const drivers[] =
DRIVER( alcon ) /* A76 / TP-??? */ DRIVER( alcon ) /* A76 / TP-??? */
DRIVER( getstar ) /* A68 (c) 1986 Taito Corporation */ DRIVER( getstar ) /* A68 (c) 1986 Taito Corporation */
DRIVER( getstarj ) /* A68 (c) 1986 Taito Corporation */ DRIVER( getstarj ) /* A68 (c) 1986 Taito Corporation */
DRIVER( getstarb ) /* GX-006 bootleg but (c) 1986 Taito Corporation */ DRIVER( gtstarb1 ) /* GX-006 bootleg but (c) 1986 Taito Corporation */
DRIVER( gtstarba ) /* GX-006 bootleg but (c) 1986 Taito Corporation */ DRIVER( gtstarb2 ) /* GX-006 bootleg but (c) 1986 Taito Corporation */
DRIVER( mjsister ) /* (c) 1986 Toaplan */ DRIVER( mjsister ) /* (c) 1986 Toaplan */
DRIVER( fshark ) /* B02 / TP-007 (c) 1987 Taito Corporation (World) */ DRIVER( fshark ) /* B02 / TP-007 (c) 1987 Taito Corporation (World) */