インターネット&PC120%活用:PC活用編

FM-7/8復活作戦 FM-7/8エミュレーター(ROM抜き)

===============================================================================================
FM-7/8復活作戦の目玉として、Windows上のエミュレーターでFM-7/8のプログラムを動かすことにチャレンジしました。
昔昔、FM-7/8でやったあの懐かしいGAMEを、Windows上のエミュレーターでできたらと思う人(ってもう40代かもしれないが)
結構いるみたいですね。おじさんのこの企画の動機もまあ、そんなところです。

で、実際にチャレンジしてみると、結構たいへんな作業(かつてのパワーユーザーにとってはたいしたことないのかも
しれませんが)が待っています。
まず、実機のROMを抜くというのが、結構面倒な作業です。(ROMライタでの抜き取り、あるいはデータレコーダーを使用
する方法が
APPOLO’sさんのページに紹介されています。)
次にネックになるのが、F-Basic(Disk Basic version)のDiskイメージの作成です。これは、DOS/Vにつながる5”のFDドライブが
ない(ほとんど入手不可)と結構面倒です。5”のFDドライブさえあれば、有志の方々によって作成された便利なツール
(DITTとか)を使って、比較的簡単にDiskイメージを作成できるのですが、これがないと便利ツールも使えません。
また、5”FDドライブが入手できても、ノートPCユーザーには、5”FDドライブとノートPCの接続はかなり面倒な作業に
なります。

という訳で、結構あきらめた方も多いのではないのかなと推測いたします。おじさんも、ROMライタもデータレコーダーも
5”FDドライブもないので、(+時間があまりない + GUI環境でボタンワンクリックという環境に慣れてしまった)
かなりハードル高いなと感じましたが(3000メートル級の山に登るくらい)、とりあえず、ノートPCと実機だけで、
RS232Cを駆使してなんとかエミュレーターを動かす方法にチャレンジしました。
上記の理由であきらめていた方もすくなからずいると思いますが、かなりうざい作業を覚悟の上なら、Windows上に
FM-7/8を復活させることが可能です。どうしても、昔のゲームをという方は頑張って見てください。
とりあえず、Windowsマシンと実機さえあれば、F-Basicで作ったプログラム、自作のマシン語プログラムを動かすところ
までは可能です。市販のゲームをWindows上で復活させるとなると、もうひと山超えなければならないかもしれませんが

ちなみに、俺の最新のPCにはRS232Cシリアルポートがついてないぜ、どうすりゃいいんじゃという人は、USBシリアル変換
を参照して下さい。
===============================================================================================

1  必要なもの

Windowsの動くPC 
FM-7/8の実機
まず、必要なのはこれだけです。あとは、小型のわに口クリップ数本(RS232Cケーブルの代用)と、熱意と根気だけです。

上記のものが準備できたら、エミュレーター、Windows上で動くシリアルデータ送受信用のソフト、あとはバイナリエディタ
を調達しましょう。全てフリーで入手できます。


2 ソフトの調達

