Memory map
The Core8Bit console uses an STM32H743 microcontroller (Cortex-M7, 480 MHz) with 32 MB of external SDRAM and 16 MB of QSPI flash. This page lists every memory region, which parts a native plugin may use and how each region is cached. For plugin usage rules see Memory for plugins.
Contents
- Physical regions
- ITCM
- DTCM
- AXI SRAM
- D2 SRAM
- D3 SRAM
- SDRAM
- QSPI flash
- Cache attributes
- Ownership summary
Physical regions
| Region | Base | Size | Used for |
|---|---|---|---|
| ITCM | 0x00000000 |
64 KB | System code; 0x800–0xFFFF plugin code |
| Internal flash | 0x08000000 |
2 MB | System firmware |
| DTCM | 0x20000000 |
128 KB | System data and stack; 0x20016000–0x2001FFFF plugin data |
| AXI SRAM (D1) | 0x24000000 |
512 KB | System data, depth strip, framebuffer |
| SRAM1–3 (D2) | 0x30000000 |
288 KB | DMA and audio buffers, plugin FastBuffer |
| SRAM4 (D3) | 0x38000000 |
64 KB | Configuration that survives a reset, synth sample data |
| QSPI NOR flash | 0x90000000 |
16 MB | System sound bank (memory-mapped, read-only) |
| SDRAM | 0xC0000000 |
32 MB | Display buffers, asset pool, plugin slot, Lua heap |
ITCM
0x00000000–0x0000FFFF, not cached.
| Range | Size | Content |
|---|---|---|
0x00000000–0x000007FF |
2 KB | System (reserved) |
0x00000800–0x0000BFFF |
46 KB | Plugin resident code (62 KB, 0x800–0xFFFF, when no overlay is used) |
0x0000C000–0x0000FFFF |
16 KB | Plugin overlay window, written only by load_itcm_overlay |
DTCM
0x20000000–0x2001FFFF, not cached. DMA cannot access DTCM.
| Range | Size | Content |
|---|---|---|
0x20000000–0x20015FFF |
88 KB | System data and main stack (the stack grows down from 0x20016000) |
0x20016000–0x2001FFFF |
40 KB | Plugin .dtcm_hot / .dtcm_bss |
AXI SRAM
0x24000000–0x2407FFFF.
| Range | Size | Content |
|---|---|---|
0x24000000–0x2402C4BF |
177 KB | System data |
0x2402C4C0–0x240378BF |
46 080 B | Depth strip (get_depth_strip, 480 × 48 × 16 bit) |
0x240378C0–0x2403FFFF |
34 KB | System (reserved) |
0x24040000–0x2407FBFF |
261 120 B | Framebuffer: 480 × 272 RGB565 (get_framebuffer) |
0x2407FC00–0x2407FFFF |
1 KB | Unused |
D2 SRAM
0x30000000–0x30047FFF.
| Range | Size | Content |
|---|---|---|
0x30000000–0x3001BFFF |
112 KB | System DMA, audio and Lua buffers |
0x3001C000–0x3002773F |
46 KB | System buffers |
0x30027740–0x3004773F |
128 KB | Plugin FastBuffer (get_fast_buffer). 0x3003FF40–0x3004773F is the 30 KB code tail in DATA_PLUS_CODE mode. |
0x30047740–0x30047FFF |
2 240 B | Unused |
D3 SRAM
0x38000000–0x3800FFFF, reserved for the system: boot and crash information that survives a reset (0x38000000–0x38003FFF) and synth sample data (0x38004000–0x3800FFFF).
SDRAM
0xC0000000–0xC1FFFFFF.
| Range | Size | Content |
|---|---|---|
0xC0000000–0xC007FFFF |
512 KB | Two display buffers; the framebuffer is copied into one of them at each present |
0xC0080000–0xC00923FF |
73 KB | System |
0xC0092400–0xC14923FF |
20 MB | Asset pool: images, sounds and other assets, and plugin alloc() blocks |
0xC1492400–0xC161FFFF |
1.5 MB | System buffers (audio, files, network, image decoding) |
0xC1620000–0xC1B9FFFF |
5 632 KB | Plugin slot: image, .bss and plugin heap |
0xC1BA0000–0xC1BFFFFF |
384 KB | System buffers (network, SD-card cache) |
0xC1C00000–0xC1FFFFFF |
4 MB | Lua heap (also C malloc and C++ new of the system) |
QSPI flash
0x90000000–0x90FFFFFF, memory-mapped and read-only.
| Offset | Content |
|---|---|
0x000000–0x00FFFF |
Reserved |
0x010000–0xFFFFFF |
System sound bank, used by c8b.midi.initFromQSPI |
Cache attributes
Cache lines are 32 bytes. Write-back regions need cache maintenance when DMA is involved: write back before a DMA master reads CPU-written data, invalidate before the CPU reads DMA-written data.
| Range | Attributes | Executable |
|---|---|---|
ITCM 0x00000000–0x0000FFFF |
Not cached (TCM) | Yes |
DTCM 0x20000000–0x2001FFFF |
Non-cacheable | No |
AXI SRAM 0x24000000–0x2407FFFF |
Write-back, no write-allocate | No (except a system area) |
D2 0x30000000–0x3001BFFF |
System only (mixed attributes) | — |
D2 0x3001C000–0x30047FFF (includes the FastBuffer) |
Write-through | Yes |
D3 0x38000000–0x3800FFFF |
Non-cacheable / write-back | No |
QSPI 0x90000000–0x90FFFFFF |
Write-through, read-only | No |
SDRAM 0xC0000000–0xC1BFFFFF (includes the plugin slot) |
Write-back, no write-allocate | Yes |
SDRAM 0xC1C00000–0xC1FFFFFF (Lua heap) |
Write-back, write-allocate | No |
Ownership summary
| Owner | Regions |
|---|---|
| System | ITCM 0x0–0x7FF, DTCM 0x20000000–0x20015FFF, AXI SRAM except the depth strip and framebuffer, D2 below 0x30027740, D3, SDRAM outside the plugin slot and the plugin's alloc blocks |
| Lua | Lua heap 0xC1C00000–0xC1FFFFFF |
| Plugin (while loaded) | Plugin slot 0xC1620000–0xC1B9FFFF, ITCM 0x800–0xFFFF, DTCM 0x20016000–0x2001FFFF, FastBuffer (shared with system image drawing), depth strip, alloc blocks |
| Shared | Framebuffer: the plugin draws, the system adds its overlays and presents |