home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-06-05 | 85.3 KB | 2,178 lines |
-
-
- Personal Communications Library
-
- For Borland/Turbo Pascal
-
-
- (PCL4P)
-
-
-
- USERS MANUAL
-
-
-
-
-
- Version 5.1
-
- June 5, 1996
-
-
-
-
- This software is provided as-is.
- There are no warranties, expressed or implied.
-
-
-
-
- Copyright (C) 1996
- All rights reserved
-
-
-
- MarshallSoft Computing, Inc.
- Post Office Box 4543
- Huntsville AL 35815
-
- Voice : 205-881-4630
- FAX : 205|880|0925
- BBS : 205-880-9748
- email : help@marshallsoft.com
- Anon FTP : ftp.marshallsoft.com
- web : www.marshallsoft.com
-
-
-
-
- _______
- ____|__ | (R)
- --+ | +-------------------
- | ____|__ | Association of
- | | |_| Shareware
- |__| o | Professionals
- --+--+ | +---------------------
- |___|___| MEMBER
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 1
- C O N T E N T S
-
-
-
-
-
- Chapter Page
-
- 1.0 Introduction................................................3
- 1.1 User Support............................................4
- 1.2 ASP Ombudsman...........................................4
- 1.3 A Typical Application...................................5
- 1.4 Installation............................................6
- 2.0 Library Organization........................................7
- 2.1 Configuration...........................................7
- 2.2 Initialization & Termination............................7
- 2.3 Modem Control & Status..................................8
- 2.4 Serial I/O..............................................8
- 2.5 Error Detection.........................................9
- 2.6 General Support.........................................9
- 3.0 Library Overview...........................................10
- 3.1 Using the Library......................................10
- 3.2 Protected Mode.........................................10
- 3.3 Application Notes .....................................11
- 3.3.1 Terminal Programs................................11
- 3.3.1 Door Programs....................................11
- 3.3.2 BBS Programs.....................................11
- 3.4 Compiling & Linking....................................12
- 3.5 Turbo Vision...........................................12
- 4.0 Talking to Your Modem......................................13
- 4.1 Modem Standards........................................13
- 4.2 Flow Control...........................................14
- 4.3 MODEM_IO functions.....................................14
- 4.4 Modem Initialization...................................15
- 5.0 Problems...................................................16
- 6.0 Serial Communications......................................17
- 6.1 Communications Basics..................................17
- 6.2 Standard Port Addresses................................18
- 6.3 Running 3 or 4 Ports Concurrently......................19
- 6.4 Using Multiport Cards..................................20
- 6.4.1 The DigiBoard....................................20
- 6.4.2 The BOCA Board...................................20
- 6.5 Transmitter Interrupts.................................21
- 6.6 RS232 Signals..........................................22
- 6.7 National INS8250, INS16450, and INS16550 UARTs.........23
- 6.8 Register Summary.......................................24
- 7.0 Example Programs...........................................26
- 7.1 MINIMAL................................................26
- 7.2 SIMPLE.................................................26
- 7.3 LOGIN..................................................26
- 7.4 DOOR...................................................26
- 7.5 SELFTEST...............................................26
- 8.0 Legal Issues...............................................27
- 8.1 Registration...........................................27
- 8.2 License................................................27
- 8.3 Warranty...............................................28
- 9.0 Summary....................................................29
- 9.1 Revision History.......................................29
- 9.2 Function Summary.......................................31
- 9.3 Further Reading........................................31
- 10.0 Other MarshallSoft Computing products for Pascal...........32
- 10.1 The Personal Protocol Library for Pascal..............32
- 10.2 The Personal Communication Library for DELPHI.........32
- 11.0 Other MarshallSoft Computing shareware products............32
-
-
-
- PCL4P Users Manual Page 2
- 1.0 Introduction
-
-
- The Personal Communications Library for Borland/Turbo Pascal (PCL4P) is an
- asynchronous communications library designed for experienced software
- developers programming in Turbo or Borland Pascal. The PCL features:
-
- o 36 communications and support functions.
- o Supports 16-bit protected mode [requires Borland Pascal].
- o Support for the high performance 16550 UART.
- o Supports hardware (RTS/CTS) flow control.
- o Interrupt driven receiver and transmitter.
- o Supports 300 baud to 115,200 baud.
- o Supports the DigiBoard PC/4 and PC/8.
- o Supports the BOCA BB1004, BB1008, and BB2016 boards.
- o Supports COM1 through COM8 (through COM20 with multiport board)
- o Adjustable receive queues from 8 bytes to 32 KB.
- o Control-BREAK error exit.
- o Use IRQ2 through IRQ15 with any UART address.
- o 18 communications error conditions trapped.
- o Allows 4 ports to run concurrently (20 with multiport board).
- o Complete modem control & status.
- o Written in assembly language for small size & high speed.
- o Terminal program featuring ASCII (with XON/XOFF), XMODEM, YMODEM,
- and YMODEM-G. [Source in protocol library PPL4P].
-
-
- Why should you buy PCL4P ? Several good reasons are:
-
- COMPLETE - PCL4P is complete since it provides absolute control
- of the serial ports (including the high performance
- INS16550).
-
- COMPACT - PCL4P is very compact at less than 8 KB. Your
- application doesn't carry a lot of excess code.
-
- FAST - PCL4P is fast since it will run at 38400 baud on
- even slow 8088 PCs (4.77 MHZ) and at 115200 baud on
- most everything else.
-
- SUPPORT - If you get stuck, you talk to the programmer that
- wrote the code, not a person hired to answer the
- phone.
-
- BBS - A BBS is available (2400 to 14400 baud, N81) in order
- to provide immediate support as necessary. You can also
- email us at help@marshallsoft.com.
-
- NEWSLETTER - MSC newsletter discusses communications problems and
- solutions (published quarterly).
-
- PRICE - You get PCL4P for a very reasonable price ($75) !
-
- UPGRADES - Once you buy PCL4P, you can always update to the most
- recent version very inexpensively ($25 plus shipping).
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 3
- 1.1 User Support
-
-
- We want you to be successful in developing your applications using PCL4P! We
- depend on our customers to let us know what they need in a communications
- library. This means we are committed to providing the best communications
- library that we can. If you have any suggestions or comments, please let us
- know!
-
- We provide customer support for registered users by voice, FAX, BBS, email,
- and mail. We provide limited support for unregistered users by voice,
- email, and BBS only.
-
- If you are having a problem using PCL4P, call us at 205-881-4630 between
- 1:30 PM and 9:30 PM (CST) Monday through Friday. You can also call at other
- times and leave a message, and call back later for a reply. Registered users
- (ONLY) can also FAX us at 205-880-0925 at any time (24 hours). You can also
- email us at help@marshallsoft.com.
-
- However, we can only answer questions with respect to using the PCL4P
- library. We cannot help you program your application, but we'll be glad to
- discuss it with you.
-
- You may also call our User Support BBS (2400 to 14400 baud, no parity, 8
- data bits, 1 stop bit) at 205-880-9748 and leave a message (address it to
- the SYSOP). We will usually have a reply ready for you within 24 hours.
-
- The BBS is available 24 hours per day. All files are in standard ZIP format.
- The BBS will contain the latest shareware version of all MarshallSoft
- Computing products as well as related files such as:
-
- BUGS.ZIP - Bug report.
- NEWS.ZIP | Latest news regarding our products.
- PRODUCTS.ZIP - List of all shareware products.
-
- The MarshallSoft Computing, Inc. newsletter "Comm Talk" is published
- quarterly. It discusses various communications problems and solutions using
- PCL4P as well as related information. "Comm Talk" is published on our Web
- site www.marshallsoft.com and is available in text form on our BBS and FTP
- site (ftp.marshallsoft.com/marshallsoft).
-
-
-
- 1.2 ASP Ombudsman
-
-
- MarshallSoft Computing, Inc. is a member of the Association of Shareware
- Professionals (ASP). ASP wants to make sure that the shareware principle
- works for you. If you are unable to resolve a shareware-related problem
- with an ASP member by contacting the member directly, ASP may be able to
- help. The ASP Ombudsman can help you resolve a dispute or problem with an
- ASP member, but does not provide technical support for members' products.
- Please write to the ASP Ombudsman at 545 Grover Road, Muskegon, MI USA
- 49442-9427, Fax 616-788-2765, or send a CompuServe message via CompuServe
- Mail to ASP Ombudsman 70007,3536.
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 4
- 1.3 A Typical Application
-
-
- In general, there are two classes of applications that use a communications
- library like PCL4P - those that use a modem to connect to the outside world
- and those that connect directly to a peripheral device. In either case, a
- typical application program using PCL4P might look like the following code
- outline:
-
-
-
- +----------------------------------------------------------------+
- | |
- | program YourProgram |
- | |
- | uses PCL4P; |
- | ... |
- | var BufPtr : Pointer; |
- | BufSeg : Integer; |
- | |
- | ... |
- | begin (* YourProgram *) |
- | (* allocate RX buffer memory *) |
- | GetMem(BufPtr,1024+16); |
- | BufSeg := (Seg(BufPtr^)+1) + (Ofs(BufPtr^) SHR 4); |
- | RetCode := SioRxBuf(Port,BufSeg,Size1024); |
- | (* allocate TX buffer memory *) |
- | GetMem(BufPtr,128+16); |
- | BufSeg := (Seg(BufPtr^)+1) + (Ofs(BufPtr^) SHR 4); |
- | RetCode := SioTxBuf(Port,BufSeg,Size128); |
- | (* initialize port *) |
- | RetCode := SioParms(Port,NoParity,OneStopBit,WordLength8); |
- | RetCode := SioReset(Port,Baud2400); |
- | ... |
- | ... ( application code ) |
- | ... |
- | RetCode := SioDone(Port); |
- | end. (* YourProgram *) |
- +----------------------------------------------------------------+
-
-
-
- In the above example, SioRxBuf is called to set up the a 1024 byte receive
- buffer. SioTxBuf is called to set up the 128 byte transmitter buffer.
- SioParms is called to set up the parity, stop bit count, and word length.
- SioReset is called to set the baud rate to 2400 and reset the UART
- (Universal Asynchronous Receiver / Transmitter).
-
- Before leaving your application, SioDone is called to restore the prior
- state of the serial communications system.
-
- If you are using a modem, you also need to be concerned about initializing
- your modem correctly and handling any required flow control. Refer to
- Chapter 4.0, "Talking to Your Modem" for detailed information.
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 5
- 1.3 Installation
-
-
- (1) Before installation of PCL4P, your compiler should already be installed
- on your system and tested. If you are not familiar with makefiles, refer to
- your compiler manual. Examine the file "FILES.LST" for a list of all the
- distribution files.
-
- (2) Make a backup copy of your distribution disk. Put your original
- distribution disk in a safe place.
-
- (3) Create a work directory on your work disk (normally your harddisk). For
- example, to create a work directory named PCL4P, we first log onto the work
- disk and then type:
-
- MKDIR PCL4P
-
- (4) Copy all the files from your backup copy of the distribution disk to
- your work directory. For example, to copy from the A: drive to your work
- directory, we type:
-
- CD PCL4P
- COPY A:*.*
-
-
- (5) The library unit must be created by running:
-
- TP_REAL.BAT : Creates PCL4P.TPU [real mode] using Turbo Pascal.
- BP_REAL.BAT : Creates PCL4P.TPU [real mode] using Borland Pascal.
- BP_PROT.BAT : Creates PCL4P.TPP [prot mode] using Borland Pascal.
-
-
- (6) Compile SIMPLE.PAS:
-
- TPC SIMPLE - if using Turno Pascal.
- BPC SIMPLE - if using Borland Pascal.
-
- SIMPLE.PAS should compile without any problems.
-
- (7) The recommended way to test SIMPLE is to run it on two computers
- connected by a null modem cable. Whatever is typed on one computer should
- be displayed on the other. SIMPLE can also be tested by connecting your port
- to a modem.
-
- (8) Compile and run the remaining example programs. In partcular, compile
- the protected mode program SIMPLE16.PAS if using Borland Pascal.
-
- BPC /CP SIMPLE16.PAS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 6
- 2.0 Library Organization
-
-
- The PCL4P library is organized into six categories of functions. Refer to
- the PCL Reference Manual (PCL4P.REF) for details on individual functions.
-
-
- 2.1 Configuration
-
-
- There are three functions in the configuration category. SioPorts is used
- to set the number of PC ports, specify the first DigiBoard (or BOCA board)
- port, and set the DigiBoard (or BOCA board) status register address. SioUART
- is used to change the UART base address for a communications port to a
- non-standard address, while SioIRQ is used to assign a nonstandard IRQ line
- to a port. (See Chapter 6.0, Serial Communications for more details on
- standard UART addresses and IRQ lines).
-
- The configuration functions SioPorts, SioUART and SioIRQ must be called
- before calling any other library functions. Be very careful in using these
- functions. Remember that your serial hardware must support the UART and IRQ
- that you specify.
-
- SioPorts - Set # PC ports, 1st DigiBoard (or BOCA board) port.
- SioUART | Sets the UART base address.
- SioIRQ - Assigns an IRQ line to a port.
-
- THE IRQ GOLDEN RULE: You may open (via SioReset) only one port per IRQ
- (except for the DigiBoard and BOCA board).
-
-
- 2.2 Initialization & Termination
-
-
- There are eight functions in the initialization and termination category.
- Together, SioParms, SioFIFO, SioRxBuf, SioTxBuf, and SioReset initialize
- your serial communications system. Your application must call SioParms and
- SioRxBuf before calling SioReset, and SioReset must be called before any
- serial I/O processing can be done.
-
- After initialization, SioParms and SioBaud can be called again to change the
- communications parameters without resetting the serial port. SioFlow can be
- called to enable hardware flow control.
-
- Before exiting from your application, SioDone must be called. Failure to
- call SioDone can crash your system later.
-
- SioRxBuf - Sets up receive buffer.
- SioTxBuf | Sets up transmitter buffer.
- SioFIFO | Sets the interrupt level for the INS16550.
- SioParms | Sets parity, stop bits, and word length.
- SioReset | Initialize a serial port for processing.
- SioDone | Terminates further serial processing.
- SioBaud | Sets the baud rate of the selected port.
- SioFlow - Enables / disables flow control.
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 7
- 2.3 Modem Control & Status
-
-
- There are nine functions in the modem control and status category which
- provide your application with complete control over the status and control
- bits of your modem.
-
- There are two modem control bits, "Data Terminal Ready" (DTR) and "Request
- To Send" (RTS). These bits can be read, set, or cleared by SioDTR and
- SioRTS.
-
- There are four modem status bits, "Data Set Ready" (DSR), "Clear To Send"
- (CTS), "Ring Indicator" (RI), and "Data Carrier Detect" (DCD). SioModem can
- read any of the modem status bits. SioDSR, SioCTS, SioRI, and SioDCD can
- only read their respective modem status bit. SioGetDiv reads the baud rate
- divisor register so that the baud rate can be determined. SioRead reads any
- of the 7 UART registers.
-
- Refer to the chapter entitled "RS232 Signals" for a discussion of each of
- the control and status bits.
-
- SioDTR - Set, clear, or read the Data Terminal Ready (DTR) bit.
- SioRTS | Sets, clears, or reads the Request to Send (RTS) line.
- SioModem | Reads the modem status register.
- SioDSR | Reads the Data Set Ready (DSR) modem status bit.
- SioCTS | Reads the Clear to Send (CTS) modem status bit
- SioDCD | Reads the Data Carrier Detect (DCD) modem status bit.
- SioRI | Reads the Ring Indicator (RI) modem status bit.
- SioRead | Reads the contents of the 7 UART registers.
- SioGetDiv - Reads the baud rate divisor registers.
-
- 2.4 Serial I/O
-
-
- There are nine library functions in the serial I/O category. Together,
- these functions give the programmer complete control over serial I/O. Higher
- level functions such as protocols and smart modem communications can be
- completely implemented in terms of these functions. Refer to the example
- code.
-
- SioGetc and SioPutc perform all the actual serial I/O. SioUnGetc "ungets"
- the last serial byte read. SioRxClear clears the receive queue while
- SioTxClear clears the transmit queue. SioTxFlush forces all bytes in the
- transmit queue to be transmitted. SioRxQue returns the number of bytes in
- the receive queue while SioTxQue returns the number of bytes in the transmit
- queue. SioLine can be used to test for UART errors.
-
- SioGetc - Reads the next character from the serial line.
- SioPutc | Transmit a character over a serial line.
- SioUnGetc | "Un-gets" (puts back) a specified character.
- SioRxClear | Clears the receive buffer.
- SioRxQue | Returns the number of characters in the receive queue.
- SioTxClear | Clears the transmit buffer.
- SioTxFlush | Flushes the transmit buffer.
- SioTxQue | Returns the number of characters in the transmit queue.
- SioLine - Reads the line status register.
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 8
- 2.5 Error Detection
-
-
- There are four functions in the error detection category. They are concerned
- with detecting or reporting communications errors. Use of these functions
- can make your application significantly more robust.
-
- SioBrkKey can be used as an "emergency" exit from your application.
- SioBrkSig can read or modify the UART break bit. This is useful for
- signalling the remote system that a fatal condition has occurred.
- SioLoopBack can be used to test the integrity of your UART. SioError
- displays a error message corresponding to an error code returned from a
- PCL4P function.
-
- SioBrkKey - Returns non-zero if the Control-BREAK key was pressed
- SioBrkSig | Asserts, cancels, or detects BREAK signal.
- SioError - Displays error in text.
- SioLoopBack - Performs a UART loopback test.
-
-
- 2.6 General Support
-
-
- There are three functions in the general support category. Strictly speaking,
- they are not communications functions, but they take up a very small amount
- of additional memory. Registered users can remove these functions from the
- library if needed.
-
- SioInfo - Returns the library version, RX & TX interrupts, etc.
- SioTimer | Returns the number of system clock tics.
- SioDelay - Delays one or more timer tics (18.2 tics per second).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 9
- 3.0 Library Overview
-
- 3.1 Using the Library
-
-
- The PCL4P library has been tested on a Tandy 1000 (4.77 MHZ 8088 IBM PC
- clone), a Tandy 3000 (80286 IBM AT clone), a Tandy 1400LT (IBM XT clone), a
- Gateway 2000 386(25 MHZ 80386-DX), and a Gateway 2000 486(66 MHX 80486-DX).
- PCL4P has been tested under MSDOS 2.11, 3.2, 3.3, 4.01, 5.0, 6.0, and 6.2.
- The PCL4P library has also been compiled and tested using Turbo Pascal 6.0
- and 7.0 as well as Borland Pascal 7.0.
-
- Please examine the PCL4P.PAS file. Note that COM1 is defined as port zero,
- not port one. The user must assume the responsibilty for passing the
- correct information when calling PCL4P functions.
-
-
- 3.2 Protected Mode
-
-
- Protected mode programming takes advantage of the segmented architecture of
- 286 and up Intel processors. In contrast to normal real mode programming
- which limits programs to an address space of 1 MB (1024 KB), protected mode
- allows up to 16 MB (in 16-bit protected mode). Protected mode also offers
- some measure of protection of one program from another.
-
- A program that can excecute in protected mode under DOS requires three
- modules:
-
- (1) A DPMI (DOS Protected Mode Interface) driver loaded in memory.
-
- (2) A protected mode runtime library linked to your program.
-
- (3) A runtime module which provides protected mode equivalents of:
-
- a) A subset of DOS interrupt 21H calls.
- b) A subset of BIOS calls.
- c) Additional functions such as protected mode memory management.
-
- The Personal Communications Library (PCL4P16.TPP) supports protected mode.
- Be sure to create PCL4P16.TPP and USE_DPMI.TPP by running the batch file
- BP_PROT.BAT. An application program can then be compiled with the Borland
- Pascal compiler, which supports 16-bit protected mode.
-
- Examine the example program SIMPLE16.PAS, which is a protected mode version
- of the normal DOS based SIMPLE.PAS. Compare it to SIMPLE.PAS to see the
- differences necessary to run in protected mode.
-
- In particular, note the manner in which memory is allocated for use. The
- transmit and receive buffers must be allocated in conventional DOS memory
- (the first 1MB) since serial interrupts can occur during both protected mode
- and real mode.
-
- Compile the protected mode program SIMPLE16.PAS using
-
- BPC /CP SIMPLE16.PAS
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 10
- 3.3 Applications Notes
-
- 3.3.1 Terminal Programs
-
-
- The "terminal program" is the most common class of communications program.
- It is used to call up a BBS or on-line service such as CompuServe, America
- On-Line, etc. Refer to the programs SIMPLE and LOGIN in section 7 for
- examples of simple terminal programs.
-
- A more sophisticated terminal program featuring ASCII, XMODEM, YMODEM, and
- ZMODEM protocol file transfers can be found in our sister product -- The
- Personal Protocol Library (PPL4P). Source code is included in the shareware
- distribution for everything except ZMODEM and the script interpreter.
-
-
- 3.3.2 Door Programs
-
-
- In order to write a door program which "takes over" a serial port without
- resetting the port or changing the baud rate, call SioReset() with NORESET
- as the second argument rather than the baud rate. Call SioGetDiv() to get
- the baud rate divisor if the baud rate must be determined. Be sure to call
- SioDone() before returning to the invoking program. Refer to the DOOR.PAS
- example program.
-
-
- 3.3.3 BBS Programs
-
-
- If you are designing a BBS program (also known as HOST programs), consider
- using 16550 UARTS. You should also choose a multiport card such as the
- DigiBoard or BOCA board if you wish to run more than 4 ports simultaneously.
-
- If you are using an error correcting modem, then you should be sure to set
- flow control and fix your baud rate at the highest possible transfer rates.
- For 14,400 modems, this means 19200 or 38400. For 28,800 modem, this means
- 38400 or 57600. Consult your modem manual for the correct baud rate. You
- may also need a 16550 UART in order to run at the higher speed.
-
- If you are using an older multi-speed modem (say 1200, 2400, 4800, 9600)
- that doesn't use flow control, you should change your baud rate to match the
- CONNECT message baud rate.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 11
- 3.4 Compiling and Linking
-
-
- The Personal Communications Library for Pascal supports both Turbo Pascal
- and Borland Pascal. Substitute BCP for TPC in the following if Borland
- Pascal is being used.
-
- Registered users may wish to assemble PCL4P.ASM. To create the real mode
- library object with transmitter interrupts enabled:
-
- TASM PCL4P.ASM,PCL4P.OBJ /DPASCAL_MODEL;
- TPC PCL4P.PAS
-
- To create the real mode library object with transmitter interrupts disabled:
-
- TASM PCL4P.ASM,PCL4P.OBJ /DPASCAL_MODEL /DNO_TBE;
- TPC PCL4P.PAS
-
- For protected mode [Borland Pascal only]:
-
- TASM USE_DPMI.ASM /MX;
- TASM PCL4P.ASM,PCL4P16.OBJ /DPASCAL_MODEL /DDPMI /MX;
-
- To create the real mode library PCL4P.TPU
-
- TPC PCL4P.PAS
-
- To create the protected mode [Borland Pascal only] library PCL4P16.TPP
-
- BPC /CP USE_DPMI.PAS
- BPC /CP PCL4P16.PAS
-
- To compile the sample programs:
-
- TPC SIMPLE.PAS
-
- To compile the protected mode [Borland Pascal only] program SIMPLE16.PAS
-
- BPC /CP SIMPLE16.PAS
-
-
- 3.5 Turbo Vision
-
-
- The PCL4P library can also be used in Turbo Vision programs. Examine the
- TVTERM.PAS for a simple example program analogous to the SIMPLE.PAS program.
-
- TVTERM copies any keyboard input to the serial port and copies any incoming
- serial port data to the screen. Type Alternate-X to exit.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 12
- 4.0 Talking to Your Modem
-
-
- A modem is used to extend the distance over which you may communicate.
- Without a modem, your RS232 cable is limited to a maximum of approximately
- 50 feet. But with a modem, you can communicate literally around the world.
-
- Also refer to the Section 4.3, "MODEM_IO functions" for details on MODEM_IO
- functions. These functions facilitate communications with modems.
-
- 4.1 Modem Standards
-
-
- Two modems can communicate over a telephone line only if they are both using
- the same signaling frequencies and modulation, which are determined by the
- the modem standards used. Modem standards can be divided into three sets:
- (1) speed, (2) data compression used, and (3) error control.
-
- The Bell standards (103 & 212A) are those of AT&T. The CCITT (The
- International Consultative Committee for Telephone and Telegraph) standards
- are designated as "V. ".
-
-
- Speed
-
- Bell 103 - 300 baud
- Bell 212A | 1200 baud
- V.21 | 300 baud
- V.22bis | 1200 & 2400 baud
- V.32 | 4800 & 9600 baud
- V.32bis | 4800, 7200, 9600, 12000, and 14400 baud
- V.34 - through 28800 baud
-
- Data Compression
-
- MNP 5 - Microcom Networking Protocol (proprietary).
- V.42bis - International data compression standard.
-
-
- Error Control
-
- MNP 2,3,4 - Three level error correction (public domain).
- V.42 - International error correction standard.
-
- Most of the newer high speed modems use several of the above standards.
- However, not all combinations of modem makes communicate easily with each
- other, especially at high speed (9600 and up).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 13
- 4.2 Flow Control
-
-
- With modems using data compression, the modem to modem connection will run
- at various speeds depending on the quality of the line. The computer to
- modem connection will be at a fixed baud rate. Therefore, a protocol (flow
- control) is necessary to synchronize the data flow between a modem and the
- computer to which it is connected. Refer to your modem manual for
- information on flow control protocols supported.
-
- Two flow control protocols are used by most modems which require flow
- control. Software flow control is called "XON/XOFF" (other software flow
- control character pairs are defined but operate the same as XON/XOFF) and
- hardware flow control is called "RTS/CTS". Most modems which require flow
- control enable hardware flow control by default.
-
- In XON/XOFF (software) flow control, the computer suspends transmitting data
- if it receives a XOFF character (13 hex) from the modem, and continues
- transmitting when it receives a XON character (11 hex). Similiarly, the
- computer can signal the modem not to send any more data by transmitting a
- XOFF to it, and can tell the modem to continue transmission be sending a
- XON.
-
- In RTS/CTS (hardware) flow control, the RTS line is used by the computer to
- signal the modem , while the CTS line is used by the modem to signal the
- computer. The RTS line is set OFF by the computer to tell the modem to
- suspend transmission, and set to ON to tell the modem to continue
- transmission. The CTS line is set to OFF by the modem to tell the computer
- to stop transmitting, and set to ON to tell the computer to continue
- transmitting.
-
- Given the choice, always choose hardware flow control over software flow
- control so that all data transmission is transparent. If hardware flow
- control is not the default (which it almost always is), you should modify
- your modem initialization string to turn hardware flow control on.
-
-
- 4.3 MODEM_IO Functions
-
-
- The file MODEM_IO.PAS contains several functions that ease communicating
- with your modem. Look in the LOGIN.PAS code for examples of their use.
-
- ModemSendTo : Sends string (including control chars) to the modem.
- ModemWaitFor : Waits for a particular string from the modem, passing
- all else through.
- ModemQuiet : Waits for continuous quiet of specified duration.
- ModemHangup : Hangs up the modem.
- ModemCmdState : Goes into the modem's command state.
- ModemEcho : Echos all serial incoming bytes to the display.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 14
- 4.4 Modem Initialization
-
-
- If your application uses a modem (as opposed to using a null modem cable),
- then you should always send an initialization string to your modem if it is
- a programmable modem such as those made by Hayes. Communication programs
- such as PROCOMM and TELIX always send such a string automatically as soon as
- they start up.
-
- The particular initialization string depends on the make of your modem. For
- Hayes and Hayes AT command set compatible modems, the following string
- (followed by a carriage return) should work:
-
- AT E1 S7=60 S11=60 V1 X1 Q0 S0=0
-
- Refer to your Modem User's Guide for a full discussion of these commands. A
- brief description is as follows:
-
- AT Modem attention command.
- E1 Modem will echo what you send to it.
- S7=60 Wait 60 seconds for carrier and/or dial tone.
- S11=60 Use 60 milliseconds for tone dialing duration & spacing.
- V1 Display result code as words (not numbers).
- X1 Use the extended result message (CONNECT XXXX) set.
- Q0 Modem returns result codes.
- S0=0 Do not answer RING.
-
- If your application will answer incoming calls, then set the S0 register to
- the ring on which to automatically answer.
-
- If you send the above codes by using SioPutc (as opposed to typing them from
- the keyboard), then follow these guidelines:
-
- (1) Send an initial carriage return before the initialization string.
-
- (2) Pause at least two tics (18 tics to the second) after each character
- sent as your modem needs the time to perform its own internal processing.
- Pause a little longer if your modem is not accepting your initialization
- string.
-
- (3) Pause one and a half seconds after sending any initialization command
- such as ATZ or AT&F since your modem must do quite a bit of processing.
-
- If you experience any problems in initializing your Hayes modem, you should
- first reset it to factory settings by sending:
-
- AT&F
-
- Refer to the TERM program (functions SendTo and WaitFor in the file
- MODEM_IO.PAS) for an example of sending an initialization string to a Hayes
- compatible modem.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 15
- 5.0 Problems
-
-
- If you cannot get your application to run properly, first compile and run
- the terminal emulator program TERM provided on your distribution disk. If
- you are using a null modem cable or a non-programmable modem, be sure not to
- define AT_COMMAND_SET in DEFINES.PAS. If you are using a Hayes compatible
- modem, then do define AT_COMMAND_SET {$DEFINE AT_COMMAND_SET}. If you are
- using a programmable modem which is not Hayes compatible, then you must
- modify the initialization string for your particular modem.
-
- If your application does not run but TERM runs correctly, then you have most
- likely made a programming mistake in your application. MarshallSoft
- Computing cannot debug your application, especially over the telephone!
- However, consider each of the following when searching for an error in your
- application.
-
- 1. Did you include the "uses PCL4P" statement ?
-
- 2. Is your receive buffer large enough ? If you are using 1K data blocks in
- YMODEM, then your receive buffer should be at least 1K ( 2K if baud rates
- above 38400 are to be used ).
-
- 4. Have you selected too high a baud rate ( if you are using a slow PC ) ?
- If only one COM port is being run, you should be able to run at 38400 baud
- on 8088 machines and 115200 on most 286 and all 386 and 486 machines.
-
- 5. Are you attempting to run another application in the background ? Try
- running without any other programs running in the background ( unload all
- TSR programs ).
-
- 6. If you are running two COM ports simultaneously, are you using separate
- receive buffers ? ( you should ).
-
- 7. Did SioReset return a zero value ? If not, then you must call SioReset
- again. See TERM.PAS for an example.
-
- 8. Did you send the proper initialization string to your modem ? Did you
- set DTR and RTS ? ( you should ).
-
- 9. Do you have more than one COM1 port, etc. For example, if you have a
- COM1 port on your motherboard, you cannot add another COM1 port or modem
- board that uses COM1 without first disabling the COM1 on the motherboard.
-
- 10. Are you passing the proper segment of the receive (or transmit) buffer?.
- See SIMPLE.PAS or TERM.PAS for an example.
-
- Registered users can call (205) 881 - 4630 from 1:30 PM to 9:30 PM CST
- Monday through Friday for help.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 16
- 6.0 Serial Communications
-
-
- 6.1 Communications Basics
-
-
- The heart of serial communications is the UART (Universal Asynchronous
- Receiver Transmitter). The IBM PC/XT/AT and compatibles use the INS8250,
- INS16450, or the INS16550 UART. The purpose of the UART is:
-
- (1) To convert bytes from the CPU (Central Processing Unit), into a serial
- format by adding the necessary start, stop, and parity bits to each byte
- before transmission, and to then transmit each bit at the correct baud rate.
-
- (2) To convert the incoming stream (at a specified baud rate) of serial bits
- into bytes by removing the start, stop, and parity bits before being made
- available to the CPU.
-
- The UART is part of the serial interface circuitry which allows the CPU to
- send and receive signals over the RS232 lines. This can be diagrammed as
- follows:
-
-
-
- Serial Interface
- +-------------------+
- | |
- +-----+ Data Bus | +------+ | RS232 Signals
- | CPU +------------+ | UART | +----------------*
- +-----+ | +------+ |
- | |
- +-------------------+
-
-
-
- The INS8250/16450/16550 UART is capable of operating in one of two modes,
- "polled" and "interrupt driven". The serial communications functions in the
- BIOS uses the polled method. In this approach, the CPU is typically in a
- loop asking the UART over and over again if it has a byte ready. If its
- does, the polling code returns the byte. But, if the next byte comes in
- before the polling code is executing again, then that byte is lost.
-
- In the interrupt driven approach (used by PCL4P for incoming data), when a
- byte is received by the UART, an "Interrupt Service Routine" (ISR) is
- executed immediately, suspending temporarily whatever else is executing. The
- ISR then moves the byte to a buffer so that your application program can
- later read it. Refer to Sections 6.6 and 6.7 entitled "RS232 Signals" and
- "National INS8250, INS16450 and INS16550 UARTs", respectively for further
- information on these topics.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 17
- 6.2 Standard Port Addresses
-
-
- There are a few things to know about how serial communications ports are
- used by IBM PC/XT/AT and compatible computers. The standard IBM PC/XT/AT
- configuration values are as follows:
-
- Port Reg Base IRQ Line Vector
- COM1 3F8H 4 12
- COM2 2F8H 3 11
- COM3 3E8H 4 12
- COM4 2E8H 3 11
-
- (Refer to your DigiBoard manual for DigiBoard addresses, or your BOCA board
- manual for BOCA port addresses).
-
- PCL4P assumes the above values. If necessary, the UART base address can be
- changed by SioUART, and IRQ lines can be re-assigned by SioIRQ. Refer to the
- PCL4P Reference Manual for specific details.
-
- When installing new communications cards, the following guidelines are
- recommended:
-
- (1) Be sure to read the documentation for the hardware you are installing.
- Pay special attention to UART base addresses and IRQ lines.
-
- (2) If you have a choice in base addresses and IRQ lines, always choose
- standard values as defined above.
-
- (3) The first port should be COM1, the second COM2, etc. Do NOT skip over
- any port. This problem has caught several users.
-
- (4) Use SioUART to zero all unused ports (for example, call SioUART(COM4,0)
- if there is no COM4 port installed).
-
- (5) Be carefull not to configure two ports for the same address. This is
- easier to do than you may believe.
-
- (6) Choose an external modem over an internal one. It is much easier to
- debug problems with an external modem than an internal one.
-
- (7) Select hardware flow control (RTS/CTS) if flow control is required and
- hardware flow control is not the default.
-
- (8) Always test your port as soon as it is installed.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 18
- 6.3 Running 3 or 4 Ports Concurrently
-
-
- PCL4P supports up to 4 serial ports running concurrently (more if you have a
- DigiBoard or BOCA board). One free interrupt for each port is required. The
- following assumes that you don't have a DigiBoard.
-
- Interrupts IRQ4 and IRQ3 are dedicated to the communications ports in a
- standard IBM PC/XT/AT configuration. IRQ4 is shared between COM1 and COM3
- while IRQ3 is shared between COM2 and COM4. This means that you can run two
- ports simultaneously provided that they don't share an interrupt.
-
- Suppose that you wish to run 3 ports simultaneously. To begin, you must have
- 3 serial UARTs installed on your computer. Assume, for purposes of this
- discussion, that COM1 is installed on your motherboard, and that you have
- purchased a new 2 port serial communications board.
-
- You should be able to configure the first serial board port as COM2, which
- uses IRQ3. Refer to the manual that came with your serial board.
-
- In order to run the third serial port concurrently with the first two, a
- unused interrupt must be found. If your serial card can only use IRQ3 and
- IRQ4, then there is no way to run a third line since IRQ4 and IRQ3 are used
- for COM1 and COM2.
-
- However, many serial cards can use other IRQs, typically IRQ2 through IRQ5.
- Since IRQ5 is normally used for a second printer port, it is a good
- candidate for COM3. To use IRQ5 for the third serial port, first set your
- serial card to use IRQ5 for COM3 (refer to your serial card manual) and then
- add the following line to your applications code before calling SioReset:
-
- RetCode := SioIRQ(COM3,IRQ5);
-
- Don't forget to disable any device that might use IRQ5, such as a second
- printer port or a music card. Unfortunately, there is no easy way to
- determine that you have no conflicts until you actually attempt to use the
- IRQ. If there are conflicts, your system will probably hang and you will
- have to reboot.
-
- To run a fourth serial port, another free IRQ must be found. On some
- systems, IRQ7 can be used. To use IRQ7 for the fourth serial port, first set
- your serial card to use IRQ7 for COM4 and then add:
-
- RetCode := SioIRQ(COM4,IRQ7);
-
- To summarize, your serial card must be able to generate the correct IRQ,
- which is not already being used. Refer to the entry for the SioIRQ function
- in the PCL4P Reference Manual.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 19
- 6.4 Using the DigiBoard
-
-
- PCL4P supports the the dumb DigiBoard (PC/4 & PC/8) and the dumb BOCA board
- (BB1004, BB1008, and BB2016).
-
- 6.4.1 The DigiBoard
-
- Your PCs ports must be partitioned into "standard" PC ports and DigiBoard
- ports. Remember that standard PC ports cannot share IRQs like the DigiBoard
- can. If you are using IRQ4 and IRQ3 for standard PC ports COM1 and COM2,
- then you cannot use either for DigiBoard ports (try IRQ5 or IRQ7).
-
- Suppose that COM1 through COM2 are standard PC ports (using IRQ4 and IRQ3)
- and you have installed a PC/8 DigiBoard that you wish to use for COM3
- through COM10 using interrupt line IRQ5. You choose to use the recommended
- DigiBoard UART addresses starting at $100:
-
- Code := SioPorts(10,COM3,$140,DIGIBOARD);
- Address := $100; (* 1st DigiBoard UART address *)
- for Port:=COM3 to COM10 do (* look at each port *)
- begin
- Code := SioUART(Port,Address); (* set the UART address *)
- Address := Address + 8; (* next DigiBoard UART *)
- Code := SioIRQ(Port,IRQ5); (* set the IRQ & ISR *)
- end
-
- The DigiBoard uses $140 for the status address for odd interrupts and 0x141
- for even interrupts.
-
- DigiBoard may be contacted at 6400 Flying Cloud Drive, Eden Prairie, MN
- 55344. Telephone 612-943-9020. FAX 612-943-5398.
-
- 6.4.2 The BOCA Board
-
- PCL4P supports the dumb BOCA board. As with the DigiBoard, you must
- configure PCL4P before using the BOCA board.
-
- For example, to configure the BOCA BB2016 to use COM1 to COM16 with base
- addresses starting at $100 and using IRQ15:
-
- Code := SioPorts(16,COM1,$107,BOCABOARD);
- Address := $100; (* 1st DigiBoard UART address *)
- for Port:=COM1 to COM16 do (* look at each port *)
- begin
- Code := SioUART(Port,Address); (* set the UART address *)
- Address := Address + 8; (* next DigiBoard UART *)
- Code := SioIRQ(Port,IRQ15); (* set the IRQ & ISR *)
- end
-
- BOCA may be contacted at BOCA Research, Inc., 6413 Congress Avenue, Suite
- 130, Boca Raton, FL 33487. Phone 407-241-8088, FAX 407-997-0918.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 20
- 6.5 Transmitter Interrupts
-
-
- Beginning in version 4.0 of PCL4P, transmitter interrupts are supported by
- the library. Separate libraries are provided, one with transmitter
- interrupts enabled (the default beginning with version 5.1) and one
- without. When transmitter interrupts are NOT enabled, the following logic
- occurs everytime you call SioPutc:
-
- 1. Wait for transmit buffer to become empty. The transmit buffer may not
- be empty if the previous transmit is not completed (the UART breaks down the
- byte & sends 1 bit at a time). 2. When the transmit buffer is empty, the
- byte from the SioPutc call is loaded into the transmit buffer and control is
- returned to the caller.
-
- Note that you can not write to the UART any faster the the UART baud rate.
-
- When transmitter interrupts are enabled, the byte from SioPutc is put into a
- previously prepared (by SioTxQue) transmitter queue. The interrupt service
- routine fetches bytes from this queue as soon as the previous byte has been
- sent.
-
- While you can now call SioPutc faster than the baud rate, bytes are still
- transmitted at the given baud rate.
-
- The above sounds like transmitter interrupts are the way to go.
- Unfortunately, this is often NOT the case. Most applications will perform
- better if transmitter interrupts are NOT enabled.
-
- The reason is that transmitter interrupts double the amount of code in the
- time critical interrupt service routines. While the library is processing a
- transmitter interrupt (which can take a while), incoming bytes can not be
- processed. What this means is that a given machine can run at a higher baud
- rate without transmitter interrupts. This problem is compounded when running
- multiple ports simultaniously.
-
- However, there are some application areas where transmitter interrupts are
- preferable. If your application will be transmitting blocks of data at
- fairly slow baud rates you might profit from enabling transmitter interrupts
- provided that there is something else for the processor to do (which is NOT
- the case in most protocols under DOS).
-
- The default library is with transmitter interrupts enabled. To create the
- PCL4P library without TX interrupts enabled, copy "PCL4PN.OBJ" over
- "PCL4P.OBJ" in TP_REAL.BAT (or BP_REAL.BAT) and then execute TP_REAL (or
- BP_REAL).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 21
- 6.6 RS-232 Signals
-
-
- RS-232 is the name of the serial data interface standard used to connect
- computers to modems. Most IBM compatible computers are built with at least
- one serial port and use either DB9 (9 pin) or DB25 (25 pin) connectors.
-
- A summary of these pins and their function follows. For more detailed
- information, refer to one of the many books dealing with RS-232 interfacing.
-
- Signal Ground Pin 7 (DB25), Pin 5 (DB9)
-
- The SG line is used as the common signal ground, and must always be
- connected.
-
- Transmit Data Pin 2 (DB25), Pin 3 (DB9)
-
- The TX line is used to carry data from the computer to the modem.
-
- Receive Data Pin 3 (DB25), Pin 2 (DB9)
-
- The RX line is used to carry data from the modem to the computer.
-
- Data Terminal Ready Pin 20 (DB25), Pin 4 (DB9)
-
- The DTR line is used by the computer to signal the modem that it is ready.
- DTR should be set high when talking to a modem.
-
- Data Set Ready Pin 6 (DB25), Pin 6 (DB9)
-
- The DSR line is used by the modem to signal the computer that it is ready.
-
- Request to Send Pin 4 (DB25), Pin 7 (DB9)
-
- The RTS line is used to "turn the line around" in half duplex modems, and
- for hardware flow control in most modems that require flow control.
-
- Clear to Send Pin 5 (DB25), Pin 8 (DB9)
-
- The CTS line is used to "turn the line around" in half duplex modems, and
- for hardware flow control in most modems that require flow control.
-
- Data Carrier Detect Pin 8 (DB25), Pin 1 (DB9)
-
- The DCD line is used by the modem to signal the computer that a data carrier
- signal is present.
-
- Ring Indicator Pin 22 (DB25), Pin 9 (DB9)
-
- The RI line is asserted when a 'ring' occurs.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 22
- 6.7 National INS8250, INS16450, and INS16550 UARTs
-
-
- The Personal Communications Library is based on the standard National
- INS8250, INS16450, and INS16550 UARTs. The 8250 was the original UART used
- in the IBM PC, whereas the 16450 is a faster version found on most 286 & up
- machines. The 16550 contains a 16 byte FIFO to further reduce communications
- overhead. These UARTs consists of 8 register ports as follows:
-
- Offset R/W Register
- 0 R/W Receiver (read) / Transmitter (write)
- 1 R/W Interrupt Enable (read)
- 2 R Interrupt Identification
- 2 W FIFO control (INS16550 only)
- 3 R/W Data Format (Line Control)
- 4 R/W RS-232 (Modem) Control
- 5 R/W Line Status
- 6 R/W RS-232 (Modem) Status
- 7 R/W Not used.
-
- The UART registers are based at 3F8 (COM1), 2F8 (COM2), 3E8 (COM3), and 2E8
- (COM4). COM1 and COM3 share interrupt vector 12 and interrupt request line
- IRQ4 while COM2 and COM4 share interrupt vector 11 and interrupt request
- line IRQ3. This means that COM1 and COM3 cannot both be used at the same
- time. Similarly, COM2 and COM4 cannot both be used at the same time.
-
-
- Port Reg Base IRQ Line Vector
- COM1 3F8H 4 12
- COM2 2F8H 3 11
- COM3 3E8H 4 12
- COM4 2E8H 3 11
-
- Four sources of interrupts are possible with the 8250 and 16550: (1)
- receiver error or BREAK, (2) receiver data ready, (3) ready to transmit, and
- (4) RS232 input. These four sources of interrupts are summarized as
- follows:
-
- Source of Interrupt Action Required to Clear
- Receiver error or BREAK. Read Line Status register.
- Receiver data. Read data from data register.
- Transmitter Buffer Empty. Write to data register or read IID reg.
- RS232 input. Read Modem Status register.
-
- However, PCL4P only enables the receiving data interrupt. This means that
- interrupts can only be caused by incoming data.
-
- If you are not familiar with the INS8250, several good books are available.
- Refer to Section 9.3, Further Reading for recommendations. Although a
- knowledge of the 8250 is not necessary to use PCL4P, a general knowledge of
- the theory of asynchronous serial communications is recommended.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 23
- 6.8 Register Summary
-
-
- REG 0 : Data Register
-
- Reading from the data register fetches the next input byte, once it is
- ready. Writing to the data register transmits the byte written to it over
- the serial line.
-
- REG 1 : Interrupt Enable
-
- The Interrupt Enable register enables each of four types of interrupts when
- the appropriate bit is set to a one.
-
- bit 3 : Enable interrupt on RS232 input.
- bit 2 : Enable interrupt on receiver error or break.
- bit 1 : Enable interrupt on transmitter buffer empty(TBE).
- bit 0 : Enable interrupt on received data (RxRDY).
-
- REG 2 : Interrupt Identification (IID)
-
- Reading the Interrupt Identification (read only) register once an interrupt
- has occurred identifies the interrupt as follows:
-
- Bit 2 Bit 1 Bit 0 Priority Interrupt
- 0 0 1 none none
- 1 1 0 0 (high) Serialization or break.
- 1 0 0 1 Received data.
- 0 1 0 2 Transmitter Buffer Empty.
- 0 0 0 3 (low) RS232 Input.
-
- In the INS16650, REG 2 (write only) is also the FIFO control register.
- Writing bits 6 & 7 will set the FIFO trigger level (number of bytes received
- before an interrupt is generated).
-
- Bit 7 Bit 6 Trigger Bit 7 Bit 6 Trigger
- 0 0 1 byte 1 0 8 bytes
- 0 1 4 bytes 1 1 14 bytes
-
- REG 3 : Line Control
-
- RS232 line parameters are selected by writing to this register.
-
- bit 7 : DLAB = 0
- bit 6 : BREAK on(1), off(0).
- bits 5-3: Parity None(000),ODD(001),EVEN(011),MARK(101),SPACE(111)
- bit 2 : One stop bit(0), two stop bits(1).
- bits 1-0: Data bits = 5 (00), 6(01), 7(10), 8(11).
-
- When the Divisor Latch Access Bit (DLAB) is 1, registers 0 and 1 become the
- LS and MS bytes of the Baud Rate Divisor registers.
-
- Baud Divisor Baud Divisor Baud Divisor
- 300 0180 4800 0018 38400 0003
- 1200 0060 9600 000C 57600 0002
- 2400 0030 19200 0006 115200 0001
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 24
- REG 4 : Modem Control
-
- RTS, DTR, loopback testing, and General Purpose Outputs #1 and #2 are
- controlled by the Modem Control register as follows:
-
- bit 4 : Enable local loopback.
- bit 3 : Enable GP02. Necessary for 8250 interrupts.
- bit 2 : Enable GP01.
- bit 1 : Set / clear RTS.
- bit 0 : Set / clear DTR.
-
- REG 5 : Line Status
-
- Reading the Line Status register provides status information as follows (1
- for TRUE, 0 for FALSE) :
-
- bit 6 : Transmitter Empty.
- bit 5 : Transmitter Buffer Empty (TBE).
- bit 4 : BREAK detect.
- bit 3 : Framing error.
- bit 2 : Parity error.
- bit 1 : Overrun error.
- bit 0 : Data Ready.
-
- REG 6 : Modem Status
-
- Reading the Modem Status register provides the following status information
- (1 for TRUE, 0 for FALSE) :
-
- bit 7 : DCD status.
- bit 6 : RI status.
- bit 5 : DSR status.
- bit 4 : CTS status.
- bit 3 : Delta DCD status.
- bit 2 : Delta RI status.
- bit 1 : Delta DSR status.
- bit 0 : Delta CTS status.
-
- The delta bits (bits 0 through 3) are set whenever one of the status bits
- (bits 4 through 7) changes (from 0 to 1 or from 1 to 0) since the last time
- that the Modem Status register was read. Reading the Modem Status register
- clear the delta bits.
-
- REG 7 : Scratch Register
-
- There is no function associated with register 7. It does not exist in early
- versions of the 8250.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 25
- 7.0 Example Programs
-
-
- Five example programs are include with PCL4P. In addition, the Personal
- Protocol Library for Pascal (PPL4P) includes the terminal program TERM which
- features ASCII, XMODEM, YMODEM, and ZMODEM protocol transfers. Complete
- source code is included in the shareware product for all of the protocols
- above except ZMODEM. In order to get ZMODEM source, PPL4P must be
- registered.
-
- 7.1 MINIMAL
-
- MINIMAL is the simpliest possible communications program. It reads from the
- serial port & displays on the screen and reads from the keyboard & sends out
- over the serial line. COM1 and 9600 baud are hard coded for simplicity.
-
- 7.2 SIMPLE
-
- SIMPLE is a simple terminal program. It operates like MINIMAL, except that
- you specify both a port and a baud rate. For example.
-
- SIMPLE 1 9600
-
- 7.3 LOGIN
-
- LOGIN is programmed to dial our support BBS (205-880-9748) and log on as
- GUEST. Start LOGIN like SIMPLE by providing a COM port and a baud rate. For
- example,
-
- LOGIN 1 38400
-
- 7.4 DOOR
-
- The DOOR program is a simple communications program which can "take over" a
- serial port. For example, say you are running PROCOMM, PCPLUS, or any
- communications program with a DOS gateway. Select the DOS gateway from
- PROCOMM (or whatever) and then type
-
- DOOR 1
-
- at the DOS prompt to take over port COM1.
-
- 7.5 SELFTEST
-
- The SELFTEST program is designed to test your serial ports provided that you
- have two ports which can be connected together with a null modem cable.
- SELFTEST can also be used to test your multiport board.
-
- For example, to test PC port COM1 against COM2, type:
-
- SELFTEST PC 1 2
-
- SELFTEST may need to be configured for non-standard PC ports or your
- multiport board. Refer to the SELFTEST source code for more information.
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 26
- 8.0 Legal Issues
-
- 8.1 Registration
-
-
- If you wish to register the PCL4P library, please send $75 plus $5 S&H ($10
- outside of North America) to:
-
- MarshallSoft Computing, Inc.
- Post Office Box 4543
- Huntsville AL 35815
-
- Multiple copies are available: $55 for 3 to 9, $45 for 10 to 19, and $35 for
- 20 or more. A site license is also available for $675 (includes 20 sets of
- printed documentation). We pay shipping.
-
- We accept VISA, MasterCard, and American Express (account number,
- expiration date, exact name on your card, and complete card billing address
- required), checks in US dollars drawn on a US bank, purchase orders (POs)
- from recognized US schools and companies listed in Dun & Bradstreet, and COD
- (street address and phone number required) within the USA (plus a $4.50 COD
- charge).
-
- You can also order PCL4P from The Public Software Library (PSL) with your
- MC, Visa, AmEx, or Discover card by calling 800-242-4PSL (from overseas:
- 713-524-6394) or by FAX at 713-524-6398 or by CompuServe at [71355,470].
- THESE NUMBERS ARE FOR ORDERING ONLY. PSL's product number for PCL4P is
- 10909. Please have your shipping address and credit card billing address
- ready.
-
- If you wish to update from an older version of PCL4P, send $25 plus $5 S&H
- ($10 outside of North America). Updates must be ordered directly from
- MarshallSoft Computing.
-
- The registered package includes:
-
- o Assembler source code for the library.
- o Printed Users Manual.
- o Printed Reference Manual.
- o Technical support for one year.
-
- Print the file INVOICE.DOC if an invoice is needed. The registered user will
- receive the latest version of PCL4P shipped by two day priority mail (packet
- airmail overseas). A 3.5" diskette is provided unless a 5.25" diskette is
- requested.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 27
- 8.3 License
-
-
- MarshallSoft Computing, Inc. grants the registered user of PCL4P the right
- to use one copy of the PCL4P library (in object form) on a single computer
- in the development of any software product (other than libraries such as
- PCL4P). The user may not use the library on more than one computer at the
- same time. The source code for the library (PCL4P.ASM) is copyrighted by
- MarshallSoft and may not be released in whole or in part.
-
- Products developed using PCL4P can include the object form of the library
- and may be distributed without any royalty.
-
-
- 8.4 Warranty
-
-
- MARSHALLSOFT COMPUTING, INC. DISCLAIMS ALL WARRANTIES RELATING TO THIS
- SOFTWARE, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
- AND ALL SUCH WARRANTIES ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. NEITHER
- MARSHALLSOFT COMPUTING, INC. NOR ANYONE ELSE WHO HAS BEEN INVOLVED IN THE
- CREATION, PRODUCTION, OR DELIVERY OF THIS SOFTWARE SHALL BE LIABLE FOR ANY
- INDIRECT, CONSEQUENTIAL, OR INCIDENTAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE SUCH SOFTWARE EVEN IF MARSHALLSOFT COMPUTING, INC. HAS
- BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR CLAIMS. IN NO EVENT SHALL
- MARSHALLSOFT COMPUTING, INC.'S LIABILITY FOR ANY SUCH DAMAGES EVER EXCEED
- THE PRICE PAID FOR THE LICENSE TO USE THE SOFTWARE, REGARDLESS OF THE FORM
- OF THE CLAIM. THE PERSON USING THE SOFTWARE BEARS ALL RISK AS TO THE QUALITY
- AND PERFORMANCE OF THE SOFTWARE.
-
- Some states do not allow the exclusion of the limit of liability for
- consequential or incidental damages, so the above limitation may not apply
- to you.
-
- This agreement shall be governed by the laws of the State of Alabama and
- shall inure to the benefit of Marshallsoft Computing, Inc. and any
- successors, administrators, heirs and assigns. Any action or proceeding
- brought by either party against the other arising out of or related to this
- agreement shall be brought only in a STATE or FEDERAL COURT of competent
- jurisdiction located in Madison County, Alabama. The parties hereby consent
- to in personam jurisdiction of said courts.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 28
- 9.0 Summary
-
- 9.1 Revision History
-
-
- Version 1.0 - 14 January 1991 - original release.
-
- Version 1.1 - 11 March 1991
-
- o Added SioUnGetc() function to library.
-
- Version 1.2 - 1 June 1991
-
- o Name changed to Personal Communications Library.
- o Minor bug fixes.
-
- Version 1.3 - 1 July 1991
-
- o Added NORESET option to SioReset.
- o Added SioDSR, SioCTS, SioDCD, and SioRI.
- o Added SioLoopBack function to library.
- o Added LOOPBACK.PAS example program.
-
- Version 2.0 - 1 Nov 1991
-
- o All example code released in shareware package.
- o Fixed bug due to Microsoft Assembler (MASM 5.0,5.1) error.
-
- Version 3.0 - 15 Jan 1991
-
- o Added XMODEM & YMODEM to example code.
- o Added SioUART function.
- o Added "UART undefined" error code.
- o Added "Bad or missing UART" error code.
- o Added "Port already enabled" error code.
- o Added "Cannot enable both COM1 & COM3 ..." error code.
- o Fixed several minor bugs ( using new automated testing ).
-
- Version 3.1 - 1 March 1992
-
- o Added SioFIFO ( INS16550 only ).
- o Added SioIRQ function.
- o Increased maximum receive buffer size to 32K bytes.
-
- Version 3.2 - 1 May 1992
-
- o Modified SioReset so that it no longer clears DTR & RTS.
- o Modified SioModel & renamed to SioInfo.
- o Fixed bug in SioDone when using 2 ports simultaneously.
- o Added SioFlow to library.
- o Added YMODEM-G protocol to TERM program.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 29
- 9.1 Revision History (continued)
-
-
- Version 3.3 - 3 August 1992
-
- o Fixed bug in SioUnGet when using 2 ports simultaneously.
- o Add SioRead function.
-
- Version 3.4 - 4 Jan 1993
-
- o Library modified to use up to four ports simultaneously.
- o SioIRQ was modified to include third argument.
- o EXAMPORT utility distributed to registered users.
-
- Version 3.5 - 15 May 1993
-
- o Supports DigiBoard PC/4 and PC/8.
- o Two new error traps added ("No such IRQ" & "No such ISR").
- o ASCII file transfer protocol added to TERM (with XON/XOFF).
-
- Version 4.0 - 18 Oct 1993
-
- o The library supports transmitter interrupts.
- o Corrects bug in Ver 3.5 requiring calling SioIRQ for COM3/4.
- o The SioIRQ function has been simplified.
-
- Version 4.1 - 1 May 1994
-
- o Transmitter FIFO enabled.
- o Minor internal modifications.
- o Supports dumb BOCA boards (BB1004, BB1008, & BB2016).
- o Port definition extended to COM16.
-
- Version 4.2 - 1 Sept 1994
-
- o Flow contro bug fixed.
- o SioGetDiv function added.
- o SioRxBuf and SioTxBuf function modified.
-
- Version 4.3 - 2 April 1995
-
- o BREAK detection bug fixed.
- o Port definitions extended to COM20.
- o Support for IRQ8 through IRQ15.
- o Line status bits preserved.
-
- Version 5.1 - 5 June 1996
-
- o Supports 16-bit protected mode.
- o SioRxFlush renamed to SioRxClear.
- o SioTxFlush renamed to SioTxClear.
- o Added (new) SioTxFlush [forces TX].
- o Added more choices to SioInfo.
- o Modified ISR logic for improved reliability.
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 30
- 9.2 Function Summary
-
-
- Refer to the PCL4P Reference Manual (PCL4P.REF) for detailed information on
- the communications and support functions. A one line summary of each
- function follows:
-
-
- SioBaud Sets the baud rate of the selected port.
- SioBrkKey Returns non-zero if the Control-BREAK key was pressed.
- SioBrkSig Asserts, cancels, or detects BREAK signal.
- SioCTS Reads the Clear to Send (CTS) modem status bit.
- SioDCD Reads the Data Carrier Detect (DCD) modem status bit.
- SioDelay Delays one or more timer tics (18.2 tics per second).
- SioDone Terminates further serial processing.
- SioDSR Reads the Data Set Ready (DSR) modem status bit.
- SioDTR Set, clear, or read the Data Terminal Ready (DTR) bit.
- SioError Displays error in text.
- SioFIFO Sets the interrupt level for the INS16550.
- SioFlow Enables / disables hardware flow control.
- SioGetc Reads the next character from the serial line.
- SioGetDiv Reads the baud rate divisor.
- SioInfo Returns library version number.
- SioIRQ Assigns an IRQ line and interrupt service to a port.
- SioLine Reads the line status register.
- SioLoopBack Performs a UART loopback test.
- SioModem Reads the modem status register.
- SioParms Sets parity, stop bits, and word length.
- SioPorts Sets # ports, 1st DigiBoard / BOCA port & status reg.
- SioPutc Transmit a character over a serial line.
- SioReset Initialize a serial port for processing.
- SioRI Reads the Ring Indicator (RI) modem status bit.
- SioRTS Sets, clears, or reads the Request to Send (RTS) line.
- SioRead Read any of the 7 UART registers.
- SioRxBuf Sets up receive buffer.
- SioRxClear Clears the receive buffer.
- SioRxQue Returns the number of characters in the receive queue.
- SioTimer Returns the number of system clock tics.
- SioTxBuf Sets up transmit buffer.
- SioTxClear Clears the transmit buffer.
- SioTxFlush Flushes the transmit buffer.
- SioTxQue Returns the number of characters in the transmit queue.
- SioUART Sets the UART base address.
- SioUnGetc "Un-gets" (puts back) a specified character.
-
-
- 9.3 Further Reading
-
-
- The best way to learn about serial communications is to read a good book on
- the subject. Several good texts are available. Two that I like are (sorry
- but most communications books use C for their examples) :
-
- (1) C Programmers's Guide to Serial Communications by Joe Campbell (SAMS)
-
- (2) Mastering Serial Communications by Peter Gofton (SYBEX).
-
- If you are interested in Protected Mode:
-
- (3) Borland Pascal 7.0 Language Manual
-
- (4) Extending DOS - A Programmer's Guild To Protected Mode DOS by Ray Duncan
- (Addison Wesley)
-
-
-
-
- PCL4P Users Manual Page 31
- 10.0 Other MarshallSoft Computing Products for Pascal
-
-
- 10.1 The Personal Protocol Library for Pascal
-
-
- The Personal Protocol Library for Pascal (PPL4P) consists of a Pascal
- language library which implements ASCII, XMODEM, XMODEM-CRC, XMODEM-1K,
- XMODEM-G, YMODEM, YMODEM-G, and ZMODEM file transfer protocols. A script
- compiler and interpreter is also included which is capable of such tasks as
- automatically logging onto a BBS and downloading a file or retrieving mail.
- Three example script programs are included.
-
- The protocol library (PPL4P) requires the Personal Communications Library
- for Pascal (PCL4P).
-
- The Personal Protocol Library for Pascal is available for $40 plus $5 S&H
- ($10 S&H overseas).
-
- 10.2 The Personal Communications Library for DELPHI
-
- Coming this summer (1996) !
-
- 11.0 Other Shareware Products
-
- We have DOS based communications and protocol libraries for C/C++, Pascal,
- Power Basic, and Visual Basic.
-
- We have Windows based products for C/C++ and Visual Basic, with DELPHI
- coming soon.
-
- All of our shareware products and example code is available on our support
- BBS (205-880-9748, 14.4KB), our Internet anonymous FTP site at
- (ftp.marshallsoft.com/marshallsoft), as well as many information services
- such as CompuServe, America Online, ExecPc, etc.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PCL4P Users Manual Page 32
-
-