ゲーム改造(へたれパッチ作成支援機能)について

→  ダンプリスト入力
→  昔のテープからのゲーム取り出し
→  PasocomMiniで音楽を楽しむ(New!!)
→  ラリーXに音楽をつけるの巻(New!!)
→  ゲーム改造
→  E-mail















Yahoo!ジオシティーズ
→ Home    → Emulator    → AutoStart    → Software    → Download    → Link

目次

 

マシン語改造(へたれパッチ作成支援機能)について

前準備

レベル1 シップ数のワークエリアをサーチする

レベル2 シップ数を減らなくする

レベル3 シップ数の初期値を変更する

レベル4 PATファイルを使って試してみる

レベル5 無敵モードを作る

レベル6 BEEP音をPSG音に変更する

レベル7 無敵モードをON/OFFする

PC-8001mkII,PC-8801の場合

謝辞

   

マシン語改造(へたれパッチ作成支援機能)について

 

 当時の雑誌には、プログラムの説明や、ワークエリアのアドレスなどが書いてあって、割と簡単に改造ができました。

今となっては、雑誌自体がプレミアになっているようです。

 

また、当時の雑誌は捨ててしまって、テープだけが残っているケースも多いと思います。残っているマシン語のプログラムだけから、改造する場所を探し出す機能をt88toolに追加してみました。

 

昔のプログラムの自機を100機にしたり、無敵にしたりできます(できる可能性があります)。

 

以降、教材として、今風太様のサブマリンを使っていきたいと思います。

今風太様のページにプログラム解析記事があるのですが、あえて、それは見ずにツールでのみ解析していきます。(今風太様、教材としてのゲーム改造を快くご許可いただきありがとうございました。)

 

 

 

 前準備

 

 まずは、今風太様のホームページ「蘇る今風太ワールド」からsubmarine.t88をありがたくダウンロードさせていただきましょう。
今後の作業のために、d88ファイルとn80ファイルに変換しておきます。

 

  t88tool    submarine.t88 BA92
  t88tool -n submarine.t88 BA92

 

※n80ファイル:j80でのクイック起動のため(ドラッグ&ドロップして瞬間起動します)
※d88ファイル:X88000やM88で起動するため

 

また、各種エミュレータを準備して下さい。

    j80:n80ファイル書き出し用(ワークエリアサーチの際に必要です)

    X88000:実行ログ書き出し用(無敵改造解析の際に必要です)

    M88改+、pc8801ma改:PATファイルでのお試し改造に必要です。

 

レベル1 シップ数のワークエリアをサーチする

 

 最初に、シップ数のワークエリアをサーチしてみます。
j80でゲームを起動し、船の数が5、4、3と減るごとに、n80ファイルを保存していきます
(「Utilities」「Save N80 File」) 。
これらのファイルをt88toolのバイナリdiffモード(-Bd)で解析すると、各n80を比較して、怪しいアドレスをリスト表示することが可能です。

  t88tool -Bd ship5.n80 ship4.n80 ship3.n80

 

解析結果
  <<<t88tool ver1.14>>>
  option : binary diff mode
  #1 [ship5.n80] (bin) : 8000-FF3F : 32576 [Byte]
  #2 [ship4.n80] (bin) : 8000-FF3F : 32576 [Byte]
  #3 [ship3.n80] (bin) : 8000-FF3F : 32576 [Byte]
  <Binary Diff Mode>
  B312 : 00->01->02 : 0->1->2
  B319 : 00->01->02 : 0->1->2
  B320 : 00->01->02 : 0->1->2
  B707 : 04->03->02 : 4->3->2
   ( -1) DEC A; LD (B707),A : 3D,32,07,B7 : B6C6 (-P B6C6=00)
   (all) LD (B707),A     : 32,07,B7   : B6C7 (-P B6C7=0,0,0)
                        B929 (-P B929=0,0,0)
  B312 : 0000->0001->0002 : 0->1->2
  B319 : 0000->0001->0002 : 0->1->2
  B31F : 0000->0100->0200 : 0->256->512
  B320 : 0000->0001->0002 : 0->1->2
  B706 : 0401->0301->0201 : 1025->769->513
  B707 : 3A04->3A03->3A02 : 14852->14851->14850

 

