mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
TGP / Model 2 fixes [ElSemi]
- TGP now correctly uses table roms (model1/2 updated accordingly) - removed FIFO hack on srallyc (game now runs) - added analog ports reading for model 2A/B/C - fixed some loading instructions in the TGP. that fixes srallyc automatic transmission bug
This commit is contained in:
parent
75cf90e3f3
commit
cce1d8b88e
@ -54,6 +54,7 @@ typedef struct
|
||||
/* internal RAM */
|
||||
UINT32 *RAM;
|
||||
UINT32 *ARAM, *BRAM;
|
||||
UINT32 *Tables;
|
||||
} MB86233_REGS;
|
||||
|
||||
/***************************************************************************
|
||||
@ -132,6 +133,7 @@ static void mb86233_init(int index, int clock, const void *config, int (*irqcall
|
||||
memset( mb86233.RAM, 0, 2 * 0x200 * sizeof(UINT32) );
|
||||
mb86233.ARAM = &mb86233.RAM[0];
|
||||
mb86233.BRAM = &mb86233.RAM[0x200];
|
||||
mb86233.Tables = (UINT32*) memory_region(Machine, _config->Tables);
|
||||
|
||||
state_save_register_global_pointer(mb86233.RAM,2 * 0x200 * sizeof(UINT32));
|
||||
}
|
||||
@ -155,6 +157,7 @@ static void mb86233_reset(void)
|
||||
|
||||
#define ZERO_FLAG (1 << 0)
|
||||
#define SIGN_FLAG (1 << 1)
|
||||
#define EXTERNAL_FLAG (1 << 2) //This seems to be a flag coming from some external circuit¿?
|
||||
|
||||
static void FLAGSF( float v )
|
||||
{
|
||||
@ -203,6 +206,10 @@ static int COND( UINT32 cond )
|
||||
case 0x06: /* never */
|
||||
break;
|
||||
|
||||
case 0x0a:
|
||||
if(GETSR() & EXTERNAL_FLAG) return 1;
|
||||
break;
|
||||
|
||||
case 0x10: /* --r12 != 0 */
|
||||
GETGPR(12)--;
|
||||
if ( GETGPR(12) != 0 ) return 1;
|
||||
@ -385,118 +392,166 @@ static void ALU( UINT32 alu)
|
||||
Memory Access
|
||||
***************************************************************************/
|
||||
|
||||
static UINT32 ScaleExp(unsigned int v,int scale)
|
||||
{
|
||||
int exp=(v>>23)&0xff;
|
||||
exp+=scale;
|
||||
v&=~0x7f800000;
|
||||
return v|(exp<<23);
|
||||
}
|
||||
|
||||
|
||||
static UINT32 GETEXTERNAL( UINT32 EB, UINT32 offset )
|
||||
{
|
||||
UINT32 addr;
|
||||
|
||||
if ( EB == 0 && offset >= 0x20 && offset <= 0x2f ) /* TGP Tables in ROM - FIXME - */
|
||||
{
|
||||
if ( offset == 0x20 ) /* SIN from value at RAM(0x20) in 0x4000/PI steps */
|
||||
if(offset>=0x20 && offset<=0x23) //SIN from value at RAM(0x20) in 0x4000/PI steps
|
||||
{
|
||||
MB86233_REG r;
|
||||
INT32 a;
|
||||
|
||||
r.u = GETEXTPORT()[0x20];
|
||||
a = r.i;
|
||||
if ( a == 0 || a == -32768 )
|
||||
r.f = 0;
|
||||
else if ( a == 16384 )
|
||||
r.f = 1.0;
|
||||
else if ( a == -16384 )
|
||||
r.f=-1.0;
|
||||
UINT32 r;
|
||||
UINT32 value=GETEXTPORT()[0x20];
|
||||
UINT32 off;
|
||||
value+=(offset-0x20)<<14;
|
||||
off=value&0x3fff;
|
||||
if((value&0x7fff)==0)
|
||||
r=0;
|
||||
else if((value&0x7fff)==0x4000)
|
||||
r=0x3f800000;
|
||||
else
|
||||
r.f = (float)sin((float)a*(2.0*M_PI/65536.0));
|
||||
|
||||
return r.u;
|
||||
}
|
||||
|
||||
if ( offset == 0x21 ) /* COS from value at RAM(0x20) in 0x4000/PI steps */
|
||||
{
|
||||
MB86233_REG r;
|
||||
INT32 a;
|
||||
|
||||
r.u = GETEXTPORT()[0x20];
|
||||
a = r.i;
|
||||
if ( a == 16384 || a == -16384 )
|
||||
r.f = 0;
|
||||
else if ( a == 0 )
|
||||
r.f = 1.0;
|
||||
else if ( a == -32768 )
|
||||
r.f = -1.0;
|
||||
else
|
||||
r.f = (float)cos((float)a*(2.0*M_PI/65536.0));
|
||||
|
||||
return r.u;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if ( offset == 0x22 ) /* -SIN from value at RAM(0x20) in 0x4000/PI steps */
|
||||
{
|
||||
MB86233_REG r;
|
||||
INT32 a;
|
||||
|
||||
r.u = GETEXTPORT()[0x20];
|
||||
a = r.i;
|
||||
r.f = (float)-sin((float)a*(2.0*M_PI/65536.0));
|
||||
return r.u;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( offset == 0x27 ) /* atan */
|
||||
{
|
||||
MB86233_REG r1, r2;
|
||||
|
||||
r1.u = GETEXTPORT()[0x24]; /* A */
|
||||
r2.u = GETEXTPORT()[0x25]; /* B */
|
||||
|
||||
if ( r2.f == 0 )
|
||||
{
|
||||
if ( r1.f >= 0 )
|
||||
GETEXTPORT()[0x27] = 0;
|
||||
if(value&0x4000)
|
||||
off=0x4000-off;
|
||||
r=mb86233.Tables[off];
|
||||
}
|
||||
if(value&0x8000)
|
||||
r|=1<<31;
|
||||
return r;
|
||||
}
|
||||
|
||||
if(offset==0x27)
|
||||
{
|
||||
unsigned int value=GETEXTPORT()[0x27];
|
||||
int exp=(value>>23)&0xff;
|
||||
unsigned int res=0;
|
||||
unsigned int sign=0;
|
||||
MB86233_REG a,b;
|
||||
int index;
|
||||
|
||||
a.u=GETEXTPORT()[0x24];
|
||||
b.u=GETEXTPORT()[0x25];
|
||||
|
||||
|
||||
if(!exp)
|
||||
{
|
||||
if((a.u&0x7fffffff)<=(b.u&0x7fffffff))
|
||||
{
|
||||
if(b.u&0x80000000)
|
||||
res=0xc000;
|
||||
else
|
||||
res=0x4000;
|
||||
}
|
||||
else
|
||||
GETEXTPORT()[0x27] = 0xFFFF8000;
|
||||
}
|
||||
else if ( r1.f == 0 )
|
||||
{
|
||||
if ( r2.f >= 0 )
|
||||
GETEXTPORT()[0x27] = 0x4000;
|
||||
else
|
||||
GETEXTPORT()[0x27] = 0xFFFFC000;
|
||||
{
|
||||
if(a.u&0x80000000)
|
||||
res=0x8000;
|
||||
else
|
||||
res=0x0000;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
if((a.u^b.u)&0x80000000)
|
||||
sign=16; //the negative values are in the high word
|
||||
|
||||
if((exp&0x70)!=0x70)
|
||||
index=0;
|
||||
else if(exp<0x70 || exp>0x7e)
|
||||
index=0x3fff;
|
||||
else
|
||||
{
|
||||
r1.i = (INT32)((atan2(r2.f,r1.f))*32768.0/M_PI);
|
||||
GETEXTPORT()[0x27] = r1.u;
|
||||
int expdif=exp-0x71;
|
||||
int base;
|
||||
int mask;
|
||||
int shift;
|
||||
|
||||
|
||||
if(expdif<0)
|
||||
expdif=0;
|
||||
base=1<<expdif;
|
||||
mask=base-1;
|
||||
shift=23-expdif;
|
||||
|
||||
index=base+((value>>shift)&mask);
|
||||
|
||||
}
|
||||
|
||||
return GETEXTPORT()[0x27];
|
||||
res=(mb86233.Tables[index+0x10000/4]>>sign)&0xffff;
|
||||
|
||||
if((a.u&0x7fffffff)<=(b.u&0x7fffffff))
|
||||
res=0x4000-res;
|
||||
|
||||
|
||||
if((a.u&0x80000000) && (b.u&0x80000000)) //3rd quadrant
|
||||
{
|
||||
res=0x8000|res;
|
||||
}
|
||||
else if((a.u&0x80000000) && !(b.u&0x80000000)) //2nd quadrant
|
||||
{
|
||||
res=res&0x7fff;
|
||||
}
|
||||
else if(!(a.u&0x80000000) && (b.u&0x80000000)) //2nd quadrant
|
||||
{
|
||||
res=0x8000|res;
|
||||
}
|
||||
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
if ( offset == 0x28 ) /* 1/x - part 1 */
|
||||
return 0;
|
||||
|
||||
if ( offset == 0x29 ) /* 1/x - part 2 */
|
||||
if(offset==0x28)
|
||||
{
|
||||
MB86233_REG r;
|
||||
r.u = GETEXTPORT()[0x28];
|
||||
if ( r.f==0 )
|
||||
r.u = 0x80000000;
|
||||
r.f = 1/r.f;
|
||||
return r.u;
|
||||
UINT32 offset=(GETEXTPORT()[0x28]>>10)&0x1fff;
|
||||
UINT32 value=mb86233.Tables[offset*2+0x20000/4];
|
||||
UINT32 srcexp=(GETEXTPORT()[0x28]>>23)&0xff;
|
||||
|
||||
value&=0x7FFFFFFF;
|
||||
|
||||
return ScaleExp(value,0x7f-srcexp);
|
||||
}
|
||||
|
||||
if ( offset == 0x2a ) /* 1/sqrt(x) - part 1 */
|
||||
return 0;
|
||||
|
||||
if ( offset == 0x2b) /* 1/sqrt(x) - part 2 */
|
||||
if(offset==0x29)
|
||||
{
|
||||
MB86233_REG r;
|
||||
r.u = GETEXTPORT()[0x2a];
|
||||
if ( r.f == 0 )
|
||||
r.u=0x80000000;
|
||||
else
|
||||
r.f = 1/sqrt(r.f);
|
||||
return r.u;
|
||||
UINT32 offset=(GETEXTPORT()[0x28]>>10)&0x1fff;
|
||||
UINT32 value=mb86233.Tables[offset*2+(0x20000/4)+1];
|
||||
UINT32 srcexp=(GETEXTPORT()[0x28]>>23)&0xff;
|
||||
|
||||
value&=0x7FFFFFFF;
|
||||
if(GETEXTPORT()[0x28]&(1<<31))
|
||||
value|=1<<31;
|
||||
|
||||
return ScaleExp(value,0x7f-srcexp);
|
||||
}
|
||||
if(offset==0x2a)
|
||||
{
|
||||
UINT32 offset=((GETEXTPORT()[0x2a]>>11)&0x1fff)^0x1000;
|
||||
UINT32 value=mb86233.Tables[offset*2+0x30000/4];
|
||||
UINT32 srcexp=(GETEXTPORT()[0x2a]>>24)&0x7f;
|
||||
|
||||
value&=0x7FFFFFFF;
|
||||
|
||||
return ScaleExp(value,0x3f-srcexp);
|
||||
}
|
||||
if(offset==0x2b)
|
||||
{
|
||||
UINT32 offset=((GETEXTPORT()[0x2a]>>11)&0x1fff)^0x1000;
|
||||
UINT32 value=mb86233.Tables[offset*2+(0x30000/4)+1];
|
||||
UINT32 srcexp=(GETEXTPORT()[0x2a]>>24)&0x7f;
|
||||
|
||||
value&=0x7FFFFFFF;
|
||||
if(GETEXTPORT()[0x2a]&(1<<31))
|
||||
value|=1<<31;
|
||||
|
||||
return ScaleExp(value,0x3f-srcexp);
|
||||
}
|
||||
|
||||
return GETEXTPORT()[offset];
|
||||
@ -514,6 +569,18 @@ static void SETEXTERNAL( UINT32 EB, UINT32 offset, UINT32 value )
|
||||
if ( EB == 0 && offset >= 0x20 && offset <= 0x2f ) /* TGP Tables in ROM - FIXME - */
|
||||
{
|
||||
GETEXTPORT()[offset] = value;
|
||||
|
||||
if(offset==0x25 || offset==0x24)
|
||||
{
|
||||
if((GETEXTPORT()[0x24]&0x7fffffff)<=(GETEXTPORT()[0x25]&0x7fffffff))
|
||||
{
|
||||
GETSR()|=EXTERNAL_FLAG;
|
||||
}
|
||||
else
|
||||
{
|
||||
GETSR()&=~EXTERNAL_FLAG;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1240,10 +1307,12 @@ static int mb86233_execute(int cycles)
|
||||
}
|
||||
else if ( sub == 1 ) /* A.e */
|
||||
{
|
||||
GETA().u = (imm & 0xff) << 23;
|
||||
GETA().u &= ~0x7f800000;
|
||||
GETA().u |= (imm & 0xff) << 23;
|
||||
}
|
||||
else if ( sub == 2 ) /* A.m */
|
||||
{
|
||||
GETA().u &= 0x7f800000;
|
||||
GETA().u |= (imm & 0x7fffff ) | ((imm & 0x800000) << 8);
|
||||
}
|
||||
else
|
||||
@ -1258,16 +1327,20 @@ static int mb86233_execute(int cycles)
|
||||
UINT32 sub = (opcode>>24) & 0x03;
|
||||
UINT32 imm = opcode & 0xffffff;
|
||||
|
||||
if ( sub == 0 ) /* B ? */
|
||||
if ( sub == 0 ) /* B.e again? */
|
||||
{
|
||||
GETB().u = ((imm & 0x7f) << 23) | ((imm & 0xff) << 8) | ( imm & 0xff );
|
||||
//GETB().u = ((imm & 0x7f) << 23) | ((imm & 0xff) << 8) | ( imm & 0xff );
|
||||
GETB().u &= ~0x7f800000;
|
||||
GETB().u |= (imm & 0xff) << 23;
|
||||
}
|
||||
else if ( sub == 1 ) /* B.e */
|
||||
{
|
||||
GETB().u = (imm & 0xff) << 23;
|
||||
GETB().u &= ~0x7f800000;
|
||||
GETB().u |= (imm & 0xff) << 23;
|
||||
}
|
||||
else if ( sub == 2 ) /* B.m */
|
||||
{
|
||||
GETB().u &= 0x7f800000;
|
||||
GETB().u |= (imm & 0x7fffff ) | ((imm & 0x800000) << 8);
|
||||
}
|
||||
else
|
||||
@ -1288,10 +1361,12 @@ static int mb86233_execute(int cycles)
|
||||
}
|
||||
else if ( sub == 2 ) /* D.e */
|
||||
{
|
||||
GETD().u = (imm & 0xff) << 23;
|
||||
GETD().u &= ~0x7f800000;
|
||||
GETD().u |= (imm & 0xff) << 23;
|
||||
}
|
||||
else if ( sub == 3 ) /* D.m */
|
||||
{
|
||||
GETD().u &= 0x7f800000;
|
||||
GETD().u |= (imm & 0x7fffff ) | ((imm & 0x800000) << 8);
|
||||
}
|
||||
else
|
||||
|
@ -45,6 +45,7 @@ struct mb86233_config
|
||||
{
|
||||
int (*fifo_read_cb)( UINT32* data );
|
||||
void (*fifo_write_cb)( UINT32 data );
|
||||
int Tables;
|
||||
};
|
||||
|
||||
extern void mb86233_get_info(UINT32 state, cpuinfo *info);
|
||||
|
@ -1061,6 +1061,8 @@ static const struct MultiPCM_interface m1_multipcm_interface_2 =
|
||||
REGION_SOUND2
|
||||
};
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( vf )
|
||||
PORT_START_TAG("AN0") /* Unused analog port 0 */
|
||||
PORT_START_TAG("AN1") /* Unused analog port 1 */
|
||||
@ -1224,7 +1226,19 @@ static INPUT_PORTS_START( swa )
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
#define MODEL1_CPU_BOARD \
|
||||
ROM_REGION( 0xc0000, REGION_USER5, 0 ) \
|
||||
ROM_LOAD32_WORD("opr14742.bin", 0x000000, 0x20000, CRC(446a1085) SHA1(51b3f4d3a35a36087ea0ba4e26d6e7d17b6418e2) ) \
|
||||
ROM_LOAD32_WORD("opr14743.bin", 0x000002, 0x20000, CRC(e8953554) SHA1(1499f8e30ac15affc66e6f04ae031bb8680d9260) ) \
|
||||
ROM_LOAD("opr14744.bin", 0x040000, 0x20000, CRC(730ea9e0) SHA1(651f1db4089a400d073b19ada299b4b08b08f372) ) \
|
||||
ROM_LOAD("opr14745.bin", 0x060000, 0x20000, CRC(4c934d96) SHA1(e3349ece0e47f684d61ad11bfea4a90602287350) ) \
|
||||
ROM_LOAD("opr14746.bin", 0x080000, 0x20000, CRC(2a266cbd) SHA1(34e047a93459406c22acf4c25089d1a4955f94ca) ) \
|
||||
ROM_LOAD("opr14747.bin", 0x0a0000, 0x20000, CRC(a4ad5e19) SHA1(7d7ec300eeb9a8de1590011e37108688c092f329) ) \
|
||||
ROM_LOAD("opr14748.bin", 0x0c0000, 0x20000, CRC(4a532cb8) SHA1(23280ebbcd6b2bc8a8e643a2d07a58d6598301b8) ) \
|
||||
|
||||
|
||||
ROM_START( vf )
|
||||
|
||||
ROM_REGION( 0x1400000, REGION_CPU1, 0 ) /* v60 code */
|
||||
ROM_LOAD16_BYTE( "epr-16082.14", 0x200000, 0x80000, CRC(b23f22ee) SHA1(9fd5b5a5974703a60a54de3d2bce4301bfc0e533) )
|
||||
ROM_LOAD16_BYTE( "epr-16083.15", 0x200001, 0x80000, CRC(d12c77f8) SHA1(b4aeba8d5f1ab4aec024391407a2cb58ce2e94b0) )
|
||||
@ -1266,6 +1280,8 @@ ROM_START( vf )
|
||||
ROM_END
|
||||
|
||||
ROM_START( vr )
|
||||
MODEL1_CPU_BOARD
|
||||
|
||||
ROM_REGION( 0x1400000, REGION_CPU1, 0 ) /* v60 code */
|
||||
ROM_LOAD16_BYTE( "epr-14882.14", 0x200000, 0x80000, CRC(547D75AD) SHA1(a57c11966886c37de1d7df131ad60457669231dd) )
|
||||
ROM_LOAD16_BYTE( "epr-14883.15", 0x200001, 0x80000, CRC(6BFAD8B1) SHA1(c1f780e456b405abd42d92f4e03e40aad88f8c22) )
|
||||
@ -1314,6 +1330,8 @@ ROM_START( vr )
|
||||
ROM_END
|
||||
|
||||
ROM_START( vformula )
|
||||
MODEL1_CPU_BOARD
|
||||
|
||||
ROM_REGION( 0x1400000, REGION_CPU1, 0 ) /* v60 code */
|
||||
ROM_LOAD16_BYTE( "epr15638.14", 0x200000, 0x80000, CRC(b9db21a2) SHA1(db58c047977f5fc37f278afe7159a78e3fa6c015) )
|
||||
ROM_LOAD16_BYTE( "epr15639.15", 0x200001, 0x80000, CRC(4c3796f5) SHA1(1bf312a4999a15fbc5d194627f9c0ad9dbc1f2c0) )
|
||||
|
@ -77,6 +77,7 @@ static UINT32 model2_timervals[4], model2_timerorig[4];
|
||||
static int model2_timerrun[4];
|
||||
static emu_timer *model2_timers[4];
|
||||
static int model2_ctrlmode;
|
||||
static int analog_channel;
|
||||
|
||||
static UINT32 *tgp_program;
|
||||
|
||||
@ -192,6 +193,8 @@ static UINT32 copro_fifoout_pop(void)
|
||||
|
||||
copro_fifoout_num--;
|
||||
|
||||
// logerror("COPRO FIFOOUT POP %08X, %f, %d\n", r, *(float*)&r,copro_fifoout_num);
|
||||
|
||||
// set SHARC flag 1: 0 if space available, 1 if FIFO full
|
||||
if (dsp_type == DSP_TYPE_SHARC)
|
||||
{
|
||||
@ -221,7 +224,7 @@ static void copro_fifoout_push(UINT32 data)
|
||||
return;
|
||||
}
|
||||
|
||||
//mame_printf_debug("COPRO FIFOOUT %08X, %f\n", data, *(float*)&data);
|
||||
// logerror("COPRO FIFOOUT PUSH %08X, %f, %d\n", data, *(float*)&data,copro_fifoout_num);
|
||||
|
||||
copro_fifoout_data[copro_fifoout_wpos++] = data;
|
||||
if (copro_fifoout_wpos == COPRO_FIFOOUT_SIZE)
|
||||
@ -335,6 +338,7 @@ static MACHINE_RESET(model2_common)
|
||||
model2_geoctl = 0;
|
||||
model2_geocnt = 0;
|
||||
model2_ctrlmode = 0;
|
||||
analog_channel = 0;
|
||||
|
||||
model2_timervals[0] = 0xfffff;
|
||||
model2_timervals[1] = 0xfffff;
|
||||
@ -442,7 +446,7 @@ static READ32_HANDLER(ctrl0_r)
|
||||
else
|
||||
{
|
||||
ret &= ~0x00300000;
|
||||
return ret | 0x00100000 | (eeprom_read_bit() << 21);
|
||||
return ret | 0x00d00000 | (eeprom_read_bit() << 21);
|
||||
}
|
||||
}
|
||||
static READ32_HANDLER(ctrl1_r)
|
||||
@ -468,6 +472,23 @@ static READ32_HANDLER(analog_r)
|
||||
return input_port_read_safe(machine, "STEER", 0) | input_port_read_safe(machine, "ACCEL", 0)<<16;
|
||||
}
|
||||
|
||||
static READ32_HANDLER(analog_2b_r)
|
||||
{
|
||||
UINT32 iptval=0x00ff;
|
||||
if(analog_channel<4)
|
||||
{
|
||||
iptval=input_port_read_indexed(machine, 3+analog_channel);
|
||||
++analog_channel;
|
||||
}
|
||||
return (iptval<<16)|0x0000001a;
|
||||
}
|
||||
|
||||
static WRITE32_HANDLER(analog_2b_w)
|
||||
{
|
||||
analog_channel=(data>>16)&7;
|
||||
}
|
||||
|
||||
|
||||
static READ32_HANDLER(fifoctl_r)
|
||||
{
|
||||
UINT32 r = 0;
|
||||
@ -494,10 +515,6 @@ static READ32_HANDLER(videoctl_r)
|
||||
|
||||
static READ32_HANDLER(copro_prg_r)
|
||||
{
|
||||
if ((strcmp(machine->gamedrv->name, "manxtt" ) == 0) || (strcmp(machine->gamedrv->name, "srallyc" ) == 0))
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
|
||||
return 0xffffffff;
|
||||
}
|
||||
@ -550,15 +567,8 @@ static WRITE32_HANDLER(copro_function_port_w)
|
||||
|
||||
static READ32_HANDLER(copro_fifo_r)
|
||||
{
|
||||
if ((strcmp(machine->gamedrv->name, "manxtt" ) == 0) || (strcmp(machine->gamedrv->name, "srallyc" ) == 0))
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
//logerror("copro_fifo_r: %08X, %08X\n", offset, mem_mask);
|
||||
return copro_fifoout_pop();
|
||||
}
|
||||
//logerror("copro_fifo_r: %08X, %08X\n", offset, mem_mask);
|
||||
return copro_fifoout_pop();
|
||||
}
|
||||
|
||||
static WRITE32_HANDLER(copro_fifo_w)
|
||||
@ -849,11 +859,11 @@ static READ32_HANDLER(hotd_unk_r)
|
||||
return 0x000c0000;
|
||||
}
|
||||
|
||||
static READ32_HANDLER(sonic_unk_r)
|
||||
/*static READ32_HANDLER(sonic_unk_r)
|
||||
{
|
||||
return 0x001a0000;
|
||||
}
|
||||
|
||||
*/
|
||||
static READ32_HANDLER(daytona_unk_r)
|
||||
{
|
||||
return 0x00400000;
|
||||
@ -1347,8 +1357,7 @@ static ADDRESS_MAP_START( model2a_crx_mem, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x01c00010, 0x01c00013) AM_READ(ctrl10_r)
|
||||
AM_RANGE(0x01c00014, 0x01c00017) AM_READ(ctrl14_r)
|
||||
AM_RANGE(0x01c00018, 0x01c0001b) AM_READ( hotd_unk_r )
|
||||
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ( sonic_unk_r )
|
||||
AM_RANGE(0x01c00200, 0x01c002ff) AM_RAM AM_BASE( &model2_backup2 )
|
||||
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ( analog_2b_r ) AM_WRITE( analog_2b_w )
|
||||
AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE( model2_serial_r, model2_serial_w )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1381,7 +1390,7 @@ static ADDRESS_MAP_START( model2b_crx_mem, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x01c00010, 0x01c00013) AM_READ(ctrl10_r)
|
||||
AM_RANGE(0x01c00014, 0x01c00017) AM_READ(ctrl14_r)
|
||||
AM_RANGE(0x01c00018, 0x01c0001b) AM_READ( hotd_unk_r )
|
||||
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ( sonic_unk_r )
|
||||
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ( analog_2b_r ) AM_WRITE( analog_2b_w )
|
||||
AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE( model2_serial_r, model2_serial_w )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1405,7 +1414,7 @@ static ADDRESS_MAP_START( model2c_crx_mem, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x01c00010, 0x01c00013) AM_READ(ctrl10_r)
|
||||
AM_RANGE(0x01c00014, 0x01c00017) AM_READ(ctrl14_r)
|
||||
AM_RANGE(0x01c00018, 0x01c0001b) AM_READ( hotd_unk_r )
|
||||
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ( sonic_unk_r )
|
||||
AM_RANGE(0x01c0001c, 0x01c0001f) AM_READ( analog_2b_r ) AM_WRITE( analog_2b_w )
|
||||
AM_RANGE(0x01c80000, 0x01c80003) AM_READWRITE( model2_serial_r, model2_serial_w )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1502,6 +1511,33 @@ static INPUT_PORTS_START( daytona )
|
||||
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( srallyc)
|
||||
PORT_START_TAG("IN0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW )
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) // VR
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT(0x90, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START_TAG("IN1")
|
||||
PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START_TAG("IN2")
|
||||
PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START_TAG("STEER") // steer
|
||||
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
|
||||
|
||||
PORT_START_TAG("ACCEL") // accel
|
||||
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
|
||||
|
||||
PORT_START_TAG("BREAK") // brake
|
||||
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) PORT_PLAYER(1)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( bel )
|
||||
PORT_START_TAG("IN0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
@ -1782,6 +1818,7 @@ static const struct mb86233_config tgp_config =
|
||||
{
|
||||
copro_fifoin_pop,
|
||||
copro_fifoout_push,
|
||||
REGION_USER5,
|
||||
};
|
||||
|
||||
|
||||
@ -1972,8 +2009,8 @@ OPR-14747 / Linked to 315-5679B
|
||||
|
||||
#define MODEL2_CPU_BOARD \
|
||||
ROM_REGION( 0xc0000, REGION_USER5, 0 ) \
|
||||
ROM_LOAD("opr-14742a.45", 0x000000, 0x20000, CRC(90c6b117) SHA1(f46429fffcee17d056f56d5fe035a33f1fd6c27e) ) \
|
||||
ROM_LOAD("opr-14743a.46", 0x020000, 0x20000, CRC(ae7f446b) SHA1(5b9f1fc47caf21e061e930c0d72804e4ec8c7bca) ) \
|
||||
ROM_LOAD32_WORD("opr-14742a.45", 0x000000, 0x20000, CRC(90c6b117) SHA1(f46429fffcee17d056f56d5fe035a33f1fd6c27e) ) \
|
||||
ROM_LOAD32_WORD("opr-14743a.46", 0x000002, 0x20000, CRC(ae7f446b) SHA1(5b9f1fc47caf21e061e930c0d72804e4ec8c7bca) ) \
|
||||
ROM_LOAD("opr-14744.58", 0x040000, 0x20000, CRC(730ea9e0) SHA1(651f1db4089a400d073b19ada299b4b08b08f372) ) \
|
||||
ROM_LOAD("opr-14745.59", 0x060000, 0x20000, CRC(4c934d96) SHA1(e3349ece0e47f684d61ad11bfea4a90602287350) ) \
|
||||
ROM_LOAD("opr-14746.62", 0x080000, 0x20000, CRC(2a266cbd) SHA1(34e047a93459406c22acf4c25089d1a4955f94ca) ) \
|
||||
@ -4311,7 +4348,7 @@ GAME( 1994, vcop, 0, model2o, daytona, 0, ROT0, "Sega", "Virtu
|
||||
// Model 2A-CRX (TGPs, SCSP sound board)
|
||||
GAME( 1995, manxtt, 0, model2a, model2, 0, ROT0, "Sega", "Manx TT Superbike (Revision C)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, motoraid, 0, model2a, model2, 0, ROT0, "Sega", "Motoraid", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, srallyc, 0, model2a, model2, 0, ROT0, "Sega", "Sega Rally Championship", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, srallyc, 0, model2a, srallyc,0, ROT0, "Sega", "Sega Rally Championship", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, vf2, 0, model2a, model2, 0, ROT0, "Sega", "Virtua Fighter 2 (ver 2.1)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, vf2b, vf2, model2a, model2, 0, ROT0, "Sega", "Virtua Fighter 2 (Revision B)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1995, vf2a, vf2, model2a, model2, 0, ROT0, "Sega", "Virtua Fighter 2 (Revision A)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
|
||||
|
Loading…
Reference in New Issue
Block a user