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

x86エミュレータやFPGA、WebGLにお熱なd-kamiがマイペースに書くブログ

自作OS

何度目かの自作OS

なかなか先に進まない自作OS。いつになったら先に進むのか?そろそろやばいかも。とりあえずブートローダ作ってText VRAMでHello Worldしたところ。いろいろ忘れていてやばい

I/Oポート関係だけのはずが...

I/Oポート関係の命令をCから呼び出せるようにしようと思ったが、いろいろ詰め込んでしまった。HLTとかCALLとかは別のファイルに入れようと思った [BITS 32] [SECTION .text] GLOBAL asmHLT, _asmHLT GLOBAL asmCLI, _asmCLI GLOBAL asmSTI, _asmSTI GLOBAL a…

GDT設定用クラス

GDT設定用クラスを作ってみた。ヘッダファイルはこんな感じ #ifndef _GDT_MANAGER_ #define _GDT_MANAGER_ #include "DataType.h" typedef struct{ uint16_t limit_low; uint16_t base_low; uint8_t base_mid; uint8_t access_right; uint8_t limit_high; ui…

データ型

とりあえずtypedefしまくり、こんな感じでいいのだろうか?よくわからん #ifndef _DATA_TYPE_ #define _DATA_TYPE_ #ifndef __SIZE_TYPE__ #define __SIZE_TYPE__ unsigned long #endif typedef __SIZE_TYPE__ size_t; #ifndef __int8_t_defined typedef cha…

作り直し中

Text VRAMで遊んでるところ。でもText VRAMは捨てたいな。もっとGraphicalに行かないと!で、重要なところではGDTの再設定、IDTの初期化、PICの初期化を行っている

何度目かの再スタート

何度かやり直すと書きながら、やりおせなかった。今度こそやりなおす!開発OSはWindows!Cygwinで頑張るぜ!

リンカが変わった?

前まで動いていた自作OSがいつの間にか動かなくなっていた。オプションが一部変わっていたが他にも何か変わっていたのだろうか?なんかうまくリンクできてなくて関数呼び出しの部分がCALL 0になっている…なんでだろう?

cygwinにするかLinuxにするか

WindowsでcygwinかLinuxかと思ってらVisual Studioという選択肢が!Visual Studioが使えるなら、Windowsでの開発も大分楽になりそうだ

初歩的なミス

EBPの初期化ミスでEBP-4に書き込みESP-4から読み取りという部分でアクセスしてる番地が違うことから前回のエントリはミスになってしまったようだ。気をつけないと

文字が表示されない

