Apple MultiRam C Computer Hardware User Manual


 
8.6 AUXILIARY MEMORY MANAGEMENT
Data can also be transfered from one MultiRam C 64K auxiliary bank to another
64K auxiliary bank. This could be done by selecting the source bank, copying the
source bank’s data into main memory using AUXMOVE or your own memory move
routine, selecting the 64K destination bank, and then writing the data to the
destination bank from main memory.
Another method is to transfer data directly from one bank to another, one byte
at a time, through the accumulator. The memory move routine doing the transfer
must always be located in the part of memory not being transfered. The safest
method of doing this type of transfer is to locate the move routine on the
motherboard main or bankswitched memory areas.
80—Column Addressing
The 80—column display is derived from the //c’s 64K auxiliary bank 0 only. When
another bank is active, the 80—column display will still come from bank 0; the
RAM in bank 0 is automatically refreshed during the //c’s video refresh cycle.
Therefore, you do not have to keep a mirror image of the bank 0 text page area
in other banks in order to maintain the 80—column display when you switch banks.
To read and write to the 80-column screen, auxiliary bank 0 (zero) should be
selected. If you write to the text video page area with some other bank selected
while an 80-column display is active, information displayed will become garbled.
You may only safely write to the text page area of an auxiliary bank
——other than bank 0 — if an 80—column display is not active.
To avoid potential problems, you may want to exclude the 80—column text page
area ($400—$7FF) from use on all banks.
Similar warnings apply to double hi—res displays.
Reset Key Trapping
Pressing the Reset key will not automatically switch in auxiliary bank 0 (zero).
If you would like to direct your program to a specific auxiliary bank location
when the Reset key is pressed, you must change the reset vectors $3F2 and $3F3
to point to a routine that will write the desired bank number into $CO7X.
Interrupt Handling
Interrupts are handled in the Apple //c by an interrupt vector located at $FFFE.
The $FFFE location is normally RUM area.
If an auxiliary bank’s bank—switched memory is active when the interrupt occurs,
that bank most have a vector at the $FFFE location in its memory pointing to an
interrupt handler routine on motherboard main memory. The interrupt handler
routine should be able to return to the bank that was active when the interrupt
occurred if abank active” temporary byte is being maintained by your program in
maim motherboard memory ($200—$BFFF) or a defined location in another area.