// JLH 11/25/2009 Major rewrite of memory subsystem and handlers
// JPM 09/04/2018 Added the new Models and BIOS handler
// 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
//
S_BrkInfo *brkInfo;
size_t brkNbr;
+bool frameDone;
//
// Callback function to detect illegal instructions
QString msg;
QMessageBox msgBox;
- msg.sprintf("$%06x: %s", pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF], text);
+#if 0
+ msg.sprintf("68000 exception\n%s at $%06x", text, pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF]);
+#else
+ msg.sprintf("68000 exception\n$%06x: %s", pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF], text);
+#endif
msgBox.setText(msg);
msgBox.setStandardButtons(QMessageBox::Abort);
msgBox.setDefaultButton(QMessageBox::Abort);
{
switch (address)
{
+ case 0x0c:
+ m68k_read_exception_vector(address, "Address error");
+ break;
+
case 0x10:
m68k_read_exception_vector(address, "Illegal instruction");
break;
+
+ case 0x2c:
+ m68k_read_exception_vector(address, "Unimplemented instruction");
+ break;
+
+ default:
+ m68k_read_exception_vector(address, "Exception not referenced");
+ break;
}
+
+ frameDone = true; // Hack to avoid the freeze of the emulator
}
else
{
// New Jaguar execution stack
// This executes 1 frame's worth of code.
//
-bool frameDone;
void JaguarExecuteNew(void)
{
frameDone = false;