;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; (c)Copyright Sealevel Systems Incorporated, 1993 - 1995 ;; ;; 3097 test program ;; build with GEN.ASM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TITLE 3097 .DOSSEG .MODEL SMALL,OS_DOS .STACK INCLUDE GEN.INC ;GENERAL CURSOR & CRT MACROS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; MACROS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BASE equ 200h ;base address of board ISOBASE equ 300h TIMEOUT equ 0ffffh ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ERRF_TIME db 0 ; Time-Out Reached ERRF_BIT db 0 ; A bit was not in an expected state ERRF_BOARD db 0 ; Any Error on the Card. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SignOn db 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',CR,LF db 'º LATCH-16 part # 3097 : Test with ISO-16 Adapterº',CR,LF db 'º IRQ : None ; Base Address 200h º',CR,LF db 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ',CR,LF,'$' ERRM_TIME db 0ah,0dh,'Time-Out Error.',0ah,0dh,'$' ERRM_BIT db 0ah,0dh,'Bit Error.',0ah,0dh,'$' TestingBP db 0ah,0dh,'Testing Bit Pattern....',0ah,0dh,'$' TestingISO db 0ah,0dh,'Testing Bit Pattern with ISO-16 #3094....',0ah,0dh,'$' TestingPort db 0ah,0dh,'Testing Latch at $' Passed db 0ah,0dh,'Board PASSED.',07,0ah,0dh,'$' Failed db 0ah,0dh,'Board FAILED.',07,07,07,0ah,0dh,'$' CRLF db 0ah,0dh,'$' PERIOD db '.$' SPACE db ' $' OUTPUT db 0 ;variable to be sent out ports ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Individual PROTO C wBASEAD:WORD OutputTo3094 PROTO C wBASEAD:WORD, wBASEAD2:WORD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .CODE START: mov ax,@DATA mov ds,ax invoke cls ;cls INVOKE WRT_MESS, offset SignOn ;print title message INVOKE WRT_MESS, offset TestingBP INVOKE Individual,BASE ;test read back capabilities cmp ERRF_BOARD,0 jnz error INVOKE Individual,BASE+2 ;test read back capabilities cmp ERRF_BOARD,0 jnz error INVOKE WRT_MESS, offset TestingISO INVOKE OutputTo3094, BASE, ISOBASE cmp ERRF_BOARD,0 jnz error INVOKE OutputTo3094, BASE+2 ,ISOBASE+1 cmp ERRF_BOARD,0 jnz error error: call CheckError mov ah,4ch int 21h ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; WaitBit : NEAR ;; Passes: Base Address ;; Return: Carry Set and AX=-1 if ERROR else CLC and AX=0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WaitBit PROC C PUBLIC USES DX CX, wBASEAD:WORD, wTIMEVAL:WORD mov dx, wBASEAD mov cx, wTIMEVAL add dx, 1 @@: in al, dx and al, 03h cmp al, 03h jz @f loop @b mov ERRF_TIME, 01h mov ERRF_BOARD, 01h stc mov ax, 0ffh ret @@: clc mov ax, 0 ret WaitBit ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Get3094Bit : NEAR : Get State of Latch ;; Passes: DX = Base or Base+2 ;; Return: AL = Latch Status ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Get3094Bit PROC C PUBLIC USES DX, wBASEAD:WORD mov dx, wBASEAD in al, dx ret Get3094Bit ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; GetBit : NEAR : Get State of Latch ;; Passes: DX = Base or Base+2 ;; Return: AL = Latch Status ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GetBit PROC C PUBLIC USES DX, wBASEAD:WORD mov dx, wBASEAD in al, dx ret GetBit ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SetBit PROC C PUBLIC USES AX DX, wBASEAD:WORD, bBITMASK:BYTE mov dx, wBASEAD mov al, bBITMASK out dx, al ret SetBit ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ResetBit PROC C PUBLIC USES AX DX, wBASEAD:WORD, bBITMASK:BYTE mov dx, wBASEAD add dx, 1 mov al, bBITMASK out dx, al ret ResetBit ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PortTest PROC C PUBLIC USES DX AX, wBASEAD:WORD, bBITPOS:BYTE mov dx, wBASEAD INVOKE WaitBit, DX, TIMEOUT mov bl, bBITPOS not bl INVOKE ResetBit, DX, bl INVOKE WaitBit, DX, TIMEOUT INVOKE SetBit, DX, bBITPOS INVOKE WaitBit, DX, TIMEOUT ret PortTest ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CheckError proc near cmp ERRF_BOARD, 0 jnz @f INVOKE WRT_MESS, offset Passed mov al,00 clc ret @@: cmp ERRF_TIME, 0 jz @f invoke WRT_MESS, offset ERRM_TIME @@: cmp ERRF_BIT, 0 jz @f invoke WRT_MESS, offset ERRM_BIT @@: INVOKE WRT_MESS, offset Failed ret CheckError endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Individual PROC C PUBLIC USES CX AX, wBASEAD:WORD INVOKE WaitBit, wBASEAD, TIMEOUT cmp ERRF_BOARD, 0 jz @f @@: mov cx,8 INVOKE wrt_mess, offset TestingPort mov ax, wBASEAD call WriteWord invoke wrt_mess, offset CRLF mov OUTPUT, 01h BACKTO: INVOKE PortTest,wBASEAD, OUTPUT INVOKE GetBit, wBASEAD INVOKE wrt_hex cmp al, OUTPUT jz @f mov ERRF_BOARD, 01h mov ERRF_BIT, 01h jmp ENDI @@: invoke wrt_mess,offset SPACE mov al, OUTPUT rol al,1 mov OUTPUT, al loop BACKTO invoke wrt_mess,offset CRLF INVOKE ResetBit, wBASEAD, 0FFh INVOKE WaitBit, wBASEAD, TIMEOUT cmp ERRF_BOARD, 0 jz ENDI ENDI: ret Individual endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OutputTo3094 PROC C PUBLIC USES CX AX, wBASEAD:WORD, wBASEAD2:WORD INVOKE WaitBit, wBASEAD, TIMEOUT cmp ERRF_BOARD, 0 jz @f @@: mov cx,8 INVOKE wrt_mess, offset TestingPort mov ax, wBASEAD call WriteWord invoke wrt_mess, offset CRLF mov OUTPUT, 01h BACKTO: INVOKE PortTest,wBASEAD, OUTPUT INVOKE Get3094Bit, wBASEAD2 INVOKE wrt_hex cmp al, OUTPUT jz @f mov ERRF_BOARD, 01h mov ERRF_BIT, 01h jmp ENDI @@: invoke wrt_mess,offset SPACE mov al, OUTPUT rol al,1 mov OUTPUT, al loop BACKTO invoke wrt_mess,offset CRLF INVOKE ResetBit, wBASEAD, 0FFh INVOKE WaitBit, wBASEAD, TIMEOUT cmp ERRF_BOARD, 0 jz ENDI ENDI: ret OutputTo3094 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteWord proc near push ax mov al,ah invoke wrt_hex ;high byte pop ax invoke wrt_hex ;low byte ret WriteWord endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; end START