static DECLFR(ReadHandler) { std::vector<PCE_BPOINT>::iterator bpit; if((A & 0x1FFFFF) >= (0xFF * 8192) && (A & 0x1FFFFF) <= (0xFF * 8192 + 0x3FF)) { VDC_SimulateResult result; int which_vdc = vce->SimulateReadVDC(A & 0x80000003, &result); if(result.ReadCount) PCEDBG_CheckBP(BPOINT_AUX_READ, (which_vdc << 16) | result.ReadStart, result.ReadCount); if(result.WriteCount) PCEDBG_CheckBP(BPOINT_AUX_WRITE, (which_vdc << 16) | result.WriteStart, result.WriteCount); } for(bpit = BreakPointsRead.begin(); bpit != BreakPointsRead.end(); bpit++) { unsigned int testA = bpit->logical ? ShadowCPU->GetLastLogicalReadAddr() : A; if(testA >= bpit->A[0] && testA <= bpit->A[1]) { FoundBPoint = 1; break; } } return(HuCPU->PeekPhysical(A)); }
static DECLFW(WriteHandler) { std::vector<PCE_BPOINT>::iterator bpit; if((A & 0x1FFFFF) >= (0xFF * 8192) && (A & 0x1FFFFF) <= (0xFF * 8192 + 0x3FF)) { VDC_SimulateResult result; int which_vdc = vce->SimulateWriteVDC(A & 0x80000003, V, &result); if(result.ReadCount) PCEDBG_CheckBP(BPOINT_AUX_READ, (which_vdc << 16) | result.ReadStart, result.ReadCount); if(result.WriteCount) PCEDBG_CheckBP(BPOINT_AUX_WRITE, (which_vdc << 16) | result.WriteStart, result.WriteCount); if(result.RegWriteDone) PCEDBG_CheckBP(BPOINT_AUX_WRITE, 0x20000 | (which_vdc << 16) | result.RegRWIndex, 1); } for(bpit = BreakPointsWrite.begin(); bpit != BreakPointsWrite.end(); bpit++) { unsigned int testA; if(!bpit->logical) testA = A; else { if(A & 0x80000000) continue; // Ignore ST0/ST1/ST2 writes, which always use hardcoded physical addresses. testA = ShadowCPU.GetLastLogicalWriteAddr(); } if(testA >= bpit->A[0] && testA <= bpit->A[1]) { FoundBPoint = 1; break; } } }