1000 *** PROCESSOR TECHNOLOGY 16KRA TEST *** 1001 * 16KRA 1.0 (MOD 0) 1002 * 1004 * COPYRIGHT 1977 1006 * PROCESSOR TECHNOLOGY CORP. 1007 * ALL RIGHTS RESERVED 1008 * 1010 * THIS VERSION OF THE 16KRA TEST IS WRITTEN 1012 * TO BE LOADED INTO RAM AT ADDRESS 0000 . 1014 * 1016 * THE 16KRA TO BE TESTED MUST BE AT ADDRESS 1018 * 1000 HEX. AS A CONTIGUOUS BLOCK OF 16K. 1020 * 1022 * THE TEST MAY BE TERMINATED AT ANY TIME BY 1024 * HITTING THE ESCAPE KEY ON THE KEYBOARD. 1026 * 1028 * THIS PROGRAM USES SOLOS OR CUTER FOR I/O 1030 * IT MUST BE MODIFIED IF OTHER OPERATING 1032 * SYSTEMS ARE USED. 1034 * 1036 * 1038 * 1039 ORG 0 1040 XEQ 0C004H 1041 INIT EQU $ **** INITIALIZATION **** 1042 SHLD IOADR SAVE CALLER'S I/O TABLE ADDRESS 1044 LXI H,0 CLEAR WORKING STORAGE 1046 SHLD COUNT 1048 SHLD ROW1 1050 SHLD ROW2 1052 * 1054 MVI H,10H 1056 SHLD BDADR 1058 SUB A 1060 STA PAGE PAGE NUMBER 1062 STA FILL STATIC TEST FILLER 1064 * 1066 MAIN EQU $ **** MAIN **** 1068 LDA FILL FILL STATIC TEST PAGE 1069 RLC 1070 CALL WRITE 1072 SUB A START WITH 1 BIT PATTERN 1074 STC . CARRY HAS THE BIT 1076 * 1078 LOOP1 EQU $ **** LOOP 1 **** 1080 PUSH PSW SAVE MASTER PATTERN 1082 CALL NXTPG GO PAST STATIC TEST PAGE 1084 MVI E,3 TEST NEXT 3 PAGES 1086 * 1088 TEST1 EQU $ **** TEST 1 **** 1090 CALL TEST TEST PAGE 1092 DCR E 3 PAGES TESTED? 1094 JNZ TEST1 NO, DO NEXT ONE 1096 * 1098 LDA FILL CHECK STATIC TEST PAGE 1099 RLC 1100 CALL READ FOR DROPPED BITS 1102 * 1104 POP PSW RESTORE MASTER PATTERN 1106 RAR . PERMUTE 1108 JNC LOOP1 REPEAT UNTIL CARRY COMES AROUND 1110 * 1112 CMP A CLEAR CARRY 1114 MVI A,0FFH 7 BIT PATTERN 1116 * 1118 LOOP2 EQU $ **** LOOP 2 **** 1120 PUSH PSW SAVE MASTER PATTERN 1122 CALL NXTPG SKIP PAST STATIC TEST PAGE 1124 MVI E,3 TEST REMAINING 3 PAGES 1126 * 1128 TEST2 EQU $ 1130 CALL TEST TEST PAGE 1132 DCR E 3 PAGES TESTED? 1134 JNZ TEST2 NO, DO NEXT ONE 1136 * 1138 LDA FILL CHECK STATIC TEST PAGE 1139 RLC 1140 CALL READ FOR DROPPED BITS 1142 * 1144 POP PSW RESTORE MASTER PATTERN 1146 RAR . PERMUTE 1148 JC LOOP2 REPEAT UNTIL CARRY COMES AROUND 1150 * 1152 CALL NXTPG REPEAT ENTIRE TEST 1154 LDA PAGE STARTING WITH 1156 ORA A NEXT PAGE IF WE HAVEN'T 1158 JNZ MAIN BEEN AROUND 4 TIMES ALREADY 1160 * 1162 LDA FILL INVERT FILLER 1164 CMA . 1166 STA FILL AND TEST AGAIN 1168 ORA A WITH COMPLIMENT 1170 JNZ MAIN UNLESS ALREADY DONE 1172 * 1174 CALL MAP OUTPUT CHIP MAP 1176 LXI H,CMPLT 'COMPLETED' 1178 CALL STRNG OUTPUT LINE 1180 JMP MAIN AND CONTINUE TEST 1182 * 1184 MAP EQU $ **** MAP **** 1186 CALL CRLF 1188 LHLD ROW1 DISPLAY CHIPS IN ROW 1 1190 CALL LINE FORMAT THE LINE 1192 LHLD ROW2 DISPLAY CHIPS IN ROW 2 1194 CALL LINE FORMAT THE LINE 1196 RET . RETURN 1198 * 1200 LINE EQU $ **** LINE **** 1202 MVI D,4 # OF BITS PER QUADRANT 1204 MVI E,2 # OF ROWS 1206 * 1208 QUAD EQU $ **** QUAD **** 1210 MOV A,L PAGE 0 OR 2 1212 RAR . CARRY MEANS CHIP HAD ERRORS 1214 MOV L,A REMAINING BITS GO BACK 1216 CALL CHIP DISPLAY CHIP STATUS 1218 * 1220 MOV A,H PAGE 1 OR 3 1222 RAR . TEST BIT, CARRY IS N.G. 1224 MOV H,A RETURN THE REST 1226 CALL CHIP DISPLAY CHIP STATUS 1228 * 1230 CALL SPACE FOR READABILITY 1232 DCR D QUADRANT DONE? 1234 JNZ QUAD NO 1236 * 1238 MVI D,4 YES, RESTORE CHIP COUNT 1240 CALL SPACE SEPARATE QUADRANTS 1242 DCR E IS LINE DONE? 1244 JNZ QUAD NO, FORMAT OTHER QUADRANT 1246 CALL CRLF LINE IS DONE 1248 RET . RETURN 1250 * 1252 SPACE EQU $ **** SPACE **** 1254 MVI A,' ' WRITE A SPACE 1256 JMP MARK 1258 * 1260 CHIP EQU $ **** CHIP **** 1262 MVI A,'G' MARK CHIP 'G' 1264 JNC MARK IT'S OK, ELSE 1266 MVI A,'X' MARK CHIP 'X' 1268 * 1270 MARK CALL PUT OUTPUT MARK 1272 CMP A CLEAR CARRY BIT 1274 RET . RETURN 1276 * 1278 CRLF EQU $ **** CRLF **** 1280 MVI A,0DH OUTPUT CARRIAGE RETURN 1282 CALL PUT 1284 MVI A,0AH FOLLOWED BY A LINE FEED 1286 CALL PUT 1288 RET . AND RETURN 1290 * 1292 PUT EQU $ **** PUT **** 1294 PUSH H SAVE 1296 LXI B,SOUT OUTPUT ROUTINE JUMP LOCATION 1298 LHLD IOADR ADDRESS OF 'CUTER'/'SOLOS' 1300 DAD B FORM TRUE ADDRESS 1302 MOV B,A CHARACTER TO O/P IN B 1304 XTHL . RESTORE H 1306 RET . DESTINATION IS ON TOP OF STACK 1308 * 1310 GET EQU $ **** GET **** 1312 LXI B,CHECK RETURN ADDRESS 1314 PUSH B PUT ON STACK 1316 PUSH H SAVE 1318 LXI B,SINP INPUT ROUTINE JUMP LOCATION 1320 LHLD IOADR ADDRESS OF 'CUTER'/'SOLOS' 1322 DAD B FORM TRUE ADDRESS 1324 XTHL . RESTORE H 1326 RET . DESTINATION IS TOS, RETURNS TO CHECK 1328 * 1330 CHECK EQU $ **** CHECK **** 1332 CPI 1BH ESCAPE KEY? 1334 RNZ . NO, CONTINUE TESTING 1336 * 1338 ABORT EQU $ **** ABORT **** 1340 CALL MAP OUTPUT WHAT WE'VE GOT SO FAR 1342 LXI H,TERM 'ABORTED' 1344 CALL STRNG OUTPUT LINE 1346 LHLD IOADR ADDRESS OF 'SOLOS'/'CUTER' 1348 INX H BUMP TO RETURN TO COMMAND PROCESSOR 1350 INX H 1352 INX H 1354 INX H 1356 PCHL . EXIT TO OUR CALLER 1358 * 1360 STRNG EQU $ **** STRING **** 1362 MOV A,M GET CHARACTER FROM STRING 1364 INX H BUMP STRING POINTER 1366 CPI 0DH IS IT CR? 1368 JZ CRLF YES, END OF STRING 1370 CALL PUT NO, OUTPUT CHARACTER 1372 JMP STRNG CONTINUE 1374 * 1376 NXTPG EQU $ **** NEXT PAGE **** 1378 PUSH PSW SAVE 1380 CALL GET LOOK FOR 'ESCAPE' KEY 1382 LDA PAGE GET CURRENT PAGE NUMBER 1384 ADI 10H ADD 4K 1386 ANI 30H WRAP AROUND 1388 STA PAGE SAVE 1390 POP PSW RESTORE 1392 RET . AND RETURN 1394 * 1396 GETPG EQU $ **** GET PAGE **** 1398 PUSH PSW SAVE 1400 LDA PAGE GET PAGE NUMBER 1402 LHLD BDADR BOARD ADDRESS 1404 ADD H ADD PAGE # 1406 MOV H,A SET PAGE ADDRESS 1408 POP PSW RESTORE 1410 RET . RETURN 1412 * 1414 TEST EQU $ **** TEST **** 1416 CALL WRITE WRITE TEST PATTERN 1418 CALL READ AND READ IT BACK 1420 CALL NXTPG BUMP PASE POINTER 1422 RET . THEN RETURN 1424 * 1426 WRITE EQU $ **** WRITE **** 1428 PUSH PSW SAVE 1430 CALL GETPG GET PROPER HL 1432 MVI D,10H COUNT 4K 1434 * 1436 WRIT1 EQU $ **** WRITE 1 **** 1438 PUSH PSW SAVE WORKING PATTERN 1440 MOV M,A TRY TO STORE 1442 XRA M IS DATA GOOD? 1444 CNZ BITER RECORD BIT IF NOT 1446 POP PSW RESTORE PATTERN 1448 RAL . PERMUTE 1450 INR L BUMP STORAGE ADDRESS 1452 JNZ WRIT1 1454 INR H BUMP BY 256 1456 DCR D ENOUGH FOR 4K 1458 JNZ WRIT1 1460 POP PSW RESTORE 1462 RET . AND RETURN 1464 * 1466 READ EQU $ **** READ **** 1468 PUSH PSW SAVE 1470 CALL GETPG GET PROPER HL 1472 MVI D,10H COUNT 4K 1474 * 1476 READ1 EQU $ **** READ 1 **** 1478 PUSH PSW SAVE WORKING PATTERN 1480 XRA M IS DATA STILL GOOD ? 1482 CNZ BITER ACCUMULATE ERRORS 1484 POP PSW RESTORE PATTERN 1486 RAL . PERMUTE 1488 INR L BUMP STORAGE ADDRESS 1490 JNZ READ1 1492 INR H BUMP BY 256 1494 DCR D ENOUGH FOR 4K 1496 JNZ READ1 1498 POP PSW RESTORE 1500 RET . AND RETURN 1502 * 1504 BITER EQU $ **** BIT ERROR **** 1506 PUSH H SAVE REGS 1508 MOV B,A ERROR BIT 1510 LXI H,BITS ERROR BIT TABLE 1512 LDA PAGE GET CURRENT PAGE 1514 RLC . SHIFT TO 1516 RLC . LOW ORDER 1518 RLC . TWO BITS 1520 RLC . 1522 ADD L DISPLACE BY PAGE # 1524 MOV L,A INTO BIT TABLE 1526 MOV A,M GET BITS ACCUMULATED SO FAR 1528 ORA B ADD NEW ONES 1530 MOV M,A AND PUT IN TABLE 1532 * 1534 LHLD COUNT ERROR COUNT 1536 INX H BUMP 1538 SHLD COUNT 1540 MOV A,H HAS COUNT 1542 ORA L GONE AROUND TO 0? 1544 JZ ABORT YES, TERMINATE TEST 1546 POP H RESTORE 1548 RET . AND RETURN TO TEST 1550 * 1552 CMPLT ASC 'COMPLETED' 1554 DB 0DH 1556 TERM ASC 'ABORTED' 1558 DB 0DH 1560 * 1562 SOUT EQU 19H DISPLACEMENT TO JUMP 1564 SINP EQU 1FH DISPLACEMENT TO JUMP 1566 * 1568 RAM EQU $ DEFINE WRITABLE STORAGE AREA 1570 * 1572 IOADR DS 2 ADDRESS OF CALLER'S JUMP TABLE 1574 BDADR DS 2 ADDRESS OF 16KRA UNDER TEST 1576 COUNT DS 2 ERROR COUNT 1578 BITS EQU $ CHIP MAP, MUST NOT CROSS 256 BYTE BOUNDRY 1580 ROW1 DS 2 BIT MAP FOR BITS IN ROW 1 1582 ROW2 DS 2 BIT MAP FOR BITS IN ROW 2 1584 PAGE DS 1 CURRENT PAGE 1586 FILL DS 1 STATIC TEST BYTE 1588 END 1590 * V4E7M77 16K.S