mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
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:
parent
5d5550c907
commit
6f5ef31d90
File diff suppressed because it is too large
Load Diff
@ -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 -----------*/
|
||||
|
||||
MACHINE_RESET( slapfight );
|
||||
@ -15,7 +47,10 @@ WRITE8_HANDLER( slapfight_port_07_w );
|
||||
WRITE8_HANDLER( slapfight_port_08_w );
|
||||
WRITE8_HANDLER( slapfight_port_09_w );
|
||||
|
||||
|
||||
READ8_HANDLER( getstar_e803_r );
|
||||
WRITE8_HANDLER( getstar_e803_w );
|
||||
|
||||
|
||||
READ8_HANDLER ( tigerh_68705_portA_r );
|
||||
WRITE8_HANDLER( tigerh_68705_portA_w );
|
||||
@ -30,6 +65,10 @@ WRITE8_HANDLER( tigerh_mcu_w );
|
||||
READ8_HANDLER ( tigerh_mcu_r );
|
||||
READ8_HANDLER ( tigerh_mcu_status_r );
|
||||
|
||||
READ8_HANDLER( tigerhb_e803_r );
|
||||
WRITE8_HANDLER( tigerhb_e803_w );
|
||||
|
||||
|
||||
WRITE8_HANDLER( getstar_sh_intenable_w );
|
||||
INTERRUPT_GEN( getstar_interrupt );
|
||||
|
||||
|
@ -22,6 +22,16 @@ static int slapfight_status_state;
|
||||
|
||||
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 */
|
||||
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 )
|
||||
{
|
||||
static const UINT8 seq[] = { 0, 1, ((0+5)^0x56) };
|
||||
UINT8 val;
|
||||
UINT16 tmp = 0; /* needed for values computed on 16 bits */
|
||||
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];
|
||||
getstar_sequence_index = (getstar_sequence_index+1)%3;
|
||||
return val;
|
||||
switch (getstar_id)
|
||||
{
|
||||
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 */
|
||||
@ -249,3 +797,33 @@ READ8_HANDLER( tigerh_mcu_status_r )
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -2029,10 +2029,10 @@ const game_driver * const drivers[] =
|
||||
DRIVER( perfrman ) /* (c) 1985 Data East Corporation (Japan) */
|
||||
DRIVER( perfrmau ) /* (c) 1985 Data East USA (US) */
|
||||
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( tigerhb1 ) /* 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( slapfiga ) /* A76 / TP-??? */
|
||||
DRIVER( slapbtjp ) /* bootleg but (c) 1986 Taito Corporation */
|
||||
@ -2041,8 +2041,8 @@ const game_driver * const drivers[] =
|
||||
DRIVER( alcon ) /* A76 / TP-??? */
|
||||
DRIVER( getstar ) /* A68 (c) 1986 Taito Corporation */
|
||||
DRIVER( getstarj ) /* A68 (c) 1986 Taito Corporation */
|
||||
DRIVER( getstarb ) /* GX-006 bootleg but (c) 1986 Taito Corporation */
|
||||
DRIVER( gtstarba ) /* GX-006 bootleg but (c) 1986 Taito Corporation */
|
||||
DRIVER( gtstarb1 ) /* GX-006 bootleg but (c) 1986 Taito Corporation */
|
||||
DRIVER( gtstarb2 ) /* GX-006 bootleg but (c) 1986 Taito Corporation */
|
||||
DRIVER( mjsister ) /* (c) 1986 Toaplan */
|
||||
|
||||
DRIVER( fshark ) /* B02 / TP-007 (c) 1987 Taito Corporation (World) */
|
||||
|
Loading…
Reference in New Issue
Block a user