===== MEMORY =====
Color Computers 1 and 2 shipped with 4, 16, 32, or 64KB of [[RAM]] depending on options and board. \\
The Color Computers 1 and 2 were equipped with a Synchronous Address Multiplexer ([[SAM]] MC6883) to manage memory configuration and refresh. \\
Color Computer 3 shipped with 128 or 512KB of [[RAM]] depending on options chosen. \\
The Color Computer 3 custom GIME chip included emulation for the previous generation's [[SAM]] chip as well as provided a new Memory Management Unit [[MMU]] for working with memory larger than 64KB.
===== MMU =====
The Color Computer 3 GIME Memory Management Unit (MMU) registers map 8K blocks of [[RAM]] from the full 128-512K memory space into the 64K MPU workspace.
^ 64K Workspace Range ^ Task Register 0 ^ Task Register 1 ^
| $0000 - $1FFF | $FFA0 | $FFA8 |
| $2000 - $3FFF | $FFA1 | $FFA9 |
| $4000 - $5FFF | $FFA2 | $FFAA |
| $6000 - $7FFF | $FFA3 | $FFAB |
| $8000 - $9FFF | $FFA4 | $FFAC |
| $A000 - $BFFF | $FFA5 | $FFAD |
| $C000 - $DFFF | $FFA6 | $FFAE |
| $E000 - $FFFF | $FFA7 | $FFAF |
===== PROGRAMMING =====
The MMU is enabled and disabled by setting or clearing bit 6 of GIME register INIT0 ($FF90)
Examples assume Task Register ($FF91 bit 0) is setup for Task 0.
Map an extended memory block 6.0 into the 64K workspace:
LDA #$30 * SETUP BLOCK 6.0
JSR MMU
...
MMU ORCC #$50 * DISABLE INTERRUPTS
STA $FFA1 * MAP BLOCK 6.0 ONTO 64K RANGE $2000 - $3FFF (BLOCK 7.1)
ANDCC #$AF * RE-ENABLE INTERRUPTS
RTS
Restore the original block back into the 64K workspace:
LDA #$39 * SETUP BLOCK 7.1
JSR MMU
...
MMU ORCC #$50 * DISABLE INTERRUPTS
STA $FFA1 * MAP BLOCK 7.1 BACK ONTO ITS 64K RANGE $2000 - $3FFF
ANDCC #$AF * RE-ENABLE INTERRUPTS
RTS
===== SEE ALSO =====
[[RAM]] Extended Memory Map
===== RTS =====
Return to [[:Tandy Color Computer:]]