home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
ddjmag
/
ddj8706.arc
/
EXCOM.TXT
< prev
next >
Wrap
Text File
|
1987-08-05
|
5KB
|
133 lines
EXCOM version 2 notes
A. Release Contents
These notes assume that the reader is familiar with "excom" as presented
in June DDJ. The release of excom consist of three files, the others are
excom.asm and exmode.c. The new versions of excom.asm and exmode.c are not
compatible with the versions printed in DDJ, the extended initialization
call has been changed and is not upward compatible.
B. Change Summary
Excom now supports interrupt driven output buffering, output XON-XOFF,
and self repair after running some badly behaved applications. Exmode has
been enhanced to support new excom features. A few bugs were fixed.
C. Transmitter
When a transmit request is made, the character is put into a buffer and
control is returned to the caller without waiting for the character to
actually be sent. The caller is only made to wait when the buffer is full.
Some points of interrest follow:
1. Status
The status returned from the initialization, transmit, and status
calls (int 14h with ah = 0, 1, and 3) is a lie. If there is room in the
transmit buffer, the status indicates that the transmit holding register
is empty. This status would most likely be used by an application to
decide if a transmit will return immediately or delay the application.
For this case the status lie really tells the application what it wants
to know, that another character can be handled without delay. For
performance reasons, the receive call (ah = 2), doesn't include this lie,
hope no applications use status returned from receive to decide to
transmit.
2. RTS
The bios asserts RTS just before the first character is transmitted
and then leaves it on. Excom asserts RTS upon initialization.
3. XON-XOFF transmit
Excom will transmit XON and XOFF as flow control characters without
regard for transmit control signals or the transmitter being X'ed off.
4. Transmitter disable
Excom will accept characters into the output buffer even if current
conditions prohibit sending the characters. This will cause problems for
applications that send a character and wait for a timeout to determine
that the transmitter is disabled.
D. Self Repair
Excom will re-initialize the UARTS and the UART interrupt vectors under
two circumstances, when excom is waiting for a receive character and if when
starting up the the transmitter, the UART interrupt vectors are found to be
corrupted. The goal here was to solve some specific problems that I was
having without hurting performance too much. My problem was that I was
running a shell through a com port, switch back to the console, run
CrossTalk through the same port, return to my shell to the com port, re-boot
because CrossTalk had changed the UART vectors. This feature may not ever
help you, but it's cheap and doesn't seem to do any harm. The choice of
when to do the reinitialization was based on a balance between performance
and picking a few spots where is would be likely to help. If the bad
program changes the vector for int14h, excom will never be called and thus
can't fix anything.
E. Relocation to Top of RAM
The article promises that this version will relocate to the top of RAM.
I lied, looking at several resident programs that did not relocate and
reconsidering the facts convinced me that it was more trouble than it was
worth. To avoid memory problems, have excom installed with your
"autoexec.bat" if you want it all the time or if you only want it with
certain programs, load excom, run the program, remove excom.
F. Other Thoughts
Here are a few little things that popped into my head while working on
this code that may be of help.
1. UART speed
I have seen code for the 8250 UART that delays a little between
accesses to the UART. I have never had a problem with my code even
though there are a few places where I beat on the UART a bit. If excom
doesn't work on your machine, try some nop's to space the tight groups of
UART accesses.
2. Wasted space
There is probably some clever way to use the program header for data
space. I never worried about it and so that 256 bytes of header just
sits there doing nothing.
3. Exact status
If an application looks for an exact match of status instead of just
checking the specific bits of interrest, excom will probably not work
correctly. See above and the article for discussions about status
differences.
4. Bulk I/O
Given the nature of buffered I/O, it would be desirable to have calls
to excom to move 'n' characters. In fact DOS could be modified to use
these calls when sending or receiving blocks of data. Oh well, I can't
do everything.
G. Support
Feel free to write to me, via DDJ, with any bugs, questions, etc. I will
be glad to fix any bugs and will consider enhancement requests.