home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 3
/
hamradioversion3.0examsandprograms1992.iso
/
packet
/
apl505
/
mbbios.doc
< prev
next >
Wrap
Text File
|
1990-01-28
|
16KB
|
377 lines
============================================================================
; ;
; Copyright 1986, 1987, 1988 by H. Roy Engehausen. All rights reserved. ;
; This software may be freely distributed and used, but it may not ;
; under any circumstances be sold by anyone other than the author. ;
; It may be distributed by a commercial company as long as it is ;
; for no cost. ;
; ;
; Permission is explicity granted to use this code as a model for ;
; other programs requiring interrupt driven serial I/O as long as they ;
; carry this copyright notice and the imbedded constants ;
; ;
============================================================================
MBBIOS is an assembler language program that captures INT 14 (the COM
service call) and extends it with support for the 8250 async port in
buffered mode and adds support for the 8530 PACCOMM PC-100 packet board.
It is configured by the file MBCNF.ASM. MBBIOS is a resident extension
to DOS and only has to be invoked once.
Copyright 1986, 1987, 1988 by H. Roy Engehausen. All rights reserved.
This software may be freely distributed and used, but it may not
under any circumstances be sold by anyone other than the author.
It may be distributed by a commercial company as long as it is
for no cost.
Permission is explicity granted to use this code as a model for
other programs requiring interrupt driven serial I/O as long as they
carry this copyright notice and the imbedded constants
================================================================================
! !
! File contents !
! !
================================================================================
Files included are:
MBBIOS .COM -- The resident program. Comes configured for COM1 and COM2 as
standard ASYNC
MBBCONFG.COM -- Configuration control program
MS400 .MOD -- How you share interrupts on a DFI MS-400 card
This ARC file may contain the source code. If not, you can get it by
sending an SASE with a standard IBM/PC 5 1/4" or 3 1/2" diskette to me
at 8660 Del Rey Court, Gilroy, California, 95020. Please format the
disk so I know what density you want.
8250con .asm -- 8250 hardware constants
8250ini .asm -- 8250 initialization
8250int .asm -- 8250 interrupt handler
8250svc .asm -- 8250 service call handler
8250svcx.asm -- 8250 service call handler (extended)
8250tmr .asm -- 8250 timer pop handler
qrqpcon .asm -- Quadram QuadPort hardware constants
qrqpini .asm -- Quadram QuadPort initialization
8530con .asm -- 8530 hardware constants
8530ini .asm -- 8530 initialization
8530int .asm -- 8530 interrupt handler
8530svc .asm -- 8530 service routines
8530tmr .asm -- 8530 timer pop handler
kiss .asm -- KISS constants
asmmb .bat -- BAT routine to assemble MBBIOS
mbbios .asm -- Main line
mbbcom .asm -- Control block format
mbbinit .asm -- Initialization routine
mbbinter.asm -- Interrupt handler
mbbload .asm -- Load MBBIOS
mbbsubr .asm -- General Subroutines
mbbtimer.asm -- Timer pop handler
mbbusvc .asm -- User request service routine
mbcnf .asm -- ASM file configured for COM1 and two PC-100 ports
================================================================================
! !
! Configuring !
! !
================================================================================
Use MBBCONFG to configure the tables inside MBBIOS with regards to your
particular hardware configuration. All ports which share interrupts must be
defined! Thus if you a port on a PC-1XX, define both ports. If you use a
port on a MS-400 with the diode modification, you must define all the ports
with diodes on them.
================================================================================
! !
! Parameter explanations !
! !
================================================================================
The HIGH SPEED option is used to shift the data rate table. See the
explanation on AH=0 below.
TRANSMIT BUFFERING allows MBBIOS to return control to the calling
program before the character is fully sent.
HARDWARE HANDSHAKING makes MBBIOS follow the RTS/CTS-DTR handshaking
system used by many TNCs.
Recommended settings:
Type BBS --> RLI/MBL/BQE Host mode (e.g. AA4RE BB)
Transmit Buffering Try ON. If Must be ON
you get hangs,
OFF
Hardware Handshake Must be ON Must be OFF
================================================================================
! !
! Using !
! !
================================================================================
Simply execute MBBIOS before running the program that needs it. If you
wish to unload MBBIOS for some reason, issue MBBIOS /U.
================================================================================
! !
! Software Notes !
! !
================================================================================
--------------------------------------------------------------------------------
! !
! ASYNC + Extended Support for BBS !
! !
--------------------------------------------------------------------------------
MBBIOS supports the standard INT 14 calls plus the extended ones as
defined by Jeff Jacobsen, WA7MBL for his BBS program. These are
explained below. AH=0 to AH=3 are identical to the IBM BIOS definition.
AH = 0 Initialize
---------------------
This initializes the communications port. AL contains parity, stop bit,
and word length as in the standard BIOS call. On return, AH contains
the Line Status Register information (except bit 0 - Data ready tells
whether there is information in the extended buffer rather than the SIO
chip receive buffer). AL contains the Modem Status Register.
The baud rate is selected via AL. If the high speed option is off, the
rate is a specified for the standard BIOS call. If the high speed
option is on the speed settings are from the alternate table
High speed option off:
MSB LSB
7 6 5 4 3 2 1 0
----data-rate---- -Parity-- Stopbits --Word length--
000 - 110 X0 - none 0 - 1 10 - 7 bits
001 - 150 01 - odd 1 - 2 11 - 8 bits
010 - 300 11 - even
011 - 600
100 - 1200
101 - 2400
110 - 4800
111 - 9600
High speed option on:
MSB LSB
7 6 5 4 3 2 1 0
----data-rate---- -Parity-- Stopbits --Word length--
000 - 9600 X0 - none 0 - 1 10 - 7 bits
001 - 14400 01 - odd 1 - 2 11 - 8 bits
010 - 19200 11 - even
011 - 28800
100 - 38400
101 - 57600
110 - 115200
111 - 330400
The high speed option can be set either by MBBCONFG or by software
using AH=9 (see below).
AH = 1 Send Character
-------------------------
AL contains the character to send. Return values are the same as above.
AH = 2 Receive Character
----------------------------
On return, AL contains the character received. AH contains the
composite receive LSR. This is done by ORing all LSRs on receive
interrupts together. Therefore the LSR returned does not necessarily
match the LSR for the the character this routine returns). Again, AH
bit 0 indicates if there is additional characters in the buffer. This
routine does NOT timeout while waiting for a character but will hang
indefinitely waiting for a character to appear.
AH = 3 Return Status
------------------------
Return values are the same as returned by the Initialize routine.
AH = 4 Inquiry
------------------
AH returns 0AAH. AL returns 055H. This call is used to see if the
MBBIOS driver has been loaded for a particular port.
AH = 5 Drop RTS
-------------------
This drops DTR (pin 20) and RTS (pin 4). Used to tell the TNC not to
send any more information. TNC-1 and PK-232 use pin 4 for handshaking.
TNC-2 uses pin 20 (dont ask me why!) No return value.
AH = 6 Raise RTS
--------------------
Raise DTR and RTS. No return value.
AH = 7 Send Break
---------------------
Generates a "Break". Useful for getting TNC-2 or PK-232 into Command
mode from Converse or Transparent mode. (However, if the TNC is sending
characters at the time, they will be garbled.) No return value.
AH = 8 Non-destructive Read
-------------------------------
Returns the next character in the buffer in AL without removing it from
the buffer. AH value defined as in AH=2 so you can use the Data Ready
bit to check to see if you really did get a character.
AH = 9 Set/Get options
--------------------------
Set the current option byte to AL returning the old option byte in AL.
The option byte is defined as follows:
.......xB Transmit buffering (1 = on, 0 = off)
.....x..B Hardware handshaking (1 = on, 0 = off)
..x.....B High speed option (1 = on, 0 = off)
xx.xx.x.B Reserved. May be in use on other types of devices
AH = A Write buffer
-----------------------
Sends CX characters starting at DI:ES. Upon return, DI will be updated
and CX will contain the unsent character count. Unsent characters could
result from either BUFFER FULL or hardware handshake is OFF. AX will
be set as in AH=3 (Status) above.
AH = B Read buffer
------------------
Receives up to CX characters starting at DI:ES. Upon return, CX set to
actual count read and DI is updated. If the buffer is empty, return is
immediate with CX = 0. On return, AL contains the MSR and AH has the
composite receive LSR. This is done by ORing all LSRs on receive
interrupts together. Therefore the LSR returned does not necessarily
match the LSR for the the character this routine returns). Again, AH
bit 0 indicates if there is additional characters in the buffer. This
could happen if characters were received between the time of the buffer
movement and the loading of the LSR into AH.
--------------------------------------------------------------------------------
! !
! PACCOM PC-100, PC-110, PC-120 support !
! !
--------------------------------------------------------------------------------
AH = 0 Initialize
---------------------
Parms
xxx..... = Data rate. Use same settings as IBM ROM BIOS.
300 bps = 2, 1200 bps= 4.
...x.... = Full duplex if 1. Half duplex if 0.
....x... = Error packet handler. 0 = throw away all error
packets.
.....xxx = Don't care. Use 0 for now!
Special case -- If AL = 0 then the COM port is closed!
The bits shown are used for parity on an ASYNC port and will be zero for
a KISS interface so it should be compatible with TCP/IP usage of INT 14.
AH = 1,2 Send/Receive Characters
----------------------------------
See above. Packets are handled in KISS format. Note that all commands
which set time are rounded to the nearest 50ms value.
AH = 3 Status
-----------------
Returns AH.. AL=0
0.00000. = not assigned. Zero
.x...... = If 0 then packets remain in the transmit queue
.......x = If 1 then data await in the receive queue
These bits correspond to THRE and RDA so are compatible to ASYNC ports
AH = 4 Inquiry
------------------
AH returns 0AAH. AL returns 055H. This call is used to see if the
MBBIOS driver has been loaded for a particular port.
AH = 10 Send a packet
------------------------
ES = Segment of buffer containing the packet to be sent. Note: The
buffer pointed to by ES will be freed when the packet is sent unless
this is turned off. It should be gotten via Opcode 12. It must be 512
bytes long and conform to the layout of the buffers
Buffer Layout:
0 - 503 -- data (504 bytes long)
504 - 505 -- 16 bit data length
506 -- flags/status #1
x........ = If 1 then don't discard
this buffer after xmt.
.x....... = If 1 then this buffer has
been transmitted
..0000000 = not used
507 -- flags/status #2
000000000 = not used
508 - 509 -- User field. Not used by MBBIOS
510 - 511 -- MBBIOS uses as a pointer to next buffer in chain
AH = 11 Receive a packet
---------------------------
Returns ES with segment of buffer containing the packet received. If
zero, no such packet exists.
AH = 12 Buffer management
----------------------------
If ES is zero then returns a buffer segment in ES. If ES is non-zero
then the buffer pointed to is freed.
AH = 13 Set TXD -- Time from RTS to start or packet
------------------------------------------------------
AL = new setting in clock counts (54.3 ms)
AH = 14 Set P (persistance) -- Controls time from end of DCD to RTS
----------------------------------------------------------------------
AL = new setting. 255 = 1.0
AH = 15 Set Slot time -- Controls time from end of DCD to RTS
----------------------------------------------------------------
AL = new setting in clock counts (54.3 ms)
AH = 15 Set CRC wait -- time from start of last character to drop RTS
------------------------------------------------------------------------
AL = new setting in clock counts (54.3 ms)
Should be 5 character lengths minimum