Text VRAMに文字コードを突っ込んでみたけど文字が表示されなかった。bochsで追いかけてみると、0xB8000をEAXに代入してMOV [EAX], 0x41が実行されていた。ちゃんと実行されてるみたいだけど、何故か表示されない。画面モードが悪いとか? void start(){ cha…

忘れ物

前回のエントリ タイトル:[自作OS]リンクミスで忘れていたことがあった。それはldのオプションに-rを付けることだった。-rを付けたら無事makeが通った。とりあえず原因がわかって良かった

リンクミス

ld -m i386pe -n -Ttext 0xC200 -static -o third.exe --start-group OSStart.o GDT.o IO.obj --end-groupcygwinでリンクしたときに以下のエラーが発生。 GDT.c:11: undefined reference to `lgdt'以下のnasmのファイル(IO.asm→IO.obj)とGDT.hとGDT.cがある…

無気力が溢れてるぞ!

何度目かのやり直しOS。無気力が溢れすぎて、なかなか進まない。とりあえずGDTRとSegmentDescriptorを宣言した。あと初期化や設定関数を宣言した。setGDTにGDTRを渡しているが、先頭アドレスだけ渡せばいい気がしていたが一応countとindexをチェックしておく…

github上のd-kami OSのレポジトリを消してきた

d-kami OSのソースコード見てて悲しくなってきたので消してきた。次のOSを作ってそれを公開したい。多分、それも悲しい出来となるんだろうけど…。C++でOSを作るのは大変なのでC言語で作ろうかと思ってる。それとも別の言語で?まぁ、C言語だろうなぁ。目標と…

初心に戻ってHello World!

初心に戻ってはじめから。まだブートローダの部分だけど、Hello Worldを表示している ORG 0x7C00 XOR AH, AH MOV AL, 0x03 INT 0x10 MOV SI, MESSAGE CALL print MOV SI, D_KAMI CALL print fin: JMP fin print: MOV AH, 0x0E mloop: MOV AL, [SI] OR AL, AL…

デバッグのために

自作x86エミュレータのデバッグのために自作OSから適当に選んだINT 0x50を呼び、エミュレータがこれを受け取ったらレジスタEAXが持ってる値を表示するようにした。アセンブリ言語でINT 0x50を呼び出してるわけだが、メモリのESP+4番地の値をEAXに入れている…

別のOSを作り始めて

d-kami OSは諦めて、別のOSを作っている。また、よくわかってないC++で作る予定なのでnewとdeleteを用意した。メモリ管理が適当だが、まぁ所詮趣味のOSだ。ちゃんと動いてくれれば効率とか気にしない。次はPICの設定とGDT、IDTあたりだろうか。久しぶりなん…

ソフトウェア割り込み

1度実装したが何故か消していたソフトウェア割り込みを再実装。というか割り込みと一部の機能は動いていたが、レジスタの値による分岐がなかった。なので分岐を再実装。今までアセンブリ言語で完結していたのでCの関数を呼び出して、そこで分岐させた void …

命令を間違える

IRETでレジスタの値を切り替える所を何故かRETFでやっていた。それで止まっていたという悲しいことがあった。それよりいつまでセグメントベースなんだ。そろそろページングに切り替えたい

ウインドウっぽいものを作りたい

せっかくVESA使ってるんだからウインドウを表示できるようにしたい。とりあえず四角形だけでウインドウっぽくしてみる。ある程度進んだら自作エミュレータでこいつを表示できるようにしたい

四角形を表示

自作OSでグラフィックに挑戦。画面モード切り替えて、リニアフレームバッファの位置などを取得して、その情報を元にメモリへ書きこんだ。四角形しか表示してないが、ただ塗りつぶすだけだとつまらないので、半透明っぽくしてみた。今は文字が表示できないの…

簡単なことだった。ただ実体がなかっただけだった

C++を使っていて、リンク時にstaticなメンバ変数が見つからないという問題にあったが、ただ実体を用意していないだけだった。 char* TextVRAM::buff = (char*)0xB8000; こんな感じで実体を用意してあげればいい。馬鹿でした、ごめんなさい

すさまじいミス

プロテクトモード移行のところでミスしてた。下の部分の話だがANDにするはずのところでORにしてる… MOV EAX, CR0 ;CR0を読み込む OR EAX, 0x7fFFffFF OR EAX, 0x00000001 ;プロテクトモード移行用のビットを1にする MOV CR0, EAX 正しくは下のとおりだった…

作り直しでエラー

OSを作り直そうと思ってアセンブラで書いたブートローダからC++で書いたカーネルへ突撃!といきたいところだったが、カーネルのリンク時にエラー。TextVRAM.cpp:4: undefined reference to `TextVRAM::buff'こんなエラーがずらーっと、参照できねーよって怒…

文字列の表示を整理

d-kami OS(というかブートローダ)ではアセンブラの部分に関しては全然わかってない状態で作っていた。今もわかってないが、ちょっと整理して新しいブートローダへ。まず文字列表示部分をサブルーチンにしてみた。SIに文字列の先頭アドレスを入れてこいつ呼び…

ついに作り直しが始まった

ずっと作り直すという決意はあったが、やっていなかった。しかし、教授に薦められたKVMによって、やる気がでてきたようだ。家のパソコンのCPUもIntel VT対応のCeleron E3300になりパワーアップして作業再開。まずはBIOSの力を借りて、メッセージ表示とディス…

ブートローダから

ブートローダから作り直してるわけだが、特に前と違うわけではないので、そのままコピーでもいいんだが、アセンブラをあまり使わない俺にとって、一番使っている場所なので練習だと思って作る。まぁ、コピーするぐらいならgrub使ったほうがいいんじゃないか…

お勉強

OSの勉強するために研究室にあったOperating System Conecptsを借りた。Threadsの章でPthread、Win32API、JavaでのAPIの紹介や使い方の例まで載っていて、ちょっとびっくりした。MINIX本より好きになれるかもしれないOperating System Concepts作者: Abraham…

また最初から

OS作ると言っても、どんな機能がつくかもわかってなかったし、1回で作りきろうなんて思って無かったので、作り直す。といっても、今あるやつ作り直すのではなく、別の機能を持ったやつを作る。基本的な所でも考えなしたいところは沢山あるから

構造変更

カーネルをELFに変更したが、secondboot.asmでマニアックそうなエラーが発生。firstboot.asmにsecondbootの役割を任せたらエラーがでなかったので、firstbootで全てやることにした。以前の役割↓ firstboot.asm : ブートローダ。ディスクからカーネル読み込ん…