Memory Management: Difference between revisions
| (32 intermediate revisions by 6 users not shown) | |||
| Line 1: | Line 1: | ||
The F256 | == Overview == | ||
The F256 series comes with 512KB or 2MB of SRAM, and 512 KB of internal system flash memory. Up to 256 KB additional Memory, either RAM or Flash, can be added through the [[Expansion Port]]. | |||
{| class="wikitable" | |||
|+F256 Series Memory Capabilities | |||
!Model | |||
!Hardware CPU | |||
!SRAM | |||
!Flash | |||
!Expansion Port | |||
!DRAM | |||
|- | |||
|F256Jr | |||
|65C02 | |||
|512kB (512k×8) | |||
|512kB | |||
|256kB | |||
|— | |||
|- | |||
|F256K | |||
|65C02 | |||
|512kB (512k×8) | |||
|512kB | |||
|256kB | |||
|— | |||
|- | |||
|F256Jr2 | |||
|65816 | |||
|2MB (1M×16) | |||
|512kB | |||
|256kB | |||
|— | |||
|- | |||
|F256K2 | |||
|65816 | |||
|2MB (1M×16) | |||
|512kB | |||
|256kB | |||
|128MB (not yet supported) | |||
|} | |||
The 1st gen 65c02 systems have an 8-bit data bus and a 16-bit CPU address bus, with an MMU managing 8 × 8k banks to address 512kB RAM plus flash, expansion, and the IO pages. | |||
The 2nd gen 2MB 65816 systems have 16-bit wide SRAMs, enabling higher bandwidth through the FPGA, even though the processor still has an 8-bit wide data bus. The same 64k address MMU with 512kB RAM configuration is used, but the Core2x FPGA core released in the summer of 2025 can enable 24 bit (16 MB) addressing and the full 2MB of SRAM both flat & banked. | |||
A FPGA-based 6809 CPU can be optionally run on all F256 models which will also use this same MMU, and disable the hardware CPU. A 68k FPGA-based processor core is also coming, which should use flat memory addressing only. | |||
'''NOTE:''' Changes associated with Core2x will be in <u>''italics and underlined''</u> throughout this page. | |||
== Flat Memory Models == | |||
Core2x is the future standard FPGA load, with both 24-bit flat access and MMU 8k pages in bank 0. This allows for backwards compatibility, banking direct page and stack, as well as having separate chunks of memory visible in a single CPU-addressable bank for copying & other processing. | |||
The 'e' FPGA load for series 2 provides this same 65816 flat memory model, with the older 1x speed & graphics capabilities. It hasn't been used much yet. | |||
{| class="wikitable" | {| class="wikitable" | ||
!Address!! | !Address | ||
!Size | |||
!Description | |||
|- | |||
|$00:0000 - $00:FFFF | |||
|64k | |||
|Core2x: 8×8kB MMU banked | |||
F256K2e: SRAM, except last 256 bytes | |||
|- | |||
|$00:FF00 - $00:FFFF | |||
|256 | |||
|F256K2e only: Mirror of the last page of Flash, for boot purposes | |||
|- | |- | ||
|$ | |$01:0000 - $1F:FFFF | ||
|2M - 64k | |||
|Rest of SRAM* | |||
|- | |- | ||
|$ | |$20:0000 - $9F:FFFF | ||
|8M | |||
|DDR3 window (to be implemented?) | |||
|- | |- | ||
|$ | |$F0:0000 - $F0:BFFF | ||
|64k reserved | |||
|[[IO Pages]]* | |||
|- | |- | ||
|$ | |$F4:0000 - $F7:FFFF | ||
|256k | |||
|Cartridge* | |||
|- | |||
|$F8:0000 - $FF:FFFF | |||
|512k | |||
|Internal Flash* | |||
|} | |} | ||
'''* NOTE:''' In Core2x, the starred regions must have a MMU bit enabled to expose them to the 24-bit flat address. They are only mapped through the MMU by default at boot. | |||
== Memory Management Unit (MMU) == | |||
=== 8kB Block Layout === | |||
The MMU splits the 64kB address space into 8 visible slots of 8kB each. A theoretical max of 256 selectable 8kB blocks yields a 2MB address space, which maps 512kB RAM, flash, and expansion. Devices are laid out every 64 ($40) blocks (512kB). | |||
The Core2x MMU expands the bank numbers to 10 bits, repeating the original layout 4 times, to expose all 2MB of SRAM while remaining backwards compatible. | |||
IO pages have their own space of numbered banks that overlay one fixed slot (6, $C000-$DFFF). | |||
{| class="wikitable" | |||
|+Memory Mapping | |||
!MMU 8kB Block Number!!Purpose | |||
!Flat memory flag | |||
!Flat address | |||
|- | |||
|$00 - $3F||512K SRAM <u>''(Page 0)''</u> | |||
| | |||
|$00:0000 - $07:FFFF | |||
|- | |||
|$40 - $7F||512K System Flash | |||
|<u>''MOVE_FLASH''</u> | |||
|$F8:0000 - $FF:FFFF | |||
|- | |||
|$80 - $9F||256K Cartridge | |||
|<u>''MOVE_FLASH''</u> | |||
|$F4:0000 - $F7:FFFF | |||
|- | |||
|$A0 - $FF||Reserved | |||
| | |||
| | |||
|- | |||
! colspan="3" |''<u>Core2x expansion</u>'' | |||
! | |||
|- | |||
|$100 - $13F | |||
|512K SRAM Page 1 | |||
|SRAM_EN | |||
|$08:0000 - $0F:FFFF | |||
|- | |||
|$140 - $1FF | |||
|Mirror of Flash, Cart, Reserved | |||
| | |||
| | |||
|- | |||
|$200 - $23F | |||
|512K SRAM Page 2 | |||
|SRAM_EN | |||
|$10:0000 - $17:FFFF | |||
|- | |||
|$240 - $2FF | |||
|Mirror of Flash, Cart, Reserved | |||
| | |||
| | |||
|- | |||
|$300 - $33F | |||
|512K SRAM Page 3 | |||
|SRAM_EN | |||
|$18:0000 - $1F:FFFF | |||
|- | |||
|$340 - $3FF | |||
|Mirror of Flash, Cart, Reserved | |||
| | |||
| | |||
|} | |||
{| class="wikitable" | |||
|+MMU Block Address Construction | |||
! | |||
!23 | |||
!22 | |||
!21 | |||
!20 | |||
!19 | |||
!18 | |||
!17 | |||
!16 | |||
!15 | |||
!14 | |||
!13 | |||
!12 | |||
!11 | |||
!10 | |||
!9 | |||
!8 | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|'''MLUT Entry''' | |||
| colspan="14" | | |||
| colspan="10" |Block Number | |||
|- | |||
|'''MLUT Entry''' | |||
| colspan="14" | | |||
| colspan="2" |<u>''Expansion''</u> | |||
| colspan="2" |Device | |||
| colspan="6" |Block offset in device (00-3F) | |||
|- | |||
| colspan="25" | | |||
|- | |||
|'''16-bit MMU Address''' | |||
| colspan="8" | | |||
| colspan="3" |MLUT Number | |||
| colspan="13" |Byte offset in 8k block | |||
|- | |||
| colspan="25" | | |||
|- | |||
|'''Flat SRAM''' | |||
|0 | |||
|0 | |||
|0 | |||
| colspan="2" |''<u>Expansion</u>'' | |||
| colspan="6" |Block offset in device (00-3F) | |||
| colspan="13" |Byte offset in 8k block | |||
|- | |||
|'''Flat Flash''' | |||
|1 | |||
|1 | |||
|1 | |||
|1 | |||
|1 | |||
| colspan="6" |Block offset in device (00-3F) | |||
| colspan="13" |Byte offset in 8k block | |||
|- | |||
|'''Flat Cart''' | |||
|1 | |||
|1 | |||
|1 | |||
|1 | |||
|0 | |||
| colspan="6" |Block offset in device (00-3F) | |||
| colspan="13" |Byte offset in 8k block | |||
|} | |||
Device = SRAM (0), Flash (1), Cartridge (2), or Reserved (3) | |||
===== Numerical address computations for SRAM/VICKY pointers ===== | |||
Full Gen 2 2MB: | |||
<code>SRAM address = ((MMU Block & 0x300) << 11) | ((MMU Block & 0x03F) << 13) | (Byte offset)</code> | |||
<code>MMU Block number = ((SRAM Address & 0x180000) >> 11) | ((SRAM address & 0x07e000) >> 13)</code> | |||
<code>MMU byte offset = SRAM Address & 0x001fff</code> | |||
Gen 1, or only using the first 512kB: | |||
<code>SRAM address = (MMU Block << 13) | (Byte offset)</code> | |||
<code>MMU Block number = (SRAM address >> 13)</code> | |||
<code>MMU byte offset = SRAM Address & 0x001fff</code> | |||
=== Configuring the MMU === | |||
There are 4 separate sets of MMU configurations called MLUT 0-3 (Memory Lookup Tables), for easy switching between well-known (including kernel vs user) memory mapping states. Each MLUT holds 8 bank selections, one for each 8kB memory slot respectively. IO mapping is optional, independent of MLUT selection, and overrides slot 6 at $C000. | |||
Only one MLUT is active at any one time. To select the active MLUT, the lower two bits of address $0000 (MMU_MEM_CTRL) are used. | |||
Editing of MLUTs is also controlled by MMU_MEM_CTRL ($0000): Bits 4 and 5 determine which MLUT to be edited, independent of which MLUT is active. Bit 7 has to be set to 1 to enable editing. When editing is enabled, the block number of a physical memory area can be written to the slot register address to map that area to the address in CPU address space. If editing is not enabled (bit 7 of $0000 is 0), the slot register addresses act as ordinary memory with no side effect. | |||
{| class="wikitable" | {| class="wikitable" | ||
! | |+Static MMU Registers | ||
!Address | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
| | |$0000 | ||
|RW | |||
|MMU_MEM_CTRL | |||
|EDIT_EN | |||
| - | |||
| colspan="2" |EDIT_LUT | |||
|<u>''SRAM_EN''</u> | |||
| - | |||
| colspan="2" |ACT_LUT | |||
|- | |- | ||
| | |$0001 | ||
|RW | |||
|MMU_IO_CTRL | |||
| - | |||
|<u>''SPR_SEL''</u> | |||
|<u>''MOVE_FLASH''</u> | |||
|<u>''MOVE_IO''</u> | |||
|<u>''IO_PAGE_EXT''</u> | |||
|IO_DISABLE | |||
| colspan="2" |IO_PAGE | |||
|} | |||
'''ACT_LUT''': These two bits specify which MLUT (0–3) is used to translate CPU bus address to system bus addresses. | |||
'''EDIT_LUT''': Selects which MLUT (0-3) will be edited. | |||
'''EDIT_EN''': If set (1), this bit enables MLUT editing, and memory addresses $0008–$000F (<u>''and $0002-$0003''</u>) will be used to edit the selected '''EDIT_LUT'''. If clear (0), those memory locations will be standard memory locations and will be mapped like the rest of slot 0. | |||
'''IO_PAGE''': Selects which IO page (0-3) is mapped to slot 6, when not disabled with '''IO_DISABLE'''. | |||
'''IO_DISABLE''': If set (1), slot 6 ($C000-$DFFF) is mapped through the active MLUT as normal. If clear (0), slot 6 is mapped to the selected '''IO_PAGE'''. | |||
Note that writing a simple page number to register $0001 easily selects that IO page (including 0) to be visible, although there are also other Core2x entries now as well. | |||
==== Core2x MMU Registers ==== | |||
''<u>'''SRAM_EN'''</u>'': Enables access to the SRAM pages 1-3 in flat addresses 00:0000 to 1f:0000. Disables MMU 8k bank access to SRAM only. IO and Flash/Cart are affected by their own bits below. | |||
<u>'''''IO_PAGE_EXT'''''</u>: Bit 2 of the total IO page number, enabling pages 4 and 5. | |||
<u>'''''MOVE_IO'''''</u>: Moves IO pages from MMU access to 24-bit address F0:0000. | |||
<u>'''''MOVE_FLASH'''''</u>: Moves Cartridge & Flash addressing from MMU access to flat address F4:0000 and F8:0000. | |||
<u>'''''SPR_SEL'''''</u>: Select current Sprite Block in IO Page 0. 0 = Sprite 0-63, 1 = Sprite 64-127. | |||
{| class="wikitable" | |||
|+MLUT Slot Editing Registers (only visible with EDIT_EN enabled) | |||
!Address | |||
!R/W | |||
!MLUT Slot Address | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
|2|| | |''<u>$0002</u>'' | ||
| | |||
| | |||
| colspan="2" |''<u>Slot 3 [9:8]</u>'' | |||
| colspan="2" |''<u>Slot 2 [9:8]</u>'' | |||
| colspan="2" |''<u>Slot 1 [9:8]</u>'' | |||
| colspan="2" |''<u>Slot 0 [9:8]</u>'' | |||
|- | |- | ||
| | |''<u>$0003</u>'' | ||
| | |||
| | |||
| colspan="2" |''<u>Slot 7 [9:8]</u>'' | |||
| colspan="2" |''<u>Slot 6 [9:8]</u>'' | |||
| colspan="2" |''<u>Slot 5 [9:8]</u>'' | |||
| colspan="2" |''<u>Slot 4 [9:8]</u>'' | |||
|- | |- | ||
| | |$0008 | ||
| | |||
|$0000 - $1FFF | |||
| colspan="8" |Edit MLUT Slot 0 block number [7:0] | |||
|- | |- | ||
| | |$0009 | ||
| | |||
|$2000 - $3FFF | |||
| colspan="8" |Edit MLUT Slot 1 block number [7:0] | |||
|- | |- | ||
| | |$000A | ||
| | |||
|$4000 - $5FFF | |||
| colspan="8" |Edit MLUT Slot 2 block number [7:0] | |||
|- | |- | ||
|7||$E000 - $FFFF|| $ | |$000B | ||
| | |||
|$6000 - $7FFF | |||
| colspan="8" |Edit MLUT Slot 3 block number [7:0] | |||
|- | |||
|$000C | |||
| | |||
|$8000 - $9FFF | |||
| colspan="8" |Edit MLUT Slot 4 block number [7:0] | |||
|- | |||
|$000D | |||
| | |||
|$A000 - $BFFF | |||
| colspan="8" |Edit MLUT Slot 5 block number [7:0] | |||
|- | |||
|$000E | |||
| | |||
|$C000 - $DFFF | |||
| colspan="8" |Edit MLUT Slot 6 block number [7:0] | |||
|- | |||
|$000F | |||
| | |||
|$E000 - $FFFF | |||
| colspan="8" |Edit MLUT Slot 7 block number [7:0] | |||
|} | |||
{| class="wikitable" | |||
|+ | |||
[[IO Pages|I/O Pages]] | |||
!I/O Page | |||
!B3 | |||
!B1 | |||
!B0 | |||
!MOVE_IO Address | |||
!Purpose | |||
|- | |||
|0 | |||
|0 | |||
|0 | |||
|0 | |||
|<u>''$F0:0000 - $F0:1FFF''</u> | |||
|Low level I/O Register (gamma table, Mouse GFX, all IO devices and vicky registers) | |||
|- | |||
|1 | |||
|0 | |||
|0 | |||
|1 | |||
|<u>''$F0:2000 - $F0:3FFF''</u> | |||
|Text display font memory and graphic color MLUTs 0,1,2,3 | |||
|- | |||
|2 | |||
|0 | |||
|1 | |||
|0 | |||
|<u>''$F0:4000 - $F0:5FFF''</u> | |||
|Text display character matrix | |||
|- | |||
|3 | |||
|0 | |||
|1 | |||
|1 | |||
|<u>''$F0:6000 - $F0:7FFF''</u> | |||
|Text display color matrix | |||
|- | |||
|<u>''4''</u> | |||
|<u>''1''</u> | |||
|<u>''0''</u> | |||
|<u>''0''</u> | |||
|<u>''$F0:8000 - $F0:9FFF''</u> | |||
|<u>''Memory text Color background LUT 0 & 1, Foreground LUT 0 & 1''</u> | |||
|- | |||
|<u>''5''</u> | |||
|<u>''1''</u> | |||
|<u>''0''</u> | |||
|<u>''1''</u> | |||
|<u>''$F0:A000 - $F0:BFFF''</u> | |||
|<u>''Memory text FONT 0,1,2,3 for 8x8 or 0,1 for 8x16''</u> | |||
|} | |||
{| class="wikitable" | |||
|} | |} | ||
== Memory Block Tables == | |||
The following table shows which block number has to be written into a slot register to make the each 8 KB block of memory available to the CPU. | |||
Note that since Flash & Expansion are mirrored across all 4 Core2x expansion ranges, MMU blocks $40, $140, $240, $340 all point to the same flash addresses, and $80, $180, $280, $380 all point to the same expansion addresses. | |||
=== | {| class="wikitable" style="border: none; background: none;" | ||
! colspan="2" scope="col" | RAM | |||
| rowspan="66" style="border: none; background: none;" | | |||
! colspan="2" scope="col" | Flash | |||
| rowspan="66" style="border: none; background: none;" | | |||
! colspan="2" scope="col" | Expansion | |||
|- | |||
! scope="col" | Block Number | |||
! scope="col" | Flat/SRAM Address | |||
! scope="col" | Block Number | |||
! scope="col" | Flat Address | |||
! scope="col" | Block Number | |||
! scope="col" | Flat Address | |||
|- | |||
|$00||$00:0000 - $00:1FFF||$40||$F8:0000 - $F8:1FFF||$80||$F4:0000 - $F4:1FFF | |||
|- | |||
|$01||$00:2000 - $00:3FFF||$41||$F8:2000 - $F8:3FFF||$81||$F4:2000 - $F4:3FFF | |||
|- | |||
|$02||$00:4000 - $00:5FFF||$42||$F8:4000 - $F8:5FFF||$82||$F4:4000 - $F4:5FFF | |||
|- | |||
|$03||$00:6000 - $00:7FFF||$43||$F8:6000 - $F8:7FFF||$83||$F4:6000 - $F4:7FFF | |||
|- | |||
|$04||$00:8000 - $00:9FFF||$44||$F8:8000 - $F8:9FFF||$84||$F4:8000 - $F4:9FFF | |||
|- | |||
|$05||$00:A000 - $00:BFFF||$45||$F8:A000 - $F8:BFFF||$85||$F4:A000 - $F4:BFFF | |||
|- | |||
|$06||$00:C000 - $00:DFFF||$46||$F8:C000 - $F8:DFFF||$86||$F4:C000 - $F4:DFFF | |||
|- | |||
|$07||$00:E000 - $00:FFFF||$47||$F8:E000 - $F8:FFFF||$87||$F4:E000 - $F4:FFFF | |||
|- | |||
|$08||$01:0000 - $01:1FFF||$48||$F9:0000 - $F9:1FFF||$88||$F5:0000 - $F5:1FFF | |||
|- | |||
|$09||$01:2000 - $01:3FFF||$49||$F9:2000 - $F9:3FFF||$89||$F5:2000 - $F5:3FFF | |||
|- | |||
|$0A||$01:4000 - $01:5FFF||$4A||$F9:4000 - $F9:5FFF||$8A||$F5:4000 - $F5:5FFF | |||
|- | |||
|$0B||$01:6000 - $01:7FFF||$4B||$F9:6000 - $F9:7FFF||$8B||$F5:6000 - $F5:7FFF | |||
|- | |||
|$0C||$01:8000 - $01:9FFF||$4C||$F9:8000 - $F9:9FFF||$8C||$F5:8000 - $F5:9FFF | |||
|- | |||
|$0D||$01:A000 - $01:BFFF||$4D||$F9:A000 - $F9:BFFF||$8D||$F5:A000 - $F5:BFFF | |||
|- | |||
|$0E||$01:C000 - $01:DFFF||$4E||$F9:C000 - $F9:DFFF||$8E||$F5:C000 - $F5:DFFF | |||
|- | |||
|$0F||$01:E000 - $01:FFFF||$4F||$F9:E000 - $F9:FFFF||$8F||$F5:E000 - $F5:FFFF | |||
|- | |||
|$10||$02:0000 - $02:1FFF||$50||$FA:0000 - $FA:1FFF||$90||$F6:0000 - $F6:1FFF | |||
|- | |||
|$11||$02:2000 - $02:3FFF||$51||$FA:2000 - $FA:3FFF||$91||$F6:2000 - $F6:3FFF | |||
|- | |||
|$12||$02:4000 - $02:5FFF||$52||$FA:4000 - $FA:5FFF||$92||$F6:4000 - $F6:5FFF | |||
|- | |||
|$13||$02:6000 - $02:7FFF||$53||$FA:6000 - $FA:7FFF||$93||$F6:6000 - $F6:7FFF | |||
|- | |||
|$14||$02:8000 - $02:9FFF||$54||$FA:8000 - $FA:9FFF||$94||$F6:8000 - $F6:9FFF | |||
|- | |||
|$15||$02:A000 - $02:BFFF||$55||$FA:A000 - $FA:BFFF||$95||$F6:A000 - $F6:BFFF | |||
|- | |||
|$16||$02:C000 - $02:DFFF||$56||$FA:C000 - $FA:DFFF||$96||$F6:C000 - $F6:DFFF | |||
|- | |||
|$17||$02:E000 - $02:FFFF||$57||$FA:E000 - $FA:FFFF||$97||$F6:E000 - $F6:FFFF | |||
|- | |||
|$18||$03:0000 - $03:1FFF||$58||$FB:0000 - $FB:1FFF||$98||$F7:0000 - $F7:1FFF | |||
|- | |||
|$19||$03:2000 - $03:3FFF||$59||$FB:2000 - $FB:3FFF||$99||$F7:2000 - $F7:3FFF | |||
|- | |||
|$1A||$03:4000 - $03:5FFF||$5A||$FB:4000 - $FB:5FFF||$9A||$F7:4000 - $F7:5FFF | |||
|- | |||
|$1B||$03:6000 - $03:7FFF||$5B||$FB:6000 - $FB:7FFF||$9B||$F7:6000 - $F7:7FFF | |||
|- | |||
|$1C||$03:8000 - $03:9FFF||$5C||$FB:8000 - $FB:9FFF||$9C||$F7:8000 - $F7:9FFF | |||
|- | |||
|$1D||$03:A000 - $03:BFFF||$5D||$FB:A000 - $FB:BFFF||$9D||$F7:A000 - $F7:BFFF | |||
|- | |||
|$1E||$03:C000 - $03:DFFF||$5E||$FB:C000 - $FB:DFFF||$9E||$F7:C000 - $F7:DFFF | |||
|- | |||
|$1F||$03:E000 - $03:FFFF||$5F||$FB:E000 - $FB:FFFF||$9F||$F7:E000 - $F7:FFFF | |||
|- | |||
|$20||$04:0000 - $04:1FFF||$60||$FC:0000 - $FC:1FFF | |||
|- | |||
|$21||$04:2000 - $04:3FFF||$61||$FC:2000 - $FC:3FFF | |||
|- | |||
|$22||$04:4000 - $04:5FFF||$62||$FC:4000 - $FC:5FFF | |||
|- | |||
|$23||$04:6000 - $04:7FFF||$63||$FC:6000 - $FC:7FFF | |||
|- | |||
|$24||$04:8000 - $04:9FFF||$64||$FC:8000 - $FC:9FFF | |||
|- | |||
|$25||$04:A000 - $04:BFFF||$65||$FC:A000 - $FC:BFFF | |||
|- | |||
|$26||$04:C000 - $04:DFFF||$66||$FC:C000 - $FC:DFFF | |||
|- | |||
|$27||$04:E000 - $04:FFFF||$67||$FC:E000 - $FC:FFFF | |||
|- | |||
|$28||$05:0000 - $05:1FFF||$68||$FD:0000 - $FD:1FFF | |||
|- | |||
|$29||$05:2000 - $05:3FFF||$69||$FD:2000 - $FD:3FFF | |||
|- | |||
|$2A||$05:4000 - $05:5FFF||$6A||$FD:4000 - $FD:5FFF | |||
|- | |||
|$2B||$05:6000 - $05:7FFF||$6B||$FD:6000 - $FD:7FFF | |||
|- | |||
|$2C||$05:8000 - $05:9FFF||$6C||$FD:8000 - $FD:9FFF | |||
|- | |||
|$2D||$05:A000 - $05:BFFF||$6D||$FD:A000 - $FD:BFFF | |||
|- | |||
|$2E||$05:C000 - $05:DFFF||$6E||$FD:C000 - $FD:DFFF | |||
|- | |||
|$2F||$05:E000 - $05:FFFF||$6F||$FD:E000 - $FD:FFFF | |||
|- | |||
|$30||$06:0000 - $06:1FFF||$70||$FE:0000 - $FE:1FFF | |||
|- | |||
|$31||$06:2000 - $06:3FFF||$71||$FE:2000 - $FE:3FFF | |||
|- | |||
|$32||$06:4000 - $06:5FFF||$72||$FE:4000 - $FE:5FFF | |||
|- | |||
|$33||$06:6000 - $06:7FFF||$73||$FE:6000 - $FE:7FFF | |||
|- | |||
|$34||$06:8000 - $06:9FFF||$74||$FE:8000 - $FE:9FFF | |||
|- | |||
|$35||$06:A000 - $06:BFFF||$75||$FE:A000 - $FE:BFFF | |||
|- | |||
|$36||$06:C000 - $06:DFFF||$76||$FE:C000 - $FE:DFFF | |||
|- | |||
|$37||$06:E000 - $06:FFFF||$77||$FE:E000 - $FE:FFFF | |||
|- | |||
|$38||$07:0000 - $07:1FFF||$78||$FF:0000 - $FF:1FFF | |||
|- | |||
|$39||$07:2000 - $07:3FFF||$79||$FF:2000 - $FF:3FFF | |||
|- | |||
|$3A||$07:4000 - $07:5FFF||$7A||$FF:4000 - $FF:5FFF | |||
|- | |||
|$3B||$07:6000 - $07:7FFF||$7B||$FF:6000 - $FF:7FFF | |||
|- | |||
|$3C||$07:8000 - $07:9FFF||$7C||$FF:8000 - $FF:9FFF | |||
|- | |||
|$3D||$07:A000 - $07:BFFF||$7D||$FF:A000 - $FF:BFFF | |||
|- | |||
|$3E||$07:C000 - $07:DFFF||$7E||$FF:C000 - $FF:DFFF | |||
|- | |||
|$3F||$07:E000 - $07:FFFF||$7F||$FF:E000 - $FF:FFFF | |||
|} | |||
For Core2x extended map 65816 core: | |||
{| class="wikitable" style="border: none; background: none;" | {| class="wikitable" style="border: none; background: none;" | ||
! colspan=2 scope=col| | ! colspan=2 scope=col| <u>''512K SRAM Page 1''</u> | ||
| rowspan=66 style="border: none; background: none;" | | | rowspan=66 style="border: none; background: none;" | | ||
! colspan=2 scope=col| | ! colspan=2 scope=col| <u>''512K SRAM Page 2''</u> | ||
| rowspan=66 style="border: none; background: none;" | | | rowspan=66 style="border: none; background: none;" | | ||
! colspan=2 scope=col| | ! colspan=2 scope=col| <u>''512K SRAM Page 3''</u> | ||
|- | |- | ||
! scope=col | Block Number | ! scope=col | Block Number | ||
! scope=col | | ! scope=col | Flat/SRAM Address | ||
! scope=col | Block Number | ! scope=col | Block Number | ||
! scope=col | | ! scope=col | Flat/SRAM Address | ||
! scope=col | Block Number | ! scope=col | Block Number | ||
! scope=col | | ! scope=col | Flat/SRAM Address | ||
|- | |- | ||
|$ | |$100||$08:0000 - $08:1FFF||$200||$10:0000 - $10:1FFF||$300||$18:0000 - $18:1FFF | ||
|- | |- | ||
|$ | |$101||$08:2000 - $08:3FFF||$201||$10:2000 - $10:3FFF||$301||$18:2000 - $18:3FFF | ||
|- | |- | ||
|$ | |$102||$08:4000 - $08:5FFF||$202||$10:4000 - $10:5FFF||$302||$18:4000 - $18:5FFF | ||
|- | |- | ||
|$ | |$103||$08:6000 - $08:7FFF||$203||$10:6000 - $10:7FFF||$303||$18:6000 - $18:7FFF | ||
|- | |- | ||
|$ | |$104||$08:8000 - $08:9FFF||$204||$10:8000 - $10:9FFF||$304||$18:8000 - $18:9FFF | ||
|- | |- | ||
|$ | |$105||$08:A000 - $08:BFFF||$205||$10:A000 - $10:BFFF||$305||$18:A000 - $18:BFFF | ||
|- | |- | ||
|$ | |$106||$08:C000 - $08:DFFF||$206||$10:C000 - $10:DFFF||$306||$18:C000 - $18:DFFF | ||
|- | |- | ||
|$ | |$107||$08:E000 - $08:FFFF||$207||$10:E000 - $10:FFFF||$307||$18:E000 - $18:FFFF | ||
|- | |- | ||
|$ | |$108||$09:0000 - $09:1FFF||$208||$11:0000 - $11:1FFF||$308||$19:0000 - $19:1FFF | ||
|- | |- | ||
|$ | |$109||$09:2000 - $09:3FFF||$209||$11:2000 - $11:3FFF||$309||$19:2000 - $19:3FFF | ||
|- | |- | ||
|$ | |$10A||$09:4000 - $09:5FFF||$20A||$11:4000 - $11:5FFF||$30A||$19:4000 - $19:5FFF | ||
|- | |- | ||
|$ | |$10B||$09:6000 - $09:7FFF||$20B||$11:6000 - $11:7FFF||$30B||$19:6000 - $19:7FFF | ||
|- | |- | ||
|$ | |$10C||$09:8000 - $09:9FFF||$20C||$11:8000 - $11:9FFF||$30C||$19:8000 - $19:9FFF | ||
|- | |- | ||
|$ | |$10D||$09:A000 - $09:BFFF||$20D||$11:A000 - $11:BFFF||$30D||$19:A000 - $19:BFFF | ||
|- | |- | ||
|$ | |$10E||$09:C000 - $09:DFFF||$20E||$11:C000 - $11:DFFF||$30E||$19:C000 - $19:DFFF | ||
|- | |- | ||
|$ | |$10F||$09:E000 - $09:FFFF||$20F||$11:E000 - $11:FFFF||$30F||$19:E000 - $19:FFFF | ||
|- | |- | ||
|$ | |$110||$0A:0000 - $0A:1FFF||$210||$12:0000 - $12:1FFF||$310||$1A:0000 - $1A:1FFF | ||
|- | |- | ||
|$ | |$111||$0A:2000 - $0A:3FFF||$211||$12:2000 - $12:3FFF||$311||$1A:2000 - $1A:3FFF | ||
|- | |- | ||
|$ | |$112||$0A:4000 - $0A:5FFF||$212||$12:4000 - $12:5FFF||$312||$1A:4000 - $1A:5FFF | ||
|- | |- | ||
|$ | |$113||$0A:6000 - $0A:7FFF||$213||$12:6000 - $12:7FFF||$313||$1A:6000 - $1A:7FFF | ||
|- | |- | ||
|$ | |$114||$0A:8000 - $0A:9FFF||$214||$12:8000 - $12:9FFF||$314||$1A:8000 - $1A:9FFF | ||
|- | |- | ||
|$ | |$115||$0A:A000 - $0A:BFFF||$215||$12:A000 - $12:BFFF||$315||$1A:A000 - $1A:BFFF | ||
|- | |- | ||
|$ | |$116||$0A:C000 - $0A:DFFF||$216||$12:C000 - $12:DFFF||$316||$1A:C000 - $1A:DFFF | ||
|- | |- | ||
|$ | |$117||$0A:E000 - $0A:FFFF||$217||$12:E000 - $12:FFFF||$317||$1A:E000 - $1A:FFFF | ||
|- | |- | ||
|$ | |$118||$0B:0000 - $0B:1FFF||$218||$13:0000 - $13:1FFF||$318||$1B:0000 - $1B:1FFF | ||
|- | |- | ||
|$ | |$119||$0B:2000 - $0B:3FFF||$219||$13:2000 - $13:3FFF||$319||$1B:2000 - $1B:3FFF | ||
|- | |- | ||
|$ | |$11A||$0B:4000 - $0B:5FFF||$21A||$13:4000 - $13:5FFF||$31A||$1B:4000 - $1B:5FFF | ||
|- | |- | ||
|$ | |$11B||$0B:6000 - $0B:7FFF||$21B||$13:6000 - $13:7FFF||$31B||$1B:6000 - $1B:7FFF | ||
|- | |- | ||
|$ | |$11C||$0B:8000 - $0B:9FFF||$21C||$13:8000 - $13:9FFF||$31C||$1B:8000 - $1B:9FFF | ||
|- | |- | ||
|$ | |$11D||$0B:A000 - $0B:BFFF||$21D||$13:A000 - $13:BFFF||$31D||$1B:A000 - $1B:BFFF | ||
|- | |- | ||
|$ | |$11E||$0B:C000 - $0B:DFFF||$21E||$13:C000 - $13:DFFF||$31E||$1B:C000 - $1B:DFFF | ||
|- | |- | ||
|$ | |$11F||$0B:E000 - $0B:FFFF||$21F||$13:E000 - $13:FFFF||$31F||$1B:E000 - $1B:FFFF | ||
|- | |- | ||
|$ | |$120||$0C:0000 - $0C:1FFF||$220||$14:0000 - $14:1FFF||$320||$1C:0000 - $1C:1FFF | ||
|- | |- | ||
|$ | |$121||$0C:2000 - $0C:3FFF||$221||$14:2000 - $14:3FFF||$321||$1C:2000 - $1C:3FFF | ||
|- | |- | ||
|$ | |$122||$0C:4000 - $0C:5FFF||$222||$14:4000 - $14:5FFF||$322||$1C:4000 - $1C:5FFF | ||
|- | |- | ||
|$ | |$123||$0C:6000 - $0C:7FFF||$223||$14:6000 - $14:7FFF||$323||$1C:6000 - $1C:7FFF | ||
|- | |- | ||
|$ | |$124||$0C:8000 - $0C:9FFF||$224||$14:8000 - $14:9FFF||$324||$1C:8000 - $1C:9FFF | ||
|- | |- | ||
|$ | |$125||$0C:A000 - $0C:BFFF||$225||$14:A000 - $14:BFFF||$325||$1C:A000 - $1C:BFFF | ||
|- | |- | ||
|$ | |$126||$0C:C000 - $0C:DFFF||$226||$14:C000 - $14:DFFF||$326||$1C:C000 - $1C:DFFF | ||
|- | |- | ||
|$ | |$127||$0C:E000 - $0C:FFFF||$227||$14:E000 - $14:FFFF||$327||$1C:E000 - $1C:FFFF | ||
|- | |- | ||
|$ | |$128||$0D:0000 - $0D:1FFF||$228||$15:0000 - $15:1FFF||$328||$1D:0000 - $1D:1FFF | ||
|- | |- | ||
|$ | |$129||$0D:2000 - $0D:3FFF||$229||$15:2000 - $15:3FFF||$329||$1D:2000 - $1D:3FFF | ||
|- | |- | ||
|$ | |$12A||$0D:4000 - $0D:5FFF||$22A||$15:4000 - $15:5FFF||$32A||$1D:4000 - $1D:5FFF | ||
|- | |- | ||
|$ | |$12B||$0D:6000 - $0D:7FFF||$22B||$15:6000 - $15:7FFF||$32B||$1D:6000 - $1D:7FFF | ||
|- | |- | ||
|$ | |$12C||$0D:8000 - $0D:9FFF||$22C||$15:8000 - $15:9FFF||$32C||$1D:8000 - $1D:9FFF | ||
|- | |- | ||
|$ | |$12D||$0D:A000 - $0D:BFFF||$22D||$15:A000 - $15:BFFF||$32D||$1D:A000 - $1D:BFFF | ||
|- | |- | ||
|$ | |$12E||$0D:C000 - $0D:DFFF||$22E||$15:C000 - $15:DFFF||$32E||$1D:C000 - $1D:DFFF | ||
|- | |- | ||
|$ | |$12F||$0D:E000 - $0D:FFFF||$22F||$15:E000 - $15:FFFF||$32F||$1D:E000 - $1D:FFFF | ||
|- | |- | ||
|$ | |$130||$0E:0000 - $0E:1FFF||$230||$16:0000 - $16:1FFF||$330||$1E:0000 - $1E:1FFF | ||
|- | |- | ||
|$ | |$131||$0E:2000 - $0E:3FFF||$231||$16:2000 - $16:3FFF||$331||$1E:2000 - $1E:3FFF | ||
|- | |- | ||
|$ | |$132||$0E:4000 - $0E:5FFF||$232||$16:4000 - $16:5FFF||$332||$1E:4000 - $1E:5FFF | ||
|- | |- | ||
|$ | |$133||$0E:6000 - $0E:7FFF||$233||$16:6000 - $16:7FFF||$333||$1E:6000 - $1E:7FFF | ||
|- | |- | ||
|$ | |$134||$0E:8000 - $0E:9FFF||$234||$16:8000 - $16:9FFF||$334||$1E:8000 - $1E:9FFF | ||
|- | |- | ||
|$ | |$135||$0E:A000 - $0E:BFFF||$235||$16:A000 - $16:BFFF||$335||$1E:A000 - $1E:BFFF | ||
|- | |- | ||
|$ | |$136||$0E:C000 - $0E:DFFF||$236||$16:C000 - $16:DFFF||$336||$1E:C000 - $1E:DFFF | ||
|- | |- | ||
|$ | |$137||$0E:E000 - $0E:FFFF||$237||$16:E000 - $16:FFFF||$337||$1E:E000 - $1E:FFFF | ||
|- | |- | ||
|$ | |$138||$0F:0000 - $0F:1FFF||$238||$17:0000 - $17:1FFF||$338||$1F:0000 - $1F:1FFF | ||
|- | |- | ||
|$ | |$139||$0F:2000 - $0F:3FFF||$239||$17:2000 - $17:3FFF||$339||$1F:2000 - $1F:3FFF | ||
|- | |- | ||
|$ | |$13A||$0F:4000 - $0F:5FFF||$23A||$17:4000 - $17:5FFF||$33A||$1F:4000 - $1F:5FFF | ||
|- | |- | ||
|$ | |$13B||$0F:6000 - $0F:7FFF||$23B||$17:6000 - $17:7FFF||$33B||$1F:6000 - $1F:7FFF | ||
|- | |- | ||
|$ | |$13C||$0F:8000 - $0F:9FFF||$23C||$17:8000 - $17:9FFF||$33C||$1F:8000 - $1F:9FFF | ||
|- | |- | ||
|$ | |$13D||$0F:A000 - $0F:BFFF||$23D||$17:A000 - $17:BFFF||$33D||$1F:A000 - $1F:BFFF | ||
|- | |- | ||
|$ | |$13E||$0F:C000 - $0F:DFFF||$23E||$17:C000 - $17:DFFF||$33E||$1F:C000 - $1F:DFFF | ||
|- | |- | ||
|$ | |$13F||$0F:E000 - $0F:FFFF||$23F||$17:E000 - $17:FFFF||$33F||$1F:E000 - $1F:FFFF | ||
|} | |} | ||
Latest revision as of 23:56, 21 February 2026
Overview
The F256 series comes with 512KB or 2MB of SRAM, and 512 KB of internal system flash memory. Up to 256 KB additional Memory, either RAM or Flash, can be added through the Expansion Port.
| Model | Hardware CPU | SRAM | Flash | Expansion Port | DRAM |
|---|---|---|---|---|---|
| F256Jr | 65C02 | 512kB (512k×8) | 512kB | 256kB | — |
| F256K | 65C02 | 512kB (512k×8) | 512kB | 256kB | — |
| F256Jr2 | 65816 | 2MB (1M×16) | 512kB | 256kB | — |
| F256K2 | 65816 | 2MB (1M×16) | 512kB | 256kB | 128MB (not yet supported) |
The 1st gen 65c02 systems have an 8-bit data bus and a 16-bit CPU address bus, with an MMU managing 8 × 8k banks to address 512kB RAM plus flash, expansion, and the IO pages.
The 2nd gen 2MB 65816 systems have 16-bit wide SRAMs, enabling higher bandwidth through the FPGA, even though the processor still has an 8-bit wide data bus. The same 64k address MMU with 512kB RAM configuration is used, but the Core2x FPGA core released in the summer of 2025 can enable 24 bit (16 MB) addressing and the full 2MB of SRAM both flat & banked.
A FPGA-based 6809 CPU can be optionally run on all F256 models which will also use this same MMU, and disable the hardware CPU. A 68k FPGA-based processor core is also coming, which should use flat memory addressing only.
NOTE: Changes associated with Core2x will be in italics and underlined throughout this page.
Flat Memory Models
Core2x is the future standard FPGA load, with both 24-bit flat access and MMU 8k pages in bank 0. This allows for backwards compatibility, banking direct page and stack, as well as having separate chunks of memory visible in a single CPU-addressable bank for copying & other processing.
The 'e' FPGA load for series 2 provides this same 65816 flat memory model, with the older 1x speed & graphics capabilities. It hasn't been used much yet.
| Address | Size | Description |
|---|---|---|
| $00:0000 - $00:FFFF | 64k | Core2x: 8×8kB MMU banked
F256K2e: SRAM, except last 256 bytes |
| $00:FF00 - $00:FFFF | 256 | F256K2e only: Mirror of the last page of Flash, for boot purposes |
| $01:0000 - $1F:FFFF | 2M - 64k | Rest of SRAM* |
| $20:0000 - $9F:FFFF | 8M | DDR3 window (to be implemented?) |
| $F0:0000 - $F0:BFFF | 64k reserved | IO Pages* |
| $F4:0000 - $F7:FFFF | 256k | Cartridge* |
| $F8:0000 - $FF:FFFF | 512k | Internal Flash* |
* NOTE: In Core2x, the starred regions must have a MMU bit enabled to expose them to the 24-bit flat address. They are only mapped through the MMU by default at boot.
Memory Management Unit (MMU)
8kB Block Layout
The MMU splits the 64kB address space into 8 visible slots of 8kB each. A theoretical max of 256 selectable 8kB blocks yields a 2MB address space, which maps 512kB RAM, flash, and expansion. Devices are laid out every 64 ($40) blocks (512kB).
The Core2x MMU expands the bank numbers to 10 bits, repeating the original layout 4 times, to expose all 2MB of SRAM while remaining backwards compatible.
IO pages have their own space of numbered banks that overlay one fixed slot (6, $C000-$DFFF).
| MMU 8kB Block Number | Purpose | Flat memory flag | Flat address |
|---|---|---|---|
| $00 - $3F | 512K SRAM (Page 0) | $00:0000 - $07:FFFF | |
| $40 - $7F | 512K System Flash | MOVE_FLASH | $F8:0000 - $FF:FFFF |
| $80 - $9F | 256K Cartridge | MOVE_FLASH | $F4:0000 - $F7:FFFF |
| $A0 - $FF | Reserved | ||
| Core2x expansion | |||
| $100 - $13F | 512K SRAM Page 1 | SRAM_EN | $08:0000 - $0F:FFFF |
| $140 - $1FF | Mirror of Flash, Cart, Reserved | ||
| $200 - $23F | 512K SRAM Page 2 | SRAM_EN | $10:0000 - $17:FFFF |
| $240 - $2FF | Mirror of Flash, Cart, Reserved | ||
| $300 - $33F | 512K SRAM Page 3 | SRAM_EN | $18:0000 - $1F:FFFF |
| $340 - $3FF | Mirror of Flash, Cart, Reserved | ||
| 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MLUT Entry | Block Number | |||||||||||||||||||||||
| MLUT Entry | Expansion | Device | Block offset in device (00-3F) | |||||||||||||||||||||
| 16-bit MMU Address | MLUT Number | Byte offset in 8k block | ||||||||||||||||||||||
| Flat SRAM | 0 | 0 | 0 | Expansion | Block offset in device (00-3F) | Byte offset in 8k block | ||||||||||||||||||
| Flat Flash | 1 | 1 | 1 | 1 | 1 | Block offset in device (00-3F) | Byte offset in 8k block | |||||||||||||||||
| Flat Cart | 1 | 1 | 1 | 1 | 0 | Block offset in device (00-3F) | Byte offset in 8k block | |||||||||||||||||
Device = SRAM (0), Flash (1), Cartridge (2), or Reserved (3)
Numerical address computations for SRAM/VICKY pointers
Full Gen 2 2MB:
SRAM address = ((MMU Block & 0x300) << 11) | ((MMU Block & 0x03F) << 13) | (Byte offset)
MMU Block number = ((SRAM Address & 0x180000) >> 11) | ((SRAM address & 0x07e000) >> 13)
MMU byte offset = SRAM Address & 0x001fff
Gen 1, or only using the first 512kB:
SRAM address = (MMU Block << 13) | (Byte offset)
MMU Block number = (SRAM address >> 13)
MMU byte offset = SRAM Address & 0x001fff
Configuring the MMU
There are 4 separate sets of MMU configurations called MLUT 0-3 (Memory Lookup Tables), for easy switching between well-known (including kernel vs user) memory mapping states. Each MLUT holds 8 bank selections, one for each 8kB memory slot respectively. IO mapping is optional, independent of MLUT selection, and overrides slot 6 at $C000.
Only one MLUT is active at any one time. To select the active MLUT, the lower two bits of address $0000 (MMU_MEM_CTRL) are used.
Editing of MLUTs is also controlled by MMU_MEM_CTRL ($0000): Bits 4 and 5 determine which MLUT to be edited, independent of which MLUT is active. Bit 7 has to be set to 1 to enable editing. When editing is enabled, the block number of a physical memory area can be written to the slot register address to map that area to the address in CPU address space. If editing is not enabled (bit 7 of $0000 is 0), the slot register addresses act as ordinary memory with no side effect.
| Address | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|
| $0000 | RW | MMU_MEM_CTRL | EDIT_EN | - | EDIT_LUT | SRAM_EN | - | ACT_LUT | ||
| $0001 | RW | MMU_IO_CTRL | - | SPR_SEL | MOVE_FLASH | MOVE_IO | IO_PAGE_EXT | IO_DISABLE | IO_PAGE | |
ACT_LUT: These two bits specify which MLUT (0–3) is used to translate CPU bus address to system bus addresses.
EDIT_LUT: Selects which MLUT (0-3) will be edited.
EDIT_EN: If set (1), this bit enables MLUT editing, and memory addresses $0008–$000F (and $0002-$0003) will be used to edit the selected EDIT_LUT. If clear (0), those memory locations will be standard memory locations and will be mapped like the rest of slot 0.
IO_PAGE: Selects which IO page (0-3) is mapped to slot 6, when not disabled with IO_DISABLE.
IO_DISABLE: If set (1), slot 6 ($C000-$DFFF) is mapped through the active MLUT as normal. If clear (0), slot 6 is mapped to the selected IO_PAGE.
Note that writing a simple page number to register $0001 easily selects that IO page (including 0) to be visible, although there are also other Core2x entries now as well.
Core2x MMU Registers
SRAM_EN: Enables access to the SRAM pages 1-3 in flat addresses 00:0000 to 1f:0000. Disables MMU 8k bank access to SRAM only. IO and Flash/Cart are affected by their own bits below.
IO_PAGE_EXT: Bit 2 of the total IO page number, enabling pages 4 and 5.
MOVE_IO: Moves IO pages from MMU access to 24-bit address F0:0000.
MOVE_FLASH: Moves Cartridge & Flash addressing from MMU access to flat address F4:0000 and F8:0000.
SPR_SEL: Select current Sprite Block in IO Page 0. 0 = Sprite 0-63, 1 = Sprite 64-127.
| Address | R/W | MLUT Slot Address | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|
| $0002 | Slot 3 [9:8] | Slot 2 [9:8] | Slot 1 [9:8] | Slot 0 [9:8] | ||||||
| $0003 | Slot 7 [9:8] | Slot 6 [9:8] | Slot 5 [9:8] | Slot 4 [9:8] | ||||||
| $0008 | $0000 - $1FFF | Edit MLUT Slot 0 block number [7:0] | ||||||||
| $0009 | $2000 - $3FFF | Edit MLUT Slot 1 block number [7:0] | ||||||||
| $000A | $4000 - $5FFF | Edit MLUT Slot 2 block number [7:0] | ||||||||
| $000B | $6000 - $7FFF | Edit MLUT Slot 3 block number [7:0] | ||||||||
| $000C | $8000 - $9FFF | Edit MLUT Slot 4 block number [7:0] | ||||||||
| $000D | $A000 - $BFFF | Edit MLUT Slot 5 block number [7:0] | ||||||||
| $000E | $C000 - $DFFF | Edit MLUT Slot 6 block number [7:0] | ||||||||
| $000F | $E000 - $FFFF | Edit MLUT Slot 7 block number [7:0] | ||||||||
| I/O Page | B3 | B1 | B0 | MOVE_IO Address | Purpose |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | $F0:0000 - $F0:1FFF | Low level I/O Register (gamma table, Mouse GFX, all IO devices and vicky registers) |
| 1 | 0 | 0 | 1 | $F0:2000 - $F0:3FFF | Text display font memory and graphic color MLUTs 0,1,2,3 |
| 2 | 0 | 1 | 0 | $F0:4000 - $F0:5FFF | Text display character matrix |
| 3 | 0 | 1 | 1 | $F0:6000 - $F0:7FFF | Text display color matrix |
| 4 | 1 | 0 | 0 | $F0:8000 - $F0:9FFF | Memory text Color background LUT 0 & 1, Foreground LUT 0 & 1 |
| 5 | 1 | 0 | 1 | $F0:A000 - $F0:BFFF | Memory text FONT 0,1,2,3 for 8x8 or 0,1 for 8x16 |
Memory Block Tables
The following table shows which block number has to be written into a slot register to make the each 8 KB block of memory available to the CPU.
Note that since Flash & Expansion are mirrored across all 4 Core2x expansion ranges, MMU blocks $40, $140, $240, $340 all point to the same flash addresses, and $80, $180, $280, $380 all point to the same expansion addresses.
| RAM | Flash | Expansion | |||||
|---|---|---|---|---|---|---|---|
| Block Number | Flat/SRAM Address | Block Number | Flat Address | Block Number | Flat Address | ||
| $00 | $00:0000 - $00:1FFF | $40 | $F8:0000 - $F8:1FFF | $80 | $F4:0000 - $F4:1FFF | ||
| $01 | $00:2000 - $00:3FFF | $41 | $F8:2000 - $F8:3FFF | $81 | $F4:2000 - $F4:3FFF | ||
| $02 | $00:4000 - $00:5FFF | $42 | $F8:4000 - $F8:5FFF | $82 | $F4:4000 - $F4:5FFF | ||
| $03 | $00:6000 - $00:7FFF | $43 | $F8:6000 - $F8:7FFF | $83 | $F4:6000 - $F4:7FFF | ||
| $04 | $00:8000 - $00:9FFF | $44 | $F8:8000 - $F8:9FFF | $84 | $F4:8000 - $F4:9FFF | ||
| $05 | $00:A000 - $00:BFFF | $45 | $F8:A000 - $F8:BFFF | $85 | $F4:A000 - $F4:BFFF | ||
| $06 | $00:C000 - $00:DFFF | $46 | $F8:C000 - $F8:DFFF | $86 | $F4:C000 - $F4:DFFF | ||
| $07 | $00:E000 - $00:FFFF | $47 | $F8:E000 - $F8:FFFF | $87 | $F4:E000 - $F4:FFFF | ||
| $08 | $01:0000 - $01:1FFF | $48 | $F9:0000 - $F9:1FFF | $88 | $F5:0000 - $F5:1FFF | ||
| $09 | $01:2000 - $01:3FFF | $49 | $F9:2000 - $F9:3FFF | $89 | $F5:2000 - $F5:3FFF | ||
| $0A | $01:4000 - $01:5FFF | $4A | $F9:4000 - $F9:5FFF | $8A | $F5:4000 - $F5:5FFF | ||
| $0B | $01:6000 - $01:7FFF | $4B | $F9:6000 - $F9:7FFF | $8B | $F5:6000 - $F5:7FFF | ||
| $0C | $01:8000 - $01:9FFF | $4C | $F9:8000 - $F9:9FFF | $8C | $F5:8000 - $F5:9FFF | ||
| $0D | $01:A000 - $01:BFFF | $4D | $F9:A000 - $F9:BFFF | $8D | $F5:A000 - $F5:BFFF | ||
| $0E | $01:C000 - $01:DFFF | $4E | $F9:C000 - $F9:DFFF | $8E | $F5:C000 - $F5:DFFF | ||
| $0F | $01:E000 - $01:FFFF | $4F | $F9:E000 - $F9:FFFF | $8F | $F5:E000 - $F5:FFFF | ||
| $10 | $02:0000 - $02:1FFF | $50 | $FA:0000 - $FA:1FFF | $90 | $F6:0000 - $F6:1FFF | ||
| $11 | $02:2000 - $02:3FFF | $51 | $FA:2000 - $FA:3FFF | $91 | $F6:2000 - $F6:3FFF | ||
| $12 | $02:4000 - $02:5FFF | $52 | $FA:4000 - $FA:5FFF | $92 | $F6:4000 - $F6:5FFF | ||
| $13 | $02:6000 - $02:7FFF | $53 | $FA:6000 - $FA:7FFF | $93 | $F6:6000 - $F6:7FFF | ||
| $14 | $02:8000 - $02:9FFF | $54 | $FA:8000 - $FA:9FFF | $94 | $F6:8000 - $F6:9FFF | ||
| $15 | $02:A000 - $02:BFFF | $55 | $FA:A000 - $FA:BFFF | $95 | $F6:A000 - $F6:BFFF | ||
| $16 | $02:C000 - $02:DFFF | $56 | $FA:C000 - $FA:DFFF | $96 | $F6:C000 - $F6:DFFF | ||
| $17 | $02:E000 - $02:FFFF | $57 | $FA:E000 - $FA:FFFF | $97 | $F6:E000 - $F6:FFFF | ||
| $18 | $03:0000 - $03:1FFF | $58 | $FB:0000 - $FB:1FFF | $98 | $F7:0000 - $F7:1FFF | ||
| $19 | $03:2000 - $03:3FFF | $59 | $FB:2000 - $FB:3FFF | $99 | $F7:2000 - $F7:3FFF | ||
| $1A | $03:4000 - $03:5FFF | $5A | $FB:4000 - $FB:5FFF | $9A | $F7:4000 - $F7:5FFF | ||
| $1B | $03:6000 - $03:7FFF | $5B | $FB:6000 - $FB:7FFF | $9B | $F7:6000 - $F7:7FFF | ||
| $1C | $03:8000 - $03:9FFF | $5C | $FB:8000 - $FB:9FFF | $9C | $F7:8000 - $F7:9FFF | ||
| $1D | $03:A000 - $03:BFFF | $5D | $FB:A000 - $FB:BFFF | $9D | $F7:A000 - $F7:BFFF | ||
| $1E | $03:C000 - $03:DFFF | $5E | $FB:C000 - $FB:DFFF | $9E | $F7:C000 - $F7:DFFF | ||
| $1F | $03:E000 - $03:FFFF | $5F | $FB:E000 - $FB:FFFF | $9F | $F7:E000 - $F7:FFFF | ||
| $20 | $04:0000 - $04:1FFF | $60 | $FC:0000 - $FC:1FFF | ||||
| $21 | $04:2000 - $04:3FFF | $61 | $FC:2000 - $FC:3FFF | ||||
| $22 | $04:4000 - $04:5FFF | $62 | $FC:4000 - $FC:5FFF | ||||
| $23 | $04:6000 - $04:7FFF | $63 | $FC:6000 - $FC:7FFF | ||||
| $24 | $04:8000 - $04:9FFF | $64 | $FC:8000 - $FC:9FFF | ||||
| $25 | $04:A000 - $04:BFFF | $65 | $FC:A000 - $FC:BFFF | ||||
| $26 | $04:C000 - $04:DFFF | $66 | $FC:C000 - $FC:DFFF | ||||
| $27 | $04:E000 - $04:FFFF | $67 | $FC:E000 - $FC:FFFF | ||||
| $28 | $05:0000 - $05:1FFF | $68 | $FD:0000 - $FD:1FFF | ||||
| $29 | $05:2000 - $05:3FFF | $69 | $FD:2000 - $FD:3FFF | ||||
| $2A | $05:4000 - $05:5FFF | $6A | $FD:4000 - $FD:5FFF | ||||
| $2B | $05:6000 - $05:7FFF | $6B | $FD:6000 - $FD:7FFF | ||||
| $2C | $05:8000 - $05:9FFF | $6C | $FD:8000 - $FD:9FFF | ||||
| $2D | $05:A000 - $05:BFFF | $6D | $FD:A000 - $FD:BFFF | ||||
| $2E | $05:C000 - $05:DFFF | $6E | $FD:C000 - $FD:DFFF | ||||
| $2F | $05:E000 - $05:FFFF | $6F | $FD:E000 - $FD:FFFF | ||||
| $30 | $06:0000 - $06:1FFF | $70 | $FE:0000 - $FE:1FFF | ||||
| $31 | $06:2000 - $06:3FFF | $71 | $FE:2000 - $FE:3FFF | ||||
| $32 | $06:4000 - $06:5FFF | $72 | $FE:4000 - $FE:5FFF | ||||
| $33 | $06:6000 - $06:7FFF | $73 | $FE:6000 - $FE:7FFF | ||||
| $34 | $06:8000 - $06:9FFF | $74 | $FE:8000 - $FE:9FFF | ||||
| $35 | $06:A000 - $06:BFFF | $75 | $FE:A000 - $FE:BFFF | ||||
| $36 | $06:C000 - $06:DFFF | $76 | $FE:C000 - $FE:DFFF | ||||
| $37 | $06:E000 - $06:FFFF | $77 | $FE:E000 - $FE:FFFF | ||||
| $38 | $07:0000 - $07:1FFF | $78 | $FF:0000 - $FF:1FFF | ||||
| $39 | $07:2000 - $07:3FFF | $79 | $FF:2000 - $FF:3FFF | ||||
| $3A | $07:4000 - $07:5FFF | $7A | $FF:4000 - $FF:5FFF | ||||
| $3B | $07:6000 - $07:7FFF | $7B | $FF:6000 - $FF:7FFF | ||||
| $3C | $07:8000 - $07:9FFF | $7C | $FF:8000 - $FF:9FFF | ||||
| $3D | $07:A000 - $07:BFFF | $7D | $FF:A000 - $FF:BFFF | ||||
| $3E | $07:C000 - $07:DFFF | $7E | $FF:C000 - $FF:DFFF | ||||
| $3F | $07:E000 - $07:FFFF | $7F | $FF:E000 - $FF:FFFF | ||||
For Core2x extended map 65816 core:
| 512K SRAM Page 1 | 512K SRAM Page 2 | 512K SRAM Page 3 | |||||
|---|---|---|---|---|---|---|---|
| Block Number | Flat/SRAM Address | Block Number | Flat/SRAM Address | Block Number | Flat/SRAM Address | ||
| $100 | $08:0000 - $08:1FFF | $200 | $10:0000 - $10:1FFF | $300 | $18:0000 - $18:1FFF | ||
| $101 | $08:2000 - $08:3FFF | $201 | $10:2000 - $10:3FFF | $301 | $18:2000 - $18:3FFF | ||
| $102 | $08:4000 - $08:5FFF | $202 | $10:4000 - $10:5FFF | $302 | $18:4000 - $18:5FFF | ||
| $103 | $08:6000 - $08:7FFF | $203 | $10:6000 - $10:7FFF | $303 | $18:6000 - $18:7FFF | ||
| $104 | $08:8000 - $08:9FFF | $204 | $10:8000 - $10:9FFF | $304 | $18:8000 - $18:9FFF | ||
| $105 | $08:A000 - $08:BFFF | $205 | $10:A000 - $10:BFFF | $305 | $18:A000 - $18:BFFF | ||
| $106 | $08:C000 - $08:DFFF | $206 | $10:C000 - $10:DFFF | $306 | $18:C000 - $18:DFFF | ||
| $107 | $08:E000 - $08:FFFF | $207 | $10:E000 - $10:FFFF | $307 | $18:E000 - $18:FFFF | ||
| $108 | $09:0000 - $09:1FFF | $208 | $11:0000 - $11:1FFF | $308 | $19:0000 - $19:1FFF | ||
| $109 | $09:2000 - $09:3FFF | $209 | $11:2000 - $11:3FFF | $309 | $19:2000 - $19:3FFF | ||
| $10A | $09:4000 - $09:5FFF | $20A | $11:4000 - $11:5FFF | $30A | $19:4000 - $19:5FFF | ||
| $10B | $09:6000 - $09:7FFF | $20B | $11:6000 - $11:7FFF | $30B | $19:6000 - $19:7FFF | ||
| $10C | $09:8000 - $09:9FFF | $20C | $11:8000 - $11:9FFF | $30C | $19:8000 - $19:9FFF | ||
| $10D | $09:A000 - $09:BFFF | $20D | $11:A000 - $11:BFFF | $30D | $19:A000 - $19:BFFF | ||
| $10E | $09:C000 - $09:DFFF | $20E | $11:C000 - $11:DFFF | $30E | $19:C000 - $19:DFFF | ||
| $10F | $09:E000 - $09:FFFF | $20F | $11:E000 - $11:FFFF | $30F | $19:E000 - $19:FFFF | ||
| $110 | $0A:0000 - $0A:1FFF | $210 | $12:0000 - $12:1FFF | $310 | $1A:0000 - $1A:1FFF | ||
| $111 | $0A:2000 - $0A:3FFF | $211 | $12:2000 - $12:3FFF | $311 | $1A:2000 - $1A:3FFF | ||
| $112 | $0A:4000 - $0A:5FFF | $212 | $12:4000 - $12:5FFF | $312 | $1A:4000 - $1A:5FFF | ||
| $113 | $0A:6000 - $0A:7FFF | $213 | $12:6000 - $12:7FFF | $313 | $1A:6000 - $1A:7FFF | ||
| $114 | $0A:8000 - $0A:9FFF | $214 | $12:8000 - $12:9FFF | $314 | $1A:8000 - $1A:9FFF | ||
| $115 | $0A:A000 - $0A:BFFF | $215 | $12:A000 - $12:BFFF | $315 | $1A:A000 - $1A:BFFF | ||
| $116 | $0A:C000 - $0A:DFFF | $216 | $12:C000 - $12:DFFF | $316 | $1A:C000 - $1A:DFFF | ||
| $117 | $0A:E000 - $0A:FFFF | $217 | $12:E000 - $12:FFFF | $317 | $1A:E000 - $1A:FFFF | ||
| $118 | $0B:0000 - $0B:1FFF | $218 | $13:0000 - $13:1FFF | $318 | $1B:0000 - $1B:1FFF | ||
| $119 | $0B:2000 - $0B:3FFF | $219 | $13:2000 - $13:3FFF | $319 | $1B:2000 - $1B:3FFF | ||
| $11A | $0B:4000 - $0B:5FFF | $21A | $13:4000 - $13:5FFF | $31A | $1B:4000 - $1B:5FFF | ||
| $11B | $0B:6000 - $0B:7FFF | $21B | $13:6000 - $13:7FFF | $31B | $1B:6000 - $1B:7FFF | ||
| $11C | $0B:8000 - $0B:9FFF | $21C | $13:8000 - $13:9FFF | $31C | $1B:8000 - $1B:9FFF | ||
| $11D | $0B:A000 - $0B:BFFF | $21D | $13:A000 - $13:BFFF | $31D | $1B:A000 - $1B:BFFF | ||
| $11E | $0B:C000 - $0B:DFFF | $21E | $13:C000 - $13:DFFF | $31E | $1B:C000 - $1B:DFFF | ||
| $11F | $0B:E000 - $0B:FFFF | $21F | $13:E000 - $13:FFFF | $31F | $1B:E000 - $1B:FFFF | ||
| $120 | $0C:0000 - $0C:1FFF | $220 | $14:0000 - $14:1FFF | $320 | $1C:0000 - $1C:1FFF | ||
| $121 | $0C:2000 - $0C:3FFF | $221 | $14:2000 - $14:3FFF | $321 | $1C:2000 - $1C:3FFF | ||
| $122 | $0C:4000 - $0C:5FFF | $222 | $14:4000 - $14:5FFF | $322 | $1C:4000 - $1C:5FFF | ||
| $123 | $0C:6000 - $0C:7FFF | $223 | $14:6000 - $14:7FFF | $323 | $1C:6000 - $1C:7FFF | ||
| $124 | $0C:8000 - $0C:9FFF | $224 | $14:8000 - $14:9FFF | $324 | $1C:8000 - $1C:9FFF | ||
| $125 | $0C:A000 - $0C:BFFF | $225 | $14:A000 - $14:BFFF | $325 | $1C:A000 - $1C:BFFF | ||
| $126 | $0C:C000 - $0C:DFFF | $226 | $14:C000 - $14:DFFF | $326 | $1C:C000 - $1C:DFFF | ||
| $127 | $0C:E000 - $0C:FFFF | $227 | $14:E000 - $14:FFFF | $327 | $1C:E000 - $1C:FFFF | ||
| $128 | $0D:0000 - $0D:1FFF | $228 | $15:0000 - $15:1FFF | $328 | $1D:0000 - $1D:1FFF | ||
| $129 | $0D:2000 - $0D:3FFF | $229 | $15:2000 - $15:3FFF | $329 | $1D:2000 - $1D:3FFF | ||
| $12A | $0D:4000 - $0D:5FFF | $22A | $15:4000 - $15:5FFF | $32A | $1D:4000 - $1D:5FFF | ||
| $12B | $0D:6000 - $0D:7FFF | $22B | $15:6000 - $15:7FFF | $32B | $1D:6000 - $1D:7FFF | ||
| $12C | $0D:8000 - $0D:9FFF | $22C | $15:8000 - $15:9FFF | $32C | $1D:8000 - $1D:9FFF | ||
| $12D | $0D:A000 - $0D:BFFF | $22D | $15:A000 - $15:BFFF | $32D | $1D:A000 - $1D:BFFF | ||
| $12E | $0D:C000 - $0D:DFFF | $22E | $15:C000 - $15:DFFF | $32E | $1D:C000 - $1D:DFFF | ||
| $12F | $0D:E000 - $0D:FFFF | $22F | $15:E000 - $15:FFFF | $32F | $1D:E000 - $1D:FFFF | ||
| $130 | $0E:0000 - $0E:1FFF | $230 | $16:0000 - $16:1FFF | $330 | $1E:0000 - $1E:1FFF | ||
| $131 | $0E:2000 - $0E:3FFF | $231 | $16:2000 - $16:3FFF | $331 | $1E:2000 - $1E:3FFF | ||
| $132 | $0E:4000 - $0E:5FFF | $232 | $16:4000 - $16:5FFF | $332 | $1E:4000 - $1E:5FFF | ||
| $133 | $0E:6000 - $0E:7FFF | $233 | $16:6000 - $16:7FFF | $333 | $1E:6000 - $1E:7FFF | ||
| $134 | $0E:8000 - $0E:9FFF | $234 | $16:8000 - $16:9FFF | $334 | $1E:8000 - $1E:9FFF | ||
| $135 | $0E:A000 - $0E:BFFF | $235 | $16:A000 - $16:BFFF | $335 | $1E:A000 - $1E:BFFF | ||
| $136 | $0E:C000 - $0E:DFFF | $236 | $16:C000 - $16:DFFF | $336 | $1E:C000 - $1E:DFFF | ||
| $137 | $0E:E000 - $0E:FFFF | $237 | $16:E000 - $16:FFFF | $337 | $1E:E000 - $1E:FFFF | ||
| $138 | $0F:0000 - $0F:1FFF | $238 | $17:0000 - $17:1FFF | $338 | $1F:0000 - $1F:1FFF | ||
| $139 | $0F:2000 - $0F:3FFF | $239 | $17:2000 - $17:3FFF | $339 | $1F:2000 - $1F:3FFF | ||
| $13A | $0F:4000 - $0F:5FFF | $23A | $17:4000 - $17:5FFF | $33A | $1F:4000 - $1F:5FFF | ||
| $13B | $0F:6000 - $0F:7FFF | $23B | $17:6000 - $17:7FFF | $33B | $1F:6000 - $1F:7FFF | ||
| $13C | $0F:8000 - $0F:9FFF | $23C | $17:8000 - $17:9FFF | $33C | $1F:8000 - $1F:9FFF | ||
| $13D | $0F:A000 - $0F:BFFF | $23D | $17:A000 - $17:BFFF | $33D | $1F:A000 - $1F:BFFF | ||
| $13E | $0F:C000 - $0F:DFFF | $23E | $17:C000 - $17:DFFF | $33E | $1F:C000 - $1F:DFFF | ||
| $13F | $0F:E000 - $0F:FFFF | $23F | $17:E000 - $17:FFFF | $33F | $1F:E000 - $1F:FFFF | ||