PiTubeDirect icon indicating copy to clipboard operation
PiTubeDirect copied to clipboard

PDP11: Hitting panic() will hang the Pi

Open hoglet67 opened this issue 3 years ago • 2 comments

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:

  1. Replace while (1) with while (tubeContinueRunning()
  2. Investigate what instructions act as HALT
  3. Investigate possible bug in 0.28 of the PDP11 Tube ROM
  4. SIngle stepping a halt instruction could be more user friendly

hoglet67 avatar Jan 10 '22 18:01 hoglet67

I've done (1) - probably going to leave the rest to the next release (indigo)

hoglet67 avatar Jan 11 '22 14:01 hoglet67

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.

jgharston avatar Apr 28 '24 22:04 jgharston