0001 *** TEST FOR 48K OF MEMORY (0 -> BFFFH) *** 0002 * 48K 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,2 TWO 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,2 TWO 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 3 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 PAGE 1 & 2 RESULTS 0123 CALL LINE DISPLAY PAGE 1 0124 MOV L,H 0125 CALL LINE DISPLAY PAGE 2 0126 * 0127 LHLD ROW2 PAGE 3 RESULTS 0128 CALL LINE DISPLAY PAGE 3 0131 RET . MAP COMPLETE 0132 * 0133 LINE EQU $ **** LINE **** 0134 MVI D,4 # OF BIT PAIRS 0135 * 0136 PAIR MOV A,L A=RESULTS 0137 RAR . CARRY MEANS CHIP HAD ERRORS 0138 MOV L,A REMAINING BITS GO BACK 0139 CALL CHIP DISPLAY FIRST BIT OF PAIR 0140 * 0141 MOV A,L A=RESULTS 0142 RAR . TEST BIT, CARRY IS N.G. 0143 MOV L,A RETURN THE REST 0144 CALL CHIP DISPLAY 2ND. BIT OF PAIR 0145 * 0146 CALL SPAC1 FOR READABILITY 0147 DCR D LINE DONE? 0148 JNZ PAIR NO 0149 * 0150 CALL CRLF LINE IS DONE 0151 RET . RETURN 0152 * 0153 SPAC1 EQU $ **** SPACE **** 0154 MVI A,' ' WRITE A SPACE 0155 JMP MARK1 0156 * 0157 CHIP EQU $ **** CHIP **** 0158 MVI A,'G' MARK CHIP 'G' 0159 JNC MARK1 IT'S OK, ELSE 0160 MVI A,'X' MARK CHIP 'X' 0161 * 0162 MARK1 CALL PUT OUTPUT MARK 0163 CMP A CLEAR CARRY BIT 0164 RET . RETURN 0165 * 0166 STRNG EQU $ **** STRING **** 0167 MOV A,M GET CHARACTER FROM STRING 0168 INX H BUMP STRING POINTER 0169 CPI 0 IS IT END MARK ? 0170 RZ . YES, END OF STRING 0171 CALL PUT NO, OUTPUT CHARACTER 0172 JMP STRNG CONTINUE 0173 * 0174 PUT EQU $ **** OUTPUT ROUTINE **** 0175 PUSH H SAVE IT 0176 MOV B,A CHAR. TO REG. B 0177 CALL SOUT SOLOS/CUTER OUTPUT 0178 POP H RESTORE IT 0179 RET 0180 * 0181 GET EQU $ **** INPUT ROUTINE **** 0182 CALL SINP CHECK FOR CHAR. 0183 JZ GET NONE YET 0184 ANI 7FH NO PARITY ! 0185 RET 0186 * 0187 CRLF EQU $ **** DO CR AND LF **** 0188 MVI A,0DH 0189 CALL PUT DO CR 0190 MVI A,0AH 0191 CALL PUT DO LF 0192 RET 0193 * 0194 NXTPG EQU $ **** NEXT PAGE **** 0195 PUSH PSW SAVE 0196 CALL SINP CHECK FOR 'ESCAPE' KEY 0197 CPI 1BH 0198 JZ RTRN TO SOLOS/CUTER IF FOUND 0199 * 0200 LDA PAGE GET CURRENT PAGE NUMBER 0201 ADI 40H ADD 16K 0202 CPI 0C0H PAST 3RD. PAGE ? 0202 JNZ NXTP1 NOT YET 0202 * 0202 XRA A YES. BACK TO PAGE 0 0202 * 0203 NXTP1 STA PAGE SAVE 0204 POP PSW RESTORE 0205 RET . AND RETURN 0206 * 0207 GETPG EQU $ **** GET PAGE **** 0208 PUSH PSW SAVE 0209 LDA PAGE GET PAGE NUMBER 0210 LHLD BDADR BOARD ADDRESS 0211 ADD H ADD PAGE # 0212 MOV H,A SET PAGE ADDRESS 0213 POP PSW RESTORE 0214 RET . RETURN 0215 * 0216 TEST EQU $ **** TEST **** 0217 CALL WRITE WRITE TEST PATTERN 0218 CALL READ AND READ IT BACK 0219 CALL NXTPG BUMP PAGE POINTER 0220 RET . THEN RETURN 0221 * 0222 WRITE EQU $ **** WRITE **** 0223 PUSH PSW SAVE 0224 CALL GETPG GET PROPER HL 0225 MVI D,40H COUNT 16K 0226 * 0227 WRIT1 EQU $ **** WRITE 1 **** 0228 PUSH PSW SAVE WORKING PATTERN 0229 MOV M,A TRY TO STORE 0230 XRA M IS DATA GOOD? 0231 CNZ BITER RECORD BIT IF NOT 0232 POP PSW RESTORE PATTERN 0233 RAL . PERMUTE 0234 INR L BUMP STORAGE ADDRESS 0235 JNZ WRIT1 0236 INR H BUMP BY 256 0237 DCR D ENOUGH FOR 16K ? 0238 JNZ WRIT1 NOPE 0239 POP PSW RESTORE 0240 RET . AND RETURN 0241 * 0242 READ EQU $ **** READ **** 0243 PUSH PSW SAVE 0244 CALL GETPG GET PROPER HL 0245 MVI D,40H COUNT 16K 0246 * 0247 READ1 EQU $ **** READ 1 **** 0248 PUSH PSW SAVE WORKING PATTERN 0249 XRA M IS DATA STILL GOOD ? 0250 CNZ BITER ACCUMULATE ERRORS 0251 POP PSW RESTORE PATTERN 0252 RAL . PERMUTE 0253 INR L BUMP STORAGE ADDRESS 0254 JNZ READ1 0255 INR H BUMP BY 256 0256 DCR D ENOUGH FOR 16K ? 0257 JNZ READ1 0258 POP PSW RESTORE 0259 RET . AND RETURN 0260 * 0261 BITER EQU $ **** BIT ERROR **** 0262 PUSH H SAVE TEST ADDRESS 0263 MOV B,A ERROR DATA 0264 * 0265 LDA PAGE GET CURRENT PAGE 0266 RLC . SHIFT TO 0267 RLC . LOW ORDER 2 BITS 0270 * 0271 LXI H,BITS ERROR LOG ADDRESS 0272 ADD L DISPLACE BY PAGE # 0273 MOV L,A 0274 MOV A,M GET ACCUMULATED ERRORS 0275 ORA B ADD NEW ONES 0276 MOV M,A AND PUT IN LOG 0277 * 0278 POP H RESTORE TEST ADDRESS 0279 RET . AND RETURN TO TEST 0280 * 0281 MSG1 DB 0BH CLEAR SCREEN 0282 ASC " TEST FOR 48K OF MEMORY" 0283 DW 0A0DH 0284 ASC "COPYRIGHT (C) 1978, PROCESSOR TECHNOLOGY CORP." 0285 DW 0A0DH 0286 DW 0A0DH 0287 ASC "TYPE 'C' TO RUN CONTINUOUSLY AND ACCUMULATE " 0288 ASC "ERRORS." 0289 DW 0A0DH 0290 ASC "STRIKE ANY OTHER KEY TO RUN ONE PASS." 0291 DW 0A0DH 0292 DB 0 0293 * 0294 MSG2 ASC "48K MEMORY TEST IN PROGRESS" 0295 DW 0A0DH 0296 DB 0 0297 * 0298 *** VECTORS TO SOLOS/CUTER *** 0299 * 0300 RTRN DB 0C3H JMP OP. CODE 0301 RTRN1 DS 2 RETURN ADDRESS GOES HERE 0302 SOUT DB 0C3H JMP OP. CODE 0303 SOUT1 DS 2 OUTPUT ADDRESS GOES HERE 0304 SINP DB 0C3H JMP OP. CODE 0305 SINP1 DS 2 INPUT ADDRESS GOES HERE 0306 * 0307 * **** SCRATCH PAD AREA **** 0308 * 0309 CFLAG DS 1 IF CONTINUOUS MODE = 0, ELSE 1 0310 BDADR DS 2 TEST BOARD ADDRESS 0311 BITS EQU $ ERROR MAP FOLLOWS 0312 ROW1 DS 2 ERROR LOG FOR TOP ROW 0313 ROW2 DS 2 ERROR LOG FOR BOTTOM ROW 0314 PAGE DS 1 CURRENT PAGE 0315 FILL DS 1 STATIC TEST BYTE 0316 * 0317 *** END OF 48K MEMORY TEST ***