-
-/*
- if (dsp_pc==0x00f1b02c)
- {
- if (dsp_fp)
- {
- fclose(dsp_fp);
- exit(0);
- }
- }
- else
- if (dsp_pc==0x00f1b032)
- {
- dsp_fp=fopen("c:\\bad.log","wrt");
- if (dsp_fp==NULL)
- MessageBox(NULL,"Cannot open dsp log","",MB_OK);
- }
- if (dsp_fp)
- {
- fprintf(dsp_fp,"0x%.8x\n",dsp_pc);
- }
-
-// if (dsp_pc==0x00f1b130)
-// dsp_load_bin_at("SCHRIFT.DAT",0x120000);
-*/
- uint16 opcode=dsp_word_read(dsp_pc);
- dsp_opcode_first_parameter=(opcode&0x3e0)>>5;
- dsp_opcode_second_parameter=(opcode&0x1f);
- dsp_pc+=2;
- dsp_opcode[opcode>>10]();
- dsp_opcode_use[opcode>>10]++;
- cycles-=dsp_opcode_cycles[opcode>>10];
+ while (cycles > 0 && DSP_RUNNING)
+ {
+/*if (badWrite)
+{
+ WriteLog("\nDSP: Encountered bad write in Atari Synth module. PC=%08X, R15=%08X\n", dsp_pc, dsp_reg[15]);
+ for(int i=0; i<80; i+=4)
+ WriteLog(" %08X: %08X\n", dsp_reg[15]+i, JaguarReadLong(dsp_reg[15]+i));
+ WriteLog("\n");
+}//*/
+/*if (dsp_pc == 0xF1B55E)
+{
+ WriteLog("DSP: At $F1B55E--R15 = %08X at %u ms%s...\n", dsp_reg[15], SDL_GetTicks(), (dsp_flags & IMASK ? " (inside interrupt)" : ""));
+}//*/
+/*if (dsp_pc == 0xF1B7D2) // Start here???
+ doDSPDis = true;
+pcQueue[ptrPCQ++] = dsp_pc;
+ptrPCQ %= 32;*/
+ uint16 opcode = DSPReadWord(dsp_pc, DSP);
+ uint32 index = opcode >> 10;
+ dsp_opcode_first_parameter = (opcode >> 5) & 0x1F;
+ dsp_opcode_second_parameter = opcode & 0x1F;
+ dsp_pc += 2;
+ dsp_opcode[index]();
+ dsp_opcode_use[index]++;
+ cycles -= dsp_opcode_cycles[index];
+/*if (dsp_reg_bank_0[20] == 0xF1A100 & !R20Set)
+{
+ WriteLog("DSP: R20 set to $F1A100 at %u ms%s...\n", SDL_GetTicks(), (dsp_flags & IMASK ? " (inside interrupt)" : ""));
+ R20Set = true;
+}
+if (dsp_reg_bank_0[20] != 0xF1A100 && R20Set)
+{
+ WriteLog("DSP: R20 corrupted at %u ms from starting%s!\nAborting!\n", SDL_GetTicks(), (dsp_flags & IMASK ? " (inside interrupt)" : ""));
+ DSPDumpRegisters();
+ DSPDumpDisassembly();
+ exit(1);
+}
+if ((dsp_pc < 0xF1B000 || dsp_pc > 0xF1CFFE) && !tripwire)
+{
+ char buffer[512];
+ WriteLog("DSP: Jumping outside of DSP RAM at %u ms. Register dump:\n", SDL_GetTicks());
+ DSPDumpRegisters();
+ tripwire = true;
+ WriteLog("\nBacktrace:\n");
+ for(int i=0; i<32; i++)
+ {
+ dasmjag(JAGUAR_DSP, buffer, pcQueue[(ptrPCQ + i) % 32]);
+ WriteLog("\t%08X: %s\n", pcQueue[(ptrPCQ + i) % 32], buffer);
+ }
+ WriteLog("\n");
+}*/