From: ard at p850ug1.demon.co.uk
----snip---
Unless you want to run a modified CP/M and applications, you need RAM
starting at location 0. Since the Z80 starts at location 0 when you reset
it, the normal thing to do is to have a boot ROM [1] that replaces RAM at
locaiton 0 on resetm and is then switched out 9or relocated to the top fo
the memory map) once the machine has loaded the OS into RAM.
[1] Some machines -- I think Cromemco was one -- had a little bit of
hardware to force a jump instruction onto the processor data bus
immediately after rest, thus forcing th CPU to execute thr boot ROM at
the tom of the memory map. Whether you want to call this a 'ROM at
location 0' is up to you ;-)
---snip---
Hi
I suspect that the reason for this may have been that the original
CP/M was done on computers with 0 based RAM and methods to
load code at 0 on boot.
I don't recall how the MDS800s did this but I do know that early
work on CP/M was done with one of Torode's early controllers.
These were DMA and had there own state machine that
could auto transfer the first boot sector into RAM on reset, independent
of what processor was in the machines.
I have one of his later controllers in my IMSAI and that is how it
works.
Adding hardware to do the ROM/RAM transfer on boot is relatively
easy with the addition of a 7474. Most machines decode a I/O
address. You use the first I/O to toggle the 7474 and that turns
on the RAM and the ROM off. Reset is connected to the 7474.
Most ROM and RAM boards use some type of comparator to
determine the addess ( a 74688 was what I recall ). Normally
the input was tied to ground. This could be tied to the 7474.
On newer boards, there was the phantom signal.
The boot ROM would transfer all the needed ROM to RAM
and then switch to all RAM.
Dwight