home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
SIMTEL
/
CPMUG
/
CPMUG025.ARK
/
DCHDIAG.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
7KB
|
326 lines
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