にがMSX 番外編

〜ファミリーベーシックの改造〜


任天堂

ファミリーベーシック

 今回は番外編としてファミリーベーシックの改造を行う。

関連記事
ファミコンブームの時の昔話: 2010年12月4日のblog
MSXのジョイスティックを繋げる連射アダプタの製作: 2011年1月14日のblog

ファミベV2 基本仕様

CPU
RP2A03(6502相当)

クロック周波数
1.7897725MHz

RAM
2kB +ワークRAM 2kB

VRAM
2kB

ROM
32kB

 ファミベーは当時友達に1週間借りて触った程度の経験しかなかったが、ジャンクで手に入れたのを契機にちょっと弄ってみることにした。


ことのはじまり

 2010年の12月、ハードオフのジャンクで見つけたファミベカセット。つい懐かしくなって捕獲してしまった。キーボードは無かったが、起動時の「ワタシハ…」のメッセージでも見てみようかと電源を入れたが起動しない。ネットで検索してもそれで正常なのかどうか分からなかったので、2chのファミリーベーシック活用テクニックスレに書き込みをしたのであった。

ファミリーベーシック活用テクニック
http://ikura.2ch.net/test/read.cgi/i4004/1137494473/

779 :ナイコンさん:2010/12/07(火) 02:10:28
ハードオフでファミベ(非V3)のカセットだけ買ってきたんですが、
キーボード繋がないと起動しない仕様なんでしょうか?

分解して端子掃除もしたけどNG。端子金メッキじゃないのね…。
ROM生きてるか確認するために引っこ抜いて読んでみたら中身はV2.1Aでした。

780 :ナイコンさん:2010/12/07(火) 10:41:50
>>779
起動しないです。

781 779:2010/12/07(火) 18:49:43
やっぱそうでしたか。今度キーボード見かけたら捕獲したいと思います。

EPROM焼いてSRAM増やしてV3互換に改造してみたいと思ってるんですが、
SRAM増やしても容量はV2で2kB、V3で4kBは変わらないんですかね。
手持ちに32kBのSRAMが余ってるのでDIPスイッチでバンク切り替えできる
ようにしても面白そうなんですが。

782 :ナイコンさん:2010/12/07(火) 21:59:58
DIPスイッチ切り替えようとしてカセットに触れた途端、接触不良でフリーズするかも…。

783 :ナイコンさん:2010/12/07(火) 22:41:38
>>781

確かに容量的には互換性がありますが、V2とV3ではSRAMがマップされている
アドレスが異なりますので、完全な互換とはなりません。
当然BIOS周りもアドレスを直打ちしておりますので、
V2の「BASIC」に4KBを認識させようと思ったら大変な技が必要です。
V2で4096BYTES FREEって表示させられたら最高なんですけどね。

同じ理屈で、テープのセーブロードもたぶんもとの2キロバイト分しか
対応しないと思うので、このままだとマシン語領域としての使用法や
仮想VRAM等、ワークとしての使用法に限定されるでしょう。
(PEEK、POKE、CALLは使えると思います、たぶん)

ただ、今になってそういうことに関心を持つのはすごく面白いことです。
ぜひトライしてください。知っていることがあればお答えします。

こうして779こと私が、783さんにいろいろ教えて頂きながらファミベの改造を進めてゆく流れに。どこのどなたか存じませんが、783さんにはお世話になりました。

改造の目標

(1) V2+V3 の 2in1
(2) バックアップスイッチを自動化
(3) メモリ増設

 カートリッジを見て思いついた改造がこんな感じ。ファミベにはV2V3があるが、BASICのROMはどっちにしてもストレートな(特殊なマッパでない)ROMなので、倍の容量のEP-ROMに2つとも入れてスイッチで切り替えくらいはできるかなと。

 ファミベのメモリは当時としては珍しい乾電池によるバックアップ機能があるが、これが大変評判が悪い。SRAMをバックアップ状態にするには、動作中にカセットのスライドスイッチを切り替える必要があるのに、カセットを触っただけで振動で暴走してしまうとか。これは物理的なスイッチでSRAMを無効にするからいけないのであって、ロジック回路を組んでBASICからコマンドを投げた時に自動的に切り替えるようにすれば解決するんじゃないかと考えた。

 ファミコンのCPUにはDRAMのリフレッシュ機能が無いため、メモリは当時高価だったSRAMが使われている。よってフリーエリアが非常に少なく、V2で2kBV3でも4kBしかないが、今なら安価で大容量なSRAMが使い放題。できればフリーエリアを増やして、複数バンクを切り替えられるようにしたら面白そう。

