「シャイニングクリスタル」のデバグ方法

(New:1996/1/19)
「シャイニングクリスタル」は、MSX-FAN最終号(1995年8月号)の「ファンダム」に掲載された、ファンタジーロールプレイングゲームです(作者: GOLDEN SOFT)。
「シャイニングクリスタル」は、FM音源の制御プログラムにバグがあり、機種によっては立ち上げて間もなく暴走することがありました(自分のがそうでした。僕のマシンはFM関係のバグが多いなあ)。
ここでは、「シャイニングクリスタル」のデバグ方法を書きます。少々面倒ですが、「うちのマシンで動かない」という方は、ぜひお試しください。

※「シャイニングクリスタル」のプログラムの解析、及びデバグ法の考案は私、ビーバー西山が独自に行ったものです。 このデバグ方法はM・FAN編集部にも送りました。


デバグ方法

  1. あらかじめ、MSX-FANの付録ディスクの"SHINING.LZH"を解凍しておく。
    普通に付録ディスクを立ち上げて、メニューから「ふぁんだむ」、「SHINING CRYSTAL」の順に選んでいっても構いません。 この場合、しばらくすると機種によっては暴走しますが、その地点では解凍は終っているので問題ありません。リセットするなりしてください。
  2. 下のプログラムを打ち込み、実行する。
    "DRV-NINI.MCH"というファイルを生成してプログラムを終了します。
    ※このプログラムのダウンロードサービスをしています: "Makedni.bas"ダウンロード
    1 'SAVE"MAKED-NI.BAS
    1000 CLEAR200,&HB2FF:DEFINTA-Z:RESTORE10
    20:SA=&HB300:AD=SA
    1010 READA$:IF A$="*" THEN BSAVE"DRV-NIN
    I.MCH",SA,AD-1:END ELSE POKEAD,VAL("&H"+
    A$):AD=AD+1:GOTO1010
    1020 DATA 3E,01,CD,24,B3,32,5A,B3,3A,37,
    DC,F5,FD,E1,DD,21,13,41,21,38,DC,CD,1C,0
    0,3A,5A,B3,21,00,40,CD,24,00,C3,B0,DD,E5
    ,C5,F5,47,DB,A8,07,07,04,0F,0F,10,FC,E6,
    03,4F,06,00,21,C1,FC,09,F1,47,CB,7E,20,0
    4
    1030 DATA 79,C1,E1,C9,23,23,23,23,7E,07,
    07,07,07,04,0F,0F,10,FC,E6,0C,B1,F6,80,C
    1,E1,C9,00,*
    
  3. "TITLE.BAS"について、以下のようにリストを変えてSAVEし直す。
    1. 1020行の先頭のCLEAR文の第2パラメータを、&HB2FFに変える。
    2. 同じく1020行の末尾の3命令(A=USR1(0): …… :RESTORE1030)を削る。
    3. 以下の行を追加する。
      1025 BLOAD"DRV-NINI.MCH":FORI=0TO2:POKE&
      HDDA0+I,VAL("&H"+MID$("C300B3",I*2+1,2)
      ):NEXT:A=USR1(0):GOSUB1100:RESTORE1030
      
  4. "SETUP0.BAS"について、以下のようにリストを変えてSAVEし直す。
    1. 1060行の先頭のCLEAR文の第2パラメータを、&HB2FFに変える。
    2. 以下の行を追加する。
      1085 BLOAD"DRV-NINI.MCH":FORI=0TO2:POKE&
      HDDA0+I,VAL("&H"+MID$("C300B3",I*2+1,2)
      ):NEXT
      
これでデバグ完了です。 以前と同様に"TITLE.BAS"を実行すれば、ゲームが始まります。
さあ、なるとさんのかっこいいしらべにのって、シルビスを駆け巡ろう!

デバグの考察

「MSXテクニカルガイドブック第四版」(アスキャット、タケル販売)によると、 FM BIOSのINIOPLをインタースロットコールした場合、戻ってきた後に適切な処置をとらないと、 機種によっては暴走する可能性があるそうです(詳しくは「MSXテクニカルガイドブック第四版」参照)。 「シャイニングクリスタル」も、このFM音源初期化のところで引っかかっていたようでした。
このページで紹介したデバグ方法をまとめると、まず改良型FM音源初期化プログラムを用意し(これが"DRV-NINI.MCH"にあたる)、元のFM音源初期化プログラムのあったところから、改良型FM音源初期化プログラムにジャンプするようにし、それから元のプログラムの続きに戻るようにしています。
MSXの適当手帳 MSX駅 西山駅