From: Spacy <sp...@us...> - 2006-06-24 20:21:50
|
Update of /cvsroot/vba/VisualBoyAdvance/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv337/src Modified Files: Cheats.cpp GBA.cpp GBA.h GBAinline.h Globals.cpp thumb.h Log Message: Added the rewrites of Labmaster's VBA-H features. Included SDL binaries for easier compialtion. Index: thumb.h =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/thumb.h,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** thumb.h 27 May 2006 14:47:32 -0000 1.17 --- thumb.h 24 Jun 2006 20:21:47 -0000 1.18 *************** *** 18,21 **** --- 18,32 ---- // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + // The following define updates oldreg when debugger_last is activated + + #define UPDATE_OLD_REG \ + if (debugger_last) { \ + sprintf(oldbuffer,"%08x", armState ? reg[15].I - 4 : reg[15].I - 4); \ + for (xxx=0; xxx<18; xxx++){ \ + oldreg[xxx]=reg[xxx].I; \ + } \ + } + + #ifdef C_CORE #define NEG(i) ((i) >> 31) *************** *** 764,767 **** --- 775,783 ---- #endif + + #ifdef BKPT_SUPPORT + u8 xxx; + #endif + u32 opcode = cpuPrefetch[0]; cpuPrefetch[0] = cpuPrefetch[1]; *************** *** 1344,1347 **** --- 1360,1367 ---- reg[dest+8].I = reg[base].I; if(dest == 7) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif + reg[15].I &= 0xFFFFFFFE; armNextPC = reg[15].I; *************** *** 1356,1359 **** --- 1376,1384 ---- reg[dest+8].I = reg[base+8].I; if(dest == 7) { + + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif + reg[15].I &= 0xFFFFFFFE; armNextPC = reg[15].I; *************** *** 1374,1377 **** --- 1399,1405 ---- case 0: // BX Rs + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I = (reg[base].I) & 0xFFFFFFFE; if(reg[base].I & 1) { *************** *** 1394,1397 **** --- 1422,1430 ---- case 1: // BX Hs + + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif + reg[15].I = (reg[8+base].I) & 0xFFFFFFFE; if(reg[8+base].I & 1) { *************** *** 1909,1912 **** --- 1942,1948 ---- case 0xd0: // BEQ offset + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif if(Z_FLAG) { reg[15].I += ((s8)(opcode & 0xFF)) << 1; *************** *** 1922,1925 **** --- 1958,1964 ---- // BNE offset if(!Z_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 1934,1937 **** --- 1973,1979 ---- // BCS offset if(C_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 1946,1949 **** --- 1988,1994 ---- // BCC offset if(!C_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 1958,1961 **** --- 2003,2009 ---- // BMI offset if(N_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 1970,1973 **** --- 2018,2024 ---- // BPL offset if(!N_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 1982,1985 **** --- 2033,2039 ---- // BVS offset if(V_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 1994,1997 **** --- 2048,2054 ---- // BVC offset if(!V_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 2006,2009 **** --- 2063,2069 ---- // BHI offset if(C_FLAG && !Z_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 2018,2021 **** --- 2078,2084 ---- // BLS offset if(!C_FLAG || Z_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 2030,2033 **** --- 2093,2099 ---- // BGE offset if(N_FLAG == V_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 2042,2045 **** --- 2108,2114 ---- // BLT offset if(N_FLAG != V_FLAG) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 2054,2057 **** --- 2123,2129 ---- // BGT offset if(!Z_FLAG && (N_FLAG == V_FLAG)) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; *************** *** 2066,2069 **** --- 2138,2144 ---- // BLE offset if(Z_FLAG || (N_FLAG != V_FLAG)) { + #ifdef BKPT_SUPPORT + UPDATE_OLD_REG + #endif reg[15].I += ((s8)(opcode & 0xFF)) << 1; armNextPC = reg[15].I; Index: GBA.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/GBA.cpp,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -d -r1.67 -r1.68 *** GBA.cpp 6 Jun 2006 21:04:20 -0000 1.67 --- GBA.cpp 24 Jun 2006 20:21:47 -0000 1.68 *************** *** 110,115 **** --- 110,123 ---- static int profilScale = 0; #endif + + #ifdef BKPT_SUPPORT u8 freezeWorkRAM[0x40000]; u8 freezeInternalRAM[0x8000]; + u8 freezeVRAM[0x18000]; + u8 freezePRAM[0x400]; + u8 freezeOAM[0x400]; + bool debugger_last; + #endif + int lcdTicks = (useBios && !skipBios) ? 1008 : 208; u8 timerOnOffDelay = 0; *************** *** 3142,3146 **** switch(address >> 24) { case 2: ! #ifdef SDL if(*((u16 *)&freezeWorkRAM[address & 0x3FFFE])) cheatsWriteHalfWord(address & 0x203FFFE, --- 3150,3154 ---- switch(address >> 24) { case 2: ! #ifdef BKPT_SUPPORT if(*((u16 *)&freezeWorkRAM[address & 0x3FFFE])) cheatsWriteHalfWord(address & 0x203FFFE, *************** *** 3151,3155 **** break; case 3: ! #ifdef SDL if(*((u16 *)&freezeInternalRAM[address & 0x7ffe])) cheatsWriteHalfWord(address & 0x3007ffe, --- 3159,3163 ---- break; case 3: ! #ifdef BKPT_SUPPORT if(*((u16 *)&freezeInternalRAM[address & 0x7ffe])) cheatsWriteHalfWord(address & 0x3007ffe, *************** *** 3165,3168 **** --- 3173,3182 ---- break; case 5: + #ifdef BKPT_SUPPORT + if(*((u16 *)&freezePRAM[address & 0x03fe])) + cheatsWriteHalfWord(address & 0x70003fe, + value); + else + #endif WRITE16LE(((u16 *)&paletteRAM[address & 0x3fe]), value); break; *************** *** 3173,3179 **** if ((address & 0x18000) == 0x18000) address &= 0x17fff; ! WRITE16LE(((u16 *)&vram[address]), value); break; case 7: WRITE16LE(((u16 *)&oam[address & 0x3fe]), value); break; --- 3187,3205 ---- if ((address & 0x18000) == 0x18000) address &= 0x17fff; ! #ifdef BKPT_SUPPORT ! if(*((u16 *)&freezeVRAM[address])) ! cheatsWriteHalfWord(address + 0x06000000, ! value); ! else ! #endif ! WRITE16LE(((u16 *)&vram[address]), value); break; case 7: + #ifdef BKPT_SUPPORT + if(*((u16 *)&freezeOAM[address & 0x03fe])) + cheatsWriteHalfWord(address & 0x70003fe, + value); + else + #endif WRITE16LE(((u16 *)&oam[address & 0x3fe]), value); break; *************** *** 3215,3219 **** switch(address >> 24) { case 2: ! #ifdef SDL if(freezeWorkRAM[address & 0x3FFFF]) cheatsWriteByte(address & 0x203FFFF, b); --- 3241,3245 ---- switch(address >> 24) { case 2: ! #ifdef BKPT_SUPPORT if(freezeWorkRAM[address & 0x3FFFF]) cheatsWriteByte(address & 0x203FFFF, b); *************** *** 3223,3227 **** break; case 3: ! #ifdef SDL if(freezeInternalRAM[address & 0x7fff]) cheatsWriteByte(address & 0x3007fff, b); --- 3249,3253 ---- break; case 3: ! #ifdef BKPT_SUPPORT if(freezeInternalRAM[address & 0x7fff]) cheatsWriteByte(address & 0x3007fff, b); *************** *** 3309,3313 **** --- 3335,3346 ---- // byte writes to OBJ VRAM are ignored if ((address) < objTilesAddress[((DISPCNT&7)+1)>>2]) + { + #ifdef BKPT_SUPPORT + if(freezeVRAM[address]) + cheatsWriteByte(address + 0x06000000, b); + else + #endif *((u16 *)&vram[address]) = (b << 8) | b; + } break; case 7: *************** *** 3808,3811 **** --- 3841,3854 ---- if(systemDebug >= 10 && !holdState) { CPUUpdateCPSR(); + #ifdef BKPT_SUPPORT + if (debugger_last) + { + sprintf(buffer, "R00=%08x R01=%08x R02=%08x R03=%08x R04=%08x R05=%08x R06=%08x R07=%08x R08=%08x R09=%08x R10=%08x R11=%08x R12=%08x R13=%08x R14=%08x R15=%08x R16=%08x R17=%08x\n", + oldreg[0], oldreg[1], oldreg[2], oldreg[3], oldreg[4], oldreg[5], + oldreg[6], oldreg[7], oldreg[8], oldreg[9], oldreg[10], oldreg[11], + oldreg[12], oldreg[13], oldreg[14], oldreg[15], oldreg[16], + oldreg[17]); + } + #endif sprintf(buffer, "R00=%08x R01=%08x R02=%08x R03=%08x R04=%08x R05=%08x R06=%08x R07=%08x R08=%08x R09=%08x R10=%08x R11=%08x R12=%08x R13=%08x R14=%08x R15=%08x R16=%08x R17=%08x\n", reg[0].I, reg[1].I, reg[2].I, reg[3].I, reg[4].I, reg[5].I, *************** *** 3827,3831 **** } } ! #endif if(!holdState && !SWITicks) { --- 3870,3874 ---- } } ! #endif /* FINAL_VERSION */ if(!holdState && !SWITicks) { Index: GBA.h =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/GBA.h,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** GBA.h 3 Sep 2005 12:28:23 -0000 1.22 --- GBA.h 24 Jun 2006 20:21:47 -0000 1.23 *************** *** 85,90 **** --- 85,99 ---- extern void (*cpuSaveGameFunc)(u32,u8); + #ifdef BKPT_SUPPORT extern u8 freezeWorkRAM[0x40000]; extern u8 freezeInternalRAM[0x8000]; + extern u8 freezeVRAM[0x18000]; + extern u8 freezeOAM[0x400]; + extern u8 freezePRAM[0x400]; + extern bool debugger_last; + extern int oldreg[17]; + extern char oldbuffer[10]; + #endif + extern bool CPUReadGSASnapshot(const char *); extern bool CPUWriteGSASnapshot(const char *, const char *, const char *, const char *); Index: Globals.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/Globals.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Globals.cpp 25 Jun 2005 06:26:33 -0000 1.9 --- Globals.cpp 24 Jun 2006 20:21:47 -0000 1.10 *************** *** 19,22 **** --- 19,27 ---- #include "GBA.h" + #ifdef BKPT_SUPPORT + int oldreg[17]; + char oldbuffer[10]; + #endif + reg_pair reg[45]; memoryMap map[256]; Index: GBAinline.h =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/GBAinline.h,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** GBAinline.h 4 Jan 2006 13:42:59 -0000 1.15 --- GBAinline.h 24 Jun 2006 20:21:47 -0000 1.16 *************** *** 390,393 **** --- 390,394 ---- inline void CPUWriteMemory(u32 address, u32 value) { + #ifdef DEV_VERSION if(address & 3) { *************** *** 403,407 **** switch(address >> 24) { case 0x02: ! #ifdef SDL if(*((u32 *)&freezeWorkRAM[address & 0x3FFFC])) cheatsWriteMemory(address & 0x203FFFC, --- 404,408 ---- switch(address >> 24) { case 0x02: ! #ifdef BKPT_SUPPORT if(*((u32 *)&freezeWorkRAM[address & 0x3FFFC])) cheatsWriteMemory(address & 0x203FFFC, *************** *** 412,416 **** break; case 0x03: ! #ifdef SDL if(*((u32 *)&freezeInternalRAM[address & 0x7ffc])) cheatsWriteMemory(address & 0x3007FFC, --- 413,417 ---- break; case 0x03: ! #ifdef BKPT_SUPPORT if(*((u32 *)&freezeInternalRAM[address & 0x7ffc])) cheatsWriteMemory(address & 0x3007FFC, *************** *** 427,430 **** --- 428,437 ---- break; case 0x05: + #ifdef BKPT_SUPPORT + if(*((u32 *)&freezePRAM[address & 0x3fc])) + cheatsWriteMemory(address & 0x70003FC, + value); + else + #endif WRITE32LE(((u32 *)&paletteRAM[address & 0x3FC]), value); break; *************** *** 435,441 **** if ((address & 0x18000) == 0x18000) address &= 0x17fff; ! WRITE32LE(((u32 *)&vram[address]), value); break; case 0x07: WRITE32LE(((u32 *)&oam[address & 0x3fc]), value); break; --- 442,461 ---- if ((address & 0x18000) == 0x18000) address &= 0x17fff; ! ! #ifdef BKPT_SUPPORT ! if(*((u32 *)&freezeVRAM[address])) ! cheatsWriteMemory(address + 0x06000000, value); ! else ! #endif ! ! WRITE32LE(((u32 *)&vram[address]), value); break; case 0x07: + #ifdef BKPT_SUPPORT + if(*((u32 *)&freezeOAM[address & 0x3fc])) + cheatsWriteMemory(address & 0x70003FC, + value); + else + #endif WRITE32LE(((u32 *)&oam[address & 0x3fc]), value); break; Index: Cheats.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/Cheats.cpp,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Cheats.cpp 16 Jun 2006 23:46:56 -0000 1.29 --- Cheats.cpp 24 Jun 2006 20:21:47 -0000 1.30 *************** *** 2827,2830 **** --- 2827,2839 ---- case 3: return freezeInternalRAM[address & 0x7FFF]; + case 5: + return freezePRAM[address & 0x3FC]; + case 6: + if (address > 0x06010000) + return freezeVRAM[address & 0x17FFF]; + else + return freezeVRAM[address & 0x1FFFF]; + case 7: + return freezeOAM[address & 0x3FC]; } return 0; |