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 / CPM / CPM86 / M8MPMIN.A86 < prev    next >
Text File  |  2000-06-30  |  19KB  |  657 lines

  1. ;M8MPMIN.A86 -- Overlay file for the CompuPro I3/I4 under MPM86 with
  2. ;         MSUP.RSP installed             09/18/84
  3. ;
  4. ; This overlay adapts the MDM8xx program to the CompuPro Interfacer 3 or
  5. ; Interfacer 4 cards using the 2651 USART chip, running under MPM86 with
  6. ; MSUP.RSP installed.
  7. ;
  8. ; You will want to look this file over carefully. There are a number of
  9. ; options that you can use to configure the program to suit your taste.
  10. ; This file places particular emphasis on using an external modem that
  11. ; is connected to a serial port.  This includes acoustic modems as well
  12. ; as "intelligent" modems such as the Hayes Smartmodem, Racal-Vadic, Bell
  13. ; Dataphone 212A, etc.
  14. ;
  15. ; This overlay is capable of setting the baud rate, disconnecting the
  16. ; modem, and sending breaks.
  17. ;
  18. ;
  19. ;
  20. ;=========================================================================
  21. ;            <<< N O T E >>> 
  22. ;
  23. ;    To use MDM8xx with THIS overlay and running under MPM86 or MPM8-16
  24. ;    You MUST have MSUP.RSP installed.
  25. ;
  26. ;    To Install MSUP run your MPM GENSYS program and answer all questions
  27. ;    as in CompuPros MPM8-16 suplementary Manual except for the Number
  28. ;    of system flags which should be set to 51 .
  29. ;
  30. ;==========================================================================
  31. ;
  32. ;
  33. ;
  34. ;
  35. ;    TO USE: First edit this file filling in answers for your own
  36. ;        equipment.  Then assemble with ASM86.CMD or equivalent
  37. ;        assembler.  Then use PIP to append the results
  38. ;        of this program to the original MDM8xx.H86 file:
  39. ;
  40. ;        ASM86 M8MPMIN
  41. ;        PIP MDM.H86=MDM830.H86,M8MPMIN.H86
  42. ;        GENCMD MDM 8080 CODE[MFF0]
  43. ;
  44. ;
  45. ; =   =      =   =      =   =      =   =      =   =      =   =      =   =      =   =      =   =
  46. ;
  47. ; 09/18/84 - Original Version            - Alex Soya
  48. ;                          P.O. Box 121
  49. ;                          Melbourne Beach
  50. ;                          Florida 32951
  51. ;
  52. ;
  53. ; =   =      =   =      =   =      =   =      =   =      =   =      =   =      =   =      =   =
  54. ;
  55. BELL    EQU    07H            ;bell
  56. CR    EQU    0DH            ;carriage return
  57. ESC    EQU    1BH            ;escape
  58. LF    EQU    0AH            ;linefeed
  59. ;
  60. YES    EQU    0FFH
  61. NO    EQU    0
  62. ;
  63. ; MPM function Call equates:
  64. ;
  65. F_OPQUE EQU    135    ; Open Que
  66. F_RDQUE EQU    138    ; Conditional Read Que
  67. F_WRQUE EQU    140    ; Write to Que
  68. GETSYS    EQU    154    ; Get SYSDAT address
  69. ;
  70. ;
  71. ; Xios Call Function Numbers
  72. ;
  73. XCONST EQU    0    ; XIOS Console Status check
  74. XCONIN EQU    1    ; XIOS Console Input function
  75. XCONOT EQU    2    ; XIOS Console Output
  76. ;
  77. ;
  78. ;
  79. ; Change the following to match your equipment
  80. ;
  81. ;
  82. ; =   =      =   =      =   =      =   =      =   =      =   =      =   =      =   =      =
  83. ;
  84. BASE    EQU    010H            ;base port of CompuPro I3 or I4 cards
  85. UPORT    EQU    BASE+7            ;user (chip select) port
  86. MDM    EQU    6            ;chip that controls modem port
  87. ;
  88. ;
  89. ;
  90. DPORT    EQU    BASE            ;data port
  91. SPORT    EQU    BASE+1            ;status port
  92. MPORT    EQU    BASE+2            ;mode port
  93. CPORT    EQU    BASE+3            ;control port
  94. ;
  95. TBMT    EQU    01H            ;transmit buffer empty
  96. DAV    EQU    02H            ;data available
  97. ;
  98.     ORG    100H
  99. ;
  100. ; Change the clock speed to suit your system
  101. ;
  102.     RS    3            ;(for  "JMP   START" instruction)
  103. ;
  104. PMMIMODEM    DB    NO        ;yes=PMMI S-100 Modem            103H
  105. SMARTMODEM    DB    YES        ;yes=HAYES Smartmodem, no=non-PMMI    104H
  106. TOUCHPULSE    DB    'T'        ;T=touch, P=pulse (Smartmodem-only)    105H
  107. CLOCK        DB    60        ;clock speed in MHz x10, 25.5 MHz max.    106H
  108.                     ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  109. MSPEED        DB    1        ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  110.                     ;6=2400 7=4800 8=9600 9=19200 default
  111. BYTDLY        DB    5        ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  112.                     ;default time to send character in ter-
  113.                     ;minal mode file transfer for slow BBS.
  114. CRDLY        DB    5        ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  115.                     ;default time for extra wait after CRLF
  116.                     ;in terminal mode file transfer
  117. NOOFCOL        DB    5        ;number of DIR columns shown        10AH
  118. SETUPTST    DB    YES        ;yes=user-added Setup routine        10BH
  119. SCRNTEST    DB    YES        ;Cursor control routine            10CH
  120. ACKNAK        DB    YES        ;yes=resend a record after any non-ACK    10DH
  121.                     ;no=resend a record after a valid-NAK
  122. BAKUPBYTE    DB    NO        ;yes=change any file same name to .BAK    10EH
  123. CRCDFLT        DB    YES        ;yes=default to CRC checking        10FH
  124. TOGGLECRC    DB    YES        ;yes=allow toggling of CRC to Checksum    110H
  125. CONVBKSP    DB    NO        ;yes=convert backspace to rub        111H
  126. TOGGLEBK    DB    YES        ;yes=allow toggling of bksp to rub    112H
  127. ADDLF        DB    NO        ;no=no LF after CR to send file in    113H
  128.                     ;terminal mode (added by remote echo)
  129. TOGGLELF    DB    YES        ;yes=allow toggling of LF after CR    114H
  130. TRANLOGON    DB    YES        ;yes=allow transmission of logon    115H
  131.                     ;write logon sequence at location LOGON
  132. RESERVED    DB    YES        ;Reserved for Future Expansion        116H
  133. LOCONEXTCHR    DB    NO        ;yes=local command if EXTCHR precedes    117H
  134.                     ;no=external command if EXTCHR precedes
  135. TOGGLELOC    DB    YES        ;yes=allow toggling of LOCONEXTCHR    118H
  136. LSTTST        DB    YES        ;yes=printer available on printer port    119H
  137. XOFFTST        DB    NO        ;yes=checks for XOFF from remote while    11AH
  138.                     ;sending a file in terminal mode
  139. XONWAIT        DB    NO        ;yes=wait for XON after CR while    11BH
  140.                     ;sending a file in terminal mode
  141. TOGXOFF        DB    YES        ;yes=allow toggling of XOFF checking    11CH
  142. IGNORCTL    DB    NO        ;yes=CTL-chars above ^M not displayed    11DH
  143. EXTRA1        DB    0        ;for future expansion            11EH
  144. EXITCHR        DB    'E'-40H        ;^E = Exit to main menu            11FH
  145. BRKCHR        DB    '@'-40H        ;^@ = Send 300 ms. break tone        120H
  146. NOCONNCT    DB    'N'-40H        ;^N = Disconnect from the phone line    121H
  147. LOGCHR        DB    'L'-40H        ;^L = Send logon            122H
  148. LSTCHR        DB    'P'-40H        ;^P = Toggle printer            123H
  149. UNSAVE        DB    'R'-40H        ;^R = Close input text buffer        124H
  150. TRANCHR        DB    'T'-40H        ;^T = Transmit file to remote        125H
  151. SAVECHR        DB    'Y'-40H        ;^Y = Open input text buffer        126H
  152. EXTCHR        DB    '^'-40H        ;^^ = Send next character        127H
  153. ;
  154. ;
  155.     RS    3            ;                128H
  156. ;
  157. IN@MODCTL1:
  158.     RET                ;in modem control port        12BH
  159.     DB    0,0,0,0,0,0,0,0,0    ; spares
  160. ;
  161. OUT@MODDATP:
  162.     JMP    OMDP            ;out modem data port        135H
  163.     DB    0,0,0,0,0,0,0        ; spares
  164. ;
  165. IN@MODDATP:
  166.     JMP    IMDP            ;in modem data port        13FH
  167.     DB    0,0,0,0,0,0,0        ; spares
  168. ;
  169. ANI@MODRCVB:    RET            ;bit to test for receive ready    149H
  170.         RS    2        ; Nothing to do here for MPM
  171. ;
  172. CPI@MODRCVR:    JMP TSTMODRDY        ;value of rcv. bit when ready    14CH
  173. ;
  174. ;
  175. ANI@MODSNDB:    RET            ;bit to test for send ready    14FH
  176.         RS    2        ; Nothing to do here for MPM
  177. ;
  178. CPI@MODSNDR:    XOR AL,AL        ; test for send ready        152H
  179.         RET            ; Always ready for MPM
  180. ;
  181.     RS    6            ;                156H
  182. ;
  183. OUT@MODCTL1:    RET 
  184.     RS    2            ;out modem control port #2    15BH
  185. ;
  186. OUT@MODCTL2:    RET 
  187.     RS    2            ;out modem control port #1    15EH
  188. ;
  189. LOGONPTR DW    (Offset LOGON)        ;for user message.        161H
  190.     RS    6            ;                163H
  191.  
  192. JMP@GOODBYE:JMP GOODBYE            ;                169H
  193. JMP@INITMOD:JMP INITMOD            ;go to user written routine    16CH
  194.     RET    
  195.     NOP    
  196.     NOP                ;(by-passes PMMI routine)    16FH
  197.     RET    
  198.     NOP    
  199.     NOP                ;(by-passes PMMI routine)    172H
  200.     RET    
  201.     NOP    
  202.     NOP                ;(by-passes PMMI routine)    175H
  203. JMP@SETUPR:    JMP  SETUPR        ;                178H
  204. JMP@SPCLMENU:  JMP  SPCLMENU        ;                17BH
  205. JMP@SYSVER:    JMPS SYSVER        ;make sure this is SHORT Jump    17EH
  206. JMP@BREAK:     JMP  SENDBRK        ;                180H
  207.  
  208. ;
  209. ; Do not change the following six lines.
  210. ;
  211. JMP@ILPRT:
  212.         RS    3        ;                183H
  213. JMP@INBUF:
  214.         RS    3        ;                186H
  215. JMP@INLNCOMP:
  216.         RS    3        ;                189H
  217. JMP@INMODEM:
  218.         RS    3        ;                18CH
  219. JMP@NXTSCRN:
  220.         RS    3        ;                18FH
  221. JMP@TIMER:
  222.         RS    3        ;                192H
  223. JMP@CTYPE:
  224.         RS    3        ;                195H
  225. JMP@KEYIN:
  226.         RS    3        ;                198H
  227.  
  228. ;
  229. ;
  230. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  231. ; SCRNTEST to YES at 010AH (above).
  232. ;
  233. CLREOS: CALL    JMP@ILPRT        ;                195H
  234.     DB    ESC,'Y',0,0,0        ;                198H
  235.     RET                ;                19DH
  236. ;
  237. CLRSCRN:CALL    JMP@ILPRT        ;                19EH
  238.     DB    ESC,'*',0,0,0        ;                1A1H
  239.     RET                ;                1A6H
  240. ;
  241. SYSVER: CALL    JMP@ILPRT        ;                1A7H
  242.     DB    'Version for CompuPro '
  243.     DB    'Interfacer-3 or 4 under MPM86 with MSUP.RSP'
  244.     DB    CR,LF,0
  245.     RET
  246. ;.....
  247. ;
  248. ;
  249. ;-----------------------------------------------------------------------
  250. ;
  251. ; NOTE:     You can change the SYSVER message to be longer or shorter.  The
  252. ;     end of your last routine should terminate by 0400H (601 bytes
  253. ;     available after start of SYSVER) if using the Hayes Smartmodem
  254. ;     or by address 0C00H (2659 bytes) otherwise.
  255. ;
  256. ;-----------------------------------------------------------------------
  257. ;
  258. ; You can put in a message at this location which can be called up with
  259. ; CTL-L if TRANLOGON has been set TRUE.     You can use several lines if
  260. ; desired.  End with a 0.
  261. ;
  262. LOGON    DB    ' Isnt it nice to run 2 modem programs'
  263.     DB    ' at the same time?',CR,LF,0
  264. ;
  265. ;.....
  266. ;
  267. ;
  268. ;
  269. ;
  270. ;....
  271. ;
  272. ;
  273. ; Add your own routine here to send a byte in AL to Modem Data Port
  274. ;
  275. OMDP:                ; Send a character to the Modem console [MPM]
  276.     PUSH DX            ; savem                [MPM]
  277.     PUSH CX            ;                [MPM]
  278.     PUSH BX            ;                [MPM]
  279.     PUSH DS            ;                [MPM]
  280.     MOV CL,AL        ; Character to CL for XIOS    [MPM]
  281.     MOV DL,COMCHA        ; Console no to DL for XIOS    [MPM]
  282.     MOV AL,XCONOT        ; Send the guy out to modem    [MPM]
  283.     CALLF CS:DWORD PTR XIOS ; via xios call            [MPM]
  284.     POP DS            ;                [MPM]
  285.     POP BX            ;                [MPM]
  286.     POP CX            ; restore regs            [MPM]
  287.     POP DX            ;                [MPM]
  288.     RET            ;                [MPM]
  289.  
  290. ;
  291. ;
  292. ;....
  293. ;
  294. ; Add your own routine here to read Modem Data Port into AL
  295. ;
  296. IMDP:            ; Get a character from Modem Console    [MPM]
  297.     PUSH DX            ; savem                [MPM]
  298.     PUSH CX            ;                [MPM]
  299.     PUSH BX            ;                [MPM]
  300.     PUSH DS            ;                [MPM]
  301.     MOV CL,COMCHA        ; Get character to AL via    [MPM]
  302.     MOV AL,XCONIN        ; XIOS function call CONIN    [MPM]
  303.     CALLF CS:DWORD PTR XIOS ;                [MPM]
  304.     POP DS            ;                [MPM]
  305.     POP BX            ;                [MPM]
  306.     POP CX            ; restore regs            [MPM]
  307.     POP DX            ;                [MPM]
  308.     RET            ;                [MPM]
  309. ;
  310. ;
  311. ;......
  312. ;
  313. ;
  314. TSTMODRDY:        ; see if a char is ready for caller    [MPM]
  315.     PUSH DX            ;                [MPM]
  316.     PUSH CX            ; savem                [MPM]
  317.     PUSH BX            ;                [MPM]
  318.     PUSH DS            ;                [MPM]
  319.     MOV AL,XCONST        ; Check Console Status via XIOS [MPM]
  320.     MOV CL,COMCHA        ; Modem is a CONSOLE        [MPM]
  321.     CALLF CS:DWORD PTR XIOS ;                [MPM]
  322.     CMP AL,0FFH        ;                [MPM]
  323.     JE CONRDY        ; IS CONSOLE READY ?        [MPM]
  324.     MOV AL,0FFH        ; nope...            [MPM]
  325.     JMPS CPIEX        ;    tell caller and exit here    [MPM]
  326. CONRDY: MOV AL,0        ; yeap...            [MPM]
  327. CPIEX:    OR AL,AL        ;    nope so tell caller    [MPM]
  328.     POP DS            ;                [MPM]
  329.     POP BX            ;                [MPM]
  330.     POP CX            ;                [MPM]
  331.     POP DX            ;                [MPM]
  332.     RET            ;                [MPM]
  333. ;.....
  334. ;
  335. ;
  336. ;
  337. ; Add your own routine here to send a break tone to reset some time-
  338. ; share computers, if desired.
  339. ;
  340. SENDBRK:PUSHF            ; disable Interupts
  341.     CLI
  342.     CALL    SELECT            ;select chip
  343.     MOV    AL,2FH            ;send break for 300ms
  344.     JMPS    GOODBYE1
  345. ;.....
  346. ;
  347. ;
  348. ; Add your own routine here to put DTR low and/or send a break tone.
  349. ;
  350. GOODBYE:PUSHF            ; disable Interupts
  351.     CLI
  352.     CALL    SELECT
  353.     XOR    AL,AL            ;turn off DTR
  354. ;
  355. GOODBYE1:
  356.     OUT    CPORT,AL
  357.     MOV    CH,3            ;turn off DTR for 300 ms.
  358.     POPF                ; restore interupts
  359.     CALL    JMP@TIMER
  360.     PUSHF
  361.     CLI                ; disable Interupts again
  362.     CALL    SELECT
  363.     MOV    AL,27H            ;turn DTR back on
  364.     OUT    CPORT,AL
  365.     POPF                ; Interupts ok again
  366.     RET
  367. ;.....
  368. ;
  369. ;
  370. ; You can use this area for any special initialization or setup you may
  371. ; wish to include.  Each must stop with a RET.    You can check the other
  372. ; available overlays for ideas how to write your own routines if that
  373. ; may be of some help.
  374. ;
  375. ;The following is used to initialize the xios and MXqueues for execution
  376. ;of MDM86.
  377. ;
  378. INITMOD:
  379.     MOV CL,GETSYS        ; Find SYSDAT            [MPM]
  380.     INT 224            ; In MPM            [MPM]
  381.     MOV AX,ES:.28H        ; Find XIOS OFFSET        [MPM]
  382.     MOV CS:XIOS,AX        ;                [MPM]
  383.     MOV AX,ES:.28H+2    ; Find XIOS SEGMENT        [MPM]
  384.     MOV CS:XIOS+2,AX    ;                [MPM]
  385.  
  386.     CMP  BYTE PTR COMCHA,0    ; Do we have a COM channel?    [MPM]
  387.     JE  OPQU        ; Yep, Continue Initialization    [MPM]
  388.     JMP CONINT        ;                [MPM]
  389.  
  390. OPQU:    MOV CL,161        ; Attach LIST device        [MPM]
  391.     INT 224            ;                [MPM]
  392.     OR AX,AX        ; did we get it ?        [MPM]
  393.     JE FCOMS        ;   Yes, Proceed with COMS    [MPM]
  394.     CALL JMP@ILPRT        ; No, say so            [MPM]
  395.     DB cr,lf,'+++ Printer Busy, NOT ATTACHED +++',cr,lf,0 ; [MPM]
  396.  
  397. FCOMS:    MOV AL,1        ; Find available COM channels    [MPM]
  398.     XOR BX,BX        ; Start with Com Channel 1    [MPM]
  399. NXTQ:    PUSH AX
  400.     PUSH BX
  401.     ADD AL,30H        ; Make Ascii COMCH        [MPM]
  402.     MOV QPBNAM+7,AL        ;                [MPM]
  403.     MOV CL,F_OPQUE        ; Open the que            [MPM]
  404.     MOV DX, OFFSET MXQPB    ;                [MPM]
  405.     INT 224            ;                [MPM]
  406.  
  407.     MOV CL,F_RDQUE        ; Can we read from the que ?    [MPM]
  408.     MOV DX, OFFSET MXQPB    ; Lets give it a try..        [MPM]
  409.     INT 224            ;                [MPM]
  410.  
  411.     OR  AX,AX        ; Was it a good read ?        [MPM]
  412.     JE  GOTCOM        ; we got a COM channel        [MPM]
  413.     POP BX            ;                [MPM]
  414.     POP AX            ; restore these suckers        [MPM]
  415. COMNEX: INC AL            ; and try next            [MPM]
  416.     CMP AL,6        ; done them all ?        [MPM]
  417.     JGE FNDALL        ;   YEP, All channels found    [MPM]
  418.     JMP NXTQ        ; NOPE, Play it again SAM    [MPM]
  419.  
  420. GOTCOM: POP BX            ;                [MPM]
  421.     POP AX            ;                [MPM]
  422.     MOV COMLST[BX],AL    ; Put Channel in list        [MPM]
  423.     INC BX            ;                [MPM]
  424.     JMPS COMNEX        ; and try one more        [MPM]
  425.  
  426. FNDALL: CMP COMLST,0        ; Ok, lets see what we got    [MPM]
  427.     JE  NOCOMS        ; Nothing, so tell the guy    [MPM]
  428.     CMP COMLST+1,0        ; More than one COM channel ?    [MPM]
  429.     JE SING            ; YEAP, Lets be generous    [MPM]
  430.     JMP COMCHC        ;                [MPM]
  431. SING:    MOV AL,BYTE PTR COMLST    ; NOPE, One is all we need    [MPM]
  432.     MOV BYTE PTR COMCHA,AL    ; Keep it for us        [MPM]
  433.     ADD AL,30H        ; make ASCII Channel number    [MPM]
  434.     MOV TELONE,AL        ; stuff into message        [MPM]
  435.     CALL JMP@ILPRT        ; Tell the guy what the deal is [MPM]
  436.     DB cr,lf,'Only One COM channel available',cr,lf ;    [MPM]
  437.     DB 'Communications Channel '            ;    [MPM]
  438. TELONE    DB '0'            ;                [MPM]
  439.     DB ' connected.',cr,lf,lf,0            ;    [MPM]
  440.     JMP  CONINT        ; Now do rest of initialization [MPM]
  441.  
  442. NOCOMS: CALL JMP@ILPRT        ; Ah well, better luck next time[MPM]
  443.     db cr,lf,'+++ NO COMMUNICATIONS CHANNEL AVAILABLE +++' ;[MPM]
  444.     db cr,lf,0        ;                [MPM]
  445.     MOV CL,0
  446.     INT 224            ; Have a nice one.....        [MPM]
  447. COMCHC: CALL JMP@ILPRT        ; Give him CHOICE of channels    [MPM]
  448.     DB cr,lf,'Available Communication Channels : ',0 ;    [MPM]
  449.     XOR BX,BX        ;                [MPM]
  450. COMDIP: MOV AL,COMLST[BX]    ; Get a Channel #        [MPM]
  451.     CMP AL,0        ; Is there one there ? Phew..    [MPM]
  452.     JE  GETCEL        ; Nope, Get Console selection    [MPM]
  453.     ADD AL,30H        ; Make ASCII            [MPM]
  454.     CALL JMP@CTYPE        ; Send it out            [MPM]
  455.     CMP COMLST+1[BX],0    ; More to do            [MPM]
  456.     JE PNXT            ; YES put in a comma        [MPM]
  457.     MOV AL,','        ;                [MPM]
  458.     CALL JMP@CTYPE        ;                [MPM]
  459.     MOV AL,' '        ;                [MPM]
  460.     CALL JMP@CTYPE        ;                [MPM]
  461. PNXT:    INC BX            ; Next...            [MPM]
  462.     JMPS COMDIP        ;                [MPM]
  463.  
  464. GETCEL: CALL JMP@ILPRT        ;                [MPM]
  465.     DB CR,LF,'Enter Selection :',0     ;            [MPM]
  466.     CALL JMP@KEYIN        ; Get Anser            [MPM]
  467.     PUSH AX            ;                [MPM]
  468.     CALL JMP@CTYPE        ; Echo it            [MPM]
  469.     POP  AX            ;                [MPM]
  470.     SUB AL,30H        ; deASCII            [MPM]
  471.     XOR BX,BX        ; Valid COMM Channel ?        [MPM]
  472. CONFRM: CMP COMLST[BX],0    ; Lets go through what we got    [MPM]
  473.     JE INVLID        ; Ah well he wasnt too clever    [MPM]
  474.     CMP COMLST[BX],AL    ; WELL ?            [MPM]
  475.     JE COMOK        ; YEAP, all is fine        [MPM]
  476.     INC BX            ; and look for another one    [MPM]
  477.     JMPS CONFRM        ;                [MPM]
  478.  
  479. INVLID: CALL JMP@ILPRT        ; Give out            [MPM]
  480.     DB cr,lf,'+++ INVALID SELECTION +++',cr,lf,0    ;    [MPM]
  481.     JMP COMCHC        ; Here we go again ....        [MPM]
  482.  
  483. COMOK:    MOV COMCHA,AL        ; Keep the Channel        [MPM]
  484.     XOR BX,BX        ; Now write back what we dont    [MPM]
  485. WRTMX:    CMP COMLST[BX],0    ; Need.     End of list ?        [MPM]
  486.     JE CONINT        ; YEap..  ah thats nice...    [MPM]
  487.     MOV AL, BYTE PTR COMCHA ;                [MPM]
  488.     CMP COMLST[BX],AL    ;                [MPM]
  489.     JE MYCOM        ; DONT WRITE BACK THE ONE I WANT[MPM]
  490.     MOV CL,F_OPQUE        ;                [MPM]
  491.     MOV DX, OFFSET MXQPB    ;                [MPM]
  492.     MOV AL,COMLST[BX]    ; Make que name            [MPM]
  493.     ADD AL,30H        ; In ASCII please        [MPM]
  494.     MOV QPBNAM+7,AL        ;                [MPM]
  495.     PUSH BX            ;                [MPM]
  496.     INT 224            ;                [MPM]
  497.     MOV CL,F_WRQUE        ;                [MPM]
  498.     MOV DX, OFFSET MXQPB    ;                [MPM]
  499.     INT 224            ;                [MPM]
  500.     POP BX            ;                [MPM]
  501. MYCOM:    INC BX            ; WRITE NEXT ONE        [MPM]
  502.     JMPS WRTMX        ;                [MPM]
  503.  
  504.  
  505.  
  506. CONINT: PUSHF            ; disable Interrupts        [MPM]
  507.     CLI
  508.     CALL    SELECT        ; select chip
  509. ;
  510.     MOV    AL,4EH            ;select 8 data bits, no parity, 1 stop
  511.     OUT    MPORT,AL
  512. ;
  513.     MOV    BL,Byte Ptr MSPEED    ;Get Baud rate
  514.     DEC    BL            ;Adjust for Offset into table
  515.     XOR    BH,BH
  516.     MOV    AL,Byte Ptr BDTBL[BX]
  517.     OUT    MPORT,AL
  518.     MOV    AL,27H            ;turn on DTR etc.
  519.     OUT    CPORT,AL
  520.     POPF                ; restore Interrupts    [MPM]
  521.     RET
  522. ;.....
  523. ;
  524. ;
  525. ; Use the 'SET' command to select a desired baud rate
  526. ;
  527. SETUPR: MOV    DX,(Offset BAUDBUF)    ;point to new input buffer
  528.     CALL    JMP@ILPRT
  529.     DB    'Input Baud Rate (300, 600, 1200, 2400, 4800, 9600, 19200): ',0
  530.     CALL    JMP@INBUF
  531.     MOV    DX,(Offset BAUDBUF)+2
  532.     CALL    JMP@INLNCOMP        ;compare BAUDBUF+2 with characters below
  533.     DB    '300',0
  534.     JNB    OK300            ;go if got match
  535.     CALL    JMP@INLNCOMP
  536.     DB    '600',0
  537.     JNB    OK600
  538.     CALL    JMP@INLNCOMP
  539.     DB    '1200',0
  540.     JNB    OK1200
  541.     CALL    JMP@INLNCOMP
  542.     DB    '4800',0
  543.     JNB    OK4800
  544.     CALL    JMP@INLNCOMP
  545.     DB    '2400',0
  546.     JNB    OK2400
  547.     CALL    JMP@INLNCOMP
  548.     DB    '9600',0
  549.     JNB    OK9600
  550.     CALL    JMP@INLNCOMP
  551.     DB    '19200',0
  552.     JNB    OK19200
  553.     CALL    JMP@ILPRT        ;all matches failed, tell operator
  554.     DB    '++ Incorrect entry ++',CR,LF,BELL,0
  555.     JMP    SETUPR            ;try again
  556. ;
  557. OK300:    MOV    AL,1            ;MSPEED 300 baud value
  558.     JMPS    LOADBD            ;go load everything
  559. ;
  560. OK600:    MOV    AL,3
  561.     JMPS    LOADBD
  562. ;
  563. OK1200: MOV    AL,5
  564.     JMPS    LOADBD
  565. ;
  566. OK2400: MOV    AL,6
  567.     JMPS    LOADBD
  568. ;
  569. OK4800: MOV    AL,7
  570.     JMPS    LOADBD
  571. ;
  572. OK9600: MOV    AL,8
  573.     JMPS    LOADBD
  574. ;
  575. OK19200:MOV    AL,9
  576. ;
  577. LOADBD: MOV    Byte Ptr MSPEED,AL    ;change time-to-send to match baudrate
  578.     JMP    CONINT            ;reinitialize to new baudrate, then done
  579. ;...
  580. ;
  581.  
  582.  
  583. ;
  584. SELECT:
  585.     PUSH    AX
  586.     PUSH    BX
  587.     MOV    BL,COMCHA    ; Translate Comm. Channel    [MPM]
  588.     MOV    BH,0        ; make 16 bit            [MPM]
  589.     MOV    AL,CTRTBL[BX]    ; Get corresponding port    [MPM]
  590.     OUT    UPORT,AL    ; Select USART
  591.     POP    BX
  592.     POP    AX
  593.     RET
  594. ;
  595. ;
  596. CTRTBL    DB    -1        ; COMCHANNEL 0 DOES NOT EXIST    [MPM]
  597.     DB    7
  598.     DB    6
  599.     DB    3
  600.     DB    2
  601.     DB    1
  602.     DB    0
  603.     DB    4
  604.     DB    5
  605. ;....
  606. ;
  607. ;
  608. ; TABLE OF BAUDRATE PARAMETERS
  609. ;
  610. BD300    EQU    35H            ;300  baud
  611. BD450    EQU    0            ;450  baud NOT SUPPORTED
  612. BD600    EQU    36H            ;600  baud
  613. BD710    EQU    0            ;710  baud NOT SUPPORTED
  614. BD1200    EQU    37H            ;1200 baud
  615. BD2400    EQU    3AH            ;2400 baud
  616. BD4800    EQU    3CH            ;4800 baud
  617. BD9600    EQU    3EH            ;9600 baud
  618. BD19200 EQU    3FH            ;19200 baud
  619. ;
  620. BAUDBUF DB    10,0
  621.     RS    10
  622.  
  623. BDTBL    DB    BD300,BD450,BD600,BD710,BD1200,BD2400,BD4800,BD9600,BD19200
  624. ;
  625. XIOS    DW 0        ; keep XIOS offset here        [MPM]
  626.     DW 0        ; keep XIOS segment here    [MPM]
  627.  
  628. ;
  629. ;
  630. COMCHA    DB 0                ; COMCHANNEL USED HERE        [MPM]
  631. COMLST    DB 0,0,0,0,0,0,0,0,0        ; MAX 8 CHANNELS + END MAKER    [MPM]
  632.  
  633. MXQPB    DW    0    ;MXmodemN Que Parameter Block            [MPM]
  634.     DW    0    ;                        [MPM]
  635.     DW    1    ;                        [MPM]
  636.     DW    OFFSET QUEBUF                ;        [MPM]
  637. qpbnam    DB    'MXmodem '
  638.  
  639. quebuf    dw    0
  640.  
  641. ;
  642. ;           (END OF INITMOD AND SETUP ROUTINES)
  643. ;=======================================================================
  644. ;
  645. ;
  646. ; If using the Hayes Smartmodem this is unavailable without a special
  647. ; change.
  648. ;
  649. SPCLMENU:RET
  650. ;
  651. ;
  652. ; NOTE:     MUST TERMINATE PRIOR TO 0400H (with Smartmodem)
  653. ;                 0C00H (without Smartmodem)
  654. ;.....
  655. ;
  656.     END
  657.