投稿

ラベル(LSI C)が付いた投稿を表示しています

LSI C-86 で PC-9801のDISK BIOSを使ってみる練習 セクタの並びを調べる

イメージ
READ DIAGNOSTICコマンドとREAD IDコマンドを使って、セクタの並びを表示する。 エミュレータで実行する場合、D88などのセクタの並びが保存されるディスクイメージでなければ正常に動作しません。 実行してみた所。1.2MB 2HD MS-DOSフォーマット 640KB 2DD X1のHu-BASICフォーマット。手近にセクタが順番に並んでいないフロッピーディスクが無くて、実行しても面白味がない。 PC-9801DISK BASICのフロッピーが インターリーブ していました。 しかも、シリンダ0のヘッド0のみ FM 方式です。 シリンダ0ヘッド0 以外は普通に MFM でした。 つまらないサンプルプログラムですが、なにかの役に立つかもしれません。 一式ダウンロード readsseq.c /* PC-9801フロッピーディスクBIOSを使ってみるサンプル フロッピーディスクのセクタシーケンスを調べる。 FDCの動作を正確に再現するPC-9801エミュレータは少ないので、エミュレータで動作確認をする場合は注意を要する。 LSI C-86 Ver.3.30 試食版用 lcc -o readsseq.exe readsseq.c diskbios.c のようにしてコンパイルすればよい このソースコードは CC0 パブリック・ドメイン提供です。 https://creativecommons.org/publicdomain/zero/1.0/deed.ja 2016年1月29日 2016年5月17日 佐藤恭一 kyoutan.jpn.org */ #include <stdio.h> #include "diskbios.h" #define SECTMAX   32 /*最大セクタ数 1セクタ256バイトの時26なので余裕を見て32くらい*/ #define BUFFSIZE  (8*1024) unsigned char BUFF[BUFFSIZE]; int main() {     unsigned short count,startpos;     unsigned ...

LSI C-86 で PC-9801のDISK BIOSを使ってみる練習 READ DIAGNOSTIC

READ DIAGNOSTICコマンドを発行して、読んだデータとINDEX信号直後のセクタIDを表示する /* PC-9801フロッピーディスクBIOSを使ってみるサンプル READ DIAGNOSTICコマンドでINDEX信号直後のセクタ番号を調べる。 FDCの動作を正確に再現するPC-9801エミュレータは少ないので、エミュレータで動作確認をする場合は注意を要する。 実機では期待通りの動きになった。 LSI C-86 Ver.3.30 試食版用 このソースコードは CC0 パブリック・ドメイン提供です。 https://creativecommons.org/publicdomain/zero/1.0/deed.ja 2016年1月28日 佐藤恭一 kyoutan.jpn.org */ /* メモ LSIC86試食版の dos.h で定義されている8086のレジスタを格納する構造体 Microsoft C とはセグメントレジスタの所が少し違う TURBO C では擬似変数を使う union REGS  {     struct XREGS    {         unsigned short  ax, bx, cx, dx, si, di, bp, ds, es, flags, cflag;     }   x;     struct HREGS    {         unsigned char   al, ah, bl, bh, cl, ch, dl, dh;     }   h; }; struct SREGS    {     unsigned short  es, cs, ss, ds; }; DISK BIOSコマンド識別コード ****---- ||||++++- コマンド |||+----- SEEK 1:シークを行う 0:現在のトラック ||+------ ~r   1...

LSI C-86 で PC-9801のDISK BIOSを使ってみる練習 READ ID

READ IDコマンドを繰り返し発行して、セクタのID情報を表示します。 /* PC-9801フロッピーディスクBIOSを使ってみるサンプル ドライブ0のIDを読み出す LSI C-86 Ver.3.30 試食版用 このソースコードは CC0 パブリック・ドメイン提供です。 https://creativecommons.org/publicdomain/zero/1.0/deed.ja 2016年1月26日 佐藤恭一 kyoutan.jpn.org READ ID コマンドを繰り返し実行して、IDを表示する。セクタの並び方がわかる。 IDが見つかり次第表示するので、第1セクタからの表示とはならないのが正常だけれど、 PC-9801エミュレータでは必ず第1セクタからの表示になり、 実機では発生しないはずの Missing Address Mark (ID) が発生する場合あり。(エミュレータによる) エミュレータで動作テストを行う場合、FDイメージにD88形式のようなセクタの並びを再現できるフォーマットを使うこと。 PC-9801やX68000等のFDC(uPD765A)ではX1のMB8877のようにINDEX信号の状態をソフトウェアから見ることができないみたい。 READ DIAGNOSTICコマンドで先頭のセクタ番号はわかる。(たぶん) */ /* メモ LSIC86試食版の dos.h で定義されている8086のレジスタを格納する構造体 Microsoft C とはセグメントレジスタの所が少し違う TURBO C では擬似変数を使う union REGS  {     struct XREGS    {         unsigned short  ax, bx, cx, dx, si, di, bp, ds, es, flags, cflag;     }   x;     struct HREGS    {         unsigned char   al, ah, bl,...