From 961c9773789c2183eafd257bb3afbc3376304724 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:07:56 -0500 Subject: [PATCH] OPM/OPZ: custom clocks finally --- src/engine/platform/arcade.cpp | 8 +++++--- src/engine/platform/tx81z.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index f9a2e7cb..1984e5a1 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -19,6 +19,7 @@ #include "arcade.h" #include "../engine.h" +#include "../../ta-log.h" #include #include @@ -868,17 +869,18 @@ void DivPlatformArcade::setFlags(const DivConfig& flags) { switch (flags.getInt("clockSel",0)) { case 1: chipClock=COLOR_PAL*4.0/5.0; - baseFreqOff=12; break; case 2: chipClock=4000000.0; - baseFreqOff=-122; break; default: chipClock=COLOR_NTSC; - baseFreqOff=0; break; } + CHECK_CUSTOM_CLOCK; + + baseFreqOff=round(768.0*(log((COLOR_NTSC/(double)chipClock))/log(2.0))); + rate=chipClock/64; for (int i=0; i<8; i++) { oscBuf[i]->rate=rate; diff --git a/src/engine/platform/tx81z.cpp b/src/engine/platform/tx81z.cpp index 2b119abb..fa3d4d18 100644 --- a/src/engine/platform/tx81z.cpp +++ b/src/engine/platform/tx81z.cpp @@ -941,14 +941,15 @@ void DivPlatformTX81Z::setFlags(const DivConfig& flags) { int clockSel=flags.getInt("clockSel",0); if (clockSel==2) { chipClock=4000000.0; - baseFreqOff=-122; } else if (clockSel==1) { chipClock=COLOR_PAL*4.0/5.0; - baseFreqOff=12; } else { chipClock=COLOR_NTSC; - baseFreqOff=0; } + CHECK_CUSTOM_CLOCK; + + baseFreqOff=round(768.0*(log((COLOR_NTSC/(double)chipClock))/log(2.0))); + rate=chipClock/64; for (int i=0; i<8; i++) { oscBuf[i]->rate=rate;