home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Zodiac Super OZ
/
MEDIADEPOT.ISO
/
FILES
/
13
/
PCL4P51.ZIP
/
PCL4PUSR.DOC
< prev
next >
Wrap
Text File
|
1996-06-05
|
87KB
|
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