WonderWitch/Memory map: Difference between revisions
From WSdev Wiki
Jump to navigationJump to search
No edit summary |
(→Interrupt vectors: document SoC interrupts) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
The following documents the | The following documents the WonderWitch memory map. Note that you are not required to follow these rules to the letter; however, some amount of the beginning of memory is expected to be left to FreyaBIOS, FreyaOS, etc. | ||
=== Internal RAM (0x00000 - 0x0FFFF) === | |||
{| class="wikitable" | {| class="wikitable" | ||
Line 13: | Line 15: | ||
|- | |- | ||
| style="text-align: center;" | 0x0100 | | style="text-align: center;" | 0x0100 | ||
| colspan="4" style="text-align: center;" | | | colspan="4" style="text-align: center;" | Internal BIOS area | ||
|- | |||
| style="text-align: center;" | 0x0290 | |||
| rowspan="8" style="text-align: center;" | Stack, user IRAM | |||
| rowspan="6" style="text-align: center;" | Stack, user IRAM | |||
| rowspan="3" style="text-align: center;" | Stack, user IRAM | |||
| style="text-align: center;" | Stack, User IRAM | |||
|- | |- | ||
| style="text-align: center;" | 0x0E00 | | style="text-align: center;" | 0x0E00 | ||
| style="text-align: center;" | Sprite table | | style="text-align: center;" | Sprite table | ||
|- | |- | ||
Line 60: | Line 65: | ||
In all modes, the stack is placed immediately before the sprite table. | In all modes, the stack is placed immediately before the sprite table. | ||
Note that the user IRAM area is shared between all users of FreyaBIOS - notably, FreyaOS puts | |||
==== Interrupt vectors ==== | |||
{| class="wikitable" | |||
! Start | |||
! End | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x07 | |||
| CPU interrupts | |||
|- | |||
| 0x08 | |||
| 0x0F | |||
| | |||
|- | |||
| 0x10 | |||
| 0x18 | |||
| [[WonderWitch/FreyaBIOS|FreyaBIOS]] interrupts | |||
|- | |||
| 0x19 | |||
| 0x27 | |||
| | |||
|- | |||
| 0x28 | |||
| 0x2F | |||
| SoC interrupts | |||
|} | |||
==== Internal BIOS area ==== | |||
{| class="wikitable" | |||
! Start | |||
! Length | |||
! Description | |||
|- | |||
| 0x100 | |||
| 128 | |||
| Temporary memory buffer. Used for XMODEM transfers by FreyaOS. | |||
|- | |||
| 0x180 | |||
| 64 | |||
| Wavetable memory location. | |||
|- | |||
| 0x204 | |||
| 2/4? | |||
| Written to by FreyaOS using ''sys_alloc_iram'' to point to its IRAM area. | |||
|- | |||
| 0x230 | |||
| 2 | |||
| Near pointer to temporary memory buffer (0x0100). | |||
|} | |||
=== Cartridge SRAM (0x10000 - 0x1FFFF) === | |||
{| class="wikitable" | |||
! Bank | |||
! Description | |||
|- | |||
| 0 | |||
| [[WonderWitch/Filesystem|/ram0 file data]] | |||
|- | |||
| 1 | |||
| Third process data | |||
|- | |||
| 2 | |||
| Second process data | |||
|- | |||
| 3 | |||
| First process data; typically used by [[WonderWitch/FreyaOS|FreyaOS]] | |||
|} | |||
=== Cartridge flash (0x80000 - 0xFFFFF) === | |||
The 512KB of NOR flash memory is mapped and partitioned as follows: | |||
{| class="wikitable" | |||
! Linear address | |||
! Size | |||
! Description | |||
|- | |||
| 0x8nnnn | |||
| rowspan="6" | 384 KB | |||
| rowspan="6" | [[WonderWitch/Filesystem|/rom0 file data]] | |||
|- | |||
| 0x9nnnn | |||
|- | |||
| 0xAnnnn | |||
|- | |||
| 0xBnnnn | |||
|- | |||
| 0xCnnnn | |||
|- | |||
| 0xDnnnn | |||
|- | |||
| 0xEnnnn | |||
| 64 KB | |||
| [[WonderWitch/FreyaOS|FreyaOS]] | |||
|- | |||
| 0xFnnnn | |||
| 64 KB | |||
| [[WonderWitch/FreyaBIOS|FreyaBIOS]] | |||
|} |
Latest revision as of 15:29, 16 December 2024
The following documents the WonderWitch memory map. Note that you are not required to follow these rules to the letter; however, some amount of the beginning of memory is expected to be left to FreyaBIOS, FreyaOS, etc.
Internal RAM (0x00000 - 0x0FFFF)
Address | ASCII, 1 screen | ASCII, 2 screens | Shift-JIS, 1 screen | Shift-JIS, 2 screens |
---|---|---|---|---|
0x0000 | Interrupt vectors | |||
0x0100 | Internal BIOS area | |||
0x0290 | Stack, user IRAM | Stack, user IRAM | Stack, user IRAM | Stack, User IRAM |
0x0E00 | Sprite table | |||
0x1000 | Screen 1 | |||
0x1600 | Sprite table | |||
0x1800 | Screen 1 | Screen 2 | ||
0x2000 | Tile data (512 tiles) | |||
0x2600 | Sprite table | |||
0x2800 | Screen 2 | |||
0x2E00 | Sprite table | |||
0x3000 | Screen 1 | |||
0x3800 | Tile data (128 tiles) | |||
0x4000 | Color tile data; only restored with ResumeIL. | |||
0xC000 | Unused; never restored on program suspend/resume. | |||
0xFE00 | Color palette data; only restored with ResumeIL. |
In all modes, the stack is placed immediately before the sprite table.
Note that the user IRAM area is shared between all users of FreyaBIOS - notably, FreyaOS puts
Interrupt vectors
Start | End | Description |
---|---|---|
0x00 | 0x07 | CPU interrupts |
0x08 | 0x0F | |
0x10 | 0x18 | FreyaBIOS interrupts |
0x19 | 0x27 | |
0x28 | 0x2F | SoC interrupts |
Internal BIOS area
Start | Length | Description |
---|---|---|
0x100 | 128 | Temporary memory buffer. Used for XMODEM transfers by FreyaOS. |
0x180 | 64 | Wavetable memory location. |
0x204 | 2/4? | Written to by FreyaOS using sys_alloc_iram to point to its IRAM area. |
0x230 | 2 | Near pointer to temporary memory buffer (0x0100). |
Cartridge SRAM (0x10000 - 0x1FFFF)
Bank | Description |
---|---|
0 | /ram0 file data |
1 | Third process data |
2 | Second process data |
3 | First process data; typically used by FreyaOS |
Cartridge flash (0x80000 - 0xFFFFF)
The 512KB of NOR flash memory is mapped and partitioned as follows:
Linear address | Size | Description |
---|---|---|
0x8nnnn | 384 KB | /rom0 file data |
0x9nnnn | ||
0xAnnnn | ||
0xBnnnn | ||
0xCnnnn | ||
0xDnnnn | ||
0xEnnnn | 64 KB | FreyaOS |
0xFnnnn | 64 KB | FreyaBIOS |