From a175ba8d8cfc186e63c85e525cf2f3e0e601c3ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Sun, 30 Apr 2023 20:17:05 +0100 Subject: [PATCH] feat: new test rom and initial speed support The double speed mode is still not available. --- res/roms/test/cgb_acid2.gbc | Bin 0 -> 32768 bytes src/gb.rs | 7 +++++++ src/mmu.rs | 7 +++++-- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 res/roms/test/cgb_acid2.gbc diff --git a/res/roms/test/cgb_acid2.gbc b/res/roms/test/cgb_acid2.gbc new file mode 100644 index 0000000000000000000000000000000000000000..5f71bd36060b46eefcf7785f81ce16a5a6c5fc67 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/src/gb.rs b/src/gb.rs index 867e6b0f..a4a936f7 100644 --- a/src/gb.rs +++ b/src/gb.rs @@ -82,6 +82,13 @@ impl Display for GameBoyMode { } } +#[cfg_attr(feature = "wasm", wasm_bindgen)] +#[derive(Clone, Copy, PartialEq, Eq)] +pub enum GameBoySpeed { + Normal = 0, + Double = 1, +} + #[cfg_attr(feature = "wasm", wasm_bindgen)] #[derive(Clone, Copy, PartialEq, Eq)] pub struct GameBoyConfig { diff --git a/src/mmu.rs b/src/mmu.rs index 7418189c..9914e86a 100644 --- a/src/mmu.rs +++ b/src/mmu.rs @@ -1,7 +1,7 @@ use crate::{ apu::Apu, debugln, - gb::{GameBoyConfig, GameBoyMode}, + gb::{GameBoyConfig, GameBoyMode, GameBoySpeed}, pad::Pad, ppu::Ppu, rom::Cartridge, @@ -29,6 +29,8 @@ pub struct Mmu { /// (CGB only). pub key0: u8, + pub speed: GameBoySpeed, + /// Reference to the PPU (Pixel Processing Unit) that is going /// to be used both for VRAM reading/writing and to forward /// some of the access operations. @@ -110,6 +112,7 @@ impl Mmu { ram_offset: 0x1000, ie: 0x0, key0: 0x0, + speed: GameBoySpeed::Normal, mode, gbc, } @@ -253,7 +256,7 @@ impl Mmu { 0x4c => self.key0, // 0xFF4D - KEY1 (CGB only) - 0x4d => todo!("CGB speed switch"), + 0x4d => (false as u8) | ((self.speed as u8) << 7), // 0xFF50 - Boot active flag 0x50 => u8::from(self.boot_active), -- GitLab