--- nono/vm/syncer.h 2026/04/29 17:05:50 1.1.1.7 +++ nono/vm/syncer.h 2026/04/29 17:05:55 1.1.1.8 @@ -15,6 +15,7 @@ #include "stopwatch.h" class MPU680x0Device; +class ThreadManager; class Syncer : public Device { @@ -26,12 +27,13 @@ class Syncer : public Device // ビットがすべて %0 なら高速モード、どれかでも %1 なら通常モードになる。 // // | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | - // mode | |POFF|KEY |SYNC|HALT|IDLE| - // | | | | +---- CPU & DMAC アイドル - // | | | +--------- CPU HALT - // | | +-------------- 高速モード抑制 - // | +------------------- キー入力中 - // +------------------------ 電源オフ + // mode | |SND |POFF|KEY |SYNC|HALT|IDLE| + // | | | | | +---- CPU & DMAC アイドル + // | | | | +--------- CPU HALT + // | | | +-------------- 高速モード抑制 + // | | +------------------- キー入力中 + // | +------------------------ 電源オフ + // +----------------------------- サウンド再生中 // // bit1,0 は CPU から来るが、このうち bit0 だけ DMAC からのアイドル // ビットとの積(AND) になっているので、mode 中の bit0 は CPU も DMAC も @@ -47,6 +49,7 @@ class Syncer : public Device static const uint32 SYNCMODE_SYNC = 0x0004; // 等速モード指示(UI) static const uint32 SYNCMODE_KEY = 0x0008; // キー入力中 static const uint32 SYNCMODE_POWEROFF = 0x0010; // 電源オフ + static const uint32 SYNCMODE_SOUND = 0x0020; // サウンド再生中 // 便宜上用意しておく static const uint32 SYNCMODE_CPU_NORMAL = 0x0000; // CPU が通常状態 @@ -73,10 +76,10 @@ class Syncer : public Device uint32 GetRunMode() const { return mode; } // CPU 状態変更を指示する。 - void RequestCPUMode(uint32 mode_); + void NotifyCPUMode(uint32 mode_); // DMAC のアクティブ状態を指示する。 - void RequestDMACActive(bool active); + void NotifyDMACActive(bool active); // 高速モード(UIによる指示)なら true を返す。 // ここでいう高速モードは STOP 状態中でも高速モード。 @@ -84,13 +87,16 @@ class Syncer : public Device // 高速モードを指示する。 // true なら高速モード、false なら同期モード。 - void RequestFullSpeed(bool enable); + void NotifyFullSpeed(bool enable); // キー入力状態の変更を指示する。 - void RequestKeyPressed(bool pressed); + void NotifyKeyPressed(bool pressed); // 電源オフの状態の変更を指示する。オフになったとき true。 - void RequestPowerOffMode(bool poweroff); + void NotifyPowerOffMode(bool poweroff); + + // サウンド出力状態の変更を指示するう。 + void NotifySoundRunning(bool running); // パフォーマンス測定用に実時間をログ出力 void PutlogRealtime(); @@ -154,6 +160,7 @@ class Syncer : public Device uint clock_khz {}; // MHz 表示用の定格クロック数 MPU680x0Device *mpu680x0 {}; + ThreadManager *thman {}; // 同期イベント Event *sync_event {};