What's new

WIP breakdown of the Nemu savestate format

zoinkity

New member
This is a work-in-progress! If you have any information to add or a correection to be made, please do post it.

All values little-endian unless otherwise noted!
All data is big-endian unless otherwise noted!
Compression is zlib. Seriously, you can just pipe it through zlib.decompress().

Basic format:
ID 100 preview image (optional)
ID 1 rdram
ID 2 SP memory
ID 3 PIFram (from 1FC007C0)
ID 10 general-purpose registers (little-endian long longs)
ID 11 COP0 registers (little-endian data)
ID 12 COP1 registers (little-endian data)
ID 13 Floating-Point Control Register
ID 14 ??? (0x880)
ID 15 PC address
ID 16 ??? (single register)
ID 17 ??? (single register)
ID 19 RSP general purpose registers
ID 20 RSP Vector Registers
ID 21 RSP Flags
ID 22 RSP Accumulators
ID 30 RI registers
ID 31 SP registers
ID 32 MI registers
ID 33 ??? (9 registers)
ID 34 SI rdram address
ID 35 ??? (10 registers)
ID 36 VI registers
ID 37 PI registers
ID 38 DP registers
ID 39 ??? (8 registers)
ID 50 ??? (single register)
ID 51 ??? (single register)
ID 52 ??? (single register)
ID 53 ??? (single register)
ID 60 ??? (8 registers)
ID 70 ??? (single register)
ID 71 ??? (single register)
ID 72 ??? (single register)
ID 73 ??? (single register)
ID 82 SRAM (FLASH?)

preview image
0x0 4 ID: 100 (0x64)
0x4 4 uncompressed size; should be 0x9600, or 120x160 at 16bit color(?)
0x8 4 compressed size, or 0 if uncompressed
0xC var data

rdram
0x0 4 ID: 1
0x4 4 uncompressed size
0x8 4 compressed size, or 0 if uncompressed
0xC var data

SPmem
0x0 4 ID: 2
0x4 4 uncompressed size; overdumped to 0x4000
0x8 4 compressed size, or 0 if uncompressed
0xC var data; fill remaining 0x2000 with zeroes

PIFram
0x0 4 ID: 3
0x4 4 uncompressed size; always 0x40
0x8 4 compressed size, or 0 if uncompressed
0xC var data

general purpose registers
0x0 4 ID: 10
0x4 4 uncompressed size; always 0x100
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian long long format

COP0
0x0 4 ID: 11
0x4 4 uncompressed size; always 0x80
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

COP1
0x0 4 ID: 12
0x4 4 uncompressed size; always 0x80
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

FCR
0x0 4 ID: 13
0x4 4 uncompressed size; always 0x4
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

PC
0x0 4 ID: 15
0x4 4 uncompressed size; always 0x4
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

RSP GP
0x0 4 ID: 19
0x4 4 uncompressed size; always 0x80
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

RSP Vectors
0x0 4 ID: 20
0x4 4 uncompressed size; always 0x200
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian shorts

RSP Flags
0x0 4 ID: 21
0x4 4 uncompressed size; always 0x6
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian shorts

RSP Accumulators
0x0 4 ID: 22
0x4 4 uncompressed size; always 0x40
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian shorts, each accumulator padded to 0x8

RI
0x0 4 ID: 30
0x4 4 uncompressed size; always 0x20
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

SP
0x0 4 ID: 31
0x4 4 uncompressed size; always 0x20
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

SI
0x0 4 ID: 34
0x4 4 uncompressed size; always 0x4
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

VI
0x0 4 ID: 36
0x4 4 uncompressed size; always 0x38
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

PI
0x0 4 ID: 37
0x4 4 uncompressed size; always 0x34
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

DP
0x0 4 ID: 38
0x4 4 uncompressed size; always 0x20
0x8 4 compressed size, or 0 if uncompressed
0xC var data; little-endian format

SRAM/FLASH
0x0 4 ID: 82
0x4 4 uncompressed size; always 0x40000
0x8 4 compressed size, or 0 if uncompressed
0xC var data
 

Top