-
Notifications
You must be signed in to change notification settings - Fork 100
/
sfc_rom.h
75 lines (68 loc) · 1.75 KB
/
sfc_rom.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#pragma once
// License: MIT http://opensource.org/licenses/MIT
// Author: dustpg mailto:[email protected]
#include <stdint.h>
/// <summary>
/// ROM 信息
/// </summary>
typedef struct {
// PRG-ROM 程序只读储存器 数据指针
uint8_t* data_prgrom;
// CHR-ROM 角色只读存储器 数据指针
uint8_t* data_chrrom;
// PRG-ROM CRC32-b
uint32_t prgrom_crc32b;
// CHR-ROM CRC32-b
uint32_t chrrom_crc32b;
// 16KB为单位 程序只读储存器 数据长度
uint32_t count_prgrom16kb;
// 8KB为单位 角色只读存储器 数据长度
uint32_t count_chrrom_8kb;
// Mapper 编号
uint8_t mapper_number;
// 是否Vertical Mirroring(否即为水平)
uint8_t vmirroring;
// 是否FourScreen
uint8_t four_screen;
// 是否有SRAM(电池供电的)
uint8_t save_ram;
// 保留以对齐
uint8_t reserved[4];
} sfc_rom_info_t;
/// <summary>
/// NES 文件头
/// </summary>
typedef struct {
// NES^Z
uint32_t id;
// 16k 程序只读储存器 数量
uint8_t count_prgrom16kb;
// 8k 角色只读存储器 数量
uint8_t count_chrrom_8kb;
// 控制信息1
uint8_t control1;
// 控制信息2
uint8_t control2;
// MAPPER变种
uint8_t mapper_variant;
// 高位ROM大小
uint8_t upper_rom_size;
// RAM大小
uint8_t ram_size;
// 保留数据
uint8_t reserved[5];
} sfc_nes_header_t;
/// <summary>
/// ROM control 字节 #1
/// </summary>
enum {
SFC_NES_VMIRROR = 0x01,
SFC_NES_SAVERAM = 0x02,
SFC_NES_TRAINER = 0x04,
SFC_NES_4SCREEN = 0x08
};
// ROM control byte #2
enum {
SFC_NES_VS_UNISYSTEM = 0x01,
SFC_NES_Playchoice10 = 0x02
};