From 1dbec8faf93291d11e6b5e98a7b6fc2f67165bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Mon, 15 May 2023 18:36:21 +0100 Subject: [PATCH] chore: multiplier support in web version --- frontends/sdl/src/main.rs | 3 +-- frontends/web/ts/gb.ts | 6 +++++- src/gb.rs | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/frontends/sdl/src/main.rs b/frontends/sdl/src/main.rs index fb789d0a..c8227f12 100644 --- a/frontends/sdl/src/main.rs +++ b/frontends/sdl/src/main.rs @@ -351,8 +351,7 @@ impl Emulator { // for the current "tick" operation this is basically the current // logic frequency divided by the visual one, this operation also // takes into account the current Game Boy speed multiplier (GBC) - let cycle_limit = (self.logic_frequency as f32 - * self.system.speed().multiplier() as f32 + let cycle_limit = (self.logic_frequency as f32 * self.system.multiplier() as f32 / self.visual_frequency) .round() as u32; diff --git a/frontends/web/ts/gb.ts b/frontends/web/ts/gb.ts index c734938d..2e5af350 100644 --- a/frontends/web/ts/gb.ts +++ b/frontends/web/ts/gb.ts @@ -192,7 +192,11 @@ export class GameboyEmulator extends EmulatorBase implements Emulator { pending = this.tick( currentTime, pending, - Math.round(this.logicFrequency / this.visualFrequency) + Math.round( + (this.logicFrequency * + (this.gameBoy?.multiplier() ?? 1)) / + this.visualFrequency + ) ); } catch (err) { // sets the default error message to be displayed diff --git a/src/gb.rs b/src/gb.rs index f0990106..8f38e481 100644 --- a/src/gb.rs +++ b/src/gb.rs @@ -392,7 +392,7 @@ impl GameBoy { pub fn clock(&mut self) -> u8 { let cycles = self.cpu_clock(); - let cycles_n = cycles / self.mmu().speed.multiplier(); + let cycles_n = cycles / self.multiplier(); if self.ppu_enabled { self.ppu_clock(cycles_n); } @@ -640,6 +640,10 @@ impl GameBoy { self.mmu_i().speed } + pub fn multiplier(&self) -> u8 { + self.mmu_i().speed.multiplier() + } + pub fn mode(&self) -> GameBoyMode { self.mode } -- GitLab