--- nono/vm/scsidev.h 2026/04/29 17:04:47 1.1.1.7 +++ nono/vm/scsidev.h 2026/04/29 17:04:56 1.1.1.9 @@ -31,8 +31,9 @@ class SCSICmd; // class SCSIDevice : public IODevice { + using inherited = IODevice; public: - SCSIDevice(); + SCSIDevice(const std::string& objname_); virtual ~SCSIDevice() override; // バスに接続 (SCSIBus::Attach から呼ばれる) @@ -123,8 +124,9 @@ class SCSIDevice : public IODevice // class SCSIHostDevice : public SCSIDevice { + using inherited = SCSIDevice; public: - SCSIHostDevice(); + SCSIHostDevice(const std::string& objname_); virtual ~SCSIHostDevice() override; bool Create() override; @@ -139,6 +141,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 +178,7 @@ class SCSIHostDevice : public SCSIDevice // ID0 ||<----> bus |<----------+ // || +----------+ own // - std::unique_ptr scsibus {}; + std::shared_ptr scsibus {}; std::unique_ptr target[8] {}; }; @@ -185,9 +190,12 @@ class SCSITarget : public SCSIDevice using inherited = SCSIDevice; friend class SCSICmdModeSelect6; public: - SCSITarget(SCSIHostDevice *h, int id, std::vector& inq); + SCSITarget(const std::string& objname_, + SCSIHostDevice *h, int id, std::vector& inq); virtual ~SCSITarget() override; + bool PowerOn() override; + // Inquiry 応答データ std::vector inquiry_data {}; @@ -283,6 +291,9 @@ class SCSIHD : public SCSITarget // ディスクイメージ長を取得 off_t GetSize() const { return file.GetMemSize(); } + // デバイスがライトプロテクトかどうかを返す + bool GetWriteProtect() const { return writeprotect; } + private: MappedFile file {}; uint8 *mem {};