マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

自作OS

フロッピーを読み込めない

FDCでフロッピーを読み込もうとしてるけど、読み込めてない。割り込みは発生しているし、FDCからのリザルトステータスもあってるっぽいのに。DMACへの設定が間違ってるのかな?メモリの番地とか

次はFDC制御

マルチタスクが無事終わったので、次はFDC制御の実装を目指す。実装する順番はよくわからんが、これでいいや。GUIを使えるようになるのはいつになることやら

実機で動かしてみたいが

実機で動かしてみたいがFDDが無いから試せないな。CDブートできるのだろうか?

マルチタスク成功

特権レベル3からタイマ割り込みが発生したときのESPの場所を間違えてた。そこを修正したらマルチタスク成功!いやー苦労した…

destination operand is not memory

http://bochs.sourceforge.net/cgi-bin/lxr/source/patches/bochs-trace-cache.patch.v6 のコメント部分の// lock prefix not allowed or destination operand is not memoryが気になる。特にdestination operand is not memory

LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)

LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)を表示している部分のソースが見つかった。しかし、何をしているのかがわからん http://bochs.sourceforge.net/cgi-bin/lxr/source/patches/bochs-trace-cache.patch.v6

無効命令って

無効命令ってこれのことだろうか?LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)

無効命令、一般保護例外

割り込みで無効命令が1回と一般保護例外が沢山でる。どうやって原因を調べればいいんだろう

bochsのエラーメッセージ

前回と似てるけど微妙に違う。何でこれが起こってるのか不明LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)

イメージファイルのサイズ

イメージファイルのサイズが18KB超えていたのに、ファーストブートで18KBまでしか読み込んでいなかった。なので36KBまで読み込むように変更。でも何故かqemuでもbochsでも途中で止まる。 bochsにはLOCK prefix unallowed (op1=0x43, attr=0x0, mod=0x0, nnn=…

自分用メモ

忘れないうちにqemuとgdbの接続方法を書いておこうかqemuをデフォルトポート1234で待機させるqemu -s -S -fda os.imggdbを起動gdbgdbからqemuに接続(gdb) target remote localhost:1234

qemuの-Sオプションを追加

"-S"オプションも追加したら処理が先に進まなくなって、gdbからも接続できた。というか接続自体は-sだけでもできてたっぽいが

qemuの-sオプション

qemuのオプションに"-s"をつければgdbの接続を待つらしいが、試しにやっても処理が先に進んで、とても待ってるようには見えない。どうしたら接続を待ってくれるんだ

AC exception

bochsで動かしてたらAC exceptionというのが発生。何じゃこりゃEnable alignment check (#AC exception)

タスク2つだとうまくいくのに

タスク2つだと切り替えうまくいくのに、3つめを入れると >> (invalid) : FFFF exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resettingとなってしまう。2つだと特権レベル3から0への切り替えもできているというのに何で…

アセンブラに切り替えても動かなかった

アセンブラに切り替えればうまくいくんじゃないかと思っていたが甘かったようだ。bochsによればESレジスタが異常な値を取ってるらしい、もう諦めてTSSを使うことにするかコンテキストスイッチの部分(NASM) ;特権レベル3への切り替え asmContextSwitchToUser:…

最初から作り直しても

動かないものは動かない。何かを間違えてるか、日頃の行いが悪いのか

最初から作り直すことにした

自作OSを最初から作り直すことにした。目標はマルチタスクでしっかり動かすこと

最初から作り直せばうまくいったりするのだろうか?

最初から作り直してまた駄目だったらかなり辛いな。どうしよう

MonaOSのコンテキストスイッチ

MonaOSのコンテキストスイッチはアセンブラでやってるな。アセンブラでやった方がいいのだろうか? http://monaos.svn.sourceforge.net/viewvc/monaos/trunk/mona/core/kernel/core.asm?revision=3123&view=markup

マルチタスクが進まない

hdkさんに「特権レベル0だけで回ってるときはESPが切り替わっていない」と指摘されたので、ESPを書き換えるように変更したつもりだったけど、うまくいっていない。ESPを書き換えるタイミングが違うのかな?ESPを書き換えるNASMのソース asmSetESP: _asmSetES…

特権レベル0のタスク…

相変わらず特権レベル0のタスクが動かない。bocksだと動くのに、qemuでは無理。どうしたものかタイマ割り込み時に呼び出されるアセンブラのソース %macro pushAll 0 PUSHAD PUSH DS PUSH ES %endmacro %macro popAll 0 POP ES POP DS POPAD %endmacro asmTim…

特権レベル0のESP

特権レベル3のタスクから特権レベル0のタスクに移るときのESPってどこから持ってくればいいんだろう?そしてどこに設定すればいいのかわからない

やっぱりbochsでも駄目だった

うまく動いたと思ったbochsでも変数を1つ追加しただけで止まった。偶然動いただけで、うまくいってなかったらしい。何が原因で動かないかというと多分、特権レベル0のときのESPの値がおかしいんだろう。特権レベル3のタスクは動いているのに、特権レベル0の…

bochsでは動くのにqemuだと止まる

タイマ割り込みのときに、TSSのesp0を書き換えるようにしたら、bochsだと期待通りの動きになり、qemuだと止まった。どっちが正しいのかわからない

初期化ミス

taskCountという変数を1で初期化していたが、何故だか初期値が0になっていた。他の場所でexternを付けていたからか?まぁ、それがあってタスク切り替えで何も起こってないかのように見えたが、しっかりタスク切り替えは行われていた。初期化関数内でこのtask…

エラーメッセージ無きエラー

qemuでもbochsでも突然エラーメッセージがでなくなった。しかし、正しい動作をしていない。これでは、何がおかしいのかわからない。困った

3rd (10) exception

コンテキストスイッチをタイマ割り込みの最初の1回だけで行ったところ、こんなエラーがでたexception(): 3rd (10) exception with no resolution, shutdown status is 00h, resettingどこがおかしいのかわからないのは辛いな

最近していた失敗

ltrで指定するTSSのindexを3bitシフトし忘れてた。 IRETD時のSSを取り忘れてた。hdkさんのコメントやhttp://hrb.osask.jp/wiki/?advance/CPUに書かれているように、IRETDを実行するときに特権レベルが下がると、ESPとSSをPOPする

セグメントレジスタの切り替えはできたようだが

hdkさんのアドバイスにより、セグメントレジスタの切り替えはできたが(qemu、bochsのログで確認)、他のタスクが動いてない模様。bochsのログを見てみると00136706000i[CPU ] >> jmp .+0xfffffffe (0x00003fa0) : EBFEという謎のjmpが入ってる。何かバグって…