これなんですか?
IA32のunrealmodeは100000hより高位のメモリにアクセスするのに大変便利です。
が、設定後に誰かがそのセレクタを弄らないことを前提にして大抵の人はそれを利用したプログラムを書いてきたと思います。

で、実際に問題が起きました。
CSMWrap環境でPromiseのATAカードのBIOS書き換えができません。
逆アセンブルして中を覗いてROM書き換えプログラムがUnrealmodeを使っていることは確認しています。
おそらくInt13h(フロッピー)でROMファイルを読み出す際にFSやGSをリアルモード中にpush popしてるのでしょう。
(CSMWrapのソースにあたっていません。)

同じく拙作のATABIOSも、呼ばれている最中にリアルモードでFS GSをpush popしています。
が、linuxのkernelローダ(当然ロード先は100000h以上の場所)で問題が起きました。

これが原因かどうか調べるためだけのコードです。
権利放棄します。責任も放棄します。
ご自由にコードは利用して構いません。ごく一般的なことしかしていません。

実行はMS-DOS互換環境、仮想86に入っていない状態でurtest.comを実行するだけです。
in Realmode selector push pop was also NG
と表示されるはずです。

もし
in Realmode selector push pop will be OK
と表示されたなら変なCPUと思います。

11時過ぎ
テスト項目増やしました。
ほえーっとなっとります。

2026-8-15
drachen6jp
