void LogCDData(uint8 *opcode, uint16 A, int size) { int i, j; uint8 memop = 0; if((j = GetPRGAddress(_PC)) != -1) for (i = 0; i < size; i++) { if(cdloggerdata[j+i] & 1)continue; //this has been logged so skip cdloggerdata[j+i] |= 1; cdloggerdata[j+i] |= ((_PC + i) >> 11) & 0x0c; cdloggerdata[j+i] |= ((_PC & 0x8000) >> 8) ^ 0x80; // 19/07/14 used last reserved bit, if bit 7 is 1, then code is running from lowe area (6000) if(indirectnext)cdloggerdata[j+i] |= 0x10; codecount++; if(!(cdloggerdata[j+i] & 2))undefinedcount--; } //log instruction jumped to in an indirect jump if(opcode[0] == 0x6c) indirectnext = 1; else indirectnext = 0; switch (optype[opcode[0]]) { case 1: case 4: memop = 0x20; break; } if((j = GetPRGAddress(A)) != -1) { if(!(cdloggerdata[j] & 2)) { cdloggerdata[j] |= 2; cdloggerdata[j] |=(A>>11)&0x0c; cdloggerdata[j] |= memop; datacount++; if(!(cdloggerdata[j] & 1))undefinedcount--; } }
void LogDPCM(int romaddress, int dpcmsize){ int i = GetPRGAddress(romaddress); if(i == -1)return; for (int dpcmstart = i; dpcmstart < (i + dpcmsize); dpcmstart++) { if(!(cdloggerdata[dpcmstart] & 0x40)) { cdloggerdata[dpcmstart] |= 0x40; if(!(cdloggerdata[dpcmstart] & 2)){ datacount++; cdloggerdata[dpcmstart] |= 2; if(!(cdloggerdata[dpcmstart] & 1))undefinedcount--; } } } }
//called by the cpu to perform logging if CDLogging is enabled void LogCDVectors(int which){ int j; j = GetPRGAddress(which); if(j == -1) return; if(!(cdloggerdata[j] & 2)){ cdloggerdata[j] |= 0x0E; // we're in the last bank and recording it as data so 0x1110 or 0xE should be what we need datacount++; if(!(cdloggerdata[j] & 1))undefinedcount--; } j++; if(!(cdloggerdata[j] & 2)){ cdloggerdata[j] |= 0x0E; datacount++; if(!(cdloggerdata[j] & 1))undefinedcount--; } }
void LogCDData() { int i, j; uint16 A = 0; uint8 opcode[3] = {0}, memop = 0; opcode[0] = GetMem(_PC); switch (opsize[opcode[0]]) { case 2: opcode[1] = GetMem(_PC + 1); break; case 3: opcode[1] = GetMem(_PC + 1); opcode[2] = GetMem(_PC + 2); break; } if((j = GetPRGAddress(_PC)) != -1) for (i = 0; i < opsize[opcode[0]]; i++) { if(cdloggerdata[j+i] & 1)continue; //this has been logged so skip cdloggerdata[j+i] |= 1; cdloggerdata[j+i] |=((_PC+i)>>11)&0x0c; if(indirectnext)cdloggerdata[j+i] |= 0x10; codecount++; if(!(cdloggerdata[j+i] & 2))undefinedcount--; } //log instruction jumped to in an indirect jump if(opcode[0] == 0x6c) indirectnext = 1; else indirectnext = 0; switch (optype[opcode[0]]) { case 0: break; case 1: A = (opcode[1]+_X) & 0xFF; A = GetMem(A) | (GetMem(A+1)<<8); memop = 0x20; break; case 2: A = opcode[1]; break; case 3: A = opcode[1] | opcode[2]<<8; break; case 4: A = (GetMem(opcode[1]) | (GetMem(opcode[1]+1)<<8))+_Y; memop = 0x20; break; case 5: A = opcode[1]+_X; break; case 6: A = (opcode[1] | (opcode[2]<<8))+_Y; break; case 7: A = (opcode[1] | (opcode[2]<<8))+_X; break; case 8: A = opcode[1]+_Y; break; } if((j = GetPRGAddress(A)) != -1) { if(!(cdloggerdata[j] & 2)) { cdloggerdata[j] |= 2; cdloggerdata[j] |=(A>>11)&0x0c; cdloggerdata[j] |= memop; datacount++; if(!(cdloggerdata[j] & 1))undefinedcount--; } }