ベーシックマスタレベル3でFLEX9を動作させる作戦の続きです。
これまで別々にロードしていたFLEX.COR, コンソールドライバー, ディスクドライバを合体させてFLEX.SYSにして一発でメモリにロードできるようにしたいと思います
FLEX.SYSに合体
こちらで、SBC同等ですが一応FLEX9が使えるようになっていますので、王道のAPPENDコマンドでFLEX.SYS化してみました
S1エミュのデバッガで手作業でセットしていたバンク切換と割込みベクタセット、ドライブ番号指定、FLEX9のエントリアドレスを変更しておきます
▼ローダの変更
▼コンソールI/Oドライバの変更
▼ディスクドライバの変更
▼FLEX.SYSのエントリアドレスをレベル3のモニタからFLEX9のスタートアドレスに変更
①FLEX.SYSに合体させたいドライバが動作することを確認しておく
面倒でもこれをしておかないと合体に問題があるのか、ソフト自体がダメなのか切り分けしにくいのでこの作業は必須ですね^^
②ドライバーソフトのバイナリレコードを用意する
AS63_DOSのクロスアセンブラでアセンブルすると前後にFBASIC用のデータが付いているのでそれをカット
それぞれ最初の5バイト、最後の6バイトを削除
F-BASICのファイルフォーマット詳細はこちら
③APPENDに必要なAPPENDコマンドとDUMPやDSP等のコマンドをD88イメージにインポート
④不要なデータを削除したバイナリを DRIVER.BIN, CONSOLE.BINをFLEXのバイナリレコード形式($02)でインポート
old68funさん作成のFlexDrvWinを使いFLEX.CORの入ったD88イメージにドライバ類のバイナリをインポートします
ドライバはFLEXのバイナリレコードとしてインポートするので開始アドレスを指定してインポートします。
ディスクドライバのDRIVER.BINをロードアドレス $DE00でインポート。
コンソールI/OドライバのCONSOLE.BINをロードアドレス$D370でインポート。
⑤上記のファイルをインポートしたD88ファイルをドライブ1にセットし、FLEX9を起動
⑥APPENDコマンドでFLEX.SYSを作成
APPEND FLEX.COR,DRIVER.BIN,CONSOLE.BIN,FLEX.SYSでFLEX.SYSが作成されました。
⑦FLEX.SYSが作成された先頭トラックとセクタをDUMPコマンドで確認
FLEX.SYSはトラック2, セクタ5から配置されていました。
⑧FLEXローダで先頭トラックとセクタを指定してメモリにロード
(本来はローダのコードを書き換えるのではなくLINKコマンドで指定したトラックとセクタから起動するのが正しいローダだと思いますが、まだそこまでたどり着いていません・・・)
こちらのローダのトラックとセクタを変更しアセンブル後ローダを実行
⑨E FFE8 78 で拡張RAMに切り替えてメモリ内容チェック
C700付近
コンソールI/O付近
ディスクドライバ付近
無事、目的の場所にFLEX.CORとドライバがロードできました^^
⑨FLEXを起動
FLEX.SYSに全てを合体させたのでローダを実行するだけで起動できるようになりました^^
DN DEBUG.MOT
DL 0
U 4400
R PC 4400
T
トレース実行で数ステップ確認しながら進めてGで実行
無事起動しました^^
相変わらずのSBCj状態ですが、メモリへのロード作業は簡単になりました。
次はローダーをトラック0に置いてコールドブートローダによる直接起動ですね^^
現状、256バイトを超えてしまったので起動するかどうかが不安です・・
よく書籍などでFLEXやCP/M移植でOSが動作するようになると作業の手間は格段に楽になるという記事を見ますがAPPENDコマンドが動作するとバイナリエディタでの大変な作業がなくなりました^^
そんな王道のAPPENDでFLEX.SYSを生成した記録・・・
ベーシックマスタの情報は是非こちらからどうぞ → Amazon