K氏のheboOSをまねてみる

11:Re: K氏のheboOSをまねてみる
hideyosi 09/23 01:12
さーて! そんなわけで、BIOSだけで文字を表示することができました。こんなコードね。(^^;)

[BITS 16]
[OPTIMIZE 1]
[OPTION 1]
[INSTRSET "8086"]
[FORMAT "BIN"]
ORG 0x100


;画面クリア
;カーソルを0,0に設置して
MOV BH,0
MOV DH,0
MOV DL,0
MOV AH,0x02
INT 0x10

;全画面消去(80文字24行)
MOV AL,0
MOV BH,0
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,80
MOV AH,0x06
INT 0x10

;文字列の表示
MOV AL,0x01
MOV BH,0
MOV BL,0x0F
MOV CX,30
MOV DL,0
MOV DH,0
MOV ES:BP,msg
MOV AH,0x13
INT 0x10

MOV DL,0
MOV DH,1
MOV ES:BP,msg2
INT 0x10

MOV DL,0
MOV DH,2
MOV ES:BP,msg3
INT 0x10

MOV DL,0
MOV DH,3
MOV ES:BP,msg
INT 0x10

JMP $

;メッセージ部分
msg DB "******************************"
msg2 DB "* Kokoga Henndayo! *"
msg3 DB "* The-BBL!!! *"


動作も無事、DOSで確認。ちゃんと動いてる。
ほいだばほいだば!!!
さっそくこれをOSみたく、起動時に読み込むようにしてみましょ。
そのためにはIPLっつーもんを書かなくちゃいけない。

・・・・ギブアップ!!!! (;´д`)  (つか、あとで勉強しまする・・・)

heboOSに付いていたipl.binをそのまんま流用。なになに? copyコマンドで繋ぐ!??

えーっと。こーゆーことかな???

>copy ipl.bin+test2.com test2.bin

おぉ! 一個になったぞ!!!!

えーっと。そんでもってimgtolでFDに書き込むわけね。

>imgtol w a: test2.bin

そんで出来上がったFDを入れてリセットしてと・・・・
キタ━━━━━━(゜∀゜)━━━━━━!!!!!!!!
ぶははははは!!!! でけたでけたーー!!!!! (爆



12:Re: K氏のheboOSをまねてみる
hideyosi 09/23 02:58
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ビットじゃ足りない!」という状況が増えてきているのね。)



13:Re: K氏のheboOSをまねてみる
-- K 09/23 08:28
あとからここを読む人のためにちょっとフォロー

  MOV ES:BP,msg

はたまたまうまくいっていますが、本来は正しくない表記です。

  ES:BP == msgのアドレス

といった場合、msgのアドレスのオフセットをBPに、セグメントをESに入れます。
でも、残念ながらESとBPに値を代入するのは、1個のMOV命令ではできません。これはCPUの仕様です。

.COMファイルの場合、とりあえずESには適切な値が入っていますので、ESへの代入は気にしなくていいでしょう。ということで、

  MOV BP,msg

がこの場合の正しい記述になります。

14:Re: K氏のheboOSをまねてみる
hideyosi 09/23 17:55
CPUのオベンキョ。
リアルモードとプロテクトモード。
(例によって大雑把だよ)

インテルの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、起動・初期化処理開始!!!!

・・・っとまあ、大変大雑把だがこんな感じなのだろうなぁ。きっと。



15:Re: K氏のheboOSをまねてみる
-- K 09/23 18:56
> ・・・っとまあ、大変大雑把だがこんな感じなのだろうなぁ。きっと。

まさにこんな感じです。あまりにも正確すぎて、フォローするところがありません(笑)。


16:Re: K氏のheboOSをまねてみる
hideyosi 09/24 03:46
ずーーーーっとOSの骨組(というか概念)を調べていたら、こんな時間かよ!!!! (;´д`)
ヲレ、明日仕事なんでツけど・・・(つか、既に「今日」じゃん!)

