From f13271750236230d9a1eb1877cd99845673e102d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 14 Dec 2022 19:09:50 -0500 Subject: [PATCH] YM2612: prepare to implement CSM on ymfm --- src/engine/platform/genesis.cpp | 18 ++++++++++++++++++ src/engine/platform/genesis.h | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index adfdf258..1f79cd0d 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -19,6 +19,7 @@ #include "genesis.h" #include "../engine.h" +#include "../../ta-log.h" #include #include @@ -27,6 +28,22 @@ #define IS_REALLY_MUTED(x) (isMuted[x] && (x<5 || !softPCM || (isMuted[5] && isMuted[6]))) +void DivYM2612Interface::ymfm_set_timer(uint32_t tnum, int32_t duration_in_clocks) { + if (tnum==1) { + countB=duration_in_clocks; + } else if (tnum==0) { + countA=duration_in_clocks; + } + logV("ymfm_set_timer(%d,%d)",tnum,duration_in_clocks); +} + +void DivYM2612Interface::clock() { + if (countA>=0) { + countA-=144; + if (countA<0) m_engine->engine_timer_expired(0); + } +} + void DivPlatformGenesis::processDAC(int iRate) { if (softPCM) { softPCMTimer+=chipClock/576; @@ -192,6 +209,7 @@ void DivPlatformGenesis::acquire_ymfm(short* bufL, short* bufR, size_t start, si lastBusy=1; } + iface.clock(); if (ladder) { fm_ymfm->generate(&out_ymfm); } else { diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index ac2e5432..bd5d9aff 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -26,7 +26,15 @@ class DivYM2612Interface: public ymfm::ymfm_interface { + int countA, countB; + public: + void clock(); + void ymfm_set_timer(uint32_t tnum, int32_t duration_in_clocks); + DivYM2612Interface(): + ymfm::ymfm_interface(), + countA(-1), + countB(-1) {} }; class DivPlatformGenesis: public DivPlatformOPN {