tunozemichanの日記 / tunozemichan's diary

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

SORD M68のFDDサイド番号の指定方法が判明

 

導入という与太話

 

倍密度記録のセクタを読めるようになったので、CP/Mなど大きなプログラムをロードできる可能性が出てきました。しかし、その為にはディスクの裏側(Side1)も読めなくてはなりません。

 

FDDのシステムは、前回も触れましたがFDD、FDC、VFOです。FDCはあくまでフロッピーディスクのデータを扱うことに集中しているため、その他の主にメカニカルなFDDの制御はCPU(厳密にはそこにつながったPIO)に任せています。

CPUは、ドライブセレクト、モーターON、単密度/倍密度切り替え、そして、記録面読み取り切り替えを行います。これに加えて、高密度記録(2HD)があるマシンではこの切り替えも行う場合があるようです。

 

SORD M68のFDDは両面ディスク用です。とは言え、FDCからすれば表面(Side0)だろうが、裏面(Side1)だろうがデータという観点では関係ありません。なので、FDCにはこれを識別する信号はありません(MB8877Aの場合、ユーザーが自発的に裏面を読んでいることを知らせる必要はあります。)一方、両面ドライブは表と裏は重要で、読み取りヘッドが二つあり、切り替えは「Side one select」信号(32ピン)で行います。

 

ローダーを読む

 

今回は、BOOT ROMを読んでも分かりません。なぜなら、SORD M68のBOOT ROMはトラック1、Side0の1~8セクタを読むだけだからです。裏面(Side1)を読む必要がないので切り替えるコードはありません。

そこで、FDOSのトラック1サイド0セクタ1~8、CP/M-68Kのトラック1サイド0セクタ1~8を読みました。両者でコードが違うため、片方で行き詰っても、他方を見ると解決することが多く、両方読むのは二度手間に見えますが、実際には最適、最短の方法です。

 

結論から言うと、I/Oアドレス0xcdの第5ビットがSide切り替えです。Highにすると裏面(Side1)が指定されます。

 

結果

 

I/Oアドレス0xcdを便宜上、FDCコントロールポートと呼ぶと、3つのことが分かりました。

・第6ビット:記録密度切り替え(単密度は1、倍密度は0)

・第5ビット:読込面(Side)切り替え(Side0は0、Side1は1)

・第3ビット:Not Readyへの遷移。In USE?

 

最後の情報はこれまで触れませんでしたが、0xcdに0x8を書くと、FDD(エミュレータ)のランプが消えて、FDCのステータスがNot Readyになり、何の操作も受け付けなくなる為、判明しました。

 

これでフロッピーディスクの全てのデータにアクセスできるようになりました。

 

が、テストコードがうまく動きません。現在原因を究明中です。