アドレスB707だけが船の数に同期して、変化しています(B707 : 04->03->02)。
ここが船の数のワークエリア(船の数−1)と推測されます。
確認もかねて、j80の「Utilities」「MonitorGUI」で任意の数に変えて遊んでみましょう。

 

実際に、B707に08と入れると、残り9隻となりました。7Fを入れると残り128隻!になります(ただし、10隻以上は表示が乱れます)

 

 

ちなみに、n80ファイルの数によって、下記のようにt88toolの解析動作が変わります。

・ファイルが2つ以上指定されている場合には、差が±1の範囲で変化したアドレスを表示します。
・ファイルが3つ以上指定されている場合には、10→15→20など一定の差分で変化するアドレスも表示します。
・ファイルが4つ以上指定されている場合には、0→255→0→255など繰り返しパターンのアドレスも表示します(フラグを見つけたい時には、フラグON状態とフラグOFF状態のn80ファイルを交互に指定して下さい)。

 

レベル2 シップ数を減らなくする

 

 上記のやり方だと、起動の度、ゲーム開始後にメモリを書き換えが必要です。面倒なので、プログラム自体を書き換えてしまうことを考えます。
上記の解析結果から、B707(シップ数のアドレス)に関連するデクリメント命令がB6C6にあることがわかります。

  B707 : 04->03->02 : 4->3->2
   ( -1) DEC A; LD (B707),A : 3D,32,07,B7  : B6C6 (-P B6C6=00)
   (all) LD (B707),A     : 32,07,B7   : B6C7 (-P B6C7=0,0,0)
                         B929 (-P B929=0,0,0)

バイナリエディト機能(-B)とパッチ機能(-P)を使って「DEC A」を「NOP」に変えてしまいましょう。

n80の場合は、パターンサーチでも、直接のアドレス指定でも、どちらでもOKです。

 

  t88tool submarine.n80 -B ship減らない.n80 -P /3D,32,07,B7/=00
  t88tool submarine.n80 -B ship減らない.n80 -P B6C6=00

 

d88ファイルの場合は、必ず、パターンサーチして書き換える必要があります。

 

  t88tool submarine.d88 -B ship減らない.d88 -P /3D,32,07,B7/=00

 

t88ファイルの場合は、チェックサムも変更する必要があるので、簡単にはできないです。 どうしてもやりたい人は、書き換えた分だけチェックサムを補正などして下さい。

 

バイナリエデイト機能(-B)ではなく、通常のファイル作成時に、パッチコマンドを適用することも可能です(アドレス指定、パターンサーチ両方可能です)。

 

  t88tool submarine.cmt -P B6C6=00     …cmt→d88変換時にパッチ当て

  t88tool submarine.cmt -n -P B6C6=00    …cmt→n80変換時にパッチ当て

  t88tool submarine.cmt -M -P B6C6=00    …cmt→cmt変換時にパッチ当て

 

ちなみに、パッチ情報は、アセンブラで記述することも可能です。この場合、各命令末に「;」を付けて下さい (16進数は先頭に「0」を付けて、最後に「H」を付けて下さい)。

 

  t88tool submarine.d88 -B ship減らない.d88 -P "/DEC A; LD (0B707H),A;/=NOP;"

 

また、「d88」キーワードを追加すると、位置を一意に決定できる最小(4以上)のパターンを表示することができます。

 

  t88tool -Bd ship5.n80 ship4.n80 ship3.n80 d88

 

  B707 : 04->03->02 : 4->3->2
   ( -1) DEC A; LD (B707),A  : 3D,32,07,B7 : B6C6 (-P B6C6=00)
       -> (-P /3D,32,07,B7/=00) (for d88)

   (all) LD (B707),A      : 32,07,B7  : B6C7 (-P B6C7=0,0,0)
                         B929 (-P B929=0,0,0)

