--- nono/m680x0/m68030.h 2026/04/29 17:04:43 1.1.1.6 +++ nono/m680x0/m68030.h 2026/04/29 17:04:49 1.1.1.7 @@ -112,10 +112,7 @@ struct m68kreg { struct fpframe fpframe; - // CPU の実行状態 - // 0 .. 通常状態 - // CPU_REQ_STOP .. STOP 状態 - // CPU_REQ_HALT .. HALT 状態 + // CPU の実行状態 (SCHED_CPU_*) uint32 state; public: @@ -217,18 +214,22 @@ class m68kcpu final { // サイクル数を仮想時間 [nsec] に変換 uint64 Cycle2Vtime(int32 cycle) const { - return (int64)cycle * 1000 * 1000 / clock_khz; + return (int64)cycle * c2v; } // 仮想時間 [nsec] をサイクル数に変換 uint32 Vtime2Cycle(uint32 vtime) const { - return (uint32)((uint64)vtime * clock_khz / (1000 * 1000)); + return ((uint64)vtime * v2c_factor) >> v2c_shift; } uint32 used_cycle {}; // 現在のターンでこれまでに消費したサイクル数 uint32 goal_cycle {}; // 現在のターンで消費すべきサイクル数 int32 cycle_nocache {}; // ノーキャッシュケースの時の追加分 uint32 clock_khz {}; // MPU クロック [kHz] + uint32 c2v {}; // サイクル数を nsec に変換する際の係数 + uint64 v2c_factor {}; // nsec をサイクル数に変換する際の乗算係数 + uint32 v2c_shift {}; // nsec をサイクル数に変換する際のシフト係数 + uint64 inst_count {}; // 命令実行数 // ブランチ履歴 (例外履歴を含む) @@ -290,6 +291,7 @@ class m68kcpu final { // 外部公開ルーチン extern m68kcpu *m68030_init(uint32 reset_vector); extern uint32 m68030_run(m68kcpu *cpu, uint32 delta); +extern void m68030_set_clockspeed(m68kcpu *cpu, uint32 clock_khz); extern uint64 m68030_get_vtime(m68kcpu *cpu); extern void m68030_request_reset_exception(m68kcpu *cpu); extern void m68030_interrupt(m68kcpu *cpu, int level);