0001 *** PROCESSOR TECHNOLOGY 32KRA TEST *** 0002 * 32KRA 1.0 (MOD 0) 0003 * 0004 * COPYRIGHT 1978 0005 * PROCESSOR TECHNOLOGY CORP. 0006 * ALL RIGHTS RESERVED 0007 * 0008 ORG 0C900H 0009 XEQ 0C004H 0010 * 0011 BEGIN EQU $ **** SETUP I/O **** 0012 MVI L,04H 0013 SHLD RTRN1 FOR RETURN TO SOLOS/CUTER 0014 MVI L,19H 0015 SHLD SOUT1 FOR SOLOS/CUTER OUTPUT 0016 MVI L,1FH 0017 SHLD SINP1 FOR SOLOS/CUTER INPUT 0018 * 0019 *** ANNOUNCE TEST *** 0020 * 0021 LXI H,MSG1 MESSAGE ADDRESS 0022 CALL STRNG DISPLAY MESSAGE 0023 * 0024 *** GET CONTINUOUS OR SINGLE PASS MODE 0025 * 0026 XRA A SET PASS CONTROL 0027 STA CFLAG FOR 1 PASS 0028 CALL GET GO WAIT FOR A KEY 0029 CPI 'C' CONTINUOUS MODE ? 0030 JNZ INIT NOPE. 0031 * 0032 PUSH PSW SAVE KEY 0033 MVI A,0FFH YES 0034 STA CFLAG RAISE FLAG 0035 POP PSW RESTORE KEY 0036 * 0037 INIT EQU $ **** INITIALIZATION **** 0038 CALL PUT ECHO KEY 0039 CALL CRLF 0040 * 0041 LXI H,0 CLEAR ERROR LOG 0042 SHLD ROW1 0043 SHLD ROW2 0044 SHLD BDADR TEST BOARD AT ADRS. 0 0045 * 0046 CONT EQU $ CONTINUOUS MODE LOOPS HERE 0047 LXI H,MSG2 IN PROGRESS MESSAGE 0048 CALL STRNG 0049 SUB A 0050 STA PAGE PAGE NUMBER = 0 0051 STA FILL STATIC FILLER = 0 0052 * 0053 MAIN EQU $ **** MAIN **** 0054 LDA FILL GET STATIC FILLER 0055 RLC 0056 CALL WRITE FILL ONE PAGE 0057 * 0058 SUB A MASTER PATTERN = ONE BIT 0059 STC . IN NINE SET TO ONE. 0060 * 0061 LOOP1 EQU $ **** LOOP 1 **** 0062 PUSH PSW SAVE MASTER PATTERN 0063 CALL NXTPG GO PAST STATIC TEST PAGE 0064 MVI E,3 THREE PAGES REMAIN 0065 * 0066 TEST1 EQU $ **** TEST 1 **** 0067 CALL TEST TEST NEXT PAGE 0068 DCR E REMAINING PAGES TESTED ? 0069 JNZ TEST1 NO, DO NEXT ONE 0070 * 0071 LDA FILL ELSE CHECK 0072 RLC . STATIC TEST PAGE 0073 CALL READ FOR DROPPED BITS. 0074 * 0075 POP PSW RESTORE MASTER PATTERN 0076 RAR . PERMUTE 0077 JNC LOOP1 REPEAT EIGHT MORE TIMES 0078 * 0079 CMP A INVERT BITS OF 0080 MVI A,0FFH MASTER PATTERN 0081 * 0082 LOOP2 EQU $ **** LOOP 2 **** 0083 PUSH PSW SAVE MASTER PATTERN 0084 CALL NXTPG SKIP PAST STATIC TEST PAGE 0085 MVI E,3 THREE PAGES REMAIN 0086 * 0087 TEST2 EQU $ 0088 CALL TEST TEST NEXT PAGE 0089 DCR E REMAINING PAGES TESTED ? 0090 JNZ TEST2 NO, DO NEXT ONE 0091 * 0092 LDA FILL ELSE CHECK STATIC 0093 RLC . TEST PAGE 0094 CALL READ FOR DROPPED BITS. 0095 * 0096 POP PSW RESTORE MASTER PATTERN 0097 RAR . PERMUTE 0098 JC LOOP2 REPEAT EIGHT MORE TIMES 0099 * 0100 CALL NXTPG REPEAT ENTIRE TEST 0101 LDA PAGE STARTING WITH 0102 ORA A NEXT PAGE IF WE HAVEN'T 0103 JNZ MAIN BEEN AROUND 4 TIMES ALREADY. 0104 * 0105 LDA FILL INVERT FILLER 0106 CMA . 0107 STA FILL AND TEST AGAIN 0108 ORA A UNLESS ALREADY DONE. 0109 JNZ MAIN 0110 * 0111 CALL MAP OUTPUT CHIP MAP 0112 * 0113 LDA CFLAG CONTINUOUS MODE ? 0114 ORA A 0115 JZ RTRN NO. RETURN TO SOLOS/CUTER 0116 JMP CONT YES. GO AROUND AGAIN 0117 * 0118 * *** SUBROUTINES **** 0119 * 0120 MAP EQU $ **** MAP **** 0121 CALL CRLF 0122 LHLD ROW1 DISPLAY CHIPS IN TOP ROW 0123 CALL LINE FORMAT THE LINE 0124 LHLD ROW2 DISPLAY CHIPS IN BOTTOM ROW 0125 CALL LINE FORMAT THE LINE 0126 RET . RETURN 0127 * 0128 LINE EQU $ **** LINE **** 0129 MVI D,4 # OF BITS PER QUADRANT 0130 MVI E,2 # OF ROWS 0131 * 0132 QUAD EQU $ **** QUAD **** 0133 MOV A,L PAGE 0 OR 2 0134 RAR . CARRY MEANS CHIP HAD ERRORS 0135 MOV L,A REMAINING BITS GO BACK 0136 CALL CHIP DISPLAY CHIP STATUS 0137 * 0138 MOV A,H PAGE 1 OR 3 0139 RAR . TEST BIT, CARRY IS N.G. 0140 MOV H,A RETURN THE REST 0141 CALL CHIP DISPLAY CHIP STATUS 0142 * 0143 CALL SPAC1 FOR READABILITY 0144 DCR D QUADRANT DONE? 0145 JNZ QUAD NO 0146 * 0147 MVI D,4 YES, RESTORE CHIP COUNT 0148 CALL SPAC1 SEPARATE QUADRANTS 0149 DCR E IS LINE DONE? 0150 JNZ QUAD NO, FORMAT OTHER QUADRANT 0151 CALL CRLF LINE IS DONE 0152 RET . RETURN 0153 * 0154 SPAC1 EQU $ **** SPACE **** 0155 MVI A,' ' WRITE A SPACE 0156 JMP MARK1 0157 * 0158 CHIP EQU $ **** CHIP **** 0159 MVI A,'G' MARK CHIP 'G' 0160 JNC MARK1 IT'S OK, ELSE 0161 MVI A,'X' MARK CHIP 'X' 0162 * 0163 MARK1 CALL PUT OUTPUT MARK 0164 CMP A CLEAR CARRY BIT 0165 RET . RETURN 0166 * 0167 STRNG EQU $ **** STRING **** 0168 MOV A,M GET CHARACTER FROM STRING 0169 INX H BUMP STRING POINTER 0170 CPI 0 IS IT END MARK ? 0171 RZ . YES, END OF STRING 0172 CALL PUT NO, OUTPUT CHARACTER 0173 JMP STRNG CONTINUE 0174 * 0175 PUT EQU $ **** OUTPUT ROUTINE **** 0176 PUSH H SAVE IT 0177 MOV B,A CHAR. TO REG. B 0178 CALL SOUT SOLOS/CUTER OUTPUT 0179 POP H RESTORE IT 0180 RET 0181 * 0182 GET EQU $ **** INPUT ROUTINE **** 0183 CALL SINP CHECK FOR CHAR. 0184 JZ GET NONE YET 0185 ANI 7FH NO PARITY ! 0186 RET 0187 * 0188 CRLF EQU $ **** DO CR AND LF **** 0189 MVI A,0DH 0190 CALL PUT DO CR 0191 MVI A,0AH 0192 CALL PUT DO LF 0193 RET 0194 * 0195 NXTPG EQU $ **** NEXT PAGE **** 0196 PUSH PSW SAVE 0197 CALL SINP CHECK FOR 'ESCAPE' KEY 0198 CPI 1BH 0199 JZ RTRN TO SOLOS/CUTER IF FOUND 0200 * 0201 LDA PAGE GET CURRENT PAGE NUMBER 0202 ADI 20H ADD 8K 0203 ANI 60H WRAP AROUND 0204 STA PAGE SAVE 0205 POP PSW RESTORE 0206 RET . AND RETURN 0207 * 0208 GETPG EQU $ **** GET PAGE **** 0209 PUSH PSW SAVE 0210 LDA PAGE GET PAGE NUMBER 0211 LHLD BDADR BOARD ADDRESS 0212 ADD H ADD PAGE # 0213 MOV H,A SET PAGE ADDRESS 0214 POP PSW RESTORE 0215 RET . RETURN 0216 * 0217 TEST EQU $ **** TEST **** 0218 CALL WRITE WRITE TEST PATTERN 0219 CALL READ AND READ IT BACK 0220 CALL NXTPG BUMP PAGE POINTER 0221 RET . THEN RETURN 0222 * 0223 WRITE EQU $ **** WRITE **** 0224 PUSH PSW SAVE 0225 CALL GETPG GET PROPER HL 0226 MVI D,20H COUNT 8K 0227 * 0228 WRIT1 EQU $ **** WRITE 1 **** 0229 PUSH PSW SAVE WORKING PATTERN 0230 MOV M,A TRY TO STORE 0231 XRA M IS DATA GOOD? 0232 CNZ BITER RECORD BIT IF NOT 0233 POP PSW RESTORE PATTERN 0234 RAL . PERMUTE 0235 INR L BUMP STORAGE ADDRESS 0236 JNZ WRIT1 0237 INR H BUMP BY 256 0238 DCR D ENOUGH FOR 8K 0239 JNZ WRIT1 0240 POP PSW RESTORE 0241 RET . AND RETURN 0242 * 0243 READ EQU $ **** READ **** 0244 PUSH PSW SAVE 0245 CALL GETPG GET PROPER HL 0246 MVI D,20H COUNT 8K 0247 * 0248 READ1 EQU $ **** READ 1 **** 0249 PUSH PSW SAVE WORKING PATTERN 0250 XRA M IS DATA STILL GOOD ? 0251 CNZ BITER ACCUMULATE ERRORS 0252 POP PSW RESTORE PATTERN 0253 RAL . PERMUTE 0254 INR L BUMP STORAGE ADDRESS 0255 JNZ READ1 0256 INR H BUMP BY 256 0257 DCR D ENOUGH FOR 8K 0258 JNZ READ1 0259 POP PSW RESTORE 0260 RET . AND RETURN 0261 * 0262 BITER EQU $ **** BIT ERROR **** 0263 PUSH H SAVE TEST ADDRESS 0264 MOV B,A ERROR DATA 0265 * 0266 LDA PAGE GET CURRENT PAGE 0267 RLC . SHIFT TO 0268 RLC . LOW ORDER 0269 RLC . TWO BITS 0270 RLC . 0271 * 0272 LXI H,BITS ERROR LOG ADDRESS 0273 ADD L DISPLACE BY PAGE # 0274 MOV L,A 0275 MOV A,M GET ACCUMULATED ERRORS 0276 ORA B ADD NEW ONES 0277 MOV M,A AND PUT IN LOG 0278 * 0279 POP H RESTORE TEST ADDRESS 0280 RET . AND RETURN TO TEST 0281 * 0282 MSG1 DB 0BH CLEAR SCREEN 0283 ASC " PROCESSOR TECHNOLOGY 32KRA TEST" 0284 DW 0A0DH 0285 ASC "COPYRIGHT (C) 1978, PROCESSOR TECHNOLOGY CORP." 0286 DW 0A0DH 0287 DW 0A0DH 0288 ASC "TYPE 'C' TO RUN CONTINUOUSLY AND ACCUMULATE " 0289 ASC "ERRORS." 0290 DW 0A0DH 0291 ASC "STRIKE ANY OTHER KEY TO RUN ONE PASS." 0292 DW 0A0DH 0293 DB 0 0294 * 0295 MSG2 ASC "32KRA TEST IN PROGRESS" 0296 DW 0A0DH 0297 DB 0 0298 * 0299 *** VECTORS TO SOLOS/CUTER *** 0300 * 0301 RTRN DB 0C3H JMP OP. CODE 0302 RTRN1 DS 2 RETURN ADDRESS GOES HERE 0303 SOUT DB 0C3H JMP OP. CODE 0304 SOUT1 DS 2 OUTPUT ADDRESS GOES HERE 0305 SINP DB 0C3H JMP OP. CODE 0306 SINP1 DS 2 INPUT ADDRESS GOES HERE 0307 * 0308 * **** SCRATCH PAD AREA **** 0309 * 0310 CFLAG DS 1 IF CONTINUOUS MODE = 0, ELSE 1 0311 BDADR DS 2 TEST BOARD ADDRESS 0312 BITS EQU $ ERROR MAP FOLLOWS 0313 ROW1 DS 2 ERROR LOG FOR TOP ROW 0314 ROW2 DS 2 ERROR LOG FOR BOTTOM ROW 0315 PAGE DS 1 CURRENT PAGE 0316 FILL DS 1 STATIC TEST BYTE 0317 * 0318 *** END OF 32KRA TEST ***