このスレを通して知ったこと

・V2のRAM 2kBは$6000-$67FF , $6800h-$6FFF , $7000-$77FF , $7800-$7FFF がミラーイメージ

・V3のRAM 4kBは$6000-$6FFF , $7000-$7FFF がミラーイメージ

・バックアップ電池は消耗が激しいらしい(3ヶ月くらいしか保たない)

・V2のデモはTキー起動でSKIPできる

・V2.1Aなら$8570を$77→$7Fにすると4030 BYTES FREEになる(819さん情報)

・リセットされると元に戻るがPOKE&H4,&H7Fとやっても一応フリーエリア増える(V2)

・V2はSYSTEMコマンドでBASICモード画面に戻ってからスイッチを切り替える

・V3はスイッチを切り替える前に BACKUPコマンドを使う

 2chスレで783氏その他の方からの情報提供でいろいろなことが分かってきた。

 RAMはV2$7000-$77FFV3$6000-$6FFFに割り当てられているが、V3の4kBは$7000-$7FFFにミラーイメージが出ることから、ハードウエア的にはV3のメモリはそのままV2でも使える。そして、V2.1AのROMを1バイト書き換えることでフリーエリアが4kBになるので(物理メモリは必要)、32kBのSRAMを載せておけばV2/V3共通で4kB x8バンク使えることになる。

 バックアップスイッチの自動化については、当初$8000のbit0へのデータ書き込みを監視してSRAMの/CSを無効にする回路にしたのだが、この手法だとROM領域書き込み動作をすると同時にROMからデータが吐き出されるらしく、狙い通りに切り替わらなかった。そこで783氏の助言に基づき、書き込みデータの内容に関わらず$8000への書き込み動作でSRAM有効、$9000書き込みで無効とするようにした。POKE命令で実際に切り替わるのを確認したのだが、V2ではBASICモード画面でスイッチ切り替える仕様になっていて、コマンドを打ち込む隙がないV3でも同様にBACKUPコマンドを打ち込んだ後は一切の操作を受け付けない。よってスイッチを自動化するためにBASICそのものを改造する必要が生じた

自分には6502マシン語は分からないので、ソフトウエア的なことは783氏の助言を頂戴しながら改造を進めることにした。

回路図2011年版(old ver.)

クリックで別窓表示

 2011年当時に書き上げたのがこの回路図。POKEコマンドでSRAMの有効/無効は切り替わるが、タクトスイッチでも切り替えられるようにした。基板上のスライドスイッチはV2/V3の切り替えに流用。

バックアップスイッチには74HC74のフリップフロップを使っているが、ファミコンはカセット端子にリセット信号が来ていないため初期化ができない。そこでカセット上にリセットICを増設して対応した。具体的には電源電圧が4.25Vに達してから34msはSRAM disable固定。この時間をあまり短くすると正しく機能しなかった。

実はこの回路には問題点があって、ファミコンの電源を落とすときにCPUの暴走と共にSRAMの/CSがLになりデータ化けが発生する恐れがある。また、V2/V3の切り替えにスライドスイッチを使っているが、アドレス線を物理的なスイッチを通す手法では接点不良により暴走する危険がある。

BASICの改造については、783氏の情報により数回ROM焼きして試行してみたものの、成功しないままスレが流れ約5年が経過。そして2015年にMikasenさんの協力が得られ、プロジェクトが再開となった。


V2.1A FB-R-128-01

今回改造に使ったファミベーがこちらの基板。V2基板には少なくとも3つのリビジョンがあり、おそらくこれは初期のもの。

