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