conin equ 01h ;character in conout equ 02h ;character out boot equ 0 ;Restart bdos equ 05 ;entry point passes equ 200 ;# 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 djustat equ 0e3f9h ;DJII Uart Status 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. * *************************************************************** org 100h start lxi sp,stack lxi d,strtmsg ;Board set-up instructions call pbuff ;send call charin ;wait for carriage return 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 errmsg ;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 errmsg push h sta error ;save wrong data lxi d,passmsg call pbuff lda passcnt call putadc ;prints ascii from binary lda port 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,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 ******************************************************************** * * Strobe test uses strobes to set attention ports and reads the * associated ports to reset the attention bit. Direction alter- * nates on each pass. * ********************************************************************* strbtst mvi a,1 sta passcnt passlp lxi h,strbpat ;Memory holds strobe,attn bit & port for each. strblp mov a,m cpi endpat jz nxstrb out 13q os equ $-1 in 3 is equ $-1 ani 0fh ;strip high order bits inx h cmp m cnz sterr inx h lda passcnt rar jc odd ;reverse direction alternate passes mov a,m xri base2 sta ip jmp even odd mov a,m sta ip even call ip-1 in 3 is2 equ $-1 ani 0fh ana a cnz rsterr inx h jmp strblp nxstrb lda passcnt inr a cpi passes sta passcnt jz final lda os ;reverse ports on every pass xri base2 sta os lda is xri base2 sta is lda is2 xri base2 sta is2 jmp passlp 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 lda djustat ;check for keyboard interrupt ani djdr jnz suba jmp exit sterr push h ;prints strobe errors lxi d,passmsg call pbuff lda passcnt call putadc lxi d,atbitmsg call pbuff pop h push h mov a,m call putadc lxi d,fmprt call pbuff lda os call putadc lxi d,dintset call pbuff pop h ret rsterr push h ;prints reset errors lxi d,passmsg call pbuff lda passcnt call putadc lxi d,atbitmsg call pbuff lda is call putadc lxi d,dintrset call pbuff pop h 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 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$' 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 strbpat db 1 db 2 db 5 db 3 db 4 db 6 db 5 db 8h db 7 db 7 db 1 db 4 db 0ffh ds 30 stack equ $ end