conin equ 01h ;character in conout equ 02h ;character out boot equ 0 ;Restart bdos equ 05 ;entry point passes equ 1 ;# of passes to run acr equ 0dh ;carriage return alf equ 0ah ;line feed base1 equ 0 ;Switchboard under test base address base2 equ 8h ;Test fixture (swbd) base address tbre1 equ 8h ;tbre flag for port 1 tbre2 equ 80h ;tbre flag for port 2 dr1 equ 4h ;data ready flag port 1 dr2 equ 40h ;data ready flag port 2 endpat equ 0ffh ;resets strobe pattern constat equ 0bh ;console status djustat equ 0e3f9h ;DJII Uart Status 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. * *************************************************************** org 100h start lxi sp,stack lxi d,inq call pbuff call charin cpi '?' jnz goon lxi d,strtmsg ;Board set-up instructions call pbuff ;send call charin ;wait for carriage return goon in 0 ;clear UARTs in 1 in 10q in 11q test lxi h,testpat mov a,m ;load test pattern cpi 81h ;test for last pattern jz nxtpass ;if so, increment pass counter push h call oport ;Parrallel port 1 is address 4 call iport ;should be the same data pop h cmp m push h cnz ermsg ;prints error bit pattern pop h inx h ;next pattern jmp test+3 nxtpass lda passcnt inr a cpi passes sta passcnt jnz test ;reset pattern mvi a,1 sta passcnt nxprt lda port ;move to next port inr a sta port cpi 2 ;skip status & strobe ports for now jnz not2 adi 2 sta port not2 cpi 10q jnz not10 lxi d,togmsg ;reverse direction on pll ports call pbuff call charin ;wait for operator response jmp test not10 cpi 12q jnz cont adi 2 ;skip status & strobe ports sta port cont cpi 20q jnz test jmp strbtst ermsg push h sta error ;save wrong data lxi d,passmsg call pbuff lda passcnt call putadc ;prints ascii from binary lda ip sta temp2 cpi 10q ;drop base bit and specify Board 2 jm norml ani 7q sta temp2 lxi d,brdmsg call pbuff norml lxi d,portmsg call pbuff lda temp2 call putadc lxi d,shldbe call pbuff pop h mov a,m push h call bitout ;print test bit pattern lxi d,was call pbuff lda error ;erroneous pattern call bitout pop h ret bitout mvi b,8 ;bit counter sta temp push b loop lda temp ;pickup byte to transmit rlc ;first bit sta temp jc on ;if on mvi c,conout mvi e,'0' ;if off call bdos ;Print character pop b dcr b ;decrement bit counter push b jnz loop ;next bit pop b ret on mvi e,'1' ;on bit mvi c,conout call bdos ;Print character pop b dcr b ;decrement bit counter push b jnz loop ;next bit pop b ret PBUFF MVI C,CONSTAT PUSH D CALL BDOS ;CHECK CONSOL STATUS CPI 1 MVI C,CONIN POP D CZ BDOS ;CLEAR CONSOL INPUT IF NECESSARY mvi c,9 jmp bdos charin mvi c,1 jmp bdos exit lxi d,endmsg call pbuff jmp boot oport push psw ;adjust port value & do status tests lda port ;on serial ports sta op cpi 1 jz if1out jm if0out cpi 10q jz if0out cpi 11q jz if1out pop psw out 0 op equ $-1 ret if1out inr a sta ip anitb2 call ip-1 ani tbre2 jz anitb2 rcvd2 jmp op-2 if0out adi 2 sta ip anitb1 call ip-1 ani tbre1 jz anitb1 jmp op-2 iport lda port ;same procedure as for oport xri 8h ;except base is opposite from oport cpi 1 jz if1in jm if0in cpi 10q jz if0in cpi 11q jz if1in sta ip in 0 ip equ $-1 ret if0in adi 2 sta ip anidr1 mvi c,0bh call bdos cpi 0 cnz nodr call ip-1 ani dr1 jz anidr1 data lda ip sbi 2 sta ip jmp ip-1 if1in inr a sta ip anidr2 mvi c,0bh call bdos cpi 0 cnz nodr call ip-1 ani dr2 jz anidr2 data2 lda ip dcr a sta ip jmp ip-1 nodr lxi d,passmsg ;prints pass & port if any key hit call pbuff lda passcnt call putadc lda port xri 8h cpi 8 sta temp2 jm okasis ani 7 sta temp2 lxi d,brdmsg call pbuff okasis lxi d,portmsg call pbuff lda temp2 call putadc lxi d,nodrmsg call pbuff call charin ret ******************************************************************** strbtst LXI D,M0 CALL PBUFF MVI B,1 LP0 MVI A,7 OUT 13Q IN 3 ANI 1 CZ ERRMSG IN 4 IN 3 ANI 1 CNZ ERRMSG MVI C,CONSTAT CALL BDOS ;CHECK FOR CONSOLE CHARACTER cpi 1 JNZ LP0 LXI D,M1 CALL PBUFF LP1 MVI A,1 OUT 13Q IN 3 ANI 2 CZ ERRMSG IN 5 IN 3 ANI 2 CNZ ERRMSG MVI C,CONSTAT CALL BDOS ;CHECK FOR CONSOLE CHARACTER cpi 1 JNZ LP1 LXI D,M2 CALL PBUFF LP2 MVI A,3 OUT 13Q IN 3 ANI 4 CZ ERRMSG IN 6 IN 3 ANI 4 CNZ ERRMSG MVI C,CONSTAT CALL BDOS ;CHECK FOR CONSOLE CHARACTER cpi 1 JNZ LP2 LXI D,M3 CALL PBUFF LP3 MVI A,5 OUT 13Q IN 3 ANI 8H CZ ERRMSG IN 7 IN 3 ANI 8H CNZ ERRMSG MVI C,CONSTAT CALL BDOS ;CHECK FOR CONSOLE CHARACTER cpi 1 JNZ LP3 LXI D,M4 CALL PBUFF LP4 MVI A,7 OUT 3 IN 13Q ANI 1 CZ ERRMSG IN 14Q IN 13Q ANI 1 CNZ ERRMSG mvi c,constat call bdos cpi 1 JNZ LP4 LXI D,M5 CALL PBUFF LP5 MVI A,1 OUT 3 IN 13Q ANI 2 CZ ERRMSG IN 15Q IN 13Q ANI 2 CNZ ERRMSG mvi c,constat call bdos cpi 1 JNZ LP5 LXI D,M6 CALL PBUFF LP6 MVI A,3 OUT 3 IN 13Q ANI 4 CZ ERRMSG IN 16Q IN 13Q ANI 4 CNZ ERRMSG mvi c,constat call bdos cpi 1 JNZ LP6 LXI D,M7 CALL PBUFF LP7 MVI A,5 OUT 3 IN 13Q ANI 8H CZ ERRMSG IN 17Q IN 13Q ANI 8H CNZ ERRMSG mvi c,constat call bdos cpi 1 JNZ LP7 final lxi d,scopemsg ;turn on untested strobes for scope check call pbuff suba sub a mvi b,4 outlp out 3 adi 2 dcr b jnz outlp mvi c,constat call bdos ;check for keyboard interrupt cpi 1 jnz suba jmp exit ERRMSG DCR B RNZ mvi e,'*' mvi c,conout call bdos MVI B,0 ret putadc mov l,a mvi h,0 ***************************************************************** * * * Putdc prints the ascii decimal equivalent of the number in HL * * * ***************************************************************** putdc lxi b,-10 phl push d mov d,b MOV E,B PHLLP DAD B inx d jc phllp xthl xchg mov a,h ora l cnz phl pop h mvi a,'0' add l sub c pchar push h push b push d push psw mov e,a mvi c,2 call bdos pop psw pop d pop b pop h ret inq db acr,alf db 'For switch settings press ?$' strtmsg db acr,alf db 'Board 1 is board being tested. Use 4 MHz CPU.' db ' Test runs 200 passes. ' db acr,alf db 'Board 1: SW1 1-8 OFF 8bits,2stop,noparity' db acr,alf db ' SW2 1-8 OFF 19,200 baud' db acr,alf db ' SW3 1-8 ON positive strobes' db acr,alf db ' SW4 1-4 ON parallel ports OUT' db acr,alf db ' 5-8 OFF positive trigger ATTN' db acr,alf db ' SW5 1 OFF Phantom disable' db acr,alf db ' 2-8 ON Base 0, Rom/Ram disable' db acr,alf db ' SW6 Does Not Matter - Memory Addresses' db acr,alf db 'Board 2: Same as Board 1 EXCEPT:' db acr,alf db ' SW4 1-4 OFF Parallel ports IN' db acr,alf db ' SW5 3 OFF Base 10Q press RETURN$' nodrmsg db ' ' db '$' passmsg db acr,alf db 'Pass $' portmsg db ' Port $' brdmsg db ' board 2 $' shldbe db ' should be $' was db ' was $' atbitmsg db ' Attention Bit $' fmprt db ' from Port $' dintset db ' did not set $' dintrset db ' did not reset $' scopemsg db acr,alf db 'With Oscilloscope check Pins 13 & 15' db ' on J1 & J2, Board 1 for Positive Strobe' db acr,alf db 'Press RETURN when finished$' endmsg db acr,alf db 'Test Complete$' togmsg db acr,alf db 'Toggle SW4 1-4 both boards, press return$' M0 DB ACR,ALF DB 'ASTERISKS INDICATE SET OR RESET ERRORS' DB ACR,ALF,ALF DB 'TESTING J2-17 IC 13B pin 1 STATUS BIT 0 IC 10D pin 18 $' M1 DB ACR,ALF,ALF DB 'TESTING J1-19 IC 13B pin 13 STATUS BIT 1 IC 10D pin 16 $' M2 DB ACR,ALF,ALF DB 'TESTING J1-17 IC 13B pin 4 STATUS BIT 2 IC 10D pin 14 $' M3 DB ACR,ALF,ALF DB 'TESTING J2-19 IC 13B pin 10 STATUS BIT 3 IC 10D pin 12 $' M4 DB ACR,ALF,ALF DB 'TESTING J2-9 IC 9B pin 3 $' M5 DB ACR,ALF,ALF DB 'TESTING J1-11 IC 9B pin 14 $' M6 DB ACR,ALF,ALF DB 'TESTING J1-9 IC 9B pin 16 $' M7 DB ACR,ALF,ALF DB 'TESTING J2-11 IC 9B pin 5 $' passcnt db 1 port db 0 error db 1 temp db 1 temp2 db 0 testpat db 0 db 0aah db 55h db 0cch db 66h db 33h db 99h db 0ffh db 81h ds 30 stack equ $ end