SRAMには富士通の幅の狭いものが使われている。BASIC ROMは16kB x2 = 32kBになっている。当時は32kBのROMを1個使うより16kBを2個使ったほうが安かったのかも知れない。

下記の回路図はキャラクターROMの方は省略している。全体の回路図はこちらFB-R-128-01のCHARACTER ROMは変態ピンアサインなので改造するときは要注意。

 

これはネットで拾った画像を拝借したものだが、ROM2個バージョンの後期のものと思われる。

PROGRAM ROMやSRAM部分はFB-R-128-01とほぼ同一と思われるが、明らかな違いはCHARACTER ROMの仕様。こちらは一般的なマスクROMのピンアサインになっていると思われる。

なお、この画像の元データはこちらから拝借。こちらのサイトによると、HVC-FB1-128という基板もあるらしいが、基板画像を見る限りではパターンの走行はFB-N-128-02と同じに見える。

V2.1A FB-N-256-21

 上と同じV2.1Aのカセットであるが、こちらはBASIC ROMが256kb 1個のバージョン。

この個体はSRAMは幅広のものになっているが、基板のパターン上は幅の狭いものにも対応できるようになっている。

改造はどちらのバージョンでも可能だろうが、こちらは信号の取り出しポイントが少ないので不利かも。またBASIC ROMの最上位A14がLS20で反転されている点も要注意(上位下位16kBが入れ替わる)。

開腹せずにROM1個/2個版の見分ける方法は下画像参照。カセット裏側を覗き込んで45-46pと48-49pのパターンがショートされているのが見える方がROM1個版

 

V3 VT-N-256-41

こちらがV3の基板。他にリビジョンがあるかどうかは不明。PROGRAM ROMは256kbのものが1個となっている。

4kBのSRAMは旧東芝ロゴのTC5533P-Bが使われているが、このSRAMは変態で、アドレス線の配列が一般的なものと異なっている。1pはVccに、6pはGNDに繋がっているが、資料がなくピンの役割は不明。

 V3はSRAMのパターンを流用しにくいし、比較的レアなカセットでもあるので改造は避けるべき

 なお、ファミベーカセットはどのバージョンもカートリッジエッジがソルダーメッキ仕様となっていて接触が悪い。金メッキにしていればバックアップスイッチも少しは使い物になっていたかも知れない。

 

バックアップ 機能

 V2の説明書より抜粋。BASICからSRAMバックアップモードに入るには、SYSTEMコマンド(省略形 S. )でスタート画面に戻った状態でスイッチをON(SRAM disable)に切り替える。バックアップスイッチONでSRAMがdisable、OFFでenableになるのだが直感的に分かりにくい。

バックアップスイッチOFFの状態で放置した場合に電池の寿命が短くなってしまう問題については既知だったらしい。回路図を見ると分かるが、SRAM enableの状態で本体からの電源供給が絶たれると、バックアップ電流がR1の5.1kΩ抵抗を介してロジックICに流れ込んでしまう。バックアップ機能は使いにくかったので、不使用時もスイッチOFFのままにしているユーザーが多かったと思われ、それが「電池の消耗が激しい」と印象付ける原因になったと思われる。

マンガン電池は自然放電が大きいのでリチウム電池ほど長期間メモリ保持はできないと思うが、それにしても2ヶ月は短い気がする。リチウム電池化してリーク電流対策をすれば数年は保持されそう。


2015年版回路図

クリックで別窓表示

 2015年プロジェクト再開にあたり、新しく作り直した回路図がこちら。バックアップスイッチの切り替え手法は2011年版と同じだが、いくつかの点が異なる。SRAMを32kBから128kBに変更したことにより8kB x16バンクの容量となった。また、128kBのSRAMには正論理のCS端子が付いているため、ロジックICの追加無しで電源断時のデータ化けを予防できるようになった。

V2/V3切り替えについてはスイッチにA15を通さず、余っていた74HC74のFF(フリップフロップ)を利用して切り替える仕様にした。これにより電源投入時のスイッチの状態が保持され、動作中にスイッチを切り替えたり、接点不良が発生しても暴走しなくなった。ただし、リセットICで生成した信号の立ち上がりがV2/V3モード決定のトリガになっているので、本体のリセット信号のタイミングによってはうまく動作しない可能性あり。