Linuxのカーネル(の解説書)を読んでました。もう、なにがなんだかサパーリなんだけど、一つ、「もしかして、これか?」なのを見つけました。

      ・・・無限ループ・・・



      _人人人人人人人人人人人人人人_
        >    な なんだってー!!    <
        ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
        _,,.-‐-..,,_       _,,..--v--..,_
    /     `''.v'ν Σ´        `、_,.-'""`´""ヽ
    i'   / ̄""''--i 7   | ,.イi,i,i,、 、,、 Σ          ヽ
.     !ヘ /‐- 、u.   |'     |ノ-、 ' ` `,_` | /i'i^iヘ、 ,、、   |
    |'' !゛ i.oニ'ー'〈ュニ!     iiヽ~oj.`'<_o.7 !'.__ ' ' ``_,,....、 .|
.   ,`| u       ..ゝ!     ‖  .j     (} 'o〉 `''o'ヽ |',`i
_,,..-<:::::\   (二> /      !  _`-っ  / |  7   ̄ u |i'/
. |、 \:::::\ '' /        \ '' /〃.ヽ `''⊃  , 'v>、
 !、\  \. , ̄        γ/| ̄ 〃   \二-‐' //`





17:Re: K氏のheboOSをまねてみる
hideyosi 09/24 03:58
MS-DOS(いやまあ、どんなOSも厳密にはそうだけど)は、起動して、必要な処理を全て終えると、プロンプト(命令の受付準備が完了しました。嗚呼・・・ご主人様。なんでもお命じください・・・)を出して、止まっちゃう。ほっとくと、ずーーーっと命令を待っている。そう。ずーーーと!!!

これって、「無限ループ」なんじゃないのかなぁ。

そんで、その無限ループの途中に、もしなんらかの命令があったらそれを実行し、実行が終わったら、また元のループに戻ってきて、またずーーーっと命令が来るまで無限ループをしてずーっと待っていると・・・

こんな感じ・・・・か?

       ↓
    初期化とかの処理
       ↓
       ↓
    スタート地点 ←←←←←←←←←
       ↓                 ↑
       ↓                 ↑
       ↓                 ↑
   もし、キーボードが押されたら、   (グルグル・・)
   「尿!」と表示して戻って来い     ↑
       ↓                 ↑
       ↓                 ↑
       ↓                 ↑
     スタート地点に戻れ!→→→→→

こういう理屈・・・なのかなぁ。



18:Re: K氏のheboOSをまねてみる
hideyosi 09/24 04:00
つーか、寝ろよ!!! 俺!!!!  (;´д`)

19:Re: K氏のheboOSをまねてみる
あっきぃ 09/25 16:37
hideyosiさん、こんにちわん。
hideyOSを作っているとKタンからきいてきましたょ!
参考になるかわかりませんが、Mt.orzOSはオープンソースなので
よかったらみてみてください〜^^
(…といっても、同じくheboOSの発展版ですが^^;;;)

20:Re: K氏のheboOSをまねてみる
hideyosi 09/25 16:56
>>19
にょにょ〜!!!
あっきーさ、どもども〜。ありがとう。

さっそくパクッて自分の手柄に ←間違い!

さっそく参考にさせてもらいます〜。
いやいやいや、「heboの発展」とな? まさにいまの私にとっては
ドンピシャな資料かもしれない!! うれしー! 

ちなみに・・・
>hideyOSを作っているとKタンからきいてきましたょ!
それは間違いです!!!!
こんなので「OS作っている!」って言ったら、2chでゴルァゴルァと袋叩きにされますって!!

それと、どこまで出来るかわかんないけど、例のTHE-BBLがちゃんとしたライセンスなり方針を決定して、そのライセンスに納得できれば、THE-BBLプロジェクトにブン投げる予定のもんです。
(イラネー!って言われる公算大でつが・・・・


1-

BluesBB ©Sting_Band