On Mon, May 05, 2008 at 12:10:39AM -0700, Chuck Guzis wrote:
Hi Andrew,
Just sitting here wondering why you're not using one of the enhanced-
functioning Z80 chips. Even going with the 64180 or Z180 would give
you 2 UARTS and an MMU, in addtion to 2 DMA channels and a timer.
I can't speak for Andrew, but for me, I already have this SBC with
CPU, some RAM, enough ROM, and a peripheral bus with 5 or 6 PIO
chips, all in a package a little smaller than an Apple II PSU.
In any case, the ROM needn't be very big. I think
Don Tarbell used a
little bipolar 82S123 PROM. Gives you 32 bytes to do what you need,
which, in Don's case was enough to get the first sector of an 8"
floppy read.
I can see how that's easy to do if the disk controller does all
the work (the RK05 bootstrap for the PDP-8 is a word or two).
Since I was planning on using something like a CF card, I doubt I
could get away with 32 bytes, but certainly a few K is overkill.
CP/M BIOSes for 2.2 and below are easy--they're
poll-mode with
clearly described inputs and outputs. About the only thing you may
find confusing is the IOBYTE convention, but that's optional and
fairly well documented.
Optional in the sense that it can wait to implement until after
the rest of the code is done enough to get things to boot?
I've written a CP/M BIOS without resorting to
assembly, doing the
whole thing in machine code. It's not a big thing and you can start
with the basic set of disk and console I/O routines. There are two
boot entry points in the BIOS jump vector--the "cold start" entered
by a jump to 0000 that (re)loads the entire CP/M BDOS and CCP, and
the "warm start" that simply reloads the CCP.
OK. I was figuring that I'd be done once I got the basic set of disk
and console I/O routines done, but that's probably because I'm not
all that well versed with CP/M internals to know how extensive it
would be to do "everything".
Disk I/O is done in 128 byte "sectors", so
if your physical sectors
are longer than that, you'll need to set up blocking and deblocking
routines.
I was wondering about that, since I recall a statement back in the day
that the "standard" 5.25" scheme was '8" single-density'.
All of this is covered in the CP/M System Alteration
guide in pretty
fair detail, along with a couple of samples.
That sounds like a good guide to hunt down.
CP/M 3.0 or MP/M is more involved, taking advantage of
bankswitching.
Interrupt-driven I/O is required for MP/M--and the I/O system is
more elaborate.
I have no aspirations to MP/M, especially on such simple hardware.
CP/M 3.0 is a possibility, but I guess I don't even know enough to
know why I'd want 3.0 over 2.2. In terms of what I might want to
"do" with this project once I get it booting, I guess I'd probably
want to be able to run an assortment of programs that were common
back in the day. When I used to use Kaypros, we mostly edited text
files, ran the occasional dBase session (address labels and such,
IIRC), and I played Scott Adams adventures on them (since only the
first two were available for the PET at the time). I don't have any
dBase databases that I need to read, so I'm not even concerned if
that runs or not. I'd _really_ like to be able to fire up a
Z-Machine on this, but a good chuck of that effort would be in
how to implement the demand-paging scheme from a game file (vs
the common technique of the day of reading in random sectors from
a floppy that only held the game). That goal, I think, should be
its own project, one I should probably try in an emulated
environment first (such as the altair emulator in simh).
Thanks for the comments,
-ethan
--
Ethan Dicks, A-333-S Current South Pole Weather at 5-May-2008 at 20:50 Z
South Pole Station
PSC 468 Box 400 Temp -69.0 F (-56.1 C) Windchill -94.3 F (-70.1 C)
APO AP 96598 Wind 5.3 kts Grid 55 Barometer 697.5 mb (9975 ft )
Ethan.Dicks at
usap.gov http://penguincentral.com/penguincentral.html