なお、リチウム電池GND側の1kΩ抵抗は、ショートした時の安全対策として入れてある。

ROMとSRAMを剥がした状態がこちら。EP-ROMは28p、SRAMは32pなので、DIPパッケージで改造する場合はROM-AのパターンにEP-ROMを、ROM-BのパターンにSRAMを載せると良さそう(その際C6は干渉するので移設)。

改造後

改造後の状態がこちら。バックアップスイッチの切り替えはソフトウエア的に行うため、回路図のタクトスイッチは省略している。

SRAMには秋月で買ったSOPパッケージを使っているため、配線がゲジゲジみたいになっている。

なお、EP-ROMはソケットに載せるとケースに入らなくなるので、直接半田付けする。

手持ちのSOPパッケージのロジックICを使ったが、DIPでも特に問題なく作れる。

リセットICはたまたま梅沢無線で売っていたROHMのM51953Aを使ったが、今は手に入りにくいかも。リセットICで生成する信号は本体のCPUリセットより早く立ち上がらなければならないので、使用するファミコン本体によってはリセット時間の調整が必要になるかも知れない。

LEDはIremのゲームを意識して、センターに配置。

ロータリーDIPスイッチと共に電池ケース内部の基板に実装することも考えたが、高さを合わせるのが面倒だったので、上部の空いたスペースを利用した。

バンク選択スイッチ

 ロータリーDIPスイッチは16進数表記なので分かりやすい。秋月電子で調達したもので、適度な力でカチカチと回る。

動作中に切り替えるとメモリが入れ替わって暴走するので、バンク切り替えは電源断で行う仕様。

バックアップ電池

 電池蓋を開ければリチウム電池の交換が可能になっているが、10年くらいは持つような気がする。ちなみにうちの似非SCC(256kB版)は20年経過したリチウム電池がまだ使えている。


BASIC V2の改造

 バックアップ機能の完全自動化のためにはBASIC ROMのソフトウエア的な改造も必要となる。2011年はこの時点で挫折してしまったが、今回この難作業をMikasenさんが引き受けてくれた(多謝)。短期間で解析、パッチを作成して頂き驚いたが、Mikasenさんは古くからのファミベユーザーだそうで、使い勝手を向上させる改造も盛り込まれており、流石であった。

実際の改造に当たっては、実ROMから吸い出したROMデータを、下記情報の通りに適当なバイナリエディタを使って書き換え、EPROMにWriterで書き込むこととなる。以下、Mikasenさんから提供していただいた改造情報を転記する。

● V2.1A
変更概要:

・起動直後に4フレーム(16ms*4)程度のwaitを入れる
・その直後、SRAMアクセス許可状態にする
・BASICメニュー画面(1,2,3 KEY IN !!の画面)表示中のみSRAMアクセス禁止状態となるようにする
・[1]〜[3]のどれかのキーを押すと再びSRAMアクセス許可状態となるようにする

 各種ボードのデータを残したい場合は一度BASICメニュー画面に移行してから電源をOFFにする事になる。
 この時に間違って[1]を押してBASICを起動してしまうと各種ボードのデータは消えてしまうので注意。
 このバージョンではRAM容量は4KBに留めている。既存のBASICプログラムの互換性を重視するためであり、また、8KB化は書き換え箇所が非常に多く、解析とdebugが大変になる。そもそもRAM領域は$7000以降に存在しているという前提でコードが書かれているので書き換え作業はとても手間のかかる作業となる。
 BASICからメニュー画面に戻る命令は SYSTEM (省略形 S.)。

留意事項:
debugなどでエミュレーター上で実行する際の取り扱いに関して。
書き換えた後のNESファイルはVirtuaNESでファミリーベーシックとして認識しなくなる。(CRCが異なるため)
この為、キーボードが接続されていない状態で起動する。
編集 → 拡張コントローラ → FamilyBasicキーボード と選びキーボードを接続する。


