--- nono/vm/scsidev.h 2026/04/29 17:04:29 1.1.1.1 +++ nono/vm/scsidev.h 2026/04/29 17:04:32 1.1.1.2 @@ -125,7 +125,14 @@ class SCSIHostDevice : public SCSIDevice // バスフリーになった (全員に通知される) virtual void BusFreeCB(int id); + // ターゲットデバイス取得 (ROM エミュレーション用) + SCSITarget *GetTarget(int id) const { return target[id].get(); } + protected: + // 設定ファイルに使われるこのホストデバイスを示す接頭語を設定する + // (ここで設定項目を Add するので、継承クラスのコンストラクタから呼ぶこと) + void SetConfigName(const char *name); + // 設定ファイルに使われるこのホストデバイスを示す接頭語。 // ("spc0" とか) const char *config_name = NULL; @@ -179,6 +186,10 @@ class SCSITarget : public SCSIDevice // 現在のコマンド列を返す (モニタ用) std::vector GetCmdSeq() const { return cmdseq; } + // 論理ブロック長 + uint32 GetBlocksize() const { return blocksize; } + void SetBlocksize(uint32 val) { blocksize = val; } + // SCSIBus コールバック // セレクションで選択された (ターゲットのみ通知される) @@ -241,6 +252,12 @@ class SCSIHD : public SCSITarget virtual bool Init(); virtual void DispatchCmd(); + // このディスクをディスクイメージだと思うとして (いや実際そうだけど) + // 先頭から start バイト目から len バイト読み出して返す。 + // 単位はセクタではなくバイトなことに注意。 + // (エミュレータ特権アクセス) + bool PeekImage(void *buf, uint32 start, uint32 len) const; + private: int fd = 0; uint8 *mem = NULL;