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 / MODEMS / MODEM / MDMBRATE.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  12KB  |  330 lines

  1. ************************************************************************
  2.  
  3.         UNIVERSAL BAUD RATE SELECTION ROUTINE FOR MODEM PROGRAMS
  4.                           By: Rory Jan (6/82)
  5.                              Rexdale, Ont.
  6.  
  7. Note:  This is not a stand alone program,  it is merely an upgrade  that 
  8. can be incorporated into most MODEM/XMODEM programs.
  9.  
  10. This  file  contains  a new GETBAUD subroutine (S/R) for  use  with  the 
  11. series of MODEM/XMODEM programs. This S/R uses look-up tables to preform 
  12. it's  wonders (instead of hardware dependent  calculations).  What  this 
  13. means  is  no  matter what type of programable baud rate  generator  you 
  14. have,  you will now be able to use the option of specifying a baud  rate 
  15. when you invoke the modem program.  Of course, if you're lucky enough to 
  16. already  be able to do that,  then this file is of ALMOST no use to  you 
  17. (read on).
  18.  
  19. The  format  of  the baud rate selection option on the command  line  is 
  20. slightly different,  it must be entered in 100's of baud instead of just 
  21. baud (eg.  MODEM T.6 means 600 baud).  This allows the specification  of 
  22. baud  rates up to 25500 as opposed to 999 max using the previous  format 
  23. (this  is due to the 3 baud rate char limit on the command line).  Along 
  24. with the new GETBAUD S/R,  this file also contains a debugged CVBIN  S/R 
  25. (the  CVBIN S/R found in MODEM217 doesn't work but may have already been 
  26. corrected  by  now) and updated HELP and EXAM S/R's  which  reflect  the 
  27. slightly  different  baud  rate  selection  format  (using  IF/ENDIF's). 
  28. Although CVBIN,  HELP & EXAM were taken from MODEM217, they should still 
  29. be  direct  replacements  for  the corresponding  S/R's  in  most  MODEM 
  30. programs.
  31.  
  32. This  MODEM/XMODEM  update  is  provided  in the form  of  S/R's  to  be 
  33. incorporated  into your own modem program simply because there  are  too 
  34. many versions of MODEM to provide diff files for (and if you altered the 
  35. program  much,  you couldn't use the diff file anyway).  Therefore,  you 
  36. must  at least know roughly what 8080 (blaaaa) assembly language is  all 
  37. about to stick this routine in (it's veeeeery easy).
  38.  
  39. It would be a great service to all new Modemites if some generous person 
  40. would  take  the latest and greatest MODEM program and replace  all  the 
  41. IF/ENDIF'd  stuff  in the GETBAUD S/R with this universal  S/R  and  put 
  42. EQU's near the start of the file to specify allowable baud rates and the 
  43. corresponding  baud rate gen.  (or modem or serial interface or...) data 
  44. required.  This  way  most  people could avoid the hastle  of  having  3 
  45. versions of their modem  program for 3 different baud rates.
  46.  
  47. Now for the routines...
  48.  
  49. ************************************************************************
  50.  
  51.                          SETTING UP THE TABLES
  52.  
  53. The  tables are presently set up for a COM5016 dual baud rate generator. 
  54.  
  55. Table 1 (BRTBL1) simply contains the baud rate that would be entered  on 
  56. the  command  line (actual values,  not ASCII),  see present set-up  for 
  57. example.
  58.  
  59. Table  2  (BRTBL2)  contains  the  corresponding  baud  rate   generator 
  60. programing data (eg.  in the present set-up, 0EEH is brate gen. data for 
  61. 9600 baud).
  62.  
  63. The  2  tables can be changed to any length as long as size of BRTBL1  = 
  64. size of BRTBL2 (obviously...).
  65.  
  66. ************************************************************************
  67.  
  68.                           ROUTINE (???) NOTES
  69.  
  70. - If  you know the CVBIN S/R in your MODEM  prog.  works,  don't  bother 
  71. replacing it with this one.
  72. - If you aren't worried about the 'help' and 'example' information being 
  73. completely correct, don't replace (or update) it either.
  74. - The  S/R ERXIT CALLed from BADRATE simply prints the message  directly 
  75. following  the  call,  then exits the prog.  I'm sure you have the  same 
  76. routine, but the name could be different (not likely).
  77. - If it's not already in your prog, put a DEFBAUD EQU 0XXH ;DEFAULT BAUD 
  78. RATE  GEN  DATA statement near the start of the file and set it  to  the 
  79. BAUD RATE GEN data for your default baud rate.
  80. - Add  the statement BRGNLUP EQU TRUE ;TRUE,  USES LOOK-UP  TABLE  BRATE 
  81. SELECT near the modem type select options at the beginning of the file. 
  82. - The INITREQ label should be set TRUE (else how else can you init  your 
  83. baud  rate  gen).  If  you  normally  set  it  FALSE,  you  can  prevent 
  84. initialization  of everything but the baud rate buy removing all but the 
  85. two statements shown below from the INITMD (INITMOD) S/R.
  86. - Replace your similar statements:
  87.     MVI    A,DEFBAUD    ;INIT TO DEFAULT BAUD RATE
  88.     OUT    BAUDRP
  89.   with:
  90.     CALL    GETBAUD        ;GET BAUD RATE GEN DATA
  91.     OUT    BAUDRP
  92.  
  93. ************************************************************************
  94.  
  95.                             INSTALLING S/R'S
  96.  
  97. - Depending  on your style (or your mood),  you may want to install  the 
  98. new GETBAUD S/R using IF/ENDIF's, or you may just feel like removing the 
  99. original  stuff (it isn't used anyway) and putting this one straight in. 
  100. Which ever way you do it,  make sure it (and only it) gets assembled.  I 
  101. used a new label (BRGNLUP - baud rate gen look-up) and IF/ENDIF's myself 
  102. (IF/ENDIF's in S/R's below are for MODEM217).
  103. - If  your CVBIN S/R needs to be corrected,  simply substitute this  one 
  104. for  your infested one (or if you don't have one at all,  stick this one 
  105. in immediately after the GETBAUD S/R).
  106. - If you want to replace your HELP & EXAM S/R's, do just that.
  107.  
  108. That's all folks...
  109. WOW! What a massive amount of typing for such a pitifully small routine.
  110.                     R. Jan
  111.  
  112. ************************************************************************
  113.                               S/R GETBAUD
  114. ************************************************************************
  115. ;      
  116. ;---->    GETBAUD: GETS BAUD RATE FROM COMMAND
  117. ;
  118. ;    THIS ROUTINE CHECKS IF A BAUD RATE HAS BEEN
  119. ;    ASKED FOR, (SUCH AS MODEM T.6 FOR 600 BAUD),
  120. ;    AND IF SO, CALCULATES THE BAUD RATE GENERATOR
  121. ;    VALUE TO BE RETURNED (IN A), ELSE DEFAULTS
  122. ;    TO 'DEFBAUD'.
  123. ;
  124.     IF    BRGNLUP
  125. ;
  126. GETBAUD    LDA    FCB+9        ;GET 'FILETYPE'
  127.     CPI    ' '        ;USE DEFAULT?
  128.     MVI    A,DEFBAUD    ;JUST IN CASE
  129.     RZ            ;USE 'DEFBAUD'
  130. ;
  131.     CALL    CVBIN        ;GET BAUD RATE IN BINARY (/100)
  132. ;
  133.     MOV    A,H        ;INVALID BAUD RATE?
  134.     CPI    0        ;(I.E > 25500)
  135.     JNZ    BADRATE        ;INVALID
  136. ;
  137.     LXI    D,BRTBL1-1    ;INIT PTR TO BRATE TABLE
  138. GETBD2    INX    D        ;UPDATE PTR
  139.     MOV    A,E        ;END OF TABLE 1?
  140.     CPI    BRTBL2 MOD 256
  141.     JZ    BADRATE        ;YES, INVALID BAUD RATE
  142.     LDAX    D        ;GET VAL FROM TABLE 1
  143.     CMP    L        ;MATCH?
  144.     JNZ    GETBD2        ;NOT YET, CONTINUE
  145.     LXI    H,BRTBL2-BRTBL1    ;SET HL TO POINT TO CORRESPONDING
  146.                 ;VAL IN TABLE 2
  147.     DAD    D
  148.     MOV    A,M        ;GET BRATE GEN DATA
  149.     RET
  150. ;
  151. ; COM5016 BAUD RATE TABLE (IN HUNDREDS OF BAUD)
  152. ;
  153. BRTBL1    DB    1        ;110 BAUD
  154.     DB    3        ;300 BAUD
  155.     DB    6        ;600 BAUD
  156.     DB    12        ;1200 BAUD, ETC.
  157.     DB    18
  158.     DB    20
  159.     DB    24
  160.     DB    36
  161.     DB    48
  162.     DB    72
  163.     DB    96
  164.     DB    192        ;19200 BAUD
  165. ;
  166. ; CORRESPONDING CONTROL VALUES FOR ABOVE BAUD RATES
  167. ;
  168. BRTBL2    DB    22H        ;110 BAUD
  169.     DB    55H        ;300 BAUD, ETC.
  170.     DB    66H
  171.     DB    77H
  172.     DB    88H
  173.     DB    99H
  174.     DB    0AAH
  175.     DB    0BBH
  176.     DB    0CCH
  177.     DB    0DDH
  178.     DB    0EEH
  179.     DB    0FFH        ;19200 BAUD
  180. ;
  181.     ENDIF            ;BRGNLUP
  182. ************************************************************************
  183.                                S/R CVBIN
  184. (don't  forget  to  make sure things are assembled  if  you  stick  them 
  185. between IF/ENDIF's)
  186. ************************************************************************
  187. ;                                       
  188. ; ROUTINE TO CONVERT BAUD RATE SPECIFIED ON COMMAND
  189. ; LINE TO BINARY (HEX). VAL RETURNED IN HL
  190. ;
  191.     IF    PMMI OR DCH OR BRGNLUP    ;(eg. as in MODEM217)
  192. ;
  193. CVBIN    LXI    D,FCB+9        ;PNT TO ASCII VAL
  194.     LXI    H,0        ;INIT BINARY RESULT
  195. ;
  196. DECLP    MOV    A,E        ;DONE?
  197.     CPI    FCB+12 MOD 256
  198.     RZ            ;YEP, RETURN HEX IN HL
  199.     LDAX    D        ;GET ASCII DIGIT
  200.     INX    D        ;PNT TO NEXT DIGIT
  201.     CPI    ' '        ;BLANK ONE?
  202.     JZ    DECLP        ;..YES, SKIP IT
  203.     CPI    '0'        ;VALIDATE IT
  204.     JC    BADRATE     ;ERROR
  205.     CPI    '9'+1        ;VALIDATE
  206.     JNC    BADRATE     ;ERROR
  207.     SUI    '0'        ;MAKE DIGIT BINARY
  208. ;
  209. ; MULTIPLY PREV VALUE BY 10
  210. ;
  211.     MOV    B,H        ;SET UP FOR
  212.     MOV    C,L        ;MULTIPLY BY 10
  213.     DAD    H        ;MULTIPLY BY 2
  214.     DAD    H        ;X 2 = 4
  215.     DAD    B        ;+ 1 = 5
  216.     DAD    H        ;X 2 = 10
  217.     ADD    L        ;ADD IN DIGIT
  218.     MOV    L,A        ;SAVE BACK
  219.     JNZ    DECLP        ;NO CARRY?
  220.     INR    H        ;ADD IN CARRY
  221.     JMP    DECLP        ;NEXT DIGIT
  222. ;
  223. ; INVALID BAUD RATE
  224. ;
  225. BADRATE CALL    ERXIT
  226.     DB    '++INVALID BAUD RATE++$'
  227. ;
  228.     ENDIF            ;PMMI OR DCH OR BRGNLUP
  229. ************************************************************************
  230.                            S/R'S HELP & EXAM
  231. ************************************************************************
  232. ;
  233. ; ROUTINES TO GIVE HELP AND EXAMPLES
  234. ; HELP/EXAMPLE DATA IS AUTOMATICALLY ADJUSTED USING
  235. ; IF/ENDIF'S TO SHOW CORRECT BAUD RATE SELECT FORMAT
  236. ;
  237. HELP    CALL    ILPRT
  238.     DB    '(T)erminal and (E)cho mode commands:',CR,LF
  239.     DB    '   Ctl-A = Ascii capture enable/disable toggle',CR,LF
  240.     DB    '   Ctl-E = Exit to CP/M',CR,LF
  241.     DB    '   Ctl-D = Disconnect phone',CR,LF
  242.     DB    '   Ctl-P = Printer enable/disable toggle',CR,LF,CR,LF
  243.     DB    'Format for command is:',CR,LF,CR,LF
  244.     DB    'MODEM # Filename',CR,LF,CR,LF
  245.     DB    'Where # is a 1 character primary option,',CR,LF
  246.     DB    ' which may be followed by sub-options,',CR,LF
  247.     DB    ' and by ".xxx" to set baud rate to'
  248.     IF    BRGNLUP
  249.     DB    CR,LF,' xxx*100 (i.e. enter baud rate in 100''s)'
  250.     ENDIF
  251.     IF    NOT BRGNLUP
  252.     DB    ' xxx'
  253.     ENDIF
  254.     DB    CR,LF,CR,LF,1
  255.     DB    'Primary Options:',CR,LF
  256.     DB    '   S to send a file',CR,LF
  257.     DB    '   R to receive a file',CR,LF
  258.     DB    '   T to act as a terminal',CR,LF
  259.     DB    '   E to act as a computer (echo data)',CR,LF
  260.     DB    '   D to disconnect the phone',CR,LF
  261.     DB    '   H to print this help file',CR,LF,CR,LF,1
  262.     DB    'Secondary options:',CR,LF
  263.     DB    '   A answer mode',CR,LF
  264.     DB    '   O originate mode',CR,LF
  265.     DB    '   D disconnect after execution',CR,LF
  266.     DB    '   T go to terminal mode after file xfer',CR,LF
  267.     DB    '   E go to echo mode after file xfer',CR,LF
  268.     DB    '   Q quiet mode - no status msgs',CR,LF
  269.     DB    '   R show chars received',CR,LF
  270.     DB    '   S show chars sent',CR,LF
  271.     DB    '   V view file sent/received (no status)',CR,LF
  272.     DB    '   C request CRC option for file xfers',CR,LF
  273.     DB    '     Note: request made from receiving end',CR,LF
  274.     DB    CR,LF,'For examples, type: MODEM X',CR,LF,0
  275.     JMP    EXIT
  276. ;
  277. EXAM    CALL    ILPRT
  278.     DB    'Send file, originate mode, 300 baud:',CR,LF
  279.     DB    '   MODEM SO fn.ft',CR,LF
  280.     DB    'Send another file:',CR,LF
  281.     DB    '   MODEM S fn.ft',CR,LF
  282.     DB    'Then send a third file at '
  283.     IF    BRGNLUP
  284.     DB    '9600'
  285.     ENDIF
  286.     IF    NOT BRGNLUP
  287.     DB    '600'
  288.     ENDIF
  289.     DB    ' baud and disconnect:'CR,LF
  290.     IF    BRGNLUP
  291.     DB    '   MODEM SD.96 fn.ft'
  292.     ENDIF
  293.     IF    NOT BRGNLUP
  294.     DB    '   MODEM SD.600 fn.ft'
  295.     ENDIF
  296.     DB    CR,LF,CR,LF
  297.     DB    'Act as a terminal, originate mode, at 110 baud:',CR,LF
  298.     IF    BRGNLUP
  299.     DB    '   MODEM TO.1'
  300.     ENDIF
  301.     IF    NOT BRGNLUP
  302.     DB    '   MODEM TO.110'
  303.     ENDIF
  304.     DB    CR,LF
  305.     DB    '   (Use ctl-D to disconnect)',CR,LF,CR,LF,1
  306.     DB    'Receive file, answer mode, view it, 600 baud:',CR,LF
  307.     IF    BRGNLUP
  308.     DB    '   MODEM RAV.6 fn.ft'
  309.     ENDIF
  310.     IF    NOT BRGNLUP
  311.     DB    '   MODEM RAV.600 fn.ft'
  312.     ENDIF
  313.     DB    CR,LF
  314.     DB    'Receive file, request cyclic redundancy check, 600 baud:',CR,LF
  315.     IF    BRGNLUP
  316.     DB    '   MODEM RC.6 fn.ft',
  317.     ENDIF
  318.     IF    NOT BRGNLUP
  319.     DB    '   MODEM RC.600 fn.ft',
  320.     ENDIF
  321.     DB    CR,LF,CR,LF
  322.     DB    'Turn printer mode on/off in terminal or echo mode:',CR,LF
  323.     DB    '   ^P     (printer now toggled)',CR,LF,CR,LF
  324.     DB    'Turn on ascii capture mode:',CR,LF
  325.     DB    '   ^A ',CR,LF
  326.     DB    '   FILE NAME --> b:test.doc [CR] (file now open)',CR,LF
  327.     DB    'Turn off ascii capture mode:',CR,LF
  328.     DB    '   ^A    (ascii capture disabled, file closed)',CR,LF,0
  329.     JMP    EXIT
  330.