static void CPUHandler(const v810_timestamp_t timestamp, uint32 PC) { std::vector<PCFX_BPOINT>::iterator bpit; for(bpit = BreakPointsPC.begin(); bpit != BreakPointsPC.end(); bpit++) { if(PC >= bpit->A[0] && PC <= bpit->A[1]) { FoundBPoint = TRUE; break; } } fx_vdc_chips[0]->ResetSimulate(); fx_vdc_chips[1]->ResetSimulate(); PCFX_V810.CheckBreakpoints(PCFXDBG_CheckBP, mem_peekhword, NULL); // FIXME: mem_peekword if(PCFX_LoggingOn) { // FIXME: There is a little race condition if a user turns on logging right between jump instruction and the first // instruction at 0xFFF0000C, in which case the call-from address will be wrong. static uint32 lastPC = ~0; if(PC == 0xFFF0000C) { static const char *font_sizes[6] = { "KANJI16x16", "KANJI12x12", "ANK8x16", "ANK6x12", "ANK8x8", "ANK8x12" }; // FIXME, overflow possible and speed PCFXDBG_DoLog("ROMFONT", "0x%08x->0xFFF0000C, PR7=0x%08x=%s, PR6=0x%04x = %s", lastPC, PCFX_V810.GetPR(7), (PCFX_V810.GetPR(7) > 5) ? "?" : font_sizes[PCFX_V810.GetPR(7)], PCFX_V810.GetPR(6) & 0xFFFF, PCFXDBG_ShiftJIS_to_UTF8(PCFX_V810.GetPR(6) & 0xFFFF)); setvbuf(stdout, NULL, _IONBF, 0); printf("%s", PCFXDBG_ShiftJIS_to_UTF8(PCFX_V810.GetPR(6) & 0xFFFF)); } else if(PC == 0xFFF00008) DoSyscallLog(); lastPC = PC; } CPUHookContinuous |= FoundBPoint; if(CPUHookContinuous && CPUHook) { ForceEventUpdates(timestamp); CPUHook(PC, FoundBPoint); } FoundBPoint = false; }
static void CPUHandler(uint32 PC) { std::vector<NES_BPOINT>::iterator bpit; if(!FoundBPoint) for(bpit = BreakPointsPC.begin(); bpit != BreakPointsPC.end(); bpit++) { if(PC >= bpit->A[0] && PC <= bpit->A[1]) { BPCallB(PC); break; } } if(CPUHook) CPUHook(PC); }
static void CPUHandler(uint32 PC) { std::vector<NES_BPOINT>::iterator bpit; if(!FoundBPoint) for(bpit = BreakPointsPC.begin(); bpit != BreakPointsPC.end(); bpit++) { if(PC >= bpit->A[0] && PC <= bpit->A[1]) { FoundBPoint = true; break; } } CPUHookContinuous |= FoundBPoint; if(CPUHookContinuous && CPUHook) CPUHook(PC, FoundBPoint); FoundBPoint = false; }
static void CPUHandler(const v810_timestamp_t timestamp, uint32 PC) { std::vector<VB_BPOINT>::iterator bpit; for(bpit = BreakPointsPC.begin(); bpit != BreakPointsPC.end(); bpit++) { if(PC >= bpit->A[0] && PC <= bpit->A[1]) { FoundBPoint = TRUE; break; } } VB_V810->CheckBreakpoints(VBDBG_CheckBP, MemPeek16, NULL); CPUHookContinuous |= FoundBPoint; if(CPUHook && CPUHookContinuous) { ForceEventUpdates(timestamp); CPUHook(PC, FoundBPoint); } FoundBPoint = false; }