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.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.6KB

  1. #include "map.h"
  2. typedef struct {
  3. uint8_t* prg_rom;
  4. int prg_rom_size;
  5. uint8_t* prg_ram;
  6. int prg_ram_size;
  7. uint8_t* chr_rom;
  8. int chr_rom_size;
  9. uint8_t reg_shift;
  10. uint8_t reg_control;
  11. uint8_t reg_chr_0;
  12. uint8_t reg_chr_1;
  13. uint8_t reg_prg;
  14. } mmc1_mapper;
  15. /*
  16. int mmc1_init(nes_mapper* nes_map, nes_cart* cart) {
  17. nrom_mapper* map = malloc(sizeof(nrom_mapper));
  18. nes_map->data = map;
  19. if (NULL != map) {
  20. map->prg_rom = cart->prg_rom;
  21. map->prg_rom_size = cart->prg_rom_size;
  22. map->chr_rom = cart->chr_rom;
  23. map->chr_rom_size = cart->chr_rom_size;
  24. map->prg_ram = cart->wram;
  25. map->prg_ram_size = nes_mem_wram_size;
  26. map->shift_reg = 0;
  27. }
  28. return (NULL == map ? -1 : 0);
  29. }
  30. void nrom_done(nes_mapper* nes_map) {
  31. free(nes_map->data);
  32. }
  33. static inline uint8_t* nrom_prg_addr(nrom_mapper* map,
  34. uint16_t addr) {
  35. if (addr > map->prg_rom_size) {
  36. addr &= 0x3FFF;
  37. }
  38. return &(map->prg_rom[addr]);
  39. }
  40. uint8_t nrom_prg_read(nes_mapper* map, uint16_t addr) {
  41. return *(nrom_prg_addr((nrom_mapper*)map->data, addr));
  42. }
  43. void nrom_prg_write(nes_mapper* map, uint16_t addr, uint8_t val) {
  44. // No ROM writes.
  45. }
  46. uint8_t* nrom_chr_addr(nes_mapper* nes_map, uint16_t addr) {
  47. nrom_mapper* map = (nrom_mapper*)nes_map->data;
  48. return &map->chr_rom[addr % map->chr_rom_size];
  49. }
  50. */
  51. nes_mapper mapper_mmc1 = {
  52. /*
  53. .init = mmc1_init,
  54. .done = mmc1_done,
  55. .prg_read = mmc1_prg_read,
  56. .prg_write = mmc1_prg_write,
  57. .chr_addr = mmc1_chr_addr,
  58. .vram_addr = mmc1_chr_addr,
  59. */
  60. };