これで、魚雷にやられても船は減らなくなりました。

 

(ship減らない.d88を起動)

 

なお、雑誌等が残っており、ワークエリアのアドレスがすでにわかっているような場合には、ワークエリアのサーチは必要なく、 直接、アドレスを指定可能です(複数指定可)。 指定されたアドレスのアクセス場所を探して表示します。
この時、n80ファイルは1つだけでOKです。

 

  t88tool submarine.n80 -Bd B707

 

レベル3 シップ数の初期値を変更する

 

 解析結果を見ると、B6C7以外に、B929でも、B707への書き込みが行われていることがわかります。

 

 B707 : 4->3->2 : 04->03->02
  ( -1) DEC A; LD (B707),A : 3D,32,07,B7 : B6C6 (-P B6C6=00)
  (all) LD (B707),A     : 32,07,B7   : B6C7 (-P B6C7=0,0,0)
                       B929 (-P B929=0,0,0)

 

このままでは何も分からないので、「disasm」キーワードを追加して、周辺の逆アセンブラ表示を行ってみます。
(15行分表示しますが、範囲がせまければ、「disasm30」などとして増やして下さい。)

 

  t88tool -Bd ship5.n80 ship4.n80 ship3.n80 disasm

 

    <around B929> 

    CALL M,08E32H           ;B91A : FC 32 8E
    OR L                    ;B91D : B5
    LD A,004H               ;B91E : 3E 04 
    LD (0B58FH),A           ;B920 : 32 8F B5 
    LD HL,00000H            ;B923 : 21 00 00 
    LD (0B6A0H),HL          ;B926 : 22 A0 B6 
    LD (0B707H),A           ;B929 * 32 07 B7 
    RET                     ;B92C : C9 
    LD A,000H               ;B92D : 3E 00 
    LD HL,0B7CDH            ;B92F : 21 CD B7 
    LD B,00CH               ;B932 : 06 0C 
    LD (HL),A               ;B934 : 77 
    INC HL                  ;B935 : 23 
    DJNZ 0B934H             ;B936 : 10 FC 
    RET                     ;B938 : C9 
    CALL 0B870H             ;B939 : CD 70 B8

 

間に他の命令が入っていたので自動では検出できませんでしたが、B91EでAレジスタに4を入れていることがわかります。
どうやら船の初期数=5を設定しているようです。
ここを、変えることで、船の初期数を変更することが可能です。

 

  t88tool submarine.n80 -B ship_9.n80 -P B91F=08
  t88tool submarine.d88 -B ship_9.d88 -P /B6,32,07,B7/-9=08

 

パターンマッチング用のパッチコマンドは、「d88」キーワード指定時に表示されます。

 

  t88tool -Bd ship5.n80 ship4.n80 ship3.n80 d88

 

ship_9.d88をロードするだけで、最初から船の数が9隻になっています。

 

ちなみに、n80ファイルのB707を直接書き換えても、うまくいきません。
ゲーム起動時に初期化されてしまうからです。

 

  t88tool submarine.n80 -B ship_9.n80 -P B707=08   …失敗例

 

※逆アセンブラリストを見ると、B920で、初期値の4をB58Fにも設定していることがわかります。 ここは、最大魚雷数になっているようで、増やすと難易度が上がってしまいます (船を9隻にすると、最初から魚雷が9発来ます)。

ここは、今回の改造方法の限界となります。

 

レベル4 PATファイルを使って試してみる

 
 -Bd オプションを使って解析する度に、自動的にpatch.patファイル(実ファイルの例)が生成されます。
