浏览代码

MMC1 cleanup; Emit cart info on launch

master
Nathaniel Walizer 11 个月前
父节点
当前提交
0d18c3857c
共有 3 个文件被更改,包括 13 次插入17 次删除
  1. +1
    -0
      Makefile
  2. +3
    -1
      src/cart.c
  3. +9
    -16
      src/map/mmc1.c

+ 1
- 0
Makefile 查看文件

@@ -7,6 +7,7 @@ PFLAGS = -g
#PFLAGS += -DDEBUG_PPU -DDEBUG_VRAM -DDEBUG_OAM #PFLAGS += -DDEBUG_PPU -DDEBUG_VRAM -DDEBUG_OAM
PFLAGS += -DDEBUG_APU PFLAGS += -DDEBUG_APU
#PFLAGS += -DE6502_DEBUG #PFLAGS += -DE6502_DEBUG
PFLAGS += -DE6502_ILLEGAL
CFLAGS = $(PFLAGS) -Wall -Werror -Wshadow -Wunused -I.. CFLAGS = $(PFLAGS) -Wall -Werror -Wshadow -Wunused -I..
LDFLAGS = $(PFLAGS) LDFLAGS = $(PFLAGS)




+ 3
- 1
src/cart.c 查看文件

@@ -26,6 +26,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) {
INES_ERR("Bad program ROM size: %#x", prg_size); INES_ERR("Bad program ROM size: %#x", prg_size);
status = -1; status = -1;
} else { } else {
INES_INFO("%d KB PRG ROM", prg_size / 1024);
cart->prg_rom = ptr; cart->prg_rom = ptr;
cart->prg_rom_banks = hdr->prg_size_lsb; cart->prg_rom_banks = hdr->prg_size_lsb;
} }
@@ -34,6 +35,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) {


if (0 == status) { if (0 == status) {
int chr_size = nes_chr_page_size * hdr->chr_size_lsb; int chr_size = nes_chr_page_size * hdr->chr_size_lsb;
INES_INFO("%d KB CHR ROM", chr_size / 1024);
cart->chr_rom = ptr; cart->chr_rom = ptr;
cart->chr_rom_banks = hdr->chr_size_lsb * 2; cart->chr_rom_banks = hdr->chr_size_lsb * 2;
ptr += chr_size; ptr += chr_size;
@@ -45,7 +47,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) {
INES_ERR("No mapper found for type %d", index); INES_ERR("No mapper found for type %d", index);
status = -1; status = -1;
} else if (NULL != cart->mapper->name) { } else if (NULL != cart->mapper->name) {
INES_INFO("Mapper: %s\n", cart->mapper->name);
INES_INFO("Mapper: %s", cart->mapper->name);
} }
} }




+ 9
- 16
src/map/mmc1.c 查看文件

@@ -73,26 +73,19 @@ static void mmc1_update_chr(mmc1_mapper* map) {
static void mmc1_update_prg(mmc1_mapper* map) { static void mmc1_update_prg(mmc1_mapper* map) {
// PRG ROM selection // PRG ROM selection
int mode = (map->reg_control >> 2) & 3; int mode = (map->reg_control >> 2) & 3;
int bank = (map->reg_prg & 0b01111);
int bank_0 = (map->reg_prg & 0b01111);
int bank_1 = bank_0;
if (!(mode & 0b10)) { if (!(mode & 0b10)) {
bank = (bank & 0b01110);
MAP_LOG("PRG: 32 KB %d + %d", bank, bank + 1);
bank *= nes_prg_rom_page_size;
map->prg_bank[0] = &map->prg_rom[bank];
map->prg_bank[1] = &map->prg_rom[bank +
nes_prg_rom_page_size];
bank_0 = (bank_0 & 0b01110);
bank_1 = bank_0 + 1;
} else if (mode == 2) { } else if (mode == 2) {
MAP_LOG("PRG: %d + %d", 0, bank);
bank *= nes_prg_rom_page_size;
map->prg_bank[0] = &map->prg_rom[0];
map->prg_bank[1] = &map->prg_rom[bank];
bank_0 = 0;
} else if (mode == 3) { } else if (mode == 3) {
MAP_LOG("PRG: %d + %d", bank, map->prg_rom_banks - 1);
bank *= nes_prg_rom_page_size;
map->prg_bank[0] = &map->prg_rom[bank];
map->prg_bank[1] = &map->prg_rom[(map->prg_rom_banks - 1) *
nes_prg_rom_page_size];
bank_1 = (map->prg_rom_banks - 1);
} }
MAP_LOG("PRG: %d + %d", bank_0, bank_1);
map->prg_bank[0] = &map->prg_rom[bank_0 * nes_prg_rom_page_size];
map->prg_bank[1] = &map->prg_rom[bank_1 * nes_prg_rom_page_size];
} }


static void mmc1_reset(nes_mapper* nes_map) { static void mmc1_reset(nes_mapper* nes_map) {


正在加载...
取消
保存