以下、変更点に関しての情報。メモリ上の実アドレスで表記。

・RAM領域の上限アドレス変更(4KB化)
 $8570 77 → 7F

・RAMテスト処理を潰してこの場所に必要な処理を置く
 $CE46〜$CE6Dの範囲、39バイト。
 ここは[T]キーを押しながら起動した時のRAMテストプログラムが入っている領域。
 この領域に必要な処理を上書きする
 1. $CE46〜 RAMテストが正常に終わったかのように見せかける処理
 2. $CE4B〜 電源投入・リセット時、およびメニュー画面で[3]キーが押された時の処理
  (起動時waitとSRAMアクセス許可)
 3. $CE5B〜 メニュー画面表示前の処理(SRAMアクセス禁止)
 4. $CE61〜 メニュー画面で[1]キーが押された時の処理(SRAMアクセス許可)
 5. $CE67〜 メニュー画面で[2]キーが押された時の処理(SRAMアクセス許可)
 waitのフレーム数は$CE4Cの値で設定できる。
 $CE46 A2 01 A0 70 84 01 A0 00 84 00 BD 8B CA 91 00 D1 00 D0 12 88 D0 F4 E6 01 A9 78 C5 01 D0 EC CA 10 E1 A9 03 85 8A 85 7B 60
 ↓
 $CE46 A9 03 85 7B 60 A2 04 AD 02 20 10 FB CA D0 F8 8D 00 80 4C 00 C4 8D 00 90 4C 31 81 8D 00 80 4C 88 AF 8D 00 80 4C AF B5 EA

・リセットベクタ書き換え
 $FFFC 00 C4 → 4B CE

・BASICメニューで[3]を押した時の処理の飛び先を変更
 $80D2 00 C4 → 4B CE

・コンピューター画面でバックアップスイッチがONにされた場合の処理の飛び先を変更
 NigaSpecialのハードウェア仕様では変更の必要が無いはずだが念のために書き換えた。
 $CDFD 00 C4 → 4B CE

・BASICメニュー画面描画処理の飛び先を変更
 $80BD 31 81 → 5B CE

・BASICメニュー画面で[1]が押された時の処理の飛び先を変更
 $80F1 88 AF → 61 CE

・BASICメニュー画面で[2]が押された時の処理の飛び先を変更
 $80D5 AF B5 → 67 CE

・コンピューター画面のバックアップ方法の案内メッセージを変更
 データヲ ノコシタイ トキハ
 カセットノ バックアップスイッチヲ
 ONニ シテクダサイ
 ↓
 データヲ ノコシタイ トキハ
 BASICメニューデ デンゲンヲ
 OFFニ シテクダサイ

 $C707 65 6D 96 73 78 20 A6 96 67 60 96 AD 6C 61 96 70 8D 0D 4F 4E 75 20 6B 72 67 A1 6A 61 FF
 ↓
 $C707 42 41 53 49 43 81 75 94 2D A4 20 A4 8C 9A 8C 8D 0D 4F 46 46 75 20 6B 72 67 A1 6A 61 FF


以下、利便性の向上のために個人的判断で書き換え

・バージョン表記の変更
 $C367 41 → 4E
 NS-HUBASIC V2.1A を NS-HUBASIC V2.1N に書き換えた。

・テープセーブ時のロングヘッダーを短くする
 $B521 4E → 任意の値
(今回は 08 としておいた)

BASIC V3の改造
 Mikasenさんから提供して頂いたV3の改造情報は下記の通り。2in1化のためには、V2のROMデータを下位32kB、V3を上位32kBになるように連結して64kBのEPROMに焼けばよい。

● V3.0
変更概要:

・起動直後に4フレーム(16ms*4)程度のwaitを入れる
・その直後、SRAMアクセス許可状態にする
・SYSTEMまたはBACKUPコマンド実行時にSRAMアクセス禁止状態にする
 処理が成功すれば「デンゲン ヲ OFF ニ シテクダサイ」と表示される

