[comp.os.cpm] A PCPI revolution

mrapple@uop.edu (Nick Sayer) (12/17/88)

For the longest time, I have been unhappy with the way that
overlays and inserts for serial I/O under Apple CP/M were written.
No installation file seemed to be right without being hacked
to bits to make it fit. PCPI CP/M has such a nice drivers
facility, it seems a waste not to put it to full use. I
discovered the trouble with this idea is that the drivers don't
include proper calls for setting baud rate, sending breaks, and
checking carrier (among other things), so alas, we're back
to peeks and pokes again.

Well, since writing the patches to get MEX, BYE and IMP talking
to my IIgs modem ports (which require firmware calls, and really
don't allow direct hardware access), I decided to try writing a
driver with some extended commands to deal with those non-standard
requests, such as setting baud, PSW (parity, stop and wordlen),
checking carrier, sending break, lowering DTR momentarily, and
dialing.

For my idea to be of any use at all, it seems to me we ought to
set a standard about this sort of thing. If we all agree on how the
extra commands are to be called, we can wrap this whole thing up
quickly. The advantage is that overlays for MEX, BYE, IMP and other
such programs will have only one overlay for PCPI CP/M -- and it
won't take an inordinant amount of hacking to get it to work.

I therefore propose that such drivers be the same as ordinary character
drivers (to insure backwards compatability) except for some changes:

1. the character write routines should be transparant -- they should
not respond to "Ctrl-A" type commands.

2. Character drivers have "other" commands available that are usually
not implemented. Let's implement them like this:

COMMAND E5 - check driver. This command should return an 80H if
the driver conforms to this standard, except for the pickup and dial
calls (it is a serial port and can't by itself do such things) or
81H if it will pickup and dial also (as is the case for the Apple Cat
Micromodem, or other such devices).

COMMAND 10 - set baud rate. This command takes 1 byte paramater -
the baud rate to set as in the table below. Returns non-zero if the
baud rate requested is not available.

01 - 50 baud            08 - 1200 baud
02 - 75  baud           09 - 1800 baud
03 - 110 baud           10 - 2400 baud
04 - 134.5 baud         11 - 3600 baud
05 - 150 baud           12 - 4800 baud
06 - 300 baud           13 - 7200 baud
07 - 600 baud           14 - 9600 baud
			15 - 19200 baud

COMMAND 11 - set PSW. This command takes 1 byte paramater - the
PSW settings. The hi nibble is the data format (stop and wordlen)
and the lo nibble is the parity setting.

    hi nibble                lo nibble
00 - 8 bits, 1 stop       00 - no parity
01 - 7 bits, 1 stop       01 - odd parity
02 - 6 bits, 1 stop       03 - even parity
03 - 5 bits, 1 stop       05 - mark parity
04 - 8 bits, 2 stop       07 - space parity
05 - 7 bits, 2 stop
06 - 6 bits, 2 stop
07 - 5 bits, 2 stop

These values were chosen because they conform nicely to the 6551
and the IIgs firmware request values (same with the baud values)

COMMAND 12 - check carrier. No paramaters. return non-zero if carrier
OK.

COMMAND 13 - send break. No paramaters. return 0 if completed ok

COMMAND 14 - hangup. No paramaters. Return 0 if completed ok. for
serial ports, lower DTR for 300 msec.

The following commands active only if command E5 returned 81

COMMAND 15 - pickup. one paramater. if non-zero, establish
answer mode. If 0, originate.

COMMAND 16 - dial. 1 byte paramater. ASCII character to dial.
I suggest that if the ascii character "T" is sent, switch to
tone if available, "P" for pulse. characters "0"-"9", "*" and "#"
represent legal digits. Other commands may be added (such as
a flash-hook command, or a pause, etc).

To dial a number, pickup in originate mode, dial, then wait for
the carrier to appear. If no carrier before timeout, hangup.

-----

I have such a driver available for the IIgs serial port, the
Super Serial card, as well as a MEX overlay for such a driver.
BYE is coming soon. If someone with an Applecat and PCPI and
someone else with a Micromodem and PCPI would write one too,
we could get this whole thing off the ground nicely. The driver
facility is just too convenient and useful for this sort of thing
to let it go unused.

Thanks for reading this whole thing. Both of you. :-}

---------------------------------------------------------------------- 
Nick Sayer | Packet Radio: N6QQQ @ W6FGC-2 | Fido: 161/31
uucp: ...!sdcsvax!ucbvax!ucdavis!uop!mrapple
Disclaimer: "The BBC would like to appologize for that last announcement."
cat flames > /dev/null