Date : Sat, 14 Oct 2006 09:01:49 +0100
From : "David Harper" <dl.harper@...>
Subject: Re: 80196 ROM image
John Kortink wrote:
>>Note that this one is the version slightly modified for a 1Mb machine. In
>>fact the modification is only a single byte: the byte at 3E94h has the
>>value
>>F0h; the original (for a standard Master 512) has this byte set to C0h.
>
>Not only at 3E94 is C0 changed to F0, also at 3EC2.
>At least compared to my ROM dumps.
I was not aware of this one (and I do not have an original 512Kb ROM to
compare it with).
This byte should be F0h and should always have been. If it was anything else
then it was a bug in the original that would not show up until the other
alteration was made.
This is in the part of the code that copies the default interrupt vectors
from ROM into Segment 0. It is the high byte of the segment address of the
source. With it set to F0h (as it should be) the vectors are copied from
Segment F000h to Segment 0.
If this byte was C0h, then it would cause the vectors to be copied from
Segment C000h. This would work (until the other alteration was made) but
makes no sense. In a standard 512Kb machine the ROM is duplicated in all
locations from C0000h to FFFFFh (absolute), so addresses in Segment C000h
will indeed read from the ROM. However, everywhere else the effective ROM
segment address is F000h. Changing the first byte I mentioned causes the ROM
to be duplicated only in locations F0000h to FFFFFh (absolute), so Segment
C000h is now in RAM.
In other words, this byte *must* be F0h once the other change is made, but
should really have had that value in the first place.
David Harper