home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / msch / modem450.txt < prev    next >
Text File  |  1990-10-01  |  9KB  |  144 lines

  1.                        On The Topic of 450 Baud
  2.  
  3.  
  4.         Many users have asked about using 450 baud with this RBBS system.
  5. Typically, they are asking why such an option exists (the N option on the
  6. main RBBS menu) when their modem and IBM-PC BASIC don't appear to support
  7. such a speed.
  8.  
  9.         They are correct about IBM-PC BASIC not supporting 450 baud. In
  10. fact, the ROM BIOS routines in the PC don't support 450 baud as an option
  11. either.  It's not that IBM or Microsoft skipped the speed when they developed
  12. the PC, but the fact that 450 baud is not a standard communications speed
  13. for the RS-232-C interface.  The next higher 'standard' speed above 300
  14. baud is 600 baud, followed by 1200 baud, etc.  As a result, 450 baud is
  15. not supported on most personal computer systems.
  16.  
  17.         As it turns out, however, most 300 baud modems will run at somewhat
  18. higher speeds - up to, guess what!, 450 baud in most cases. Although a
  19. somewhat higher error rate can be expected when you "push" a 300 baud modem
  20. to 450 baud, the error rate is typically still low enough to not be any
  21. kind of serious problem to file transfer and message passing operations.
  22. In fact, using the XMODEM file transfer protocol, errors which do occur
  23. are normally detected by the check sum error detection scheme used by XMODEM
  24. and simply force a re-transmission of the block originally received in
  25. error.
  26.  
  27.         Since the speed advantage of 450 over 300 baud can be substantial,
  28. and since we are all interested in doing the most work in the least amount
  29. of time with the equipment at hand, many users have implemented 450 baud
  30. as an option which can used with their "home-grown" communications programs.
  31. (Note that standard IBM-PC communications packages don't support 450 baud
  32. either - such as PC-Talk III). I'll describe how 450 baud can be
  33. implemented from a programming standpoint shortly. But first, let's get
  34. rid of a few erroneous impressions about modem operation.
  35.  
  36.         Your Hayes 300 baud SmartModem (or a Hayes 1200 running in 300 baud
  37. mode) is capable of receiving modem commands and data at up to 1200 baud.
  38. What this means is that the microprocessor in the Hayes is programmed to
  39. automatically look for the AT command sequence - and performs automatic
  40. baud rate detection at the speed you happen to be sending the command
  41. sequence to the modem. This capability, for example, is used in the RBBS
  42. code to send the various modem commands at 1200 baud - to minimize the time
  43. spent sending them!
  44.  
  45.         Your Hayes 300 will even try to send data across the line at 1200
  46. baud - if you open your communications line at that speed and attempt to
  47. go to data mode. However, the 300 is not capable of handling data at that
  48. speed - in fact, it can only transmit and receive data at up to slightly
  49. more than 450 baud - with any reasonable error rate. Since the Hayes doesn't
  50. care at what rate is receives data (anything from 1 to 1200 baud is
  51. acceptable), it is possible to transmit data to the modem and have the
  52. modem transmit it to the phone line at any of those speeds. However, 450
  53. baud is the reasonable upper limit for data communications with the Hayes
  54. 300.
  55.  
  56.         Now that we understand the workings of the Hayes modem, let's talk
  57. about how we can get the PC to send data from its RS-232-C Asynchronous
  58. Communications Adapter at 450 baud. As mentioned earlier, 450 is not an
  59. acceptable option to either the BASIC OPEN statement or to the direct
  60. BIOS calls for asychronous communications. However, as always, almost
  61. *anything* is possible using software! The IBM ACA uses an 8250 chip which
  62. is capable of running at speeds from 1 to 19,600 baud (officially, only
  63. up to 9600 baud, but that's another discussion!). The 8250 includes an on-chip
  64. software programmable baud rate generator - which actually determines the
  65. speed used to send and receive data across the RS-232-C interface. This
  66. baud rate generator can be programmed to run at *any* baud rate between
  67. 1 and 19,600 baud. The IBM-PC ROM BIOS routines, however, were programmed
  68. to only support the "standard" RS-232-C speeds. Since BASIC uses the BIOS
  69. routines, BASIC only supports those same "standard" speeds.
  70.  
  71.         However, it is possible for you to program the 8250 to run at any
  72. speed you like. In this case, we are only interested in programming it to
  73. run at 450 baud. Programming the baud rate generator in the 8250 consists
  74. of loading the baud rate generator on the chip with a "baud rate divisor"
  75. - which takes the clock frequency and divides it by the number you provide
  76. to come up with the baud rate itself. (Those of you with Technical Reference
  77. manuals for the PC can read all about this on pages 2-135 to 2-137). The
  78. divisor is a two byte value - which is stored into two one byte registers
  79. within the 8250 chip. First, we need to determine what the baud rate divisor
  80. should be for 450 baud operation. Take it from me that the value is X'0100'.
  81. Next, we need to get this value from a BASIC program into the 8250 itself.
  82. Fortunately, BASIC includes the OUT statement - which allows us to send
  83. data to the various I/O ports on the system. The 8250 uses several of these
  84. ports - for the baud rate divisior, modem control, and for actually
  85. sending and receiving the data across the RS-232-C interface.
  86.  
  87.         The baud rate divisor ports are X'3F8' for the least significant
  88. byte and X'3F9' for the most significant byte - when using the COM1 port.
  89. (COM2 addresses are X'2F8' and X'2F9' respectively. Before we can load
  90. these divisor ports, however, we must load another value to another port
  91. to indicate that we are setting the baud rate divisor. This third port is
  92. the Line Control Register and is port X'3FB' (X'2FB' for COM2). The high
  93. order bit (X'80') of the LCR controls access to the baud rate divisor
  94. registers. When this bit is 1, we can load the baud rate divisors. When it
  95. is 0, the 8250 resumes operation with the baud rate loaded. The following
  96. sequence of BASIC statements will load the baud rate divisor registers:
  97.  
  98.                 OUT &H3FB,(INP(&H3FB) AND &H80) 'Enable divisor registers.
  99.                 OUT &H3F8,0 'Low order byte of X'0100'
  100.                 OUT &H3F9,1 'High order byte of X'0100'
  101.                 OUT &H3FB,(INP(&H3FB) OR &H80) 'Disable divisor registers.
  102.  
  103.         Adding this code to a BASIC program will cause the COM1 port to
  104. immediately switch to 450 baud operation. A merge file that adds the
  105. 450 baud option to PC-TALK.III is listed below. After merging the listed
  106. code into PC-TALK.III, the resulting file can be compiled in accordance
  107. with Andrew Fluegelman's instructions that come in the program's
  108. documentation. This option allows you to dial into one of the local
  109. RBBS-PC bulletin boards at 300 baud then switch to 450 baud for file
  110. transfers at 150 per cent the 300 baud rate (use the <N>ew baud option
  111. on the RBBS-PCs to switch to 450 baud).
  112.  
  113.  
  114.         Switching to other speeds is just as easy. The only thing you
  115. need to know is the baud rate divisor required for that speed. Here are
  116. a few of the common divisors (see the full table in the Tech. Ref.):
  117.  
  118.                 300     X'0180'
  119.                 450     X'0100'
  120.                 1200    X'0060'
  121.  
  122.         I hope this discussion has helped to clarify the subject of 450
  123. baud operation. Perhaps with this help, you can make some simple changes
  124. to whatever communications program you're running which will allow you to
  125. use your Hayes 300 at a speed which will allow up to 50 per cent faster
  126. communications!
  127.  
  128.  
  129.                   PC-TALK.III 450 baud merge file
  130. -------------------------------------------------------------------------
  131. 200 'Modified for 450 Baud by Dorn W. Stickle - Voice 806-622-0575 - Data - 806-353-7484
  132. 425 CLOSE#1:OPEN COMM$ AS #1:PRINT#1,MODMINIT$;:IF BAU450 THEN GOSUB 11000
  133. 5026 PRINT"   5 -  450,E,7,1  (text)      6 -  450,N,8,1  (binary)
  134. 5055 IF Q$="F" THEN PRINT Q$:GOSUB 5815:PRINT:PRINT"Parameters reset to:";:DORN=0:GOSUB 5100:GOTO 5095
  135. 5060 DORN=0:Q=VAL(Q$):IF Q<1 OR Q>6 THEN BEEP:GOTO 5045 ELSE PRINT Q
  136. 5081 IF Q=6 THEN PAR$="N":DTA$="8
  137. 5086 IF Q=5 OR Q=6 THEN GOSUB 11000
  138. 5090 PRINT:PRINT"New parameters are: ";:GOSUB 5100
  139. 5095 PRINT GO$:GOSUB 2800:GOTO 515
  140. 5100 COLOR BG,FG:IF DORN=1 THEN 5101 ELSE PRINT MID$(COMM$,6,10);:COLOR FG,BG:PRINT:PRINT:GOTO 5105
  141. 5101 PRINT "450,"+PAR$+","+DTA$+","+STP$;:COLOR FG,BG:PRINT:PRINT
  142. 11000 OUT &H3FB,(INP(&H3FB) OR &H80):OUT &H3F8,0:OUT &H3F9,1:OUT &H3FB,(INP(&H3FB) AND &H7F):DORN=1:RETURN
  143. -------------------------------------------------------------------------
  144.