PiTubeDirect
PiTubeDirect copied to clipboard
PDP11: Hitting panic() will hang the Pi
Hit this by switching from the 6502 to to the PDP11 without doing a Ctrl-BREAK (justr a normal BREAK)
For some reason (a bug in 0.28 of the PDP Tube ROM?) this eventually hits a HALT instruction (at 000000).
The instruction hit is 177700 which is diassembled as ??? but executed as HALT. This seems like an inconsistency.
The HALT instruction calls panic()
panic() ends up doing:
cpu.halted = 1;
printstate();
while (1);
Doing a while (1) like this is bad, as reset is not seen.
Doing this would be better:
while (tubeContinueRunning());
So several things to look at:
- Replace while (1) with while (tubeContinueRunning()
- Investigate what instructions act as HALT
- Investigate possible bug in 0.28 of the PDP11 Tube ROM
- SIngle stepping a halt instruction could be more user friendly
I've done (1) - probably going to leave the rest to the next release (indigo)
On a real PDP11 HALT stalls the CPU until a hardware reset. On emulators such as E11 and SIMH it drops out to the emulator command line usually saying something like: HALT at 123456 E11>
The instruction 177700 is in the block reserved for floating point instructions, if the F11 is not present it should trigger an Unknown Instruction trap via &0008. The PDP11 Tube Client sets all the unused vectors to NULLIRQ which just returns, so executing 177700 should be "long" null operation. increment PC, trap to 8, stack PC and PSW, vector to NULLIRQ, RTI, pop PC and PSW, continue executing at the next word.