diff --git a/Makefile b/Makefile index 7ca0cf5..859e6d9 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,8 @@ NESE_SRCS += $(NESE_MAP_SRCS:%=$(MAPDIR)/%) NESE_OBJS = $(NESE_SRCS:%.c=$(OBJDIR)/%.o) +nese: $(BINDIR)/nese + all: $(BINDIR)/nese $(BINDIR)/test: CFLAGS += -DF6502_FLAT -DF6502_TEST -DF6502_TRACE diff --git a/src/cart.c b/src/cart.c index 598b5b4..9367470 100644 --- a/src/cart.c +++ b/src/cart.c @@ -81,7 +81,7 @@ int nes_cart_load_mem(void* data, int size, nes* sys) { LOGE("Failed to allocate mapper data"); status = -1; } else { - // Default PGM ROM + // Default PRG ROM if (mem->n_rom_banks > 2) { mem->rom_bank[0] = prg_rom_page(mem, 0); mem->rom_bank[1] = prg_rom_page(mem, 1); @@ -94,6 +94,9 @@ int nes_cart_load_mem(void* data, int size, nes* sys) { mem->rom_bank[3] = prg_rom_page(mem, 1); } + // Default SRAM bank + mem->sram_bank = mem->sram; + // PPU Bank 0 - 7: Default pattern tables for (int page = 0; page < 8; ++page) { mem->ppu.bank[page] = chr_page(&mem->ppu, page); @@ -109,11 +112,6 @@ int nes_cart_load_mem(void* data, int size, nes* sys) { mem->ppu.bank[page] = mem->ppu.pal_bank; } - // Map the SRAM bank to battery-backed SRAM if present - if (hdr->flags_6 & ines_Flag_Battery) { - mem->sram_bank = mem->sram; - } - if (mem->mapper.init) { status = mem->mapper.init(&mem->mapper, hdr, mem); diff --git a/src/f6502.c b/src/f6502.c index 2c839c9..882316d 100644 --- a/src/f6502.c +++ b/src/f6502.c @@ -20,9 +20,6 @@ #include "log.h" -// TOTO: Temp Hack -volatile uint8_t memval; - static inline uint8_t f6502_read_zp(nes_Memory* mem, uint8_t addr) { return mem->ram[addr]; @@ -143,7 +140,7 @@ static inline int f6502_write(nes_Memory* mem, uint16_t addr, uint8_t val) { int ret = 0; #ifdef F6502_TRACE - printf("W $%04X <- %02X\n", addr, val); +// printf("W $%04X <- %02X\n", addr, val); #endif #ifdef F6502_FLAT #ifdef F6502_TEST diff --git a/src/map/map001.c b/src/map/map001.c index aa40ac6..7117c3b 100644 --- a/src/map/map001.c +++ b/src/map/map001.c @@ -22,7 +22,15 @@ static inline void mmc1_update_vram(map001_data* data, nes_Mirror_Vertical, nes_Mirror_Horizontal, }; - LOGD("Mirroring %d", mirror[data->reg_control & 0b11]); +#ifdef NESE_DEBUG + static const char* mirror_name[] = { + "1-screen, lower bank", + "1-screen, upper bank", + "Vertical mirroring", + "Horizontal mirroring", + }; +#endif + LOGD("VRAM: %s", mirror_name[data->reg_control & 0b11]); nes_ppu_set_mirroring(&mem->ppu, mirror[data->reg_control & 0b11]); } @@ -102,6 +110,7 @@ static int map001_write_rom(nes_Mapper* map, nes_Memory* mem, LOGD("Write $%04x < %02x", addr, val); if (val & 0x80U) { + LOGD("Resetting"); data->reg_shift = 0b10000; data->reg_control |= 0b01100; mmc1_update_prg(data, mem); diff --git a/src/nes.c b/src/nes.c index 1fc87c8..14a8eab 100644 --- a/src/nes.c +++ b/src/nes.c @@ -15,13 +15,14 @@ void nes_init(nes* sys, void* plat) { } void nes_reset(nes* sys) { - f6502_reset(&sys->core); + // TODO: Reset PPU + // TODO: Reset APU nes_Mapper* mapper = &sys->core.memory.mapper; if (mapper->reset) { mapper->reset(mapper, &sys->core.memory); } - // TODO: Reset PPU - // TODO: Reset APU + // Do this last so we load the right reset vector! + f6502_reset(&sys->core); } void nes_done(nes* sys) {