fMSX98パッチ

fMSX98 のパッチ集です。

追加(修正)する機能について


必要な物

実行ファイルにパッチを当てる場合

ソースにパッチを当てる場合

パッチを当てる

実行ファイルにパッチを当てる場合

自己差分プログラムを実行します。

ソースにパッチを当てる場合

1. ソースファイルにパッチをあてる

fmsx98 のソースを展開したディレクトリで patch コマンドを実行してパッチをあてます。
例)patch<fmsx.pat

2. pcatsvga.c の補完

ver1.2k のソースアーカイブには、fmsx\src\pcat\pcatsvga.asm が存在しません。その為に、ダミーのファイルを用意します。と言う訳で、-wide を指定しても画面には何も表示されません。

3. コンパイル

ソースにパッチをあてただけでは動きませんので、各コンパイルオプションを指定してコンパイルしましょう。

コンパイルのオプションを指定する場所

コンパイルオプションを書く場所は、各 makefile の CFLAGS です。すべての makefile に追加したいパッチのオプションを書けば確実にパッチが有効になりますが、そんなの面倒だって人は、以下の表を参考にして記述してください。○のある makefile にオプションを指定してください。

パッチ指定するオプション./makefile./pc98/makefile./pcat/makefile
DEBUG キー入力修正パッチ -DDEBUG_KEY_PATCH ××
DEBUG NEG 表示修正パッチ -DDEBUG_NEG_PATCH ×
interlace 修正パッチ -DINTERLACE_PATCH ××
screen3 修正パッチ -DSCR3_PATCH ×
PCM パッチ -DPCM_PATCH
SPRITE修正パッチ -DSPRITE_PATCH ××
OPL3 修正パッチ -DOPL3_PATCH ××
PAC パッチ -DPAC_PATCH ××
ADLIB パッチ -DADLIB_PATCH ××
MODEX もどき パッチ -DMODEX_PATCH ××

お約束

このページ上にあるパッチの動作の保証は誰もしてくれません。パッチ後の異常な動作について、オリジナルの作者等に質問等などは行わないようにしてください。


