1. CPU: register pointer was being loaded from PSW1 instead of PSW2. | |
2. CPU: register pointer was not preserved on an XPSD 0. | |
3. CPU: some decode points were taking unimplemented rather than non-existent | |
instruction traps. | |
4. CPU: BDR branches on result >=0, instead of > 0. | |
5. CPU: PSD change instructions were not saving old PC in PC queue. | |
6. CPU: illegal register pointer does not stop the system on the Sigma 5-7; | |
instead, registers read as 0's, and writes are ignored. | |
7. CPU: traps were setting the Sigma 9 vector field unconditionally. | |
8. CPU: CH does not SEXT Rn<16:31>. | |
9. CPU: MTW and MTH overflow traps not implemented. | |
10. CPU: MTH condition code calculations not implemented correctly. | |
11. CPU: illegal shift opcodes on the Sigma 5-7 are treated as arithmetic | |
single (according to the AUTO diagnostic). | |
12. FP: SF did not calculate condition codes correctly. | |
13. FP: SF left did not detect normalized if the count reached zero. | |
14. FP: SF right was retaining a guard digit incorrectly. | |
15. FP: SF right test was not taking into account single/double precision. | |
16. FP: fp_unpack killed the operand sign before testing it. | |
17. FP: fp_pack did not recomplement a negative operand. | |
18. CPU: DW overflow test was incorrect. | |
19. IO: device status bit field was incorrectly defined. | |
20. IO: AIO was testing for == 0 instead of != 0. | |
21. TT: input keyboard character mappings were incorrect. | |
22. SYS: shifts were not displaying or accepting an index register. | |
23. CPU: mapping from pulse interrupt number to counter interrupt number | |
was incorrect. | |
24. CPU, CIS: handling of instructions aborts was incorrect. | |
25. CPU: CC2,4 set incorrectly on aborted stack instruction. | |
26. CPU: CC2,4 set incorrectly on MSP,0 instruction. | |
27. CPU: PLW not converting operand address to byte address. | |
28. CPU: PSM, PLM not converting limit operand address to byte address correctly. | |
29. CPU: PLM wrote registers in inverse order. | |
30. Definitions: number of virtual, physical pages derived incorrectly. | |
31. MAP: MMC control set wrap incorrect. | |
32. MAP: MMC register update of Rn|1 incorrect. | |
33. CPU: CBS set CC's incorrectly on unequal. | |
34. CPU: TTBS set CC's incorrectly on early exit. | |
35. IO: chan_proc_epilog and four other routines extracted device address incorrectly. | |
36. CPU: DW was fetching halfwords instead of words. | |
37. CPU: multiples were not setting condition codes on 0 operands. | |
38. FP: floating add zero test on second operand was inverted. | |
39. FP: floating add zero cases failed to set the result variable. | |
40. FP: floating add zero cases failed to go through postnormalization logic. | |
41. FP: double precision add macro lost high carry out. | |
42. FP: double precision add macro had an undocumented restriction about operands. | |
43. FP: all double precision instructions unpacked the wrong low order memory operand. | |
44. FP: normalization failed to decrement the exponent. | |
45. FP: in single precision, removing the guard digit created a spurious low-order digit. | |
46. FP: denormalization failed to clear the low word (single precision). | |
47. FP: denormalization failed to clear the guard digit (double precision). | |
48. FP: add/subtract failed to treat abnormal 0's as normal numbers. | |
49. CIS: WriteDecA set local rather than global condition codes. | |
50. CIS: Illegal digit check missed byte 0. | |
51. CIS: Overflow check set wrong condition codes. | |
52. CIS: NibbleLShift routine overflow check was (also broken in VAX, PDP11). | |
53. CIS: WordLShift routine overflow check was wrong (also broken in VAX, PDP11). | |
54. CIS: WordLShift had signed/unsigned variable conflict in compare. | |
55. CIS: WriteDecA not setting correct condition codes for -0. | |
55. CIS: WriteDECA not clearing CC3/4 before setting. | |
56. CIS: DM shift-and-test loop did 14 iterations instead of 15. | |
57. CIS: DM final shift of 16 done outside non-zero case instead of inside. | |
58. CIS: DD put quotient and remainder in wrong registers. | |
59. CIS: DD did not shift remainder to proper place, based on dividend/divisor widths. | |
60. CIS: DD overflow test missed exact 16 digit quotient case. | |
61. CIS: algorithm to compute length of operand failed for certain lengths (also broken | |
in VAX, PDP11). | |
62. CIS: DM and DD answer was wrong on restart cases. [NOT FIXED YET] | |
63. CIS: EBS fetched pattern from wrong address pointer. | |
64. CIS: EBS field separator wrote wrong byte. | |
65. MAP: Access codes defined incorrectly for access protection check. | |
66. CPU: LPSD fetching operands with write check rather than read check. | |
67. CPU: Illegal instruction stop (and other trap stops) weren't rolling back the PC. | |
68. CPU: History routine merged CC's into history array incorrectly. | |
69. CPU: History routine stored incremented rather than actualy PC. | |
70. CPU: History reporting routine printed wrong operand value, due to colliding declarations. | |
71. IO: Power up/down interrupts should not be implemented. | |
72. IO: WD was not recalculating int_hiact. | |
73. IO: Interrupt chain was not linked at powerup. | |
74. IO: Interrupt chain link algorithm was wrong. | |
75. IO: WD processing was spanning [beg,end) rather than [beg,end]. | |
76. RTC: RTC interrupts were happening at the wrong level. | |
77. PTR: leader skip was testing for channel end. | |
78. PTR: leader skip was testing per command instead of per reel/file. | |
79. PTR: end of file was treated as fatal error instead of channel end + length error. | |
80. PTR, PTP: units were not marked UNIT_SEQ. | |
81. LPT: unit was not marked UNIT_SEQ. | |
82. IO: device address set/show updated/displayed wrong field in single unit devices. | |
83. CPU: address calculation for MTx in interrupt location used incorrect length. | |
84. LPT: print, format opcode definitions inverted. | |
85. LPT: wrong index used to count buffer fill loop. | |
86. IO: CPU/IOP communications through 20/21 were not modelled. | |
87. CIS: Multiply algorithm incorrect, multiply restart not modelled. | |
88. CIS: Divide algorithm incorrect, divide restart not modelled. | |
89. IO: WD .44 not recognized as effective NOP. | |
90. CPU: Sigma 5 (uniquely) does not implement CVA or CVS. | |
91. IO: AIO merging status incorrectly. | |
92. IO: system for returning status byte from IO was muddled; rewrite required. | |
93. RAD: 7232 track shift offset was incorrectly defined. | |
94. CPU: MTX for interrupts returned wrong value. | |
95. CPU: Counter overflow trigger equation was incorrect. | |
96. CPU: MTX interrupts not recalculating interrupt summary values. | |
97. RTC: SET/SHOW C1-C4 routines were broken. | |
98. DP: comparison for sector field overflow was incorrect. | |
99. DP: cross-cylinder incorrectly set on read to end of cylinder. | |
100. DP: seek never executed. | |
101. DP: seek followon state codes set incorrectly. | |
102. DP: cylinder offset defined incorrectly. | |
103. DP: SIO not initing unit thread properly for non-zero units. | |
104. MUX: Line enable must be remembered for lines that are not currently connected. | |
105. RAD: write check was reading words off disk instead of bytes. | |
106. RAD: end of transfer routine checking for address error incorrectly. | |
107. DK: end of transfer routine checking for address error incorrectly. | |
Diagnostic Notes | |
---------------- | |
1. PATTERN paper tape (SA = 60, end pass = 1AC), SET CPU RBLKS=32. | |
Break at 60 is triggered once during loading process. | |
2. VERIFY paper tape (SA = 140, end pass = 8E6). | |
3. AUTO paper tape (SA = 105), SET CPU LASLMS to suppress spurious error message. | |
AUTO magtape runs correctly with no messages. | |
4. SUFFIX magtape (SA = 100, end pass = 115), no printouts. | |
5. FLOAT magtape. | |
6. DECIMAL paper tape (SA = EE). | |
7. PROTECT paper tape (SA = F9), long runtime until printout. | |
8. MAP paper tape (SA = 7C). | |
9. MEDIC paper tape (SA = 68), set SSW2 after breakpoint, long runtime. | |
10. INT magtape, stops after M6, set SSW2 and continue, | |
enters pattern generator and loops forever, as expected. | |
11. RTC paper tape, clocks must be 500Mhz, reports clocks as "too slow" due | |
to faster simulation speed. | |
Runs correctly with SET THROTTLE 500K. | |