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)
レジスタ | 引数 | 備考 |
---|---|---|
A | 1 | |
B | デバイス文字列の長さ | "1:"なら2, "FD2:"なら4 |
DE | デバイス文字列アドレス | "1:" "FD2:" "ROM:" など 2000h〜7FFFhの範囲には置けない |
SVC IOSUB を呼んだ直後に SVC CHDIR (3Ah, 引数なし) を呼ぶこと