tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

SORD M68のフロッピーディスクコントロールについて(その1)

今回は完全に備忘録です。まとめなどはありません。

基本的にフロッピーディスク(ドライブ)の制御は、フロッピーディスクコントローラー(FDC。SORD M68では、MB8877A)とパラレルI/Oチップ(SORD M68ではZ80PIO)との組み合わせで構成されています(VFOもありますが)。

これまでにSORD M68のFDCの各レジスタアドレスは判明しました。残りはZ80PIOとFDDがどのように接続されているかと言う問題のみですが、これがほとんどノーヒントです。

判明した事実を基に、BOOT ROMから起動してフロッピーディスク上に配置したUniversal Monitorを実行させて、MB8877Aに直接セクタリードをさせるコードを書いたところ、FM記録のトラック0は読み込むことができました。しかし、MFM記録のトラック1以降は読めません。具体的にはシークの時点でIDフィールドが読めないというエラーが出てリード自体が不可能になります。

SORD M68のBOOT ROMは、起動時にMFM記録されているトラック1から2kb分プログラムを読み取ります。FM記録のトラック0は読まないようになっています。つまり運用上、FM記録を読む設定にしておく理由がないのです。BOOT ROMからUniversal Monitorにジャンプした時点で、MFM記録用にセットアップされていると思っていたので、そうでないことに落胆しました。

ちなみに、MB8877Aでは倍密度を読み取る際には\DDENというピンをLOWにする必要があります。これまでの解析でI/Oアドレス0xcdがおそらくZ80PIOと接続されているポートだと推測していました。今回、Universal Monitorから、0xcdに対して値を設定して、オシロでこのピンの挙動を観察しました。

結果、0xcdに対して、0x8→0x44→0x4と入力すると、トラック1以降のセクタを読むことができました。つまり、第6ビットをHIGH→LOWとする必要があることが分かります。しかし、画像にあるようにデータの取りこぼしが起きています。4MHzのZ80でDMAを使わない方法では、360rpmで倍密度記録を読むのは不可能なようです。

 

f:id:tunozemichan:20220119192022p:plain

本来のトラック1セクタ0の内容

f:id:tunozemichan:20220119192122p:plain

自作のセクタリードコードによる結果。読めているが、データを取りこぼしている。