From e44cfd2983adb33fcee21025c0a51310c2c1e0ab Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Mon, 28 Apr 2014 01:28:49 +0000 Subject: [PATCH] Some changes to TGP with no noticeable effect. --- src/emu/cpu/mb86233/mb86233.c | 123 ++++++++++++++++------------------ 1 file changed, 59 insertions(+), 64 deletions(-) diff --git a/src/emu/cpu/mb86233/mb86233.c b/src/emu/cpu/mb86233/mb86233.c index aa2ee57ba35..cdda637b890 100644 --- a/src/emu/cpu/mb86233/mb86233.c +++ b/src/emu/cpu/mb86233/mb86233.c @@ -192,7 +192,7 @@ void mb86233_cpu_device::device_reset() void mb86233_cpu_device::FLAGSF( float v ) { - GETSR() = 0; + GETSR() &= ~(ZERO_FLAG|SIGN_FLAG); if ( v == 0 ) GETSR() |= ZERO_FLAG; @@ -203,7 +203,7 @@ void mb86233_cpu_device::FLAGSF( float v ) void mb86233_cpu_device::FLAGSI( UINT32 v ) { - GETSR() = 0; + GETSR() &= ~(ZERO_FLAG|SIGN_FLAG); if ( v == 0 ) 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; } - FLAGSI( GETD().u); + FLAGSI( GETD().i); break; case 0x10: /* D = D / A */ @@ -419,7 +419,7 @@ void mb86233_cpu_device::ALU( UINT32 alu) break; 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; } } @@ -712,7 +712,7 @@ UINT32 mb86233_cpu_device::GETREGS( UINT32 reg, int source ) return GETREPCNT(); default: - logerror( "TGP: Unknown GETREG (%d) at PC=%04x\n", reg, GETPC() ); + fatalerror( "TGP: Unknown GETREG (%d) at PC=%04x\n", reg, GETPC() ); break; } } @@ -789,11 +789,11 @@ void mb86233_cpu_device::SETREGS( UINT32 reg, UINT32 val ) 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 == 12 || reg == 13 ) - val &= 0xff; - GETGPR(reg) = val; return; } @@ -850,7 +850,7 @@ void mb86233_cpu_device::SETREGS( UINT32 reg, UINT32 val ) break; case 0x1D: /* P.e */ - GETP().u &= ~((0x0000007f) << 23); + GETP().u &= ~((0x000000ff) << 23); GETP().u |= (( val & 0xff ) << 23 ); break; @@ -1062,14 +1062,22 @@ void mb86233_cpu_device::execute_run() case 0x04: /* MOV RAM->External */ { SETEXTERNAL( GETEB(), r2, GETARAM()[r1]); - ALU( alu); + ALU(alu); } break; case 0x0c: /* MOV RAM->BRAM */ { 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; @@ -1088,7 +1096,7 @@ void mb86233_cpu_device::execute_run() if ( GETFIFOWAIT() ) break; - ALU( alu); + ALU(alu); SETREGS(r2,val); } break; @@ -1101,7 +1109,7 @@ void mb86233_cpu_device::execute_run() if ( GETFIFOWAIT() ) break; - ALU( alu); + ALU(alu); if ( ( r2 >> 6 ) & 0x01) { @@ -1129,8 +1137,8 @@ void mb86233_cpu_device::execute_run() if ( GETFIFOWAIT() ) break; - ALU( alu); - SETREGS( r2, val ); + ALU(alu); + SETREGS(r2, val); } } break; @@ -1138,7 +1146,7 @@ void mb86233_cpu_device::execute_run() case 0x0f: /* MOV RAMInd->BRAMInd */ { val = GETARAM()[INDIRECT(r1,1)]; - ALU( alu); + ALU(alu); GETBRAM()[INDIRECT(r2|(6<<6),0)] = val; } break; @@ -1146,7 +1154,7 @@ void mb86233_cpu_device::execute_run() case 0x13: /* MOV BRAMInd->RAMInd */ { val = GETBRAM()[INDIRECT(r1,1)]; - ALU( alu); + ALU(alu); GETARAM()[INDIRECT(r2|(6<<6),0)] = val; } break; @@ -1154,7 +1162,7 @@ void mb86233_cpu_device::execute_run() case 0x10: /* MOV RAMInd->RAM */ { val = GETBRAM()[INDIRECT(r1,1)]; - ALU( alu); + ALU(alu); GETARAM()[r2] = val; } break; @@ -1166,15 +1174,15 @@ void mb86233_cpu_device::execute_run() if ( (( r2 >> 6 ) & 7) == 1 ) { offset = INDIRECT(r1,1); - val = GETEXTERNAL( 0,offset); + val = GETEXTERNAL(0,offset); } else { offset = INDIRECT(r1,0); - val = GETEXTERNAL( GETEB(),offset); + val = GETEXTERNAL(GETEB(),offset); } - ALU( alu); + ALU(alu); SETREGS(r2,val); } break; @@ -1182,15 +1190,15 @@ void mb86233_cpu_device::execute_run() case 0x03: /* RAM->External Ind */ { val = GETARAM()[r1]; - ALU( alu); - SETEXTERNAL( GETEB(),INDIRECT(r2|(6<<6),0),val); + ALU(alu); + SETEXTERNAL(GETEB(),INDIRECT(r2|(6<<6),0),val); } break; case 0x07: /* RAMInd->External */ { val = GETARAM()[INDIRECT(r1,1)]; - ALU( alu); + ALU(alu); SETEXTERNAL( GETEB(),INDIRECT(r2|(6<<6),0),val); } break; @@ -1198,7 +1206,7 @@ void mb86233_cpu_device::execute_run() case 0x08: /* External->RAM */ { val = GETEXTERNAL( GETEB(),INDIRECT(r1,1)); - ALU( alu); + ALU(alu); GETARAM()[r2] = val; } break; @@ -1223,16 +1231,9 @@ void mb86233_cpu_device::execute_run() } break; - case 0x0d: /* Move RAM->BRAM indirect? */ - { - val = GETARAM()[r1]; - ALU( alu); - GETBRAM()[INDIRECT(r2|(2<<6),0)] = val; - } - break; 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; } } @@ -1291,7 +1292,7 @@ void mb86233_cpu_device::execute_run() UINT32 alu = ( opcode >> 20 ) & 0x1f; UINT32 sub2 = ( opcode >> 16 ) & 0x0f; - ALU( alu ); + ALU(alu); if( sub2 == 0x00 ) /* CLEAR reg */ { @@ -1314,7 +1315,7 @@ void mb86233_cpu_device::execute_run() } else if ( sub2 == 0x04 ) /* REP xxx */ { - UINT32 sub3 = ( opcode >> 12 ) & 0x0f; + UINT32 sub3 = ( opcode >> 12 ) & 0x0f; if ( sub3 == 0 ) { @@ -1357,9 +1358,9 @@ void mb86233_cpu_device::execute_run() UINT32 imm = opcode & 0xffffff; if ( sub == 0 ) /* R12 */ - GETGPR(12) = imm & 0xff; + GETGPR(12) = imm; else if ( sub == 1 ) /* R13 */ - GETGPR(13) = imm & 0xff; + GETGPR(13) = imm; else logerror( "TGP: Unknown LDIMM r12 (sub=%d) at PC:%04x\n", sub, GETPC() ); } @@ -1386,7 +1387,7 @@ void mb86233_cpu_device::execute_run() } 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; @@ -1414,7 +1415,7 @@ void mb86233_cpu_device::execute_run() } 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; @@ -1440,7 +1441,7 @@ void mb86233_cpu_device::execute_run() } 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; @@ -1472,7 +1473,7 @@ void mb86233_cpu_device::execute_run() } 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; @@ -1487,7 +1488,7 @@ void mb86233_cpu_device::execute_run() } 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; @@ -1507,10 +1508,7 @@ void mb86233_cpu_device::execute_run() break; case 0x02: /* BRIF indirect */ - if ( data & 0x4000 ) - data = GETREGS(data&0x3f,0) - 1; - else - data = ((GETARAM()[data&0x3ff])&0xffff)-1; + data = GETREGS(data&0x7f,0) - 1; /* if we're waiting for data, don't complete the instruction */ if ( GETFIFOWAIT() ) @@ -1529,7 +1527,7 @@ void mb86233_cpu_device::execute_run() GETPCS()[GETPCSP()] = GETPC(); GETPCSP()++; if ( data & 0x4000 ) - data = GETREGS(data&0x3f,0) - 1; + data = GETREGS(data&0x7f,0) - 1; else data = ((GETARAM()[data&0x3ff])&0xffff)-1; @@ -1546,15 +1544,15 @@ void mb86233_cpu_device::execute_run() break; case 0x0c: /* LDIF */ - SETREGS(((data>>9)&0x3f), GETARAM()[data&0x1FF] ); + SETREGS(((data>>9)&0x7f), GETARAM()[data&0x1FF] ); break; case 0x0e: /* RIIF */ - logerror( "TGP: RIIF unimplemented at PC:%04x\n", GETPC() ); + fatalerror( "TGP: RIIF unimplemented at PC:%04x\n", GETPC() ); break; 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; } } @@ -1576,10 +1574,7 @@ void mb86233_cpu_device::execute_run() break; case 0x02: /* BRUL indirect */ - if ( data & 0x4000 ) - data = GETREGS(data&0x3f,0) - 1; - else - data = ((GETARAM()[data&0x3ff])&0xffff)-1; + data = GETREGS(data&0x7f,0) - 1; /* if we're waiting for data, don't complete the instruction */ if ( GETFIFOWAIT() ) @@ -1595,12 +1590,7 @@ void mb86233_cpu_device::execute_run() break; case 0x06: /* BSUL indirect */ - GETPCS()[GETPCSP()] = GETPC(); - GETPCSP()++; - if ( data & 0x4000 ) - data = GETREGS(data&0x3f,0) - 1; - else - data = ((GETARAM()[data&0x3ff])&0xffff)-1; + data = GETARAM()[data] - 1; /* if we're waiting for data, don't complete the instruction */ if ( GETFIFOWAIT() ) @@ -1615,24 +1605,29 @@ void mb86233_cpu_device::execute_run() break; case 0x0c: /* LDUL */ - SETREGS(((data>>9)&0x3f), GETARAM()[data&0x1FF] ); + SETREGS(((data>>9)&0x7f), GETARAM()[data&0x1FF] ); break; case 0x0e: /* RIUL */ - logerror( "TGP: RIIF unimplemented at PC:%04x\n", GETPC() ); + fatalerror( "TGP: RIUL unimplemented at PC:%04x\n", GETPC() ); break; 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; - default: + case 0x1f: + case 0x12: logerror( "TGP: unknown opcode %08x at PC:%04x (%02x)\n", opcode, GETPC(),(opcode >> 26) & 0x3f ); break; + + default: + fatalerror( "TGP: unknown opcode %08x at PC:%04x (%02x)\n", opcode, GETPC(),(opcode >> 26) & 0x3f ); + break; } if ( GETFIFOWAIT() == 0 )