[30日でできる!OS自作入門](https://tatsu-zine.com/books/make-your-own-os-in30days">30日でできる! OS自作入門)の14日目まで来ました。
高解像度にしよう!というのがあるのですが、Macでサンプルを動作させると今まで見えていた画面が真っ黒になってしまいました。
うーん。ちょっと前からサンプルを動かしても画面がうまくリフレッシュされない(おそらくタイマーがCallされない)しここで手詰まりになるかと思いました。
本を読み進むと、QEMUに対して設定しているだで汎用的にする場合のサンプルがありました。
そちらは問題なく動作したので、VGAの設定に問題があるのだろうと思いました。
うまく動いたコードを読んでいくと、VGAに描画する際のメモリ領域をアセンブラで取得していることがわかりました。試しにそれをログに出力して見たらサンプルとMacのQEMUではアドレスが異なっていました。
サンプルはこんな感じです。
14_day/harib11d/asmhead.nas
```
; 画面モードを設定
MOV BX,0x4101 ; VBEの640x480x8bitカラー
MOV AX,0x4f02
INT 0x10
MOV BYTE [VMODE],8 ; 画面モードをメモする(C言語が参照する)
MOV WORD [SCRNX],640
MOV WORD [SCRNY],480
MOV DWORD [VRAM],0xfd000000 ; Macでは0xe0000000ではアドレスが違うらしく描画できなかった
```
MacのQEMUは微妙に仕様が違うのか、Macだからなのかはよくわかりません。
0 件のコメント :
コメントを投稿