diff options
author | davidhay <davidhay@localhost> | 2008-07-19 09:58:31 +0000 |
---|---|---|
committer | davidhay <davidhay@localhost> | 2008-07-19 09:58:31 +0000 |
commit | cce1d8b88ed74a979969b24ed89e57c6c913a091 (patch) | |
tree | a33ae9ac2f22a6691100272bc07aaa848ea89eb9 | |
parent | 75cf90e3f3de5115f0d8446600f740a2b0a1aebd (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.c | 243 | ||||
-rw-r--r-- | src/emu/cpu/mb86233/mb86233.h | 1 | ||||
-rw-r--r-- | src/mame/drivers/model1.c | 18 | ||||
-rw-r--r-- | src/mame/drivers/model2.c | 85 |
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 ) |