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 000B = constat equ 0bh ;console status E3F9 = djustat equ 0e3f9h ;DJII Uart Status 0004 = djdr equ 04h ;DJII Data Ready XINT 27H *************************************************************** * * 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 312309 start lxi sp,stack 0103 116704 lxi d,inq 0106 CDFC01 call pbuff 0109 CD0F02 call charin 010C FE3F cpi '?' 010E C21A01 jnz goon 0111 118504 lxi d,strtmsg ;Board set-up instructions 0114 CDFC01 call pbuff ;send 0117 CD0F02 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 21FC08 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 CD1D02 call oport ;Parrallel port 1 is address 4 012F CD5902 call iport ;should be the same data 0132 E1 pop h 0133 BE cmp m 0134 E5 push h 0135 C48201 cnz ermsg ;prints error bit pattern 0138 E1 pop h 0139 23 inx h ;next pattern 013A C32501 jmp test+3 013D 3AF708 nxtpass lda passcnt 0140 3C inr a 0141 FE01 cpi passes 0143 32F708 sta passcnt 0146 C22201 jnz test ;reset pattern 0149 3E01 mvi a,1 014B 32F708 sta passcnt 014E 3AF808 nxprt lda port ;move to next port 0151 3C inr a 0152 32F808 sta port 0155 FE02 cpi 2 ;skip status & strobe ports for now 0157 C25F01 jnz not2 015A C602 adi 2 015C 32F808 sta port 015F FE08 not2 cpi 10q 0161 C27001 jnz not10 0164 113E07 lxi d,togmsg ;reverse direction on pll ports 0167 CDFC01 call pbuff 016A CD0F02 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 32F808 sta port 017A FE10 cont cpi 20q 017C C22201 jnz test 017F C3F202 jmp strbtst 0182 E5 ermsg push h 0183 32F908 sta error ;save wrong data 0186 115E06 lxi d,passmsg 0189 CDFC01 call pbuff 018C 3AF708 lda passcnt 018F CD3E04 call putadc ;prints ascii from binary 0192 3A7402 lda ip 0195 32FB08 sta temp2 0198 FE08 cpi 10q ;drop base bit and specify Board 2 019A FAA801 jm norml 019D E607 ani 7q 019F 32FB08 sta temp2 01A2 116D06 lxi d,brdmsg 01A5 CDFC01 call pbuff 01A8 116606 norml lxi d,portmsg 01AB CDFC01 call pbuff 01AE 3AFB08 lda temp2 01B1 CD3E04 call putadc 01B4 117706 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 118306 lxi d,was 01C3 CDFC01 call pbuff 01C6 3AF908 lda error ;erroneous pattern 01C9 CDCE01 call bitout 01CC E1 pop h 01CD C9 ret 01CE 0608 bitout mvi b,8 ;bit counter 01D0 32FA08 sta temp 01D3 C5 push b 01D4 3AFA08 loop lda temp ;pickup byte to transmit 01D7 07 rlc ;first bit 01D8 32FA08 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 0E0B PBUFF MVI C,CONSTAT 01FE D5 PUSH D 01FF CD0500 CALL BDOS ;CHECK CONSOL STATUS 0202 FE01 CPI 1 0204 0E01 MVI C,CONIN 0206 D1 POP D 0207 CC0500 CZ BDOS ;CLEAR CONSOL INPUT IF NECESSARY 020A 0E09 mvi c,9 020C C30500 jmp bdos 020F 0E01 charin mvi c,1 0211 C30500 jmp bdos 0214 112E07 exit lxi d,endmsg 0217 CDFC01 call pbuff 021A C30000 jmp boot 021D F5 oport push psw ;adjust port value & do status tests 021E 3AF808 lda port ;on serial ports 0221 323802 sta op 0224 FE01 cpi 1 0226 CA3A02 jz if1out 0229 FA4902 jm if0out 022C FE08 cpi 10q 022E CA4902 jz if0out 0231 FE09 cpi 11q 0233 CA3A02 jz if1out 0236 F1 pop psw 0237 D300 out 0 0238 = op equ $-1 0239 C9 ret 023A 3C if1out inr a 023B 327402 sta ip 023E CD7302 anitb2 call ip-1 0241 E680 ani tbre2 0243 CA3E02 jz anitb2 0246 C33602 rcvd2 jmp op-2 0249 C602 if0out adi 2 024B 327402 sta ip 024E CD7302 anitb1 call ip-1 0251 E608 ani tbre1 0253 CA4E02 jz anitb1 0256 C33602 jmp op-2 0259 3AF808 iport lda port ;same procedure as for oport 025C EE08 xri 8h ;except base is opposite from oport 025E FE01 cpi 1 0260 CA9802 jz if1in 0263 FA7602 jm if0in 0266 FE08 cpi 10q 0268 CA7602 jz if0in 026B FE09 cpi 11q 026D CA9802 jz if1in 0270 327402 sta ip 0273 DB00 in 0 0274 = ip equ $-1 0275 C9 ret 0276 C602 if0in adi 2 0278 327402 sta ip 027B 0E0B anidr1 mvi c,0bh 027D CD0500 call bdos 0280 FE00 cpi 0 0282 C4B802 cnz nodr 0285 CD7302 call ip-1 0288 E604 ani dr1 028A CA7B02 jz anidr1 028D 3A7402 data lda ip 0290 DE02 sbi 2 0292 327402 sta ip 0295 C37302 jmp ip-1 0298 3C if1in inr a 0299 327402 sta ip 029C 0E0B anidr2 mvi c,0bh 029E CD0500 call bdos 02A1 FE00 cpi 0 02A3 C4B802 cnz nodr 02A6 CD7302 call ip-1 02A9 E640 ani dr2 02AB CA9C02 jz anidr2 02AE 3A7402 data2 lda ip 02B1 3D dcr a 02B2 327402 sta ip 02B5 C37302 jmp ip-1 02B8 115E06 nodr lxi d,passmsg ;prints pass & port if any key hit 02BB CDFC01 call pbuff 02BE 3AF708 lda passcnt 02C1 CD3E04 call putadc 02C4 3AF808 lda port 02C7 EE08 xri 8h 02C9 FE08 cpi 8 02CB 32FB08 sta temp2 02CE FADC02 jm okasis 02D1 E607 ani 7 02D3 32FB08 sta temp2 02D6 116D06 lxi d,brdmsg 02D9 CDFC01 call pbuff 02DC 116606 okasis lxi d,portmsg 02DF CDFC01 call pbuff 02E2 3AFB08 lda temp2 02E5 CD3E04 call putadc 02E8 115C06 lxi d,nodrmsg 02EB CDFC01 call pbuff 02EE CD0F02 call charin 02F1 C9 ret ******************************************************************** 02F2 116907 strbtst LXI D,M0 02F5 CDFC01 CALL PBUFF 02F8 0601 MVI B,1 02FA 3E07 LP0 MVI A,7 02FC D30B OUT 13Q 02FE DB03 IN 3 0300 E601 ANI 1 0302 CC3204 CZ ERRMSG 0305 DB04 IN 4 0307 DB03 IN 3 0309 E601 ANI 1 030B C43204 CNZ ERRMSG 030E 0E0B MVI C,CONSTAT 0310 CD0500 CALL BDOS ;CHECK FOR CONSOLE CHARACTER 0313 FE01 cpi 1 0315 C2FA02 JNZ LP0 0318 11CC07 LXI D,M1 031B CDFC01 CALL PBUFF 031E 3E01 LP1 MVI A,1 0320 D30B OUT 13Q 0322 DB03 IN 3 0324 E602 ANI 2 0326 CC3204 CZ ERRMSG 0329 DB05 IN 5 032B DB03 IN 3 032D E602 ANI 2 032F C43204 CNZ ERRMSG 0332 0E0B MVI C,CONSTAT 0334 CD0500 CALL BDOS ;CHECK FOR CONSOLE CHARACTER 0337 FE01 cpi 1 0339 C21E03 JNZ LP1 033C 110708 LXI D,M2 033F CDFC01 CALL PBUFF 0342 3E03 LP2 MVI A,3 0344 D30B OUT 13Q 0346 DB03 IN 3 0348 E604 ANI 4 034A CC3204 CZ ERRMSG 034D DB06 IN 6 034F DB03 IN 3 0351 E604 ANI 4 0353 C43204 CNZ ERRMSG 0356 0E0B MVI C,CONSTAT 0358 CD0500 CALL BDOS ;CHECK FOR CONSOLE CHARACTER 035B FE01 cpi 1 035D C24203 JNZ LP2 0360 114208 LXI D,M3 0363 CDFC01 CALL PBUFF 0366 3E05 LP3 MVI A,5 0368 D30B OUT 13Q 036A DB03 IN 3 036C E608 ANI 8H 036E CC3204 CZ ERRMSG 0371 DB07 IN 7 0373 DB03 IN 3 0375 E608 ANI 8H 0377 C43204 CNZ ERRMSG 037A 0E0B MVI C,CONSTAT 037C CD0500 CALL BDOS ;CHECK FOR CONSOLE CHARACTER 037F FE01 cpi 1 0381 C26603 JNZ LP3 0384 117D08 LXI D,M4 0387 CDFC01 CALL PBUFF 038A 3E07 LP4 MVI A,7 038C D303 OUT 3 038E DB0B IN 13Q 0390 E601 ANI 1 0392 CC3204 CZ ERRMSG 0395 DB0C IN 14Q 0397 DB0B IN 13Q 0399 E601 ANI 1 039B C43204 CNZ ERRMSG 039E 0E0B mvi c,constat 03A0 CD0500 call bdos 03A3 FE01 cpi 1 03A5 C28A03 JNZ LP4 03A8 119B08 LXI D,M5 03AB CDFC01 CALL PBUFF 03AE 3E01 LP5 MVI A,1 03B0 D303 OUT 3 03B2 DB0B IN 13Q 03B4 E602 ANI 2 03B6 CC3204 CZ ERRMSG 03B9 DB0D IN 15Q 03BB DB0B IN 13Q 03BD E602 ANI 2 03BF C43204 CNZ ERRMSG 03C2 0E0B mvi c,constat 03C4 CD0500 call bdos 03C7 FE01 cpi 1 03C9 C2AE03 JNZ LP5 03CC 11BA08 LXI D,M6 03CF CDFC01 CALL PBUFF 03D2 3E03 LP6 MVI A,3 03D4 D303 OUT 3 03D6 DB0B IN 13Q 03D8 E604 ANI 4 03DA CC3204 CZ ERRMSG 03DD DB0E IN 16Q 03DF DB0B IN 13Q 03E1 E604 ANI 4 03E3 C43204 CNZ ERRMSG 03E6 0E0B mvi c,constat 03E8 CD0500 call bdos 03EB FE01 cpi 1 03ED C2D203 JNZ LP6 03F0 11D908 LXI D,M7 03F3 CDFC01 CALL PBUFF 03F6 3E05 LP7 MVI A,5 03F8 D303 OUT 3 03FA DB0B IN 13Q 03FC E608 ANI 8H 03FE CC3204 CZ ERRMSG 0401 DB0F IN 17Q 0403 DB0B IN 13Q 0405 E608 ANI 8H 0407 C43204 CNZ ERRMSG 040A 0E0B mvi c,constat 040C CD0500 call bdos 040F FE01 cpi 1 0411 C2F603 JNZ LP7 0414 11C306 final lxi d,scopemsg ;turn on untested strobes for scope check 0417 CDFC01 call pbuff 041A 97 suba sub a 041B 0604 mvi b,4 041D D303 outlp out 3 041F C602 adi 2 0421 05 dcr b 0422 C21D04 jnz outlp 0425 0E0B mvi c,constat 0427 CD0500 call bdos ;check for keyboard interrupt 042A FE01 cpi 1 042C C21A04 jnz suba 042F C31402 jmp exit 0432 05 ERRMSG DCR B 0433 C0 RNZ 0434 1E2A mvi e,'*' 0436 0E02 mvi c,conout 0438 CD0500 call bdos 043B 0600 MVI B,0 043D C9 ret 043E 6F putadc mov l,a 043F 2600 mvi h,0 ***************************************************************** * * * Putdc prints the ascii decimal equivalent of the number in HL * * * ***************************************************************** 0441 01F6FF putdc lxi b,-10 0444 D5 phl push d 0445 50 mov d,b 0446 58 MOV E,B 0447 09 PHLLP DAD B 0448 13 inx d 0449 DA4704 jc phllp 044C E3 xthl 044D EB xchg 044E 7C mov a,h 044F B5 ora l 0450 C44404 cnz phl 0453 E1 pop h 0454 3E30 mvi a,'0' 0456 85 add l 0457 91 sub c 0458 E5 pchar push h 0459 C5 push b 045A D5 push d 045B F5 push psw 045C 5F mov e,a 045D 0E02 mvi c,2 045F CD0500 call bdos 0462 F1 pop psw 0463 D1 pop d 0464 C1 pop b 0465 E1 pop h 0466 C9 ret 0467 0D0A inq db acr,alf 0469 466F722073 db 'For switch settings press ?$' 0485 0D0A strtmsg db acr,alf 0487 426F617264 db 'Board 1 is board being tested. Use 4 MHz CPU.' 04B5 2054657374 db ' Test runs 200 passes. ' 04CC 0D0A db acr,alf 04CE 426F617264 db 'Board 1: SW1 1-8 OFF 8bits,2stop,noparity' 04F7 0D0A db acr,alf 04F9 0920205357 db ' SW2 1-8 OFF 19,200 baud' 0513 0D0A db acr,alf 0515 0920205357 db ' SW3 1-8 ON positive strobes' 0534 0D0A db acr,alf 0536 0920205357 db ' SW4 1-4 ON parallel ports OUT' 0557 0D0A db acr,alf 0559 0920202020 db ' 5-8 OFF positive trigger ATTN' 057D 0D0A db acr,alf 057F 0920205357 db ' SW5 1 OFF Phantom disable' 059C 0D0A db acr,alf 059E 0920202020 db ' 2-8 ON Base 0, Rom/Ram disable' 05C4 0D0A db acr,alf 05C6 0920205357 db ' SW6 Does Not Matter - Memory Addresses' 05EF 0D0A db acr,alf 05F1 426F617264 db 'Board 2: Same as Board 1 EXCEPT:' 0611 0D0A db acr,alf 0613 0920205357 db ' SW4 1-4 OFF Parallel ports IN' 0634 0D0A db acr,alf 0636 0920205357 db ' SW5 3 OFF Base 10Q press RETURN$' 065C 20 nodrmsg db ' ' 065D 24 db '$' 065E 0D0A passmsg db acr,alf 0660 5061737320 db 'Pass $' 0666 20506F7274portmsg db ' Port $' 066D 20626F6172brdmsg db ' board 2 $' 0677 2073686F75shldbe db ' should be $' 0683 2077617320was db ' was $' 0689 2041747465atbitmsg db ' Attention Bit $' 0699 2066726F6Dfmprt db ' from Port $' 06A5 2064696420dintset db ' did not set $' 06B3 2064696420dintrset db ' did not reset $' 06C3 0D0A scopemsg db acr,alf 06C5 5769746820 db 'With Oscilloscope check Pins 13 & 15' 06E9 206F6E204A db ' on J1 & J2, Board 1 for Positive Strobe' 0711 0D0A db acr,alf 0713 5072657373 db 'Press RETURN when finished$' 072E 0D0A endmsg db acr,alf 0730 5465737420 db 'Test Complete$' 073E 0D0A togmsg db acr,alf 0740 546F67676C db 'Toggle SW4 1-4 both boards, press return$' 0769 0D0A M0 DB ACR,ALF 076B 4153544552 DB 'ASTERISKS INDICATE SET OR RESET ERRORS' 0791 0D0A0A DB ACR,ALF,ALF 0794 5445535449 DB 'TESTING J2-17 IC 13B pin 1 STATUS BIT 0 IC 10D pin 18 $' 07CC 0D0A0A M1 DB ACR,ALF,ALF 07CF 5445535449 DB 'TESTING J1-19 IC 13B pin 13 STATUS BIT 1 IC 10D pin 16 $' 0807 0D0A0A M2 DB ACR,ALF,ALF 080A 5445535449 DB 'TESTING J1-17 IC 13B pin 4 STATUS BIT 2 IC 10D pin 14 $' 0842 0D0A0A M3 DB ACR,ALF,ALF 0845 5445535449 DB 'TESTING J2-19 IC 13B pin 10 STATUS BIT 3 IC 10D pin 12 $' 087D 0D0A0A M4 DB ACR,ALF,ALF 0880 5445535449 DB 'TESTING J2-9 IC 9B pin 3 $' 089B 0D0A0A M5 DB ACR,ALF,ALF 089E 5445535449 DB 'TESTING J1-11 IC 9B pin 14 $' 08BA 0D0A0A M6 DB ACR,ALF,ALF 08BD 5445535449 DB 'TESTING J1-9 IC 9B pin 16 $' 08D9 0D0A0A M7 DB ACR,ALF,ALF 08DC 5445535449 DB 'TESTING J2-11 IC 9B pin 5 $' 08F7 01 passcnt db 1 08F8 00 port db 0 08F9 01 error db 1 08FA 01 temp db 1 08FB 00 temp2 db 0 08FC 00 testpat db 0 08FD AA db 0aah 08FE 55 db 55h 08FF CC db 0cch 0900 66 db 66h 0901 33 db 33h 0902 99 db 99h 0903 FF db 0ffh 0904 81 db 81h 0905 ds 30 0923 = stack equ $ 0923 end