home *** CD-ROM | disk | FTP | other *** search
- TITLE 'D. C. HAYES MODEM BOARD DIAGNOSTIC 1.1'
- ;
- ;
- ;
- ;PRIMITIVE LOOP AROUND DIAGNOSTIC FOR D. C. HAYES MODEM BOARD
- ;
- ;VERSION 1.0 WRITTEN 2/12/78
- ;VERSION 1.1 COMPLETE 2/18/78
- ;
- ;
- ;
- ORG 100H
- ;
- JMP INITIALIZE
- ;
- BASE EQU 80H ;BASE PORT NUMBER
- TRANSMIT$PORT EQU BASE ;TRANSMIT OUTPUT PORT
- RECEIVE$PORT EQU BASE ;RECEIVE INPUT PORT
- STATUS$PORT EQU BASE+1 ;STATUS INPUT PORT
- ;
- ;STATUS PORT BIT ASSIGNMENTS
- ;
- RRF: EQU 01H ;RECEIVE REGISTER FULL
- TRE: EQU 02H ;TRANSMIT REGISTER EMPTY
- PE: EQU 04H ;PARITY ERROR
- FE: EQU 08H ;FRAMING ERROR
- OE: EQU 10H ;OVERFLOW ERROR
- CD: EQU 40H ;CARRIER DETECT
- NRI: EQU 80H ;NO RINGING INDICATOR
- ;
- CONTROL$PORT$1 EQU BASE+1 ;
- ;
- ;CONTROL PORT 1 BIT ASSIGNMENTS
- ;
- EPE: EQU 01H ;EVEN PARITY ENABLE
- LS1: EQU 02H ;LENGTH SELECT 1
- LS2: EQU 04H ;LENGTH SELECT 2
- SBS: EQU 08H ;STOP BIT SELECT
- PI: EQU 10H ;PARITY INHIBIT
- ;
- CONTROL$PORT$2 EQU BASE+2 ;
- ;
- ;CONTROL PORT 2 BIT ASSIGNMENTS
- ;
- BRS: EQU 01H ;BIT RATE SELECT
- TXE: EQU 02H ;TRANSMIT ENABLE
- MS: EQU 04H ;MODE SELECT
- ES: EQU 08H ;ECHO SUPRESS
- ST: EQU 10H ;SELF TEST
- RID: EQU 20H ;RING INDICATOR DISABLE
- OH: EQU 80H ;OFF HOOK
- ;
- ;
- ;
- BDOS: EQU 05H
- RDCON: EQU 01H
- PRINT: EQU 09H
- STCON: EQU 0BH
- WRCON: EQU 02H
- ;
- ;ASCII MESSAGES
- ;
- ATC$MSG: DB 0DH,0AH,'ALL TESTS COMPLETE',0DH,0AH,'$'
- CMP$ERR$MSG: DB 0DH,0AH,'COMPARE ERROR $'
- CW1$MSG: DB 0DH,0AH,'CONTROL WORD 1 = $'
- CW2$MSG: DB 0DH,0AH,'CONTROL WORD 2 = $'
- DCH$DIAG$MSG: DB 0DH,0AH,'D. C. HAYES MODEM DIAGNOSTIC, '
- DB 'VERSION 1.1',0DH,0AH,0DH,0AH
- DB 'CONTROL-C RETURNS TO CP/M',0DH,0AH
- DB 'CONTROL-D RESTARTS DIAGNOSTIC',0DH,0AH
- DB 'ANY OTHER CHARACTER CONTINUES TEST'
- DB 0DH,0AH,'$'
- PRINTING$MSG: DB 'PRINTING RECEIVER DATA',0DH,0AH,'$'
- RCV$DATA$MSG: DB 0DH,0AH,'RECEIVER DATA = $'
- RCV$ERR$MSG: DB 0DH,0AH,'RECEIVER ERROR$'
- STATUS$MSG: DB 0DH,0AH,'STATUS REGISTER = $'
- TRANS$DATA$MSG: DB 0DH,0AH,'TRANSMITTER DATA = $'
- CRLF$MSG: DB 0DH,0AH,'$'
- WAITING$MSG: DB 'WAITING FOR CARRIER DETECT',0DH,0AH,'$'
- SET$SS$CW1$MSG: DB 0DH,0AH,'SET SENSE SWITCHES TO CONTROL'
- DB ' WORD 1,',0DH,0AH
- DB 'THEN TYPE ANY CHARACTER TO CONTINUE$'
- SET$SS$CW2$MSG: DB 0DH,0AH,'SET SENSE SWITCHES TO CONTROL'
- DB ' WORD 2,',0DH,0AH
- DB 'THEN TYPE ANY CHARACTER TO CONTINUE$'
- ;
- ;RAM STORAGE
- ;
- CHAR$MASK: DB 00H
- CONTROL$WORD$1: DB 00H
- CONTROL$WORD$2: DB 00H
- MSG$FLAG: DB 00H
- TEST$DATA: DB 00H
- TRANS$DATA: DB 00H
- DS 32
- STACK: DS 2 ;CONTAINS CP/M'S STACK POINTER
- ;
- ;INITIALIZE THE MODEM FROM THE SENSE SWITCHES
- ;
- INITIALIZE: LXI H,0
- DAD SP
- SHLD STACK
- INITIALIZE2: LXI SP,STACK
- LXI D,DCH$DIAG$MSG
- CALL PRINT$MSG
- LXI D,SET$SS$CW1$MSG
- CALL PRINT$MSG
- CALL CHECK$CTRLS
- IN 0FFH
- STA CONTROL$WORD$1
- LXI D,SET$SS$CW2$MSG
- CALL PRINT$MSG
- CALL CHECK$CTRLS
- IN 0FFH
- STA CONTROL$WORD$2
- CALL SET$CHAR$MASK
- INITIALIZE1: LXI D,CW1$MSG
- CALL PRINT$MSG
- LDA CONTROL$WORD$1
- OUT CONTROL$PORT$1
- CALL SHOWHEX ;PRINT CONTROL WORD 1
- LXI D,CW2$MSG
- CALL PRINT$MSG
- LDA CONTROL$WORD$2
- OUT CONTROL$PORT$2
- CALL SHOWHEX ;PRINT CONTROL WORD 2
- IN RECEIVE$PORT ;RESET THE RRF BIT
- LXI D,CRLF$MSG
- CALL PRINT$MSG
- ;
- ;TEST LOOP, SEND, RECEIVE, AND COMPARE TEST DATA
- ;ANDED WITH CHARACTER MASK
- ;
- TEST$LOOP: XRA A
- STA TEST$DATA ;INITIALIZE TEST DATA
- LXI D,PRINTING$MSG
- CALL PRINT$MSG
- TEST$LOOP1: LDA CHAR$MASK ;
- MOV B,A
- LDA TEST$DATA
- ANA B
- STA TRANS$DATA
- CALL TRANSMIT ;SEND THE DATA
- CALL RECEIVE ;RECEIVE THE DATA
- CALL SHOWHEX ;PRINT THE RECEIVER DATA
- CALL COMPARE ;COMPARE SENT VERSUS RECEIVED DATA
- LDA TEST$DATA
- INR A
- STA TEST$DATA
- JNZ TEST$LOOP1
- XRA A
- OUT CONTROL$PORT$1 ;TURN OFF THE MODEM
- OUT CONTROL$PORT$2 ;
- LXI D,ATC$MSG
- CALL PRINT$MSG
- CALL CHECK$CTRLS
- JMP INITIALIZE1
- ;
- ;TRANSMIT CHARACTER ROUTINE
- ;
- TRANSMIT: PUSH PSW
- CALL CHECK$CD
- TRANSMIT1: IN STATUS$PORT
- ANI TRE
- CPI TRE ;WAIT FOR TRE
- JNZ TRANSMIT1
- POP PSW
- OUT TRANSMIT$PORT ;OUTPUT DATA
- RET
- ;
- ;RECEIVE CHARACTER ROUTINE
- ;
- RECEIVE: CALL CHECK$CD
- IN STATUS$PORT
- ANI RRF
- CPI RRF ;WAIT FOR RRF
- JNZ RECEIVE
- IN STATUS$PORT
- ANI OE + FE + PE
- CNZ ERROR$RCV ;CHECK FOR ERRORS
- IN RECEIVE$PORT ;GET DATA
- RET
- ;
- ;RECEIVER ERROR ROUTINE
- ;
- ERROR$RCV: LXI D,RCV$ERR$MSG
- CALL PRINT$MSG
- LXI D,STATUS$MSG
- CALL PRINT$MSG
- IN STATUS$PORT
- CALL SHOWHEX
- LXI D,CRLF$MSG
- CALL PRINT$MSG
- CALL CHECK$CTRLS
- RET
- ;
- ;COMPARE TRANSMITTED TO RECEIVED DATA ROUTINE
- ;
- COMPARE: MOV B,A ;RECEIVED DATA > B
- LDA TRANS$DATA
- CMP B
- RZ ;NO ERROR
- PUSH B
- LXI D,CMP$ERR$MSG
- CALL PRINT$MSG
- LXI D,TRANS$DATA$MSG
- CALL PRINT$MSG
- LDA TRANS$DATA
- CALL SHOWHEX
- LXI D,RCV$DATA$MSG
- CALL PRINT$MSG
- POP B
- MOV A,B
- CALL SHOWHEX
- LXI D,CRLF$MSG
- CALL PRINT$MSG
- CALL CHECK$CTRLS
- RET
- ;
- ;CHECK AND WAIT FOR CARRIER ROUTINE
- ;
- CHECK$CD: XRA A
- STA MSG$FLAG ;RESET FLAG
- CHECK$CD1: IN STATUS$PORT ;CHECK FOR CARRIER
- ANI CD
- CPI CD
- JZ CHECK$CD3 ;CARRIER DETECTED
- LDA MSG$FLAG
- ORA A
- JNZ CHECK$CD2
- LXI D,WAITING$MSG
- CALL PRINT$MSG
- MVI A,0FFH
- STA MSG$FLAG ;SET FLAG
- CHECK$CD2 MVI C,STCON ;CHECK FOR CHARACTER FROM CONSOLE
- CALL BDOS
- ORA A
- CNZ CHECK$CTRLS
- JMP CHECK$CD1
- CHECK$CD3: XRA A ;RESET FLAG
- STA MSG$FLAG
- RET
- ;
- ;SET CHARACTER MASK DEPENDING ON THE CONTENTS OF CONTROL WORD 1
- ;
- SET$CHAR$MASK: LDA CONTROL$WORD$1
- ANI 06H
- JZ MASK$5$CHAR
- CPI 02H
- JZ MASK$6$CHAR
- CPI 04H
- JZ MASK$7$CHAR
- MASK$8$CHAR: MVI A,0FFH
- STA CHAR$MASK
- RET
- MASK$7$CHAR: MVI A,7FH
- STA CHAR$MASK
- RET
- MASK$6$CHAR: MVI A,3FH
- STA CHAR$MASK
- RET
- MASK$5$CHAR MVI A,1FH
- STA CHAR$MASK
- RET
- ;
- ;PRINT HEX CHARACTERS ENCLOSED IN PARENS
- ;
- SHOWHEX: PUSH PSW
- PUSH PSW
- MVI A,'('
- CALL TYPE
- POP PSW
- CALL HEXO
- MVI A,')'
- CALL TYPE
- POP PSW
- RET
- ;
- ;PRINT MESSAGE POINTED TO BY DE REGISTER PAIR
- ;
- PRINT$MSG: MVI C,PRINT
- CALL BDOS
- RET
- ;
- ;PRINT CHARACTER ON CONSOLE
- ;
- TYPE: PUSH PSW! PUSH B! PUSH D! PUSH H
- MOV E,A
- MVI C,WRCON
- CALL BDOS
- POP H! POP D! POP B! POP PSW
- RET
- ;
- ;CHECK FOR CTRL-C AND CTRL-D
- ;
- CHECK$CTRLS: MVI C,RDCON
- CALL BDOS
- CPI 'D'-40H
- JZ INITIALIZE2
- CPI 'C'-40H
- RNZ
- XRA A
- OUT CONTROL$PORT$1 ;TURN OFF MODEM
- OUT CONTROL$PORT$2
- LHLD STACK
- SPHL ;GO BACK TO CP/M
- RET
- ;
- ;HEX OUTPUT ROUTINE
- ;
- HEXO: PUSH PSW
- RAR! RAR! RAR! RAR
- CALL NIBBL
- POP PSW
- NIBBL: ANI 0FH
- CPI 10
- JC ISNUM
- ADI 7
- ISNUM: ADI '0'
- CALL TYPE
- RET
- ;
- ;
- ;
- END 100H
-