この時にできたpatch.patファイルを改造版(pc8801ma改、または、M88改+)にドラッグ&ドロップするだけで、パッチの効果を即座に確認することができます。
(pc8801ma改を使う際には、同じサイトにあるpat.dllを同じフォルダに置いて下さい)
M88改+は「PAT」メニュー。pc8801ma改は「Control」「Patch」です。
複数のパッチ候補がある時には、順番にパッチを試してみて、希望の動きになるパッチを探し出して下さい。
 
(pc8801ma改の例)
 
(M88改+の例)
 
4番目のパッチが、B707の値変更パッチです(パッチによって変更されたことがわかるように適当に7を設定しています→表示上は8隻になります)。
5番目のパッチが、B707のデクリメント命令を無効にするパッチです。こちらは、プログラムそのものを書き換えてしまっていますので、オフにする時には、6番目の「->OFF」をチェックして下さい。プログラムを元の状態(デクリメント命令)に戻します。
※5番のチェックをはずしただけだと、船が減らないままなので、ご注意下さい。
 
希望のパッチが見つかれば、メニューに表示されているパッチコマンド(-P B6C6=00とか)をそのまま使って、-Bオプションで、ファイルのバイナリ書き換えが可能です。
 
patch.patファイルはテキストファイルですので、関係無いパッチを削除して、表示(#で始まる行)をわかりやすくするなどして、そのまま PATファイルとして使ってもOKです。
 
submarine.patの例)(実ファイル
 
patch.patは毎回上書きされてしまうので、残したい時には、ファイル名を変えて下さい。
「プログラム名+.pat」とすることで、d88ファイル読み込み時に、同時に読み込まれるようになります。

patch.patファイルの中身には、必要最低限の改造情報が書いてあります。
1行目はメニュー表示用文字列の右側にアセンブラが続いており、
2行目のコメント文として、d88用のパターンマッチを使ったパッチコマンド(-P /3D,32,07,B7/=00)が書いてあります。

#-P B6C6=00(-1)onB707 ; DEC A ;B6C6 : 3D
;-P /3D,32,07,B7/=00 (for d88)

パターンマッチコマンドについては、「d88」キーワードを追加することで画面に表示することが可能なのですが、patch.patを見れば両方のパッチがわかるようになっています。
 
n80ファイルをうまく取ることができれば、かなりの確率で正しいパッチ候補が表示されると思います。
複数候補が出てきても、PATファイルを使うことで、簡単に試してみることが可能ですので、いろんなゲームを試してみて下さい。
 

レベル5 無敵モードを作る

 

 ここまでで、船の数を増やしたり、魚雷にやられても減らなくしたりすることができましたが、 そもそも魚雷にやられない(無敵モード)を作ることを考えてみます。

t88toolだけでは無理なので、X88000の「実行ログ記録」機能を使います。

(改造版ではうまく動かなかったので、本家X88000を使って下さい)

X88000で、submarine.d88を起動し、下記のように操作します。

操作は全て、「デバッグ」メニューの中にあります。

 

1.X88000フォルダにDebug.logができていたら、削除する(重要!)
2.「メインCPUデバッグ」をオンにした後、「デバッグ実行」でゲームを再開する。
3.「実行ログ記録」をオンにする(ログ取り開始)
4.やられないように遊ぶ(やられてしまったらDebug.logを削除して最初からやり直し)
5.「実行ログ記録」をオフにする(ログ取り停止)
6.「Debug.log」のファイル名を「Safe.log」にリネーム(名前の変更)する

7.「実行ログ記録」をオンにする(2個目のログ取り開始)
8.今度はわざとやられる(できるだけやられた瞬間だけを記録するようにする)
9.「実行ログ記録」をオフにする(ログ取り停止)
10.「Debug.log」のファイル名を「Crash.log」にリネーム(名前の変更)する

 

(X88000で実行ログ記録中の状態)

 

・巨大なログファイルができますので、ログ取得時間はできるだけ短くして下さい。
・改造ポイントを絞りこむために、4のログはいろいろなパターンを含んでいる必要があります。
・8のログは、やられた一瞬だけのログにすることで、改造ポイントを絞り込めます。

 

X88000フォルダ内の「Safe.log」と「Crash.log」をt88toolのある場所にコピーして下さい。
このログをt88toolで解析します。n80ファイルも1つだけ指定して下さい。

 

  t88tool -Bd submarine.n80 Safe.log Crash.log

 

ちなみに、logファイルのファイル名は「.log」で終われば、何でも構いません。
最初のログファイルをやられないログ、2番目のログファイルをやられた時のログとして扱います。

画面に、無敵改造の候補が表示されます。

 

    [Safe.log (1) 1038] 1038
    [Crush.log (1) 594] 594
    <Binary Diff Mode>

    ?(-P B6C1=18) B6C1(90,88)     JR NZ,0B6FAH     ;B6C1 : 20 37
    B6C3(0,1) *     LD A,(0B707H)           ;B6C3 : 3A 07 B7
    B6C6(0,1) *     DEC A                   ;B6C6 : 3D
    B6C7(0,1) *     LD (0B707H),A           ;B6C7 : 32 07 B7

 

かっこ内の表示は、アドレス(Safe.logの回数,Crash.logの回数)です。
直前のB6C1までは何回も来ているのに、B6C3以降は、魚雷にやられてからの1回しか来ていないことがわかります。
しかも、B6C1は、条件ジャンプ命令です(JR NZ,0B6FAH:20,37)。
ということで、この命令を無条件ジャンプ(JR 0B6FAH:18.37)に変えて、絶対に、B6C3に来ないようにすることで、 無敵化ができる可能性があります。

左上の表示「?(-P B6C1=18)」が、パッチコマンドです。-Bコマンドと一緒に使って下さい。

 

  t88tool submarine.n80 -B 無敵.n80 -P B6C1=18

 

上記のバイナリパッチで、B6C3に絶対来ないようにした所、予想通り、絶対にやられないようになりました(無敵モード完成)。

 

(無敵.n80を実行。魚雷が当たっても爆発しません)

 

改造ポイントとパッチコマンドは、下記のような考え方で候補を表示しています。

 

1.やられ処理の1行前の条件付き分岐命令は、無条件に分岐させて、処理からそれるようにする。

   JP ??:条件ジャンプ(C2, CA, D2, DA, E2, EA, F2, FA)
        →無条件ジャンプ(C3)

   JR ??:条件相対ジャンプ(20, 28, 30, 38)
        →無条件相対ジャンプ(18)

   RET ??:条件リターン(C0, C8, D0, D8, E0, E8, F0, F8)
        →無条件リターン(C9)

2.やられ処理に飛んでくる条件付き分岐命令は、NOPに変えて飛んでこなくさせる。

   JP ??:条件ジャンプ(C2, CA, D2, DA, E2, EA, F2, FA)
        →NOP×3(00,00,00)

   JR ??:条件相対ジャンプ(20, 28, 30, 38)
        →NOP×2(00,00)

   CALL ??:条件コール(C4, CC, D4, DC, E4, EC, F4, FC)
        →NOP×3(00,00,00)

3.やられ処理の先頭をRET(C9)にする。(topキーワードを指定した時のみ)

 

通常は、候補が複数表示されます。この場合は、出力されるpatch.patファイルを使って、無敵になるポイントを探し出して下さい。

また、この例では、たまたま、うまく行きましたが、B6C3に来ないようにしただけだと、他の場所に流れてゲームの動作がおかしくなってしまう場合もあります。
その場合に、B6C3にジャンプした上で、処理の先頭でリターンするとうまく動くゲームがあります(何も考えずにリターンするので、動く確率は低いです)。
「top」キーワードを追加することで、このようなパッチコマンド(-P B6C3=C9)も表示されるようになりますので、試してみて下さい。B6C3には来るようにした上ですぐリターンします。

 

  t88tool -Bd submarine.n80 Safe.log Crash.log top

 

  ???(-P B6C3=C9)  B6C3(0,1) *     LD A,(0B707H)           ;B6C3 : 3A 07 B7

 

候補がたくさん出すぎている時には候補の絞り込みが必要です
表示されている候補は、Crash.logの命令からSafe.logの命令を引いたものです。
  1.Safe.logに魚雷にやられる前の全ての命令が含まれるようにする
  2.Crash.logを魚雷にやられた瞬間だけの命令が含まれるようにする
ことで表示される候補を減らすことができます。

後から、取得したDebug.logもどんどん追加していって構いません。
Safe.logについては「+」で追加していって下さい。すべてのログを結合したものになります。
Crash.logについては「*」で追加していって下さい。すべてのログに共通する処理に絞り込みます。

 

  t88tool -Bd submarine.n80 Safe1.log+Safe2.log+Safe3.log Crash1.log*Crash2.log

 

「+」「*」もついていない時には、最後のファイルのみをCrashファイルとして扱い、
それ以外をSafeファイルとして扱います。

 

  t88tool -Bd submarine.n80 Safe1.log Safe2.log Safe3.log Crash.log
= t88tool -Bd submarine.n80+Safe1.log+Safe2.log+Safe3.log Crash.log

 

ちなみに、記号は下記からつけました。
  「+」:和集合ということで。AまたはB、A∪B
  「*」:積集合ということで。AかつB、A∩B

 

それでも複数の候補が残る時には、各ブロックの先頭(B6C3など。B6C1ではないので注意)をX88000の「デバッグ」「ブレークポイント」に全部設定して動かすと絞りこむことができます。
魚雷にやられていないのにブレークするポイントは、対象外です。
ブレークポイントから削除してから、「デバッグ実行」でゲームを再開して下さい。
魚雷にやられた時に一番最初にブレークするポイントが改造すべきポイントの候補になります。

 

いろいろやっても、改造ポイントが見つからない場合には、下記の命令でCrash.logで実行した命令を逆アセンブル表示しますので、 テキストファイルに落として、マシン語の解析をして下さい。

やられた時にどこを取っているかが回数でわかるので、通常のマシン語解析より、はるかに楽です。

 

 t88tool -Bd submarine.n80 Safe.log Crash.log disasm > result1.txt  

        …Crash.logの新規命令のみ逆アセンブル表示

 t88tool -Bd submarine.n80 Crash.log disasm > result2.txt  

        …Crash.logの全命令を逆アセンブル表示

 t88tool -Bd submarine.n80 Safe.log Crash.log B6B0-B6FF > result3.txt  

        …B6B0〜B6FF番地の逆アセンブル表示を追加

 

 BEEP音をPSG音に変更する

 

 当時、PCG-8100を持っていましたが、PSG(サウンド)部分しか使っていませんでした。

今風太さんのゲームにはBEEPを使った音楽や効果音が付いていますが、これをPSG音に変更してみます。

まずは、BEEP音のサブルーチンを探します。X88000を使って、下記の2つのログを取って下さい。

 

  nobeep.log:BEEPが鳴っていない時のログ

  beep.log :BEEPを鳴らせた時のログ

 

その後、下記のコマンドで、BEEPルーチンを探し出します。

 

  t88tool -Bd sumbmarine.n80 nobeep.log beep.log disasm

 

表示された逆アセンブラリストの中で、OUT命令を探すと、それらしいサブルーチンが見つかりました(B66E〜B692)。

サイズを増やさないように注意しながら、PSGの音を鳴らすように改造していきます。

テンポが変わらないように、時間待ちのNOP×3個をPSGのためのOUT文に変更しました。

その他、初期設定などを追加して、サイズを変えずに、PSGを鳴らせるようになりました。 (アセンブラソース、実物→psg.asm

下記のようにして、B66EからのBEEPサブルーチンをPSG用のサブルーチンに入れ替えます(アセンブラソースファイル名を@で囲って下さい)。

 

  t88tool submarine.n80 -B PSG.n80 -P B66E=@psg.asm@

 

 

 無敵モードをON/OFFする

 

 常に無敵モードにするのではなく、カナキーが押されている時のみ無敵になるように改造してみます。

前回までの解析で下記のことがわかっています。

B6C1番地の条件分岐で、

    魚雷にあたっていない時は、B6FA番地に飛ぶ。

    魚雷に当たった時には、そのままB6C3番地の処理に進む。

 

カナキーの状態を見て、カナキーが押されている時には、B6C3からB6FAに飛ばすことで、カナキーが押されている時のみ無敵になります。

カナキーの検出ルーチンを置く場所が無いので、別途、A000番地に置くことにします。こんな感じの流れになります。

 

 1.B6C3番地からA000番地にジャンプする。

 2.カナキーの状態を見る(ポート08Hの第5ビットです)

 3.カナキーが押されていれば、B6FAにジャンプする(無敵になる)。

 4.カナキーが押されていなければ、B6C3に書かれていた処理を行った後、B6C6に戻る(魚雷にやられて一隻減る)。

 

カナキーによるON/OFFがとても便利だったので、自動でkana.asmを作成できるようにしてみました。

「kana」キーワードで、カナキー検出ルーチンの置き場所を同時に指定して下さい

改造ポイントが複数ある場合には、該当するアドレスを一か所指定して下さい。

 

  t88tool submarine.n80 -Bd B6C3 kana=A000

 

A000番地からのアセンブラルーチンです。実物はこちら→kana.asm

※1行目のコメント文は、A000にジャンプするためのパッチ情報ですので、削除しないで下さい。

 

カナキー検出ルーチンを使った改造(アセンブラルーチンの追加)は、下記のようにします。

 

  t88tool submarine.n80 -B muteki_kana.n80 -P @kana.asm@

 

d88ファイルの場合は、元のサブマリンのマシン語の領域外に、新しいカナキー検出ルーチンを追加するので、バイナリバッチモード(-Bオプション)は使えません。

元のt88ファイルから、d88ファイルに変換する際に、アセンブラルーチン(kana.asm)を追加して下さい。

 

  t88tool submarine.t88 kana.asm -# @1,2,gBA92 -f kana.d88

 

    submarine.t88   →オリジナルのサブマリン

    kana.asm     →カナ検出ルーチン(アセンブラソース)

    -# @1,2,gBA92   →自動キー入力(ファイルを2つロードしてBA92から実行)

    -f kana.d88    →出力ファイル名をkana.d88に変更

 

ちなみに、カナキー以外のキーにも対応しています。

キーワードとして、caps、ctrl、shift、graphを使って下さい。

    例:game_caps=C000

また、カナキーチェック部分自体を改造すれば、最終面だけパッチが有効になるなどの制御も可能になります。

 

 PC-8001mkII,PC-8801の場合

 

 PC-8001mkIIやPC-8801のゲームに関しても、基本的には同じやり方で改造が可能です。

ただし、n80ファイルは、8000〜FF3Fまでの情報しか入っていません。

PC-8001mkIIやPC-8801では、RAMが64KB(0000〜FFFF)に増強されています。

n80ファイルだと、追加部分(0000〜7FFF)のマシン語の解析ができないことになります。

この場合は、0000〜FFFFまでのメモリイメージを使用する必要があります。

j80で、「Utilities」「Save N80 File...」のかわりに、「Utilities」「Dump RAM」を使って下さい。j80のdebugフォルダ(Release6.112以降は_dmpフォルダ)にmain.mem(64KB)が書き出されます。

 

謝辞

 

PC-8001/PC-8801関係の皆さまに感謝いたします。

 

nonchanSOFT様(当時の今風太様)(ゲーム作成&公開、サブマリン改造許可)

cisc様(M88作成&公開)

Manuke様(X88000作成&公開)

HAL 8999様(j80作成&公開)

武田様(pc8801ma作成&公開)

nenecchi?様(M88改+、pc8801ma改作成&公開)

久保ちゃん様(パッチ機能提案&試用)