|
- #ifndef NES_H_
- #define NES_H_
-
- #include "cart.h"
- #include "apu.h"
- #include "ppu.h"
- #include "input.h"
-
- #include "e6502/e6502.h"
-
-
- #define nes_clock_master_num (945U * 1000U * 1000U)
- #define nes_clock_master_den (44U)
- #define nes_clock_cpu_div (12U)
- #define nes_clock_ppu_div (4U)
- #define nes_clock_apu_div (24U)
-
- #define nes_chr_page_size (0x1000U)
- #define nes_vram_page_size (0x0400U)
- #define nes_prg_rom_page_size (0x4000U)
-
- #define nes_mem_ram_start (0x0000U)
- #define nes_mem_ram_size (0x0800U)
- #define nes_mem_ppu_start (0x2000U)
- #define nes_mem_ppu_size (0x2000U)
- #define nes_mem_apu_start (0x4000U)
- #define nes_mem_apu_size (0x0020U)
- #define nes_mem_exp_start (0x4020U)
- #define nes_mem_exp_size (0x1FE0U)
- #define nes_mem_wram_start (0x6000U)
- #define nes_mem_wram_size (0x2000U)
- #define nes_mem_rom_start (0x8000U)
- #define nes_mem_rom_size (0x8000U)
-
- #define nes_ppu_mem_size (0x4000U)
- #define nes_ppu_map_size (0x8U)
- #define nes_ppu_dma_reg (0x4014U)
-
- #define nes_input_1_reg (0x4016U)
- #define nes_input_2_reg (0x4017U)
- #define nes_input_set_reg (0x4016U)
-
- #define nes_apu_map_size (0x20U)
-
-
- typedef struct {
- e6502_Core cpu;
- nes_ppu ppu;
- nes_apu apu;
- nes_input input;
- uint8_t ram[nes_mem_ram_size];
- nes_cart cart;
- } nes;
-
- uint8_t nes_mem_read(nes*, uint16_t addr);
-
- void nes_mem_write(nes*, uint16_t addr, uint8_t);
-
- int nes_init(nes*, int audio_freq);
-
- void nes_done(nes*);
-
- int nes_setup_cart(nes*);
-
- void nes_reset(nes*);
-
- nes_ppu_Result nes_step(nes*, int* run);
-
-
- #endif // NES_H_
|