Memory map: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
No edit summary
No edit summary
 
Line 1: Line 1:
The WonderSwan's SoC enforces the following memory map layout:
The WonderSwan's SoC uses a 20-bit physical memory map, split into three regions with distinct bus widths, timings, and access permissions;


{| class="wikitable"
{| class="wikitable"
|+ WonderSwan SoC linear memory map
|+ WonderSwan physical memory map
! Bus
! Bus
! colspan="2" | Address range
! colspan="2" | Address range
Line 24: Line 24:
| style="text-align: center;" | 0x20000<br/>0xFFFFF
| style="text-align: center;" | 0x20000<br/>0xFFFFF
| 8/16-bit (configurable)
| 8/16-bit (configurable)
| 1/3 cycles (configurable)
| 1/2 cycles (configurable)
| R
| R
|}
|}
Line 30: Line 30:
== Internal ==
== Internal ==


The WonderSwan SoC features an unified memory architecture; that is, the CPU, [[Display]] and [[Sound]] components can access the RAM in time divisions of the chip's clock.
The WonderSwan SoC features an unified memory architecture. The CPU, [[Display]] and [[Sound]] components make use of data stored in a shared RAM in distinct segments of the 12.288 MHz SoC clock. This is in contrast to many other platforms which feature, for example, separate video memory. This allows the CPU to modify video and audio data without worrying about wait states or video timing; however, the video and audio components have location and alignment restrictions for data:
 
This allows for a mostly CPU-stall-free development experience, but restricts memory layouting. First of all, some elements of the memory live at fixed locations:


{| class="wikitable"
{| class="wikitable"
Line 42: Line 40:
|-
|-
| style="text-align: center;" | 0x0000
| style="text-align: center;" | 0x0000
| colspan="3" style="text-align: center;" | '''Interrupt vectors''' (256 x 32-bit segment:offset address)
| colspan="3" style="text-align: center;" | '''Interrupt vectors''' (256 x 4 bytes - far addresses)
|-
|-
| style="text-align: center;" | 0x0400
| style="text-align: center;" | 0x0400
Line 96: Line 94:
|}
|}


Remember that just because an element exists in memory, it doesn't have to be fully utilized; for example, it is common for a WonderSwan game to only reserve sixteen out of the 256 interrupt vectors, reusing the remaining 240 as general RAM space.
Note that an element being present on this map does not mean that the space cannot be utilized for other data. For example, it is common for a WonderSwan game to only reserve sixteen out of the 256 interrupt vectors, reusing the remaining 240 as general RAM space.


== Cartridge ==
== Cartridge ==
Line 103: Line 101:


{| class="wikitable"
{| class="wikitable"
|+ Standard mapper linear memory map
|+ Standard mapper physical memory map
! Address range
! Address range
! Bank
! Bank

Latest revision as of 16:57, 2 August 2024

The WonderSwan's SoC uses a 20-bit physical memory map, split into three regions with distinct bus widths, timings, and access permissions;

WonderSwan physical memory map
Bus Address range Access width Access speed Read/Write
Internal 0x00000
0x0FFFF
16-bit 1 cycle RW
Cartridge 0x10000
0xFFFFF
0x10000
0x1FFFF
8-bit 1(color)/2 cycles (configurable) RW
0x20000
0xFFFFF
8/16-bit (configurable) 1/2 cycles (configurable) R

Internal

The WonderSwan SoC features an unified memory architecture. The CPU, Display and Sound components make use of data stored in a shared RAM in distinct segments of the 12.288 MHz SoC clock. This is in contrast to many other platforms which feature, for example, separate video memory. This allows the CPU to modify video and audio data without worrying about wait states or video timing; however, the video and audio components have location and alignment restrictions for data:

WonderSwan SoC internal memory map
Address WonderSwan WonderSwan Color (2BPP mode) WonderSwan Color (4BPP mode)
0x0000 Interrupt vectors (256 x 4 bytes - far addresses)
0x0400 Free RAM
0x2000 Tile data (bank 0) Free RAM
0x4000 Tile data (bank 1) Tile data (bank 0)
0x6000 Free RAM
0x8000 Tile data (bank 1)
0xC000 Free RAM
0xFE00 Color palette
0xFFFF

In addition, some elements can be placed at configurable locations in RAM, but with restrictions:

WonderSwan SoC internal memory layout limitations
Type Lowest address Highest address Alignment
Screen 0x0000 0x3800
0x7800(color)
0x800 (2048) bytes
Sprite table 0x0000 0x3E00
0x7E00(color)
0x200 (512) bytes
Sound wave table 0x0000 0x3FC0 0x40 (64) bytes

Note that an element being present on this map does not mean that the space cannot be utilized for other data. For example, it is common for a WonderSwan game to only reserve sixteen out of the 256 interrupt vectors, reusing the remaining 240 as general RAM space.

Cartridge

The cartridge part of the memory map is fully controlled by the cartridge bus; this is usually subdivided further by a Mapper. There exists a standard layout common to all official mappers:

Standard mapper physical memory map
Address range Bank
0x10000
0x1FFFF
SRAM (or flashable ROM)
0x20000
0x2FFFF
ROM bank 0
0x30000
0x3FFFF
ROM bank 1
0x40000
0xFFFFF
ROM linear (EX) bank