Listing of file='T28D010A' on disk='vmedia/702-0079.wvd.zip'
# Sector 539, program filename = 'T28D010A'
0010 REM DIAG-01 04/02/76 2228 FIELD SERVICE DIAGNOSTIC (B+OP 2)
: COM Q1$(2),Q1$3,Q0$2,R0$32,Q$3,R$1,R1$1,R2$1,R3$1,Q3$(4)64,Q2$12,Q4$(4)64
,T$1
0020 DIM P$1,D8$17
: INIT(0A)D8$
: STR(D8$,1,1)=HEX(01)
: GOTO 1890
0230 IF T$>HEX(0F)THEN 250
0240 PRINT "UNDEFINED ERROR"
: RETURN
0250 IF T$>HEX(1F)THEN 330
: IF T$<>HEX(10)THEN 260
: PRINT " LOOP BACK CONNECTIONS"
: IF P$<>HEX(FF)THEN 570
: RETURN
0260 E=E+1
: PRINT STR(D8$,1,8)
0270 IF T$<>HEX(11)THEN 280
: PRINT "MODEM SIGNAL ON"
0280 IF T$<>HEX(12)THEN 290
: PRINT "MODEM SIGNAL NOT ON"
0290 IF T$<>HEX(13)THEN 300
: PRINT "OTHER THAN CAR ON"
0300 IF T$<>HEX(14)THEN 310
: PRINT "LOOP BACK CLIP NOT ATTACHED"
0310 IF T$<>HEX(15)THEN 320
: PRINT "CTS NOT TIED IN"
0320 IF T$<>HEX(16)THEN 240
: PRINT "DSR NOT TIED IN"
: RETURN
0330 IF T$>HEX(2F)THEN 340
: GOTO 240
0340 IF T$>HEX(3F)THEN 440
: IF T$<>HEX(30)THEN 350
: PRINT " DATA SIGNALS AND SYNC"
: RETURN
0350 E=E+1
: PRINT STR(D8$,1,9)
0360 IF T$<>HEX(31)THEN 370
: PRINT "RRDY ON"
0370 IF T$<>HEX(33)THEN 380
: PRINT "TXE ON"
0380 IF T$<>HEX(34)THEN 390
: PRINT "TC STATUS ERROR"
0390 IF T$<>HEX(35)THEN 400
: PRINT "SYNC DETECT OR RRDY NOT ON"
0400 IF T$<>HEX(37)THEN 410
: PRINT "OFLO NOT ON"
0410 IF T$<>HEX(38)THEN 420
: PRINT "SYNC CHAR NOT FOUND"
0420 IF T$<>HEX(39)THEN 430
: PRINT "RRDY STILL ON"
0430 IF T$<>HEX(3A)THEN 240
: PRINT "TRDY NEVER CAME ON"
: RETURN
0440 IF T$>HEX(5F)THEN 500
: IF T$<>HEX(50)THEN 450
: PRINT " CLOCK"
: RETURN
0450 E=E+1
: PRINT STR(D8$,1,10)
0460 IF T$<>HEX(51)THEN 470
: PRINT "CLOCK NOT SETTING"
0470 IF T$<>HEX(52)THEN 480
: PRINT "CLEAR CLOCK NOT WORKING"
0480 IF T$<>HEX(53)THEN 490
: PRINT "TICK CLOCK SETS BEFORE MINIMUM TIME"
0490 IF T$<>HEX(54)THEN 240
: PRINT "TICK CLOCK SETS AFTER MAXIMUM TIME"
: RETURN
0500 IF T$>HEX(6F)THEN 560
: IF T$<>HEX(60)THEN 510
: PRINT " TRANSMIT/RECEIVE"
: RETURN
0510 E=E+1
: PRINT STR(D8$,1,11)
0520 IF T$<>HEX(61)THEN 530
: PRINT "EXPECTED CHAR NOT RECEIVED"
0530 IF T$<>HEX(62)THEN 540
: PRINT "RRDY/UFLO/OFLO SHOULD BE 0"
0540 IF T$<>HEX(64)THEN 550
: PRINT "RCVR OVERFLOWED"
0550 IF T$<>HEX(65)THEN 240
: PRINT "RCVR OVERLOW DID NOT OCCUR"
: RETURN
0560 IF T$>HEX(7F)THEN 630
: IF T$<>HEX(70)THEN 570
: PRINT " INTERRUPT"
: RETURN
0570 E=E+1
: PRINT STR(D8$,1,12)
0575 IF P$<>HEX(70)THEN 580
: PRINT "UNDEFINED ERROR IN INTERRUPT PROCESSING"
: PRINT HEX(010A0A);
0580 IF T$<>HEX(71)THEN 590
: PRINT "INTERRUPT OCCURRED (DISABLED)"
0590 IF T$<>HEX(72)THEN 600
: PRINT "INT. OCCURRED (INT DISABLED-TE/RE ENABLED)"
0600 IF T$<>HEX(73)THEN 610
: PRINT "NO TRDY INTERRUPT"
0610 IF T$<>HEX(75)THEN 620
: PRINT "INTERRUPT OCCURED (NO SYNC)"
0620 IF T$<>HEX(76)THEN 240
: PRINT "NO RRDY INTERRUPT"
: RETURN
0630 IF T$=HEX(FF)THEN 640
: GOSUB 230
: P$=T$
: GOTO 1200
0640 P$=T$
: L=L+1
: PRINT " T.C. TEST COMPLETE LOOP=";L;" ERRORS=";E
: PRINT HEX(01);
: GOTO 1790
1010 DEFFN'3
: PRINT HEX(03);"INTERNAL 2228 RAM TEST"
: GOSUB '0
1020 INIT(00)Q3$()
: Q3$(1)=HEX(10035F214610707EB8C42A1004C20610237CFE20C31C100000000000C20610
3E00321910CD3C10C303103EFFCD3C107CCD3C107DCD3C1078CD3C10C9D311DB01)
1030 Q3$(2)=HEX(E608CA3E10C9)
1040 STR(Q$,1,3)=STR(Q3$(1),1,3)
: GOSUB 1150
1050 PRINT "DIAGNOSTIC LOADED IN RAM"
1060 E,L=0
: STR(Q3$(1),4,1)="1"
: Q$=Q1$
: GOSUB 1150
1070 PRINT "EACH PASS TAKES ABOUT 35 SECONDS"
: PRINT "RESPONSE IS--00 DENOTES PASS"
: PRINT "FF-ERROR LOCATION-PATTERN"
1080 GOSUB 1140
: IF T$<>HEX(00)THEN 1090
: L=L+1
: PRINT "--LOOP COMPLETE=";L,"ERRORS=";E
: GOTO 1080
1090 E=E+1
: PRINT "--ERROR";E;"--LOC.=";
: GOSUB 1140
: GOSUB 1140
: PRINT " PATTERN=";
: GOSUB 1140
: PRINT
: GOTO 1080
1110 RETURN
1120 IF STR(Q2$,6,1)=HEX(00)THEN 1130
: GOSUB 1880
: STOP "NO 'ENDI' RECEIVED"
1130 IF STR(Q2$,8,1)=HEX(00)THEN 1110
: GOSUB 1880
: STOP "BAD 'RETURN' CODE"
: REM %GET A SINGLE CHARACTER
1140 INIT(00)Q2$
: $GIO/01C(8602,Q2$)
: REM /CRB,IBS
: GOSUB 1120
: T$=STR(Q2$,2,1)
: HEXPRINT T$;
: RETURN
: REM \D8SEND 'WRITE'
1150 INIT(00)Q2$
: STR(Q2$,1,3)=STR(Q$,1,3)
: Q1=VAL(STR(Q$,3,1))
: $GIO WRITE/01C(Q1$(1),Q2$)Q3$()<4,Q1>
1160 IF STR(Q2$,8,1)=HEX(00)THEN 1110
1170 STOP "ERROR ON WRITE"
: REM %SEND 'READ'
1180 INIT(00)Q2$
: STR(Q2$,1,3)=STR(Q$,1,3)
: $GIOREAD/01C(Q1$(2),Q2$)Q4$()
1190 IF STR(Q2$,8,1)=HEX(20)THEN 1110
: STOP "ERROR ON READ"
: REM %MONITOR 2228 EXECUTION
1200 GOSUB 1140
: IF T$<>HEX(DD)THEN 1230
1210 PRINT
: PRINT " A F B C D E H L 2228 REGISTERS"
1220 FOR Q=1TO 4
: GOSUB 1140
: STR(R0$,2*Q-1,1)=T$
: GOSUB 1140
: STR(R0$,2*Q,1)=T$
: PRINT " ";
: NEXT Q
: GOSUB 1140
: PRINT
: GOTO 1200
: REM \D8USER RESPONSE TO EXECUTE
1230 GOTO 630
1250 REM %KEY HEX DIGITS/MODIFY R0$
1260 Q=1
: SELECT PRINT 005(64)
1270 KEYIN R$,1280,2040
: GOTO 1270
1280 IF R$>"F"THEN 1270
: IF R$<"0"THEN 1320
: IF R$<="9"THEN 1290
: IF R$<"A"THEN 1270
1290 STR(R0$,Q,1)=R$
1300 PRINT R$;
: Q=Q+1
: IF Q<=Q1THEN 1270
1310 Q=Q-1
: PRINT HEX(08);
: GOTO 1270
1320 IF R$<>HEX(08)THEN 1330
: IF Q<2THEN 1270
: GOTO 1310
1330 IF R$<>" "THEN 1340
: R$=HEX(09)
: GOTO 1300
1340 IF R$<>HEX(0D)THEN 1270
1350 FOR Q=1 TO Q1/2
: R2$=STR(R0$,2*Q-1,1)
: IF R2$<="9"THEN 1360
: ADD(R2$,F9)
1360 ROTATE(R2$,4)
: AND (R2$,F0)
: R1$=R2$
: R2$=STR(R0$,2*Q,1)
: IF R2$<="9"THEN 1370
: ADD(R2$,F9)
1370 AND (R2$,0F)
: OR (R1$,R2$)
: STR(Q3$(1),Q+3,1)=R1$
: NEXT Q
1380 PRINT
: RETURN
1390 REM %GET ADDRESS
1400 PRINT "START ADDRESS=1000";HEX(08080808);
: Q1=4
: R0$="1000"
: GOSUB 1260
: STR(Q$,1,2)=STR(Q3$(1),4,2)
: RETURN
1420 HEXPRINT Q0$;
: PRINT " = ";
: HEXPRINT R$;
: PRINT " ";
: HEXPRINT T$;
1430 REM -- BITS LOST
: BOOL4(R$,T$)
: PRINT " ";
: HEXPRINT R$;
1440 REM ++ BITS GAINED
: R$=T$
: BOOL4(R$,R1$)
: PRINT " ";
: HEXPRINT R$;
: RETURN
1450 DEFFN'4
: GOSUB '0
: PRINT HEX(03);
: R,R1,R3,R4,R5,R7=0
1460 INPUT "TEST RAM--RANDOM=1",R
: IF R=1THEN 1480
1470 PRINT "TEST PATTERN=";
: Q1=2
: GOSUB 1260
: R3$=R1$
1480 R0$=HEX(102040)
: Q$="102040"
: INPUT "CYCLIC MEMORY=1",R1
: IF R1=1THEN 1500
1490 PRINT HEX(010A0A),,HEX(0D);
: GOSUB 1400
: R0$=Q$
: STR(R0$,3)=HEX(40)
: IF Q$<HEX(101A)THEN 1600
1500 IF R=1THEN 1570
: R1$=R3$
: GOTO 1580
1510 STR(Q$,1,3)=STR(R0$,1,3)
: INIT(R1$)Q3$()
1520 PRINT HEX(010A);"AT=";
: HEXPRINT STR(Q$,1,2);
: PRINT TAB(64)
: GOSUB 1150
1530 INIT(00)Q4$()
: GOSUB 1180
: REM CHECK RESULTS
1540 IF Q3$(1)=Q4$(1)THEN 1550
: GOSUB 1590
: REM /FIND DIFFERENCE
1550 IF R1<>1THEN 1570
: ADDC(STR(Q$,1,2),40)
1560 IF STR(Q$,1,2)<HEX(1F60)THEN 1520
: REM /TEST END ADDRESS
1570 IF R=0THEN 1580
: BIN(R1$)=INT(1+(255*RND(1)))
1580 R7=R7+1
: PRINT HEX(01);"TEST 2228 RAM*PASS=";R7;" PATTERN=";
: HEXPRINT R1$
: GOTO 1510
1590 IF STR(Q$,1,2)<>STR(Q1$,1,2)THEN 1620
: STOP "7150"
1600 PRINT HEX(010A);"SPECIFY ADDRESS GT 1019"
: GOTO 1490
1610 REM FLAG ERROR
1620 FOR Q=1 TO 64
: IF R1$=STR(Q4$(1),Q,1)THEN 1660
: STR(Q0$,1,2)=STR(Q$,1,2)
: BIN(T$)=Q
: ADDC(Q0$,T$)
1630 R4=R4+1
: PRINT HEX(010A0A0A);"LOC. T$ MEM -- ++ IN ERROR ";R4
1640 R5=R5+1
: IF R5=1THEN 1650
: PRINT HEX(0C);
: FOR Q1=1TO R5
: PRINT
: NEXT Q1
: IF R5<11THEN 1650
: R5=0
1650 R$=R1$
: T$=STR(Q4$(1),Q,1)
: GOSUB 1420
: PRINT " ON PASS=";R7
1660 NEXT Q
: RETURN
: REM %^LOAD 2228 RAM
1670 Q9=1
: GOSUB '0
: R,R1=0
1680 R0$="DIAG-01A"
: REM /MICROCODE DATA FILE NAME
1700 INPUT A
1710 DATA LOAD DC OPEN T #6,R0$
: LIMITS T#6,R0$,R4,Q,Q1
1720 DATA LOAD BA T#6,(R4,R4)Q3$()
1740 STR(Q$,1,3)=STR(Q3$(1),1,3)
: IF STR(Q$,3,1)=HEX(00)THEN 1110
: R=R+1
: PRINT "RECORD";R;" ADDR/COUNT=";
: HEXPRINT Q$;
1750 GOSUB 1150
: FOR Q=1TO 4
: Q4$(Q)=Q3$(Q)
: NEXT Q
: $GIO/01C(Q1$(2),Q2$)Q4$()<4>
: IF STR(Q2$,8,1)<>HEX(20)THEN 1190
: FOR Q=1TO 4
: IF Q4$(Q)<>Q3$(Q)THEN 1760
: NEXT Q
: PRINT " good transfer"
: GOTO 1720
1760 STOP "NON-COMPARE"
1770 DEFFN'1
: IF Q9=1THEN 1780
: GOSUB 1670
1780 PRINT "SEND 'EXECUTE' SEQUENCE"
: STR(Q3$(1),4,1)="1"
: Q$=Q1$
: GOSUB 1150
: PRINT HEX(03);
: E,L=0
: P$=HEX(FF)
1790 PRINT "WAITING FOR RESPONSE FROM 2228"
: GOTO 1200
1800 REM %'0 SEND 2228 RESET
1810 DEFFN'0
: PRINT "SENDING 2228 RESET"
1820 $GIO /01C(4580,Q2$)
: RETURN
1830 DEFFN'2
: GOSUB '0
: PRINT HEX(03);"INITIALIZE 2228 RAM"
: R,R4,R5=0
: R0$=HEX(100040)
1840 STR(Q$,1,3)=STR(R0$,1,3)
: INIT(00)Q3$()
1850 HEXPRINT STR(Q$,1,2);
: PRINT HEX(0C)
: GOSUB 1150
1860 INIT(00)Q4$()
: GOSUB 1180
1870 IF Q3$(1)<>Q4$(1)THEN 1760
: ADDC(STR(Q$,1,2),40)
: IF STR(Q$,1,2)<HEX(1FC0)THEN 1850
: GOTO 2050
1880 STOP "ERROR IN CONTROLLER RESPONSE"
1890 Q1$=HEX(101901)
: REM /LOAD FLAG ADDR.
1900 Q1$(1)=HEX(6C0042104220A2004404)
: REM /ARG1 WRITE
1960 Q1$(2)=HEX(6C01421042204230C660)
: REM /ARG1 READ
2020 SELECT #6 B20
: REM /PROGRAM DISK
2040 DEFFN'15
: SELECT PRINT 005(64),INPUT 001
: PRINT HEX(03);"2200 HARDWARE DIAGNOSTIC - 2228 --------------------------
------"
2050 PRINT "'0 RESET 2228",,"'1 START TC DIAGNOSTIC"
2060 PRINT "'2 INITIALIZE RAM","'3 INTERNAL RAM TEST"
2070 PRINT "'4 LOAD/STORE RAM TEST","'15 PROGRAM MENU"
2075 PRINT "'31 SYSTEM MENU"
2080 STOP " - KEY APPROPRIATE SPECIAL FUNCTION"
2090 DEFFN'31
: SELECT PRINT 005,INPUT 001,CI 001,CO 005
: LOAD DC T"START"