diff --git a/Source/DSPSpy/DSPSpy.vcproj b/Source/DSPSpy/DSPSpy.vcproj index a38481c29f..67c8c803c7 100644 --- a/Source/DSPSpy/DSPSpy.vcproj +++ b/Source/DSPSpy/DSPSpy.vcproj @@ -137,6 +137,10 @@ RelativePath=".\tests\ir_test.ds" > + + diff --git a/Source/DSPSpy/main_spy.cpp b/Source/DSPSpy/main_spy.cpp index 5d75966ce9..da4f978b23 100644 --- a/Source/DSPSpy/main_spy.cpp +++ b/Source/DSPSpy/main_spy.cpp @@ -331,13 +331,14 @@ void handle_dsp_mail(void) real_dsp.SendTask((void *)MEM_VIRTUAL_TO_PHYSICAL(dsp_code[curUcode]), 0, 4000, 0x10); runningUcode = curUcode + 1; + + // Clear exception status since we've loaded a new ucode + CON_BlankRow(25); } else if ((mail & 0xffff0000) == 0x8bad0000) { // dsp_base.inc is reporting an exception happened - char temp[100]; - sprintf(temp, "Exception %x", mail & 0xff); - UpdateLastMessage(temp); + CON_PrintRow(4, 25, "%s caused exception %x", UCODE_NAMES[curUcode], mail & 0xff); } else if (mail == 0x8888dead) { @@ -387,7 +388,7 @@ void handle_dsp_mail(void) DumpDSP_ROMs(dspbufP, &dspbufP[0x1000]); } - CON_Printf(2, 1, "UCode: %d/%d %s, Last mail: %08x", + CON_PrintRow(2, 1, "UCode: %d/%d %s, Last mail: %08x", curUcode + 1, NUM_UCODES, UCODE_NAMES[curUcode], mail); } } diff --git a/Source/DSPSpy/tests/dsp_base.inc b/Source/DSPSpy/tests/dsp_base.inc index 6860a64f96..9d2782d9a7 100644 --- a/Source/DSPSpy/tests/dsp_base.inc +++ b/Source/DSPSpy/tests/dsp_base.inc @@ -207,7 +207,8 @@ irq: ;sr @DMBL, $wr3 ; ??? sr @DMBL, $ac0.m ; Exception number si @DIRQ, #0x0001 - halt + halt ; Through some magic this allows us to properly ack the exception in dspspy + ;rti ; allow dumping of ucodes which cause exceptions...probably not safe at all ; DMA:s the current state of the registers back to the PowerPC. To do this, ; it must write the contents of all regs to DRAM. diff --git a/Source/DSPTool/Src/main.cpp b/Source/DSPTool/Src/main.cpp index 06ffb50b6a..626ddb9ef8 100644 --- a/Source/DSPTool/Src/main.cpp +++ b/Source/DSPTool/Src/main.cpp @@ -402,7 +402,7 @@ int main(int argc, const char *argv[]) } else { - if(!Assemble(currentSource.c_str(), codes[i])) + if(!Assemble(currentSource.c_str(), codes[i], force)) { printf("Assemble: Assembly of %s failed due to errors\n", files[i].c_str());