留意事項:
debugなどでエミュレーター上で実行する際の取り扱いに関して。
書き換えた後のNESファイルはVirtuaNESでファミリーベーシックとして認識しなくなる。(CRCが異なるため)
この為、キーボードが接続されていない状態で起動する。
編集 → 拡張コントローラ → FamilyBasicキーボード と選びキーボードを接続する。


以下、変更点に関しての情報。メモリ上の実アドレスで表記。

・RAM領域の上限アドレス変更(8KB化)
 $86A4 6F → 7F

・ROM内の未使用領域を$FFで埋める
  $D93B〜$DBFCの範囲全てを$FFに書き換えた。
 ここはサンプルゲーム(GAME 0)のプログラムが入っている領域だが、未参照領域となっているので丸ごと利用できる。(開発中のゴミがそのまま残っていたと思われる)目視でわかりやすくするために$FFで埋めておいた。

・起動時の処理を入れる
 $D940〜に起動時のwait処理、SRAMアクセス許可処理、元のリセットベクタへのジャンプ処理を入れた。
 waitのフレーム数は$D941の値で設定できる。
 $D940 20 22 20 85 20 4B 44 F6 06 20 80 20 0B 24 04 00 1A 10
 ↓
 $D940 A2 04 AD 02 20 10 FB CA D0 F8 A9 4C 8D 00 80 4C BA 80

・リセットベクタとIRQベクタ書き換え
 $FFFC BA 80 → 40 D9
 $FFFE BA 80 → 40 D9

・SYSTEMコマンド及びBACKUPコマンドの追加処理を入れる
 $81AA〜$81C0の範囲にSRAMアクセス禁止処理を上書きした。
 また、後続の不要な処理を$EA (nop)で埋めた。
 ここはコマンド実行時に バックアップ スイッチ ヲ ON ニ シテクダサイ と
 表示する処理が書かれている領域。

 $81AA A9 02 85 48 A9 04 85 49 A9 03 20 0D 82 A9 00 20 0D 82 A9 05 20 0D 82
 ↓
 $81AA A9 F0 8D 00 90 EA EA EA EA EA EA EA EA EA EA EA EA EA EA EA EA EA EA

・BGGET・BGPUT命令で使うメモリアドレス変更
 通常$6C00〜$6FFFの範囲が使われるが8KB化に伴いこのアドレスを$7C00〜$7FFFに変更した。
 もしBASICプログラムで$7C00以降にBG面データを書き込んだ後にBGPUTするソフトがあった場合はアドレスを変更する必要がある。
 $B1BE 6C → 7C (BGGET命令メモリ計算処理(フリーエリアが少なければOMエラーとなる処理))
 $B1CB 6C → 7C (BGGET命令転送先アドレス)
 $B20C 6C → 7C (BGPUT命令転送元アドレス)


以下、利便性の向上のために個人的判断で書き換え

・バージョン表記の変更
 $CF8A 20 → 4E
  NS-HUBASIC V3.0(空白) を NS-HUBASIC V3.0N に書き換えた。
 オリジナルとの違いを明確にするため。

・テープセーブ時のロングヘッダーを短くする
 $BF43 4E → 任意の値(今回は 08 としておいた)
 元々のテープヘッダーは10秒程度。長すぎるので短くした。

・ファンクションキーの初期設定をV2と同じに変更
 V3の場合、[F1]〜[F4]に内蔵ゲームを起動するコマンドが入っているが、
 これらはプログラミング中に間違って押下すると一瞬で作成中のプログラムが
 消滅してしまう。邪魔なのでV2と同じに設定しておいた。

 以下、オリジナルの状態
 

キー

V2

V3

[F1]

LOAD

GAME 0

[F2]

PRINT

GAME 1

[F3]

GOTO

GAME 2,1

[F4]

