--- nono/vm/syncer.cpp 2026/04/29 17:05:50 1.1.1.7 +++ nono/vm/syncer.cpp 2026/04/29 17:05:54 1.1.1.8 @@ -45,6 +45,7 @@ bool Syncer::Init() { mpu680x0 = dynamic_cast(mpu); + thman = gMainApp.GetThreadManager(); mode = SYNCMODE_POWEROFF; overslept = 0; @@ -52,7 +53,7 @@ Syncer::Init() // 高速モード指定 bool fast_mode = gConfig->Find("fast-mode").AsInt(); - RequestFullSpeed(fast_mode); + NotifyFullSpeed(fast_mode); // クロックの同期方法 const ConfigItem& sync_item = gConfig->Find("clock-sync"); @@ -118,7 +119,7 @@ Syncer::StartTime() // CPU 状態変更(通常/STOP/HALT)を指示する。 // CPU が呼ぶはずなので自スレッドからのみ呼ばれるはず。 void -Syncer::RequestCPUMode(uint32 cpumode) +Syncer::NotifyCPUMode(uint32 cpumode) { uint32 newmode; @@ -132,7 +133,7 @@ Syncer::RequestCPUMode(uint32 cpumode) // DMAC のアクティブ状態を指示する。 void -Syncer::RequestDMACActive(bool active) +Syncer::NotifyDMACActive(bool active) { uint32 newmode; @@ -147,14 +148,14 @@ Syncer::RequestDMACActive(bool active) // true なら高速モード、false なら同期モード。 // 他スレッドから呼んでもよい。 void -Syncer::RequestFullSpeed(bool enable) +Syncer::NotifyFullSpeed(bool enable) { scheduler->SendMessage(MessageID::SCHEDULER_SYNCMODE, enable); } // キー入力状態の変更を指示する。 void -Syncer::RequestKeyPressed(bool pressed) +Syncer::NotifyKeyPressed(bool pressed) { uint32 newmode; @@ -169,7 +170,7 @@ Syncer::RequestKeyPressed(bool pressed) // 電源状態の変更を指示する。 void -Syncer::RequestPowerOffMode(bool poweroff) +Syncer::NotifyPowerOffMode(bool poweroff) { uint32 newmode; @@ -182,6 +183,21 @@ Syncer::RequestPowerOffMode(bool powerof ChangeMode(newmode); } +// サウンド出力状態の変更を指示する。 +void +Syncer::NotifySoundRunning(bool running) +{ + uint32 newmode; + + if (running) { + newmode = mode | SYNCMODE_SOUND; + } else { + newmode = mode & ~SYNCMODE_SOUND; + } + + ChangeMode(newmode); +} + // 動作状態変更のメッセージコールバック void Syncer::ChangeModeMessage(MessageID msgid, uint32 arg) @@ -343,6 +359,9 @@ Syncer::CalcPerf() mpu680x0->CalcStat(); } + // ついでにここで各スレッドの CPU 利用率も調べる。 + thman->CalcPerf(rtime); + last_perf_rtime = rtime; last_perf_vtime = vtime; next_perf_rtime = rtime + PERF_INTERVAL; @@ -401,7 +420,8 @@ Syncer::MonitorUpdateSub(TextScreen& scr } screen.Puts(24, y, TA::OnOff((tmp_mode & SYNCMODE_KEY)), "Key"); screen.Puts(29, y, TA::OnOff((tmp_mode & SYNCMODE_POWEROFF)), "POff"); - screen.Puts(33, y, ")"); + screen.Puts(34, y, TA::OnOff((tmp_mode & SYNCMODE_SOUND)), "Sound"); + screen.Puts(39, y, ")"); y++; // 日まで表示しようとするときは桁位置を動かす