Good news: the 11/70 CPU Exerciser diagnostic appears to pass now
This commit is contained in:
parent
48047c4a60
commit
7199c968f8
2 changed files with 27 additions and 5 deletions
|
|
@ -140,6 +140,22 @@ instruction, and the test will halt.
|
||||||
Note that, as the instructions indicate, this test will fail on a PDP-11/45 or newer machine, because
|
Note that, as the instructions indicate, this test will fail on a PDP-11/45 or newer machine, because
|
||||||
it expects the MUL instruction to trap.
|
it expects the MUL instruction to trap.
|
||||||
|
|
||||||
|
This test is also noteworthy because it uncovered a bug involving instructions like this:
|
||||||
|
|
||||||
|
MOV R0,(R0)+
|
||||||
|
|
||||||
|
Imagine that R0 contains 1000. PDPjs (as well as several other emulators I tested) would write the value 1000
|
||||||
|
to address 1000 after auto-incrementing R0 to 1002.
|
||||||
|
|
||||||
|
Unfortunately, that’s wrong. Apparently, the PDP-11 performs both source and destination address calculations
|
||||||
|
before reading and writing the source and destination values. So, in the above example, the value 1002 must be
|
||||||
|
written to address 1000.
|
||||||
|
|
||||||
|
I should add that not all emulators get this wrong: [SimH](https://github.com/simh/simh), the gold standard of
|
||||||
|
PDP-11 emulators, handles it correctly. However, it's unclear how much confidence one should place in SimH,
|
||||||
|
because as I discovered later when running the [11/70 CPU EXERCISER](#md-11-1170-cpu-exerciser) diagnostic,
|
||||||
|
SimH is not infallible.
|
||||||
|
|
||||||
MAINDEC-11-D0NA (NEW NUMBER - DAKAA)
|
MAINDEC-11-D0NA (NEW NUMBER - DAKAA)
|
||||||
|
|
||||||
T14 TRAPS
|
T14 TRAPS
|
||||||
|
|
@ -394,14 +410,20 @@ So at this point:
|
||||||
|
|
||||||
the XOR instruction was using 23504 for the *src* operand instead of 23506.
|
the XOR instruction was using 23504 for the *src* operand instead of 23506.
|
||||||
|
|
||||||
Interestingly, this test PASSES in SIMH, even though it *also* incorrectly uses 23504 for XOR's *src* operand.
|
Interestingly, this test PASSES in SimH, even though it *also* incorrectly uses 23504 for XOR's *src* operand.
|
||||||
Why? Because when SIMH gets to this instruction:
|
Why? Because when SimH gets to this instruction:
|
||||||
|
|
||||||
023506: 010767 000030 MOV PC,023542 ;FORM PC AS USED IN XOR ABOVE
|
023506: 010767 000030 MOV PC,023542 ;FORM PC AS USED IN XOR ABOVE
|
||||||
|
|
||||||
it incorrectly stores 023510 instead of 023512 into memory, and both mistakes end up canceling each other out.
|
it incorrectly stores 023510 instead of 023512 into memory, and both mistakes end up canceling each other out.
|
||||||
|
|
||||||
In fact, I'm less impressed with the accuracy of [SIMH's](https://github.com/simh/simh) PDP-11 emulation
|
In fact, I'm less impressed with the accuracy of [SimH's](https://github.com/simh/simh) PDP-11 emulation
|
||||||
than I used to be, because in the process of getting to this particular test within the "11/70 CPU EXERCISER"
|
than I used to be, because in the process of getting to this particular test within the "11/70 CPU EXERCISER"
|
||||||
(MAINDEC-11-DEQKC-B1-PB) diagnostic, there were numerous other failures as well (eg, TEST 41 and TEST 45).
|
(MAINDEC-11-DEQKC-B1-PB) diagnostic, there were numerous other failures as well (eg, TEST 41 and TEST 45).
|
||||||
However, SIMH is not my baby, so delving into those failures is an exercise for another day.
|
However, SimH is not my baby, so delving into those failures is an exercise for another day.
|
||||||
|
|
||||||
|
DISCLAIMER: Until I can run this test on real PDP-11 hardware, I have to acknowledge another possible
|
||||||
|
explanation for the above failure: that SimH is *correct*, and that unlike all other registers, the value
|
||||||
|
of the PC register is always used immediately, rather than after both *src* and *dst* have been decoded.
|
||||||
|
But that strikes me as a strange architectural inconsistency, and given SimH's other "11/70 CPU EXERCISER"
|
||||||
|
test failures, I'm going to stick with my original assumption -- for now.
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,6 @@
|
||||||
<device id="default" type="default"/>
|
<device id="default" type="default"/>
|
||||||
<serial id="dl11" adapter="0" binding="print" upperCase="true"/>
|
<serial id="dl11" adapter="0" binding="print" upperCase="true"/>
|
||||||
<panel ref="/devices/pdp11/panel/1170/debugger/front.xml"/>
|
<panel ref="/devices/pdp11/panel/1170/debugger/front.xml"/>
|
||||||
<debugger id="debugger" base="8" messages="" commands="bp 023534"/>
|
<debugger id="debugger" base="8" messages="" commands=""/>
|
||||||
<device ref="/devices/pdp11/pc11/default.xml"/>
|
<device ref="/devices/pdp11/pc11/default.xml"/>
|
||||||
</machine>
|
</machine>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue