ICD Multi I/O Board Manual (Rev 5/20/1987) RS-232 Handler Functions and Tables

 

Chapter 6 — RS-232 Handler Functions and Tables Index

This chapter contains a list of all input/output and XIO calls to the RS-232 "R:" handler of the MIO. Note that IOCB is an input/output channel number that indicates what OPEN device shall receive or provide data. For most XIO calls, you may use any legal IOCB number as long as it is NOT open to any other device. From Atari BASIC, you may use IOCB numbers 1 through 7 (0 is reserved for editing "E:" I/O).

Note that IOCB #7 is used for the BASIC LPRINT statement and IOCB #6 is used for graphics mode functions from BASIC. Also, if using SpartaDOS, IOCB #4 and IOCB #5 are used while doing output and input redirection respectively (via the DOS PRINT command and batch files).

All the syntaxes use just "R:" for the device name since there is only one RS-232 port on the MIO. In fact, if you do use a port number (ex. "R2:"), it is simply ignored and treated the same as "R:".

All the function formats are given in their Atari BASIC form. If using assembly language or some other high level language, refer to the language manual for its equivalent form.

Opening the RS-232 Port

Syntax
OPEN #IOCB,Aux1,0,"R:"

Remarks
This function opens a channel to the RS-232 port in pseudo "non-concurrent" mode. To remain compatible with the 850 and P:R: Connection, the MIO has a flag indicating whether an XIO 40 (set concurrent mode) has been performed since the last OPEN command. If it has not, then the STATUS command returns the state of the handshake lines, whereas if in concurrent mode, the STATUS command returns the number of characters in the input and output buffers.

Aux1 contains the I/O direction bits — 4 for input only, 8 for output only, and 12 for both input and output (which is equivalent to 13 of the 850 interface). Many XIO calls do not require that you open an RS-232 channel first, however, it is generally a good practice to open the channel first. Care should be taken when setting the state of the handshake lines; if you set DTR false, the transmitter and receiver are disabled. Therefore, you must re-enable them by setting DTR true before continuing with normal operation.

When the channel is opened, both the input and output buffers are cleared. Also, the RTS and DTR handshake lines are set true (to the ready state).

Closing the RS-232 Port

Syntax
CLOSE #IOCB

Remarks
This statement closes the IOCB connected to the RS-232 port. This simply shuts down the IOCB; the RS-232 port remains untouched except that the system waits until all data in the output buffer has been transmitted.

Input Character or Line From the RS-232 Port

Syntax
GET #IOCB,varb
INPUT #IOCB,varb$

Remarks
These functions input data from the RS-232 port; the GET statement inputs the numeric value of one character into a numeric variable and the INPUT statement inputs a string of characters into a string variable. On the INPUT statement, if the data is a numerical ASCII string, you may read the data into a numeric variable. Input strings are terminated by an end-of-line (EOL)
character.

Note that the IOCB must be opened for read or read/write (modes 4 or 12), but whether in concurrent mode or not has no effect on GET/INPUT statement operation. Refer to your BASIC reference manual for more information on these statements.

Output Character or Line To the RS-232 Port

Syntax
PUT #IOCB,exp
PRINT #IOCB;exp$

Remarks
These functions output data to the RS-232 port; the PUT statement outputs the numeric value of one character to the port, and the PRINT statement outputs a string of characters to the port. The syntax of the PRINT statement is the same as a normal PRINT statement except that the "#IOCB;" precedes the expression.

Note that the IOCB must be opened for write or read/write (mode 8 or 12), but whether in concurrent mode or not has no effect on GET/INPUT statement operation. Refer to your BASIC reference manual for more information on these statements.

Reading the Port Status

Syntax
STATUS #IOCB,DUMMY
FLAGS = PEEK(746) : REM Error bits relating to status history
LINESTAT = PEEK(747) : REM Status of handshake lines
or
STATUS #IOCB,DUMMY
FLAGS = PEEK(746) : REM Error bits relating to status history
INCHARS = PEEK(747) : REM Number of chars in input buffer
OUTCHARS = PEEK(749) : REM Number of chars in output buffer

Remarks
These statement sequences are useful for determining many facts about the state of the RS-232 port. The first syntax is used when in pseudo "block mode I/O" (same as "non-concurrent"), whereas the second is used in concurrent mode I/O. Notice that the variable DUMMY is simply a CIO status of the success of the STATUS command. If there were an error (DUMMY<>1), then BASIC would halt and give an error message (unless a TRAP was performed prior to the STATUS).

