2011.8.29

X1用BASIC CZ-8FB01用自動HI RESO対応パッチ


X1turbo購入後も開発ツールの利便性の問題でCZ-8FB01やX1版S-OSを使う機会は多かったです。
特にWIDTHやPCGを動的に切り換えるBASIC環境ではDEFCHRスイッチによる24.8KHz対応は不便過ぎました。
そこでHI RESOスイッチを判定してCRTC設定値にパッチを当ててHI RESO化するプログラムをStartup.Basに組み込んで起動時後に対応させていました。
そのコードをディスクからサルベージしてみました。
CZ8FB01_HIRESO.BAS

PCG定義もウェイトカウントを調整して定義出来るようにしてあるようです。
コメント内にCZ-FB01 Ver.2.0用のコードもありますが、動くのかな?

JODAN-DOS用自動HI RESO対応パッチ

基本的には上のBASIC用と同様の処理をアセンブラで書いた物ですが、機種チェックをしてないのでノーマルX1では正しく動作しない場合があります。
JODAN-DOSのエントリポイントは0xD000ですが、0xD750へエントリするとパッチが適用されます。

JODAN_HIRESO.TXT

JODAN-DOS用メモリキャプチャ

JODAN-DOSは0x8000-0xFFFFのメモリアドレスをGRAMの同アドレスに仮想化してあるので、8000H-FFFFHのメモリをGRAMへコピーしておけば、IPLスイッチを押す前のメモリ全体をキャプチャできます。
しかし、JODAN-DOS起動後では、既にJODAN-DOSの実体0xD000-EFFFHは失われてしまいます。

この機能をIPLレコード内に格納して0xFE00-0xFFFFH以外をキャプチャできるようにしたのが
JODAN_MEMSAVE.TXT
です。
仕組みとしては、まずIPLからIPLレコードとして読み込まれた0xFE00-0xFEFFへ、IPLレコード自身をプログラムとして上書きロードして0xFE80へジャンプさせます。
メモリの0x8000-0xFFFFをGRAMに転送後、正規のIPL情報(0xFEE0-0xFEFF)でIPL情報(0xFE00-0xFEFF)を更新して、IPLのロード開始部分へ処理を戻しています。
今ではエミュレータ、当時もICEがあれば不要な機能ですが、スタンドアロン開発だったのですごく重宝しました。
このパッチを思いつく前は、起動ディスクを8インチ1Sに設定すると'M'キーでモニタを起動したときにメモリがクリアされない裏技で、'W'コマンドでディスクに直接書き込んでいました。

FDD対応 CZ-8CB01

カセット版のソフトをディスク対応のCZ-8FB01で動作させるとフリーエリア不足で動作しない物がありました。
そこでCZ-8CB01がサポートしているEMMはFCB構造が2D-FDと同じなので、EMMリードルーチンをIPL-ROMのDISK READに無理矢理繋いで2D-FDDを読めるようにしました。
自前のパッチは喪失しましたが、他の方が行ったもので、BASICの起動メッセージがCZ-8EB01となっていた気がします。
CZ-8FB01 Ver.2.0発売後は、NEW ON命令とプログラムコードの置き換えで大体は対応できましたけど。