|
このユーティリティの使用は自己責任でお願いします。
ヤフオクでまだ割とよく動作品のFM77AVシリーズPCが出品されます。だから、動作するFM77AVを入手するのはまだ割と可能のようです。しかし、手に入れたはいいものの、陸の孤島になってしまう問題が発生します。FM77AV40EX以前であればテープインターフェース経由でデータを流し込むことができますが、FM77AV40SXではテープインターフェースもありません
XM7が登場したとき手元のディスクをD77イメージにバックアップしたものの、今度は生フロッピーディスクに書き戻したくても書き戻す手段が無い、という問題が発生します。
テープインターフェースでデータを流し込むことは可能(http://www.ysflight.com/FM/realutil_j.html)ですが、FM77AV用テープインターフェースケーブルがほとんど手に入りません。はんだ付けに自信があれば自作できますが、そうでないと難しいでしょう。仮にテープインターフェースケーブルを作ったとして、今度はPCから.WAVファイル経由でデータを流し込める保証がありません。手元で実験したところでは、ThinkPad 230T, 250で.WAVファイルを再生しても実機で読み込むことはできませんでした。同じ.WAVファイルを2008 MacBook Pro, Dell XPS Desktopで再生したところまったく問題なく読み込むことができました。たまたま手元のPCで読み込みに成功するかどうかはやってみるまでわかりません。
逆に、手元にレアなソフトが残っているとして、そのディスクイメージをPC上にバックアップしたいとしましょう。割とありがちだと思うのが、当時社会生活と若さと金と健康と頭髪を犠牲にして鍛えぬいたWizardryのデータをバックアップしたいとかいう需要もあるかと思います。昔はDITT.EXEを使うのが主流だったようですが、DITTを実行できるPCを見つけるのは難しくなっています。(いや、動作品のFM77AVを見つける方が簡単な気がする)。Windows XPで実行可能なNDITTもありますが、コピープロテクトでCHRNに細工のあるセクタはほとんどエラーがあると判断して読み込みません。そもそもDITTではすべての情報を読み込んでいるわけではありません。この問題を解決するために、RAWREADなるプログラムを書きましたが、、これもなんとかして実機上に持っていかないと意味がありません。
FM77AV1, AV2、あるいはAVより前のFM-77だとRS232Cポートがデフォルトではついていなくて、もはや純正RS232Cカードの入手はほとんど不可能ですが、新たに生産できるようになりました。
そこで、RS232Cポート経由でPCと接続してディスクイメージを実機で書き戻すユーティリティを書きました。
https://github.com/captainys/FM/tree/master/7/util
(* ソースコードのURLが変わりました)
鮭が先か、イクラが先か?
RS232Cポートが最初からある、または純正品か互換RS232Cカードがある。動作状態のフロッピーディスクドライブもある。あとは、このユーティリティのクライアントさえ実機に流し込むことができればディスクイメージから生フロッピーディスクを焼くことができる。
だとしても、ではクライアントをどうやってFM77に送ったもんでしょうか?クライアントさえあればなんぼでもディスクイメージを送れるからD7CLIENTが入ったディスクイメージも転送できますが、問題はクライアントが無いからディスクイメージを送信できない。鮭が先かイクラが先か、鮭・イクラ問題として知られている状態に陥ってしまいます。(ニワトリと卵だったかな?)
そういう事態に備えて、次の手順でD77サーバーから実機に簡単なF-BASICのプログラムでクライアントプログラムを流し込み、そして、さらにクライアントプログラム("D7CLIENT")を含むRS232Cユーティリティが入ってF-BASICが起動可能なディスクイメージを実機に転送できるようになっています。
(1) RS232Cの接続
なにより最初にPCとFM77(あるいはディスクドライブつきのFM-7)をクロスケーブルで接続します。FM77側のRS232Cの設定ですが、FM77AV以前の機種にRS232Cカードを装着している場合はディップスイッチの5番と6番だけをオンにしてください。それ以外のディップスイッチはすべてオフです。なお、カーネギーメロン大学のコンピュータクラブの協力で純正RS232Cカードを分析したところ1〜5番のスイッチのうち二つ以上をオンにするとカードが焼ける可能性があるので、必ず1〜4をオフ、5番だけオンにしてください。6番以降は間違ってても焼けることはなさそうです。
互換RS232Cカードを自作したあるいはヤフオクで僕から買った場合はデフォルトでジャンパピンの5番がオンになっているはずなのでそのままにしてください。万が一輸送中に外れてしまっていた場合は、ジャンパの5番だけオンです。
このようにすると、クライアントは (8文字に抑えるためにD77にできなかった)は19200bpsで通信します。
(1.5) 使ってるのがFM77AV40/20以降の機種の場合はRS232Cのイネーブル
FM77AV20またはFM77AV40以降の機種では本体にRS232Cがついていますが、普通に起動するとなぜかRS232Cがオフの状態になっています。なぜオフになっているかというとRS232CがあるものとF-BASICが認識すると128バイトだったかをRS232C通信バッファとして確保してしまって、プログラムによってはメモリが足りなくなるからです。多分。そのままではF-BASICでCOMポートが使えないので、起動したら、
POKE &HFD0C,5
POKE &HFD0B,16
EXEC -512
とタイプしてしばらく待つとF-BASICが再起動してCOM0が使えるようになるはずです。なお、いったんD7CLIENTをディスクから起動できるようにしてしまえば、D7CLIENTが中で自動的にRS232Cをイネーブルするので、F-BASICからCOMポートを使う理由がとくになければあとはこの手順は不要になります。
(2) サーバーの起動
Windows PC上で、コマンドプロンプトまたはPower Shellを起動して、D77Server.exeが置いてあるディレクトリに移動して(またはD77Server.exeの置いてあるディレクトリにパスを張って)、次のようにタイプしてサーバーを起動してください。なお、パラメータの「3」はポート番号なので、環境に応じて正しい番号を指定してください。
.\D77Server "####UTILDISK####" 3 -fbasic
(3) クライアントをRS232C経由で読み込んで実行
続いてFM77上でF-BASIC (テープモードでも可) を立ち上げて、以下のプログラムを実行してください。
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
PC側から2.5KBぐらいのバイト数をF-BASICで受け取るので1分程度待つとクライアントプログラムが起動します。ドライブ1に生ディスクを入れて、リターンキーを押すとドライブ1にユーティリティディスクができます。
210行のコメントをはずすとドライブ0に書き込みますが、デフォルトだとドライブ1に書き込みます。
これにより、ユーティリティディスクさえ作ってしまえばあとはこっちのもので、ユーティリティディスクから起動して、クライアントプログラムを簡単に起動できるようになります。
一度ユーティリティディスクさえ作ってしまえば、ユーティリティディスクから起動して簡単にディスクイメージを焼くことができます。
(1) RS232Cの接続
上の鮭・イクラ問題で書いた通り。
(2) サーバーの起動
次に、PC上でコマンドプロンプトからサーバーを起動します。サーバーはパラメータを最低ふたつ取ります。最初のパラメータがD77イメージファイル名、二つ目がポート番号です。例えば、
d77server.exe diskimage.d77 0
複数のディスクのD77ファイルの場合、
d77server.exe diskimage.d77@1 0
のように指定することで2枚目、3枚目以降のディスクも送信できます。なお、@の次の数字は0が最初のディスクです。
ポート番号はシリアルポートの番号で、COM0だったら単に0と数字を指定してください。
次のようなオプションも指定できます。
-fbasic
F-BASICフォーマットのディスクと過程して未使用ドラックのセクタデータを送信しないことで早く終わらせることができます。
-38400bps
通信速度38400bpsを使用。このオプションを使うにはRS232Cカードが38400bpsに対応していてそのように設定されている必要があります。
-noquit
デフォルトでは一枚のディスクを送信終了するとサーバーは終了しますが、同じディスクを何枚も生産したいときは-noquitオプションを指定するとサーバーが起動しっぱなしになります。
-renumfx
F?セクタをE?セクタに番号を変えて送信します。なお、コピープロテクトがF5, F6, F7セクタ等を参照している場合は実行できません。コピープロテクトがはずれているものの、セクタだけは残っているような場合だとこのオプションを使えば書き込めます。多分。
-deldupsec
DITT.EXEで作ったD77イメージの中に同じセクタが何度も書かれているものがあるようなので、ダブってるセクタを消して送信します。
-h, -help, -?
ヘルプを表示。
(3) クライアント実行
そして今度はFM77上で、上の「鮭・イクラ問題」で作ったユーティリティディスクから起動して、
CLEAR ,&H17FF
LOADM "D7CLIENT",,R
でクライアントを実行します。デフォルトではドライブ1のディスクに書き込むようになっているので、ドライブ1に生ディスクあるいは消してもいいディスクを入れてキーを押すとサーバーとクライアントで通信してイメージをディスクに書き戻します。
もしもドライブ1が既に動かない(多分現役時代はドライブ0の方が酷使されてるはずなのでそれは無いと思いますが)場合は、
CLEAR ,&H17FF
LOADM "D7CLIENT"
POKE
&H1802,0
EXEC
で実行するとドライブ0に書き込みます。
あとは、プロテクトがかかってないプログラムのイメージだったら (COMPAC系のソフトとか) そのまま転送してやれば実行できるようになります。プロテクトがかかってるプログラムだと、まずプロテクトを解除する必要があります。
日本ってレトロゲームのプロテクトの解除もまだ違法なのでしょうか?コンピュータプログラムには、工業製品という側面と同時に芸術作品としての側面もあると思います。とくにコンピュータの計算力が非力だった当時超絶技巧プログラミングでありえないパフォーマンスを引き出していたプログラムは文化遺産として保護されるべきレベルです。アメリカではその考え方を尊重してか、レトロゲームのプロテクトの解除は合法とされているらしいです。日本もそうなって欲しいですね。
実家からFM-7回収してきて、その後FM77AVを思わずヤフオクで落としてしまってからずいぶん6809のアセンブリコード書いたな。しかし、めちゃくちゃ楽しい。
Comments are welcome. Send E-Mail to: |