DEBUG キー入力表示修正パッチ(AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DDEBUG_KEY_PATCH を指定してコンパイルしてください。

効果

DEBUG の g コマンド等でステップ毎に DEBUG 画面に落ちてしまう現象を修正。

原因

常に、F9,F10 キーが押されている状態になっていたため。


DEBUG NEG 表示修正パッチ(98,AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DDEBUG_NEG_PATCH を指定してコンパイルしてください。

効果

DEBUG の逆アセンブラで NEG の表示をできるようにします。

原因

名称定義をしていなかった


interlace 修正パッチ(98,AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DINTERLACE_PATCH を指定してコンパイルしてください。

効果

screen5 や 8 で interlace が正常に動作しない点を修正したつもり(pcatsvga.asm が無いので確認してません。98起動するの面倒だし(^^;;)。

原因

アドレス計算のミス


SCREEN3 VDP register #4 修正パッチについて(98,AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DSCR3_PATCH を指定してコンパイルしてください。

効果

screen3 でパターンジェネレータテーブルを切り換えるプログラムへ対応。

原因

画面関連テーブルの SCREEN3/VDP R#4 のマスクが 00h だったのでパターンジェネレータテーブルアドレスを常に 0000h と認識していたため、正常に表示できない場合があった。


SPRITE 修正パッチについて(98,AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DSPRITE_PATCH を指定してコンパイルしてください。

効果

原因

上方向のクリッピング異常は、line=0; が抜けていた為に起こる現象。横方向のクリッピングは、クリッピングできるようにプログラムされていません(高速化の為?)


PCM パッチについて(AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DPCM_PATCH を指定してコンパイルしてください。

効果

turboR 互換の PCM に対応します。 AT互換機 + SB Pro な環境のみ対応しています。98 + SB Pro にも対応できるはずですが、DSP の port address が不明なので・・・。 PCM タイミング用のカウンタは適当なので、サンプリングレートは狂います(一応 iperiod を基準にした 15.75kHz のインクリメント値にしてみましたが・・・)。98ならタイムスタンパを使えば正確に出来そう。 2+以下じゃ BIOS も対応していないので、使えない機能ですね(笑)


OPL3 修正パッチについて(AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DOPL3_PATCH を指定してコンパイルしてください。

効果

時々音程が外れる現象を改善します。

やってること

OPLL Reg.10h〜18hで指定された F-Number をシフトして溢れた値を OPL3 Reg.B0h〜に設定しているだけ。


PAC パッチについて(98,AT)

作成方法

パッチを当てた後、コンパイラのオプションに -DPAC_PATCH を指定してコンパイルしてください。

PAC ROM イメージ

ダミーの PAC.ROM を用意してください。

使い方

起動時に通常のカートリッジの指定と同じ方法で PAC.ROM を読み込むように指定すると、PAC が認識されるはずです。 fMSX98 を終了時に指定された PAC の ROM IMAGE FILE の拡張子を .PAC にしたファイル名で SRAM の内容が保存されます。

PAC.ROM の内容について

バイナリエディタで中を見るとわかりますが、プログラムは何も書かれていません。 PAC を認識させる為の ROM カートリッジのヘッダを記述しているだけです。fMSX98 のプログラム上では、ヘッダが 4Ah,42h('JB') である物を PAC と認識します。 そのうちに、自作のデータ管理プログラムを PAC.ROM に載せる予定はあります(予定は未定です)。

その他

FM-PAC のみ対応している物は 4018h〜 の PAC2 を PAC2OPLL にすると SRAM を使用できるようになる場合があります(英雄伝説等)。プログラムが FM-PAC と認識して何もないエントリをコールする可能性が大きいのでお勧めできませんが・・・。 FM-PAC の ROM IMAGE のヘッダを 4Ah,42h にすると、FM-PAC として使える可能性があります(ってバンク切り換えしなきゃ無理っぽいけど)。 ソースファイル msx.c の FMBIOS.ROM の読み込み部分を変更し、FMBIOS.OBJ の APRLOPLL を PAC2OPLL に変更すると、FM-PAC 相当品(データ管理プログラムは当然ありません)になる可能性があります。


adlib 音源パッチについて(AT)

PC110 に載っている音源は SB Pro 互換ではないので fMSX98-AT で音が出ません。

作成方法

パッチを当てた後、コンパイラのオプションに -DADLIB_PATCH を指定してコンパイルしてください。

使い方

-adlib-adlibfixed と言うオプションが追加されます。-adlib 又は -adlibfixed を指定して起動すると、音が出るはずです。

-adlibfixed を指定すると、チャンネル振り分けを固定します。逆に -adlib を指定した場合は、空いているチャンネルを動的使用します。 SCC を使用するゲームの場合に -adlibfixed を使えば、(理論上では)パフォーマンスが上がるはずです。

-adlibfixed 時のチャンネル割り当て

ADLIB チャンネルMSX 音声
1SCC 1OPLL 1
2SCC 2OPLL 2
3SCC 3OPLL 3
4SCC 4OPLL 4
5SCC 5OPLL 5
6PSG 1OPLL 6
7PSG 2OPLL 7RHYTHM
8PSG 3OPLL 8
9PSG NOISEOPLL 9

たとえば、SCC 1 と OPLL 1 は同時に発音できません。先に発音した方が有効になります。


MODE X もどきパッチについて(AT)

PC110 では fMSX98-AT の SVGA モードがまともに動きません(泣) 320x200dot モードでは、MSX の画面が全部表示できません(泣)

やってること

Mode13h に変更後、CRTC レジスタを操作して横のドット数を 272dot、縦のドット数を 240dot に設定しているだけです。横幅を 272dot(256dot+左右ボーダー16dot) に設定したので 1 画面分の VRAM が 64Kbyte 以内に収まり、イメージ転送ルーチンの変更が簡単でした。

作成方法

パッチを当てた後、コンパイラのオプションに -DMODEX_PATCH を指定してコンパイルしてください。

使い方

-modex オプションが追加されます。-modex を指定して起動すると、240line 使用します。左側へよってしまうのは仕様って事にしておいてください(操作方法募集中)。