APPENDIX FOUR
Old (A) And New (B) ROMS
The new OS ROMs have been mentioned throughout the book. They
fixed some of the earlier OS bugs, but also changed a few ROM
locations in the process. The result is a better OS, but some of your
earlier software which calls up old ROM locations may not work with
the new.
There are two ways to test to see if you have the new or old ROMs; one
is to PEEK location 58383, as described there. The other (the hardware
solution) is to take out your ROM card, unscrew the metal top, and look
inside. If the two chips facing you on your left have an "A" after their
first code number, you have the earlier ROMs. If they have a "B",
lucky you. You have the latest ROMs. There is also the empirical test: if
your drive times out during I/O operations, you've got the old ROMs.
Here are the differences between the new and old ROM locations.
There are also a number of changes made with the new ROMs to the
vectors at locations 512 to 534, 546 to 549 and 550. Refer to those
locations and the OS locations for more information. The list below
first specifies the old ROM locations, then the changes in the new
ROMs.
55296-57343 (FP package) same
57344-58367 (character set) same
58368-58477 (vector tables) are the same to 58459 ($E45B) where there
are changes in the table between 58460-58466 ($E45C to $E462).
58467-59092 ($E463-$E6D4) same
59093 ($E6D5) is the start of the IRQ handler. Changes to the new
ROMs begin at 59126 ($E6F6) and continue to the end of the new IRQ
handler at 59280 ($E790).
59316 ($E7B4) is the NMI interrupt handler in the old ROMs, now starts
at 59281 ($E791). It is the same as the old version except moved 35
bytes lower.
59345 ($E7D1) is the start of the VBLANK routines in the old ROMs;
they now start at 59310 ($E7AE) in the new ROMs. The routines remain
the same until the SETVBL routine is reached at 59666 ($E912) old
ROMs, 59629 ($E8ED) new ROMs. The changes to the VBLANK
routine are mostly to adjust for the shift in the new memory locations.
58457 ($E459) is the SIO entry point for both versions. There are
changes in the SIO routines to accommodate the new memory
locations, but the entry point is still the same.
60048 ($EA90) output data needed interrupt service routine is
changed, but the entry point is the same in both versions.
60113 ($EAD1) the transmit done interrupt service routine is the same,
but has a new entry point at 60111 ($EACF).
60130 ($EAE2) the receive routine has some address changes and is
moved to 60128 ($EAE0).
60177 ($EB11) the serial input ready interrupt service routine is the
same, but the new entry point is 60175 ($EB0F).
60222 ($EB3E) the SIO subroutines have some changes and a new entry
point at 60220 ($EB3C).
60270 ($EB6E) the load buffer subroutine is the same, but moved to
60266 ($EB6A).
60292 to 60905 ($EB84 to $EDE9) all of the routines in this area are the
same, but have entry points four bytes lower in ROM (i.e., 60288;
$EB80).
60906 to 62014 ($EDEA to $F23E) these routines are the same and at
the same locations in both versions.
62015 ($F23F) test for RAM and special cartridge has the same entry
point, but has some changes to the routine.
62038 ($F256) RAM check subroutine has changes and a new entry
point, now at 62036 ($F254).
62081 ($F281) the hardware initialization routines, have changes and a
new entry point at 62071 ($F277) in the new ROMs. The changes
continue to 62159 ($F2CF) where everything again becomes the same
for both versions until the end of ROM at 65535 ($FFFF).
Return to Table of Contents
| Previous Chapter
| Next Chapter