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