Apple MultiRam C Computer Hardware User Manual


 
AUXILIARY MEMORY MANAGEMENT 8.5
An example of a routine to identify useable memory is as follows:
LDX BANK# Bank number to start. $1B for //e compatibility
MARKALL STX BNKSELCT Select bank with the $C07X bank switch
STX ALTZP Write to $C009 for aux. zero page
STX TEST1 Write the bank number to first location
in zero page of selected bank
TXA Prepare for EOR
E0R #FF Reverse the bank’s bits setting
STA TEST2 Write the checksum byte to second location
in zero page of selected bank
DEX Decrease the bank counter
BPL MARKALL Loop through to bank zero
LDX BANK1 Bank number to start, same as MARKALL start
READALL STX BNXSELCT Select bank with the $C07X bank switch
CPX TEST1 Compare bank number against memory
BNE MAPFAIL Memory map marked showing bank n with no memory
TXA Prepare for EOR
EOR #FF Prepare the checksum for the double check
CMP TEST2 Compare the EOR’d byte for the double check
BNE MAPFAIL Memory map marked showing bank n with no memory
BEQ MAPPASS Memory bank exists, mark bank n into memory
READNEXT MAPFAIL, MAPPASS return here
DEX Decrease the bank count
BPL READALL Loop through to bank 0
STX MAINZP Select main memory zero page
RTS
Memory Bank Mapping
You should keep a record 0f available memory for your program’s use after you
have identified the memory on the card. Either a byte map or a bit map could be
used for the memory map. You may wish to construct a map that not only shows
which 64K banks are useable, but like DOS and ProDOS sector bit maps, also keeps
track of the availability of smaller increments of memory. The auxiliary bank
memory map could then become part of a larger memory manager.
You will also need to use a byte or bytes to track the memory bank in current
use. The $CO7X strobe cannot be read to see which bank was last called.
Memory Transfers
Data can be transferred from main memory to auxiliary memory and back using
standard //c auxiliary memory transfer commands. The RAMRD and RANWRT soft
switches and the AUXMOVE routine described in Chapter 7 all function normally.
The only difference is the additional need to determine which of the MultiRam
C’s 64K banks should be used for the transfer.