home *** CD-ROM | disk | FTP | other *** search
/ Phoenix CD 2.0 / Phoenix_CD.cdr / 24b / putmdm.zip / MDM7.ASM next >
Assembly Source File  |  1982-10-18  |  5KB  |  189 lines

  1. ;  ---- I/O DEPENDENT OVERLAY TO FRONT OF MODEM PROGRAM---
  2. ;
  3. ; ==== IBM PC VERSION FOR MAIN SERIAL PORT ====
  4. ;
  5. ;
  6.     ORG    103H
  7.     PUT    103H
  8. ;
  9. ;THESE ROUTINES ARE AT THE BEGINNING OF THE PROGRAM SO
  10. ;THEY CAN BE PATCHED BY A MONITER WITHOUT RE-ASSEMBLING
  11. ;THE PROGRAM.
  12. ;
  13. PMMIBYTE:    DB    FALSE    ;TRUE=PMMI MODEM
  14.                 ; PMMI NOT IMPLEMENTED IN THIS
  15.                 ; VERSION
  16. IMSAIBYTE:    DB    FALSE    ;TRUE=IMSAI FRONT PANEL
  17. FASTCLK:    DB    FALSE    ;8 MHZ OR GREATER
  18. BAKUPBYTE:    DB    TRUE    ;TRUE=MAKE .BAK FILE
  19. XPRFLG:        DB    FALSE    ;TRUE=NO MENU, FALSE=PRINT MENU
  20. ;
  21. XINIT:        JMP    MXINIT    ; INIT MODEM ROUTINES (NOT HARDWARE)
  22. INXMDATA:    JMP    MXIN    ; GET DATA FROM MODEM
  23. OTXMDATA:    JMP    MXOUT    ; OUTPUT DATA TO MODEM
  24. INXSTAT:    JMP    MXISTAT    ; TEST FOR INPUT DATA
  25. OTXSTAT:    JMP    MXOSTAT    ; TEST IF OK TO OUTPUT DATA
  26. XSETXBAUD:    JMP    MXSETBAUD ; SETUP BAUDRATE
  27. JPXINITMOD:    JMP    MXINITH    ; INIT MODEM HARDWARE
  28. ;
  29. MODCTLP:    EQU    3FDH    ; PUT YOUR MODEM CONTROL PORT HERE
  30. MODSNDB:    EQU    20H    ; YOUR BIT TO TEST FOR SEND
  31. MODSNDR:    EQU    20H    ; YOUR VALUE WHEN READY
  32. MODRCVB:    EQU    01H    ; YOUR BIT TO TEST FOR RECEIVE
  33. MODRCVR:    EQU    01H    ; YOUR VALUE WHEN READY
  34. MODDATP:    EQU    3F8H    ; YOUR MODEM DATA PORT
  35. ;
  36. ; --- INPUT DATA FROM MODEM ---
  37. ;
  38. MXIN:    PUSH    DX
  39.     MOV    DX,MODDATP
  40.     INB    DX
  41.     POP    DX
  42.     RET
  43. ;
  44. ; --- OUTPUT DATA TO MODEM ---
  45. ;
  46. MXOUT:    PUSH    DX
  47.     MOV    DX,MODDATP
  48.     OUTB    DX
  49.     POP    DX
  50.     RET
  51. ;
  52. ; --- TEST IF DATA IS AVAILABLE FROM MODEM ---
  53. ;
  54. MXISTAT: PUSH    DX
  55.     MOV    DX,MODCTLP
  56.     INB    DX
  57.     POP    DX
  58.     AND    AL,MODRCVB
  59.     CMP    AL,MODRCVR
  60.     RET        ; RETURN WITH Z SET IF DATA IS READY
  61. ;
  62. ; --- TEST IF MODEM IS READY TO BE SENT NEXT CHAR. ---
  63. ;
  64. MXOSTAT: PUSH    DX
  65.     MOV    DX,MODCTLP
  66.     INB    DX
  67.     POP    DX
  68.     AND    AL,MODSNDB
  69.     CMP    AL,MODSNDR
  70.     RET        ; RETURN WITH Z SET IF MODEM IS READY
  71. ;
  72. ; --- INIT MODEM ROUTINES AND POSSIBLE STARTUP MESSAGE ---
  73. ;    THIS MUST NOT INIT THE MODEM HARDWARE AND NEED
  74. ;        NOT PRESERVE ANY REGISTERS.
  75. ;
  76. MXINIT:    MOV    DX,MSG        ; POINT TO MESSAGE
  77.     MOV    CL,9
  78.     CALL    05H        ; USE BDOS CALL TO PRINT STRING
  79. ;
  80. ;
  81. ; --- INIT THE 8250 FOR 8 BITS, NO PARITY, AND 1 STOP BIT ---
  82. ;
  83.     MOV    DX,MODDATP+3    ; POINT TO LINE CONTROL REG.
  84.     MOV    AL,13H        ; SET TO 8 BITS, NO PARITY, SETUP MODE
  85.     OUTB    DX        ;   1 STOP BIT
  86. ;
  87.     MOV    DX,MODDATP+1    ; POINT TO INTERRUPT ENABLE REG.
  88.     MOV    AL,0
  89.     OUTB    DX        ; DISABLE INTERRUPTS ON THIS UNIT
  90. ;
  91.     MOV    DX,MODDATP+4    ; POINT TO MODEM CONTROL REG.
  92.     MOV    AL,0CH        ; SET  DTR & RTS
  93.     OUTB    DX
  94. ;
  95.     RET
  96. ;
  97. ;CR:    EQU    0DH
  98. ;LF:    EQU    0AH
  99. MSG:    DB    CR,LF
  100.     DB    ' VERSION FOR IBM PC MAIN SERIAL PORT  '
  101.     DB    CR,LF,'$'
  102. ;
  103. ; --- INIT MODEM HARDWARE IF NECESSARY ---
  104. ;    THIS ROUTINE MAY BE CALLED SEVERAL TIMES, SO BE
  105. ;    SURE THAT THIS WILL NOT HANG UP THE HARDWARE.
  106. ;
  107. MXINITH:    RET
  108. ;
  109. ;
  110. ; --- SET HARDWARE BAUDRATE FROM STRING POINTED TO BY---
  111. ;    (H,L).  IF THE STRING STARTS WITH AN ASCII SPACE,
  112. ;    SET THE BAUDRATE TO THE DEFAULT VALUE.  IF THE
  113. ;    REQUEST IS NOT VALID, RETURN WITH CARRY SET.
  114. ;     NOTE: THE INTERNAL ROUTINES ONLY COPY THE
  115. ;          FIRST 3 CHARACTERS OF THE BAUDRATE
  116. ;          INTO THE  STRING POINTED TO BY (H,L)
  117. ;
  118. MXSETBAUD:
  119.     PUSH    BX
  120.     PUSH    DX
  121.     PUSH    CX
  122.     MOV    [PTR],BX         ; SAVE POINTER
  123.     MOV    AL,[BX]        ; GET FIRST CHAR.
  124.     CMP    AL,' '        ; IS IT A SPACE (300 BAUD)
  125.     MOV    DX,B300        ; POINT TO 300 BAUD SEQUENCE
  126.     JZ    SETUP        ; SET BAUDRATE
  127.     MOV    DX,BDTAB         ; POINT TO TABLE OF BAUDRATES
  128.     MOV    CH,NTAB        ; GET # OF ENTRYS TO SEARCH THRU
  129. ;
  130. SLOOP:    MOV    BX,[PTR]         ; GET POINTER TO BAUDRATE STRING
  131.     PUSH    DX        ; SAVE TABLE POINTER
  132. ;
  133.     MOV    CL,3        ; SET LENGTH OF ASCII BAUDRATE
  134. SLOOP1:    MOV    SI,DX
  135.     LODB            ; GET STRING VALUE FROM TABLE
  136.     CMP    AL,[BX]        ; MATCH INPUT STRING?
  137.     JNZ    X1        ; NO, SO TRY NEXT TABLE ENTRY
  138.     INC    BX        ; MATCH, SO INC POINTERS TO TEST NEXT CHAR.
  139.     INC    DX
  140.     DEC    CL        ; COUNT DOWN CHARACTERS
  141.     JNZ    SLOOP1        ; LOOP TO TEST ALL 3 CHARACTERS
  142. ;
  143. X1:    POP    DX        ; GET POINTER BACK
  144.     JZ    SETUP        ; IF MATCH, SET BAUDRATE AND RETURN
  145.     ADD    DX,4        ; POINT TO NEXT TABLE ENTRY
  146.     DEC    CH        ; COUNT DOWN # OF TABLE ENTRYS
  147.     JNZ    SLOOP         ; LOOP TO TEST ALL VALID ENTRYS
  148.     STC            ; SET ERROR CONDITION IF NO MATCH
  149.     JMP    XRET
  150. ;
  151. SETUP:    MOV    BX,3
  152.     ADD    BX,DX        ; POINT TO BAUDRATE SETUP WORDS
  153.     MOV    AL,[BX]        ; GET ONE
  154.     MOV    DX,0        ; SELECT DEVICE #0
  155.     MOV    AH,0        ; SELECT INIT FUNCTION
  156.     INT    14H
  157.     XOR    AL,AL        ; RESET CARRY
  158. XRET:    POP    CX
  159.     POP    DX
  160.     POP    BX
  161.     RET
  162. ;
  163. ;
  164. ; --- BAUDRATE TABLE FOR IBM SETUPS ---
  165. ;      ( AND UART CONTROL BIT )
  166. ;
  167. BDTAB:
  168.     DB    '110',3
  169.     DB    '150',23H
  170. B300:    DB    '300',43H
  171.     DB    '600',63H
  172. ;   HERE INPUTS OF 120,240,480,960 ARE FOR 1200, 2400, ...
  173.     DB    '120',83H
  174. ;
  175.     DB    '240',0A3H
  176.     DB    '480',0C3H
  177.     DB    '960',0E3H
  178. ;
  179. ENTAB:    EQU    $
  180. ;
  181. NTAB:    EQU    8    ; [ENTAB-BDTAB]/5    ; # OF TABLE ENTRYS
  182. ;
  183. PTR:    DS    2        ; BUFFER TO SAVE POINTER
  184. ;
  185. ;
  186.     ORG    300H    ; START OF PROGRAM
  187.     PUT    300H
  188. ; ----------------------------------------------------
  189.