|
旧THE-BBL掲示板
もうあまり必要性がないので凍結しました。
OSを作れたらいいねぇPart2 |
Menu of Threads Previous Topic Next Topic |
1 名前:hideyosi 2004/10/20 22:37:57
前スレ K氏のheboOSをまねてみる
なんでPart2なんだよ!? 世の中そういうもんです。
えー。まーそんなわけで、前スレがながーくなっちゃったので、新スレっつーことで。
heboOSベースのOSモドキ、「hideyOS Ver 0.02」に向けて、新たにお勉強しましょうーっつーことで。
|
12 Re: Shiftとか 名前:hideyosi 2004/10/24 20:30:39
うーむ。どうも、メモリに直接値を入れるのはまずいようだ。 そこで、
----------------------------------------------------- SHIFTON: MOV BX,[SSHIFT] ;この段階ではもうキーの値はいらない。 ;壊れてしまってもOK MOV AL,0x01 MOV [BX],AL
JMP INTEND
SHIFTOFF: MOV BX,[SSHIFT] ;この段階ではもうキーの値はいらない。 ;壊れてしまってもOK MOV AL,0x0 MOV [BX],AL
JMP INTEND -----------------------------------------------------
一旦ALレジスタに代入してから値をセットしてみよう。
お!? コンパイルエラーは収まったぞ!?
|
13 Re: Shiftとか 名前:hideyosi 2004/10/24 20:50:02
さらに、Shiftキー判定部分と、テーブルを追加。
-------------------------------------------------------;乗っ取ったキーボード割り込み部分 IINT09:
;押されたキーは何かを調べる ;IN命令で、押されたキーの値を取得 MOV DX,0x60 IN AL,DX
;Shiftの判定。押されているか離されているかはもう ;定数で判定しちゃえ!
;離されている場合。 CMP AL,0x2A JE SHIFTON
;押されている場合。 CMP AL,0xAA JE SHIFTOFF
;同じく右側も。 ;離されている場合。 CMP AL,0x36 JE SHIFTON
;押されている場合。 CMP AL,0xB6 JE SHIFTOFF
;持ってきた値を一時、AHに複製する MOV AH,AL ;AHに複製した値の7ビット目だけを摘出 AND AH,0x80 ;もし、この結果の値が00000000すなわち0x80なら、 ;キーは「押された」となるはず。ここで条件分岐 CMP AH,0x80
;なにもせずに割り込みを終了する JE INTEND
;持ってきた値の7ビットだけを抽出 AND AL,0x7F ;二進数 01111111 でANDする
;Shiftが押されているかどうか判定 MOV AH,[SSHIFT]
CMP AH,0x0 JE SHIFTONPRINT
CMP AH,0x01 JE SHIFTOFFPRINT
SHIFTONPRINT: ; ALには0x1e(A)などのキースイッチの値が入る MOV BH,0 MOV BL,AL
MOV AL,[BX+KEYTABLESHIFTON] ;この処理で、ALには、文字コードが入っている
JMP MOJIPRINT ;実際に文字を表示する処理
SHIFTOFFPRINT: ; ALには0x1e(A)などのキースイッチの値が入る MOV BH,0 MOV BL,AL
MOV AL,[BX+KEYTABLESHIFTOFF] ;この処理で、ALには、文字コードが入っている
JMP MOJIPRINT ;実際に文字を表示する処理
----------------------------------------------------------
テーブル
---------------------------------------------------------- ;文字コードとキースイッチコードの対応表。英字キーボード、ShiftOFF KEYTABLESHIFTOFF: ; 0 , 01 ,・・・・・ DB 0 , 0 , '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 8, 9
; 10, 11,・・・・・ DB 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '{', '}', 10, 0
; 1E, 1F,・・・・・ DB 'a', 's','d', 'f', 'g', 'h', 'j', 'k', 'l', ':','"','~', 0, '|'
; 2C, 2D,・・・・・ DB 'z', 'x', 'c', 'v','b', 'n', 'm', '<', '>', '?', 0
; 37 ,38,・・・・ DB '*' , 0,0x20,0,0,0,0,0,0,0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+'
; 4F , 50,・・・・ DB '1' , '2' , '3','0','.'
; 54,55,・・・・ DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; 73,74,・・・・ DB 0,0,0,0,0,0,0,0,0,0,'\'
---------------------------------------------------------
よし! コンパイルエラーもないぞ! いっけえぇぇぇぇ!!
・・・・・・・だめじゃん・・・・orz
うーーーん。どこがまずいのかな? ひとつづつ検証してみよう。
|
14 Re: Shiftとか 名前: -- K 2004/10/24 21:29:09
> MOV [BX],0x0
MOV BYTE [BX],0x0
と書けばOKです。もちろんAL経由でも、プログラムが長くなる以上の害はありませんが。
|
15 Re: Shiftとか 名前:hideyosi 2004/10/24 21:39:22
>と書けばOKです。
あぁぁぁぁ!!! いっけねぇ!! そっか!? BXは16ビットなんだから、ちゃんとそう宣言しなくちゃいけんと!
・・・これ、前にもひっかかったじゃねーかよ! だめだなぁ・・・・ (T∀T)
|
16 Re: Shiftとか 名前: -- K 2004/10/24 23:12:33
ついでに言うと、
MOV BYTE [SSHIFT],0x0
で全く問題ありません。これだとALもBXもつかわずに済みます。
|
17 Re: Shiftとか 名前:hideyosi 2004/11/3 18:54:35
さーてと!
オベンキョ再開。Shiftキーがなんで全然反応しないんだろう?
まずは、Shifの判定部分にちゃんと飛んでいるかどうか。SHIFTONのラベル以下に文字表示のルーチンでも叩きこんで、調べてみる。
=========================================================== SHIFTON: MOV BX,[SSHIFT] ;この段階ではもうキーの値はいらない。 ;壊れてしまってもOK MOV AL,0x01 MOV [BX],AL
MOV AL,0x41 MOV AH,0x0e INT 0x10
JMP INTEND
SHIFTOFF: MOV BX,[SSHIFT] ;この段階ではもうキーの値はいらない。 ;壊れてしまってもOK MOV AL,0x0 MOV [BX],AL
MOV AL,0x42 MOV AH,0x0e INT 0x10
JMP INTEND ===========================================================
・・・・うーむ。ちゃんとSHIFTを押すと、ABと表示される。つまり、ちゃんとここへは飛んできているんだ。
|
18 Re: Shiftとか 名前:hideyosi 2004/11/3 19:02:46
うーん。もしかして、ここのところかな?
================================================ MOV BX,[SSHIFT] ;この段階ではもうキーの値はいらない。 ;壊れてしまってもOK MOV AL,0x0 MOV [BX],AL ===============================================
MOV BX,[SSHIFT]。これはつまり、アドレス指定に用いられるBXレジスタに、ラベル「SSHIFT」のアドレスを代入している。
・・・この場合、BXだから16bitだし、また、ラベルで置換されるアドレスも、オフセットながら通常は16bit。
問題はこれ。
MOV [BX],AL
・・・もしかして、BYTEを使うのかな???
|
19 Re: Shiftとか 名前:I.Tak. 2004/11/4 8:50:21
NASK/NASMの文法では, []がついてるのは (LEAを除いて) *全てメモリアクセス* です。BXにSSHIFTのアドレスを 入れるのなら MOV BX, SSHIFT としませう。このへんMASMと違うので, そういう解説を 読んでるなら要注意ですよ?
|
20 Re: Shiftとか 名前:名無しさん 2004/11/8 23:22:51
キタ━━━━━━(゜∀゜)━━━━━━!!!!!!!!
I.Tak.さんの指摘がドンピシャ!!!!
一気にうまくいきましたぁぁぁぁあ!!!
よーーし! あとは、簡単なコマンドを搭載してみて、それを0.01としてリリース予定だぁぁ!!!
>このへんMASMと違うので, そういう解説を >読んでるなら要注意ですよ?
・・・つか、ちょっと一旦、naskの使い方を整理してみたほうがいいかなぁ。(私自身のためと、naskを使ってみたいという人のために)
|
21 Re: Shiftとか 名前:名無しさん 2004/12/12 22:21:23
さて、あまりいつまでもお休みしてられないので、ちょこっとづつでも手をいれてかなくちゃ。
現在、大まかな強化機能が出来上がってくれた。さあ、いよいよ、コマンドの搭載である。
現状の作り(ベターっとアセンブラで書いてある)では、どうせ本当の意味でのコマンドは搭載できないので、「コマンドっぽい」って感じでまず実装。
考え方としては、どこかにコマンド格納用のエリア(バッファっていうのかな?)を確保し、最後に打たれたEnterから、新しく打たれたEnterまでを格納する。
まずは、そんなところから始めてみよう。
この場合、すぐに思いつくのが、アセンブラのコード上で、DBとかを使ってエリアを作っておいて、そのラベルをプログラム上から参照するという方法。これはすぐに出来そうだが、これだと実行時にしか使わない、無意味なデータエリアがOS本体のファイルサイズに反映されることになる。別にこのOSは、OSASKみたいにサイズのこだわっているわけじゃないが、チトあまりにも無駄っぽいような。
・・・うーん、でも、とりあえずはいいや。まずはこの、おもいっきしベタな方法をとにもかくにも実装してみよう。
|
K氏のheboOSをまねてみる |
Menu of Threads Previous Topic Next Topic |
1 名前:hideyosi 2004/9/22 17:32:33
OSASKのK(川合氏)が、OS作成に関するチュートリアルを公開している。ふむふむ。なになに?
あいかわらずKは口がうまい!
なんだか出来そうな気がしてくるじゃねーかよ! そんなわけで、思いつくまま体験をばしてみたり。
参考: http://community.osdev.info/index.php?FirstStep |
91 Re: キーコード変換 名前:hideyosi 2004/10/18 23:21:58
ENTERキーの処理。 まず、ENTERキーの分岐をおきます。これは簡単。
------------------------------ ;ENTER キー CMP AL,0x1C ;Zが押されている JE ENTERPRINT --------------------------------
で、このENTERPRINTってラベル以下にコードを書けば出来上がり・・・
------------------------------------------------ ENTERPRINT: ;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0 MOV DH,Y座標 INT 0x10
JMP INTEND -----------------------------------------------
・・・・あれれ? この場合、Y座標の値ってどうするんだ?
順当に考えると、「現在のY座標+1」ってことだよね? むむむ?? 「現在の座標」って、どうやって求めるんだろう? さっそくいろいろと調べてみた。 なになに? 0040:0050hがそうだって??? うむむむ??? どうもよくわからないや。こりゃ、実験しかないか!?
|
92 Re: キーコード変換 名前:hideyosi 2004/10/18 23:34:54
うーん・・・0040:0050hという表現。これまでのパターンだと、これは、セグメント:オフセットのパターンではないかなぁ?
そうすると、この0040:0050hという場所の値を読み出すには
------------------------------------------- MOV AX,0x40 MOV ES,AX ; ESを0040にする。 MOV AX,WORD[ES:0x50] ーーーーーーーーーーーー---------------
こういうコードになるのかな???
|
93 Re: キーコード変換 名前:hideyosi 2004/10/19 1:06:47
だあぁぁぁぁぁぁ!!!!!
にゃんだよクソ!!! ちゃんとBIOSにあるぢゃん!
ってことで、こういうコードを追加して、目的の動作をしました。
------------------------------------------- ENTERPRINT: ;現在のカーソルの位置を取得(Y座標のみ) MOV BH,0x0 MOV AH,0x03 INT 0x10
;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0 INC DH ;上で取得した行位置+1 INT 0x10
JMP INTEND -------------------------------------------------------
|
94 Re: キーコード変換 名前:hideyosi 2004/10/19 3:32:30
上の状態だと、カーソルが最下行に行っちゃうと、固まったようになって画面が動かなくなっちゃう。 で、こんなコードに変更。
---------------------------------------- ENTERPRINT: ;現在のカーソルの位置を取得(Y座標のみ) MOV BH,0x0 MOV AH,0x03 INT 0x10
INC DH ;上で取得した行位置+1
CMP DH,0x19
;もし、最下行だったらロールアップ JE ENTERPRINTLUP
;そうじゃなかったら、普通にカーソル移動
JMP ENTERPRINTNML
ENTERPRINTLUP: ;ロールアップ。まず、ロールアップをする MOV AL,0x01 MOV BH,0x0F MOV CH,0x01 MOV CL,0x0 MOV DH,0x18 MOV DL,0x4F MOV AH,0x06 INT 0x10 ;カーソルを最下行にセット MOV DH,0x18 JMP ENTERPRINTNML
ENTERPRINTNML
;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0
INT 0x10
JMP INTEND --------------------------------------------------
おーー! まるでエディタの如く、最下行でロールアップするぞ!?
|
95 プロンプトの搭載 名前:hideyosi 2004/10/19 21:21:50
なんか、「見た目だけ」とはいえ、だんだんMS-DOSっぽくなってきて楽しいなぁ・・・。 そんなわけで、プロンプトを搭載してみよう。 これはそうむずかしくない。まず、テキスト画面を一旦クリアする。 で、プロンプトを表示する。 さらに、Enterキーが押されたら、とりあえず無条件でプロンプトを表示させると。
------------------------------------------------- ENTERPRINTNML
;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0
INT 0x10
CALL PROMPTPRINT
JMP INTEND
PROMPTPRINT: ;BIOSコールで文字列を表示 MOV AH,0x13 MOV AL,0x01 MOV BH,0x0 MOV BL,0x0F MOV CX,0x07 ;本来はここで、DLとDHで座標を指定するが、これは変わらないので ;いらないと思う MOV BP,pmsg INT 0x10 RET
;プロンプトの文字列 pmsg DB "THEBBL>"
-------------------------------------------------------
・・・・ぶははははは!!! できたできたー!
|
96 リリース!(ごっこ) 名前:hideyosi 2004/10/19 22:58:01
さーてと!! とりあえず、キリがいいので、この私のOS(は?)を、リリースして みよう。
hideyOS Ver 0.01ってことで。(笑
http://thebbl.hideyosi.com/age/hdOS001.lzh
・・・みなさんに笑って頂いてナンボですから・・・ (T∀T)
あ、あと、これまでのソースは、こちらから直で見られます。 アドヴァイスなんかしてみようなんて方は、是非・・・(^^;)
http://thebbl.hideyosi.com/age/test11.nas.txt
|
97 Re: リリース!(ごっこ) 名前: -- K 2004/10/19 23:13:43
早速楽しんでいます。.COMは374バイトで、Win2000のDOS窓でも動いています。
ささやかな要望を。キーを離したときに入力されるというのは、ちょっと脱力系なので、できれば押したときに入力されてほしいです。
あと、BackSpaceの処理が追加されたら、もっとそれっぽいかも!
さらに、最初に"hideyOS Ver 0.01"みたいなメッセージがあったらいいなあ。
それでは。
|
98 Re: リリース!(ごっこ) 名前:hideyosi 2004/10/19 23:22:49
>早速楽しんでいます。
ぐはぁ!!! よりによって、Kタンが試している!? 魚影〜!!! ゴロゴロゴロ・・・・ <恥ずかしくてのたうちまわっている
>できれば押したときに
・・・あ” そっかぁ。そいえば、押してときの動作って、やってみたことないなぁ。さっとくためしてみよう。
さて、ほいだば、Ver 0.02に向けてガンバロ! Ver0.02では、まず、キーボードの処理をなんとかする。Kタンにアドヴァイスしてもらった書き方の理解と勉強。当然、BSやShiftなんかの処理も搭載したいなぁ。
あと、とりあえず、なんらかのコマンドを搭載したい。たとえば、clsとか、rebootとか。
あと、現在は画面関係はみんなBIOSにたよっているけど、これをなんとかできないか実験してみよう。
|
99 Re: リリース!(ごっこ) 名前:feel 2004/10/19 23:49:28
試しました しっかり動きますね 私も頑張りたいと思います 頑張って下さい 家のウイルス対策ソフト(NOD32)が過剰反応してビビりましたが 何ともなくてよかったよかった
明日から修学旅行だぁ〜 京都へ台風と戦いに行ってきます そしたらまた頑張ります
|
300 Re: リリース!(ごっこ) 名前:hideyosi 2004/10/20 22:35:00
feelさんどもです〜
>家のウイルス対策ソフト(NOD32)が過剰反応してビビりましたが
ぐはぁ!!! やっぱ、BIOSやらを呼んでいるからかな??
>明日から修学旅行だぁ〜 >京都へ台風と戦いに行ってきます
え”〜・・・よりによって・・・・ なんつーか、今回もまたエラク巨大な台風。せっかくの京都。楽しめるといいんですがねぇ。(あー!私も京都イキテー!)
さて、先日、ごっことは言え、いったんキリがいいということでリリースをして、かつ、バージョン番号も振ってみました。 そんなわけで、ここの番号もまたキリがいいっつーことで、このスレを一旦閉じます。(かなりながーくなってしまったので)
Ver 0.02に向けて、新しいスレ。「OSを作れたらいいねぇPart2」を立てます。
|
CPUのお勉強 |
Menu of Threads Previous Topic Next Topic |
1 名前:hideyosi 2004/9/24 0:43:46
ヘコヘコとCPUのお勉強をしてみたり。
xxビットCPUの意味。
CPUについて調べてみた。・・・・ギブアップ!!!! (;´д`) いろいろややこし過ぎてわからんわい!!!!
だた、私お得意の「一旦大雑把な法則を見つけ出して憶えていく」に照らし合わせると・・・
xxビットCPU。つまり二つの要素に影響する。メモリアクセスと演算処理。
まずは演算処理。 「ビット」って言うとピンとこないので、ソロバン、もしくは電卓を想像してほしい。8ビットは、桁が8桁までしかない電卓と考える。 例えば8ビットCPU。8ビット。すなわち桁が8桁(零から千万まで)しかない電卓。0〜99,999,999までに収まるような計算(計算結果も含めて!)なら、一発で求められる。「=」を押せば、答えは液晶に表示される。 しかし、それを超えると面倒(時間が掛かる)になる。これは想像できるだろう。一旦、メモに書いたりして、桁を分割したりして計算しないと答えがでない。つまり、何倍も時間が掛かるわけ。 つまり、平べったい理屈で言えば、電卓の桁数(ビット)が多ければ多いほど、一回の計算で済む。すなわち、早いということになる。
次に、メモリアクセス。 アドレス空間が・・・っていうとピンとこないので、「使えるメモ帳のページ数」と考える。 ここで言うメモ帳はへんな性質があって、さっきの電卓の桁数に応じて、ページ数・一ページに書ける桁数が決まる。 つまり、8ビット(8桁の電卓)だと、メモ帳のページ数は0〜99,999,999ページまでしか使えない。さらに、一ページに書き込める数字も、0〜99,999,999に限定される。 この範囲に収まる計算ならよいが、桁があふれると、とたんに何倍もの計算時間が掛かるってのは、もうわかるよね。
8ビット、16ビット、32ビット。これだけ見れば、「たかが倍じゃん。たいして違わないんじゃないの?」と思うかもしれないけど、上記の例で比べればピンと来るでしょ?つまり、
8ビット(8桁電卓) ・一回で0〜99,999,999までしか計算できない ・メモ帳のページ数は9千万まで ・一ページに書ける最大の数字は99,999,999
16ビット(16桁電卓) ・一回で0〜9,999,999,999,999,999までの計算が出来る ・メモ帳のページは、9千兆以上! ・一ページに書ける最大の数字も9千兆以上!
これを考えれば、例えばもっともよく使う数字の桁が十億あたりだった場合、8桁と16桁では、倍ではすまない。ヘタすると何十倍も時間の差が出る。
だから、通常、ビットが多いと、それだけ早くて高性能ってことになるわけ。
(余談だが、「じゃ、ちょうどいい12桁の電卓作ればいいじゃん!」って意見がある。ごもっとも!でも、この電卓はなぜか倍というキリのいい数字でないとかえって作るのが大変という性質を持っていると考えてもらえば。)
・・・しかし、「じゃ、ビット(電卓の桁)が多ければ多いほどいいのか!」っていうと、そうでもないんだよね。これが! (^^)
今の物価を考えると、ウン十億まで(10桁)があれば十分でしょ?普通。 (私は7桁でジューブンだ!悪かったな!!!) そうなると、液晶の桁が10個並んでいる電卓で十分だよね?。そんな世の中で、全ての電卓が、16桁あったら・・・邪魔!!!! 「今の」物価で考えれば、8桁の電卓で十分だし、小さいので扱いや持ち運びも便利。16桁の電卓は「過剰品質」ってことになるわけ。 でも、例えば10年後。またバブル景気があって、給料の平均が一億円。そのぶん、缶コーヒーが一本12万6千900円という世の中になったとしよう。そうすると、8桁電卓は「すさまじく不便」になり、多少大きくても16桁の電卓が一番便利になる。
つまり、その世の中や対象によって、一番使いやすくて便利な桁数が変わるということになるわけ。
だから、例えばライブドアの社長が便利なパソコンは64ビット。でも、私が使いやすいのは8ビット。とか、そういうふうになるわけ。 (これは電卓の例での話ね)
現在、一番使いやすいとされているのが、32ビット。もう既に64ビットのCPUはあるんだけど、ちょーっと過剰品質状態なわけ。 (でも、じりじりと「32ビットじゃ足りない!」という状況が増えてきているのね。)
|
2 Re: CPUのお勉強 名前:hideyosi 2004/9/24 0:44:21
リアルモードとプロテクトモード。 (例によって大雑把だよ)
インテルのCPUは、幸か不幸か、8086という16ビット版のCPUが大ヒットした。そして、その上で動くことを前提にしたMS-DOSも大ヒット。沢山の資産が生まれた。
時代が進み、16ビットじゃ足りないってことで、インテルは32ビットの高機能な新型CPU、80386を開発!。これで今までの面倒な問題も一気に解決。高速・大容量のメモリも使える。ばんざーい!
・・・と思ったら、あまりにもMS-DOSがヒットしすぎていた。いまさらMS-DOSがまったく動かないCPUじゃ売れない。MS-DOSの32ビット版を作ったって、みんながその新MS-DOSを買って使ってくれるとは限らない。こまった・・・
で、しょうがない。せっかくの32ビットだけど、16ビット(8086)とまったく同じに動く機能を追加しよう。これなら古いMS-DOSしか使いたくない人にも安心して買ってもらえるぞ!
うーん。いろいろとリサーチしたら、なんかみんなMS-DOS以外、あんまし使いたがっていないようだ。32ビットのまんまだと、「動かねーじゃねーか!」とか苦情きそう・・・
じゃ、こうしよう。80386は本来は32ビットだけど、電源を入れた瞬間は8086ってことで動く。で、プログラムとかである特別なスイッチを入れれば、32ビットに切り替わるというように設計する。
・・・っとまあ、こういう感じだったようです。(本当の経緯は違いますよ!念のため)
で、その、電源を入れたばっかりの状態(8086として動く、16ビットの状態)、これを、「リアルモード」といい、なんらかの方法でスイッチが入れられ、32ビットになった状態を、「プロテクトモード」と言うわけ。
この、80386で定められた動作の規格は、今でもずーっと受け継がれている。80486・80586(Pentium)・80686(Pentium2)・・・・
OSはいろいろあるけど、インテルのCPUで動くものは、みなこの仕様(というか、制約?)に縛られる。なので、動作までは、
1、電源投入 2、いやおうなしに、CPUは8086(リアルモード)になる。 3、CPUの仕様として、決まった番地のアドレスにジャンプして実行する 4、この決まった場所は普通、ROMになっている。ここにBIOSというプログラムが書いてあって、これを実行する。(BIOSが壊れているとかでない限り、これは回避できない) 5、BIOSには、FDのある部分を読んできて実行しろというプログラムが書かれている。(これがIPL) 6、IPLが実行される。(へ理屈だが、このIPLに全ての命令を書き込むことが出来れば、この時点でOSということになる。IPLには大きさの制限があるので、普通はここには、xxxを読み込んで実行しろという程度の命令だけしか書かれていない) 7、IPLによって、OSの本体が読み込まれ、実行される。(OSが起動!) 8、この時点では、どんなOSでも16ビット。MS-DOSと大差なく、低性能。 9、LinuxやOSASKなどの32ビットOSの場合は、この16ビットの状態の時に、あるスイッチを入れて32ビット状態(プロテクトモード)に切り替えられる。 10、ここで初めて、マシンは32ビットになる。あとは、16ビットの時にあらかじめ読み込んでおいた32ビットでプログラムが書かれている場所にジャンプし、それを32ビットのCPUとして実行を開始する。 11、32ビットOS、起動・初期化処理開始!!!!
・・・っとまあ、大変大雑把だがこんな感じなのだろうなぁ。きっと。
|
3 Re: CPUのお勉強 名前:hideyosi 2004/9/24 0:45:18
>> ・・・っとまあ、大変大雑把だがこんな感じなのだろうなぁ。きっと。
>まさにこんな感じです。あまりにも正確すぎて、フォローするところがありません(笑)。
Kタンにお墨付きを貰ってみたり・・・
|
4 Re: CPUのお勉強 名前:hideyosi 2004/9/24 0:54:05
リアルモードとプロテクトモード 2
これまでいろいろ調べて、ぼんやりだけどCPUのことが解ってきた。 ・・・で! である。 実際に、OSとまではいかなくても、「ちゃんと動作する」ものを考えてみる。(文字表示とかだけじゃなくて)
時代は32ビットタケナワ! MS-DOSは資産がいっぱいあるけど16ビットなんで低性能・プログラムも不自由ってことだから。
・・・しかし!である。ざーっと調べてみた限りだが、16ビットは機能が単純なぶん、プログラムも単純にできるというニュアンスがあるように感じ始めた。 どうせ今の私のアセンブラ能力は、文法もまだままならない状態。こんな状態で無理するより、まずは16ビットである程度動くような状態にすることを目指す。「アセンブラそのもの」への勉強や慣れも必要だろうし。 「OSなんて言えない」という程度。でも、パッと見ると、なんとなくDOSに見えなくもない。そんな程度を一旦目標にしよっと。
|
5 Re: CPUのお勉強 名前: -- K 2004/9/27 2:00:03
CPUのモードについて僕が書いた文章。 参考になるかどうか分からないけど、とりあえずどうぞ。
http://community.osdev.info/index.php?x86_mode
|
6 Re: CPUのお勉強 名前:hideyosi 2004/9/27 22:24:03
>参考になるかどうか分からないけど、とりあえずどうぞ。
いつもありがとうございます〜。
|
|