--- nono/lib/object.h 2026/04/29 17:05:26 1.1.1.12 +++ nono/lib/object.h 2026/04/29 17:05:56 1.1.1.17 @@ -16,18 +16,22 @@ #include class Logger; +class Monitor; +class TextScreen; // オブジェクト ID -static constexpr uint OBJ_BANKRAM(uint n) { return OBJ_BANKRAM0 + n; } -static constexpr uint OBJ_ETHERNET(uint n) { return OBJ_ETHERNET0 + n; } -static constexpr uint OBJ_FDD(uint n) { return OBJ_FDD0 + n; } -static constexpr uint OBJ_GFPIC(uint n) { return OBJ_GFPIC0 + n; } -static constexpr uint OBJ_HOSTNET(uint n) { return OBJ_HOSTNET0 + n; } -static constexpr uint OBJ_M88200(uint n) { return OBJ_M88200_0 + n; } -static constexpr uint OBJ_MPU_MEMDUMP(uint n) { return OBJ_MPU_MEMDUMP0 + n; } -static constexpr uint OBJ_NEREID_BOARD(uint n) { return OBJ_NEREID_BOARD0 + n; } -static constexpr uint OBJ_VIRTIO_BLOCK(uint n) { return OBJ_VIRTIO_BLOCK0 + n; } -static constexpr uint OBJ_XP_MEMDUMP(uint n) { return OBJ_XP_MEMDUMP0 + n; } +constexpr uint OBJ_BANKRAM(uint n) { return OBJ_BANKRAM0 + n; } +constexpr uint OBJ_DMAC_CH(uint n) { return OBJ_DMAC_CH0 + n; } +constexpr uint OBJ_ETHERNET(uint n) { return OBJ_ETHERNET0 + n; } +constexpr uint OBJ_FDD(uint n) { return OBJ_FDD0 + n; } +constexpr uint OBJ_GFPIC(uint n) { return OBJ_GFPIC0 + n; } +constexpr uint OBJ_HOSTCOM(uint n) { return OBJ_HOSTCOM0 + n; } +constexpr uint OBJ_HOSTNET(uint n) { return OBJ_HOSTNET0 + n; } +constexpr uint OBJ_M88200(uint n) { return OBJ_M88200_0 + n; } +constexpr uint OBJ_MPU_MEMDUMP(uint n) { return OBJ_MPU_MEMDUMP0 + n; } +constexpr uint OBJ_NEREID_BOARD(uint n) { return OBJ_NEREID_BOARD0 + n; } +constexpr uint OBJ_VIRTIO_BLOCK(uint n) { return OBJ_VIRTIO_BLOCK0 + n; } +constexpr uint OBJ_XP_MEMDUMP(uint n) { return OBJ_XP_MEMDUMP0 + n; } // ログ表示に指定するラムダ式の便利マクロ。 // fmt 内では __func__ が使えないので代わりに lam_func を使うこと。 @@ -36,6 +40,12 @@ static constexpr uint OBJ_XP_MEMDUMP(uin #define lstr(fmt...) \ [&, lam_func = __func__] { (void)lam_func; return string_format(fmt); } +// モニタコールバックを宣言するマクロ。 +// 強制力はないけどヘッダで宣言するところで使うこと。 +// コールバック関数の型が変わった時にコンパイルエラーで検出させるため。 +#define DECLARE_MONITOR_SCREEN(name) void name (Monitor *, TextScreen&) +#define DECLARE_MONITOR_BITMAP(name) void name (Monitor *, BitmapRGBX&) + // 基本オブジェクト class Object { @@ -64,7 +74,7 @@ class Object const std::vector& GetAliases() const { return log_aliases; } // 指定の id を持つオブジェクトを返す。 - // 実体は gMainApp.GetObjects() を呼んでいる。 + // 実体は gMainApp.GetObject() を呼んでいる。 // 隣のデバイスを参照したい人が全員 mainapp.h を include しなくて済む // ようにするための便宜上のもの。 static Object *GetObject(uint target_id); @@ -82,7 +92,7 @@ class Object // 通常、オブジェクト名はコンストラクタで指定するが、コンストラクタ時点 // ではまだ名前が決まらないような場合にだけ使う。 // こちらはエイリアスには関与しない。 - void SetName(const std::string& newname) { + virtual void SetName(const std::string& newname) { objname = newname; }