The block mode STATUS (first syntax) returns a status history of the port (in FLAGS) and the state of the control lines (in LINESTAT). The meaning of each bit is given in tables 6-1 and 6-2.

The concurrent mode STATUS (second syntax) returns a status history of the port (in FLAGS) and the number of characters in the input buffer (in INCHARS) and in the output buffer (in OUTCHARS). The meaning of each bit of FLAGS is given in table 6-1.

Table 6-1. Meaning of Error Bits From Location 746
 
Bit       Dec Equiv       Meaning of Error
7   128      Received a data framing error
6   64   Received a data byte overrun error
5   32   Received a data parity error
4   16   Received a buffer overflow error (>255 chars)

 
Table 6-2. Meaning of Status Bits From Location 747
 
Bit*       Dec Equiv       Meaning When Bit is Set (1)
7   128      DSR is true (ready)
5   32   CTS is true (ready — Always true on MIO)
3   8   CRX is true (ready)
0   1   RCV is at MARK (Always Set on MIO)

* Bits 6, 4, and 2 are simply copies of the next highest bit. In the 850 Interface, these bits would indicate a history (i.e. not always ready since last STATUS).

Forcing Early Transmission of Output Blocks

Syntax
XIO 32,#IOCB,0,0,"R:"

Remarks
This function causes all the buffered data in the computer to be transmitted through the RS-232 port. This is used when the user wants to make sure that all data is transmitted before performing his next function. (This could also be performed by doing status request until the output data length is zero.)

Controlling Outgoing Lines DTR, RTS, and XMT

Syntax
XIO 34,#IOCB,Aux1,0,"R:"

Remarks
This function allows you to set the state of the output handshaking lines. This function may be perform in both concurrent and "non-current" mode (there is really no difference except for the way STATUS commands are interpreted). Care should be taken when disabling DTR (setting to false) since transmission and receiving are halted until DTR is set TRUE. Aux1 is coded as indicated by table 4-3.

Table 6-3. Control Values Added to Aux1 (XIO 34)
 
Function       Bit       Dec Equiv       Meaning When Bit is SET
DTR 7 128    Set state of DTR (from bit 6)
  6 64 Set DTR Ready (Not ready if bit is CLEAR)
 
RTS 5 32 Set state of RTS (from bit 4)
4 16 Set RTS Ready (Not ready if bit is CLEAR)
 
XMT 1 2 Set state of XMT (FROM BIT 0)
0 1 Set XMT to MARK (SPACE if bit is CLEAR)

Setting Baud Rate, Stop Bits, and Ready Checking

Syntax
XIO 36,#IOCB,Aux1,0,"R:"

Remarks
This function configures the RS-232 port for desired speed and stop bits. Aux1 is the sum of two codes; baud rate and the number of stop bits. The coding is given by Table 6-4. You must add the value representing the desired baud rate to the code (0 or 128) for the desired number of stop bits per word. Note that the word size is always 8 bits plus 1 or 2 stop bits; the MIO "R:" handler doesnot support smaller word sizes as did the Atari 850 interface.

The "missing" baud rates are available through the ACIA on the MIO but are not supported by the "R:" handler since they are never used.

Table 6-4. Codes to Add to Aux1 (XIO 36)*
 
Add Baud Rate Add   Baud Rate
0    300       5    110    
8 300 9 600
10 1200 12 2400
13 4800 14 9600
15 19200

* Default is 1 stop bit. Add 128 for 2 stop bits.

Setting Translation Modes and Parity

Syntax
XIO 38,#IOCB,Aux1,0,"R:"

Remarks
This function configures the parity and level of ASCII/ATASCII translation. The value of Aux1 is derived from Table 6-5.

Table 6-5. Control Values Added to Aux1 (XIO 38)
 
Function       Add       Resulting Function Performed
PARITY 0   No parity (8-bit data is untouched) (default)
  4   Check/Set odd parity, clear parity bit
8 Check/Set even parity, clear parity bit
12 Send mark parity, clear parity bit
TRANS- 0 Light ATASCII/ASCII translation (default)
LATION 32 No translation
LINE 0 Do not append LF after CR (default)
FEEDS 64 Append LF after CR (translation from EOL)

Setting Concurrent Mode

Syntax
XIO 40,#IOCB,0,0,"R:"

Remarks
This function simulates the "Start concurrent mode I/O" of the P:R: Connection and Atari 850. This is needed because of the dual nature of the STATUS command. When in concurrent mode, the statement returns the size of the data buffers, whereas, when in "block mode", the statement returns the state of the handshake lines. This has no effect on the rest of the "R:" handler functioning or on the ACIA. It simply set a flag for the STATUS function.


Previous page Next page