home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / nubye / nuby-ins.lbr / NUCM-1.IQS / nucm-1.ins
Text File  |  1986-04-25  |  5KB  |  145 lines

  1. ; NUCM-1.INS  -   NUBYE insert for Cermetek modems  -  04/21/86
  2. ;
  3. ; Cermetek Infomate 212A modem control package
  4. ;
  5. ; Note:  This is an insert, not an overlay.
  6. ;
  7. ;
  8. ; ========
  9. ;
  10. ; 04/21/86  Modified for NUBYE
  11. ; 07/17/85  Renamed for use with BYE5        - Irv Hoff
  12. ; 12/14/84  Written for BYE3            - Paul Traina
  13. ;
  14. ; ========
  15. ;
  16. ; To use this code, the NUBYE routines for your USART must be modified:
  17. ;
  18. ;    IMODEM    EQU    YES    ; Yes, using intelligent modem
  19. ;    IMAT    EQU    NO    ; Hayes AT commands not supported
  20. ;
  21. ;    After all USART and baud rate instructions have been executed
  22. ;    and IMMEDIATELY after DTR has been set logic true, (DTR must be
  23. ;    On for the Cermetek to receive and execute commands), add the
  24. ;    following:
  25. ;
  26. ;         IF    IMODEM
  27. ;        CALL    IMINIT
  28. ;         ENDIF
  29. ;
  30. ; The following hardware configuration is assumed:
  31. ; -----------------------------------------------
  32. ;    DTR (Pin 20) is supported
  33. ;    DCD (Pin 8) is supported
  34. ;    RI  (Pin 22) is NOT supported
  35. ;
  36. ; The following Infomate 212A default switches are assumed:
  37. ; --------------------------------------------------------
  38. ;    1=On   asynchronous mode
  39. ;    2=Off  8 data bits
  40. ;    3=Off  DCD active only when carrier is present
  41. ;    4=On   host controls DTR
  42. ;    5=On   battery backup enabled
  43. ;    6=Off  not using exclusion key phone
  44. ;    7=On   undocumented, should be on
  45. ;    8=Off  undocumented, should be off
  46. ;
  47. ; Notes:
  48. ; -----
  49. ;    The Cermetek will automatically set itself to the speed of the
  50. ;    calling modem, provided the speed is 300 or 1200 baud.    This
  51. ;    relieves us of the need to set the modem (still have to check
  52. ;    and set the USART/baud), via software instructions.
  53. ;
  54. ; Command strings sent to modem:
  55. ; -----------------------------
  56. ;    a. '  XY\r'
  57. ;           Lets the modem "learn" what baud rate we're using.
  58. ;
  59. ;    b. The meaning of the second command string follows:
  60. ;      '^NN ~'  Set command character to tilde ('~').
  61. ;      '~P 04'  Do not echo commands, disconnect on loss of carrier
  62. ;      '~U 1'   Tell modem to ignore commands when carrier present
  63. ;      '~C 1'   Tell modem to answer phone after first ring
  64. ;
  65. ;    c. When the operator aborts NUBYE by typing a ^C when waiting for
  66. ;       a call to come in, the modem should be sent a command string
  67. ;       to reset it to a more "user-friendly" state, and also tell
  68. ;       the modem to stop answering calls.  This third command string
  69. ;       is as follows:
  70. ;      '^NN ~'  Make sure tilde is command character
  71. ;      '~C 0'   Disable auto-answer
  72. ;      '~P 44'  Echo commands
  73. ;
  74. ; ----------
  75. ;
  76. ; Initialize the Infomate 212a.  DTR must be logic true for the modem to
  77. ; receive and process a command.
  78. ;
  79. IMINIT:    CALL    IMLERN        ; Make modem learn current baud rate
  80.     DB    '  XY',CR
  81.     DB    '  XY',CR,0
  82.     CALL    IMSEND        ; No delay - do not answer the phone
  83.     DB    'N'-40H        ; Send attention character
  84.     DB    'N ~',CR    ; Set new attention character
  85.     DB    '~P 04',CR    ; Disable command echo, enable carrier
  86.     DB    '~U 1',CR    ; Do not process command char if carrier
  87.     DB    '~C 1',CR,0    ; Answer phone after first ring
  88.     RET
  89. ;
  90. ; Send string slowly for modem to find baud rate
  91. ;
  92. IMLERN:    MVI    A,YES        ; Set delay flag to yes
  93.     STA    DLYFLG
  94.     XTHL            ; Save HL and get text address
  95.     PUSH    B        ; Save BC
  96.     JMP    IMSEN1        ; Continue with normal routine
  97. ;
  98. ; De-initialize the Cermetek.  DTR must be set logic true for modem to
  99. ; receive and process a command.  The ring register setting should be
  100. ; set to 0 so that the modem will not answer calls, also some other re-
  101. ; gisters should be reset, then after all is done, the USART routines
  102. ; should turn off DTR.
  103. ;
  104. IMQUIT:    CALL    IMLERN        ; Make modem learn baud rate
  105.     DB    '  XY',CR
  106.     DB    '  XY',CR,0
  107.     CALL    IMSEND        ; No delay - tell modem to shutdown
  108.     DB    'N'-'@'        ; Send attention character
  109.     DB    'N ~',CR    ; Set new attention character
  110.     DB    '~P 44',CR    ; Enable command echo
  111.     DB    '~U 1',CR    ; Do not process command char if carrier
  112.     DB    '~C 0',CR,0    ; Do not answer phone
  113.     RET
  114. ;
  115. ; Send the Command String to the modem, similiar to how ILPRT sends to
  116. ; console.
  117. ;
  118. IMSEND:    XRA    A        ; Make sure there is no delay
  119.     STA    DLYFLG
  120.     XTHL            ; Save HL and get address of message
  121.     PUSH    B        ; Save BC
  122. ;
  123. IMSEN1:    CALL    MDOUTST        ; Get the modem output status
  124.     JZ    IMSEN1        ; Not ready to send yet
  125.     MOV    A,M        ; If ready, get the character
  126.     CALL    MDOUTP        ; Send the character
  127.     INX    H        ; Point to next character
  128.     CALL    DELAY        ; Wait 100 ms here
  129.     MOV    A,M        ; Get next character
  130.     ORA    A        ; Are we all done?
  131.     PUSH    PSW
  132.     LDA    DLYFLG        ; Check to see if we should delay
  133.     ORA    A
  134.     CNZ    DELAY        ; If flag is set, delay another 100ms
  135.     POP    PSW        ; ..for a total of 200ms delay.
  136.     JNZ    IMSEN1        ; If not done, go do another
  137.     POP    B        ; Otherwise restore BC
  138.     XTHL            ; Restore HL and get return address
  139.     RET
  140. ;
  141. DLYFLG:    DB    0        ; Delay flag
  142. ;
  143. ; end of insert
  144. ; -------------
  145.