|
この一連のプログラムは、FM-7/FM-77シリーズの実機をふたたび稼働させることを目標に書いています。
なお、D77ToRS232Cユーティリティによって、ついにオーディオカセットケーブルが無くてもRS232CポートさえあればクロスケーブルでWindows PCとつなげてディスクイメージを実機FM-7/77上で書き戻すことができるようになりました!
T77ToRS232C (BIOSリダイレクタ) によって、RS232C経由でT77イメージのテープソフトを実機FM-7/77上で実行できるようになりました!
RS232CDiskUtil (Disk BIOS リダイレクタ)によって、RS232C経由でD77ディスクイメージからの起動ができるようになりました!
例えば、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にドキュメント書けたやつは、
テープイメージ作成ユーティリティではXM7用.T77ファイルの他、データレコーダケーブルから読み込み可能な.WAVファイルを直接生成することも可能。
大技(?)のDISK2TAPEを使うと、.D77ディスクイメージから、.WAVファイルを作成、それを実機で順に「RUN "CAS0:"」していくと、実機ディスクドライブでD77イメージの書き戻しができてしまう。でも、コピープロテクトがかかってたら解除はしないので、F5, F6, F7セクタがあったり極端なオーバーバイトがあったりすると失敗する。
また、RS232C->COMポートイメージ読み出し&送信ツールを使うと実機でできるだけディスクイメージを読み出してPCのCOMターミナルにデータを送信、最後はD77イメージに変換が可能。なお、D77ディスクイメージでは再現しきれない情報も含むので受信したデータは大事に保管すると良いと思う。
詳しくは、README.TXTを参照してください。
ソースファイルは→ https://github.com/captainys/FM/tree/master/7/util
(* ソースコードのURLが変わりました)
更新履歴
2019/05/19
2019/04/11
2019/01/29
2019/01/15
2018/11/21
2018/08/02
2018/06/17
2018/01/31
2018/01/12
2018/01/10
2018/01/31
ちなみに、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:" していけばいいだけになった。
XM7用のディスクイメージ .D77 形式ファイルはベタファイルに比べて表現力がかなり高いとは言ったもののディスクの中身を完全に再現するほどの表現力はありません。そのため、コピープロテクトの種類によっては表現しきれないものがあります。そもそもコピープロテクト自体も当時の技術の貴重な記録なのでできればその情報を残しておきたいところなのですが、.D77にしてしまったらその情報は失われます。ディスクの完全に近いコピーを保存するにはKryoFluxのようなデバイスを使う方法もありますが、僕はKryoFlux持ってないという問題がありました。そういうわけで実機でKryoFluxに近いことをしようと思ったらありとあらゆるReadコマンドで抜き出せる限りの情報を抜き出すしかない、ということで作ったのがRAWREADです。PCに転送したディスクの読み取り情報は、rawReadToD77というWindows用ユーティリティ(ソースも公開)を使うことで.D77形式ファイルに変換することができます。これだけでXM7上で動作するイメージになる場合も結構あります。すべてクリア確認までしたわけではないですが。
D77ファイル作成ツールとしてよく使われていると思われるNDITT (Windows XP用)を使っていたのですが、よく失敗します。とくにコピープロテクトで意図的にエラーが発生していたりするとぜんぜんダメですね。実家から発掘してきたFM Music Worldなどはプロテクトの巻き添えを食って本来正常であるべきセクタが無いものと思ってしまうようでXM7で起動できませんでした。しかし、RAWREADを使って読みだしたデータから精製したD77ファイルはプロテクトを正常に再現し、普通に起動できました。
詳しくはreadme.txtを参照してください。
RS232Cポート経由でPCと接続してディスクイメージを実機で書き戻すユーティリティを書きました。
RS232Cポートと生きたフロッピードライブと生ディスクさえあれば、RS232C経由でD77ディスクイメージを実ディスクに書き戻すことができます。(ただしプロテクトがかかってるやつはだめ)。
また、最初にWindows PCからFM-7/77にクライアントをどうやって転送するか、クライアントが無いとクライアントを転送できない、という鮭が先かイクラが先かという問題を解決するために、Windows PC側で、次のコマンドで (3はCOMポート番号なので環境に応じて適宜置き換える)
.\D77Server "####UTILDISK####" 3 -fbasic
サーバーを起動した状態で、
100 CLEAR ,&H17FF:DEFINT A-Z:WIDTH
80,25:A=&H1800
110 OPEN "I",#1,"COM0:(F8N1)"
120 OPEN
"O",#2,"COM0:(F8N1)":PRINT #2,"REQCLI":CLOSE #2
130 INPUT #1,D$:PRINT ".";
140 POKE A,VAL("&H"+D$):A=A+1
150 IF LEFT$(D$,1)<>"Q" THEN 130
160 ' POKE
&H1802,0
170 EXEC &H1800
このプログラムを実行することでクライアントが起動でき、しかもサーバーには起動可能なユーティリティディスクイメージ("####UTILDISK####")がビルトインイメージとして入っているので、一度この手順でユーティリティディスクを作ってしまえば次からはそのディスクで起動してディスクイメージの書き戻しができてしまいます。
詳しくは、 ここを参照。
Comments are welcome. Send E-Mail to: |