--- nono/vm/device.h 2026/04/29 17:05:38 1.1.1.17 +++ nono/vm/device.h 2026/04/29 17:06:01 1.1.1.19 @@ -12,6 +12,7 @@ #include "object.h" #include "bus.h" +#include "nono.h" #if BYTE_ORDER == LITTLE_ENDIAN #define HB(addr) ((addr) ^ 1) @@ -31,9 +32,13 @@ } while (0) // 前方参照 +class Device; +class Event; class MainMPUDevice; class Scheduler; +using EventCallback_t = void (Device::*)(Event *); + class Device : public Object { using inherited = Object; @@ -97,12 +102,7 @@ class Device : public Object // // 8. StartThread() ... スレッド起動 // - // 9. Apply() ... 動的設定の適用 - // 実行中に変更可能なパラメータもここで一度適用する。 - // ここで適用するのは実行中に変更可能なパラメータのみ。 - // 適用内容を表示したい時は putlog(1) が妥当か。 - // - // 10. ResetHard(true) ... 電源オン + // 9. ResetHard(true) ... 電源オン // ログの初期化。 void EarlyInit(); @@ -123,12 +123,6 @@ class Device : public Object // 系でエラーメッセージを表示して false を返すこと。 virtual bool Init(); - // 現在の設定を VM に反映させる。 - // 成功すれば true を返す。失敗なら warn() 系、あるいは gConfig->Err() - // 系でエラーメッセージを表示して false を返すこと。 - // といっても false が返されたらどうするんだろうか。 - virtual bool Apply(); - // 電源オンもしくはリセット。 // true なら電源オン、false ならリセット。 // このデバイスがどのタイミングでリセットされるかは VM による。 @@ -198,40 +192,3 @@ class IODevice : public Device // 書き込み可能なら true、書き込み不可能なら false を返す。 virtual bool Poke1(uint32 addr, uint32 data); }; - -class BusErrDevice : public IODevice -{ - using inherited = IODevice; - public: - BusErrDevice(); - ~BusErrDevice() override; - - public: - busdata Read(busaddr addr) override; - busdata Write(busaddr addr, uint32 data) override; - busdata Peek1(uint32 addr) override; -}; - -// 何もしないデバイス。 -// 読み込むと全域で 0xff が読めて、書き込んでも何も起きない。 -class NopIODevice : public IODevice -{ - using inherited = IODevice; - public: - NopIODevice(); - ~NopIODevice() override; - - public: - busdata Read(busaddr addr) override; - busdata Write(busaddr addr, uint32 data) override; - busdata Read1(uint32 addr) override; - busdata Write1(uint32 addr, uint32 data) override; - busdata Peek1(uint32 addr) override; -}; - -static inline BusErrDevice *GetBusErrDevice() { - return Object::GetObject(OBJ_BUSERR); -} -static inline NopIODevice *GetNopIODevice() { - return Object::GetObject(OBJ_NOPIO); -}