2019年09月14日

Zet/98も再開しています。が...

最近になって、Zet/98の方も再開しました。
DE0-CVに変えてから容量が大きくなったため色々できるようになりました。
まだHDD I/F(SASIの予定)、FDD I/Fは載せていませんが既存のものをそのまま載せるか簡単な変更だけで行けるでしょう。
GDCも、円弧以外はだいたいできたと思います。
一応、実機(僕が現在持っているのは486のPC-9821のみ)のBIOSを吸い出して動作させてみましたが、
286か386で追加された命令を使用しており、その部分で誤動作しているようです。
386以降、リアルモードでも32bitレジスタや命令は使用できるので、ITFやBIOSで稀に(ITFでは結構)使われているようです。
66プリフィックス(レジスタをAX→EAXのように32bitで扱う命令)は逆アセンブルし、同じ動作をするように16bitレジスタでの置き換えやダブルワード書き込み部分をワード書き込みの倍の回数に変更したりして、何とかメモリカウントを開始するところまではいきましたがメモリチェック部分等で0f 01で始まる命令が実行できず、止まってしまいます。
V30の機種、386等の機種でもV30も搭載している機種であればV30設定にすれば動作してくれると思うのですが、該当期初を持っていないのでBIOS/ITFのイメージがありません。
linuxのonjdumpコマンドで386コードの逆アセンブルができることが分かりました。
ITFを見ていくと、
mov ax,01
lmsw ax
という命令があります。マシーンステータスワードのbit0を1に設定しています。つまり、プロテクトモードに切り替えています。
ITFの中で一度、プロテクトモードに切り替えているんですね。
RAMウィンドウではなく、プロテクトモードで上位メモリのメモリチェックをするようです。
ただ、プロテクトモードに移行した直後にjmpしています。プロテクトモードのメモリ管理はよくわからないのでどこにジャンプするのかよくわかりません。
posted by プー at 01:19| Comment(0) | Zet/98 | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください