CP/M移植(2)
2024.02.16
とにかくBIOSのソースが曲がりなりにも参照できたのは助かった。これを元にして、修正を加えていった。
ただ、2004年の段階でバイナリから逆アセンブルしてソースを再現することもしていた。なぜかというと、移植後にうまく動かない事があり、疑義が生じたので他機種のBIOSの中身を確認してみたかったから。
結局それは読み込むセクター番号が間違っていただけで(わかるまでにはずいぶん回り道をしたが)、修正したら直った。
MZ-2000の場合、テキストVRAMがD000H~DFFFHになる。画面アクセス時、メインRAMの一部を切り換えてVRAMにしてからアクセスする。
従って、そのアドレス範囲にそのプログラムが存在すれば当然暴走してしまう。
そのため画面表示ルーチンをBIOSの終わりの方に置き、アセンブル後にこれらのルーチンがE000H以降に配置されているか、LSTファイルを確認していた。
画面関係のBIOSはMZ-2000用として全部自作した。
基本的にVRAMへの切り換えと、指定したアドレスへの書込だけだから難しくない。
・画面モードの切り換え(80x25)
・画面クリア
・1文字表示
・コントロールコードの処理(それぞれのコードに対する処理も)
・アドレスの計算(表示位置とVRAMアドレス)
・画面スクロールアップ
・Y座標からVRAMアドレスを求める
・カーソル表示
(カーソルを表示する前に、表示位置にあった文字を保存しておく。カーソル移動した時に、元そこにあった文字を書き戻す)
FDDの読み書きルーチンは、印象としては難しく感じるが、すでに原型があったので意外とラクだった。
ただ、X1用なのでMB8877、MZ-2000はMB8876という違いがあり、データバスの論理が反転している。そこで、FDCとのI/O命令のところにCPLを追加していった。
当然I/Oアドレスも実機に合わせて変更した。
単純な書き換えだけではなく、それぞれが何の動作をしているか、FDCのマニュアルを見ながら理解しコメントを書き加えていった。
結局あとでうまく動かない時に、細かく見直す必要があったから、そのようにしておいて正解だった。
調べる都度、データシートを開いて見るよりも、最初からソースにレジスタのビットの割り付けとか機能をコメントとして書いておくと便利。
ただ、2004年の段階でバイナリから逆アセンブルしてソースを再現することもしていた。なぜかというと、移植後にうまく動かない事があり、疑義が生じたので他機種のBIOSの中身を確認してみたかったから。
結局それは読み込むセクター番号が間違っていただけで(わかるまでにはずいぶん回り道をしたが)、修正したら直った。
MZ-2000の場合、テキストVRAMがD000H~DFFFHになる。画面アクセス時、メインRAMの一部を切り換えてVRAMにしてからアクセスする。
従って、そのアドレス範囲にそのプログラムが存在すれば当然暴走してしまう。
そのため画面表示ルーチンをBIOSの終わりの方に置き、アセンブル後にこれらのルーチンがE000H以降に配置されているか、LSTファイルを確認していた。
画面関係のBIOSはMZ-2000用として全部自作した。
基本的にVRAMへの切り換えと、指定したアドレスへの書込だけだから難しくない。
・画面モードの切り換え(80x25)
・画面クリア
・1文字表示
・コントロールコードの処理(それぞれのコードに対する処理も)
・アドレスの計算(表示位置とVRAMアドレス)
・画面スクロールアップ
・Y座標からVRAMアドレスを求める
・カーソル表示
(カーソルを表示する前に、表示位置にあった文字を保存しておく。カーソル移動した時に、元そこにあった文字を書き戻す)
FDDの読み書きルーチンは、印象としては難しく感じるが、すでに原型があったので意外とラクだった。
ただ、X1用なのでMB8877、MZ-2000はMB8876という違いがあり、データバスの論理が反転している。そこで、FDCとのI/O命令のところにCPLを追加していった。
当然I/Oアドレスも実機に合わせて変更した。
単純な書き換えだけではなく、それぞれが何の動作をしているか、FDCのマニュアルを見ながら理解しコメントを書き加えていった。
結局あとでうまく動かない時に、細かく見直す必要があったから、そのようにしておいて正解だった。
調べる都度、データシートを開いて見るよりも、最初からソースにレジスタのビットの割り付けとか機能をコメントとして書いておくと便利。
トラックバックURL
トラックバック一覧
コメント一覧
コメント投稿