MZ-2500 IOCSのデバイスドライバを使ったセクタリード/ライト

 MZ-2500のIOCSは、内蔵のデバイスドライバによってブロックデバイス(FD,EMM,ROM,HD)を256バイト/セクタのLBAで抽象化しており、透過的に扱うことができる。が、IOCSのSVCコールにはセクタリード/ライトのための直接的なサービスは存在しない。デバイスドライバのサービスルーチンアドレスを取得して、SVC DVCAL (7Ch)で呼び出す必要がある。

セクタリード/ライト

リードルーチンのポインタ: 085Bh
ライトルーチンのポインタ: 085Dh
レジスタ引数
IXリード/ライトルーチンのアドレス
HLリード/ライトアドレス
DEリード/ライトサイズ
BCレコード番号 (256bytes/sectorのLBA)
0578h〜057Fhリード/ライト実行時のメモリマッピングの状態

IOCSの呼び出し時は、メモリマッピングレジスタ0にMB00を割り当てておく必要がある。
リード/ライトは 0578h〜に指定されたメモリマッピングに切り替えてから行われる。呼び出し時のメモリマッピングとは無関係に、56Kバイトまでのリード/ライトを指定のメモリブロックに対して行える。ただし、(0578h).b = 00h にしておかないと暴走する。

カレントドライブがリード/ライトの対象となる。起動直後は起動ドライブがカレントドライブになっている。変更するときは SVC IOSUB, SVC CHDIR を使う。

デバイス/ドライブの変更

SVC IOSUB (7Bh)
レジスタ引数備考
A1
Bデバイス文字列の長さ"1:"なら2, "FD2:"なら4
DEデバイス文字列アドレス"1:" "FD2:" "ROM:" など
2000h〜7FFFhの範囲には置けない

SVC IOSUB を呼んだ直後に SVC CHDIR (3Ah, 引数なし) を呼ぶこと


戻る