summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author davidhay <davidhay@localhost>2008-07-19 09:58:31 +0000
committer davidhay <davidhay@localhost>2008-07-19 09:58:31 +0000
commitcce1d8b88ed74a979969b24ed89e57c6c913a091 (patch)
treea33ae9ac2f22a6691100272bc07aaa848ea89eb9
parent75cf90e3f3de5115f0d8446600f740a2b0a1aebd (diff)
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
-rw-r--r--src/emu/cpu/mb86233/mb86233.c243
-rw-r--r--src/emu/cpu/mb86233/mb86233.h1
-rw-r--r--src/mame/drivers/model1.c18
-rw-r--r--src/mame/drivers/model2.c85
4 files changed, 239 insertions, 108 deletions
diff --git a/src/emu/cpu/mb86233/mb86233.c b/src/emu/cpu/mb86233/mb86233.c
index b6eecbf915a..f724c228826 100644
--- a/src/emu/cpu/mb86233/mb86233.c
+++ b/src/emu/cpu/mb86233/mb86233.c
@@ -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(value&0x4000)
+ off=0x4000-off;
+ r=mb86233.Tables[off];
+ }
+ if(value&0x8000)
+ r|=1<<31;
+ return r;
}
- if ( offset == 0x21 ) /* COS from value at RAM(0x20) in 0x4000/PI steps */
+ if(offset==0x27)
{
- 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;
+ 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
+ {
+ 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
- r.f = (float)cos((float)a*(2.0*M_PI/65536.0));
+ {
+ int expdif=exp-0x71;
+ int base;
+ int mask;
+ int shift;
- return r.u;
- }
-#if 0
- if ( offset == 0x22 ) /* -SIN from value at RAM(0x20) in 0x4000/PI steps */
- {
- MB86233_REG r;
- INT32 a;
+ if(expdif<0)
+ expdif=0;
+ base=1<<expdif;
+ mask=base-1;
+ shift=23-expdif;
- r.u = GETEXTPORT()[0x20];
- a = r.i;
- r.f = (float)-sin((float)a*(2.0*M_PI/65536.0));
- return r.u;
- }
-#endif
+ index=base+((value>>shift)&mask);
- if ( offset == 0x27 ) /* atan */
- {
- MB86233_REG r1, r2;
+ }
+
+ res=(mb86233.Tables[index+0x10000/4]>>sign)&0xffff;
- r1.u = GETEXTPORT()[0x24]; /* A */
- r2.u = GETEXTPORT()[0x25]; /* B */
+ if((a.u&0x7fffffff)<=(b.u&0x7fffffff))
+ res=0x4000-res;
- if ( r2.f == 0 )
+
+ if((a.u&0x80000000) && (b.u&0x80000000)) //3rd quadrant
{
- if ( r1.f >= 0 )
- GETEXTPORT()[0x27] = 0;
- else
- GETEXTPORT()[0x27] = 0xFFFF8000;
+ res=0x8000|res;
}
- else if ( r1.f == 0 )
+ else if((a.u&0x80000000) && !(b.u&0x80000000)) //2nd quadrant
{
- if ( r2.f >= 0 )
- GETEXTPORT()[0x27] = 0x4000;
- else
- GETEXTPORT()[0x27] = 0xFFFFC000;
+ res=res&0x7fff;
}
- else
+ else if(!(a.u&0x80000000) && (b.u&0x80000000)) //2nd quadrant
{
- r1.i = (INT32)((atan2(r2.f,r1.f))*32768.0/M_PI);
- GETEXTPORT()[0x27] = r1.u;
+ res=0x8000|res;
}
- return GETEXTPORT()[0x27];
+ return res;
+
}
- if ( offset == 0x28 ) /* 1/x - part 1 */
- return 0;
+ if(offset==0x28)
+ {
+ UINT32 offset=(GETEXTPORT()[0x28]>>10)&0x1fff;
+ UINT32 value=mb86233.Tables[offset*2+0x20000/4];
+ UINT32 srcexp=(GETEXTPORT()[0x28]>>23)&0xff;
+
+ value&=0x7FFFFFFF;
- if ( offset == 0x29 ) /* 1/x - part 2 */
+ return ScaleExp(value,0x7f-srcexp);
+ }
+ if(offset==0x29)
{
- 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)+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;
- if ( offset == 0x2a ) /* 1/sqrt(x) - part 1 */
- return 0;
+ value&=0x7FFFFFFF;
- if ( offset == 0x2b) /* 1/sqrt(x) - part 2 */
+ return ScaleExp(value,0x3f-srcexp);
+ }
+ if(offset==0x2b)
{
- 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()[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
diff --git a/src/emu/cpu/mb86233/mb86233.h b/src/emu/cpu/mb86233/mb86233.h
index 1155e67ea6d..07311ea061f 100644
--- a/src/emu/cpu/mb86233/mb86233.h
+++ b/src/emu/cpu/mb86233/mb86233.h
@@ -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);
diff --git a/src/mame/drivers/model1.c b/src/mame/drivers/model1.c
index aeee3357008..80dfc230c8a 100644
--- a/src/mame/drivers/model1.c
+++ b/src/mame/drivers/model1.c
@@ -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) )
diff --git a/src/mame/drivers/model2.c b/src/mame/drivers/model2.c
index 07a0e5196f3..9c8a7520097 100644
--- a/src/mame/drivers/model2.c
+++ b/src/mame/drivers/model2.c
@@ -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 )