Some changes to TGP with no noticeable effect.

This commit is contained in:
Angelo Salese 2014-04-28 01:28:49 +00:00
parent dca98b36ba
commit e44cfd2983

View File

@ -192,7 +192,7 @@ void mb86233_cpu_device::device_reset()
void mb86233_cpu_device::FLAGSF( float v ) void mb86233_cpu_device::FLAGSF( float v )
{ {
GETSR() = 0; GETSR() &= ~(ZERO_FLAG|SIGN_FLAG);
if ( v == 0 ) if ( v == 0 )
GETSR() |= ZERO_FLAG; GETSR() |= ZERO_FLAG;
@ -203,7 +203,7 @@ void mb86233_cpu_device::FLAGSF( float v )
void mb86233_cpu_device::FLAGSI( UINT32 v ) void mb86233_cpu_device::FLAGSI( UINT32 v )
{ {
GETSR() = 0; GETSR() &= ~(ZERO_FLAG|SIGN_FLAG);
if ( v == 0 ) if ( v == 0 )
GETSR() |= ZERO_FLAG; GETSR() |= ZERO_FLAG;
@ -364,7 +364,7 @@ void mb86233_cpu_device::ALU( UINT32 alu)
default: popmessage("TGP uses D = int(D) with FPU control = %02x, contact MAMEdev",m_fpucontrol>>1); break; default: popmessage("TGP uses D = int(D) with FPU control = %02x, contact MAMEdev",m_fpucontrol>>1); break;
} }
FLAGSI( GETD().u); FLAGSI( GETD().i);
break; break;
case 0x10: /* D = D / A */ case 0x10: /* D = D / A */
@ -419,7 +419,7 @@ void mb86233_cpu_device::ALU( UINT32 alu)
break; break;
default: default:
logerror( "TGP: Unknown ALU op %x at PC:%04x\n", alu, GETPC() ); fatalerror( "TGP: Unknown ALU op %x at PC:%04x\n", alu, GETPC() );
break; break;
} }
} }
@ -712,7 +712,7 @@ UINT32 mb86233_cpu_device::GETREGS( UINT32 reg, int source )
return GETREPCNT(); return GETREPCNT();
default: default:
logerror( "TGP: Unknown GETREG (%d) at PC=%04x\n", reg, GETPC() ); fatalerror( "TGP: Unknown GETREG (%d) at PC=%04x\n", reg, GETPC() );
break; break;
} }
} }
@ -789,11 +789,11 @@ void mb86233_cpu_device::SETREGS( UINT32 reg, UINT32 val )
if( mode == 0 || mode == 1 || mode == 3 ) if( mode == 0 || mode == 1 || mode == 3 )
{ {
if(reg==12 || reg==13) // counter regs seem to be 8 bit only
val&=0xff;
if ( reg < 0x10 ) if ( reg < 0x10 )
{ {
if ( reg == 12 || reg == 13 )
val &= 0xff;
GETGPR(reg) = val; GETGPR(reg) = val;
return; return;
} }
@ -850,7 +850,7 @@ void mb86233_cpu_device::SETREGS( UINT32 reg, UINT32 val )
break; break;
case 0x1D: /* P.e */ case 0x1D: /* P.e */
GETP().u &= ~((0x0000007f) << 23); GETP().u &= ~((0x000000ff) << 23);
GETP().u |= (( val & 0xff ) << 23 ); GETP().u |= (( val & 0xff ) << 23 );
break; break;
@ -1062,14 +1062,22 @@ void mb86233_cpu_device::execute_run()
case 0x04: /* MOV RAM->External */ case 0x04: /* MOV RAM->External */
{ {
SETEXTERNAL( GETEB(), r2, GETARAM()[r1]); SETEXTERNAL( GETEB(), r2, GETARAM()[r1]);
ALU( alu); ALU(alu);
} }
break; break;
case 0x0c: /* MOV RAM->BRAM */ case 0x0c: /* MOV RAM->BRAM */
{ {
GETBRAM()[r2] = GETARAM()[r1]; GETBRAM()[r2] = GETARAM()[r1];
ALU( alu); ALU(alu);
}
break;
case 0x0d: /* Move RAM->BRAM indirect? */
{
val = GETARAM()[r1];
ALU(alu);
GETBRAM()[INDIRECT(r2|(2<<6),0)] = val;
} }
break; break;
@ -1088,7 +1096,7 @@ void mb86233_cpu_device::execute_run()
if ( GETFIFOWAIT() ) if ( GETFIFOWAIT() )
break; break;
ALU( alu); ALU(alu);
SETREGS(r2,val); SETREGS(r2,val);
} }
break; break;
@ -1101,7 +1109,7 @@ void mb86233_cpu_device::execute_run()
if ( GETFIFOWAIT() ) if ( GETFIFOWAIT() )
break; break;
ALU( alu); ALU(alu);
if ( ( r2 >> 6 ) & 0x01) if ( ( r2 >> 6 ) & 0x01)
{ {
@ -1129,8 +1137,8 @@ void mb86233_cpu_device::execute_run()
if ( GETFIFOWAIT() ) if ( GETFIFOWAIT() )
break; break;
ALU( alu); ALU(alu);
SETREGS( r2, val ); SETREGS(r2, val);
} }
} }
break; break;
@ -1138,7 +1146,7 @@ void mb86233_cpu_device::execute_run()
case 0x0f: /* MOV RAMInd->BRAMInd */ case 0x0f: /* MOV RAMInd->BRAMInd */
{ {
val = GETARAM()[INDIRECT(r1,1)]; val = GETARAM()[INDIRECT(r1,1)];
ALU( alu); ALU(alu);
GETBRAM()[INDIRECT(r2|(6<<6),0)] = val; GETBRAM()[INDIRECT(r2|(6<<6),0)] = val;
} }
break; break;
@ -1146,7 +1154,7 @@ void mb86233_cpu_device::execute_run()
case 0x13: /* MOV BRAMInd->RAMInd */ case 0x13: /* MOV BRAMInd->RAMInd */
{ {
val = GETBRAM()[INDIRECT(r1,1)]; val = GETBRAM()[INDIRECT(r1,1)];
ALU( alu); ALU(alu);
GETARAM()[INDIRECT(r2|(6<<6),0)] = val; GETARAM()[INDIRECT(r2|(6<<6),0)] = val;
} }
break; break;
@ -1154,7 +1162,7 @@ void mb86233_cpu_device::execute_run()
case 0x10: /* MOV RAMInd->RAM */ case 0x10: /* MOV RAMInd->RAM */
{ {
val = GETBRAM()[INDIRECT(r1,1)]; val = GETBRAM()[INDIRECT(r1,1)];
ALU( alu); ALU(alu);
GETARAM()[r2] = val; GETARAM()[r2] = val;
} }
break; break;
@ -1166,15 +1174,15 @@ void mb86233_cpu_device::execute_run()
if ( (( r2 >> 6 ) & 7) == 1 ) if ( (( r2 >> 6 ) & 7) == 1 )
{ {
offset = INDIRECT(r1,1); offset = INDIRECT(r1,1);
val = GETEXTERNAL( 0,offset); val = GETEXTERNAL(0,offset);
} }
else else
{ {
offset = INDIRECT(r1,0); offset = INDIRECT(r1,0);
val = GETEXTERNAL( GETEB(),offset); val = GETEXTERNAL(GETEB(),offset);
} }
ALU( alu); ALU(alu);
SETREGS(r2,val); SETREGS(r2,val);
} }
break; break;
@ -1182,15 +1190,15 @@ void mb86233_cpu_device::execute_run()
case 0x03: /* RAM->External Ind */ case 0x03: /* RAM->External Ind */
{ {
val = GETARAM()[r1]; val = GETARAM()[r1];
ALU( alu); ALU(alu);
SETEXTERNAL( GETEB(),INDIRECT(r2|(6<<6),0),val); SETEXTERNAL(GETEB(),INDIRECT(r2|(6<<6),0),val);
} }
break; break;
case 0x07: /* RAMInd->External */ case 0x07: /* RAMInd->External */
{ {
val = GETARAM()[INDIRECT(r1,1)]; val = GETARAM()[INDIRECT(r1,1)];
ALU( alu); ALU(alu);
SETEXTERNAL( GETEB(),INDIRECT(r2|(6<<6),0),val); SETEXTERNAL( GETEB(),INDIRECT(r2|(6<<6),0),val);
} }
break; break;
@ -1198,7 +1206,7 @@ void mb86233_cpu_device::execute_run()
case 0x08: /* External->RAM */ case 0x08: /* External->RAM */
{ {
val = GETEXTERNAL( GETEB(),INDIRECT(r1,1)); val = GETEXTERNAL( GETEB(),INDIRECT(r1,1));
ALU( alu); ALU(alu);
GETARAM()[r2] = val; GETARAM()[r2] = val;
} }
break; break;
@ -1223,16 +1231,9 @@ void mb86233_cpu_device::execute_run()
} }
break; break;
case 0x0d: /* Move RAM->BRAM indirect? */
{
val = GETARAM()[r1];
ALU( alu);
GETBRAM()[INDIRECT(r2|(2<<6),0)] = val;
}
break;
default: default:
logerror( "TGP: Unknown TGP move (op=%02x) at PC:%x\n", op, GETPC()); fatalerror( "TGP: Unknown TGP move (op=%02x) at PC:%x\n", op, GETPC());
break; break;
} }
} }
@ -1291,7 +1292,7 @@ void mb86233_cpu_device::execute_run()
UINT32 alu = ( opcode >> 20 ) & 0x1f; UINT32 alu = ( opcode >> 20 ) & 0x1f;
UINT32 sub2 = ( opcode >> 16 ) & 0x0f; UINT32 sub2 = ( opcode >> 16 ) & 0x0f;
ALU( alu ); ALU(alu);
if( sub2 == 0x00 ) /* CLEAR reg */ if( sub2 == 0x00 ) /* CLEAR reg */
{ {
@ -1314,7 +1315,7 @@ void mb86233_cpu_device::execute_run()
} }
else if ( sub2 == 0x04 ) /* REP xxx */ else if ( sub2 == 0x04 ) /* REP xxx */
{ {
UINT32 sub3 = ( opcode >> 12 ) & 0x0f; UINT32 sub3 = ( opcode >> 12 ) & 0x0f;
if ( sub3 == 0 ) if ( sub3 == 0 )
{ {
@ -1357,9 +1358,9 @@ void mb86233_cpu_device::execute_run()
UINT32 imm = opcode & 0xffffff; UINT32 imm = opcode & 0xffffff;
if ( sub == 0 ) /* R12 */ if ( sub == 0 ) /* R12 */
GETGPR(12) = imm & 0xff; GETGPR(12) = imm;
else if ( sub == 1 ) /* R13 */ else if ( sub == 1 ) /* R13 */
GETGPR(13) = imm & 0xff; GETGPR(13) = imm;
else else
logerror( "TGP: Unknown LDIMM r12 (sub=%d) at PC:%04x\n", sub, GETPC() ); logerror( "TGP: Unknown LDIMM r12 (sub=%d) at PC:%04x\n", sub, GETPC() );
} }
@ -1386,7 +1387,7 @@ void mb86233_cpu_device::execute_run()
} }
else else
{ {
logerror( "TGP: Unknown LDIMM m,e (sub=%d) at PC:%04x\n", sub, GETPC() ); fatalerror( "TGP: Unknown LDIMM m,e (sub=%d) at PC:%04x\n", sub, GETPC() );
} }
} }
break; break;
@ -1414,7 +1415,7 @@ void mb86233_cpu_device::execute_run()
} }
else else
{ {
logerror( "TGP: Unknown LDIMM m,e (sub=%d) at PC:%04x\n", sub, GETPC() ); fatalerror( "TGP: Unknown LDIMM m,e (sub=%d) at PC:%04x\n", sub, GETPC() );
} }
} }
break; break;
@ -1440,7 +1441,7 @@ void mb86233_cpu_device::execute_run()
} }
else else
{ {
logerror( "TGP: Unknown LDIMM m,e (sub=%d) at PC:%04x\n", sub, GETPC() ); fatalerror( "TGP: Unknown LDIMM m,e (sub=%d) at PC:%04x\n", sub, GETPC() );
} }
} }
break; break;
@ -1472,7 +1473,7 @@ void mb86233_cpu_device::execute_run()
} }
else else
{ {
logerror( "TGP: Unknown LDIMM external reg (sub=%d) at PC:%04x\n", sub, GETPC() ); fatalerror( "TGP: Unknown LDIMM external reg (sub=%d) at PC:%04x\n", sub, GETPC() );
} }
} }
break; break;
@ -1487,7 +1488,7 @@ void mb86233_cpu_device::execute_run()
} }
else else
{ {
logerror( "TGP: Unknown LDIMM REPCnt (sub=%d) at PC:%04x\n", sub, GETPC() ); fatalerror( "TGP: Unknown LDIMM REPCnt (sub=%d) at PC:%04x\n", sub, GETPC() );
} }
} }
break; break;
@ -1507,10 +1508,7 @@ void mb86233_cpu_device::execute_run()
break; break;
case 0x02: /* BRIF indirect */ case 0x02: /* BRIF indirect */
if ( data & 0x4000 ) data = GETREGS(data&0x7f,0) - 1;
data = GETREGS(data&0x3f,0) - 1;
else
data = ((GETARAM()[data&0x3ff])&0xffff)-1;
/* if we're waiting for data, don't complete the instruction */ /* if we're waiting for data, don't complete the instruction */
if ( GETFIFOWAIT() ) if ( GETFIFOWAIT() )
@ -1529,7 +1527,7 @@ void mb86233_cpu_device::execute_run()
GETPCS()[GETPCSP()] = GETPC(); GETPCS()[GETPCSP()] = GETPC();
GETPCSP()++; GETPCSP()++;
if ( data & 0x4000 ) if ( data & 0x4000 )
data = GETREGS(data&0x3f,0) - 1; data = GETREGS(data&0x7f,0) - 1;
else else
data = ((GETARAM()[data&0x3ff])&0xffff)-1; data = ((GETARAM()[data&0x3ff])&0xffff)-1;
@ -1546,15 +1544,15 @@ void mb86233_cpu_device::execute_run()
break; break;
case 0x0c: /* LDIF */ case 0x0c: /* LDIF */
SETREGS(((data>>9)&0x3f), GETARAM()[data&0x1FF] ); SETREGS(((data>>9)&0x7f), GETARAM()[data&0x1FF] );
break; break;
case 0x0e: /* RIIF */ case 0x0e: /* RIIF */
logerror( "TGP: RIIF unimplemented at PC:%04x\n", GETPC() ); fatalerror( "TGP: RIIF unimplemented at PC:%04x\n", GETPC() );
break; break;
default: default:
logerror( "TGP: Unknown Branch opcode (subtype=%d) at PC:%04x\n", subtype, GETPC() ); fatalerror( "TGP: Unknown Branch opcode (subtype=%d) at PC:%04x\n", subtype, GETPC() );
break; break;
} }
} }
@ -1576,10 +1574,7 @@ void mb86233_cpu_device::execute_run()
break; break;
case 0x02: /* BRUL indirect */ case 0x02: /* BRUL indirect */
if ( data & 0x4000 ) data = GETREGS(data&0x7f,0) - 1;
data = GETREGS(data&0x3f,0) - 1;
else
data = ((GETARAM()[data&0x3ff])&0xffff)-1;
/* if we're waiting for data, don't complete the instruction */ /* if we're waiting for data, don't complete the instruction */
if ( GETFIFOWAIT() ) if ( GETFIFOWAIT() )
@ -1595,12 +1590,7 @@ void mb86233_cpu_device::execute_run()
break; break;
case 0x06: /* BSUL indirect */ case 0x06: /* BSUL indirect */
GETPCS()[GETPCSP()] = GETPC(); data = GETARAM()[data] - 1;
GETPCSP()++;
if ( data & 0x4000 )
data = GETREGS(data&0x3f,0) - 1;
else
data = ((GETARAM()[data&0x3ff])&0xffff)-1;
/* if we're waiting for data, don't complete the instruction */ /* if we're waiting for data, don't complete the instruction */
if ( GETFIFOWAIT() ) if ( GETFIFOWAIT() )
@ -1615,24 +1605,29 @@ void mb86233_cpu_device::execute_run()
break; break;
case 0x0c: /* LDUL */ case 0x0c: /* LDUL */
SETREGS(((data>>9)&0x3f), GETARAM()[data&0x1FF] ); SETREGS(((data>>9)&0x7f), GETARAM()[data&0x1FF] );
break; break;
case 0x0e: /* RIUL */ case 0x0e: /* RIUL */
logerror( "TGP: RIIF unimplemented at PC:%04x\n", GETPC() ); fatalerror( "TGP: RIUL unimplemented at PC:%04x\n", GETPC() );
break; break;
default: default:
logerror( "TGP: Unknown Branch opcode (subtype=%d) at PC:%04x\n", subtype, GETPC() ); fatalerror( "TGP: Unknown Branch opcode (subtype=%d) at PC:%04x\n", subtype, GETPC() );
break; break;
} }
} }
} }
break; break;
default: case 0x1f:
case 0x12:
logerror( "TGP: unknown opcode %08x at PC:%04x (%02x)\n", opcode, GETPC(),(opcode >> 26) & 0x3f ); logerror( "TGP: unknown opcode %08x at PC:%04x (%02x)\n", opcode, GETPC(),(opcode >> 26) & 0x3f );
break; break;
default:
fatalerror( "TGP: unknown opcode %08x at PC:%04x (%02x)\n", opcode, GETPC(),(opcode >> 26) & 0x3f );
break;
} }
if ( GETFIFOWAIT() == 0 ) if ( GETFIFOWAIT() == 0 )