On 4/24/07, Dave Dunfield <dave06a at dunfield.com> wrote:
The point of
ROM vs RAM at $0000 has been gone over a few times. Do
"standard" CP/M machines use a shadow-ROM technique, or what, to
cold-start?
There are many ways to accomplish getting RAM at 0, even though the CPU
has to boot from there.
I'm with you there.
Some systems force a JMP instruction onto the BUS
during the first three
fetches, which transfers control to a ROM at a higher location.
That seems like it would take a bit of extra circuitry to do.
An easy technique is to have the boot ROM appear in
two places (0 and
somewhere else), and remove the select at 0 (replacing it with RAM)
after the first three fetches...
Hmm... that's a trick I haven't seen used in the 68000 world.
The problem with either of those is that the ROM
remains in the memory
map and takes up valuable RAM space.
Right. That much I get... so once CP/M is running, it's ordinary not
to refer to the boot ROMs? There's typically not a requirement to
keep some low-level BIOSy stuff in ROM?
That certainly takes care of how to handle 64K of RAM - just get rid
of the ROM from the memory map as soon as possible. With my other
experience with 8-bit micros, I didn't expect that this was a viable
techique. The systems I am familiar with pretty much require that you
keep the ROMs around - even with the C-64, which will let you bank out
ROMs and run from RAM, folks didn't tend to completely ditch the
Kernel ROM. Of course, Commodore machines don't have a "real"
operating system as such, and not even a DOS in the sense of an Apple
II or a TRS-80 - the routines in the ROM were commonly used by
applications like Zork that didn't care about BASIC, but they did care
that the ROMs had enough low-level I/O stuff to read and write disk
blocks, etc.
CP/M covers a wide array of hardware - lots of
different memory configurations,
although typically you must have ram at 0000 and it must extend contiguously
upward from there - the more the better.
Right. I know that there are *many* CP/M hardware configurations; I
am trying to get down the nub of as minimal a hardware design as
possible.
> To confirm, the minimal I/O system is some flavor
of serial interface
> for console I/O (presumably piped to a display smart enough to handle
> ANSI codes), and some form of block-addressable storage with a CP/M
> filesystem, right?
CP/M itself is just a TTY interface - so it will run
on just about any
format display - applications however are a different story, and as there
was no standard, there is no complete answer to your question. 80x24 as
probably as close to "standard" as you will get, and would give you the
maximum compatibility.
OK. That's not unexpected.
You will also want a decent set of control codes
(cursor position, clear screen, clear to end of screen/line etc.). A TTY
that emulates some well known terminal from the era may make things
easier as many apps had prevonfigured setups for common TTYs.
Sure. For the minimal system I have in mind, I'm planning on a VT100
or some modern machine running a terminal emulator (Kermit, et al.) to
handle screen formatting.
A video card will chew up valuable RAM, and many of
them are only 16x64,
but it does let you do real-time screen updates, games etc.
Ah... now we are onto something - games... are there many games for
CP/M that require a video card, or were most happy with whatever sort
of TTY-type device (ANSI codes or not) was out there?
Thanks for the clarification, Dave,
-ethan