Date : Sat, 14 Mar 1992 22:22:00 GMT
From : polari!rwing!fnx!del@uunet.uu.net (Dag Erik Lindberg)
Subject: Re: Televideo 803H information wanted
(sorry, there is a bug in my software I haven't found, so I lost the
attribution)
>I would assume that the boot ROM, as in most 8080/Z80 machines is at location
>0000. If the 803H is like the TPCI, it uses port 13H to bank-switch between
>ROM and RAM, and the top 16K of RAM is not switched.
You are mis-informed regarding most 8080/Z80 machines having the boot ROM
at 0000. At least for those that run CPM - certainly the TRS80 is an
example of a common machine for which your statement is true. If you can
call BASIC the boot ROM :-)
Anyway, most machines that run CPM have the boot ROM in high memory, usually
at F000 or F800. Various hardware tricks are used to get the CPU to start
executing at that address. My personal favorite was elegant simplicity
itself, needing only an 8 bit buffer and a single flip-flop. Whenever
reset was pressed, it set the flip-flop, which enabled the POJ buffer and
disabled the normal data bus buffer. The 8 bits were forced to a NOP value,
and the Z80 started cycling through the addresses. When the decode line
for the BIOS ROM went active (the Z80 had stepped through every address
from 0 to the first byte of the ROM), then the flop was reset, enabling the
standard buffering to the CPU. It was particularly elegant because most
other schemes require not only a higher parts count, but that the user
must set *two* addresses when addressing the BIOS, one for the BIOS itself,
and one for the POJ. Note that at 4MHZ it doesn't take long to step through
a 64k address space one instruction at a time :-)
The most brute force method requires lots of parts and is really terrible,
IMHO, but I suppose is the most 'politically correct' method. It is
probably the method that would be approved by most CS departments. :-) :-)
It is basically a state machine that forces three bytes on the bus in response
to the first three instruction fetches: a C3, a 00, and an XX where XX is
set by some dip switch or jumper block. This literally is a direct jump
instruction that starts execution at any 256 byte page in memory immediately
after reset.
There are a number of other schemes out there, I only described the best
and the worst of the common implementations I have seen.
--
del AKA Erik Lindberg uunet!pilchuck!fnx!del
Who is John Galt?