CP/M-80でのBIOSエミュレートによるMBASICの起動 [Z80]
Twitter のタイムラインで CP/M-80 版 MBASIC は BIOS のコンソール入出力機能のみでも基本動作はするという情報を見かけたので確認して見ました。
最近使っている 20MHz 動作の Z80PicCompactの開発機は CP/M が自動起動する設定にしているので、「CP/M用hexローダーの製作」の記事で紹介した HexLoader を使ってヘキサファイルをロードして実験しました。
MBASICを起動するためにはBIOS のコンソール関連の実装以外に下記の項目への対応が必要でした。
上記の項目を対応することで無事 MBASIC が起動するようになりました。
殆ど処理が無いですが、ソースは下記になります。
Twitter に投稿した動画付きメッセージを貼っておきます。上記の BIOS エミュレータ+ MBASIC 本体のHEXファイルをロードすることで MBASIC を起動しています。
BIOS エミュレータの WBOOT は HALT するようにしてあるので CP/M に戻るために元々の WBOOT(0xfa03)をコールしています。
最近使っている 20MHz 動作の Z80PicCompactの開発機は CP/M が自動起動する設定にしているので、「CP/M用hexローダーの製作」の記事で紹介した HexLoader を使ってヘキサファイルをロードして実験しました。
MBASICを起動するためにはBIOS のコンソール関連の実装以外に下記の項目への対応が必要でした。
- BDOS コールアドレスの設定
MBASIC は BDOS コール(0005H)部分の BDOS アドレスを参照して、BDOSCCP 領域も使用するので BDOS コール用のジャンプ命令を設定する必要がある。
★修正 2023/05/17
MBASIC はディスクアクセス機能が必要なので BDOS 領域は壊さないことを確認しました。
- コマンドパラメータ無しの設定
MBASIC は起動時に 0080H 部分にあるコマンドパラメータを参照してパラメータがある場合、ソースをロードしようとします。0080H を 00H に設定することでパラメータが無い状態にします(この部分は上記の HexLoader が使用するメモリなのでこのために HexLoader をアップデートしました)
上記の項目を対応することで無事 MBASIC が起動するようになりました。
殆ど処理が無いですが、ソースは下記になります。
CP/M BIOS エミュレータのソース |
|
Twitter に投稿した動画付きメッセージを貼っておきます。上記の BIOS エミュレータ+ MBASIC 本体のHEXファイルをロードすることで MBASIC を起動しています。
BIOS エミュレータの WBOOT は HALT するようにしてあるので CP/M に戻るために元々の WBOOT(0xfa03)をコールしています。
CP/M-80版MBASICはBIOSのコンソール入出力機能のみでも基本動作はするようなので実験してみました
— skyriver (@wcinp) May 16, 2023
BIOSのソースが手元にあるので環境構築は容易です
BDOSコールアドレスを参照して再利用している点と0080Hを00Hにしてアーギュメント無し状態にする必要があることに対応することで立ち上がりました pic.twitter.com/e60gH9sgE6
コメント 0