--- nono/vm/scsibus.cpp 2026/04/29 17:04:50 1.1.1.6 +++ nono/vm/scsibus.cpp 2026/04/29 17:04:59 1.1.1.9 @@ -21,11 +21,8 @@ // コンストラクタ SCSIBus::SCSIBus() + : inherited("SCSIBus") { - logname = "scsibus"; - devname = "SCSIBus"; - - event.dev = this; event.SetName("SCSIBus"); // 複数出来たら名前どうするべか } @@ -34,6 +31,28 @@ SCSIBus::~SCSIBus() { } +// 電源オン +bool +SCSIBus::PowerOn() +{ + phase = SCSI::Phase::BusFree; + rst = false; + req = false; + ack = false; + atn = false; + sel = 0; + bsy = 0; + xfer = 0; + data = 0; + + last_req_time = 0; + req_wait = 0; + init_id = -1; + target_id = -1; + + return true; +} + // リセット void SCSIBus::ResetHard() @@ -173,7 +192,10 @@ SCSIBus::AssertSEL(uint id) // だろうか。賢くないターゲットデバイスは検出せずにそのまま (そして // デッドロック) になるだろうか。 - // XXX とりあえず +#if 1 + // XXX とりあえず LUNA で SCSI がなんか刺さった時に本体リセットでも + // 直らない状況を真似するため、ターゲットは何もしないでおく。 +#else // ターゲットデバイスは賢いので、全員イニシエータ様に忖度して // 即座にバスフリーへ移行するというのはどうか。 for (uint i = 0; i < 8; i++) { @@ -181,6 +203,7 @@ SCSIBus::AssertSEL(uint id) NegateBSY(i); } } +#endif } } @@ -344,6 +367,7 @@ SCSIBus::AssertREQ() after += req_wait; req_wait = 0; } + last_req_time = now + after; CallAfter(TransferReq, "SCSIBus AssertREQ", after); } else { // 転送フェーズでないのに上げることはないと思うけど