White Flame wrote:
Did the ROM file get posted somewhere?
Dumps of ROM1 and ROM3 were sent to me privately. I don't mind sharing information with the rest of the group, and I realize that the manual with schematics is out there, but I think it's wise to be cautious about posting ROM dumps or disassemblies publicly.
In cases where the cat is already out the bag (Applesoft BASIC comes to mind here), it may not be such a big deal.
RogerRabbit wrote:
Please can someone tell me the meaning of "$2058 to $236C are wrappers routines that JSR to $8000+3*n".
Code executed between $2000 and $7FFF comes from ROM1. Code exectued from $8000 to $FFFF comes from either ROM1 or ROM3 depending on which is currently selected. This is how it goes from one to the other.
At $91CA in ROM3 is routine that gets called from ROM1. Before actually getting to $91CA, ROM3 has to be selected. So what ROM1 does is a JSR $2058. The $2058 routine saves which ROM is currently selected, then selects ROM3, then does a JSR $8000, then restores the previous selected ROM. At $8000 in ROM3 is a JMP $91CA. So the $2058 routine "wraps" (as the term is commonly used) the functionality of selecting and restoring the correct ROM around the JSR $8000
The routine at $2076 does the same thing, except it's a JSR $8003 instead of $8000. This pattern continues at $2094 with a JSR $8006.
At $2148, the pattern changes slightly, as it also saves the Port 0 (data) register and the Port 0 function register, and disable /DME before the JSR (to $8018). Subsequent routines up to the routine starting at $234F follow one of these two patterns.
Starting at $236D up to the routine starting at $25FF are the routines which handle the other direction, i.e. selecting ROM1 instead of ROM3. For example, ROM3 will do a JSR $804E. At $804E is a JMP $2003, and at $2003 is a JMP $239C. At $239C, it's the same pattern as before, except it select ROM1 instead of ROM3. So $239C is one of the routines that "wraps" the functionality of selecting ROM1 around a JSR $A188.
RogerRabbit wrote:
I have been trying to get pictures from the logic analyser but to see all the code being executed there is very little on the screen so what I have done is to start going through the code and putting it into an excel spreadsheet. Here is part 1 from the boot up start.
The routine at $5F3C loops until bit 4 of the value at address $1800 goes low. At this point I don't know what $1800 is used for, but the /INT1 interrupt handler writes to it. So maybe look at the /INT1 pin (pin 60), and see if the signal there looks weird. However, based on that particular trace it looks like it's getting stuck before interrupts are enabled, so who knows.