• 20251215
    • cradle86
      • とりあえず、qemu用のラッパー(仮想ディスクから読んで0番地に展開して、0x1FFF0にジャンプ)はできたから、偽の割り込みハンドラを作る。
  • 20251216
    • cradle86
      • qemuを使って、COMMAND.COMを含めたメモリイメージを作って読ませ、”Invalid COMMAND.COM”というエラーメッセージがでてきた。
      • ディスクアクセスが必要みたい。
      • あと、何故か実機だと動かない。
  • 20251217
    • cradle86
      • qemuでも実機と同じレベルでログが取れないか調べてたが、難しそう。
      • qemuでもプラグインを書くとメモリアクセスが取得できると聞いたが、プラグインのコンパイルができなかった。
  • 20251218
    • cradle86
      • プログラムカウンタと命令フェッチを見比べてた。
      • 割り込みから戻ったあとおかしくなってた。
      • 実機のメモリアクセスを見ていたら、 intの時に、CPUはスタックを3つ積む(フラグ、セグメント、PC)んだけど、 iretの時に、2つしか取り出していない事に気がついた。
      • 割り込みハンドラのプロローグで、 レジスタをpushして、 エピローグでpopしてるんだけど、 この数が合わなくてズレてるのではないかと思い、確認したら、 数はあってるが、 spをpush/popしてた。
        • これをやる意味が理解できなかったので、 AIさんに聞いたら、じゃあ消しましょう、となって消したらなおった。
        • 識者に聞いたら、8086と80286以降で挙動が違う有名な所らしい。
          • https://ja.wikipedia.org/wiki/Intel_80286#cite_note-21 8086のPUSH SP命令でスタックポインタSPを退避させる場合、SPから2が減算された後のSP値が記録される。例えば、PUSH SPのあとPOP AXを実行するとAXにはSP-2がロードされる。80286以降ではPUSH SPの際に減算される前の元のSP値を退避するようになった。この挙動の違いはプログラムが8086で実行されているのか、80286で実行されているのかを判別することに使用できる。
  • 20251219
    • cradle86
      • ファイルIOのスタブを作ったら、起動メッセージはでた。
      • しかしプロンプトは出ない。
      • ソースをみると、メモリを確保して自分を読みなおし、それを使って以降の実行を続けている。
      • メモリ関連のファンクションコールがいるな。
  • 20251220
    • cradle86
      • ファンクションコールをたぶん実装できたが動かない。
        • そもそも正解の応答がわからないからなぁ。
        • 万策付きた。
      • 例えば、debug.comは、そういう難しい事をしてないから普通に操作できる。
      • 識者に聞いたら、HIDOSを使って、いじりながらコンパイルする事を勧められた。
        • なるほど。
    • 雑プロッタ
      • inaさんが組み立ててくれた
        • https://x.com/ina_ani/status/2001958316067676160
        • https://x.com/ina_ani/status/2001960294843809931
        • いろいろフィードバックを頂いたので、バージョンアップしたいな。
  • 20251221
    • cradle86
      • HIDOSのCOMMAND.COMがどう動いてるか確認する。
        • ジャンプ先は似てるように見えるけどなぁ。
      • COMMAND.COMだけを再現するのは諦めて、HIDOSのVM_IO.SYSとMSDOS.SYSも入れる方向でやっていこうという方向性になった。