From 15431e8fec72ee8d50db587685cfdec82de56fc8 Mon Sep 17 00:00:00 2001 From: Theron Spiegl Date: Thu, 30 Jan 2020 20:33:29 -0600 Subject: [PATCH] vertical scroll bug fixed, mmc3 fixed, pics, readme --- README.md | 22 +++++++++++++--------- pics/contra.png | Bin 0 -> 18918 bytes pics/dk.png | Bin 0 -> 12713 bytes pics/excitebike.png | Bin 0 -> 11322 bytes pics/final_fantasy.png | Bin 0 -> 17557 bytes pics/kirby.png | Bin 0 -> 14527 bytes pics/metroid.png | Bin 0 -> 16858 bytes pics/smb3.png | Bin 0 -> 12122 bytes src/audio.rs | 4 ++-- src/cartridge/mmc3.rs | 24 ++++++++++-------------- src/cartridge/nrom.rs | 24 +++++++++++------------- src/cpu/mod.rs | 2 ++ src/main.rs | 10 ---------- src/ppu/cpu_registers.rs | 5 +++-- src/ppu/memory.rs | 11 +++++------ src/ppu/mod.rs | 3 --- 16 files changed, 46 insertions(+), 59 deletions(-) create mode 100644 pics/contra.png create mode 100644 pics/dk.png create mode 100644 pics/excitebike.png create mode 100644 pics/final_fantasy.png create mode 100644 pics/kirby.png create mode 100644 pics/metroid.png create mode 100644 pics/smb3.png diff --git a/README.md b/README.md index 1c4ddae..4a24ef6 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # nestur -Nestur is an NES emulator and a work in progress. There are likely still several bugs, and MMC3 support is not great. There are plenty of full-featured emulators out there; this is primarily an educational project but I do want it to run well. +Nestur is an NES emulator. There are plenty of full-featured emulators out there; this is primarily an educational project but it is usable. There may still be many bugs, but I'm probably not aware of them so please submit issues. - SDL2 is the only dependency - no use of `unsafe` - NTSC timing -- may only implement mappers 0-4 as these cover ~85% of games according to http://tuxnes.sourceforge.net/nesmapper.txt +- supports mappers 0-4 which cover ~85% of [games](http://tuxnes.sourceforge.net/nesmapper.txt) - + ## Controls: ``` @@ -24,11 +24,11 @@ ___________________ ``` The code aims to follow the explanations from the [NES dev wiki](https://wiki.nesdev.com/w/index.php/NES_reference_guide) where possible, especially in the PPU, and the comments quote from it often. Thanks to everyone who contributes to that wiki/forum, and to Michael Fogleman's [NES](https://github.com/fogleman/nes) and Scott Ferguson's [Fergulator](https://github.com/scottferg/Fergulator) for getting me unstuck at several points. -## Compilation and Use +## Compilation and use -1. Install Rust: https://www.rust-lang.org/tools/install +1. Install [Rust](https://www.rust-lang.org/tools/install) 2. Configure SDL2 for your platform: - - Windows: `SDL2.dll` is already in the repo so you don't have to do anything. + - Windows: `SDL2.dll` is already in the repo so you don't have to do anything - macOS: Install [Homebrew](https://brew.sh/) and run `brew install sdl2` - Linux: `sudo apt-get install libsdl2-dev` (or whatever your package manager is) 3. `cd nestur/ && cargo build --release` (be sure to build/run with the release flag or it will run very slowly) @@ -38,13 +38,17 @@ The code aims to follow the explanations from the [NES dev wiki](https://wiki.ne ## To do: -- Fix any bugs with mappers 0-3 and improve mapper 4 (MMC3) - - DMC audio channel, high- and low-pass filters -- Save state/load functionality +- Better GUI and distributable solution + +- Save states - Player 2 controller? +## Known problem games + +- Paperboy: input doesn't work + Please also check out [Cloaker](https://github.com/spieglt/cloaker) and [Flying Carpet](https://github.com/spieglt/flyingcarpet)! diff --git a/pics/contra.png b/pics/contra.png new file mode 100644 index 0000000000000000000000000000000000000000..370e6ab2812a5b6c7ce5551071fa6f32f5332934 GIT binary patch literal 18918 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 B?nD3p literal 0 HcmV?d00001 diff --git a/pics/excitebike.png b/pics/excitebike.png new file mode 100644 index 0000000000000000000000000000000000000000..05ad84b93ed0d73cf031035ab676b62239ac19a6 GIT binary patch literal 11322 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 Tx+ejnfKH#Vx2*cr=hpuNpldVc literal 0 HcmV?d00001 diff --git a/pics/metroid.png b/pics/metroid.png new file mode 100644 index 0000000000000000000000000000000000000000..366a6a2f3d8d7170a16273c1595b172b80b70640 GIT binary patch literal 16858 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 literal 0 HcmV?d00001 diff --git a/pics/smb3.png b/pics/smb3.png new file mode 100644 index 0000000000000000000000000000000000000000..ca97378d1149d7e316c30ee3fabee1361877efdb GIT binary patch literal 12122 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 literal 0 HcmV?d00001 diff --git a/src/audio.rs b/src/audio.rs index 5fcfddb..f7362a8 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -51,8 +51,8 @@ pub fn initialize(sdl_context: &Sdl, buffer: Arc>>) channels: Some(1), // mono samples: Some(SAMPLES_PER_FRAME) }; - audio_subsystem.open_playback(None, &desired_spec, |spec| { - // println!("{:?}", spec); + audio_subsystem.open_playback(None, &desired_spec, |_spec| { + // println!("{:?}", _spec); ApuSampler{buffer, sample_ratio: APU_SAMPLE_RATE / (SDL_SAMPLE_RATE as f32)} }) } diff --git a/src/cartridge/mmc3.rs b/src/cartridge/mmc3.rs index 2ba55f3..5f7f51e 100644 --- a/src/cartridge/mmc3.rs +++ b/src/cartridge/mmc3.rs @@ -158,7 +158,7 @@ impl Mapper for Mmc3 { 0x8000..=0x9FFF => self.bank_select(value), 0xA000..=0xBFFF => self.mirroring = if value & 1 == 0 {Mirror::Vertical} else {Mirror::Horizontal}, 0xC000..=0xDFFF => self.irq_latch = value, - 0xE000..=0xFFFF => self.irq_enable = false, + 0xE000..=0xFFFF => {self.irq_enable = false; self.trigger_irq = false}, // Writing any value to this register will disable MMC3 interrupts AND acknowledge any pending interrupts. _ => println!("bad address written to MMC3: 0x{:X}", address), } }, @@ -186,19 +186,16 @@ impl Mapper for Mmc3 { fn load_battery_backed_ram(&mut self) {} fn save_battery_backed_ram(&self) {} + // This function is called by the PPU when the A12 address line changes. + // It's supposed to only be called when A12 goes from 0 to 1, but that doesn't work + // for my emulator for some reason. fn clock(&mut self) { if self.reload_counter { self.irq_counter = self.irq_latch; self.reload_counter = false; } - // "Should reload and set IRQ every clock when reload is 0." - if self.irq_latch == 0 && self.irq_enable { - self.irq_counter = self.irq_latch; - self.trigger_irq = true; - } if self.irq_counter == 0 { self.irq_counter = self.irq_latch; - return; } else { self.irq_counter -= 1; } @@ -207,16 +204,15 @@ impl Mapper for Mmc3 { } } + // This function is called by the CPU every step (which takes more than one CPU clock cycle). + // I think I'm supposed to be tracking IRQ delays by the PPU, not letting an IRQ fire if + // there was one within the last 15 PPU cycles, but that didn't work and this does. fn check_irq(&mut self) -> bool { - // if self.trigger_irq { - // self.trigger_irq = false; - // true - // } else { - // false - // } if self.trigger_irq { self.trigger_irq = false; - self.irq_delay = 15; + if self.irq_delay == 0 { + self.irq_delay = 5; + } } if self.irq_delay > 0 { self.irq_delay -= 1; diff --git a/src/cartridge/nrom.rs b/src/cartridge/nrom.rs index a32d894..5f11758 100644 --- a/src/cartridge/nrom.rs +++ b/src/cartridge/nrom.rs @@ -2,51 +2,49 @@ use super::{Cartridge, Mapper, Mirror}; pub struct Nrom { cart: Cartridge, + chr_ram: Vec, } impl Nrom { pub fn new(cart: Cartridge) -> Self { Nrom{ cart: cart, + chr_ram: vec![0; 0x2000], } } } impl Mapper for Nrom { fn read(&mut self, address: usize) -> u8 { - let cl = self.cart.chr_rom.len(); - let pl = self.cart.prg_rom.len(); let addr = address % 0x4000; match address { 0x0000..=0x1FFF => { - if cl > 0 { - self.cart.chr_rom[cl-1][address] + if self.cart.chr_rom_size > 0 { + self.cart.chr_rom[0][address] } else { - 0 + self.chr_ram[address] } }, 0x8000..=0xBFFF => { self.cart.prg_rom[0][addr] }, 0xC000..=0xFFFF => { - self.cart.prg_rom[pl-1][addr] + self.cart.prg_rom[self.cart.prg_rom_size - 1][addr] }, _ => {println!("bad address read from NROM mapper: 0x{:X}", address); 0}, } } fn write(&mut self, address: usize, value: u8) { - let cl = self.cart.chr_rom.len(); - let pl = self.cart.prg_rom.len(); - let addr = address % 0x4000; match address { 0x0000..=0x1FFF => { - if cl > 0 { - self.cart.chr_rom[cl-1][address] = value; + // ROM isn't written to + if self.cart.chr_rom_size == 0 { + self.chr_ram[address] = value; } }, - 0x8000..=0xBFFF => self.cart.prg_rom[0][addr] = value, - 0xC000..=0xFFFF => self.cart.prg_rom[pl-1][addr] = value, + 0x8000..=0xBFFF => (), + 0xC000..=0xFFFF => (), _ => println!("bad address written to NROM mapper: 0x{:X}", address), } } diff --git a/src/cpu/mod.rs b/src/cpu/mod.rs index 2e8624c..aff624f 100644 --- a/src/cpu/mod.rs +++ b/src/cpu/mod.rs @@ -158,6 +158,8 @@ impl Cpu { if self.mapper.borrow_mut().check_irq() && (self.P & INTERRUPT_DISABLE_FLAG == 0) { self.irq(); } + // TODO: should checks for APU and MMC3 IRQs be combined and acknowledged together? + // back up clock so we know how many cycles we complete let clock = self.clock; diff --git a/src/main.rs b/src/main.rs index dc7db24..ed8fb46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -118,7 +118,6 @@ fn main() -> Result<(), String> { /* TODO: -- fix MMC3 - high- and low-pass audio filters - DMC audio channel - untangle CPU and APU/PPU? @@ -142,13 +141,4 @@ Failed tests from instr_test-v5/rom_singles/: CB AXS #n 7, abs_xy, 'illegal opcode using abs x: 9c' - - - - - -1. A12 stuff controls when IRQs fire. Don't think there are serious problems with when IRQs fire anymore, -though vertical scroll is still shaky in Kirby. -2. Don't think the timing stuff is related to the palette and background table issues in SMB2/3. -How can the palette be wrong? Or is it not, but the attribute bits are reading wrong? */ diff --git a/src/ppu/cpu_registers.rs b/src/ppu/cpu_registers.rs index eee053e..44d9867 100644 --- a/src/ppu/cpu_registers.rs +++ b/src/ppu/cpu_registers.rs @@ -110,7 +110,9 @@ impl super::Ppu { set_bit(&mut self.t, 0xC, d, 0x4); set_bit(&mut self.t, 0xD, d, 0x5); // t: X...... ........ = 0 - set_bit(&mut self.t, 0xF, 0, 0); + set_bit(&mut self.t, 0xE, 0, 0); + // setting the 16th instead of the 15th bit in the line above was the longest, most frustrating oversight. + // caused weird problems with vertical scrolling and backgrounds that I initially thought were bugs with MMC3. self.w = 1; }, 1 => { // second write @@ -169,7 +171,6 @@ impl super::Ppu { }, _ => panic!("reading from invalid PPU address: 0x{:04x}", self.v), }; - if self.rendering() && (self.scanline < 240 || self.scanline == 261) { // During rendering (on the pre-render line and the visible lines 0-239, provided either background or sprite rendering is enabled), // it will update v in an odd way, triggering a coarse X increment and a Y increment simultaneously (with normal wrapping behavior). diff --git a/src/ppu/memory.rs b/src/ppu/memory.rs index c7f2988..343647f 100644 --- a/src/ppu/memory.rs +++ b/src/ppu/memory.rs @@ -2,9 +2,8 @@ use crate::cartridge::Mirror; impl super::Ppu { - pub fn read(&mut self, addr: usize) -> u8 { - let address = addr % 0x4000; - match addr { + pub fn read(&mut self, address: usize) -> u8 { + match address { 0x0000..=0x1FFF => self.mapper.borrow_mut().read(address), 0x2000..=0x3EFF => self.read_nametable(address), 0x3F00..=0x3FFF => { @@ -16,9 +15,9 @@ impl super::Ppu { } } - pub fn write(&mut self, addr: usize, value: u8) { - let address = addr % 0x4000; - match addr { + pub fn write(&mut self, address: usize, value: u8) { + // let address = addr % 0x4000; + match address { 0x0000..=0x1FFF => self.mapper.borrow_mut().write(address, value), 0x2000..=0x3EFF => self.write_nametable(address, value), 0x3F00..=0x3FFF => { diff --git a/src/ppu/mod.rs b/src/ppu/mod.rs index 1359d5b..728c640 100644 --- a/src/ppu/mod.rs +++ b/src/ppu/mod.rs @@ -249,13 +249,10 @@ impl Ppu { let current_a12 = if self.v & 1 << 12 != 0 { 1 } else { 0 }; if rendering && (0..241).contains(&self.scanline) - // && (current_a12 == 1 && self.previous_a12 == 0) && current_a12 != self.previous_a12 { - // println!("clocking"); self.mapper.borrow_mut().clock() } - // println!("current: {}, previous: {}", current_a12, self.previous_a12); self.previous_a12 = current_a12; (pixel, end_of_frame)