JavaScriptを有効にすると、ここにメニューを表示します。
富士通FM-7シリーズ実機再稼働支援ユーティリティ

ysflight.com

この一連のプログラムは、FM-7/FM-77シリーズの実機をふたたび稼働させることを目標に書いています。

例えば、FM-7用コードをWindows上で開発して、エミュレータXM7上でテストして、データレコーダインターフェース経由で実機に流し込むような使用を想定しています。が、エミュレータXM7は無くても、直接実機にプログラムを送るためにも活用できます。

また、実機でまたあの思い出のプログラムを走らせてみたいが、もうディスクはイメージしか残ってなくて元のディスクなんてもう読めないよ、というような場合、D77ディスクイメージの情報をカセットインターフェース経由で実機に送り込むことができます。FM77AV40で動作確認しました。なお、F-BASICフォーマットじゃなくても行けます。1024byte x 5sectorフォーマットでも書き戻し成功しました。

なので、この目標のためにはD77イメージ、T77イメージに書き込みさえできればよかったのですが、せっかくなので、D77イメージからファイルを抽出する機能も書きました。さらに、XM7で使用可能なF-BASIC形式のT77ファイルからファイルを抜き出す機能なんていうのは本当に必要無かったのですが、結局書きました。自分用メモの意味もあるし。

機能としては、Apolloさん作のFTOOLSとかなりかぶるのですが、自分でD77/T77の中身を知りたかったのと、プログラムを直接WAVファイルに出したい、あと、コマンド一発でD77イメージをテープインターフェースで読める.WAVにしたいなど様々な理由でこの一連のプログラムを書くことにしました。

なお、FM-7のディスクの構造なんてほとんど忘れてしまった状態で、XM7を使ってリバースエンジニアリングしながら書いたので、間違ってる可能性もあるので、使うときは大事なディスクイメージファイルは必ずバックアップを取った上でご利用ください。

それから、パッケージには.EXEしか入ってませんが、ソースをCMakeでビルドできるので、多分MacとかLinuxでもコンパイルすれば使えるでしょう。

また、このプログラムの開発にあたって、FTOOLSをかなり参考にさせていただきました。それから、FM-7用のコードは実機に持っていく前にXM7上でテストできたのでかなり効率よく開発することができました。作者の方々、それと開発に携わった方々に感謝しています。

なお、この一連のツールのうち、READMEにドキュメント書けたやつは、

この4本。テープイメージ作成ユーティリティではXM7用.T77ファイルの他、データレコーダケーブルから読み込み可能な.WAVファイルを直接生成することも可能。

大技(?)のDISK2TAPEを使うと、.D77ディスクイメージから、.WAVファイルを作成、それを実機で順に「RUN "CAS0:"」していくと、実機ディスクドライブでD77イメージの書き戻しができてしまう。でも、コピープロテクトがかかってたら解除はしないので、F5, F6, F7セクタがあったり極端なオーバーバイトがあったりすると失敗する。

詳しくは、README.TXTを参照してください。

[DOWNLOAD (ソース込み)]

 

更新履歴

2018/01/31

2018/01/12

2018/01/10

2018/01/31

 

DISK2TAPEについて

ちなみに、FM-77AVを現役で使ってたころも、自力でディスクフォーマットプログラムなんか書いたことが無くて、DISK2TAPEを作るとき、それが心配だった。どうやって書いたかというと、F-BASIC 3.0のシステムディスクの"SYSDSK"が呼び出している"DFMCD"を解析した。どうやらDFMCD内では、まずフォーマットイメージを作って、あとはそれをひたすらTrack WriteコマンドでFDCに送り込むだけのようだった。プログラムによっては、標準の256バイトセクタではなく512バイトとか1024バイトセクタのものもある。そんなフォーマットを自力のプログラムで作れるか、まったく未知の領域だった。

しかし、XM7上でのテストは完璧で、失敗しなさそう。あとは海を越えてこちらに向かっているFM77AV40、FM77AVのディスクドライブが無事かどうかだった。

