; General I/O Channel diagnostic (GICDIAG). ; Parameter 1 = path to diagnostic tape. echo echo echo ---------------------------------------- echo GICDIAG - General I/O Channel Diagnostic echo ---------------------------------------- echo echo Loading the diagnostic. ; Cold load the DUS diagnostics tape. attach -r MS0 %1DUS-III.tape boot MS0 ; Set the system clock into diagnostic mode. ; ; The CPU clock must be REALTIME to pass Section 24 (timeouts). echo echo Configuring the diagnostic. set CPU REALTIME ; Remove all devices from the GIC bus. set DC DISABLED set MA DISABLED ; Configure the Starfish. set GIC COUNT=2 set GICA CHANNEL=11 set GICB CHANNEL=12 ; Configure the diagnostic loader. deposit SWCH 1 ; Load and start the diagnostic. ; ; The diagnostic loads from tape and then waits for a . echo echo Executing the diagnostic. reply "\r" delay 2 seconds ; Configure the diagnostic. ; ; Test 18 is omitted as it tests memory parity errors, which are not simulated. go until ">" ; reply "SWITCHES\r" go until ">" ; reply "TEST 1/17,19/25\r" go until ">" ; reply "GO\r" ; Fix Step 38 bug. ; ; Step 38 begins a series of tests of the DMA state machine. The step begins by ; issuing a code %12 to the IMBA, which does not appear to be defined. If the ; CPP returns an error code, the diagnostic faults. However, if it returns ; success, a succession of "HP-IB mailbox timeout" messages are printed, ; followed by: ; ; Error in step 38 ; INIT did not clear DMA ENABLE nor set DMY4-0=0 ; ; The timeouts occur because the data word at location 00.053253 is set to 1 ; instead of 0. This in turn causes the BRE P+4 at 00.056221 to fail, allowing ; the BR P+17 following it to execute, which skips around the SIO that executes ; the specified IMBA instruction. ; ; The target of the BR P+17 is a PCAL to the procedure at 00.056004 that tests ; location %774 for CPP instruction completion. This routine loops until bit 0 ; is set, indicating completion, or until a counter expires. Because the SIO ; was never done, the bit never sets, which leads to counter expiration and the ; timeout error. ; ; The bug is in the diagnostic. Program location 00.075515 contains a LDI 1 ; instruction. This value causes the next (and all future) SIO instructions are ; bypassed, so no additional commands are sent to the CPP. This results in ; continual HP-IB timeouts until the diagnostic gives up. ; ; A workaround is to change the code at 00.075515 from 021001 (LDI 1) to 000600 ; (ZERO,NOP). deposit 00.075515 000600 ; Respond to "More than one Memory Controller installed in system?(Y/N)" go until "(Y/N)" ; reply "N\r" ; Respond to "How many channels of all types are there installed? " go until "installed?" ; reply "2\r" ; Respond to "Set Thumbwheel of GIC under test to channel 00" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=0 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 02" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=2 ; reply "GO\r" ; Respond to "Set 'PROCESSOR' switch on GIC under test to 'CPU' ( in)" ; "Set 'DEVICE TYPE' switch on GIC under test to 'A' ( in)" ; "Respond 'GO'" go until ">" ; set GICA CPU,A ; reply "GO\r" ; Respond to "Set 'PROCESSOR' switch on GIC under test to 'CPP' (out)" ; "Set 'DEVICE TYPE' switch on GIC under test to 'B' (out)" ; "Respond 'GO'" go until ">" ; set GICA CPP,B ; reply "GO\r" ; Respond to "Set 'SYS CTRL' switch on GIC under test to 'OFF' (out)" ; "Respond 'GO'" go until ">" ; set GICA NOSYS ; reply "GO\r" ; Respond to "Set 'SYS CTRL' switch on GIC under test to 'ON' ( in)" ; "Respond 'GO'" go until ">" ; set GICA SYS ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 03" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=3 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 04" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=4 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 05" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=5 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 06" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=6 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 07" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=7 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 08" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=8 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 09" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=9 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 10" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=10 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 11" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=11 ; reply "GO\r" ;;; SKIP because second channel is at 12 ;;; ; Respond to "Set Thumbwheel of GIC under test to channel 12" ; "Respond 'GO'" ; ;go until ">" ; set GICA CHANNEL=12 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 13" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=13 ; reply "GO\r" ; Respond to "Set Thumbwheel of GIC under test to channel 14" ; "Respond 'GO'" go until ">" ; set GICA CHANNEL=14 ; reply "GO\r" ; Respond to "Set 'MODE' switch on GIC under test to 'TEST' (out)" ; "Respond 'GO'" go until ">" ; set GICA TEST; reply "GO\r" ; Respond to "Set 'PROCESSOR' switch on GIC under test to 'CPU' ( in)" ; "Respond 'GO'" go until ">" ; set GICA CPU; reply "GO\r" ; Respond to "Set 'MODE' switch on GIC under test to 'OPER' ( in)" ; "Respond 'GO'" go until ">" ; set GICA OPER; reply "GO\r" ; Respond to "What is the channel number of second GIC? " go until "What is the channel number of second GIC? " ; reply "12\r" go until ">" ; Respond to "Connect GIC under test to second GIC with interconnect cable" ; "and no other device attached." set GICA NOSYS,DIAGNOSTIC set GICB DIAGNOSTIC ; Respond to "Set 'SYS CTRL' switch on GIC under test to 'OFF' (out)" ; "Respond 'GO'" reply "GO\r" go until ">" ; Reconfigure the diagnostic to reverse the channel assignments. set GICA CHANNEL=6 set GICB CHANNEL=9 reply "TEST 25\r" go until ">" ; reply "GO\r" ; Respond to "What is the CHANNEL address of GIC under test? " go until "What is the CHANNEL address of GIC under test? " ; reply "6\r" ; Respond to "What is the channel number of second GIC? " go until "What is the channel number of second GIC? " ; reply "9\r" ; Respond to "Connect GIC under test to second GIC with interconnect cable" ; "and no other device attached. go until ">" ; reply "GO\r" ; End the of diagnostic. go until ">" ; reply "EXIT\r" go until ">" ; Restore the hardware configuration. set CPU CALTIME set DC ENABLED set MA ENABLED set GIC COUNT=1 set GIC HPIB,CHANNEL=11,CPU,A,SYS,OPER