| @@ -41,6 +41,8 @@ NESE_SRCS += $(NESE_MAP_SRCS:%=$(MAPDIR)/%) | |||||
| NESE_OBJS = $(NESE_SRCS:%.c=$(OBJDIR)/%.o) | NESE_OBJS = $(NESE_SRCS:%.c=$(OBJDIR)/%.o) | ||||
| nese: $(BINDIR)/nese | |||||
| all: $(BINDIR)/nese | all: $(BINDIR)/nese | ||||
| $(BINDIR)/test: CFLAGS += -DF6502_FLAT -DF6502_TEST -DF6502_TRACE | $(BINDIR)/test: CFLAGS += -DF6502_FLAT -DF6502_TEST -DF6502_TRACE | ||||
| @@ -81,7 +81,7 @@ int nes_cart_load_mem(void* data, int size, nes* sys) { | |||||
| LOGE("Failed to allocate mapper data"); | LOGE("Failed to allocate mapper data"); | ||||
| status = -1; | status = -1; | ||||
| } else { | } else { | ||||
| // Default PGM ROM | |||||
| // Default PRG ROM | |||||
| if (mem->n_rom_banks > 2) { | if (mem->n_rom_banks > 2) { | ||||
| mem->rom_bank[0] = prg_rom_page(mem, 0); | mem->rom_bank[0] = prg_rom_page(mem, 0); | ||||
| mem->rom_bank[1] = prg_rom_page(mem, 1); | 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); | mem->rom_bank[3] = prg_rom_page(mem, 1); | ||||
| } | } | ||||
| // Default SRAM bank | |||||
| mem->sram_bank = mem->sram; | |||||
| // PPU Bank 0 - 7: Default pattern tables | // PPU Bank 0 - 7: Default pattern tables | ||||
| for (int page = 0; page < 8; ++page) { | for (int page = 0; page < 8; ++page) { | ||||
| mem->ppu.bank[page] = chr_page(&mem->ppu, 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; | 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) { | if (mem->mapper.init) { | ||||
| status = mem->mapper.init(&mem->mapper, | status = mem->mapper.init(&mem->mapper, | ||||
| hdr, mem); | hdr, mem); | ||||
| @@ -20,9 +20,6 @@ | |||||
| #include "log.h" | #include "log.h" | ||||
| // TOTO: Temp Hack | |||||
| volatile uint8_t memval; | |||||
| static inline uint8_t f6502_read_zp(nes_Memory* mem, | static inline uint8_t f6502_read_zp(nes_Memory* mem, | ||||
| uint8_t addr) { | uint8_t addr) { | ||||
| return mem->ram[addr]; | return mem->ram[addr]; | ||||
| @@ -143,7 +140,7 @@ static inline int f6502_write(nes_Memory* mem, | |||||
| uint16_t addr, uint8_t val) { | uint16_t addr, uint8_t val) { | ||||
| int ret = 0; | int ret = 0; | ||||
| #ifdef F6502_TRACE | #ifdef F6502_TRACE | ||||
| printf("W $%04X <- %02X\n", addr, val); | |||||
| // printf("W $%04X <- %02X\n", addr, val); | |||||
| #endif | #endif | ||||
| #ifdef F6502_FLAT | #ifdef F6502_FLAT | ||||
| #ifdef F6502_TEST | #ifdef F6502_TEST | ||||
| @@ -22,7 +22,15 @@ static inline void mmc1_update_vram(map001_data* data, | |||||
| nes_Mirror_Vertical, | nes_Mirror_Vertical, | ||||
| nes_Mirror_Horizontal, | 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, | nes_ppu_set_mirroring(&mem->ppu, | ||||
| mirror[data->reg_control & 0b11]); | 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); | LOGD("Write $%04x < %02x", addr, val); | ||||
| if (val & 0x80U) { | if (val & 0x80U) { | ||||
| LOGD("Resetting"); | |||||
| data->reg_shift = 0b10000; | data->reg_shift = 0b10000; | ||||
| data->reg_control |= 0b01100; | data->reg_control |= 0b01100; | ||||
| mmc1_update_prg(data, mem); | mmc1_update_prg(data, mem); | ||||
| @@ -15,13 +15,14 @@ void nes_init(nes* sys, void* plat) { | |||||
| } | } | ||||
| void nes_reset(nes* sys) { | void nes_reset(nes* sys) { | ||||
| f6502_reset(&sys->core); | |||||
| // TODO: Reset PPU | |||||
| // TODO: Reset APU | |||||
| nes_Mapper* mapper = &sys->core.memory.mapper; | nes_Mapper* mapper = &sys->core.memory.mapper; | ||||
| if (mapper->reset) { | if (mapper->reset) { | ||||
| mapper->reset(mapper, &sys->core.memory); | 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) { | void nes_done(nes* sys) { | ||||