/** * Dissassemble - arg = starting address, or PC. */ int DebugCpu_DisAsm(int nArgc, char *psArgs[]) { Uint32 disasm_upper = 0; int insts, max_insts; uaecptr nextpc; FILE* mydebugOutput=debugOutput; if (nArgc > 1) { switch (Eval_Range(psArgs[1], &disasm_addr, &disasm_upper, false)) { case -1: /* invalid value(s) */ return DEBUGGER_CMDDONE; case 0: /* single value */ break; case 1: /* range */ break; } if (nArgc > 2) { mydebugOutput=fopen(psArgs[2],"w"); if (mydebugOutput==NULL) { fprintf(debugOutput,"Cannot open %s abort\n",psArgs[2]); return DEBUGGER_CMDDONE; } } } else { /* continue */ if(!disasm_addr) disasm_addr = M68000_GetPC(); } /* limit is topmost address or instruction count */ if (disasm_upper) { max_insts = INT_MAX; } else { // max_insts = ConfigureParams.Debugger.nDisasmLines; max_insts = 5; disasm_upper = 0xFFFFFFFF; } /* output a range */ for (insts = 0; insts < max_insts && disasm_addr < disasm_upper; insts++) { DebugCpu_ShowAddressInfo(disasm_addr); Disasm(debugOutput, (uaecptr)disasm_addr, &nextpc, 1, DISASM_ENGINE_EXT); disasm_addr = nextpc; } fflush(mydebugOutput); if (mydebugOutput!=debugOutput) {fclose(mydebugOutput);} return DEBUGGER_CMDCONT; }
/** * Dissassemble - arg = starting address, or PC. */ int DebugCpu_DisAsm(int nArgc, char *psArgs[]) { Uint32 disasm_upper = 0; int insts, max_insts; uaecptr nextpc; if (nArgc > 1) { switch (Eval_Range(psArgs[1], &disasm_addr, &disasm_upper, false)) { case -1: /* invalid value(s) */ return DEBUGGER_CMDDONE; case 0: /* single value */ break; case 1: /* range */ break; } } else { /* continue */ if(!disasm_addr) disasm_addr = M68000_GetPC(); } /* limit is topmost address or instruction count */ if (disasm_upper) { max_insts = INT_MAX; } else { disasm_upper = 0xFFFFFFFF; max_insts = ConfigureParams.Debugger.nDisasmLines; } /* output a range */ for (insts = 0; insts < max_insts && disasm_addr < disasm_upper; insts++) { DebugCpu_ShowAddressInfo(disasm_addr); Disasm(debugOutput, (uaecptr)disasm_addr, &nextpc, 1); disasm_addr = nextpc; } fflush(debugOutput); return DEBUGGER_CMDCONT; }
/** * This function is called after each CPU instruction when debugging is enabled. */ void DebugCpu_Check(void) { if (bCpuProfiling) { Profile_CpuUpdate(); } if (LOG_TRACE_LEVEL(TRACE_CPU_DISASM)) { DebugCpu_ShowAddressInfo(M68000_GetPC()); } if (nCpuActiveCBs) { if (BreakCond_MatchCpu()) DebugUI(); } if (nCpuSteps) { nCpuSteps -= 1; if (nCpuSteps == 0) DebugUI(); } }
/** * This function is called after each CPU instruction when debugging is enabled. */ void DebugCpu_Check(void) { nCpuInstructions++; if (bCpuProfiling) { Profile_CpuUpdate(); } if (LOG_TRACE_LEVEL((TRACE_CPU_DISASM|TRACE_CPU_SYMBOLS))) { DebugCpu_ShowAddressInfo(M68000_GetPC()); } if (nCpuActiveCBs) { if (BreakCond_MatchCpu()) { DebugUI(REASON_CPU_BREAKPOINT); /* make sure we don't decrease step count * below, before even even getting out of here */ if (nCpuSteps) nCpuSteps++; } } if (nCpuSteps) { nCpuSteps--; if (nCpuSteps == 0) DebugUI(REASON_CPU_STEPS); } if (History_TrackCpu()) { History_AddCpu(); } if (ConOutDevice != CONOUT_DEVICE_NONE) { Console_Check(); } }