OSを作ろうpart12
独自にOSを作っているまたは、作ろうとしている人たちのための
スレッドになればと思います。
■前スレ
OSを作ろうpart12
http://pc8.2ch.net/test/read.cgi/os/1108836476/ >>255
少し調べてみたけど、別にintとかコールゲートでも問題なさそうですね、
ってか2000辺りでもintは使われているんだな。
まぁオーバヘッドを考えたらsysenter一本らしいですけど。
とにかく参考になったので多謝。
後はメモリの管理かぁ、むむぅ、ここがネックだなぁ。 >>266
比較的2000って信頼性では良いという評価を受けているから、ビックリしました。
sysenterとかそういう命令じゃないと、現状では信頼性が確保できないのかと思ってしまいました。
やはり調べないと分からないものですね。変態チックで楽しいですけどw
>>268
いやいや、その「最近」が難しいもんでw >>267
intとsysenterの選択って信頼性に関係するんですか? >>270
いや、関係ないんだなぁと改めて確かめる事ができたということです。
もともと大して問題は無いよなぁーとは思っていたけど。
>>272
崎本さんは64bitOSを作っているわけですから。
まだまだIA32も現役だからねー。
結論として何でもいいけどバグさえ混入しないようにという結論となりますた 以前に仮想86モードに付いて質問した者です。
取り合えず解決しました。
今回やりたかった事はローダからカーネルをメモリーに読み込むために
DISK BIOSを使用したい為、シングルプロセスで他からの割り込みが入らない
条件で仮想86モードへ移行し、プロテクトモードに戻ってくることを想定しています。
旨く行った条件は NMI 関連の割り込み処理なので実際にやりたい事とは違いますが
下記の様に処理しています。
1)メインの処理で NMI の割り込みを許可
2)メイン処理で無限ループに入る
3)タイマー割り込み発生
4)タイマー割り込みハンドラ内で一時的なスタックを使用して
16Bits タイマー割り込みハンドラ を呼び出す為に仮想86モードへ移行
5)この時、IIRET の戻り先を #UD を発生させる関数にする
6)#UD の例外処理関数内で 終了処理を行う
7)この時点で4)の直前に戻っている
8)そのまま、何もせずに割り込まれた処理へ戻る
処理5)から処理6)へ移行する時に割り込みが発生する可能性が在りますが
ローダの処理なので見なかった事にします。(~_~)
#UD の発生は オペコード 0x0FB9 を記述して UD2命令はは使用していません。
今回は TSS を使用した切り替えを行っていませんが 特権レベルが変化するような場合は
最低限の設定が必要なんでしょうか?
今回は、ss0/esp0 の設定しかしていません。
気になる点が有りましたら御教授願います。 解決したと言われているので問題なしだと思うけど
>気になる点が有りましたら御教授願います。
タイマ割り込みを使った検証をされていたのですよね
タイマ割り込みを使ってとか#UD発生に終始されていた感もあったりしましたが
DISK BIOSを呼び出す上でどのように考えられているのかな?
ってところくらいかな
なので、気になるって程のものでもないですけど >DISK BIOSを呼び出す上でどのように考えられているのかな?
タイマ割り込みやキーボード割り込み等と同じ割り込み時のスタックを擬似的に再現して
任意のINT命令を発行する予定です。 取り合えず、DISK BIOSの呼び出しで1セクタの読み込みは出来ました。
ハードウエア割り込みとソフトウエア割り込みを有効な状態で
DISK BIOSの呼び出しが出来たので、ローダの主処理を作成します。
煮詰りましたら、その時はまた伺います。<m(__)m> TRON房は巣に帰ってください。
今時TRONを使ってる家電なんてほとんどありません。 意識していないだけで以外に入ってたり
まあ単機能の白物なんかには入れないと思うが
x86で論理アドレスから物理アドレスに変換してくれるような命令はない?
リファレンス見る限り、見つからんのだが
ページテーブル引くコード書いてもいいんだが、さくっと簡単にできんかな ブートローダめんどくせぇ・・・
grubで手を抜こうとしたが、ELFのカーネルを
うまく0xc0000000に移動できないっぽい? WindowsやX Windowってウインドウマネージャーとアプリケーションって表示内容を描画したフレームバッファってどうやって共有してるんでしょうか? 共有なんてしてないだろw
画面周りのフレームバッファいじるのは、ウインドウマネージャだけ。
アプリにできるのは、デバイスコンテキストに描画することまで。
ウインドウマネージャは、アプリの都合なんて関係なく勝手にアプリのウインドウを描き変えていく。
その時は、アプリにもメッセージを送ってくるけどね。
アプリもDIB/DIBSectionで独自のフレームバッファ(「自分で」描画する描画内容)を確保することはできるが、それはウインドウマネージャには何の関係もない。
>>300
共有という言い方が悪かったみたいでした。すみません。
アプリケーションが描画したものをウインドウマネージャーがウインドウ内に表示する仕組みが知りたいのです。 補足します。
アプリケーションを描画した結果に対してウインドウマネージャーがアクセスしようとする場合を考えます。
ウインドウマネージャーがスーパーバイザーモードで動作しているなら問題ないですが、
X Windowのようにユーザーモードで動作している場合はセグメント違反になると考えました。
ここの工夫をどうしているのかが知りたいです。 >>302
>アプリケーションが描画したものをウインドウマネージャーがウインドウ内に表示する仕組みが知りたいのです。
アプリの呼び出す描画APIに応じてGDIなりXなりの描画用サブシステムがウインドウ/スクリーン用に確保しているフレームバッファに描くだけじゃね?
とりあえず、画面(システム側フレームバッファ)の描画にアプリは直接関係ない(関与できない)。
なるほど、アプリケーションは描画をOS側に依頼しているだけって事ですね。
ありがとうございます。 >>305
知ってる言語は?作ったことあるアプリは? 夏休みももうすぐ終わるだろうと思っていたら
またすごいのが来ましたな... >>307
まずはAjaxでWebOSを作ってみると良いよ
>>309
OS kitの翻訳をしてみたらどうかな WebOSってOSでもなんでもなく、ただのWebアプリケーション群と擬似デスクトップじゃん
馬鹿なの? >>305
ここがUnilinwinmacbex part3スレッドですね。
>>310
Ajaxはコーディングが辛いよ。やってみると。 こんばんは。
法人でx86-64動作環境を作っている者です。
OSに同梱するフォントについて、質問よろしいですか?
問い合わせたところ、IPAフォントが使用ライセンスの関係で、
使えない事がわかりました。
そこで、ここの皆さんが実用に耐えれると思われるフォントがありましたら、
ご紹介願えないかと思い、書き込みしました。
詳しく述べるとTrueTypeフォントをビットマップとアウトラインに分離して、
少メモリ環境でも動作できるセグメント形式に変換したデータを使いたいのです。
動作環境の詳細につきましては、ホームページを参照ください。
それでは、よろしくお願いします。
http://www.gionel.com/ アウトラインフォントだけなら、VLゴシックと小夏がいい線いってる
合成フォントでは、小夏を元にM+を調整したSystemaが素晴らしい
ビットマップはM+あたりがよろしいかと
フリーに限らないなら、リコー、ニイス、より高品質ならタイプバンクあたりが良い
>315
ありがとうございます。
参考になります。 >>314
> 問い合わせたところ、IPAフォントが使用ライセンスの関係で、
> 使えない事がわかりました。
誰に何を問い合わせたらどういう理由で駄目なのか、というところですかねぇ。
ライセンス関係は俺様解釈で断定しちゃう人が多いですから、きちんと
当事者の意思を確認して本当に使えないかどうか確認したほうが...
あと、ライセンスは改訂作業中なので、
参考→ttp://www.ipa.go.jp/software/open/ossc/2008/font/koubo.html
そこらへんも考えに入れた方がいいかもしんないです。 >317
もちろん正式にIPA様より許諾できませんとの返事を頂きました。
早くライセンス改訂されるといいですね。 ttp://www.amazon.co.jp/dp/B002G3WVYM
TECH I 起動プログラムブート・ローダ入門
こんな本が出てたとは。中身まだ見てないので評価はなんとも言えんけど。 >>319
ttp://www.cqpub.co.jp/hanbai/books/MIF/MIFZ200909.htm
_,,..r'''""~~`''ー-.、
,,.r,:-‐'''"""~~`ヽ、:;:;:\
r"r ゝ、:;:ヽ
r‐-、 ,...,, |;;;;| ,,.-‐-:、 ヾ;:;ゝ
:i! i! |: : i! ヾ| r'"~~` :;: ::;",,-‐‐- `r'^!
! i!. | ;| l| ''"~~ 、 i' |
i! ヽ | | | ,.:'" 、ヽ、 !,ノ
ゝ `-! :| i! .:;: '~~ー~~'" ゙ヾ : : ::|
r'"~`ヾ、 i! i! ,,-ェェI二エフフ : : :::ノ~|`T <イエーイ、ひげぽん見てるー?
,.ゝ、 r'""`ヽ、i! `:、 ー - '" :: : :/ ,/
!、 `ヽ、ー、 ヽ‐''"`ヾ、.....,,,,_,,,,.-‐'",..-'"
| \ i:" ) | ~`'''ー---―''"~
ヽ `'" ノ
ブートローダ作るのめんどくさい。
おまいらちゃんと作った?
パクり放題の手頃なブートローダとか有る? >>326
Linux
……壁紙を変えてアプリをインストしただけで、どこがマイOSなのかと(ry >>326
ttp://hrb.osask.jp/
ここのブートローダは自由に使って良いって書いてある
あなたが開発者本人じゃなければどうぞ
半年ぶりくらいに規制解除されたと思ったら
1週間経たないうちにまた規制された
おなじプロバイダにアホがいるとしか思えない 主要ispは人覆いからしょうがない。
プロバイダ主要各社 契約者数一覧(2008年12月末時点)
ISP名 総会員数
OCN 731万人
au one net(KDDI) 340万人
ぷらら 282万人
@nifty 175万人
JCOM 149万人
biglobe 132万人
So-net 126万人 どなたかお助けください。
MBRの中で、HDDのカーネルを呼び出そうとint13h extension readを使っているつもりなのですが、エラーコード4のsector not foundで返ってきます。どうしても、HDDが読み取れません。どうしてダメなのかが分からない状態です。誰か助けて…。
.globl ipl_start
.code16
ipl_start:
jmp real_start
real_start:
cli
mov %cs,%ax
mov %ax,%ds
mov %ax,%es
mov %ax,%gs
sti
movb $0x80,%dl
movb $0x42,%ah
movw lba_command,%si
int $0x13
cmp $0,%ah
jz farjmp
rehalt:
hlt
jmp rehalt
farjmp:
ljmp $0x0009,$0xfc00
lba_command:
.byte 0x18
.byte 0
.word 0x0000
.long 0x0009fc00
.quad 0
/* boot sector signature */
.org 510
.word 0xaa55 /* singnature */ >>333
lea lba_command,%si
とか 直接関係ないだろうけど9fc00hってBIOSの拡張ワークエリアじゃね? HDからブートするようにするにはどうすりゃいい?
自作OSをマルチブートにしてやりたいんだが そういうブートプログラム作って、パーティションの頭に書け。
んで、面倒な所はブートセレクタに任せる。
そういうブートプログラムって正直なにをどうすればいいのかチンプンカンプンなんだけど
できれば何か参考になるサイト教えて
一応FDブートだけするのは作ったことがある。
関係ないか 基本FDと同じだ。
int 13hのパラメータがHDD用になるが。
FreeDOSあたりまねすりゃいいんでないかい。
DOS互換ならどんなブートセレクタでも扱えるだろう。
プロテクトモードにしなくて良いならHDDブートは楽勝 int 13hのhd用パラメータは分かった。
ありがとう。
だが、すまんが
俺が知りたかったのは、フロッピーディスクでいうIPLの記述的なものなんだ。
それのhd版というかなんというか。
なにか分かったら教えてくれると助かる
ブートローダーでググってみたら?
一応言うと、510番地〜512番地間での間でマジックワード0xaa55を記載されたイメージファイルをハードディスクイメージとして、読み込むと、マシン起動時に0x7c00番地に512KBローディングする。
ちなみにイメージファイルはelfとかpeとかでなくて、マシン語のバイナリフォーマットじゃないといけない。
…でいいのかな? そうだった512Bだった
512KBも読んでくれたら楽なのになあ…。 >>344
それはMBRでないかと思うわけだが。
マルチブートするならその辺はブートセレクタが使うのでどうでもいい。
んで、作らんといかんのはPBRなんだが。
これはFDのIPLと同じような構造でよかったような気がする。 MBRもPBRもほぼ同じわけなんだが
差はパーティションテーブルの有無くらいだろ
あー、なるほど
ということはhd版iplをとりあえず特定のパーティションの先頭に書いて
あとはそいつからカーネルをロードさせてやればいいというわけか。
面倒くさそうだな どうせだから、ブートローダあげる
っていっても、上の方にあるやつだけどw
.globl ipl_start
.code16
ipl_start:
jmp real_start
real_start:
cli
xor %ax,%ax
mov %ax,%ss
mov %ax,%es
mov %ax,%fs
mov %ax,%gs
mov $0x7c00,%ax
mov %ax,%sp
sti
xor %ah,%ah
int $0x13
mov $2,%ah
mov $lba_command,%si
movb $0x80,%dl
movb $0x42,%ah
int $0x13
cmp $0,%ah
jz farjmp
rehalt:
hlt
jmp rehalt
farjmp:
cli
mov $0x7e00,%ax
mov %ax,%sp
sti
ljmp $0x0000,$0x7e00
lba_command:
.word 0x10
.word 16
.word 0x7e00
.word 0x0000
.quad 1
.quad 0
/* boot sector signature */
.org 510
.word 0xaa55 /* singnature */ >>348
BPBとかなかったっけ?
DOSとか気にしなきゃいらんか。
>>333
「MBRの中で」とかいってるから違うっぽくね?
自分のOSをマルチブートさせたいって言ってるんだから、MBRにはgrubみたいなのを置くはず。
340は、自分のOSを置くパーティションの先頭で何をさせればいいのかってのを尋ねているんだと思われ
>> 354
あ。そういうこと?
じゃあ、osdev(英語の方)のスケルトンコードみてこいや〜としかいえないなー。あっちならgrub環境でのブートコード書いてあるよ。 >gt;355
そんなものがあるとは
できればリンク教えてくだされ ううん。少しはググろうぜ
ttp://wiki.osdev.org/Bare_bones
どうすればいい?
というよりは、動作済みのロダくれくれに終わってるな。
うpもいいが解説も無いしw まあ、結局そういうやつは仕組みを理解してないから
osdevなんかみてもわからないだろうな 別に分かるのが目的じゃ無さそうだし。
そして動いてもやっぱり使いにくいなでウィンドウズに戻っていく。 独自OS開発と聞いても、結局、POSIX互換OSばかり。
Unixじゃない、OSがみたい。
Monaは結局、POSIX互換だし。 >>363
意味不明だ。
そんなのおまいが勝手に作ればいいだけじゃん。 posixじゃ無い事で移植性が極端に落ちるからねえ。
自力で充実環境作ってくれるなら非posixもありだろう。int21ファンクションコール互換でも委員だしw
見たい邪なくて、見たければ手を動かして作って無料配布してくれw