エミュレーター
FM-7/8のエミュエーターはいくつかありますが、おじさんはまずXM7を使用してみました。
XM7エミュレータ(XM7の作者です)からダウンロードして下さい。
XM7にはver1からVer3までいくつかバージョンがありますが、ver1.1はFM-7/77/8用。ver.2以降はFM-7/77AV用です。
おおざっぱな表現ですみません。詳細は上記ページで確認して下さい。
シリアルデータ送受信ソフト
バイナリモードで受信できるものが必要です。
・Vector等で探すか
・おじさん作のシリアル転送プログラムを使うか (
パソコン活用研究5番街/RS232C通信プログラム
・腕に覚えがあれば、自作する
かして下さい。

バイナリエディタ
Vectorにフリーソフトがたくさんあります
あるいは、腕に覚えがあれば自作して下さい。


3 ROMを抜く
XM7では、以下の3つのROMが必要になります。さらに、DOSモードを使用する場合は、BOOT_BAS.ROMも抜く必要が
あります。

※FM8用はROMの名称をFBASIC10.ROMBOOTBAS8.ROMSUBSYS_8.ROMにして下さい。
この起動ROMの仕様について確認テストしてみた結果はXM7(FM7/8エミュレータ)の起動ROMに書きましたので
どうもこういうとこ気になんだよねという人は参照してみて下さい。

FBASIC30.ROM メインの&H8000〜 &HFBFF
BOOT_BAS.ROM メインの&HFE00〜 &HFFFF
SUBSYS_C.ROM サブシステムの&HD800〜 &HFFFF   

(1) ケーブルの準備
まず、Windowsマシン(DOS/V)とFM-7/8をシリアルケーブルで結びます。といってもそれようのケーブルはありませんので
ワニ口クリップで代用すればいいでしょう。
結線は以下の通り2本だけでO.K.ですので簡単です。あとはFM-7/8のRTS,CTSを自己結線して下さい。

FM-7/8     Windows
GND ---------GND
TXD(送信)----RXD(受信)

(2) ROMを抜く
FBASIC30.ROM, BOOT_BAS.ROMを抜くには、FM-7/8側で以下のプログラムを走らせて下さい。
これで、FM-7/8からボーレート600、データ長8ビット、ノンパリティ、ストップビット1 でデータを送信します。
FM-8の場合はディツプスイッチ2番をONにして下さい。

<FBASIC30.ROM抜き取りProgram>
10 OPEN "O",#1,"COM0:S8N1"
20 FOR I=&H8000 TO &HFBFF
30 PRINT #1,CHR$(PEEK(I));
40 NEXT
50 CLOSE

BOOT_BAS.ROM抜き取りは、上記の20行目を以下のように変更して下さい。
20 FOR I=&HFE00 TO &HFFFF

Windows側のシリアル送受信ソフトでも、同上のプロトコルに設定し、バイナリーモードでの受信にして下さい。


SUBSYS_C.ROMを抜く場合は、以下のプログラムを走らせて下さい。
なつかしいYAMAUCHIコマンドの登場です。(21世紀になって、こんなプログラムを書くとは夢にも思っていなかったので
昔の資料を引っ張りだしたりしてかなり時間食ってしまいました) このプログラムの説明は
サブシステムメンテナンスコマンド
を参照して下さい。

10 CLEAR 300,&H2000:AD=&H2000:CLS
20 DIM D%(20)
30 FOR I=0 TO 16
40 READ A$: D%(I)=VAL(A$)
50 NEXT
55 ' Sub System Maintainance Command
60 DATA &H3F,&H59,&H41,&H4D,&H41,&H55,&H43,&H48,&H49,&H91,&HD8,&H00,&HD3,&HC0,&H00,&H40,&H90
100 GOSUB 1000'SUB SYSTEM HALT
110 FOR I=0 TO 16
120 POKE &HFC82+I,D%(I)
130 NEXT
140 POKE &HFD05,0 'START
150 GOSUB 1000
160 FOR I=0 TO &H3F
170 POKE AD+I,PEEK(&HFCC0+I)
180 NEXT
190 AD=AD+&H40
200 POKE &HFC80,PEEK(&HFC80) OR &H80
210 POKE &HFD05,0
220 LOCATE 1,10:PRINT HEX$(D%(10)*256+D%(11)+&H3F)
230 D%(11)=D%(11)+&H40
240 IF D%(11)>&HFF THEN D%(11)=0:D%(10)=D%(10)+1
250 IF D%(10)>&HFF THEN GOTO 300 ELSE GOTO 100
300 PRINT"SEND SUB SYSTEM ROM Y or N";
310 C$=INPUT$(1)
320 IF C$="y" OR C$="Y" THEN GOTO 400
330 IF C$="n" OR C$="N" THEN END
340 GOTO 310
400 OPEN "O",#1,"COM0:S8N1"
420 FOR I=&H2000 TO &H47FF
430 PRINT #1,CHR$(PEEK(I));
440 LOCATE 1,13:PRINT I-&H1FFF
450 NEXT
460 CLOSE
470 PRINT:PRINT"COMPLETE"
480 END
1000 IF (PEEK(&HFD05)AND &H80)<>0 THEN 1000 'BUSY CHECK
1010 POKE &HFD05,&H80   'HALT
1020 IF (PEEK(&HFD05)AND &H80)=0 THEN 1020 'READY CHECK
1030 RETURN



*ご注意
プロトコルは別に上記の通りである必要はありません。特に通信スピード(ボーレート)はもっと高めに設定しても
構いません。ここでは、おじさん自作ソフトを使ったためボーレート600に設定しています(おじさん自作ソフトは低性能
のため、ボーレートをあげるとデータを取り損なうことがあります。)
600ってあまりに低いよなあ。

また、うまく送受信できない場合で、特に受信側(Windows)がまったく受信している様子がない場合は、ほとんど
ケーブルの接続ミス、接触不良(ワニ口で代用している場合は特に)だと思います。深呼吸して根気よく接続し直して下さい。


(3) 試してみる
抜いたROMはそれぞれ、上記のファイル名にしてXM7.exeと同じフォルダに入れておきます。
これで、XM7を起動すればROMモードで立ち上がるはずです。

実際あの懐かしい画面が立ち上がると感動ですねえ。

4 後書き
そもそも、ある必要性に迫られて
RS232Cプロジェクトなるものを立ち上げたのは、たぶん1996,7年のことだったので
そこから考えると、足掛け6年もかかってるんですねえ。わお!(WindowsでFM-7/8のゲームをやろうという目的が
加わったのはかなり後半ですが)
RS232Cのお勉強して、Windows用にシリアル転送プログラム作ってとかいうところからやったので、主観的には
ものすごく遠い道のりだった気がするんですが、こうして書いて見ると、あまり大変な作業じゃないですね。
なーんだ、割と簡単じゃんという感じ。

実機ユーザーの方、是非XM7で遊んでみて下さい。

ちなみに、おじさんはFM-8オーナーですが、音のでるFM-7にあこがれてました。(なんせFM-8はBEEP音しかないので)
XM7なら、FM-7のまねができるかな。FM-8改(FM-7仕様)BASIC.ROMを作るか?


TopPageへ


inserted by FC2 system