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 |
|
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 TransfersData 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.