// JPM 10/13/2018 Added breakpoints features
// JPM Aug./2019 Fix specific breakpoint for ROM cartridge or unknown memory location writing; added a specific breakpoint for the M68K illegal & unimplemented instruction, unknown exceptions and address error exceptions
// JPM Aug./2019 Fix potential emulator freeze after an exception has occured
+// JPM Feb./2021 Added a specific breakpoint for the M68K bus error exception, and a M68K exception catch detection
+// JPM Apr./2021 Keep number of M68K cycles used in tracing mode
//
//uint32_t retVal = 0;
// check exception vectors access
- if ((address >= 0x8) && (address <= 0x7c))
+ if (vjs.allowM68KExceptionCatch && (address >= 0x8) && (address <= 0x7c))
{
switch (address)
{
+ case 0x08:
+ m68k_read_exception_vector(address, "Bus error");
+ break;
+
case 0x0c:
m68k_read_exception_vector(address, "Address error");
break;
// Step over function
-void JaguarStepOver(int depth)
+int JaguarStepOver(int depth)
{
- bool exit;
+ bool exit = !depth;
+ int cycles = 0;
//bool case55 = false;
//uint32_t m68kSR;
- if (!depth)
- {
- exit = true;
- }
- else
- {
- exit = false;
- }
+// if (!depth)
+// {
+// cycles = 0;
+// exit = true;
+// }
+// else
+// {
+// exit = false;
+// }
do
{
- JaguarStepInto();
+ cycles += JaguarStepInto();
switch (M68KGetCurrentOpcodeFamily())
{
// bsr & jsr
case 54:
case 52:
- JaguarStepOver(depth+1);
+ cycles += JaguarStepOver(depth+1);
//if (depth)
//{
// exit = false;
break;
}
}
- while (!exit);
+ while (!exit && !M68KDebugHaltStatus());
#ifdef _MSC_VER
#pragma message("Warning: !!! Need to verify the Jaguar Step Over function !!!")
#else
- #warning "!!! Need to verify the Jaguar Step Over function !!!"
+#warning "!!! Need to verify the Jaguar Step Over function !!!"
#endif // _MSC_VER
+ return cycles;
}
// Step into function
-void JaguarStepInto(void)
+int JaguarStepInto(void)
{
+ int cycles;
// double timeToNextEvent = GetTimeToNextEvent();
- m68k_execute(USEC_TO_M68K_CYCLES(0));
+ cycles = m68k_execute(USEC_TO_M68K_CYCLES(0));
// m68k_execute(USEC_TO_M68K_CYCLES(timeToNextEvent));
if (vjs.GPUEnabled)
#else
#warning "!!! Need to verify the Jaguar Step Into function !!!"
#endif // _MSC_VER
+ return cycles;
}