そして正月明け、FM77AV40が届く。なぜか、手元に「MAGUS」と「棋太平」と「九玉伝」と「プロ野球ファン」のディスクがイメージじゃなくFDそのままで残っていたので、AV40でまずMAGUSを起動してみる。これでディスクが動かなかったら速いFM-7としてしか使えない。まあ、それでも価値はあるっちゃあるけど。

電源を投入して、ディスクがガーガー動く。「こいつ、動くぞ!」そして、懐かしいMAGUSの画面が!ディスクドライブ0は生きている!このままDISK2TAPEでF-BASICシステムディスクを書き戻そう、と、思ったのだがここでトラブル発生。

最初の.WAVファイルにセーブされたフォーマットプログラムがトラック0で固まってしまう。DRQもIRQも来ないようだ。エミュレータ上では完璧だったのになぜ!?気を取り直して、BIOSのRESTOREコマンドが成功しているかどうかを確認してみると、フォーマットを始める以前の問題で、RESTOREコマンドが失敗していた。

ふと思ったのは、ディスクドライブを入れていなかったから、BIOSがあきらめてディスクをオフにしてテープモードBASICを起動しているのではないか?ということ。そうであれば、生ディスクを入れた状態で起動すれば何か違わないか?そう思って、一枚未フォーマットの(DOSフォーマットだった鴨しれない) ディスクを入れて電源投入。そして、TAPE2DISKで作ったWAVファイルからフォーマットプログラムをロードして実行する。

なんと、あっさり成功。ほっと胸をなでおろす。とりあえず、使えることはわかった。その後、DISK BASICで起動した状態で実行すると、フォーマットプログラム以下完璧に動くことがわかった。

しかし、ちょっと問題があって、これを使う人がDisk BASICで起動可能なディスクイメージを持ってなかったとして、未フォーマットのディスクがあればいいけど、既にフォーマット済みのディスクしか無かったら、電源を入れたときトラック0セクタ1を読み込んでIPLにジャンプしてしまうから起動できない。

(あっ、こんなところにDISK BASIC起動可能なディスクイメージが。なおデモが自動起動するのでプログラム始まったらBreak長押しで停止。)

生ディスクを入れて起動したとき、実機は何をやってるのか?という話をしてみたところApolloさんから、FD1Eではないか、という返事が電光のごとく返ってきた。さすが、やっぱりすごい。

試しにドライブマッピングの確認。77AV40のディスクドライブに何も入れずに起動して、

POKE &HFD1E,0
PRINT HEX$(PEEK(&HFD1E))

とやってみる。すると、B2が返ってきた。下位4ビットがマッピングだから、論理ドライブ0は物理ドライブ2にマップされている。今度は生ディスクを入れて起動して、同じコマンドを実行すると、B0。論理ドライブ0が物理ドライブ0にマップされている。おそらく、AV40は、起動時にドライブ0、1 、2と順に起動可能なディスクが入っていないかスキャンしたのだろう。が、何も見つからないまま物理的につながってないドライブ2を調べてあきらめたのだろう。そして、そのままマッピングを戻さずに放置したのではないだろうか。

これだったのか。フォーマットプログラムの最初の部分に、

POKE &HFD1E,&H5F
POKE &HFD1E,&H5A
POKE &HFD1E,&H55
POKE &HFD1E,&H50
POKE &HFD1D,&H80

(最後の1行はモーターをオンにするだけ)と追加したところ、ディスクを入れずに起動してもあっさりフォーマットに成功するようになった。

FD1EはAV以前では使ってなかったはずで、それらの機種では書き込んでも無視されるだけのはず。なお、遅れて届いた77AVのドライブでも書き戻しに成功した。

ところで、AV40で書いたディスクはAVでは読めないという話だったんだけど、普通に読めた。トラックの幅の半分しか書いてないはずなんだけど、まあ、書き戻しの手間が減ってよかったけど。

そういうわけで、現バージョンでは、生ディスクを入れて起動する必要は無くて、普通に電源を投入してテープBASICが起動したら、???_01.wav から順に RUN "CAS0:" していけばいいだけになった。

Comments are welcome.  Send E-Mail to: 

Back to http://www.ysflight.com