浏览代码

Add CHR RAM support to NROM (homebrew and testing only)

master
Nathaniel Walizer 11 个月前
父节点
当前提交
a381159d4b
共有 1 个文件被更改,包括 18 次插入5 次删除
  1. +18
    -5
      src/map/nrom.c

+ 18
- 5
src/map/nrom.c 查看文件

@@ -22,7 +22,11 @@ static int nrom_init(nes_mapper* nes_map, nes_cart* cart) {
if (NULL != map) {
map->prg_rom = cart->prg_rom;
map->prg_rom_banks = cart->prg_rom_banks;
map->chr_rom = cart->chr_rom;
if (cart->chr_rom_banks <= 0) {
map->chr_rom = calloc(8, 1024);
} else {
map->chr_rom = cart->chr_rom;
}
map->chr_rom_banks = cart->chr_rom_banks;
map->mirror = (cart->flags & Cart_Flag_Horizontal) ? 0 : 1;
}
@@ -30,7 +34,13 @@ static int nrom_init(nes_mapper* nes_map, nes_cart* cart) {
}

static void nrom_done(nes_mapper* nes_map) {
free(nes_map->data);
nrom_mapper* map = (nrom_mapper*)nes_map->data;
if (NULL != map) {
if (map->chr_rom_banks <= 0) {
free(map->chr_rom);
}
free(nes_map->data);
}
}

static inline uint8_t* nrom_prg_addr(nrom_mapper* map,
@@ -78,10 +88,13 @@ static uint8_t* nrom_vram_addr(nes_mapper* nes_map,
return &map->vram[addr];
}

static void nrom_chr_write(nes_mapper* map,
static void nrom_chr_write(nes_mapper* nes_map,
uint16_t addr, uint8_t val) {
// ROM only.
printf("CHR ROM Write: $%04x < %02x\n", addr, val);
nrom_mapper* map = (nrom_mapper*)nes_map->data;
if (map->chr_rom_banks <= 0) {
*(nrom_chr_addr(nes_map, addr)) = val;
}
// printf("CHR ROM Write: $%04x < %02x\n", addr, val);
}

nes_mapper mapper_nrom = {


正在加载...
取消
保存