0001 = conin equ 01h ;character in 0002 = conout equ 02h ;character out 0000 = boot equ 0 ;Restart 0005 = bdos equ 05 ;entry point 0001 = passes equ 1 ;# of passes to run 000D = acr equ 0dh ;carriage return 000A = alf equ 0ah ;line feed 0000 = base1 equ 0 ;Switchboard under test base address 0008 = base2 equ 8h ;Test fixture (swbd) base address 0008 = tbre1 equ 8h ;tbre flag for port 1 0080 = tbre2 equ 80h ;tbre flag for port 2 0004 = dr1 equ 4h ;data ready flag port 1 0040 = dr2 equ 40h ;data ready flag port 2 00FF = endpat equ 0ffh ;resets strobe pattern E3F9 = djustat equ 0e3f9h ;DJII Uart Status 0004 = djdr equ 04h ;DJII Data Ready *************************************************************** * * This program requires two switchboards connected with special * connectors. The program then tests all functions of the board * under test except the 20 ma. current loop. * *************************************************************** 0100 org 100h 0100 318B08 start lxi sp,stack 0103 114504 lxi d,inq 0106 CDFC01 call pbuff 0109 CD0102 call charin 010C FE3F cpi '?' 010E C21A01 jnz goon 0111 116304 lxi d,strtmsg ;Board set-up instructions 0114 CDFC01 call pbuff ;send 0117 CD0102 call charin ;wait for carriage return 011A DB00 goon in 0 ;clear UARTs 011C DB01 in 1 011E DB08 in 10q 0120 DB09 in 11q 0122 216408 test lxi h,testpat 0125 7E mov a,m ;load test pattern 0126 FE81 cpi 81h ;test for last pattern 0128 CA3D01 jz nxtpass ;if so, increment pass counter 012B E5 push h 012C CD0F02 call oport ;Parrallel port 1 is address 4 012F CD4B02 call iport ;should be the same data 0132 E1 pop h 0133 BE cmp m 0134 E5 push h 0135 C41004 cnz errmsg ;prints error bit pattern 0138 E1 pop h 0139 23 inx h ;next pattern 013A C32501 jmp test+3 013D 3A5F08 nxtpass lda passcnt 0140 3C inr a 0141 FE01 cpi passes 0143 325F08 sta passcnt 0146 C22201 jnz test ;reset pattern 0149 3E01 mvi a,1 014B 325F08 sta passcnt 014E 3A6008 nxprt lda port ;move to next port 0151 3C inr a 0152 326008 sta port 0155 FE02 cpi 2 ;skip status & strobe ports for now 0157 C25F01 jnz not2 015A C602 adi 2 015C 326008 sta port 015F FE08 not2 cpi 10q 0161 C27001 jnz not10 0164 11E206 lxi d,togmsg ;reverse direction on pll ports 0167 CDFC01 call pbuff 016A CD0102 call charin ;wait for operator response 016D C32201 jmp test 0170 FE0A not10 cpi 12q 0172 C27A01 jnz cont 0175 C602 adi 2 ;skip status & strobe ports 0177 326008 sta port 017A FE10 cont cpi 20q 017C C22201 jnz test 017F C3E402 jmp strbtst P0182 E5 errmsg push h 0183 326108 sta error ;save wrong data 0186 113C06 lxi d,passmsg 0189 CDFC01 call pbuff 018C 3A5F08 lda passcnt 018F CD1C04 call putadc ;prints ascii from binary 0192 3A6602 lda ip 0195 326308 sta temp2 0198 FE08 cpi 10q ;drop base bit and specify Board 2 019A FAA801 jm norml 019D E607 ani 7q 019F 326308 sta temp2 01A2 114B06 lxi d,brdmsg 01A5 CDFC01 call pbuff 01A8 114406 norml lxi d,portmsg 01AB CDFC01 call pbuff 01AE 3A6308 lda temp2 01B1 CD1C04 call putadc 01B4 115506 lxi d,shldbe 01B7 CDFC01 call pbuff 01BA E1 pop h 01BB 7E mov a,m 01BC E5 push h 01BD CDCE01 call bitout ;print test bit pattern 01C0 116106 lxi d,was 01C3 CDFC01 call pbuff 01C6 3A6108 lda error ;erroneous pattern 01C9 CDCE01 call bitout 01CC E1 pop h 01CD C9 ret 01CE 0608 bitout mvi b,8 ;bit counter 01D0 326208 sta temp 01D3 C5 push b 01D4 3A6208 loop lda temp ;pickup byte to transmit 01D7 07 rlc ;first bit 01D8 326208 sta temp 01DB DAED01 jc on ;if on 01DE 0E02 mvi c,conout 01E0 1E30 mvi e,'0' ;if off 01E2 CD0500 call bdos ;Print character 01E5 C1 pop b 01E6 05 dcr b ;decrement bit counter 01E7 C5 push b 01E8 C2D401 jnz loop ;next bit 01EB C1 pop b 01EC C9 ret 01ED 1E31 on mvi e,'1' ;on bit 01EF 0E02 mvi c,conout 01F1 CD0500 call bdos ;Print character 01F4 C1 pop b 01F5 05 dcr b ;decrement bit counter 01F6 C5 push b 01F7 C2D401 jnz loop ;next bit 01FA C1 pop b 01FB C9 ret 01FC 0E09 pbuff mvi c,9 01FE C30500 jmp bdos 0201 0E01 charin mvi c,1 0203 C30500 jmp bdos 0206 11D206 exit lxi d,endmsg 0209 CDFC01 call pbuff 020C C30000 jmp boot 020F F5 oport push psw ;adjust port value & do status tests 0210 3A6008 lda port ;on serial ports 0213 322A02 sta op 0216 FE01 cpi 1 0218 CA2C02 jz if1out 021B FA3B02 jm if0out 021E FE08 cpi 10q 0220 CA3B02 jz if0out 0223 FE09 cpi 11q 0225 CA2C02 jz if1out 0228 F1 pop psw 0229 D300 out 0 022A = op equ $-1 022B C9 ret 022C 3C if1out inr a 022D 326602 sta ip 0230 CD6502 anitb2 call ip-1 0233 E680 ani tbre2 0235 CA3002 jz anitb2 0238 C32802 rcvd2 jmp op-2 023B C602 if0out adi 2 023D 326602 sta ip 0240 CD6502 anitb1 call ip-1 0243 E608 ani tbre1 0245 CA4002 jz anitb1 0248 C32802 jmp op-2 024B 3A6008 iport lda port ;same procedure as for oport 024E EE08 xri 8h ;except base is opposite from oport 0250 FE01 cpi 1 0252 CA8A02 jz if1in 0255 FA6802 jm if0in 0258 FE08 cpi 10q 025A CA6802 jz if0in 025D FE09 cpi 11q 025F CA8A02 jz if1in 0262 326602 sta ip 0265 DB00 in 0 0266 = ip equ $-1 0267 C9 ret 0268 C602 if0in adi 2 026A 326602 sta ip 026D 0E0B anidr1 mvi c,0bh 026F CD0500 call bdos 0272 FE00 cpi 0 0274 C4AA02 cnz nodr 0277 CD6502 call ip-1 027A E604 ani dr1 027C CA6D02 jz anidr1 027F 3A6602 data lda ip 0282 DE02 sbi 2 0284 326602 sta ip 0287 C36502 jmp ip-1 028A 3C if1in inr a 028B 326602 sta ip 028E 0E0B anidr2 mvi c,0bh 0290 CD0500 call bdos 0293 FE00 cpi 0 0295 C4AA02 cnz nodr 0298 CD6502 call ip-1 029B E640 ani dr2 029D CA8E02 jz anidr2 02A0 3A6602 data2 lda ip 02A3 3D dcr a 02A4 326602 sta ip 02A7 C36502 jmp ip-1 02AA 113C06 nodr lxi d,passmsg ;prints pass & port if any key hit 02AD CDFC01 call pbuff 02B0 3A5F08 lda passcnt 02B3 CD1C04 call putadc 02B6 3A6008 lda port 02B9 EE08 xri 8h 02BB FE08 cpi 8 02BD 326308 sta temp2 02C0 FACE02 jm okasis 02C3 E607 ani 7 02C5 326308 sta temp2 02C8 114B06 lxi d,brdmsg 02CB CDFC01 call pbuff 02CE 114406 okasis lxi d,portmsg 02D1 CDFC01 call pbuff 02D4 3A6308 lda temp2 02D7 CD1C04 call putadc 02DA 113A06 lxi d,nodrmsg 02DD CDFC01 call pbuff 02E0 CD0102 call charin 02E3 C9 ret ******************************************************************** 02E4 110D07 strbtst LXI D,M0 02E7 CDFC01 CALL PBUFF 02EA 3E07 LP0 MVI A,7 02EC D30B OUT 13Q 02EE DB03 IN 3 02F0 E601 ANI 1 02F2 CC1004 CZ ERRMSG 02F5 DB04 IN 4 02F7 DB03 IN 3 02F9 E601 ANI 1 02FB C41004 CNZ ERRMSG 02FE 3AF9E3 LDA DJUSTAT 0301 E604 ANI DJDR 0303 C2EA02 JNZ LP0 0306 116607 LXI D,M1 0309 CDFC01 CALL PBUFF 030C 3E01 LP1 MVI A,1 030E D30B OUT 13Q 0310 DB03 IN 3 0312 E602 ANI 2 0314 CC1004 CZ ERRMSG 0317 DB05 IN 5 0319 DB03 IN 3 031B E602 ANI 2 031D C41004 CNZ ERRMSG 0320 3AF9E3 LDA DJUSTAT 0323 E604 ANI DJDR 0325 C20C03 JNZ LP1 0328 119707 LXI D,M2 032B CDFC01 CALL PBUFF 032E 3E03 LP2 MVI A,3 0330 D30B OUT 13Q 0332 DB03 IN 3 0334 E604 ANI 4 0336 CC1004 CZ ERRMSG 0339 DB06 IN 6 033B DB03 IN 3 033D E604 ANI 4 033F C41004 CNZ ERRMSG 0342 3AF9E3 LDA DJUSTAT 0345 E604 ANI DJDR 0347 C22E03 JNZ LP2 034A 11C807 LXI D,M3 034D CDFC01 CALL PBUFF 0350 3E05 LP3 MVI A,5 0352 D30B OUT 13Q 0354 DB03 IN 3 0356 E608 ANI 8H 0358 CC1004 CZ ERRMSG 035B DB07 IN 7 035D DB03 IN 3 035F E608 ANI 8H 0361 C41004 CNZ ERRMSG 0364 3AF9E3 LDA DJUSTAT 0367 E604 ANI DJDR 0369 C25003 JNZ LP3 036C 11F907 LXI D,M4 036F CDFC01 CALL PBUFF 0372 3E07 LP4 MVI A,7 0374 D303 OUT 3 0376 DB0B IN 13Q 0378 E601 ANI 1 037A CC1004 CZ ERRMSG 037D DB0C IN 14Q 037F DB0B IN 13Q 0381 E601 ANI 1 0383 C41004 CNZ ERRMSG U0386 3A0000 LDA E3F9 0389 E604 ANI 4 038B C27203 JNZ LP4 038E 111208 LXI D,M5 0391 CDFC01 CALL PBUFF 0394 3E01 LP5 MVI A,1 0396 D303 OUT 3 0398 DB0B IN 13Q 039A E602 ANI 2 039C CC1004 CZ ERRMSG 039F DB0D IN 15Q 03A1 DB0B IN 13Q 03A3 E602 ANI 2 03A5 C41004 CNZ ERRMSG U03A8 3A0000 LDA E3F9 03AB E604 ANI 4 03AD C29403 JNZ LP5 03B0 112C08 LXI D,M6 03B3 CDFC01 CALL PBUFF 03B6 3E03 LP6 MVI A,3 03B8 D303 OUT 3 03BA DB0B IN 13Q 03BC E604 ANI 4 03BE CC1004 CZ ERRMSG 03C1 DB0E IN 16Q 03C3 DB0B IN 13Q 03C5 E604 ANI 4 03C7 C41004 CNZ ERRMSG U03CA 3A0000 LDA E3F9 03CD E604 ANI 4 03CF C2B603 JNZ LP6 03D2 114608 LXI D,M7 03D5 CDFC01 CALL PBUFF 03D8 3E05 LP7 MVI A,5 03DA D303 OUT 3 03DC DB0B IN 13Q 03DE E608 ANI 8H 03E0 CC1004 CZ ERRMSG 03E3 DB0F IN 17Q 03E5 DB0B IN 13Q 03E7 E608 ANI 8H 03E9 C41004 CNZ ERRMSG U03EC 3A0000 LDA E3F9 03EF E604 ANI 4 03F1 C2D803 JNZ LP7 03F4 116706 final lxi d,scopemsg ;turn on untested strobes for scope check 03F7 CDFC01 call pbuff 03FA 97 suba sub a 03FB 0604 mvi b,4 03FD D303 outlp out 3 03FF C602 adi 2 0401 05 dcr b 0402 C2FD03 jnz outlp 0405 3AF9E3 lda djustat ;check for keyboard interrupt 0408 E604 ani djdr 040A C2FA03 jnz suba 040D C30602 jmp exit U0410 3A0000 ERRMSG LDA E3F9 0413 E608 ANI 8 0415 C0 RNZ 0416 3E2A MVI A,'*' U0418 320000 STA E3F8 041B C9 ret 041C 6F putadc mov l,a 041D 2600 mvi h,0 ***************************************************************** * * * Putdc prints the ascii decimal equivalent of the number in HL * * * ***************************************************************** 041F 01F6FF putdc lxi b,-10 0422 D5 phl push d 0423 50 mov d,b 0424 58 mov e,b 0425 09 phllp dad b 0426 13 inx d 0427 DA2504 jc phllp 042A E3 xthl 042B EB xchg 042C 7C mov a,h 042D B5 ora l 042E C42204 cnz phl 0431 E1 pop h 0432 3E30 mvi a,'0' 0434 85 add l 0435 91 sub c 0436 E5 pchar push h 0437 C5 push b 0438 D5 push d 0439 F5 push psw 043A 5F mov e,a 043B 0E02 mvi c,2 043D CD0500 call bdos 0440 F1 pop psw 0441 D1 pop d 0442 C1 pop b 0443 E1 pop h 0444 C9 ret 0445 0D0A inq db acr,alf 0447 466F722073 db 'For switch settings press ?$' 0463 0D0A strtmsg db acr,alf 0465 426F617264 db 'Board 1 is board being tested. Use 4 MHz CPU.' 0493 2054657374 db ' Test runs 200 passes. ' 04AA 0D0A db acr,alf 04AC 426F617264 db 'Board 1: SW1 1-8 OFF 8bits,2stop,noparity' 04D5 0D0A db acr,alf 04D7 0920205357 db ' SW2 1-8 OFF 19,200 baud' 04F1 0D0A db acr,alf 04F3 0920205357 db ' SW3 1-8 ON positive strobes' 0512 0D0A db acr,alf 0514 0920205357 db ' SW4 1-4 ON parallel ports OUT' 0535 0D0A db acr,alf 0537 0920202020 db ' 5-8 OFF positive trigger ATTN' 055B 0D0A db acr,alf 055D 0920205357 db ' SW5 1 OFF Phantom disable' 057A 0D0A db acr,alf 057C 0920202020 db ' 2-8 ON Base 0, Rom/Ram disable' 05A2 0D0A db acr,alf 05A4 0920205357 db ' SW6 Does Not Matter - Memory Addresses' 05CD 0D0A db acr,alf 05CF 426F617264 db 'Board 2: Same as Board 1 EXCEPT:' 05EF 0D0A db acr,alf 05F1 0920205357 db ' SW4 1-4 OFF Parallel ports IN' 0612 0D0A db acr,alf 0614 0920205357 db ' SW5 3 OFF Base 10Q press RETURN$' 063A 20 nodrmsg db ' ' 063B 24 db '$' 063C 0D0A passmsg db acr,alf 063E 5061737320 db 'Pass $' 0644 20506F7274portmsg db ' Port $' 064B 20626F6172brdmsg db ' board 2 $' 0655 2073686F75shldbe db ' should be $' 0661 2077617320was db ' was $' 0667 0D0A scopemsg db acr,alf 0669 5769746820 db 'With Oscilloscope check Pins 13 & 15' 068D 206F6E204A db ' on J1 & J2, Board 1 for Positive Strobe' 06B5 0D0A db acr,alf 06B7 5072657373 db 'Press RETURN when finished$' 06D2 0D0A endmsg db acr,alf 06D4 5465737420 db 'Test Complete$' 06E2 0D0A togmsg db acr,alf 06E4 546F67676C db 'Toggle SW4 1-4 both boards, press return$' 070D 0D0A M0 DB ACR,ALF 070F 4153544552 DB 'ASTERISKS INDICATE SET OR RESET ERRORS' 0735 0D0A0A DB ACR,ALF,ALF 0738 5445535449 DB 'TESTING J2-17 IC13B-1 STATUS BIT 0 IC10D-18 $' 0766 0D0A0A M1 DB ACR,ALF,ALF 0769 5445535449 DB 'TESTING J1-19 IC13B-13 STATUS BIT 1 IC10D-16 $' 0797 0D0A0A M2 DB ACR,ALF,ALF 079A 5445535449 DB 'TESTING J1-17 IC13B-4 STATUS BIT 2 IC10D-14 $' 07C8 0D0A0A M3 DB ACR,ALF,ALF 07CB 5445535449 DB 'TESTING J2-19 IC13B-10 STATUS BIT 3 IC10D-12 $' 07F9 0D0A0A M4 DB ACR,ALF,ALF 07FC 5445535449 DB 'TESTING J2-9 IC9B-3 $' 0812 0D0A0A M5 DB ACR,ALF,ALF 0815 5445535449 DB 'TESTING J1-11 IC9B-14 $' 082C 0D0A0A M6 DB ACR,ALF,ALF 082F 5445535449 DB 'TESTING J1-9 IC9B-16 $' 0846 0D0A0A M7 DB ACR,ALF,ALF 0849 5445535449 DB 'TESTING J2-11 IC9B-5 $' 085F 01 passcnt db 1 0860 00 port db 0 0861 01 error db 1 0862 01 temp db 1 0863 00 temp2 db 0 0864 00 testpat db 0 0865 AA db 0aah 0866 55 db 55h 0867 CC db 0cch 0868 66 db 66h 0869 33 db 33h 086A 99 db 99h 086B FF db 0ffh 086C 81 db 81h 086D ds 30 088B = stack equ $ 088B end