On Jan 29, 2008, at 4:33 PM, Joshua Alexander Dersch wrote:
In the
early-mid 80's a program was "well behaved" if it did it's
I/O thru DOS calls. Those programs would run on just about anything.
Were there similar problems in the CP/M world? That is, was it
commonplace for there to be CP/M programs that bypassed CP/M BDOS
calls and wrote directly to a specific machine's hardware? Seems
like CP/M developers were more disciplined in this fashion, but
maybe it's just because in the CP/M arena there were so many
different pieces of hardware it was the only way to do it?
(Whereas with IBM, the PC was seen as more of a reference standard,
even if it wasn't really that way in the beginning?)
I'd be interested to hear opinions from people who were there at
the time, since it was a little before my time.
I was there; I was a CP/M weenie for many years. I still use it
from time to time; it's lots of fun.
The CP/M BIOS definition doesn't provide for all the things a user
might want his/her hardware to do. Accessing serial ports
efficiently is one thing...Some popular CP/M communications programs,
such as the MODEM7 family, used the concept of "overlays" (not the
kind that we use in the PDP-11 world!), which are assembly language
modules which are written for your specific hardware that present a
unified (BIOS-like!) interface to the rest of the MODEM7 code. It
was intended that end users would write these routines for their
specific hardware. (in a day when end users were typically highly
technical people)
Formatting floppy disks is another example. The CP/M BIOS has no
provision for floppy disk formatting, so a formatter program had to
be written for each floppy controller, and it accessed the
controller's registers directly to perform the formatting (and
sometimes verification) function.
Other than specialized hardware (lab I/O, speech synthesizers,
real-time clocks) there weren't many instances of programs directly
accessing I/O in my experience.
-Dave
--
Dave McGuire
Port Charlotte, FL