BASICのフリーエリアを減らすことなくMZ2000_SDからバイナリデータをロードできるようにする

■各BASICの書き換え方法

まずこちらから「mz2000sdPatch###.zip」をダウンロードします。(###はバージョン番号)
ソースファイルはこちら

・ MZ-80B対応 SB-5520 BASIC
(1) PatchGUI.exeを起動します。
(2) 設定jsonファイルに「sb-5520_minimum_patch.json」を選びます。
(3) 元になるmztファイルに「SB-5520」のMZTファイルを選びます。
(4) 作成するファイルのファイル名が「…(SD).mzt」となります。「…(MINSD).mzt」とでも変更してください。
(5) 実行するボタンを押します
ファイル名は作成するファイルで指定したファイルになります。

・ MZ-2000/2200対応 MZ-1Z001 BASIC
(1) PatchGUI.exeを起動します。
(2) 設定jsonファイルに「mz-1z001_minimum_patch.json」を選びます。
(3) 元になるmztファイルに「MZ-1Z001」のMZTファイルを選びます。
(4) 作成するファイルのファイル名が「…(SD).mzt」となります。「…(MINSD).mzt」とでも変更してください。
(5) 実行するボタンを押します
ファイル名は作成するファイルで指定したファイルになります。

・ MZ-2000/2200対応 MZ-1Z002 COLOR BASIC
(1) PatchGUI.exeを起動します。
(2) 設定jsonファイルに「mz-1z002_minimum_patch.json」を選びます。
(3) 元になるmztファイルに「MZ-1Z002」のMZTファイルを選びます。
(4) 作成するファイルのファイル名が「…(SD).mzt」となります。「…(MINSD).mzt」とでも変更してください。
(5) 実行するボタンを押します
ファイル名は作成するファイルで指定したファイルになります。

■バイナリデータロード方法
通常BASICでは
LOAD "FILENAME"
でバイナリファイルをロードできるがこの書き換え後MZ2000_SDから読み込む場合は以下のようになります。

・ MZ-80B対応 SB-5520 BASIC
LIMIT$####:F$="FILENAME":USR($49EE, F$)

・ MZ-2000/2200対応 MZ-1Z001 BASIC
LIMIT$####:F$="FILENAME":USR($4C62, F$)

・ MZ-2000/2200対応 MZ-1Z002 COLOR BASIC
LIMIT$####:F$="FILENAME":USR($5D22, F$)

(注)
####は読み込むアドレス-1
例えば0B000h~に読み込むならLIMIT$AFFFにする

■改造後のメモリマップについて
SB-5520 MZ-1Z001 MZ-1Z002 備考
モニタプログラム 0000h~0129Fh 0000h~0129Fh 0000h~0129Fh
BASICインタプリタ 012A0h~049EDh 012A0h~04C61h 012A0h~05D21h
MZ2000_SDからのロードプログラム格納 049EEh~? 04C62h~04CFFh(?) 05D22h~? (使用可能サイズ調査中)
LIMIT値、LIMITMAX値 ? 04D08h~04D0Bh 05E08h~ (調査中)
キー入力バッファ ? 04D0Dh~04DADh 05E0Eh~05EADh (調査中)
36?、37?個の変数領域スタック? 04F4Eh~? 0524Eh~? 0634Eh~? (調査中)
BASICプログラム 0515Ch~ 0545Ch~ 0655Ch~
変数領域スタックへのポインタ? BASICプログラムの後~ BASICプログラムの後~ BASICプログラムの後~ (調査中)

通常MZ-80B/2000/2200のBASICは0000h~129Fhまではモニタプログラム12A0h~はBASICインタプリタになります。
BASICプログラムはBASICインタプリタの後のアドレスにロードされますが実はBASICインタプリタとBASICプログラム隙間に140~160バイト程度の未使用領域があります。
詳しいサイズは分からないですが、その隙間にMZ2000_SDからのロードプログラムを入れたのが今回の改造になります。
未使用領域に入れたのでBASICのフリーエリアは全く減りません。
ただロードできるのはマシン語プログラムだけなので今の所何に使えるかと言われてもすぐには思いつきませんw
しかもMZ2000_SDから起動したのが前提になっているのでMZ2000_SDは初期化済みが前提のプログラムになっています。
やってみたらできた…ってだけです。

MZ-1Z001 BASICのフリーエリアを減らすこと無くmz2000_sdからバイナリのロードに成功しました。だからなんだって感じではあるんですが… https://t.co/ljnXB670CP pic.twitter.com/wIKnJB0gZ3

— kuran_kuran (@kuran_kuran) November 23, 2023
戻る