MMU
Memory Management Unit

$FF90    BIT 7= COCO    1=COCO1 OR 2 0=COCO3
         BIT 6= MMU     1=ENABLED 0=DISABLED
         BIT 5= IRQ     1=ENABLED
         BIT 4= FIRQ    1=ENABLED
         BIT 3= MAP3    1=DRAM at XFEXX constant
         BIT 2= MAP2    1=standard SCS
         BIT 1= MAP1    ROM map
         BIT 0= MPA0    ROM map
                        normally MAP1=1 & MAP0 x for 16K internal
                                                     16K external
$FF91    BIT 7
         BIT 6
         BIT 5= TIMER   normally 0
         BIT 4
         BIT 3
         BIT 2
         BIT 1
         BIT 0= TASK    MMU Task select

$FFA0 - $FFA7  MMU Task 0
$FFA8 - $FFAF  MMU Task 1
Both have the same memory assignments
$FFA0/8    $0000-$1FFF
$FFA1/9    $2000-$3FFF
$FFA2/A    $4000-$5FFF
$FFA3/B    $6000-$7FFF
$FFA4/C    $8000-$9FFF
$FFA5/D    $A000-$BFFF
$FFA6/E    $C000-$DFFF
$FFA7/F    $E000-$FFFF    But $FE00-$FFFF can be held constant at $7FExx

If you don't know it is safe not to, you should turn off interrrupts before swapping MMU blocks. Be very careful when swapping out ROM or low system RAM.

 return to higher level