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 a “bank active” temporary byte is being maintained by your program in maim motherboard memory ($200—$BFFF) or a defined location in another area.