NESe (pronounced "Nessie") is a NES emulator based on the e6502 emulator, also written in C with a focus on speed and portability for use on embedded platforms, especially ARM.
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.6KB

  1. #ifndef NES_H_
  2. #define NES_H_
  3. #include "cart.h"
  4. #include "apu.h"
  5. #include "ppu.h"
  6. #include "input.h"
  7. #include "e6502/e6502.h"
  8. #define nes_clock_master_num (945U * 1000U * 1000U)
  9. #define nes_clock_master_den (44U)
  10. #define nes_clock_cpu_div (12U)
  11. #define nes_clock_ppu_div (4U)
  12. #define nes_clock_apu_div (24U)
  13. #define nes_chr_page_size (0x1000U)
  14. #define nes_vram_page_size (0x0400U)
  15. #define nes_prg_rom_page_size (0x4000U)
  16. #define nes_mem_ram_start (0x0000U)
  17. #define nes_mem_ram_size (0x0800U)
  18. #define nes_mem_ppu_start (0x2000U)
  19. #define nes_mem_ppu_size (0x2000U)
  20. #define nes_mem_apu_start (0x4000U)
  21. #define nes_mem_apu_size (0x0020U)
  22. #define nes_mem_exp_start (0x4020U)
  23. #define nes_mem_exp_size (0x1FE0U)
  24. #define nes_mem_wram_start (0x6000U)
  25. #define nes_mem_wram_size (0x2000U)
  26. #define nes_mem_rom_start (0x8000U)
  27. #define nes_mem_rom_size (0x8000U)
  28. #define nes_ppu_mem_size (0x4000U)
  29. #define nes_ppu_map_size (0x8U)
  30. #define nes_ppu_dma_reg (0x4014U)
  31. #define nes_input_1_reg (0x4016U)
  32. #define nes_input_2_reg (0x4017U)
  33. #define nes_input_set_reg (0x4016U)
  34. #define nes_apu_map_size (0x20U)
  35. typedef struct {
  36. e6502_Core cpu;
  37. nes_ppu ppu;
  38. nes_apu apu;
  39. nes_input input;
  40. uint8_t ram[nes_mem_ram_size];
  41. nes_cart cart;
  42. } nes;
  43. uint8_t nes_mem_read(nes*, uint16_t addr);
  44. void nes_mem_write(nes*, uint16_t addr, uint8_t);
  45. int nes_init(nes*, int audio_freq);
  46. void nes_done(nes*);
  47. int nes_setup_cart(nes*);
  48. void nes_reset(nes*);
  49. nes_ppu_Result nes_step(nes*, int* run);
  50. #endif // NES_H_