Subject: Re: "CP/M compatible" vs. "MS-DOS Compatible" machines?
From: "Chuck Guzis" <cclist at sydex.com>
Date: Fri, 01 Feb 2008 13:06:58 -0800
To: cctalk at
classiccmp.org
Date: Thu, 31 Jan 2008 09:21:58 -0500
From: Allison
If one takes a moment some of that was INTEL MDS
artifact that were
programmed around. Also there are plenty of unused RST vectors.
For the later systems the 8259 was available and it inserted a
CALL XXXX where XXXX was anywere in addressable memory. The Z80
in mode2 interrupt also could vector anywhere in ram. DMA
is not impacted by how the low page is used.
IIRC, in ISIS-II, programs were loaded somewhere above 3000H,
depending on the buffer requirements of the program, but always above
the ISIS resident, which always occupied the same space, regardless
of memory size.
On some early 8080 implementations, an 8259 wasn't used (expensive!)
and a simpler circuit using a priority encoder and a latch to stuff
111iii11 onto the bus in response to an interrupt acknowledge. CP/M
could get in the way of this scheme, if it was desired to use the
RST0 vector for an interrupt. Otherwise, there was no problem,
except for the RST vector (usually 7) used for DDT--but that's local
to DDT and easily patchable (it's done for the Amstrad PCW, for
example).
That scheme also work for Z80 mode2 where I is XX and the inserted
low byte comes from the commonly 74148 and a pair of 74175s.
After having used ISIS before CP/M, I was happy to see
the "lean and
mean" CP/M. ISIS was verbose, clumsy and slow (e.g., :F0: instead of
A: for the first floppy drive; "DELETE" instead of "ERA").
Also an ISIS user. The usual OS used on the shop MDS was not ISIS
but instead CP/M!
Of course, had CP/M simply shifted the TPA up 256 bytes
and used the
area between 0100h and 01FFh for command-line storage, system request
vectors and FCBs, that would have solved the problem, but for the DDT
RST vector.
Having the RST0 vector already used wasn't too bad as it's also RESET
but the DDT one was harder as the cheap pullup resistor address
(RST7) was easy. Most of the z80 boards had vectored interrupt
logic and that made it easy as most systems only needed maybe two
or three ints to do the job and 6 were unused. It was only the early
8080 S100 machines that were impacted and some did have interrupt
hardware that was more than RST7 by pullup. By time CP/M-2 was
available Z80 was almost universal and the few that werent were
either 8085 or 8080 with ints. Whats interesting is the 8085
interrupt pins were all usable including trap in a CP/M environment,
thats potentially four interrupt inputs.
Now if you are doing low memory banking those interrupts locked in page
zero were a pain. Z80 mode 2 or other hardware was needed to get
out of that hole.
Allison
Cheers,
Chuck