CHR$(

GAME 3

[F5]

SPRITE

SPRITE

[F6]

CONT

LOAD

[F7]

LIST

LIST

[F8]

RUN

RUN

 $B44A〜ファンクションキー定義データ 文字+コントロールコード+終端コード$00 × 8個
 元々のデータ
 47 41 4D 45 20 30 0D 00 47 41 4D 45 20 31 0D 00 47 41 4D 45 20 32 2C 31 0D 00 47 41 4D 45 20 33 0D 00 53 50 52 49 54 45 20 00 4C 4F 41 44 0D 00 4C 49 53 54 0D 00 52 55 4E 0D 00
 上書きしたデータ
 4C 4F 41 44 0D 00 50 52 49 4E 54 20 00 47 4F 54 4F 20 00 43 48 52 24 28 00 53 50 52 49 54 45 20 00 43 4F 4E 54 0D 00 4C 49 53 54 0D 00 52 55 4E 0D 00 00 00 00 00 00 00 00 00 00


バックアップ機能の検証

正しくソフト&ハードの改造に成功すると以下の挙動を示すこととなる。

V2Tキー起動すると、「スタート画面」になる。この状態ではSRAMは切り離されており、LEDは消灯。

ちなみにこのカセットはタクトスイッをチ装備したバージョン。LEDの位置と色が違う。

1キーを押してBASICを起動すると、自動的にSRAMが有効になりLEDが点灯。予めRAMをバックアップしていれば、LISTが残っている。

ROM改造により、バージョン番号が「V2.1N」となり、フリーエリアが4030バイトになっている。

 SYSTEMコマンドで「スタート画面」に戻ると自動的にSRAMが切り離されるのでその状態で電源を落とせばプログラムリストが保持される。

V3では電源を入れるとすぐにSRAMが有効になる。過去にバックアップした内容が保存されている場合は、BASIC HOT STARTと表示される。

こちらもROM改造により、バージョン番号が書き換わり、フリーエリアは8182バイトに倍増。

無改造V3でBACKUPコマンドを打つと「バックアップ スイッチ ヲ ON ニ シテクダサイ」と表示されるが、改造ROMでは自動的にSRAMが切り離され、LEDが消灯する。

この画面に遷移する際に、バックアップデータが存在するフラグや関連データをRAMに書き込む仕組みになっているので、データを残したい時はここを経由する必要あり。

V3にはBG画面をバックアップするコマンドBGGET(保存)BGPUT(復元)があり、メモリ最上位1kBが空いていればここに保持される。改造によりフリーエリアが8kB化されているので、世間に出回っているプログラムならば問題ないだろう。


プロジェクト完了

 5年越しの改造が無事完了したのでふぁみべのよっしん氏のゲーム(ZACNER2)で遊んでみた。自機には多数のオプションが装備でき、長いレーザーで敵をなぎ倒す爽快感が味わえる。拡大しすぎてモザイクのかかった巨大ボスキャラも出現し、敵キャラがわんさか沸いてくるのに、ファミベで動いているとは思えないくらいの高速動作がスゴイ。ちなみにこのゲーム、ファイルが分割されていて、ロードが4段構えになっている。少ないファミベのメモリを総動員するためにワークRAMの空いたエリアを使っているらしい。そのため、メモリバックアップ機能はこのゲームでは役に立たなかったりする。


 ハードウエア改造について、自分は量産を考慮しないので古典的手法でチマチマと基板パッチしてしまうが、今時の人なら業者発注でサクっと基板を作ってしまいそう。ファミベはカードエッジが半田メッキで接触に難があるので、いっそのこと金メッキで作り直したほうが良いかも知れない。その気になれば普通のゲームカセットサイズで作ることもできそうだし、SRAMを増やして、V2とV3で個別のSRAM与えた方が使いやすいかも。特に許可は要らないので、やりたい方がおられましたらどうぞ。

 一応お約束ですが、改造・複製したROMデータを使用するにはオリジナルのカセットを所有していることが前提となりますので著作権には注意しましょう。また、この記事を見て改造などを行い故障やその他問題が発生しても責任は負えません。各自の責任において情報を広く集めて行うことをおすすめします。

ファミベROMの解析、改造パッチの考案をしてくださったMikasenさんに感謝いたします。

ファミベ解析資料を公開されているEnriさん、参考にさせて頂きました。ありがとうございます。

どなたか存じませんが、2chファミベ活用スレの783さんお世話になりました。


ご意見、ご感想、ご質問はにがBBSまで!

Top pageへ戻る

copyright (C) 2016 Niga