52 lines
1.7 KiB
C
52 lines
1.7 KiB
C
/* radare - LGPL - 2015 - maijin */
|
|
|
|
//CPU_memory_map: http://wiki.nesdev.com/w/index.php/CPU_memory_map
|
|
|
|
#ifndef _NES_H
|
|
#define _NES_H
|
|
|
|
#define INES_MAGIC "\x4E\x45\x53\x1A"
|
|
|
|
#define PRG_PAGE_SIZE 0x4000
|
|
#define CHR_PAGE_SIZE 0x2000
|
|
#define INES_HDR_SIZE sizeof (ines_hdr)
|
|
|
|
#define RAM_START_ADDRESS 0x0000
|
|
#define RAM_SIZE 0x0800
|
|
|
|
#define RAM_MIRROR_1_ADDRESS 0x0800
|
|
#define RAM_MIRROR_1_SIZE 0x0800
|
|
|
|
#define RAM_MIRROR_2_ADDRESS 0x1000
|
|
#define RAM_MIRROR_2_SIZE 0x0800
|
|
|
|
#define RAM_MIRROR_3_ADDRESS 0x1800
|
|
#define RAM_MIRROR_3_SIZE 0x0800
|
|
|
|
#define PPU_REG_ADDRESS 0x2000
|
|
#define PPU_REG_SIZE 0x0008
|
|
|
|
#define APU_AND_IOREGS_START_ADDRESS 0x4000
|
|
#define APU_AND_IOREGS_SIZE 0x0020
|
|
|
|
#define SRAM_START_ADDRESS 0x6000
|
|
#define SRAM_SIZE 0x2000
|
|
|
|
#define ROM_START_ADDRESS 0x8000
|
|
#define ROM_SIZE 0x8000
|
|
|
|
#define NMI_VECTOR_START_ADDRESS 0xFFFA
|
|
#define RESET_VECTOR_START_ADDRESS 0xFFFC
|
|
#define IRQ_VECTOR_START_ADDRESS 0xFFFE
|
|
|
|
typedef struct __attribute__((__packed__)) {
|
|
char id[0x4]; // NES\x1A
|
|
ut8 prg_page_count_16k; // number of PRG-ROM pages
|
|
ut8 chr_page_count_8k; // number of CHR-ROM pages
|
|
ut8 rom_control_byte_0; // flags describing ROM image
|
|
ut8 rom_control_byte_1; // flags describing ROM image
|
|
ut8 ram_bank_count_8k; // size of PRG RAM
|
|
ut8 reserved[7]; // zero filled
|
|
} ines_hdr;
|
|
|
|
#endif // _NES_H
|