> そこまで甘くはないらしい。
PCPLUS.SYSが割り込みを2回期待しているところで、1回しか
発生していない。1回目はSCSIコントローラがコマンド実行を
終了したことによる割り込み。
np2のソースに
ret = scsicmd_select(id);
if (ret & 0x80) {
scsiintr(0x11);
// で retはどーやって割り込みさせるの?
というコメントがあって、割り込みが必要なのにまだ実装できて
いないということを理解。
2回目はHDDからコマンド要求を受信することを契機に発生する割り
込み、らしい。SCSIはHDD側が処理を駆動する仕組みになっている?
np2としては、通常はBIOSレベルでエミュレートしていて、
ハード(SCSIコントローラ)のエミュレーションの処理もあるけれど、
普段は使われていないようだ。
ということで、いろいろ足りなさそうに見える。
CQ出版の書籍と、WD33C93のデータシートと、undocumented 9801とを
眺めてはみたものの、CPU-SCSIコントローラ 間のやりとり、
SCSIコントローラ-HDD間のやりとりのどちらもピンとこない。
返すべきステータスコードと割り込みの発生回数がわからない。
フェーズの遷移先もどう決まるのかわからない。
とりあえずPCPLUS.SYS+SCHD.SYSが動けばいいので、それらの
コードもみながら考えてみることに。
reset
select without atn
transfer (command: test unit ready)
transfer (status)
transfer (message)
negate
select without atn
transfer (command: inquiry)
transfer (data)
transfer (status)
transfer (message)
negate
select without atn ← ここまで動いた
transfer (command: read capacity)