mtgos-kernel/docs/mmap.md

2.4 KiB

Memory Map File Format

.mc - Clear text Memory Map

Identifier Meaning
DEVICETYPE Type of the device. One of PC, CONSOLE and EMBEDDED
DEVICENAME Pascal strings containing the name of the device
CPUARCH Architecture. Currently one of X86, X86_64 and ARM
ENDIAN BIG or LITTLE
BITS 32 or 64
REGION A region of Memory. Arguments are START_ADDR, END_ADDR, and PERMISSIONS (R, RW, RX, RWX) Only memory with RWX permissions can be allocated.

Example:

DEVICETYPE CONSOLE
DEVICENAME 3DS9
CPUARCH ARM
ENDIAN LITTLE
BITS 32
REGION 0x00000000 0x00008000 RWX
REGION 0x08000000 0x08100000 RWX
REGION 0x10000000 0x18000000 RW
REGION 0x18000000 0x18600000 RW
REGION 0x1FF00000 0x1FF80000 RW
REGION 0x1FF80000 0x20000000 RW
REGION 0x20000000 0x28000000 RW

.mmap - Compiled Memory Map

Header

The header is always little-endian

Offset Width Meaning
0x00 4 Magic number MMAP
0x04 4 Version (Currently 0)
0x08 4 Tag count

Tag format

Offset Width Meaning
0x00 1 Tag type
0x01 1 Tag size
0x02 2 Paddding

Supported tags

Tag Type Size Name
0x00 1 DEVICETYPE
0x01 variable DEVICENAME
0x02 1 CPUARCH
0x03 1 ENDIAN
0x04 1 BITS
0x05 BITS/4 + 1 REGION

DEVICETYPE

Value Meaning
0 PC
1 CONSOLE
2 EMBEDDED

CPUARCH

Value Meaning
0 X86
1 X86_64
2 ARM

ENDIAN

Value Meaning
0 BIG
1 LITTLE

BITS

This is a 8-bit integer

REGION

Offset Length Meaning
0 BITS/8 Start address
BITS/8 BITS/8 End address
BITS/4 1 Permissions

Permissions:

Value Meaning
0 No permission
1 X
2 W
3 WX
4 R
5 RX
6 RW
7 RWX