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 >
Assembly Source File  |  1984-04-29  |  7KB  |  326 lines

  1.     TITLE    'D. C. HAYES MODEM BOARD DIAGNOSTIC 1.1'
  2. ;
  3. ;
  4. ;
  5. ;PRIMITIVE LOOP AROUND DIAGNOSTIC FOR D. C. HAYES MODEM BOARD
  6. ;
  7. ;VERSION 1.0 WRITTEN 2/12/78
  8. ;VERSION 1.1 COMPLETE 2/18/78
  9. ;
  10. ;
  11. ;
  12.         ORG    100H
  13. ;
  14.         JMP    INITIALIZE
  15. ;
  16. BASE        EQU    80H    ;BASE PORT NUMBER
  17. TRANSMIT$PORT    EQU    BASE    ;TRANSMIT OUTPUT PORT
  18. RECEIVE$PORT    EQU    BASE    ;RECEIVE INPUT PORT
  19. STATUS$PORT    EQU    BASE+1    ;STATUS INPUT PORT
  20. ;
  21. ;STATUS PORT BIT ASSIGNMENTS
  22. ;
  23. RRF:        EQU    01H    ;RECEIVE REGISTER FULL
  24. TRE:        EQU    02H    ;TRANSMIT REGISTER EMPTY
  25. PE:        EQU    04H    ;PARITY ERROR
  26. FE:        EQU    08H    ;FRAMING ERROR
  27. OE:        EQU    10H    ;OVERFLOW ERROR
  28. CD:        EQU    40H    ;CARRIER DETECT
  29. NRI:        EQU    80H    ;NO RINGING INDICATOR
  30. ;
  31. CONTROL$PORT$1    EQU    BASE+1    ;
  32. ;
  33. ;CONTROL PORT 1 BIT ASSIGNMENTS
  34. ;
  35. EPE:        EQU    01H    ;EVEN PARITY ENABLE
  36. LS1:        EQU    02H    ;LENGTH SELECT 1
  37. LS2:        EQU    04H    ;LENGTH SELECT 2
  38. SBS:        EQU    08H    ;STOP BIT SELECT
  39. PI:        EQU    10H    ;PARITY INHIBIT
  40. ;
  41. CONTROL$PORT$2    EQU    BASE+2    ;
  42. ;
  43. ;CONTROL PORT 2 BIT ASSIGNMENTS
  44. ;
  45. BRS:        EQU    01H    ;BIT RATE SELECT
  46. TXE:        EQU    02H    ;TRANSMIT ENABLE
  47. MS:        EQU    04H    ;MODE SELECT
  48. ES:        EQU    08H    ;ECHO SUPRESS
  49. ST:        EQU    10H    ;SELF TEST
  50. RID:        EQU    20H    ;RING INDICATOR DISABLE
  51. OH:        EQU    80H    ;OFF HOOK
  52. ;
  53. ;
  54. ;
  55. BDOS:        EQU    05H
  56. RDCON:        EQU    01H
  57. PRINT:        EQU    09H
  58. STCON:        EQU    0BH
  59. WRCON:        EQU    02H
  60. ;
  61. ;ASCII MESSAGES
  62. ;
  63. ATC$MSG:    DB    0DH,0AH,'ALL TESTS COMPLETE',0DH,0AH,'$'
  64. CMP$ERR$MSG:    DB    0DH,0AH,'COMPARE ERROR $'
  65. CW1$MSG:    DB    0DH,0AH,'CONTROL WORD 1 = $'
  66. CW2$MSG:    DB    0DH,0AH,'CONTROL WORD 2 = $'
  67. DCH$DIAG$MSG:    DB    0DH,0AH,'D. C. HAYES MODEM DIAGNOSTIC, '
  68.         DB    'VERSION 1.1',0DH,0AH,0DH,0AH
  69.         DB    'CONTROL-C RETURNS TO CP/M',0DH,0AH
  70.         DB    'CONTROL-D RESTARTS DIAGNOSTIC',0DH,0AH
  71.         DB    'ANY OTHER CHARACTER CONTINUES TEST'
  72.         DB    0DH,0AH,'$'
  73. PRINTING$MSG:    DB    'PRINTING RECEIVER DATA',0DH,0AH,'$'
  74. RCV$DATA$MSG:    DB    0DH,0AH,'RECEIVER DATA = $'
  75. RCV$ERR$MSG:    DB    0DH,0AH,'RECEIVER ERROR$'
  76. STATUS$MSG:    DB    0DH,0AH,'STATUS REGISTER = $'
  77. TRANS$DATA$MSG:    DB    0DH,0AH,'TRANSMITTER DATA = $'
  78. CRLF$MSG:    DB    0DH,0AH,'$'
  79. WAITING$MSG:    DB    'WAITING FOR CARRIER DETECT',0DH,0AH,'$'
  80. SET$SS$CW1$MSG:    DB    0DH,0AH,'SET SENSE SWITCHES TO CONTROL'
  81.         DB    ' WORD 1,',0DH,0AH
  82.         DB    'THEN TYPE ANY CHARACTER TO CONTINUE$'
  83. SET$SS$CW2$MSG:    DB    0DH,0AH,'SET SENSE SWITCHES TO CONTROL'
  84.         DB    ' WORD 2,',0DH,0AH
  85.         DB    'THEN TYPE ANY CHARACTER TO CONTINUE$'
  86. ;
  87. ;RAM STORAGE
  88. ;
  89. CHAR$MASK:    DB    00H
  90. CONTROL$WORD$1:    DB    00H
  91. CONTROL$WORD$2:    DB    00H
  92. MSG$FLAG:    DB    00H
  93. TEST$DATA:    DB    00H
  94. TRANS$DATA:    DB    00H
  95.         DS    32
  96. STACK:        DS    2    ;CONTAINS CP/M'S STACK POINTER
  97. ;
  98. ;INITIALIZE THE MODEM FROM THE SENSE SWITCHES
  99. ;
  100. INITIALIZE:    LXI    H,0
  101.         DAD    SP
  102.         SHLD    STACK
  103. INITIALIZE2:    LXI    SP,STACK
  104.         LXI    D,DCH$DIAG$MSG
  105.         CALL    PRINT$MSG
  106.         LXI    D,SET$SS$CW1$MSG
  107.         CALL    PRINT$MSG
  108.         CALL    CHECK$CTRLS
  109.         IN    0FFH
  110.         STA    CONTROL$WORD$1
  111.         LXI    D,SET$SS$CW2$MSG
  112.         CALL    PRINT$MSG
  113.         CALL    CHECK$CTRLS
  114.         IN    0FFH
  115.         STA    CONTROL$WORD$2
  116.         CALL    SET$CHAR$MASK
  117. INITIALIZE1:    LXI    D,CW1$MSG
  118.         CALL    PRINT$MSG
  119.         LDA    CONTROL$WORD$1
  120.         OUT    CONTROL$PORT$1
  121.         CALL    SHOWHEX        ;PRINT CONTROL WORD 1
  122.         LXI    D,CW2$MSG
  123.         CALL    PRINT$MSG
  124.         LDA    CONTROL$WORD$2
  125.         OUT    CONTROL$PORT$2
  126.         CALL    SHOWHEX        ;PRINT CONTROL WORD 2
  127.         IN    RECEIVE$PORT    ;RESET THE RRF BIT
  128.         LXI    D,CRLF$MSG
  129.         CALL    PRINT$MSG
  130. ;
  131. ;TEST LOOP, SEND, RECEIVE, AND COMPARE TEST DATA
  132. ;ANDED WITH CHARACTER MASK
  133. ;
  134. TEST$LOOP:    XRA    A
  135.         STA    TEST$DATA    ;INITIALIZE TEST DATA
  136.         LXI    D,PRINTING$MSG
  137.         CALL    PRINT$MSG
  138. TEST$LOOP1:    LDA    CHAR$MASK    ;
  139.         MOV    B,A
  140.         LDA    TEST$DATA
  141.         ANA    B
  142.         STA    TRANS$DATA
  143.         CALL    TRANSMIT    ;SEND THE DATA
  144.         CALL    RECEIVE        ;RECEIVE THE DATA
  145.         CALL    SHOWHEX        ;PRINT THE RECEIVER DATA
  146.         CALL    COMPARE        ;COMPARE SENT VERSUS RECEIVED DATA
  147.         LDA    TEST$DATA
  148.         INR    A
  149.         STA    TEST$DATA
  150.         JNZ    TEST$LOOP1
  151.         XRA    A
  152.         OUT    CONTROL$PORT$1    ;TURN OFF THE MODEM
  153.         OUT    CONTROL$PORT$2    ;
  154.         LXI    D,ATC$MSG
  155.         CALL    PRINT$MSG
  156.         CALL    CHECK$CTRLS
  157.         JMP    INITIALIZE1
  158. ;
  159. ;TRANSMIT CHARACTER ROUTINE
  160. ;
  161. TRANSMIT:    PUSH    PSW
  162.         CALL    CHECK$CD
  163. TRANSMIT1:    IN    STATUS$PORT
  164.         ANI    TRE
  165.         CPI    TRE        ;WAIT FOR TRE
  166.         JNZ    TRANSMIT1
  167.         POP    PSW
  168.         OUT    TRANSMIT$PORT    ;OUTPUT DATA
  169.         RET
  170. ;
  171. ;RECEIVE CHARACTER ROUTINE
  172. ;
  173. RECEIVE:    CALL    CHECK$CD
  174.         IN    STATUS$PORT
  175.         ANI    RRF
  176.         CPI    RRF        ;WAIT FOR RRF
  177.         JNZ    RECEIVE
  178.         IN    STATUS$PORT
  179.         ANI    OE + FE + PE
  180.         CNZ    ERROR$RCV    ;CHECK FOR ERRORS
  181.         IN    RECEIVE$PORT    ;GET DATA
  182.         RET
  183. ;
  184. ;RECEIVER ERROR ROUTINE
  185. ;
  186. ERROR$RCV:    LXI    D,RCV$ERR$MSG
  187.         CALL    PRINT$MSG
  188.         LXI    D,STATUS$MSG
  189.         CALL    PRINT$MSG
  190.         IN    STATUS$PORT
  191.         CALL    SHOWHEX
  192.         LXI    D,CRLF$MSG
  193.         CALL    PRINT$MSG
  194.         CALL    CHECK$CTRLS
  195.         RET
  196. ;
  197. ;COMPARE TRANSMITTED TO RECEIVED DATA ROUTINE
  198. ;
  199. COMPARE:    MOV    B,A        ;RECEIVED DATA > B
  200.         LDA    TRANS$DATA
  201.         CMP    B
  202.         RZ            ;NO ERROR
  203.         PUSH    B
  204.         LXI    D,CMP$ERR$MSG
  205.         CALL    PRINT$MSG
  206.         LXI    D,TRANS$DATA$MSG
  207.         CALL    PRINT$MSG
  208.         LDA    TRANS$DATA
  209.         CALL    SHOWHEX
  210.         LXI    D,RCV$DATA$MSG
  211.         CALL    PRINT$MSG
  212.         POP    B
  213.         MOV    A,B
  214.         CALL    SHOWHEX
  215.         LXI    D,CRLF$MSG
  216.         CALL    PRINT$MSG
  217.         CALL    CHECK$CTRLS
  218.         RET
  219. ;
  220. ;CHECK AND WAIT FOR CARRIER ROUTINE
  221. ;
  222. CHECK$CD:    XRA    A
  223.         STA    MSG$FLAG    ;RESET FLAG
  224. CHECK$CD1:    IN    STATUS$PORT    ;CHECK FOR CARRIER
  225.         ANI    CD
  226.         CPI    CD
  227.         JZ    CHECK$CD3    ;CARRIER DETECTED
  228.         LDA    MSG$FLAG
  229.         ORA    A
  230.         JNZ    CHECK$CD2
  231.         LXI    D,WAITING$MSG
  232.         CALL    PRINT$MSG
  233.         MVI    A,0FFH
  234.         STA    MSG$FLAG    ;SET FLAG
  235. CHECK$CD2    MVI    C,STCON        ;CHECK FOR CHARACTER FROM CONSOLE
  236.         CALL    BDOS
  237.         ORA    A
  238.         CNZ    CHECK$CTRLS
  239.         JMP    CHECK$CD1
  240. CHECK$CD3:    XRA    A        ;RESET FLAG
  241.         STA    MSG$FLAG
  242.         RET
  243. ;
  244. ;SET CHARACTER MASK DEPENDING ON THE CONTENTS OF CONTROL WORD 1
  245. ;
  246. SET$CHAR$MASK:    LDA    CONTROL$WORD$1
  247.         ANI    06H
  248.         JZ    MASK$5$CHAR
  249.         CPI    02H
  250.         JZ    MASK$6$CHAR
  251.         CPI    04H
  252.         JZ    MASK$7$CHAR
  253. MASK$8$CHAR:    MVI    A,0FFH
  254.         STA    CHAR$MASK
  255.         RET
  256. MASK$7$CHAR:    MVI    A,7FH
  257.         STA    CHAR$MASK
  258.         RET
  259. MASK$6$CHAR:    MVI    A,3FH
  260.         STA    CHAR$MASK
  261.         RET
  262. MASK$5$CHAR    MVI    A,1FH
  263.         STA    CHAR$MASK
  264.         RET
  265. ;
  266. ;PRINT HEX CHARACTERS ENCLOSED IN PARENS
  267. ;
  268. SHOWHEX:    PUSH    PSW
  269.         PUSH    PSW
  270.         MVI    A,'('
  271.         CALL    TYPE
  272.         POP    PSW
  273.         CALL    HEXO
  274.         MVI    A,')'
  275.         CALL    TYPE
  276.         POP    PSW
  277.         RET
  278. ;
  279. ;PRINT MESSAGE POINTED TO BY DE REGISTER PAIR
  280. ;
  281. PRINT$MSG:    MVI    C,PRINT
  282.         CALL    BDOS
  283.         RET
  284. ;
  285. ;PRINT CHARACTER ON CONSOLE
  286. ;
  287. TYPE:        PUSH PSW! PUSH B! PUSH D! PUSH H
  288.         MOV    E,A
  289.         MVI    C,WRCON
  290.         CALL    BDOS
  291.         POP H! POP D! POP B! POP PSW
  292.         RET
  293. ;
  294. ;CHECK FOR CTRL-C AND CTRL-D
  295. ;
  296. CHECK$CTRLS:    MVI    C,RDCON
  297.         CALL    BDOS
  298.         CPI    'D'-40H
  299.         JZ    INITIALIZE2
  300.         CPI    'C'-40H
  301.         RNZ
  302.         XRA    A
  303.         OUT    CONTROL$PORT$1    ;TURN OFF MODEM
  304.         OUT    CONTROL$PORT$2
  305.         LHLD    STACK
  306.         SPHL            ;GO BACK TO CP/M
  307.         RET
  308. ;
  309. ;HEX OUTPUT ROUTINE
  310. ;
  311. HEXO:        PUSH    PSW
  312.         RAR! RAR! RAR! RAR
  313.         CALL    NIBBL
  314.         POP    PSW
  315. NIBBL:        ANI    0FH
  316.         CPI    10
  317.         JC    ISNUM
  318.         ADI    7
  319. ISNUM:        ADI    '0'
  320.         CALL    TYPE
  321.         RET
  322. ;
  323. ;
  324. ;
  325.         END    100H
  326.