--- nono/vm/scsidev.h 2026/04/29 17:04:42 1.1.1.5 +++ nono/vm/scsidev.h 2026/04/29 17:04:53 1.1.1.8 @@ -33,7 +33,7 @@ class SCSIDevice : public IODevice { public: SCSIDevice(); - ~SCSIDevice() override; + virtual ~SCSIDevice() override; // バスに接続 (SCSIBus::Attach から呼ばれる) void Attach(SCSIBus *bus_, int id) { @@ -125,7 +125,7 @@ class SCSIHostDevice : public SCSIDevice { public: SCSIHostDevice(); - ~SCSIHostDevice() override; + virtual ~SCSIHostDevice() override; bool Create() override; bool Init() override; @@ -139,6 +139,9 @@ class SCSIHostDevice : public SCSIDevice // ターゲットデバイス取得 (ROM エミュレーション用) SCSITarget *GetTarget(int id) const { return target[id].get(); } + // SCSIBus を取得 (UI からインジケータ表示用) + std::shared_ptr GetSCSIBus() const { return scsibus; } + protected: // 設定ファイルに使われるこのホストデバイスを示す接頭語を設定する // (ここで設定項目を Add するので、継承クラスのコンストラクタから呼ぶこと) @@ -173,7 +176,7 @@ class SCSIHostDevice : public SCSIDevice // ID0 ||<----> bus |<----------+ // || +----------+ own // - std::unique_ptr scsibus {}; + std::shared_ptr scsibus {}; std::unique_ptr target[8] {}; }; @@ -186,7 +189,9 @@ class SCSITarget : public SCSIDevice friend class SCSICmdModeSelect6; public: SCSITarget(SCSIHostDevice *h, int id, std::vector& inq); - ~SCSITarget() override; + virtual ~SCSITarget() override; + + bool PowerOn() override; // Inquiry 応答データ std::vector inquiry_data {}; @@ -266,9 +271,10 @@ class SCSIHD : public SCSITarget friend class SCSICmdWrite6; friend class SCSICmdReadCapacity; friend class SCSICmdRead10; + friend class SCSICmdWrite10; public: SCSIHD(SCSIHostDevice *h, int id); - ~SCSIHD() override; + virtual ~SCSIHD() override; bool Init() override; void DispatchCmd() override;