OSを作ろう@2ch/01.OSをつくろうpart2


Top / OSを作ろう@2ch / 01.OSをつくろうpart2

OSをつくろうpart2

1 名前: ひげぽん 投稿日: 02/06/18 23:48

   独自にOSを作っているまたは、作ろうとしている人たちのための
   スレッドになればと思います。
   では私の疑問から
   (1)OSを作る場合、CPU周りに本当に近いところはアセンブリで
   書かないと無理なのでしょうか。
   私が、ソースを眺めたことのあるlinuxや、OSASKは、アセンブリと
   Cで書かれてます。
   (2)昔JavaBasedOSのソースを見たことがありますが、
   結局はCで書かれている所が多かったです。
   リアルタイム処理が苦手なJavaでOSを作るのは無理なんでしょうか。
   Javaマシン(バイトコードをそのまま処理するやつね)上で
   動かすなら事情は違うのでしょうけど。

2 名前: デフォルトの名無しさん 投稿日: 02/06/18 23:49

   もう外出だよ

3 名前: 2 投稿日: 02/06/18 23:50

   Σ(´д`)
   ・・・・2getシトケバヨカタ・・・

4 名前: デフォルトの名無しさん 投稿日: 02/06/18 23:51

   1はちょっと本気っぽいな。
   がんばれよ。

5 名前: 2 投稿日: 02/06/18 23:51

   あ、しかもちゃんとpart2ってあるな・・・
        ||
      Λ||Λ
     ( / ⌒ヽ
      | |   |
      ∪ 亅|
       | | |
       ∪∪

6 名前: manko_chinko 投稿日: 02/06/18 23:53

   カーネルだけで何万行ぐらいだろう、、、

7 名前: デフォルトの名無しさん 投稿日: 02/06/18 23:53

   linuxとOSASKを並列にするのもどうかと思うが・・・
   けどアセンブリで書かなきゃいけないところってそんなに多くないよね。

8 名前: デフォルトの名無しさん 投稿日: 02/06/18 23:55

   アセンブリで書かないと逝けないのはブートローダーと、
   IO関係でタイミングがシビアなドライバだけ。

9 名前: ひげぽん 投稿日: 02/06/18 23:55

   >>4
   ありがとう。
   >>6
   そうですね。途方も無いですね。
   しかも、洗練されたコードが数万行・・・
   それよりも、デバイスドライバーがきついかも。
   >>7
   そうなんですよ。
   一部アセンブリ(パフォーマンスが重要なところ。。。)
   ですよね。

10 名前: デフォルトの名無しさん 投稿日: 02/06/18 23:56

   ユニックスのソースコード
   int main(){
   for(;;)
   getChar();
   }

11 名前: ひげぽん 投稿日: 02/06/18 23:58

   >>8
   アセンブリって、CPU毎に違うんですよね?
   何か良い参考書をご存知ありませんか?
   特にOS作成にかかわる部分で・・・

12 名前: デフォルトの名無しさん 投稿日: 02/06/18 23:59

   >>11
   インテルのマニュアル

13 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:01

   ひげぽんって何歳?

14 名前: ひげぽん 投稿日: 02/06/19 00:01

   1>>にも書きましたけど
   almost javaでOSは無理っすかね?
   優秀なnativeコンパイラがあれば出来るのでしょうか。
   JavaのほうがCよりも得意です・・・

15 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:01

   アセンブラなんて、大学の時の授業で、Win上で動くZ80エミュレータ用
   の書いたのが最後だ、、、。

16 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:02

   Intelのマニュアル群だ、開発者どもは見とけ!
   http://www.intel.co.jp/jp/developer/design/litcentr/index.htm

17 名前: ひげぽん 投稿日: 02/06/19 00:03

   >>11
   >インテルのマニュアル
   うぅ。
   やはりそうきますか。
   >>13
   24才です。もしや年齢制限あり?

18 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:04

   そうそう。前から思ってたんだけど恥かしくて聞けなかったので聞く。
   よく言う機械語ってCPUが解釈できる言語(?)というかデータと教わったけど、
   OSによってバイナリコードって違うじゃん。
   ってことは、OSがexeファイルとかを機械語に翻訳してるの?

19 名前: ひげぽん 投稿日: 02/06/19 00:05

   >>16
   thanks!!
   しかも日本語じゃん。
   なんかわくわくしてきた。早速読ましてもらうよ。
   これだけでこのスレッド立てた意味があったよ。

20 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:07

   >>18
   それ俺も気になってた。

21 名前: ひげぽん 投稿日: 02/06/19 00:08

   間違ってたら誰か突っ込んでね。
   >>18
   .exeファイルそのものが実行イメージだと思う。
   メモリーにロードされてそのまま実行されるんじゃないのかな。

22 名前: 18 投稿日: 02/06/19 00:11

   >>21
   恥を忍んでさらに聞く。
   じゃあ、exeファイルもx86系のCPUで動いてるほかのOSのバイナリ
   コードと(ヘッダとかそういうの除いて)同じなわけ?

23 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:12

   OSによって違うのは、ヘッダとか、データとの
   配置レイアウトとか、DynamicLinkするテーブルとか。
   実行される機械語としては、OS毎に違いは(あんまし)ない。

24 名前: 18 投稿日: 02/06/19 00:13

   >>23
   そうなんだ、、知らなかった、、。ありがおつ

25 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:13

   つかぬ事をお聞きしますが、Windowsはどんな言語で組まれているんでしょうか?

26 名前: ひげぽん 投稿日: 02/06/19 00:14

   >>22
   OSによって異なっているハードウェアへの制御のコードの部分もあるから
   まったく一緒で互換性があるとはいえないじゃないかなあ。
   うーん自信なしです。→誰か識者さん助けて。

27 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:14

   >>25
   COBOL

28 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:15

   あと、システムコールとか違うだろ

29 名前: ひげぽん 投稿日: 02/06/19 00:15

   >>25
   昔C++で組まれていると聞いたことがあるがどうなんでしょう。
   >>23
   THANKS これからもよろしく

30 名前: 18 投稿日: 02/06/19 00:15

   >>25
   それは聞いた事ある。
   基本はC/C++で、MFC使って書いてるらしい。
   このMFCも外部に出してないMS秘蔵のMFCがあるらしい。
   ま、OSでも上層部分の話だろうけど。

31 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:16

   どんなC/C++コンパイラ使ったんでしょうか

32 名前: 18 投稿日: 02/06/19 00:17

   まあ、どの部分までを"OS"って呼ぶかだよな、、

33 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:17

   おほほ領すレの予感

34 名前: ひげぽん 投稿日: 02/06/19 00:18

   NTのカーネルのソースは見てみたいね。
   マイクロカーネルなんですかね?

35 名前: ひげぽん 投稿日: 02/06/19 00:19

   >>31
   INTELってコンパイラ出してましたよね。
   あれってどういう開発者が使うんでしょうか?_
   デバドラ関係?

36 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:20

   >>34
   いや………当初、それがウリだったんですが。

37 名前: ひげぽん 投稿日: 02/06/19 00:21

   >>30
   C++なら、ある程度はオブジェクト指向でかけるので
   C ONLYよりはいいかも。
   でも秘蔵のMFCってやだなあ。

38 名前: ひげぽん 投稿日: 02/06/19 00:22

   >>36
   やっぱりそうなんですか。
   最近なんかの本に書いてあったのを見た記憶があります。
   ある程度は成功してるってことですよね。

39 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:24

   俺も、UNIX(初期のじゃない)がC書かれたように
   C++で独自OS(高性能)を書いて見たいですね

40 名前: ひげぽん 投稿日: 02/06/19 00:24

   >>36
   マイクロカーネルは、カーネルを細かいモジュールに分けて
   複雑さを取り除こうという概念ですよね。
   きちんと役割分担をもたせる。
   でもそれって、モジュール間の関連が複雑になるんですよね。
   モジュール数が増えれば増えるほど・・・

41 名前: ひげぽん 投稿日: 02/06/19 00:26

   >>39
   おいらもっす。
   ていうか、ここで同志を見つけたり
   自分のモチベーションを上げたいですね。

42 名前: ひげぽん 投稿日: 02/06/19 00:28

   どうなんでしょうか。
   既存OSをベースにするならunix系かなと思うんですが、
   必ずしもunixの設計が理想的とはいえないと本で読んだことがあるし
   分散化とか考えたら頭がパンクします。

43 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:29

   >>40
   モジュール感の関連を疎遠な物にするためのマイクロカーネルだが。
   複雑なのはモノリシック

44 名前: ひげぽん 投稿日: 02/06/19 00:30

   >>43
   おお。モノリシックとは何ですか。。
   勉強になります。

45 名前: ひげぽん 投稿日: 02/06/19 00:35

   勝手にリンク
   [OSASK]
   ttp://www.imasy.org/~kawai/osask/index.html
   ほかにもあったら紹介してほしいな。

46 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:37

   atheosとかは?

47 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:38

   >>45
   thnx!今はvmwareがあるから便利だね。

48 名前: デフォルトの名無しさん 投稿日: 02/06/19 00:39

   Powers CEベースのOSを作るというのはどうですか?

49 名前: ひげぽん 投稿日: 02/06/19 00:50

   スレッドがにぎわってきてうれしいです。
   >>46
   明日会社で見て見ます・・・

50 名前: ひげぽん 投稿日: 02/06/19 00:56

   >>47
   vmware上でOSの実験とかって出来るんですかね。
   ブートとか。
   vmwareつかったこと無いです。

51 名前: デフォルトの名無しさん 投稿日: 02/06/19 01:18

   現代的なOSは、メモリ管理やプロセス管理、
   それらを安全確実なものにするための
   ハードウェア的なメモリ管理機構の活用が当たり前だけど、
   それとは違ったアプローチでもちゃんとした環境が作れる。
   その例が、SmalltalkやJavaVM。
   こちらからのアプローチで勉強するのも悪くない。
   OSというのとは違うけれど、色々と参考になると思うよ。
   もし一般的なOSと同じ構成のそれを作りたいのなら、
   アスキーから出ている「はじめて読む486」がいい入門になる。
   他にも、ピアソンから出ている「オペレーティングシステム 第2版」が
   OSの教科書の古典として有名。
   http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html
   http://www.pearsoned.co.jp/washo/operate/wa_ope03-j.html

52 名前: デフォルトの名無しさん 投稿日: 02/06/19 02:06

   漏れはPowers CEでOSを勉強した。

53 名前: デフォルトの名無しさん 投稿日: 02/06/19 02:16

   Powers CE ってなんだ?
   ググってもそれっぽいのが引っかからないが。

54 名前: デフォルトの名無しさん 投稿日: 02/06/19 02:17

   patroで検索

55 名前: デフォルトの名無しさん 投稿日: 02/06/19 02:34

   さっぱり引っかからん。
   直リンくれ。

56 名前: デフォルトの名無しさん 投稿日: 02/06/19 02:35

   ここにも粘着君(>>52)が居たか・・・

57 名前: ひげぽん 投稿日: 02/06/19 23:07

   >>51
   ありがとう。
   初めて読む486本屋で探してみます。-

58 名前: ひげぽん 投稿日: 02/06/19 23:09

   さてまじめにOSを作ろうとしている(または挫折した人)
   お話をぜひ聞かせてください。

59 名前: デフォルトの名無しさん 投稿日: 02/06/19 23:09

   絶版

60 名前: ひげぽん 投稿日: 02/06/19 23:13

   >>59
   まじっすか???
   むしろ図書館で探すか。

61 名前: ひげぽん 投稿日: 02/06/19 23:25

   atheosちょっと見てみました。
   やはり、ある程度はアセンブリが必須なんですかね。
   vmware誰か使ったことあるっすか???

62 名前: デフォルトの名無しさん 投稿日: 02/06/19 23:27

   >>59
   おいおい。うそつくなよ(藁

63 名前: ひげぽん 投稿日: 02/06/19 23:38

   x86アーキテクチャ入門講座
   http://ha3.seikyou.ne.jp/home/Joyit/asm/regs.html

64 名前: デフォルトの名無しさん 投稿日: 02/06/19 23:49

   アセンブラとかの本は需要が無いのか絶版多し。

65 名前: デフォルトの名無しさん 投稿日: 02/06/19 23:51

   便乗質問。
   昔あった98テクニカルデータブックとか
   IBM PC-ATハードウェアバイブルとか
   この手のに相当する資料って今はどっから入手するものなの?

66 名前: デフォルトの名無しさん 投稿日: 02/06/19 23:54

   持ってる香具師からもらうしかないんじゃないの?

67 名前: ひげぽん 投稿日: 02/06/19 23:54

   >>64
   そうですね。本当にごく少数の人しか今は使わないですよね。
   アセンブラで書く部分はコード的には量は少ないけど
   きっと重要なところなんですよね。

68 名前: デフォルトの名無しさん 投稿日: 02/06/20 00:05

   >>66
   ドライバ屋なんかが参考にする書籍って売りに出てないのかなぁ。

69 名前: ひげぽん 投稿日: 02/06/20 00:08

   >>68
   見つけたらぜひ紹介してください。
   68さんもOSを作ることに興味があるんですか・

70 名前: ひげぽん 投稿日: 02/06/20 00:19

   よく見たらアセンブラのスレッドがありますね。
   ちょっと今から読んでみます。

71 名前: デフォルトの名無しさん 投稿日: 02/06/20 00:19

   >>69
   興味はあるけど時間はない(藁
   テクニカルデータブックなら手元にあるから
   古い98を買って何か作りたいなーなんて、たまに思うくらい。

72 名前: デフォルトの名無しさん 投稿日: 02/06/20 00:21

   98関連の資料なら
   スーパーテクニック、テクニカルデータブック、GDCテクニカルブック、プログラマーズバイブル
   あたりが転がってる。
   ほしけりゃ捨てメアド書いておいてくれ。

73 名前: ひげぽん 投稿日: 02/06/20 00:35

   >>71
   なるほど、確かに時間は無いですな。
   会社でこっそりやろうかな。
   うちも9821があまってる。すごい重いノートだよ。

74 名前: デフォルトの名無しさん 投稿日: 02/06/20 00:47

   ひげぽんぽんは今までどんなもん作ってきた?

75 名前: ひげぽん 投稿日: 02/06/20 00:56

   N88ベーシックから始まり
   C,C++,java,perl, ruby をかじりつつ
   今はSEやってます。SEって言ってもほとんどPGですが、
   うーん何を作ってきたかといわれると困る
   仕事では、CでCGI書いたり、シェル書いたり・・・
   javaだとftpクライアントもどきとか・・・
   オセロとかも作ったなあ。

76 名前: デフォルトの名無しさん 投稿日: 02/06/20 00:57

   >>72
   98は意外とオンラインで資料が手に入ったりするからパスかな。
   それほど凝った入れ込み方は今更しないだろうし。
   ATコンパチの方が欲しいけど、ないんだよなぁ。

77 名前: デフォルトの名無しさん 投稿日: 02/06/20 15:28

   http://homepage2.nifty.com/nowsmart/nwsos.htm

78 名前: デフォルトの名無しさん 投稿日: 02/06/20 16:13

   >77
   へぇ、大したもんだね。
   でも魅力的じゃないし、エンドユーザー向けでもない。
   組み込みOSに近い感じ。
   でもそれだったらQNX(http://www.qnx.co.jp)とかあるし。

79 名前: ひげぽん 投稿日: 02/06/20 20:50

   >>77
   thanks!!

80 名前: ひげぽん 投稿日: 02/06/20 20:57

   昨日から少しずつアセンブラの勉強の準備を始めました。
   「はじめて読む486」は見つかりませんでした。
   週末に大きい本屋に行ってきます。
   識者の方に質問なのですが、
   OSを作るうえで、アセンブラでしか書けない部分というのは、
   以下の2つの観点からはどのような感じなのでしょうか。
   ・OS全体に占めるコードの量の割合
   ・OS全体の機能の中で占める、重要さ

81 名前: デフォルトの名無しさん 投稿日: 02/06/20 21:03

   まず気にする部分はブートローダーだけ。
   百〜千行程度。
   ドライバとかはそれこそデバイスによって様々なので、定量化できない。

82 名前: ひげぽん 投稿日: 02/06/20 21:06

   >>81
   なるほど。
   ブートローダーの部分ですが、これって一から書くのでしょうか。
   ある程度は、既存のものを参考にすればよいのでしょうか?
   ブート後の処理も良く分かってないなあ。
   どなたか参考URLを教えてください。

83 名前: デフォルトの名無しさん 投稿日: 02/06/20 21:11

   >>80
   識者じゃないが、
   一般的に言って、ハードウェアを直接弄る部分は
   アセンブラで書かないといけない。これには他の手段はない。
   ハードを制御できなければ使い道がないから最重要部分であるのは間違いない。
   ただ、その分量はどういう構成にするかによって随分と変わってくる。
   これも大雑把な例示をすれば、
   アプリケーション→ドライバ→OS→ハードウェア
   という風に、ドライバの代わりにOSが
   ハードウェアへの直接アクセスを常に代行するのなら
   OSにハードウェアの基本操作ライブラリを入れればいいので量は減る。
   しかしオーバーヘッドが入るので速度は遅くなる。
   アプリケーション→ドライバ→ハードウェア
   こんな具合にドライバが直接ハードウェアを操作するのなら
   オーバーヘッドは減るが、コードが分散するので量も増える。
   また、このような形だと全体制御、エラー処理などの問題も出てくる。
   どちらがいいかは状況による。

84 名前: デフォルトの名無しさん 投稿日: 02/06/20 21:16

   ブートローダ、デバドラ、メモリマネージャ、スケジューラ、あたりはアセンブラだな。

85 名前: デフォルトの名無しさん 投稿日: 02/06/20 21:19

   マイクロカーネルで作るんでしょ?
   ハードウェアもioサービス等を通して高級言語からいじるべき。

86 名前: 77 投稿日: 02/06/20 21:25

   NOWSMART OS は、実際に売れるかどうかは不明。
   しかし、日本では珍しく、DOS 系と相性がよい OS だし、
   最近のマスコミによる、日本のソフト技術者のレベル軽視
   に対する良い反例になってるんじゃないかな。

87 名前: ひげぽん 投稿日: 02/06/20 21:55

   >>83
   >>85
   なるほど。
   ところで既存の代表的なOSは
   アプリケーション→ドライバ→OS→ハードウェア
   アプリケーション→ドライバ→ハードウェア
   のどちらを採用しているのでしょうか。
   OSを作ろうとした場合、
   もちろん最初の設計が一番大事だとは思うのですが、
   まずは、動くものを作りたいというのが人情じゃないですか。
   その際の第一の壁がブート部分かと・・・・
   でもやると決めたらやるしかないですよね。
   マシンをお釈迦にしたくないのでvmware上で実験できれば良いのですが
   どうなんでしょう。

88 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:22

   オライリーの詳説linuxカーネル読んだ人いる?
   誰か感想きぼんぬ。

89 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:27

   アプリケーション->サービス->ドライバ(->OS->IOサービス)->ハード

90 名前: ひげぽん 投稿日: 02/06/20 22:31

   >>89
   ではOS製作者は、OS,IOサービス,ドライバーを
   実装すればよいのでしょうか。

91 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:33

   マジで初心者なんだけど、Cとかで書いた場合、コンパイラはどんなの使うの?

92 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:33

   >>87
   > アプリケーション→ドライバ→OS→ハードウェア
   > アプリケーション→ドライバ→ハードウェア
   > のどちらを採用しているのでしょうか。
   アプリケーション → OS → ドライバ → ハードウェア
   だと思うが。
   > その際の第一の壁がブート部分かと・・・・
   今出てるインターフェース誌を買って読むべし。結構詳しく載っている。

93 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:36

   >>91
   コンパイラは普通の奴。ヘッダファイル/ライブラリが違う。

94 名前: ひげぽん 投稿日: 02/06/20 22:40

   >>91
   あ、それ私も知りたい。
   まずは環境構築ですよね。

95 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:44

   一番大事なのはリンカ。
   自分のOSに合ったバイナリイメージを作らないといけない。
   それから、通常は提供されている標準C/C++ライブラリは使用できない。
   >アプリケーション → OS → ドライバ → ハードウェア
   この形式だと、機能追加=OS(カーネル)の再構築だったりするから、
   サービスを挟むべき。
   それから、ドライバもユーザーモードドライバはOSやIOサービスを経由してハードをいじる
   カーネルモードドライバだけが直接ハードウェアをさわれるようにするべき。

96 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:51

   とりあえず立ち読みでもいいから目をとおすべき。
   「Lion's Commentary on UNIX」アスキー
   x86なら>51の言ってたタネンバウム先生の
   「オペレーティングシステム」
   どちらもコンパクトなコードが載ってるので即役立つはず。

97 名前: 92 投稿日: 02/06/20 22:53

   >>95
   言いたいことはわかるが、ここのレベル考えて書いてる ?
   ドライバのダイナミックロードやユーザーモードドライバなんて言うのは
   一応OSができてからでもいいと思うぞ。

98 名前: デフォルトの名無しさん 投稿日: 02/06/20 22:59

   レベルのことを言うんならJava方式だと思うが。

99 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:23

   ここってネタスレ?すげー笑えるんだけど。

100 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:26

   DX8SDKどこでダウソ?

101 名前: ひげぽん 投稿日: 02/06/20 23:39

   >>98,99
   うう。レベルが低いのは認めますが、
   ここは出発点ということで徐々にレベルアップします。
   少なくともやる気はある。

102 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:41

   十五歳の誕生日にオペレーティングシステム 第2版買ってもらうことにしました。

103 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:45

   >>100
   スレ違い & マルチウザイ。

104 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:46

   >>99
   99%ネタスレです。

105 名前: ひげぽん 投稿日: 02/06/20 23:47

   >>102
   もし本当に15才ならぜひ、将来良いOSを作ってください。
   うーん若いですね

106 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:48

   99=104
   暇人

107 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:51

   >>101
   >>106 の言う通り、 >>99=>>104 はかまって君だから、無視しとけば
   いいよ。

108 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:51

   >>106
   オマエモナ。ヒッキー

109 名前: デフォルトの名無しさん 投稿日: 02/06/20 23:54

   スレのレベルが高ければ誰も荒らしたりしないよ
   アホがageるから荒らされる

110 名前: ひげぽん 投稿日: 02/06/21 00:00

   >>88
   さっき本屋で立ち読みしてきました。
   OSを作ろうとするといろいろな事を考えなければいけないこと
   があると痛感しました。
   アセンブラの環境はnasmにしようかと思うのですが、
   他にお勧めのものありますか。

111 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:01

   いや、nasmがベストかと。
   まぁ、漏れはTASM5.0とかでも良いと思うが

112 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:01

   ほんと、低級PGってどこにでもいるんだね(笑

113 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:01

   >>109
   > スレのレベルが高ければ誰も荒らしたりしないよ
   関係ない。どんなレベルのスレでも荒らされる時は荒らされる。
   とにかく、「荒らし」には無視しかない。匿名掲示板の宿命だよ。

114 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:07

   >>112
   自分のことだろ
   プログラムすら出来ないんでしょ。

115 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:11

   >>114 == >>99
   ですか?必死だな(ワラ

116 名前: ひげぽん 投稿日: 02/06/21 00:11

   >>111
   ありがとう。
   さあて、nasmのドキュメントを読むか(英語)

117 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:14

   コンパイラにgccを採用するならnasmじゃなくてgasにした方が親和性高いかもしれない。
   インラインアセンブラでnasm使用できないでしょ?

118 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:15

   >>113
   なぜ荒らされるのかを認識しようとしないのは、思考停止してるだけ。
   だから荒らされるんだよ。

119 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:18

   もう荒らしの話は終わりに汁

120 名前: ひげぽん 投稿日: 02/06/21 00:20

   >>117
   実は開発環境をlinuxと、WindowsXP proどちらにしようか迷っております。
   linuxマシンはスペックが低いのでOS実験機(オシャカになってもいい)
   そうすると、gasは無理かもしれないです。
   でもかなりの利点があるならメインマシンをlinux&XP のデュアルブートにしようかな。

121 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:21

   OS板行けばと思ったのは俺だけかな?

122 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:22

   開発マシンは関係なくて、採用するコンパイラが問題。

123 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:24

   コンパイラなんぞ自分で書けばいい。
   ハードの資料と時間と根気が最大の問題。

124 名前: ひげぽん 投稿日: 02/06/21 00:27

   >>122
   >>123
   すいません、話についていけてません。
   gccって、unix系用のコンパイラじゃないんですか?
   もちろんここではcygwinは考えないとしての場合ですが。

125 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:28

   >>123
   実用レベルのコンパイラが簡単に書けるわけねーだろ!
   ゴルァ!

126 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:30

   >>121
   OSを作るためにみんなでお勉強スレッド
   http://pc.2ch.net/test/read.cgi/os/1020424840/
   これが参考になりそうだ

127 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:30

   >>125
   てめーの実業務用の実用コンパイラなら幾つも書いてきてますが何か?

128 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:30

   コンパイラを作るスレになりますた

129 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:32

   >>127
   自慢するなよ。(w

130 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:33

   >>127
   ハイハイ、わかったわかった。一生そう言っててくれ。

131 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:35

   文法を適度に制限してyacc or 再帰下降で書けば簡単だろうに。
   こんなもん自慢になるかっつーの。
   そんなことよりハードの資料。
   BIOS叩くにしてもそこそこのもんが必要だろ?

132 名前: 125 投稿日: 02/06/21 00:35

   >>127
   ん?俺はひきこもりだぞモルァ!

133 名前: ひげぽん 投稿日: 02/06/21 00:36

   >>126
   使える!!!
   今の私には最高のスレッド

134 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:37

   >>124
   別にUNIX用ってわけじゃないが。
   つーか、こんなレベルでOS書けるんかいな?

135 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:42

   問題はひげぽんが死ぬまでに形になるかだな・・・

136 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:43

   (笑

137 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:47

   >134
   Onani-System なら書けるかも

138 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:47

   >>131
   > 文法を適度に制限してyacc or 再帰下降で書けば簡単だろうに。
   「実用レベル」と言う言葉が見えないのか ? それとも、一般人と定義が違うの
   か ? いずれにせよ、スレ違いだからどっか逝ってくれ。

139 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:49

   >>138
   待て待て。喧嘩を売ったのは125。俺は「お前はバカか」と言っただけ。
   実用レベル云々は色々と反論したくもあるがここでやるつもりはねぇよ。

140 名前: ひげぽん 投稿日: 02/06/21 00:53

   一応5年計画です。
   さすがに死ぬまではやらないかと(冗談を真に受けてる)

141 名前: デフォルトの名無しさん 投稿日: 02/06/21 00:57

   とにかくもっとアセンブラやハードウェアについて勉強した方がいいね。
   今の知識だと、着手してからがとても大変だと思うよ。
   昔は、アセンブラの初歩として「はじめて読む8086」をよく薦められた。
   もしどこかで手に入るのなら読んでみるといいかも。

142 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:00

   >>141
   オレモテルヨ!
   はかにも「初めて読むアセンブラ」もZ80を理解するのによかたよ

143 名前: ひげぽん 投稿日: 02/06/21 01:00

   >>141
   確かにハードウェアの専門知識は皆無です。
   PC自作したり、RS232CにLEDつないで遊んだ知識は一切役立たず・・・
   週末は本探しからはじめます。

144 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:02

   >>139
   >>123 付近の話の流れで、唐突に「コンパイラなんぞ自分で書けばいい。」と
   言う発言はいかがなものかと。突っ込まれてもしょうがないと思うぞ。

145 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:04

   アセンブラもろくに知らんとOS書くやつがいるんか
   いやBASICでOSだっつやつもいるが…
   こんなんではブートしてもプロテクトモードにはいるときにBIOS叩きで氏ぬのがオチ

146 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:05

   >>145
   これから勉強すれば良いんじゃん。
   何を言ってるんだか・・・

147 名前: 145 投稿日: 02/06/21 01:06

   せいぜいがんばれよ

148 名前: ひげぽん 投稿日: 02/06/21 01:07

   >>145
   OSを作りたいと思う。
   →アセンブラが必要と分かる
   →アセンブラ勉強する
   →CPU等ハードウェアの知識が必要と分かる
   →勉強する
   →ちょっと作ってみる
   →失敗!!
   でもその過程が楽しい(少なくとも私は)のでよし!!!!

149 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:07

   >>144
   あー、それは済まなかった。申し訳ない。

150 名前: 125 投稿日: 02/06/21 01:12

   (´-`).。oO(ひょっとして俺に責任があるのか?)

151 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:20

   コンパイラ云々もたしかに大変だけどそれ以上にc言語で書くなら、
   それのライブラリを作るほうが大変という罠。

152 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:20

   割り込みとメモリ管理、タスクディスパッチのハザマで死ぬであろう。

153 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:22

   >>152
   それを思うとやっぱりgccしか選択しないなと思う。

154 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:41

   GPLかぁ。。。

155 名前: デフォルトの名無しさん 投稿日: 02/06/21 01:57

   いまどきデバイスドライバがアセンブラってのはどんなOSだよ
   vxdのヘッダだけとかじゃねーの?
   初期化(ブートローダ)
   仮想メモリ
   割り込みハンドラ
   ロック機構
   くらいじゃねーの?

156 名前: デフォルトの名無しさん 投稿日: 02/06/21 02:11

   デバイスドライバって言ってもOSのカーネルモード通すんだったら
   アセンブラで書かなくてもいいよな。
   本当にアセンブラで書かなくてはいけないのは、むしろBIOSだな。

157 名前: デフォルトの名無しさん 投稿日: 02/06/21 02:12

   gccで生成したコードはGPLじゃないよ。
   glibcを使わなければいい(どうせ使えない)

158 名前: デフォルトの名無しさん 投稿日: 02/06/21 02:33

   >>157
   そうなんだ。それはいいこときた。

159 名前: デフォルトの名無しさん 投稿日: 02/06/21 02:51

   本気でやる気があるのなら、手短に
   最初に作るのはローダーといいたいところだけど、もっと簡単に
   ハードディスクからブートして画面にメッセージでもだすプログラム作るといいよ。
   そのあと、割り込みとメモリ管理をするといいです。
   それもいきなりハードディスクを使ったページングとかはせず、
   単純に仮想アドレスを実アドレスにマップするのを作ってみるといいです。
   そうこうしているうちに、手探りの作り方ってのが分かってくるから、
   そしたら、OSの理論本でも見て設計するといいです。
   最初はCを使おうとか考えたらダメですよ、オールアセンブラです。
   やり方がわかってきたら、全部アセンブラで書くのが面倒になってきますから
   そしたら C で書いてみるといいです。
   実のところここまでできれば後はたいしたことは無いです、思いのまま設計するよろしいです。

160 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:02

   >>159
   HDDはパラメータ周りとか結構めんどくさいんで、
   実際に画面が出て動くまでをフロッピーでやることを勧めたいんですが。

161 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:07

   ああ、確かにそうですね。
   後86特有のあの変なモードとかセグメントとかも先になれてから
   メモリ管理がいいかも知れません。
   しかし、86ッテヤダネェ

162 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:13

   ポインタさえ殺せば仮想メモリ管理いらんやろ。
   仮想マシンの線で言った方が楽やと思うで。
   最近はなんやJavaや.NETやゆーて流行ってるみたいやし。

163 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:17

   >>162
   ドシロートはすっこんでろ

164 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:19

   いっそ、最初はP/ECEで試作した方がいいかも。
   ハードウェアは単純で、カーネルソースも公開されているし、CPUは
   RISC物なので、x86のセグメントみたいな嫌らしさもない。

165 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:23

   >>164
   んでもエプソンのチップってイヤになるほどマイナーじゃない?
   WonderWitchをさわった方がx86系だし良いんじゃないかな。

166 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:23

   >>163
   そらOSは作ったことはないけどやな。
   たとえばJavaVMやったら
   任意アドレス指定が可能なオペレーションは排除されとったと記憶しとる。
   各種の変数は事前に囲い込まれた範囲内でしかアクセスでけへんし
   オブジェクト境界を超えるアクセスは全部VM上でチェックが入る。
   あれやったら、仮想メモリ管理、ちゅうか、アドレス空間の隔離はせんでも
   安全に動くもんが実装できるんとちゃうんか?
   ページングの話はまた別な。
   これも習作のOSとして大目に見るんやったら
   仮想メモリ管理なしで類似品が作れると思うで。
   どっか間違うてるか?

167 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:26

   >>162
   本質的にVMはOSが発行するメッセージ、割り当てたメモリ,I/Oに対して
   アクセスするのでそれ単体では何もでん。
   JAVAチップもしかり。

168 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:31

   >>167
   VMがCPUそのもんやと思てると?そこまでアホなこと言うかいな。
   JavaVMみたいに、あらゆるアクセスが検査対象となる構造やったら、
   実行時に動的にアクセスを制限するようなことをせんでも、
   JITなりを通す段階で安全な処理に落とし込めるやろっちゅう話やがな。
   x86のプロテクトモードやGDTやらLDTやらゲートやら面倒くさそうやからな。
   そんなん弄るぐらいやったら実行バイナリを仮想コードで統一しつつ
   裏ではJITなんかで調整して基本的な命令しか使わんような
   単純な構造にした方がええんちゃうか言うてんねん。
   これやったらI/O命令と割り込みぐらいでどうにかなるはずや。
   それともこういうことはできへんのんか?

169 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:31

   >>166
   >>1が作りたい物を作るのが一番なんだから、
   横から口を挟むのはどうかと。

170 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:31

   >>165
   手始めにWonderWitchはいいかも、簡単に手に入って
   しかも86系アセンブラになれるのにももってこいですね。
   あれって確か発売元バンダイでしたっけ?

171 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:32

   >>169
   こっちの方が楽ちゃうかぁ、思うてな。
   参考程度に聞いたって。>1

172 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:33

   (´-`).。oO(ワンダーウィッチ・・・・まだあったのか。)

173 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:35

   >>172
   えっひょっとしてワンダーウィッチ・・・・もう売ってない?

174 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:37

   WonderWitch、まだ売ってるよ。
   x86のアセンブラに慣れるには、確かにいいかもしれない。

175 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:42

   WWが終わった後も386の壁486の壁が待ってるからな。

176 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:46

   >>175
   壁は286,386だけでしょ、後は大体みんないっしょ

177 名前: デフォルトの名無しさん 投稿日: 02/06/21 03:59

   >1
   はまず標準入出力関数を作ってモニタプログラムを
   書かなければいけないだろう。
   それから記憶装置からブートだな。
   そして最後にタスク、メモリ管理と。

178 名前: デフォルトの名無しさん 投稿日: 02/06/21 13:03

   ガタガタ言わずに月刊InterFace7月号買えよ

179 名前: ひげぽん 投稿日: 02/06/21 21:04

   >>159
   >>160
   まずは、フロッピーからブートというのはちょっと考えてました。
   ブートに関しては、ここ↓
   http://www.tkcity.net/~nobusan/boot/boot.html
   で勉強しています。
   >>178
   買いましたよ。今読んでおります。
   ところで環境構築なんですが
   Cのライブラリ等は何を使えばよいのでしょうか。
   linux,windowsどちらでも良いので教えてください。

180 名前: デフォルトの名無しさん 投稿日: 02/06/21 21:06

   >>179
   安全なのは自分で作ることだな。

181 名前: デフォルトの名無しさん 投稿日: 02/06/21 21:08

   >>179
   > Cのライブラリ等は何を使えばよいのでしょうか。
   Interface 7月号買ってんだったら P.55 から読んでみたらどうよ。

182 名前: ひげぽん 投稿日: 02/06/21 21:25

   >>181
   gnuということですか?

183 名前: デフォルトの名無しさん 投稿日: 02/06/21 22:07

   >>182
   ぉぃぉぃ

184 名前: 181 投稿日: 02/06/21 22:19

   >>182
   P.55 に書いてある Chapter1 のタイトルをここに書いてみろよ。
   あんた以外は、俺が何を言いたいかわかるはずだ。
   (で、どうすればいいかは Interface を見ればわかる。Linux の環境が
   あるんなら、まずは書いてある通りやってみればいい。知ってる人には
   ちょっと冗長だけど、今までこの手のプログラムを書いたことない人には
   なかなかいい記事だと思うよ。)

185 名前: デフォルトの名無しさん 投稿日: 02/06/22 17:57

   モウオワリ?

186 名前: デフォルトの名無しさん 投稿日: 02/06/22 19:27

   ウン、オワリ。

187 名前: 181 投稿日: 02/06/22 21:41

   おわりかよ !!

188 名前: ひげぽん 投稿日: 02/06/22 22:08

   え?おわりですか?

189 名前: デフォルトの名無しさん 投稿日: 02/06/23 03:06

   >>188
   おまえが決めることだろ。
   あれだけのペースで書き込んでいたのに、
   書き込みがぷっつり途絶えたと言うことは、
   逃げたと解釈するしか無かったからな。
   もし本人ならトリップつけろ

190 名前: ひげぽん 投稿日: 02/06/23 11:04

   http://pc.2ch.net/test/read.cgi/os/996204956/l50
   を参考にして
   「オペレーティングシステム<第二版> 設計と理論およびMINIXによる実装」
   著:A.S.タネンバウム + A.S.ウッドハル
   訳:千輝 順子
   監修:今泉 貴史
   プレンティスホール出版 ¥8,800
   を読もうかと思っています。
   >>188
   は、私ではありません。
   インターフェース誌まだ読んでいる途中です。
   ところで上誌P55から「標準Cライブラリを使わないプログラミング」
   がありますが、
   ライブラリを使わない場合、自分でシステムコール系を
   アセンブリ言語で書かなければいけないのですが、
   >>151
   の言っているようにこの部分を独自のライブラリとして
   Cへのインターフェースを作成しなければいけないのでしょうか。
   上記のライブラリは開発環境として誰かが書いたものに
   +α自分で必要なものを書くのでしょうか。
   それとも
   全部自作??

191 名前: ひげぽん 投稿日: 02/06/23 11:14

   そういえばunixマガジンもブート特集してましたね。

192 名前: デフォルトの名無しさん 投稿日: 02/06/23 11:20

   >>190
   普通1からOSを作るなら全部自作
   既存の物を持ってきても良いとは思うが、まぁ、基礎だと思って作るのがいいんじゃないか。
   一般に提供されているCライブラリはほぼ使えないと思った方が良い。
   だからFreeBSDとかLinuxあたりから抜いてくるしか無い・・・かな。
   勿論ライセンス問題もあるんだけど。
   >Cへのインターフェースを作成しなければいけないのでしょうか
   いけないわけじゃないけど、Cのインターフェイスで作らないと
   結局全部アセンブラで書く羽目になるし、どうだろうね。

193 名前: デフォルトの名無しさん 投稿日: 02/06/23 11:31

   マタハジマタ

194 名前: ひげぽん 投稿日: 02/06/23 23:13

   >>192
   なるほど。
   システムコール系(全てではありませんが)は
   アセンブラで書かなければいけないのですね。
   「オペレーティングシステム<第二版> 設計と理論およびMINIXによる実装」
   買って読んでいます。
   まだ最初の数十ページですが、すでに買ってよかったと思っています。

195 名前: ひげぽん 投稿日: 02/06/23 23:18

   環境構築ですが、インターフェース誌が結構役に立っています。
   bochsインストールしようかと思っています。
   インターフェース誌紹介してくれた人ありがとう!!

196 名前: デフォルトの名無しさん 投稿日: 02/06/23 23:39

   Minix本そんなにいいの?

197 名前: ひげぽん 投稿日: 02/06/23 23:43

   まったくの初心者なので、勉強になるっす。
   まったく同じ仕組みでつくろうとは思いませんが、
   プロセス間通信とか、パイプの実装とか・・・
   勉強になりますね。

198 名前: デフォルトの名無しさん 投稿日: 02/06/23 23:45

   タネンバウム(・∀・)イイ!!

199 名前: ひげぽん 投稿日: 02/06/24 00:09

   良スレハケーン

200 名前: ◆mDa3YTQk 投稿日: 02/06/24 00:17

   キャップをつけます。

201 名前: デフォルトの名無しさん 投稿日: 02/06/24 00:21

   OSの魔法使い

202 名前: デフォルトの名無しさん 投稿日: 02/06/24 00:49

   2002 06/18
   その日、2ちゃんねるの漢たちが立ち上がった・・・。
   最高のOSを作るべく。
   できあがたときのことを考えて宣伝に使うフレーズはこんなんでいいか

203 名前: デフォルトの名無しさん 投稿日: 02/06/24 00:59

   開発コード: ひげぽん618 とか

204 名前: デフォルトの名無しさん 投稿日: 02/06/24 10:31

   OS作りたいんだったら、理系の大学へ進学して
   NEC・富士通・日立のいずれかの該当部署から内定もらうのが手っ取り早いと思われ。

205 名前: デフォルトの名無しさん 投稿日: 02/06/24 11:35

   >>204
   趣味でそこまでできません。

206 名前: 155 投稿日: 02/06/24 15:42

   ブートローダはOSの本質的な仕事じゃないな。
   grubとかliloとかsyslinuxとかnetbootとかredbootとかmiloとかROMモニタとか
   「メモリの特定アドレスにkernel imageをロードする機能」
   と
   「そっから動くカーネル」
   は別もんだ。

207 名前: デフォルトの名無しさん 投稿日: 02/06/24 18:24

   開発コード:ひげぽん0721

208 名前: デフォルトの名無しさん 投稿日: 02/06/24 18:34

   >>204
   ダメだろ。そう言うところは、自分で OS を1から作ってるわけじゃないからね。
   悪く言うと既存の OS を自社のマシンにポーティングしてるだけだよ。
   そんなことするぐらいなら、英語の勉強して Linux とか FreeBSD とかのコミュ
   ニティに参加した方がいいよ。
   >>206
   だからなに ?

209 名前: ネギトロ 投稿日: 02/06/24 20:26

   >>206
   だけど、そこがないと話になんないよな。
   PC/AT互換機のROM-BIOSの機能とか、どこかで調べられないか?
   俺もちーと興味ある。
   んで、このスレッドには興味持ったのでコテハンで行きます。

210 名前: デフォルトの名無しさん 投稿日: 02/06/24 21:09

   >>208-209
   >>206 は >>155 の発言で ブートローダをOSの一部のように書いたから
   それを訂正したってだけだろ。
   労力を他の部分に傾けるためにブートローダは既存のものを使うのも良し。
   勉強もかねてブートローダからつくるもの良し。

211 名前: 208 投稿日: 02/06/24 21:43

   >>210
   「ああなるほど、そう言うことか。」って、三日も前の話だし、全然本質
   的な話じゃないから正直わかんなかったよ。

212 名前: ひげぽん 投稿日: 02/06/24 23:16

   OSの技術的な話はまだ勉強中です。
   ちょっとにぎわってきたのでうれしいです。
   まだ先の話ですが、多少速度に目をつぶっても
   CPU依存の部分は出来るだけ少なくしたいかなあと思っているんですが
   どうでしょうか。
   ちょっと昨日夢で見たのです(夢ですよ)
   システムコール系はアセンブラで書き、インターフェース部分をCで書きます。
   そして、JINI経由でjavaから呼び出す。
   あーめんどくさいなこれは・・・・
   でもなんかばかげてて楽しい。
   言語はCでは無くC++で書こうかなあ。
   そのほうがいろいろ素直にかけそう。

213 名前: デフォルトの名無しさん 投稿日: 02/06/24 23:18

   >>212
   ×JINI
   ○JNI
   Jini を使ったOSというのもそれはそれで面白いけど。

214 名前: デフォルトの名無しさん 投稿日: 02/06/24 23:18

   Javaにこだわるなよ

215 名前: ひげぽん 投稿日: 02/06/24 23:19

   >>213
   訂正ありがとう。
   >>214
   うん。あくまでも冗談です。そんな面倒なことはやってられません。

216 名前: ひげぽん 投稿日: 02/06/24 23:32

   >>209
   ネギトロ氏よろしく。
   多少でも興味のある方書き込みしてくれるとうれしいっす。
   セマフォ勉強中・・・

217 名前: デフォルトの名無しさん 投稿日: 02/06/24 23:39

   Javaのyield()ってどうやって実現してるんだろ・・・
   ヒントくださーい

218 名前: デフォルトの名無しさん 投稿日: 02/06/24 23:52

   >>212
   意味不明。
   システムコール系って何だ?
   低レベルサービスをアセンブラで書いて、
   そのインターフェイスをC互換にすると言うこと?

219 名前: デフォルトの名無しさん 投稿日: 02/06/25 00:02

   >>218
   俺も良くわからんけど、システムコール呼び出しをアセンブラで書いて、
   C用のインターフェースを作るってことじゃないの ? プロセッサの動作
   モードをユーザーモードから切り替えるには割込みしかないから、システ
   ムコールは (インラインでいいけど) アセンブラ使わざる得ないだろう
   ね。(ちなみに、OSの受け口もアセンブラで書く必要がある。)
   よく考えたら、システムコール呼び出しって変だね。System Call Call
   だもんなァ...。

220 名前: デフォルトの名無しさん 投稿日: 02/06/25 00:04

   意 味 が 通 じ れ ば いいんじゃネーノ?

221 名前: ひげぽん 投稿日: 02/06/25 00:07

   >>218
   システムコールをアセンブリ言語で実装し、
   Cから呼び出すことが出来る用にインターフェースを用意するという
   つもりで書いたんだけど。
   日本語が変だったかな。変ですね。スマソ
   インラインアセンブラとか・・・
   インターフェースに書いてあるまんまだったりして・・・・

222 名前: ひげぽん 投稿日: 02/06/25 00:08

   日本語気をつけます。
   反省・・・

223 名前: 219 投稿日: 02/06/25 00:16

   >>221
   > システムコールをアセンブリ言語で実装し、
   システムコールの実装って、どこまでを指してます ?
   OSって、ユーザープログラムからみるとシステムコール集合体みたいな
   もんだから、こう書くとフルアセンブラで書いたOSのように取られるか
   もしれないですよ。(そう言う意味で、>>219 では「OSの受け口も」と
   言う表現にしてます。(まあ、まだまだあいまいですけどね。))

224 名前: ひげぽん 投稿日: 02/06/25 00:25

   >>223
   えっと。
   まだ一行もソースを書いてないで言っているので
   あくまでも計画ですが、
   基本的には、アセンブリ言語でしかかけない部分のみ
   アセンブリ言語で書く予定です。
   結局システムコールの一部をアセンブリ言語で書かざるを得なくて
   Cから呼び出せるようにしたいということを言いたかった。
   言ってること変わってますね→私

225 名前: デフォルトの名無しさん 投稿日: 02/06/25 01:28

   ゲーム機はスーファミまではオールアセンブラだったヨ。

226 名前: デフォルトの名無しさん 投稿日: 02/06/25 01:31

   ひげぽんの開発環境何?

227 名前: デフォルトの名無しさん 投稿日: 02/06/25 01:32

   >>224
   そんなことより1よ。
   BTRON作ってくれ。
   超漢字買う金がない。

228 名前: デフォルトの名無しさん 投稿日: 02/06/25 01:37

   http://www.tron.org/

229 名前: デフォルトの名無しさん 投稿日: 02/06/25 01:42

   C#キボンヌ

230 名前: デフォルトの名無しさん 投稿日: 02/06/25 05:17

   C#ってOS組めるの?

231 名前: デフォルトの名無しさん 投稿日: 02/06/25 06:01

   >>230
   無理に決まってんだろ!(w

232 名前:    投稿日: 02/06/25 07:14

   今から10年前の某雑誌に、CGデザイナーで著名な方が、「将来、
   CGのためのOSを作りたいですね」といってました。
   「CGのためのOS?」。当時、OSのことについて何もわからなかった
   自分はサパーリ理解せずに読み飛ばしていたのですが、今OSのことを
   そこそこ理解した状態では、「CGのためのOS」の仕様がどのような
   ものになるのかものすごく気になるのです。
   ココのスレはOSの内部についても詳しい方がいるようなので、もし
   「CGのためのOS」を考えるならどういう仕様になるのか教えてください。

233 名前: デフォルトの名無しさん 投稿日: 02/06/25 07:30

   GPUを並列動作可能なMPUとして扱うアーキテクチャ。
   複数枚のGPU搭載ビデオカードを刺しておけば、
   それぞれのカードに演算要求を出し、結果を1つに集約する。

234 名前: ネギトロ 投稿日: 02/06/25 19:07

   ちょっとシステムコールの実装について誤解があるようなので。
   C言語で書いた関数でも、コンパイルされたあとのバイナリでは機械語の並びになります。
   んでもって、アセンブリ言語でいうところのJMPとかCALL命令を使って呼び出すわけですけど
   x86の場合、同じセグメントにある関数(ユーザプロセスの関数)を呼び出すのと、
   異なるセグメントにある関数(システムコール)を呼び出すのとは手続きが違います。
   前者はJMP,CALL等の命令で可能ですが、
   後者の関数呼び出しを実現するには、割り込みを発生させる、コールゲートを呼び出す
   # 他にありましたっけ?
   などの方法を用いなければなりません。
   例えばLinuxではintXXを使ったソフトウェア割り込みを使っています。
   そして、システムコール関数もC言語の中から呼び出すwrite()やsocket()といった
   ものの実体は、引数をレジスタに積んでソフトウェア割り込みを発生させるだけのシロモノです。
   ということで、OSをコーディングする時に言語を何にするかというのは実はあまり大きな問題ではなく、
   その言語で提供されているパラダイムの中で、それがコンパイル後にどのような形になるかが問題です。
   で、C言語の場合、同一のプロセス空間(同じセグメント)の関数をコールする、という形しか考えられていないので、
   システムコール呼び出しのように、異なるパラダイムの部分は(インライン)アセンブラで書いているわけです。
   文章の雰囲気からして、>>1は高校生っぽいので、
   http://www.amazon.co.jp/exec/obidos/ASIN/4274073815/ref=sr_aps_d_1_1/249-2751067-2413142
   「図解32ビットマイクロコンピュータ80386の使い方」W.B.スルヤント著
   をオススメしておきます。私が高校生の頃に読んでた本だし、難易度的にも丁度いいんじゃない?

235 名前: デフォルトの名無しさん 投稿日: 02/06/25 20:57

   >>234
   1は23だが、、、
   まぁSEといってたから高校生ではないな。

236 名前: ひげぽん 投稿日: 02/06/25 21:03

   >>234
   おっと。
   文章はまだ若いということで勘弁してもらえないっすかね。

237 名前: 投稿日: 02/06/25 21:04

   別にLinuxのシステムコールがことなるセグメントにあるわけじゃないけどね。

238 名前: ひげぽん 投稿日: 02/06/25 21:13

   >>234
   詳しい解説ありがとうございます。
   質問です。
   ご紹介の本を読めば、分かるのでしょうけど
   今ちょっといろいろな本を消化中なもので・・・・
   >x86の場合、同じセグメントにある関数(ユーザプロセスの関数)を呼び出すのと、
   >異なるセグメントにある関数(システムコール)を呼び出すのとは手続きが違います。
   同じセグメント、異なるセグメントとは何でしょうか?

239 名前: デフォルトの名無しさん 投稿日: 02/06/25 21:24

   >>238
   「はじめて読む486」を参照。

240 名前: デフォルトの名無しさん 投稿日: 02/06/25 21:28

   http://newos.sourceforge.net/

241 名前: デフォルトの名無しさん 投稿日: 02/06/25 21:29

   セグメントって言う言い方誤解を招かないか?
   セレクタの方が適切だろ。

242 名前: デフォルトの名無しさん 投稿日: 02/06/25 23:00

   おもしろそうなので一緒に勉強してます。
   ときどきお話に出てくるブートローダ(MBRのことですよね?)やブートセクタ(パーティションの先頭?)を
   直接見たり、書き換えるにはnasmとかmasmのツールでできるのでしょうか?
   >>159さんのブートの話はとても魅力的です。どの辺の資料を読めばできるようになるか
   教えていただけないでしょうか?「はじめて読む486」でしょうか?nasmなどのマニュアルでしょうか?
   よろしくお願いします。

243 名前: デフォルトの名無しさん 投稿日: 02/06/25 23:07

   MBRはブートローダーを保存する領域
   ブートローダーは保存されるプログラム

244 名前: 242 投稿日: 02/06/25 23:09

   >>243
   さっそくのレスありがとうございました。
   勘違いしていました。
   それで、どうやって、ブートローダを読み書きすればよいのでしょうか?
   よろしくお願いします。

245 名前: デフォルトの名無しさん 投稿日: 02/06/25 23:44

   >>244
    じぶん で けんさく した ほうが あたまに はいる よ 。
    かころぐ を しらべて かんれんせい が ありそうな
    きーわーど を みつけて ごらん 。
    If you understand , use "google" and go to the mad house. Hyahaha

246 名前: デフォルトの名無しさん 投稿日: 02/06/26 09:43

   x86っつっても、80286、80C86、IA-32で、それぞれ呼び出し時になにが起こるかぜんぜん違うしな。

247 名前: デフォルトの名無しさん 投稿日: 02/06/26 11:31

   >>244
   NT/2000ならリソースキットかインストールCDのdskprobe.exeを使ってごらん。
   >>243
   くだらん。
   >>245
   知らないなら知らないと言えよ。(w

248 名前: 244 投稿日: 02/06/26 12:35

   >>247
   ありがとうございます。2000ユーザなので、家に帰ったらやってみます。
   >>246
   ごもっとも。
   あと、英語が少し変です。

249 名前: デフォルトの名無しさん 投稿日: 02/06/26 16:54

   >>247
   最初の2行だけにしとけばよかったのにな。
   >>248
   246へのレスは245へのレスか?
   どこが変なのか教えてたも

250 名前: ウマさんシカさん ◆vBaka42s 投稿日: 02/06/26 22:36

   >>244
   rawriteあたりでやればいいんじゃないのか?
   というかなぜOS板を見ないの?

251 名前: デフォルトの名無しさん 投稿日: 02/06/26 22:51

   >>248
   がんばってください。
   でも、日本語が少し変です。

252 名前: ひげぽん 投稿日: 02/06/26 23:51

   >>242
   242さんよろしく。
   一緒に学んで行きましょう。
   ちょうどブートのお話が出てきているので便乗質問です。
   以下の(1)(2)(3)の認識はあっていますか?
   (1)フロッピーディスクからブートする場合、
     ディスクの最初のセクタにあるコードが実行される。
   (2)(1)で実行されたコードがさらに、フロッピーディスク上の
     他のコードを起動することで
   OS本体を呼び出すことが出来る
   (3)(1)(2)が正しいと仮定して、
   あるCPUを載せた、PCがあるとする。
   そのPC上でスタティックコンパイルすることにより作成された
   バイナリ実行イメージがある。(例えばHELLO WORLDプログラム)
     上記バイナリイメージをフロッピーディスク上に配置し、
   (1)(2)の手順でそのバイナリイメージを呼び出し実行することが出来る。
   間違いや、認識違いを指摘していただけるとありがたいです。

253 名前: デフォルトの名無しさん 投稿日: 02/06/27 00:04

   >>245
   understandの時点でうそ英語
   馬鹿丸出しだね。

254 名前: デフォルトの名無しさん 投稿日: 02/06/27 00:09

   鈴木アグリー

255 名前: デフォルトの名無しさん 投稿日: 02/06/27 00:13

   >>253
   understoodにするの?
   教えてくれ。

256 名前: デフォルトの名無しさん 投稿日: 02/06/27 00:20

   あんでーすてんど

257 名前: デフォルトの名無しさん 投稿日: 02/06/27 01:35

   0000 0001 0000

258 名前: デフォルトの名無しさん 投稿日: 02/06/27 06:17

   >>232
   電波だから気にしない方が良い。
   水彩画家が『将来、アーティスティックなビルを建ててみたい』と言っているような物だから、
   >>1
   第2種情報処理技術者試験くらい受けてからOSに挑戦しろ

259 名前: デフォルトの名無しさん 投稿日: 02/06/27 06:37

   一から勉強しながらOS作ろうっていうのがきついな
   minix,linuxを解析したほうが近道だろ
   今のレベルでは素人がいきなりオリンピックに参加するようなもの

260 名前: デフォルトの名無しさん 投稿日: 02/06/27 08:35

   >>259
   いや、学問に王道なし。
   minixとかはOSとはなんぞやComputerとはなんぞや、Architectureとはなんぞや
   がわかってからで遅くはない。
   むしろ、わかってからならば早く理解できる。
   まぁ、>>1はOADGとかも知らないだろうし、OSを組むのは1年早い。

261 名前: デフォルトの名無しさん 投稿日: 02/06/27 10:25

   >>260
   そういうのを勉強しながら学ぶのにMinix本は最適なんだけどねー

262 名前: デフォルトの名無しさん 投稿日: 02/06/27 10:44

   なあ。なんで、どうでもいいお説教するやつ多いんだ。
   おまえらじいさんか?
   どうせ自分じゃ何にもできねーんだろ。
   うざいから、「検索しろ」だの「もっと勉強してから」だの言うなよ。

263 名前: デフォルトの名無しさん 投稿日: 02/06/27 11:10

   作りながら学習するのは楽しいぞ
   楽しいからプログラミングする
   まさに本来の姿

264 名前: 1じゃないけど 投稿日: 02/06/27 11:12

   >>258
   >第2種情報処理技術者試験くらい受けてからOSに挑戦しろ
   必要性を示してください。

265 名前: デフォルトの名無しさん 投稿日: 02/06/27 13:33

   別に2種持ってないとOSがつくれんわけじゃないが、2種取れる程度の知識もないと、
   OSの勉強すらままならんだろ。

266 名前: デフォルトの名無しさん 投稿日: 02/06/27 19:16

   あんつーれべるのひくさだ。

267 名前: 264 投稿日: 02/06/27 20:43

   >>265
   >2種取れる程度の知識もないと、OSの勉強すらままならんだろ。
   これは同意。
   でも >>258 は「受けろ」と言ってるから。
   基本情報処理技術者試験を受験する必要がどこにあるのかと。

268 名前: デフォルトの名無しさん 投稿日: 02/06/27 21:14

   >>267
   粘着うぜぇ。内容のない会話して何が楽しいんだ厨房

269 名前: デフォルトの名無しさん 投稿日: 02/06/27 21:28

   >>268
   年幾つよ?

270 名前: デフォルトの名無しさん 投稿日: 02/06/27 21:46

   >>269
   粘着うぜぇ。内容のない会話して何が楽しいんだ厨房
   ^^^^

271 名前: デフォルトの名無しさん 投稿日: 02/06/27 21:49

   >>270
   マーはみんな粘着

272 名前: ひげぽん 投稿日: 02/06/27 22:52

   >第2種情報処理技術者試験くらい受けてからOSに挑戦しろ
   えーと。大学のときに受けて取得しました(汗)
   今は名前が変わったんですよね。
   なんだか、すごい自分が馬鹿な質問ばかりするからなんだろうけど
   誤解が・・・
   >>260
   >>261
   今現在、↓の本を読んで勉強中です。
   minixのソースも多少読んでいます。
   「オペレーティングシステム<第二版> 設計と理論およびMINIXによる実装」
   著:A.S.タネンバウム + A.S.ウッドハル
   訳:千輝 順子
   監修:今泉 貴史
   プレンティスホール出版 ¥8,800

273 名前: ひげぽん 投稿日: 02/06/27 22:55

   アセンブラができる人に質問です。
   x86系のアセンブラ入門には、
   NASM と gas(as)どちらが適しているでしょうか。
   またアセンブラに関して
   ASKAを使用したことのある人いますでしょうか。
   ASKAを使用する上でのメリット、デメリットを教えてください。

274 名前: デフォルトの名無しさん 投稿日: 02/06/27 22:57

   ひげぽんって無職?

275 名前: デフォルトの名無しさん 投稿日: 02/06/27 22:59

   nasm使っておけって

276 名前: ひげぽん 投稿日: 02/06/27 23:02

   >>274
   へなちょこSEです。
   >>275
   出来ればgasを薦めない理由もしくは、NASMを薦める理由
   を教えてください。

277 名前: デフォルトの名無しさん 投稿日: 02/06/27 23:10

   >>276
   gasのニモニックは少なくともx86環境に置いては一般的じゃないから

278 名前: ひげぽん 投稿日: 02/06/27 23:24

   >>277
   なるほど。
   そろそろフロッピーブート&アセンブラHELLO WORLD
   に取り組もうとしてたところなので助かります。
   貴重なアドバイスありがとう。

279 名前: デフォルトの名無しさん 投稿日: 02/06/27 23:26

   OS作れるとどうなるの?
   芸津のようにお金持ちになれるの?
   自己満足?、要はオナニーソフト?
   OS作った先の未来にはナニが待ってるの?
   お家に帰ってきたら足の臭いお父さん達が、頭を禿に
   しながらせっせと築き上げてきたOSがそんな簡単に
   出来上がるものなんの?

280 名前: デフォルトの名無しさん 投稿日: 02/06/27 23:41

   (^Д^)ギャハ!↑みなさん、この人のレスどう思いますか♪
   なんてありきたりなんでしょうね♪
   誰もが皆、一瞬つけてみたくなる発想のレスです♪
   しかし、賢明な人はその自らの短絡的思考を野放しにする事を嫌がり、
   こういうレスは控えます♪
   しかし、この人はしてしまったのです(^^;ワラ
   「誰もが思い付くような事」を堂々と♪
   この人にとってこのレスは何なのでしょうか♪
   このレスをしている間にも時間は刻々と 過ぎ去っているのです♪
   正にこの人のした事は「無意味」「無駄」でしかありません♪
   ああ・・・何ていう事でしょう(^^;ワラ
   図星で泣いちゃうかも(^^;ワラ

281 名前: デフォルトの名無しさん 投稿日: 02/06/27 23:50

   元々、無駄なスレに無駄なレスをつけて、無駄なレスを返す
   >>280や他も馬鹿っぽいよ(^^;ワラ
   特に>>280は海馬にカビが生えてる。キモ

282 名前: デフォルトの名無しさん 投稿日: 02/06/27 23:55

   こういうときはおとなしくツレタ!、とか書いておけばいいんですよ。

283 名前: デフォルトの名無しさん 投稿日: 02/06/28 00:15

   マジレスがかっこ悪いというのには反対だけど
   コピペにマジレスはさすがにかっこ悪いと思うよ

284 名前: デフォルトの名無しさん 投稿日: 02/06/28 01:30

   >> 279 つくれるからどうというわけでは、ないでしょう。
   でもその作る人にとっては、その作る上での技術を実際に体で
   覚えられて経験上いいのではないでしょうか?
   また、「そりゃオナニーソフトだろう!」といわれたって、
   「自分が気持良い」ソフトが一番うまく書けるということはないですか?
   それで他のみんなも気持良ければもっと良いでしょう。

285 名前: デフォルトの名無しさん 投稿日: 02/06/28 17:20

   >>272
   ほんとかよ。
   てっきり俺はJava専門プログラマかと思ったよ。
   >>264
   上の理由により。
   OSを作るならノイマン型コンピュータの基礎くらい知っていて欲しいのでね。
   Java環境だけじゃなくて。
   minixを参考にするのに良い点はx86用OSを作るときの例としてだと思う。
   minixがOSだと思うと、x86以外は取っつきにくくなっちゃうか、
   後で後悔すると思うな。
   あれはOSだがOSはあれではない。
   もっと広い視点と腰を据えた覚悟と長期計画が必要だと思うな。マジでやるんなら。
   趣味でやるら、まず、コード書いてNETに上げてみな。まずはそれからだと思う。

286 名前: デフォルトの名無しさん 投稿日: 02/06/28 18:28

   >>285
   お前は何様なんだ?

287 名前: デフォルトの名無しさん 投稿日: 02/06/28 18:38

   >>285
   自信満々みたいだけど何が言いたいのか分からん。
   表現力不足なのか分かってないのか。
   いまのままじゃオナニー演説。

288 名前: デフォルトの名無しさん 投稿日: 02/06/28 19:05

   プログラマーならカキコでオナニーするんじゃなくて
   作品でオナニーすべきだな。

289 名前: デフォルトの名無しさん 投稿日: 02/06/28 20:03

   プログラマーならオナニーはしない。

290 名前: デフォルトの名無しさん 投稿日: 02/06/28 20:49

   マーはニーしる!

291 名前: デフォルトの名無しさん 投稿日: 02/06/28 21:04

   ぶっちゃけ、特定のハードウェアを限定するようなOSなど、真のOSではない。
   ハードウェアの違いを吸収し、共通の環境を提供するのが真のOSである。
   x86限定のOSなんて作るくらいなら、WindowsかFreeUNIXで十分だ。

292 名前: デフォルトの名無しさん 投稿日: 02/06/28 21:08

   >x86限定のOSなんて作るくらいなら、WindowsかFreeUNIXで十分だ。
   きっと作る事に意味があるんだよ。
   ゲームだって、しょぼくても作るとたのしいじゃん

293 名前: デフォルトの名無しさん 投稿日: 02/06/28 21:11

   >>291
   それがJavaや.NET。   などといってみるテスト。

294 名前: デフォルトの名無しさん 投稿日: 02/06/28 21:39

   >>293
   たぶん、それは違う

295 名前: デフォルトの名無しさん 投稿日: 02/06/28 21:43

   >>291
   つまり、x86、Alpha、68、PowerPC、Sparc、
   SH-3/4、ARM、V30 でも動くようにしろと。

296 名前: デフォルトの名無しさん 投稿日: 02/06/28 22:08

   ひげぽんさんがんばってなー
   そのうち、すげーへなちょこでいいから公開してや。
   個人的にはDOSがいいなぁ。一枚ね。
   くっだらねぇのでいいからゲームとかつけちゃってさ。
   オセロとか、もうこの際数字あてゲームでもいいや。
   シェルもあるんだかないんだか、suujigameとexitしか受け付けない
   みたいなね。
   もう起動してから5分位であきちゃうのよ。
   でもなんかね、
   お、ひげぽんのOSちゃんと動くじゃん、みたいなね。
   極端な話、そんなんでもいいと思うのよね、俺。
   OSなんてとても作れそうにない俺にはきっとうらやまスィーのよね。

297 名前: デフォルトの名無しさん 投稿日: 02/06/28 23:12

   >>252
   (1)-(3) PC/AT,PC-98xx,X68kに関して言えば、yes.

298 名前: デフォルトの名無しさん 投稿日: 02/06/28 23:13

   >>296
   それはOSなのかと小一時間問いたい。
   小学校に直起動のゲームがあったけどどっちかといえばそれに似てるな。

299 名前: デフォルトの名無しさん 投稿日: 02/06/28 23:53

   >>298
   うーむ。それもそうだな・・。
   まぁひげぽんさんの話ぶりだと
   理想みたいなものはあるんだろうからして
   そこまで極端ではないだろうけどね・・

300 名前: デフォルトの名無しさん 投稿日: 02/06/29 01:59

   >>292
   おれはユーティリティ作る方が燃えるけどな。
   システムを完全に、俺好みの方法でコントロール下においてやるぜグハハハハ。
   って感じで。

301 名前: デフォルトの名無しさん 投稿日: 02/06/29 02:04

   >>293
   Javaは実行環境。
   .netはMS独自仕様プロトコル。戦略的にはRFC無視の方向で逝きたいんだろうな。

302 名前: デフォルトの名無しさん 投稿日: 02/06/29 02:04

   おれは足回りを作るのが好き
   I/O直叩き、デバドラ作成は楽しいよ
   最近ディスク周りとかがマイブーム
   USBはターゲットもホストも簡単すぎてつまんない

303 名前: デフォルトの名無しさん 投稿日: 02/06/29 02:13

   >>302
   すげー。いろいろ教えて欲しいよ。
   あのさぁ、PCMCIAのドライバとかも作れる?

304 名前: デフォルトの名無しさん 投稿日: 02/06/29 02:53

   まあ煽りはほっときましょう
   どこのスレにも蛆のようにわいてくるんだから。

305 名前: デフォルトの名無しさん 投稿日: 02/06/29 03:01

   >>302
   そんなあなたに1394

306 名前: デフォルトの名無しさん 投稿日: 02/06/29 03:03

   PCMCIAはPCIやISAをいじった人なら全然難しくないよ
   というかそのあたりを学ぶ過程で必ず
   PCMCIAは難しくないというのを知るし。
   1394は手元に資料が何も無いんでパス。
   つーか流行ると思わなかったから何も勉強してないし・・・

307 名前: デフォルトの名無しさん 投稿日: 02/06/29 03:43

   めちゃくちゃおもしれーじゃねーか
   c++の勉強してんのにハードの勉強させんなよ(笑)
   俺もOSつくりてー
   でもまずはc++(笑)
   23か、若いなぁ...俺今18だけど23でそれできるかなぁ...
   頑張ってくださいsageながら見守ります

308 名前: デフォルトの名無しさん 投稿日: 02/06/29 03:46

   >>306
   デバイスドライバの作り方の説明って、要約すると
   「init と open と close 作りなさい」って感じじゃん?それはまあ分かるんよ。
   でも、実際に目の前にPCカードが一枚あってそのドライバがネットには
   いくら探しても無くて、自分で作るより他に手は無いってなったときに、
   具体的にどうやってその init やら open やらを作ればいいの?
   当然メーカーのウェブページに細かい仕様が載ってるわけでもなし、
   どのIOポート(でいいのかな?)にどんなデータ送るとどんな風に反応するか
   分からなくて、、、。
   そういう情報はどっから手に入れる?

309 名前: デフォルトの名無しさん 投稿日: 02/06/29 04:05

   基本的にボードメーカは何も知らないフリをするから要注意。
   すべてチップから想像するって感じ。
   まず、とりあえずダメ元でメーカに電話。
   平行してgoogleで全言語で検索。(日本語には情報はまず無い)
   さらに似たようなチップを使ってるデバイスの
   Linux(*BSD)のソースを見る。で、使えそうなら丸パクリ。
   月刊インターフェイスのバックナンバーは捨てずにとっとく。

310 名前: デフォルトの名無しさん 投稿日: 02/06/29 04:09

   WinのドライバはよくわからんけどLinuxのドライバは
   作りがバカみたいに単純(だから弊害も多いけど)。
   NIC関連のソースはひじょーに勉強になったね。

311 名前: デフォルトの名無しさん 投稿日: 02/06/29 04:11

   って、OSからかけ離れてるな・・・
   OSの華はやっぱりスケジューリングとメモリ管理だよね。
   ファイルシステムも面白いけど、2の次だよね。

312 名前: デフォルトの名無しさん 投稿日: 02/06/29 04:24

   >>309
   そっか。やっぱドライバ作る奴ぁすげーな。俺にはとても出来そうにない。

313 名前: デフォルトの名無しさん 投稿日: 02/06/29 04:38

   グラフィックスもだろう

314 名前: ひげぽん 投稿日: 02/06/29 13:37

   >(1)フロッピーディスクからブートする場合、
   >  ディスクの最初のセクタにあるコードが実行される。
   >(2)(1)で実行されたコードがさらに、フロッピーディスク上の
   >  他のコードを起動することで
   >OS本体を呼び出すことが出来る
   >(3)(1)(2)が正しいと仮定して、
   >あるCPUを載せた、PCがあるとする。
   >そのPC上でスタティックコンパイルすることにより作成された
   >バイナリ実行イメージがある。(例えばHELLO WORLDプログラム)
   >  上記バイナリイメージをフロッピーディスク上に配置し、
   >(1)(2)の手順でそのバイナリイメージを呼び出し実行することが出来る。
   >>297
   ありがとう。
   ひげぽんの当面の目標は(3)かな

315 名前: ひげぽん 投稿日: 02/06/29 13:46

   >ぶっちゃけ、特定のハードウェアを限定するようなOSなど、真のOSではない。
   >ハードウェアの違いを吸収し、共通の環境を提供するのが真のOSである。
   >
   >>291
   私も同意見です。
   ただし、1からこれを実現するのは難しいと思います。
   ある程度メジャーなハードウェア環境で動くOSを作ることからはじめて、
   あとで他の環境でも動くように移植すればいいと思っています。
   もちろん出来るだけハードウェア依存する部分は少なくすることは心がけます。

316 名前: ひげぽん 投稿日: 02/06/29 13:48

   >>296
   ありがとう。
   296さんもあきらめず。作ってみては?

317 名前: デフォルトの名無しさん 投稿日: 02/06/29 13:58

   お〜おもしれ〜じゃん。俺も参戦するぜ!
   で、例えばフロッピーからブートして"helloworldプログラム"表示させるのにファイルシステムを
   作らなきゃダメなんですか?

318 名前: デフォルトの名無しさん 投稿日: 02/06/29 14:26

   CSH読み込んでLBA算出すればファイルシステム何ぞイラン。

319 名前: デフォルトの名無しさん 投稿日: 02/06/29 14:40

   じゃあみんなで手分けしてやろうぜ。漏れ helloworld担当でいいすか?(汗

320 名前: デフォルトの名無しさん 投稿日: 02/06/29 15:50

   javaで書けない部分とはアセンブラオンリーの部分を除いて具体的にどこなのだ。

321 名前: デフォルトの名無しさん 投稿日: 02/06/29 17:02

   なぜそんなにJAVA、JAVA言うんだい?

322 名前: デフォルトの名無しさん 投稿日: 02/06/29 17:41

   javavm

323 名前: デフォルトの名無しさん 投稿日: 02/06/29 22:02

   >>291
   ハードウェアってどの範囲を指してんだ ? プロセッサの種別か ? 使ってるバス
   のアーキテクチュアか ? ここら辺を特定しないで...
   > ハードウェアの違いを吸収し、共通の環境を提供するのが真のOSである。
   なんて言ってる奴は、多分真の厨房だろうな。
   そう言う目的のOSと言うものもあるだろうし、ちょっとしたハードウェアの違い
   を吸収すると言う目的は理解できるけど、ちゃんとやろうとすると苦労多くして益
   なしになるのがオチ。極端な話、スーパーコンピュータから携帯電話まで同じOS
   が走ると思う ? (そりゃ極端過ぎるよと言うかも知れんが、J○va なんてそれに
   近いことほざいてたんだから。UCSD P-Machine の時代から誰もが考えて、誰も
   成功していない課題だよ。) それに多くの場合、そう言うハードウェアの違いを
   吸収するのはOSじゃなくてデバイスドライバ。だから、対象ハードウェアを増
   やすには基本的に人海戦術しかないよ。はっきり言ってそんなことに労力を使う
   のは、無駄だし「ひげぽん」が大金持ちでもない限りむり。普通のPCできちん
   と動くOSを作るべし。

324 名前: デフォルトの名無しさん 投稿日: 02/06/29 22:13

   そうそう、理想論だけで現実的な線での妥協と言う物を知らないのが困る。

325 名前: デフォルトの名無しさん 投稿日: 02/06/29 22:17

   x86 AT が基準でイイがあまりべったりだと移植性に乏しくなるってことじゃん。
   実際に対応するかどうかは別問題。

326 名前: デフォルトの名無しさん 投稿日: 02/06/29 22:19

   >>315
   始めにプログラム向けの仕様を決めておいて、それからハードウェアを合わせていくって
   手もあるかもよ。
   理想的な環境をイメージしておいて、それを実現するためにハードウェアに近い部分
   を構築するって感じで。
   ファンクションコールで欲しい物をリストして、それをハードウェア仕様に合わせて
   実現させればいい。手順も統一してあると嬉しいな。
   >>323
   まぁ、パフォーマンスは激悪になるだろうね。
   これは仕方ないと思う。
   だけど、プログラムやOSの移植性は抜群に良くなる。

327 名前: デフォルトの名無しさん 投稿日: 02/06/29 22:22

   >>323
   スーパーコンピュータから携帯電話まで、同じライブラリが使えると嬉しいな。(w
   一回コンパイルしとけば依存関係を気にしなくていい。

328 名前: 327 投稿日: 02/06/29 22:27

   まぁ、OSと言うよりVMに近いかな。
   OSとVMを統合して一歩進めた形だな。究極のOS環境。

329 名前: デフォルトの名無しさん 投稿日: 02/06/29 22:44

   >>328
   そんなもん、ハードウェアが一つの規格に統一されれるほうが
   利用者(プログラマ)側としては究極だろ。

330 名前: 327 投稿日: 02/06/29 23:02

   >>329
   統一されるわけねーだろ。(w

331 名前: デフォルトの名無しさん 投稿日: 02/06/29 23:04

   >>327
   いったいそれをどのような目的のために使うというのだ。
   PCにつまれるx86系CPUにとって得意な処理もあれば苦手な処理もある。
   あとROM,RAM等のハード資源を無視して強引にOSを作ってもまるで意味が無い。

332 名前: デフォルトの名無しさん 投稿日: 02/06/29 23:08

   >>330
   それを言ったらOSだって統一されるわけねーし、
   実装依存で余計に苦しむ場面も多々出てくるよ。

333 名前: 327 投稿日: 02/06/29 23:08

   ハードウェアってのはどうしても、物理世界の壁に直面する。
   電源容量、ノイズ、媒体特性、製造コスト、こういうのがある限り、ハードウェア
   を統一しようというのは無理。
   だから、そのために、OSと言う物が存在している。
   だけど、今のOSは、特定のCPUに依存しがち。
   だから、CPU依存をできるだけ廃したOSがあれば、かなり良いと思う。
   パフォーマンスは多少悪くなっても、まぁ、最近のCPU性能ならOld Pentiumクラス
   で動かしたWindowsと同等の性能程度で実現可能だろう。
   リアルタイム性も持たせれば、クリティカルな処理以外は全く問題なくなる。
   クリティカルな処理は、Network経由でCPUサーバが処理するようにするとか、
   分散オブジェクトをサポートすればいい。

334 名前: 327 投稿日: 02/06/29 23:12

   >>331
   まぁ、どうだろ。
   初歩的な関数から作ってみて、徐々に拡張してみては。

335 名前: 327 投稿日: 02/06/29 23:13

   目的は・・・作者次第じゃねーの?

336 名前: 327 投稿日: 02/06/29 23:20

   >>332
   OSは統一されるべき。
   だけど、アプリケーションソフトは統一されるべきではない。
   基本は統一されるべきだが、応用は自由に発展すべき。

337 名前: デフォルトの名無しさん 投稿日: 02/06/29 23:29

   >>336
   なんで ? OSだって単なるプログラムだよ。「バカッ速いけど、メモリー保護な
   んてかったるくってやってられねーよ。」というOSや、ひたすらユーザーイン
   ターフェースに凝りまくるOS。「ハードが死んでも、俺は実行を続けるぜ。」
   と言うフォールトレランスなOS。いろいろあっていいんじゃないの ?
   なんか、OSを特別なプログラムみたいに思ってない ?

338 名前: デフォルトの名無しさん 投稿日: 02/06/29 23:54

   じゃあOSつくるよかライブラリとかクラスライブラリとか
   環境とか作った方が手っ取り早いね。

339 名前: デフォルトの名無しさん 投稿日: 02/06/30 00:25

   「ハードが死んでも、俺は実行を続けるぜ。」
   カコ(・∀・)イイ!!

340 名前: デフォルトの名無しさん 投稿日: 02/06/30 00:29

   OSを"単なる"プログラムって言ってのけるあたり厨入ってるな。
   明らかに特別なプログラムだろ?

341 名前: デフォルトの名無しさん 投稿日: 02/06/30 00:35

   >>340
   日本語勉強してから物言え在日

342 名前: デフォルトの名無しさん 投稿日: 02/06/30 00:41

   >>340
   >>337 の主張は「いろいろあっていいんじゃないの?」って部分なんだが、、
   どうでもいい所にちょっかいだしてどうするんだ?

343 名前: デフォルトの名無しさん 投稿日: 02/06/30 00:52

   >>341,342
   そんなことでageんなよ…
   ひげぽん氏はどうした?

344 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:04

   まぁ、色々バージョンがあるのは良いんだけど、このOSでは文字列の扱いがまちまち
   だとか、基本的なファンクションコールの呼び方がまちまちだとか、プログラマ泣かせ
   の状況は、本来OSという存在を作った意図から外れてる。
   BIOSと何ら変わらないよ。
   この状況で良いんだったら、CPUベンダかチップセットベンダがROM焼きなり、
   ハードコーディングして出せば良いんだ。OSなんて要らないね。
   と言ってみる。

345 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:14

   マイコン用のOSってどうよ?HOSとか

346 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:15

   いや、もうTRON最高

347 名前: 日本語おかしいので、訂正と追加 投稿日: 02/06/30 01:15

   まぁ、色々バージョンがあるのは良いんだけど、文字列の扱いがまちまちだとか、
   基本的なファンクションコールの呼び方がまちまちだとか、処理系のbit数で計算結果
   が変わるとか、こういうというプログラマ泣かせの状況は、本来OSという存在を作った
   意図から外れてる。
   この状況で良いんだったら、BIOSと何ら変わらないよ。CPUベンダかチップセットベンダが
   ROM焼きなり、ハードコーディングして出せば良いんだ。OSなんて要らないね。
   単に、BIOSより使いやすいBIOSでしかない。
   と言ってみる。

348 名前: ひげぽん 投稿日: 02/06/30 01:16

   初めて読む486でアセンブラを勉強中です。
   しばしお待ちください。

349 名前:   投稿日: 02/06/30 01:16

   C言語でかけばそれをどんな環境でも
   その環境でコンパイルすれば使えるって入門書に書いてあったのですが
   どうですか?

350 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:18

   コンパイラがあればな

351 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:22

   >>349
   コンパイラが存在するのと、
   プログラムで使ったライブラリ関数が全く同じ外部仕様で提供されていること。
   他にも、ビッグインディアン/リトルインディアンの違いでハマったり、
   intのサイズが違ったり、数えればキリがない。
   そんなえーかげんなことを書いている本は捨てちゃいなさい。

352 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:23

   >>347
   そうだね。このスレ中途半端な知識の展覧会って感じだな。
   どんなOSがお望みなんだい?OSの設計はそれからだろ?
   このスレまだ何も生んでないな…

353 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:25

   ライブラリとかもっと上の層で対応した方が楽だし速いし柔軟じゃん。
   なぜわざわざ一番下から…

354 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:28

   >>351
   まぁ、『入門書』だから。
   難しいことは無視して平易に多少間違いも含みつつ書いてあるんだろ。
   間違いを知るのも良い勉強になるし。
   >>352
   とりあえず、『OSの目的』が無いと始まらないんだよな。
   UNIXは『ゲームを動かしたいんだ』って動機があったし、
   Windowsは『PC/ATで動くMacが欲しかったんだ』って動機がある。
   とりあえず『どういうのが欲しいのか』が無いとね。

355 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:34

   >>344
   文字列の扱いぐらいCの標準関数でも十分汎用性があるが。
   本来のOSの役目とは共通のCPUで動くアプリケーションが個別に作成し
   呼び出していたI/O、メモリブロックの確保(ヒープ)等に対して
   共通のインターフェースを提供するというもの。
   これがいわゆるシステムコールというやつだ。
   あんたが言ってるのは理想論であり、大企業が作っているにもかかわらず
   未だに使える次元で実現していないVMと同じ物を作るということである。
   結果としてCPUのパフォーマンスに支障をきたすOSではいらない物となる。
   少しでもOSのコードを見たことがある人なら知っていると思うが
   速度を上げるために内部は関数ポインタの塊である。

356 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:38

   >>353
   Just for fun.

357 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:42

   >>355
   >文字列の扱いぐらいCの標準関数でも十分汎用性があるが。
   そうかい?
   あ
   を一文字出したいんだけど、MS-DOS(英語版)で。
   言語レベルでは仕様までは規定してないよ。
   システム環境を規定しているのは実質的にOS。

358 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:43

   あ〜あまた始まった…

359 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:49

   ノイマン型のコンピュータの講釈をするのは知識不足でアレだけど、
   基礎的な事に限って言えば、処理装置と記憶装置等の5大装置があれば良い。
   ハードウェアでこれを実現するか、概ねソフトウェアでハードウェアは基礎的な
   部分にとどめるかは好きにして良いんだよ。
   OSが提供するメモリをCPUのMMUでやろうとすれば、高速だがCPUによって変わる。
   OSが独自にMMUを構築すれば、低速だがCPUが変わろうが動作する。
   そういうことなんだよ。

360 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:49

   ひげぽん氏よ、もう少し方向性を明確にしたらどうだい?
   でないと、不明瞭なまま話がどんどん広がってめちゃくちゃになってしまうよ

361 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:53

   >>357
   おいおい、それを実現するのはOSじゃないよ。
   普通は言語サブセットだったり、他のOS配下にあるモジュールだって。

362 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:54

   >>360
   あのさぁ、おまえらが勝手に持ち上げているだけで、
   ひげぽんは「とりあえず」習作としてOSを作って「みたい」というだけだろ
   いきなり仕様がどうだって話してもしょうがない。

363 名前: デフォルトの名無しさん 投稿日: 02/06/30 01:56

   >>357
   あんたが言っているのは<stdio.h>。
   俺が言ってるのは<string.h>。
   printf等は出力が絡むのでOSのwiteを使うことになる。
   文字列の連結、評価であれば問題ない。
   OSが無くても使える。実際使っている。
   あとmath.hもつかえる。

364 名前: 242 投稿日: 02/06/30 02:02

   ひげぽん氏は、いろいろな意味で偉いな。
   がんばってくれ。
   >>252に関してだけど。
   プログラムがシステムコールを使っていても、(3)のようになるのかな?
   システムコールってのはOSへのサービスの要求だよね。
   あ、特に返レスは不要だけどね。

365 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:03

   >>361
   おいおい。
   OSの定義わかって話してる?
   あんたが言ってるのはカーネルだよ。

366 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:07

   >>357
   内部表現と外部表現の違いについて小一時間勉強してこい

367 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:07

   >>363
   OSの話してるの。
   別に、C言語の仕様じゃ文字列の扱いについて規定してない。
   ”あ”が文字コードの何番かであるかも規定してない。

368 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:11

   OS非標準のコンソールドライバかもしれん(w

369 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:11

   >>366
   それは関係ないな。
   文字列のテーブルを管理してるのはOS。C言語じゃない。
   OSの基礎を小一時間勉強しろよ。(w

370 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:12

   http://www.reactos.com/

371 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:13

   で、1はx86用カーネル組みたいの?

372 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:13

   >>369
   だから、文字列ってなんだよ?
   パスカル文字列とか、Cの文字列とか
   それこそ、アプリケーション定義による独自の文字列とかがあって、
   OSが規定するべき物じゃない。

373 名前: @ 投稿日: 02/06/30 02:14

   OSよりもオープンソースのゲームって出来ない?

374 名前: 372 投稿日: 02/06/30 02:15

   >”あ”が文字コードの何番かであるかも規定してない
   この場合、OSが規定しているのは文字列ではなく、キャラクタセットじゃん。

375 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:16

   どんな文字でもゴリゴリ描いちまえば俺の勝ち

376 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:18

   >>372
   ああ。文字、文字。

377 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:18

   DOSはキャラクターセットの定義と$で終わる文字列のコンソール出力のファンクションリクエストを提供していますが。

378 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:19

   >>734
   キャラクタセット=文字セット

379 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:20

   >>373
   nethackとかそうじゃないっけ?

380 名前: 372 投稿日: 02/06/30 02:20

   >>378
   文字セットでも良いけど、文字セットは文字列じゃないぞ

381 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:21

   上の言い争いが全部自作自演だたら(・∀・)ワラエル!!

382 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:24

   拘泥

383 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:25

   >>367
   そんな事ぐらい判っているが。
   M$がシフトJISでUNIXはEUCが標準文字コードだろ。
   俺が言いたいのはつまりC言語でで'A'とすればそれはどんな処理系でも
   文字コードは別にしろAとして扱われるということだ。
   そんなことよりOSとして重要な機能は入出力機器への共通の抽象化された
   命令やnew,malloc等でのメモリブロックの確保だと思うのが。
   別にどうでもいいので俺は上げない。

384 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:26

   なんかOSとは「どうあるべき」っていう人と
   「どうやって作るの」っていう人が戦ったるみたい。
   個人的には、ここで必要なのは「どうやって作るの」の意見が重要そうな気がする・・・

385 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:38

   >>383
   あ? 標準がShift_JISだったUNIXもあるし、最近だとUTF-8つーこともあるが?
   インストール時に選択できるとかな。

386 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:39

   >>252 のことを x86 でやろうとしたら、「バイナリ実行イメージ」てのはどうやって作るんでつか?
   NE とか PE、MZ、ELF じゃダメっすよね?いわゆる com 形式でいいんでつか?

387 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:44

   COM形式で良い。
   16bitコンパイラとかで実行ファイルを作り、
   exe2binとかでバイナリイメージにして書き込む。
   プロテクトモードへの移行はローダーがやってもいいし、お好きにどうぞ。

388 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:50

   通りすがりで申し訳ないが、
   なんでOSのスレで文字列とかで争ってるんだろう・・・?
   ちなみに俺は >>311 に同意。
   タスク(プロセス)をどうやって実現しているか、というのは
   なかなか面白いと思う。

389 名前: デフォルトの名無しさん 投稿日: 02/06/30 02:58

   >>387 thx 今度やってみます。
   あと、全くライブラリ使っていなければオブジェクトフェイルのままでもOKでつか?

390 名前: デフォルトの名無しさん 投稿日: 02/06/30 03:00

   >>389
   ダメ。
   オブジェクトファイルが実行可能イメージである保証はないし。

391 名前: デフォルトの名無しさん 投稿日: 02/06/30 03:07

   >>390 そうでしたか、、ども。

392 名前: デフォルトの名無しさん 投稿日: 02/06/30 03:12

   32bitコンパイラはつかえないんでつか?

393 名前: デフォルトの名無しさん 投稿日: 02/06/30 03:22

   使えない

394 名前: デフォルトの名無しさん 投稿日: 02/06/30 04:37

   昔、S-OSというOSモドキがあったの覚えてます?
   あれすごく面白かったよね

395 名前: デフォルトの名無しさん 投稿日: 02/06/30 04:56

   それじゃあ32bitOSはどうやって動いてるんですか?
   1.まず16bit実行ファイルを起動
   2.16bit実行ファイルが32bit実行ファイルのための環境を整える
   3.32bit実行ファイルが起動
   4.32bit実行ファイルが32bitOSのための環境を整える
   5.32bitOSが起動
   はっ、これが「ぶーとしーくぇんす」というやつでは・・・

396 名前: デフォルトの名無しさん 投稿日: 02/06/30 05:04

   >>395

397 名前: デフォルトの名無しさん 投稿日: 02/06/30 05:50

   >>394
   Oh!MZ?だっけ?

398 名前: デフォルトの名無しさん 投稿日: 02/06/30 11:24

   >>340
   > 明らかに特別なプログラムだろ?
   素人さんかな ? だったら、黙ってた方がいいよ。

399 名前: デフォルトの名無しさん 投稿日: 02/06/30 11:44

   >>398
   そんなの蒸し返すなよ...

400 名前: デフォルトの名無しさん 投稿日: 02/06/30 12:25

   >>395
   x86の場合、16bitのモードから32bitモードに切り替えるんじゃなかったっけ?
   途中で。DOSでもWindowsでも動くようになってるはず。
   リアルモードとか仮想86モードとかそういう複雑な構成だった気がする。
   元々、x86って、MS製OSを前提にしてる設計だからなぁ。
   WINTEL同盟以降、MSの要求を受けてCPU設計してるらしいし。
   32bitリアルモードで初期化するにはどうしたら良いんだろ?

401 名前: デフォルトの名無しさん 投稿日: 02/06/30 12:45

   32bitリアルモードってなに?

402 名前: デフォルトの名無しさん 投稿日: 02/06/30 12:54

   (・∀・)シラン

403 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:04

   protected: (・∀・)mode!!

404 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:20

   何でプロテクトやねん!!

405 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:34

   (・∀・)シラン

406 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:34

   メモリ保護って事か?
   Windowsカーネルは保護されてねーじゃん。どういうことだよ。

407 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:35

   (・∀・)シラン

408 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:38

   (゚Д゚)ハア?

409 名前: デフォルトの名無しさん 投稿日: 02/06/30 13:39

   (゚Д゚)ハア?
   (゚Д゚)ハア?
   (゚Д゚)ハア?
   (゚Д゚)ハア?
   (゚Д゚)ハア?
   (゚Д゚)ハア?
   (゚Д゚)ハア?
   (゚Д゚)ハア?

410 名前: デフォルトの名無しさん 投稿日: 02/06/30 14:16

   つまり、Windowsはx86を使いこなせてないという事で良いですね。

411 名前: 仕様書無しさん 投稿日: 02/06/30 14:29

   >>410
   セグメントを殆ど使ってないLinuxよりはWindowsの方が386の
   機能を活用してるように思うけど、どうなんだろう?

412 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:07

   安定しないで数時間で落ちるOSと、安定してて数十日はもつOSと、どっちが良い?

413 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:08

   安定してて数百日はもつOS

414 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:10

   >>411
   なぜそこでlinuxが出てくるのか小一時間

415 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:11

   49日毎に確実に落ちるOSと、うまくいけば数百日持つけどハード
   が何も使えないOS、どちらが良い?

416 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:12

   >>413
   FreeBSDなら98日という記録をマークすますた。

417 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:13

   >>415
   不正な処理で49日持たないわなな

418 名前: 暴走すますた 投稿日: 02/06/30 15:15

   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ハードが何も使えないOS
   ・・・

419 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:15

   >>415
   49日があるのはWindows95だけだっけ?
   NT系は大丈夫だっけ?
   どちらにしろ9x系はだめだね。
   NT系がいいよ。2000ならハードもかなり使えるし。

420 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:18

   DOSはマイクロカーネル

421 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:21

   ケンタッキーフライドチキンを食いたくなった。

422 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:21

   >>419
   カーネル保護されてねーOSが49日持つかよ。
   どうせ、PRO串とかDNSとかWINSとかファイルサーバとか限定用途なんだろ?
   これくらい一台のPentium PCで出来るはずの事だぞ。
   「おい!サーバが、サーバが盗まれたぞ!」
   「一台にまとめたんです。何でもできるんですよ。」

423 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:23

   >>422
   49日の意味知らないだろ。

424 名前: 422 投稿日: 02/06/30 15:30

   >>423
   起動合計時間処理がどうたらとか聞いたなぁ。
   興味ないんで突っ込まなかったが。
   第一、Windows95系で49日持たせる用途なんてねーし。(w

425 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:31

   NT系で十分

426 名前: 422 投稿日: 02/06/30 15:36

   49day= 1176 hour = 70560 minute = 4233600 second = 4,233,600,000 ms
   つー事かい?

427 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:41

   人間はOSですか?

428 名前: デフォルトの名無しさん 投稿日: 02/06/30 15:58

   win95はパッチがあるよ>49日
   パッチ当てても49日も動かさないけど(w

429 名前: ひげぽん 投稿日: 02/06/30 16:16

   はじめて読む486
   第5章セグメントまで読み終わりました。
   とりあえずこれを読めと薦めてくれた人の気持ちが分かりました。
   x86系CPUで動くOSを作るうえで必要な基礎知識が書いてありました。
   例)
   プロテクトモードとリアルモード
   レジスタとは?
   セグメントとは?
   MMUによるアドレス変換と仮想記憶
   ただしアセンブリ言語のことは、あまり書かれていないので
   これを読んでHello World は書けない・・・
   さあ頑張ってHelloWorld 書くぞ。

430 名前: デフォルトの名無しさん 投稿日: 02/06/30 16:25

   >>422
   > カーネル保護されてねーOSが49日持つかよ。
   (゚д゚)ハァ?

431 名前: デフォルトの名無しさん 投稿日: 02/06/30 16:31

   初めて読むItanium、蒲池先生書いてくれないかなー

432 名前: デフォルトの名無しさん 投稿日: 02/06/30 17:52

   >>429
   アセンブラでHello Worldを書こうと思ったら
   BIOSの呼び出しかVRAMへの直接書込が必要になる。
   これにはアセンブラの知識だけじゃなくて、
   ハードウェア(のアーキテクチャ)に固有のBIOSなどの知識が必要。
   アセンブラの知識だけならこのスレの最初の方で出ていた
   インテルの純正マニュアル(pdf)と各種入門サイトで一通りカバーできる。
   BIOSなどについてはFreeDOSのソースを見るといいかも。

433 名前: ひげぽん 投稿日: 02/06/30 17:54

   アセンブラ環境をとりあえず整えてみました。
   OS:WindowsXP Pro
   エディタ:Meadow 1.14
   アセンブラ:nasm for win32
   リンカ:alink
   上記環境下で、webで拾ってきた↓をアセンブル、リンクしました。
   segment code
   ..start:
   ;各セグメントなどの初期設定
   mov ax,data
   mov ds,ax
   mov ax,stack
   mov ss,ax
   mov sp,stacktop
   ;文字列の表示
   mov dx,hello
   mov ah,09h
   int 21h
   ;終了
   mov ax,4c00h
   int 21h
   segment data
   hello: db 'Hello World',13,10,'$'
   segment stack stack
   resb 64
   stacktop:
   実行も成功!
   どなたかアセンブリ言語の入門に
   最適なサイトを紹介していただけませんか?

434 名前: デフォルトの名無しさん 投稿日: 02/06/30 18:02

   アセンブラの入門サイト。
   http://www.d1.dion.ne.jp/~ecb/assembler/assembler00.html
   http://www.geocities.co.jp/SiliconValley/9979/asmhead.html

435 名前: ひげぽん 投稿日: 02/06/30 18:21

   >>432
   入れ違いになっちゃいましたね。
   BIOS呼び出しとVRAMへの直接書き込みどちらが、
   入門者向きでしょうか?
   また、メジャーなOSはどちらを選択しているのでしょうか?

436 名前: デフォルトの名無しさん 投稿日: 02/06/30 18:23

   >>435
   OSを作るなら当然前者ではありえない。
   ただ、前者を使ったモジュールもあるべき。
   最初は前者で書いて、あとから後者を追加すればいい。

437 名前: 俺様のブックマーク 投稿日: 02/06/30 18:24

   http://www.capricorn.cse.kyutech.ac.jp/~tate/tako/80x86.html
   http://hp.vector.co.jp/authors/VA003720/lpproj/int10h/int10h.htm
   http://ha3.seikyou.ne.jp/home/Joyit/asm/x86arc.html
   http://www.geocities.co.jp/SiliconValley-PaloAlto/5989/programming.html

438 名前: ひげぽん 投稿日: 02/06/30 18:30

   >>434
   >>437
   ありがとう。
   >>436
   よく考えればその通りですね。
   まずは、BIOS経由で挑戦してみます。

439 名前: ひげぽん 投稿日: 02/06/30 19:00

   インターフェース 2002 7号に
   BIOS版「Hello, World」プログラムの作成という記事
   がありました。
   フロッピーからブートしてHello, Worldと
   出力してみようという内容です。
   これだ!と思ったものの。全部GNUツールでやってる・・・
   初心者のひげぽんには、これを読み替えて
   NASM on Windwosで実践する力がまだありません・・・
   もっと勉強しないと。

440 名前: デフォルトの名無しさん 投稿日: 02/06/30 19:17

   ここで5年間問いつづけけながらOS作る気か。
   くだらん質問する暇があったらまず本を読め
   100冊読んでから出直せ。
   ネタにしてもつまらん。

441 名前: デフォルトの名無しさん 投稿日: 02/06/30 19:21

   FDベースでIPLを書いてブートさせてBIOSを一通り叩くところまで行けば
   後は書籍と試行錯誤のセルフラーニングでどうにかなるだろ。
   そこまではおっかなびっくりで質問が多くなるのも無理ないと思うよ。

442 名前: デフォルトの名無しさん 投稿日: 02/06/30 19:24

   >>440
   そんな駄目レスを5年間続けながら
   無駄に人生を送るよりは良いんじゃない?
   本を読めって?
   それはお前だろ

443 名前: デフォルトの名無しさん 投稿日: 02/06/30 19:28

   >>440をいじめないでください。
   弱い者いじめなんて、男のすることじゃないです。

444 名前: ひげぽん 投稿日: 02/06/30 19:31

   >>441
   ご迷惑をおかけいたします。
   >FDベースでIPLを書いてブートさせてBIOSを一通り叩くところまで行けば
   >後は書籍と試行錯誤のセルフラーニングでどうにかなるだろ。
   >そこまではおっかなびっくりで質問が多くなるのも無理ないと思うよ。
   現在の状況は、基本となる雛形も無い状態なので
   良い意味でマネできる素材があればと思っています。
   Webで探しているのですが今のところなかなか良いのが
   見つからないです。
   勉強の過程を同じような志の人たちにフィードバックできたら
   と考えています。

445 名前: 今更だが・・・ 投稿日: 02/06/30 20:10

   >>25-32
   ・・・

446 名前: タ僕 ◆njaj0FGY 投稿日: 02/06/30 20:11

   >>444
   それならSunriseOSがオススメ。
   ソースがべらぼうに読みやすい。

447 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:20

   >>444
   ソース読め馬鹿

448 名前: ひげぽん 投稿日: 02/06/30 20:20

   とりあえず。
   ↓
   ■アセンブラ
       http://www.csl.sony.co.jp/person/fnami/asm.htm
       http://finito-web.com/silphire/linux/linuxasm.htm
       http://isweb31.infoseek.co.jp/computer/maccyo/assembler/assembly.html
       http://www.geocities.co.jp/SiliconValley-PaloAlto/5989/programming.html
       http://ha3.seikyou.ne.jp/home/Joyit/asm/x86arc.html
       http://www.d1.dion.ne.jp/~ecb/assembler/assembler00.html
       
   ■ブート
       http://www.tkcity.net/~nobusan/boot/boot.html
   ■minix
       http://plaza4.mbn.or.jp/~annchan/minix/main.html
   ■その他
       http://hp.vector.co.jp/authors/VA003720/lpproj/int10h/int10h.htm
       http://ime.nu/www.intel.co.jp/jp/developer/design/litcentr/index.htm
       
   ■参考書
       オペレーティングシステム<第二版> 設計と理論およびMINIXによる実装」
       著:A.S.タネンバウム + A.S.ウッドハル
       訳:千輝 順子
       監修:今泉 貴史
       プレンティスホール出版 ¥8,800
       
       はじめて読む486
       著:蒲池 輝尚
       アスキー出版局

449 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:23

   >>447
   は無視していきましょう。

450 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:43

   >>1
   は無視していきましょう。

451 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:45

   447=450
   はきっと寂しいんだよ。
   みんな相手してあげて。

452 名前: 457(!=450) 投稿日: 02/06/30 20:52

   つか、まじめにスレ読もうとしたおれから言わせてもらうと、
   うざいんですけど。
   何で検索しないの?
   質問の方が答えるの早いから?
   なめとるよ。

453 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:55

   >>452
   ひげぽんが結構教えて君なのは確かだな。
   が、指摘された参考図書に実際に取り組んでいるし
   テストコードも書いたりしているから前向きではある。
   もうちょっとなま暖かい目で見守ってやっていい。

454 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:57

   457??

455 名前: デフォルトの名無しさん 投稿日: 02/06/30 20:59

   発言予告だろ、とマジレスの振りをしてみるテスト。

456 名前: デフォルトの名無しさん 投稿日: 02/06/30 21:03

   >>453
   教えて君ていうか自作自演君では...

457 名前: デフォルトの名無しさん 投稿日: 02/06/30 21:05

   ひげぽん結構がんばってるじゃん。
   よく見ると質問もWebで検索して見つかる種類ではない場合が多い
   と思うんだけど。
   >>252
   とかそんな感じじゃん。
   勉強した上で出てきた疑問質問なら良いと思うよ。

458 名前: デフォルトの名無しさん 投稿日: 02/06/30 21:08

   linuxとかのソースとか。

459 名前: デフォルトの名無しさん 投稿日: 02/06/30 21:18

   >>457
   知ってる事しか質問してないように見える.

460 名前: ひげぽん 投稿日: 02/06/30 21:27

   私の質問と、質問の仕方によりご迷惑をおかけいたしております。
   以後以下のことに気をつけます。
   ・今でも十分調べてから、質問をしていますが
   WEBで調べて分かるものは、自分で調べます。
   ・自分で調べたものについても、出来る限り
   ここに書き込むようにします。
   どうぞよろしくお願いいたします。

461 名前: デフォルトの名無しさん 投稿日: 02/06/30 21:44

   >>460
   あまり気にしなくていいと思ワレ
   気にせず、いいOSをツクテクレ

462 名前: デフォルトの名無しさん 投稿日: 02/06/30 22:08

   >>452
   ウザイと思ったら、来ないでね。言いたいのは、ただそれだけ。

463 名前: ひげぽん 投稿日: 02/06/30 22:24

   >>446
   446さん。
   遅くなりましたが、ありがとうございます。
   実際にSunriseOS http://www.geocities.com/sunriseos/ を
   フロッピーからブートしてみました。
   アセンブラもNASM用に書かれているので大変参考になります。
   しばらくはこのソースを研究いたします。

464 名前: デフォルトの名無しさん 投稿日: 02/06/30 22:28

   >>460
   ココはOSを作ろうとする人のための質問スレなんだから何でも聞いて良いんじゃない?
   オープンに何でも話そうよ。

465 名前: デフォルトの名無しさん 投稿日: 02/06/30 22:29

   文字出力するだけでもVGAを叩かなくちゃいけないんですか?

466 名前: デフォルトの名無しさん 投稿日: 02/06/30 23:04

   ひげぽんが出てこないと妄想君が議論始めるから
   ひげぽんは気軽に出てくるように。

467 名前: デフォルトの名無しさん 投稿日: 02/06/30 23:24

   たまに出てきてね

468 名前: デフォルトの名無しさん 投稿日: 02/07/01 00:57

   うん、次は4年後だね

469 名前: デフォルトの名無しさん 投稿日: 02/07/01 01:11

   >>465
   BIOS叩いてもできるけど結局同じこと。

470 名前: デフォルトの名無しさん 投稿日: 02/07/01 03:13

   http://ise-city.no-ip.com/~foo/
   ↑これひげぽん?

471 名前: デフォルトの名無しさん 投稿日: 02/07/01 03:35

   >>436 を読むとBIOSを使うのはあまり良くないようだけど何故なの?

472 名前: デフォルトの名無しさん 投稿日: 02/07/01 03:44

   >>471
   PCのBIOSはプロテクトモードから呼び出せないし再入可能でもない。
   リアルモードで動くシングルタスクのOS以外からは使い物にならんよ。

473 名前: デフォルトの名無しさん 投稿日: 02/07/01 04:23

   >>472
   目から鱗が落ちますた。

474 名前: デフォルトの名無しさん 投稿日: 02/07/01 06:05

   >>472
   ちょっとまて。
   そうかといって本格的にOS作り始めたとき山のようにドライバ書かなくちゃならなくなるんじゃ?
   BIOS叩いてやれば少なくともドライバがないから画面真っ黒とかいうことにはならんと思うが。

475 名前: デフォルトの名無しさん 投稿日: 02/07/01 07:03

   なにをいまさら

476 名前: デフォルトの名無しさん 投稿日: 02/07/01 19:41

   >>474
   たうぜん

477 名前: デフォルトの名無しさん 投稿日: 02/07/01 19:42

   まいくろかーねるにしようぜ。いい加減。

478 名前: ひげぽん 投稿日: 02/07/01 22:07

   SunriseOSのソースを眺めてちょっとずつ勉強しています。
   とりあえず自分なりにコメントを付加してみました。
   15%も理解していないですが・・・
   これから理解を深めます
   osimg.asm ブート部分

479 名前: ひげぽん 投稿日: 02/07/01 22:09

   ; --------------------------------------------------------
   ; SunriseOS boot loader             2001 Scherpereel Jelle
   ; --------------------------------------------------------
   ; This code loads the actual kernel in memory and jumps to
   ; it for execute!
   ; --------------------------------------------------------
   ; It needs to be compiled with NASM
   ; --------------------------------------------------------
   ; ひげぽんが勝手にコメントを追加しました。
   ; コメントを和訳したものではありません。
   ; コメント ver1.0
           org     0          ;bios read from here ■プログラムが0から始まる事を示す

480 名前: ひげぽん 投稿日: 02/07/01 22:11

   start:
   ;setup the stack
   ;we can't allow interrupts while we setup the stack
   cli ;disable interrupt ■外部割込みを禁止する
   mov ax,0x9000 ;put stack at 0x9000 ■汎用レジスタに0x9000をセットする
   mov ss,ax ;ss=9000 ■セグメントレジスタ(スタックセグメント)にaxの値をセットする
   mov sp,0 ;sp=0000 ■スタックポインタに0をセットする
   sti ;enable interrupt ■外部割込みを可能にする
   ;remember the bootdrive information
   mov [bootdrv],dl ;■変数boodrvに汎用レジスタ(データレジスタ)dlの値をセットする
   ;load the kernel
   call load ;■コードラベルloadを実行
   ;jump to the loaded program
   mov ax,0x1000 ;■axに0x1000をセット
   mov es,ax ;■esにaxをセット
   mov ds,ax ;■dsにaxをセット
   push ax ;■スタックaxをpush
   mov ax,0 ;■axに0をセット
   push ax ;■スタックからaxをpop
   retf ;■呼び出し元に戻る

481 名前: ひげぽん 投稿日: 02/07/01 22:12

   ; -------------------------------------------------------
   ; functions and data used by the bootstrap program
   ; -------------------------------------------------------
   ;data
   bootdrv db 0 ;variable containing the bootdrive
   ;load kernel from bootdrive
   load:
   ;reset the diskdrives
   push ds ;store DS ■データセグメントの値をスタックへpush
   mov ax,0 ;select function ■汎用レジスタaxに0をセット
   mov dl,[bootdrv] ;drive to reset ■データレジスタに変数bootdrvの値をセット
   int 13h ;reset ■13hの割り込み処理を行う13h?
   pop ds ;restore DS ■スタックからpop
   jc load ;failed try again■キャリーフラグ?が1のときにラベルへジャンプ
   load1:
   mov ax,0x1000 ;es:bx=1000 ■汎用レジスタaxに0x1000
   mov es,ax ; ■エキストラセグメントにaxの値をセット
   mov bx,0 ; ■bxに0をセット
   ;read disksectors
   mov ah,2 ;select function ■ahに2をセット??
   mov al,10 ;read 10 sectors ■alに10をセット??
   mov cx,5 ;cylinder=0,sector=5 ■cxに5をセット
   mov dx,0 ;head=0,drive=0 ■dxに0をセット
   int 13h ; ■13hの割り込み処理を行う13h?
   jc load1 ; ■キャリーフラグ?が1のときにラベルへジャンプ
   retn ; ■呼び出し元に戻る
   times 512-($-$$)-2 db 0
   dw 0AA55h

482 名前: デフォルトの名無しさん 投稿日: 02/07/01 22:13

   大学でOSの作成経験あり↓
   http://pc.2ch.net/test/read.cgi/tech/1025441630/116

483 名前: ひげぽん 投稿日: 02/07/01 22:15

   ソースのレイアウトがくずれてしまいました.

484 名前: デフォルトの名無しさん 投稿日: 02/07/01 22:27

   帰ってきたひげぽん。
   おかえりーー

485 名前: ひげぽん 投稿日: 02/07/02 00:03

   これから少しずつソースを読んで行こうと思います。
   良いリファレンス、ひげぽんの間違い指摘、アドバイス等ありましたら
   ぜひ書き込みください。
   まずはこの部分から。
   >;setup the stack
   >;we can't allow interrupts while we setup the stack
   スタックセットアップをしているらしい。
   >
   >cli           ;disable interrupt  ■外部割込みを禁止する
   ここはOK
   >mov   ax,0x9000    ;put stack at 0x9000 ■汎用レジスタに0x9000をセットする
   axに0x9000を入れることにどういう意味があるか?
   ssに0x9000をいれるためか?
   >mov   ss,ax      ;ss=9000       ■セグメントレジスタ(スタックセグメント)にaxの値をセットする
   mov ss,0x9000とどう違うのか?
   またどういう意味があるか?
   >mov   sp,0      ;sp=0000       ■スタックポインタに0をセットする
   どういう意味があるか?
   >sti           ;enable interrupt  ■外部割込みを可能にする
   ここはOK
   勉強が足らないですね。

486 名前: ひげぽん 投稿日: 02/07/02 00:06

   良いリファレンスを探さねばと、痛感しております。
   もう英語でもいいから、いいところ無いかなあ。

487 名前: デフォルトの名無しさん 投稿日: 02/07/02 00:16

   スタックはss:spになる。
   それだけだろ?

488 名前: デフォルトの名無しさん 投稿日: 02/07/02 00:30

   >>485
   はじめて読む486の最後の方の命令セット一覧見てご覧よ。
   セグメントレジスタに即値を mov できないでそ。

489 名前: ひげぽん 投稿日: 02/07/02 00:31

   >>487
   ありがとう
   axを介しているのはなぜでしょうか?
   cli
   mov ss, 0x9000
   mov sp, 0
   sti
   で良い様に見えるのですが何か理由があるのでしょうか。

490 名前: ひげぽん 投稿日: 02/07/02 00:32

   >>488
   ・・・すいません入れ違いになりました。
   ありがとう。

491 名前: デフォルトの名無しさん 投稿日: 02/07/02 01:23

   うーん、ひげぴん、がんばってるなぁ

492 名前: デフォルトの名無しさん 投稿日: 02/07/02 01:25

   一般的に、
   i++ ; // iに1足す。
   みたいなコメントは、かな〜り逝ってよしです。

493 名前: デフォルトの名無しさん 投稿日: 02/07/02 01:29

   とりあえず、アセンブラ初心者はそれで良いんじゃないの?
   レジスタの名前は決まっちゃってるんだし、コメントがあっても邪魔じゃないだろ

494 名前: デフォルトの名無しさん 投稿日: 02/07/02 01:38

   アセンブラはそれこそ
   mov ax,0x9000
   mov ss,ax
   の様に1つの動作を2〜3の命令の組み合わせで表す事があるから
   mov ax,0x9000 ; ssに0x9000を
   mov ss,ax ; 入れる
   みたいに、その動作単位でコメントを入れると良いかも。

495 名前: デフォルトの名無しさん 投稿日: 02/07/02 01:44

   0x9000 って数には何か意味がある? 単にメモリの後の方って事?

496 名前: デフォルトの名無しさん 投稿日: 02/07/02 07:28

   >>495
   ss:spが9000:0000なのでスタックは9000:ffffから使われる。
   つまり640KBのケツ。

497 名前: デフォルトの名無しさん 投稿日: 02/07/02 10:31

   ページ違反で落ちないの?

498 名前: ひげぽん 投稿日: 02/07/02 23:44

   >;remember the bootdrive information
   >
   >mov   [bootdrv],dl  ;■変数boodrvに汎用レジスタ(データレジスタ)dlの値をセットする
   作者のコメントを見るとブートドライブの情報を記憶とあるが
   dlには、ブートドライブ情報が元から入っているのでしょうか?
   >;load the kernel
   >
   >call  load      ;■コードラベルloadを実行
   ここはOK
   以後loadラベルに進みます。

499 名前: ひげぽん 投稿日: 02/07/02 23:58

   >;load kernel from bootdrive
   >
   >load:
   >    ;reset the diskdrives
   >
   >    push  ds       ;store DS    ■データセグメントの値をスタックへpush
   このデータセグメントには何らかの値が入っていて、それを保持するために
   スタックにpushしていると思うのですが、いったい何が入っているのでしょうか?
   >    mov   ax,0      ;select function ■汎用レジスタaxに0をセット
   ここは本当に意味が分からないです、axに0をセットしているものの、
   これ以降どこかでつかっていないように見えるのですが。。。
   >    mov   dl,[bootdrv]  ;drive to reset ■データレジスタに変数bootdrvの値をセット
   >    int   13h       ;reset      ■13hの割り込み処理を行う13h?
   13h割り込み処理の定義は、どこかで調べればわかると思うので保留。
   >    pop   ds       ;restore DS   ■スタックからpop
   >    jc   load      ;failed try again■キャリーフラグ?が1のときにラベルへジャンプ
   kernelのloadが失敗している間はずっとループする???

500 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:04

   >ここは本当に意味が分からないです、axに0をセットしているものの、
   >これ以降どこかでつかっていないように見えるのですが。。。
   int13hでつかってるんだろ。

501 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:08

   >>500さん、すてき!
   天才。まじで。

502 名前: ひげぽん 投稿日: 02/07/03 00:17

   >>500 さん
   ありがとう。
   これをヒントにいまint 13hを調べております

503 名前: ひげぽん 投稿日: 02/07/03 00:22

   とりあえずこんなの見つけました。
   INT (16進数) 説明
   10 ビデオサービス
   11 実装されているハードウェアリスト取得
   12 メモリサイズ取得
   13 低レベルディスクサービス
   14 シリアルポートサービス
   15 (予約:さまざまな用途に使われる)
   16 キーボードサービス
   17 プリンタサービス
   18 ROM BASIC 起動
   19 リブート
   1A システムタイム取得
   1B CTRL - BREAK ハンドラ
   1C システムチックカウントタイマー
   1D システムデータ (ビデオパラメータテーブル)
   1E システムデータ (ディスクパラメータ)
   1F システムデータ (8 x 8 グラフィックフォント)

504 名前: 500 投稿日: 02/07/03 00:31

   つーかな、
   http://www.cse.iitd.ernet.in/~csu98123/old/home/learn/os/nasmBoot.html
   くらいはすぐに見つかるだろ。

505 名前: !ひげぽん 投稿日: 02/07/03 00:39

   >>504 500さん、あなたは英雄です。
   すごすぎます。

506 名前: ひげぽん 投稿日: 02/07/03 00:39

   >>504
   ありがとうございます。
   int,13h,axをキーワードにWebをさまよっていました。
   ということでまとめると
   load:
       ;reset the diskdrives
       push  ds       ;store DS    ■データセグメントの値をスタックへpush
       mov   ax,0      ;select function ■ディスクを
       mov   dl,[bootdrv]  ;drive to reset ■リセット
       int   13h       ;reset      ■する
       pop   ds       ;restore DS   ■スタックからpop
       jc   load      ;failed try again■キャリーフラグ?が1のときにラベルへジャンプ

507 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:55

   ひげぽん応援あげ
   (・∀・)っ コレドーゾ http://www.ctyme.com/intr/int-13.htm

508 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:58

   あと 「Ralf Brown interrupt」 でぐぐれば↑の内容がアーカイブ化
   されててDL出来るようになってるとこが見つかると思う。

509 名前: デフォルトの名無しさん 投稿日: 02/07/03 06:43

   >>507 >>508
   ひげぽんさんじゃないけど、ありがとう。
   このスレは勉強になります。

510 名前: デフォルトの名無しさん 投稿日: 02/07/03 09:56

   はじめて読む486のサポートページ
   念のため。
   http://www.ascii.co.jp/books/support/apc/4-7561-0213-1.html

511 名前: デフォルトの名無しさん 投稿日: 02/07/03 10:48

   調子はどうだひげぽん
   ローダくらいはできたか

512 名前: ひげぽん 投稿日: 02/07/03 21:16

   >>507 >>508 >>510
   ありがとう。
   はじめて読む486一応読み終わりました。(かなり斜め読み)
   仕事から帰ってから1,2時間しか時間が無いので
   進みは遅いですがよろしくお願いいたします。
   ソースレイアウトがくずれるのが、見づらいのですが、
   半角空白を&nbsp;で置き換えるしかないのでしょうか?

513 名前: ひげぽん 投稿日: 02/07/03 21:44

   皆様のご好意により資料が増えましたので
   コメントを書き換えました。
   ; --------------------------------------------------------
   ; SunriseOS boot loader             2001 Scherpereel Jelle
   ; --------------------------------------------------------
   ; This code loads the actual kernel in memory and jumps to
   ; it for execute!
   ; --------------------------------------------------------
   ; It needs to be compiled with NASM
   ; --------------------------------------------------------
   ; ひげぽんが勝手にコメントを追加しました。
   ; コメントを和訳したものではありません。
   ; インデントに変更を加えました
   ; コメント ver1.1
       org 0 ;bios read from here ■プログラムが0から始まる事を示す

514 名前: ひげぽん 投稿日: 02/07/03 21:45

   start:
       ;setup the stack
       ;we can't allow interrupts while we setup the stack
       cli              ;disable interrupt   ■外部割込みを禁止する
       mov    ax,0x9000 ;put stack at 0x9000 ■スタックを
       mov    ss,ax     ;ss=9000             ■9000:0000に
       mov    sp,0      ;sp=0000             ■設定する
       sti              ;enable interrupt    ■外部割込みを可能にする
       ;remember the bootdrive information
       mov    [bootdrv],dl ;■変数boodrvに汎用レジスタ(データレジスタ)dlの値をセットする
       ;load the kernel
       call    load        ;■コードラベルloadを実行

515 名前: ひげぽん 投稿日: 02/07/03 21:46

       ;jump to the loaded program
       mov     ax,0x1000   ;■axに0x1000をセット
       mov     es,ax       ;■esに0x1000をセット
       mov     ds,ax       ;■dsに0x1000をセット
       push    ax          ;■スタックaxをpush
       mov     ax,0        ;■axに0をセット
       push    ax          ;■スタックaxをpush
       retf                ;■呼び出し元に戻る
   ; -------------------------------------------------------
   ; functions and data used by the bootstrap program
   ; -------------------------------------------------------
   ;data
   bootdrv     db  0      ;variable containing the bootdrive

516 名前: ひげぽん 投稿日: 02/07/03 21:50

   ;load kernel from bootdrive
   load:
   ;reset the diskdrives
   push ds ;store DS ■データセグメントの値をスタックへpush
   mov ax,0 ;select function ■ディスクを
   mov dl,[bootdrv] ;drive to reset ■リセット
   int 13h ;reset ■する 成功した場合キャリフラグが1になる
   pop ds ;restore DS ■スタックからpop
   jc load ;failed try again■キャリーフラグが1のときにラベルへジャンプ
   load1:
   mov ax,0x1000 ;es:bx=1000 ■エキストラセグメントに
   mov es,ax ; ■1000をセット
   mov bx,0 ; ■bxに0をセット
   ;read disksectors
   mov ah,2 ;select function ■セクタを読んでメモリにセット
   mov al,10 ;read 10 sectors ■10セクタ読む 格納先はes:bx
   mov cx,5 ;cylinder=0,sector=5 ■シリンダ0,セクタ5
   mov dx,0 ;head=0,drive=0 ■ヘッド0,ドライブ0
   int 13h ; ■実際にセクタを読み込む 成功した場合キャリフラグが1になる
   jc load1 ; ■キャリーフラグ?が1のときにラベルへジャンプ
   retn ; ■呼び出し元に戻る
   times 512-($-$$)-2 db 0
   dw 0AA55h

517 名前: ひげぽん 投稿日: 02/07/03 21:57

   ソースの概要および実行順序を今分かっている分を書いてみると
   (1)外部割込み禁止
   (2)スタックのセットアップ
   (3)外部割り込み可能にする
   (4)ブートドライブ情報保存
   (5)ディスクをリセットする
   (6)ディスクを読んでメモリにセットする
   (7)読み込んだプログラムへジャンプする???
   でしょうか。

518 名前: ひげぽん 投稿日: 02/07/03 21:59

   >>511
   もう一息です、がんばります。

519 名前: ひげぽん 投稿日: 02/07/03 22:07

   疑問なのですが、
   load:ラベル部分でディスクをリセットしています(int 13h,0)
   なぜdsの値をいったんスタックに退避しているのでしょうか?
   ご紹介いただいた
   http://www.ctyme.com/intr/rb-0605.htm
   を見る限りでは、dsの値が書き換わることはなさそうなのですが。

520 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:26

   >>512
   ひげぽんあんたはすごいよ。
   まじで。

521 名前: デフォルトの名無しさん 投稿日: 02/07/03 23:06

   >>512
   > 半角空白を&nbsp;で置き換えるしかないのでしょうか?
   全角スペースで置き換える方が簡単だと思います。

522 名前: ひげぽん 投稿日: 02/07/03 23:21

   >>521
   ちょうど追加分があるのでやってみます
   times 512-($-$$)-2 db 0  ;■nasmにファイルサイズが512byteであることを教える
           dw  0AA55h       ;■ブートストラップの最後の2byteは0AA55hがセットされていなければならない

523 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:42

   ひげぽんがんばれage!!!
   参考になればどうぞ。
   >最後のブートシグニチャは必ずマジックナンバーと呼ばれる0xAA55という値が
   >入っています。この値が入っていないとマスターブートレコード自体が
   >無効なものとして扱われ、BIOSによってはブートストラップローダが
   >実行されませんし、パーティションテーブルも読み込まれません。
   >つまりこのマスターブートレコードが正当なものであることを保証する署名(シグニチャ)です。

524 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:44

   >>823はひげぽん以下という罠。

525 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:45

   ○ >>523
   × >>823

526 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:47

   >>524
   え?どういうこと

527 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:51

   >>526
   お前、すぐ上の >>522 ぐらいみろよ。
   > dw 0AA55h ;■ブートストラップの最後の2byteは0AA55hがセットされ
   >       ていなければならない
   バカ丸出しだぞ。

528 名前: ひげぽん 投稿日: 02/07/05 00:08

   >>523
   ありがとう。
   詳しい説明たすかります。

529 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:47

   だんだんとひげぽんが成長するにつれ、
   疑問に答えられるやつがいなくなってきたね。
   オレモナー

530 名前: デフォルトの名無しさん 投稿日: 02/07/05 01:02

   >>90
   MS-DOSみたいなのを作ればいいんじゃないかな。
   なんか、話が発展しすぎてるけど。GUIとかJAVAは当分先だろう。
   個人的には、GPLなLinuxよりもBSDをベースにして欲しい。
   フロッピー1枚に収まるBSDとか探して、ソース見てみれば?
   CUIで低機能でも、個人が作ったOSならば是非とも触ってみたい。

531 名前: 530 投稿日: 02/07/05 01:04

   なんじゃこりゃ。
   こんなにレスあったんか。
   鬱だ・・・氏んできます。

532 名前: デフォルトの名無しさん 投稿日: 02/07/05 01:36

   ひげぽん以外を応援あげ。
   みんな、性格がよく(煽りに乗らず、くだらんレスにもお礼を言う)、
   勤勉で(会社から帰っての1、2時間を勉強にあてている)、
   頭のいい(短期間でかなりの進歩を見せている)、
   そんなひげぽんなんかに負けるな。
   性格がゆがんでて、怠惰で、頭の悪い2チャンネラの底力を見せてみろ。

533 名前: デフォルトの名無しさん 投稿日: 02/07/05 01:43

   (゚∀゚)ま、ひげぽんが今作ってるのは ブッ茶けて言うと
   たんなるブートローだだしねぇ。応援はするけど。OSじゃないよね.

534 名前: デフォルトの名無しさん 投稿日: 02/07/05 01:46

   >>532
   頭が悪いのはあなただけです。

535 名前: デフォルトの名無しさん 投稿日: 02/07/05 02:23

   オレ質問いいっすか?>>514 なんだけど、一番最初で、割り込みを禁止して
   ss:sp を設定したら、またすぐ割り込み許可してるじゃん。
   でも、まだ、割り込みベクタを初期化してるわけでもないし、
   割り込みが発生したときに実行されるべきルーチンもロードされてないわけじゃん。
   そんな状況で割り込み許可なんてしちゃって良いの?
   そんなとき割り込みが発生したらどうなるの?
   あと >>515 でひげぽんは retf の説明を「呼び出し元に戻る」と書いているけど
   本当はそうじゃないのは分かってるよね? いや念のため確認したかっただけっす。

536 名前: デフォルトの名無しさん 投稿日: 02/07/05 04:22

   >535
   あれ?リアルモードの割り込みベクタは、0:0〜0:1000までに存在してて
   ベクタ初期化はBIOSがやってくれてて、ルーチンも、UMAのどっかに
   BIOS ROMとして用意されていたはず。
   #でないとint13hとか、int 09hとかで大問題になるはず……

537 名前: デフォルトの名無しさん 投稿日: 02/07/05 04:22

   まちがい。0:0〜0:400

538 名前: まぁ、どうでも良いけど 投稿日: 02/07/05 04:41

   >>533
   おれは、だから仕様をと、、、

539 名前: デフォルトの名無しさん 投稿日: 02/07/05 05:54

   >>535
   ブートローダに制御が渡る前にBIOSが設定してる。

540 名前: デフォルトの名無しさん 投稿日: 02/07/05 06:50

   >>516 int 13h のコメントが「成功した場合キャリフラグが1になる」 になってますけど、これは「失敗した場合」ですよね? つまり 成功するまで同じ処理を繰り返す、と。

541 名前: ひげぽん 投稿日: 02/07/05 11:30

   >>533
   >(゚∀゚)ま、ひげぽんが今作ってるのは ブッ茶けて言うと
   >たんなるブートローだだしねぇ。応援はするけど。OSじゃないよね.
   その通りです、まずは取っ掛かりですね。ブートローダーがきちんと作れれば
   一応先に進めるんで・・・
   まずは動く物を作りたいっす。
   >>535 >>536 >>537 >>539
   私の思いつかない疑問と、その回答ありがとうございます。
   BIOSってさまさまですね。
   割り込みルーチンが無かったら確かにえらいことですよね。
   >>540
   間違いでした。すいません。

542 名前: ひげぽん 投稿日: 02/07/05 11:32

   誤 BIOSってさまさまですね
   正 BIOSさまさまですね

543 名前: デフォルトの名無しさん 投稿日: 02/07/05 12:00

   >>541
   >>535の最後の質問への回答きぼん。

544 名前: ひげぽん 投稿日: 02/07/05 12:38

   >>535
   失礼しました。
   あまり考えずに進んだところに罠が・・・
   確かに呼び出し元に戻るっていうのはどう考えてもおかしいですね。
   ret:call命令でコールされたサブルーチンから復帰する。
   と同等のものとの認識でした。
   以下
   http://members.tripod.co.jp/guriponn/others/japanise/chapter7.txt
   より引用
   (*) コードセグメントが一つ(tiny,small,compactモデル)の時は、関数は
   nearです。つまり、関数の引数がデータセグメントに置かれるかスタ
   ックに詰まれた時の関数のポインタは16 bitsの長さのオフセットと
   言う事です。(CSレジスタはその値を永遠に変更せずいつでも全ての関
   数のアドレスを返します。)そして関数は普通のnearの`CALL'で呼び出
   され、`RETN'を用いて関数へ戻ります。(NASMでは、`RETN'と`RET'を同
   義語として扱います。)つまり、あなたが自分のルーチンを書く時に、
   関数へ戻るには`RETN'を使い、外的な(externの)Cのルーチンを呼び出
   すときにはnearの`CALL'を使わねばならないと言う事です。
   (*) コードセグメントが1つ以上(medium,large,hugeモデル)の時は、関数は
   farです。つまり、関数のポインタは32 bitsの長さと言う事です。(16-
   bitのオフセットと16-bitのセグメントで処理される)そして、`CALL FAR'
   (または`CALL seg:offset')で呼び出され、`RETF'で関数に戻ります。も
   う一度繰り返しますが、従ってあなたが自分のルーチンを書くときに関
   数へ戻るには`RETF'を用いて関数へ戻り、`CALL FAR'で外的な(extern
   の)Cのルーチンを呼び出すのです。
   引用ここまで
   良く分からないです。

545 名前: ひげぽん 投稿日: 02/07/05 12:40

   CALL FAR で呼び出されているのは何でしょうか?

546 名前: デフォルトの名無しさん 投稿日: 02/07/05 12:50

   スタックに0x1000:0000を積んで、そのアドレスにretfで戻る(飛ぶ)。
   retだから呼び出し元に戻るという考えは捨てよ

547 名前: ひげぽん 投稿日: 02/07/05 13:04

   確認です
   >;jump to the loaded program
   >
   >mov ax,0x1000
   >mov es,ax
   >mov ds,ax
   >push ax
   >mov ax,0
   >push ax
   >retf
   retfの手前では
   ax →0
   es →0x1000
   ds →0x1000
   スタックには、0x1000と0が積まれています。
   >>546さん
   >スタックに0x1000:0000を積んで、そのアドレスにretfで戻る(飛ぶ)。
   retfはどのレジスタ(スタック)を参照してそのアドレスに飛ぶのでしょうか?
   それ以外のレジスタは、とんだ先で実行されるコードで参照されるためのものでしょうか?
   質問ばかりで申し訳ないですが、お願いいたします。
   今日は仕事はお休みのため、勉強するチャンスです。

548 名前: デフォルトの名無しさん 投稿日: 02/07/05 13:38

   retfだけじゃなくてretn(ret)もスタックの一番上から
   アドレスを取り出してそこにジャンプする命令

549 名前: デフォルトの名無しさん 投稿日: 02/07/05 13:42

   >>544
   なんでこのページは第7章しかないの?
   はじめから見てみたい。
   目次の場所教えて。

550 名前: デフォルトの名無しさん 投稿日: 02/07/05 13:45

   archive.orgへ逝け

551 名前: ひげぽん 投稿日: 02/07/05 16:42

   そろそろ自分でソースを書きそうなのですが
   アセンブラのソースって、どういうインデントが良いのかなあ。
   コメントは、日本語英語どっちがいいんだろう。
   PJ名(仮称)はどうしよう。

552 名前: デフォルトの名無しさん 投稿日: 02/07/05 17:46

   >コメントは、日本語英語どっちがいいんだろう。
   本気なら英語のほうが良い。
   でも2chでは日本語のほうが良いかも。
   PJ名は、2chとかどうよ?

553 名前: デフォルトの名無しさん 投稿日: 02/07/05 18:03

   >>552 本気なら英語のほうが良い。
   根拠は?

554 名前: デフォルトの名無しさん 投稿日: 02/07/05 18:05

   日本人以外の奴等とオープンソースで開発するならばという意味です。
   英語圏のやつらでなくても、日本語よりはましかと・・・

555 名前: デフォルトの名無しさん 投稿日: 02/07/05 18:20

   英語のほうがいいかも。
   今のところひげぽんは本気っぽいからね。
   プログラム板の猛者も、立ち上がるかもしれん。
   PJ名(仮称) higeponOSでいいんじゃない?

556 名前: デフォルトの名無しさん 投稿日: 02/07/05 18:47

   はっきり言ってガイジンと開発はだめすぎ
   クズOSじゃガイジンは見向きもしないし、
   良いOSになりそうだったらそれは日本人の手柄でありたいと思うがどうよ?

557 名前: デフォルトの名無しさん 投稿日: 02/07/05 18:59

   英語のメリット
   日本人以外のやつにとって敷居が低くなる
   英語のデメリット
   日本人にとって読みにくい。
   いんちき英語コメントになる可能性がある。
   日本語のメリット
   日本人にとって非常に読みやすい。
   日本語のデメリット
   日本語はマイナー言語である。

558 名前: デフォルトの名無しさん 投稿日: 02/07/05 19:16

   技術以外の話題になるとみんなとたんに元気になるね。

559 名前: デフォルトの名無しさん 投稿日: 02/07/05 19:16

   いいじゃん。
   少しでも貢献したいんだよ。
   純粋に。

560 名前: ひげぽん 投稿日: 02/07/05 19:31

   アセンブラのインデントはemacsのasm-modeに準じることにしました
   コメントは、どうしましょう。
   一応良いOSを作るつもりなので、
   英語のほうが良いのでしょうか?

561 名前: デフォルトの名無しさん 投稿日: 02/07/05 19:41

   つもりって…
   死ぬほど無謀だな

562 名前: デフォルトの名無しさん 投稿日: 02/07/05 19:46

   ひげぽん期待age!
   2ch発信のOSをつくれり。

563 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:14

   オープンソースにしてsourceforgeにプロジェクト登録はどうか?
   ttp://sourceforge.jp/
   容量無制限かつcgi可のHPスペースとか、MLとかが無料で利用できるし、
   何よりも新規プロジェクトに飢えてるから、本家よりも軽快だし。

564 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:27

   >>559
   単にブートローダーの話がつまらないだけだと思われ。
   アプリケーションプログラマには関係ないし。

565 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:29

   日本語はUTF-8だのSJISだのEUCだのの変換が面倒かもな。

566 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:32

   せっかくだからUCS4ネイティブで行きましょう。

567 名前: ひげぽん 投稿日: 02/07/05 20:35

   >>565
   コメントは英語で行くことにしました。
   いんちき英語にならぬよう祈るのみです。
   >>555
   引き続き名前募集です。
   >>563
   それは良いかもしれませんね。
   骨格部分が出来て公開できる段階になったら
   sourceforgeにいくかも!!

568 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:44

   ttp://sourceforge.jp/projects/hos/
   こんな感じ?こっちは組み込みOSだけど。

569 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:45

   OSのデベロッパーってすごいな

570 名前: ひげぽん 投稿日: 02/07/05 21:34

   >>568
   見てみました。
   なんだか見ているだけでやる気が出てきます(笑)
   やはり複数人で開発すると楽しそうですね。

571 名前: デフォルトの名無しさん 投稿日: 02/07/05 23:08

   >>568
   HOSって、パトレイバーか?(w

572 名前: デフォルトの名無しさん 投稿日: 02/07/06 03:44

   >>571
   作者がファンだから、あやかってるらしい。

573 名前: デフォルトの名無しさん 投稿日: 02/07/06 06:32

   http://lkh.linux.or.jp/24kernel/source/html4/boot.html

574 名前: デフォルトの名無しさん 投稿日: 02/07/06 06:40

   >>573
   俺はあんたを愛してしまいそうだ。

575 名前: デフォルトの名無しさん 投稿日: 02/07/06 07:06

   お前らUNIX Magazine 7月号の特集は読みましたか?
   なかなか、参考になるぞ。
   っと言おうと思ったが、>>573 の方が詳しい罠

576 名前: デフォルトの名無しさん 投稿日: 02/07/06 09:34

   >>575
   おーい。あんまり変なスペース入れなよ。俺様の大事なスレなんだから。(w
   ウニクスマガジンの特集って白崎博生さんのだよね。
   5月から読んでるけど、俺、これが楽しみでしょうがない。
   (俺はウイン屋だから、こういう雑誌見たことなかった。)
   ページ数を3倍増くらいしてがむばってほしい。>>白崎さん
   って、2チャンなんか見てないかな。

577 名前: ひげぽん 投稿日: 02/07/06 13:30

   >>573
   貴重な情報サンクス!
   ブート部はgasで書かれているようですが、
   参考になります。
   昨晩は、bochs(x86エミュレータ)を入れていろいろ実験していました。
   かなり便利ですね。
   アセンブル→ブートテストのサイクルが同じマシン上ですぐ出来る!

578 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:54

   PC のブートの勉強用としてはこんなのもある。
   ttp://www.rbt.his.fukui-u.ac.jp/~naniwa/comp/OS/
   GPL。μITRON 上に POSIX API を実装したという珍品。しかも純和製。
   ドキュメントが少ないので勉強用としては今一つかな。カーネル本体は
   複雑で訳わからんが、ブート部 (eota/sfsboot, eota/boot 以下) は比
   較的すっきりしている。eota/boot は gas と C で書かれていて、
   eota/sfsboot 以下はそれを nasm と C で書き換えて拡張したようだ。
   Bochs でも動いた。
   参考になるかな。

579 名前: ひげぽん 投稿日: 02/07/06 16:52

   >>578 さん
   ありがとう。
   nasmで書かれたbootソースというだけでも
   大変助かります。
   Bochs等お詳しそうですね。
   今後もアドバイス頂けるとうれしいです。

580 名前: 578 投稿日: 02/07/06 21:54

   単なるマイナー OS オタなのでアドバイスは無理っぽい。

581 名前: ひげぽん 投稿日: 02/07/06 22:00

   >>580
   では、580さんに目をつけてもらえるようになったら
   マイナーOSの仲間入りですね(笑)
   早くそうなるようにがんばります。

582 名前: ひげぽん 投稿日: 02/07/06 22:01

   ;-------------------------------------------------------------------------------
   ; Name        : higeboot.asm
   ; Description : boot from floppy disk and echo "2ch"
   ; Revision    : $Revision: 1.1 $
   ; Copyright (c) 2002 HigePon
   ;-------------------------------------------------------------------------------
   [ORG 0]
   jmp 07C0h:start
   start:
   hello:
           mov  al, '2'
           call print
           mov  al, 'c'
           call print
           mov  al, 'h'
           call print
           jmp hang
   print:
           mov ah, 0Eh
           mov bx, 7
           int 10h
           ret
   hang:
           jmp hang
           times 510-($-$$) db 0
           dw 0AA55h

583 名前: ひげぽん 投稿日: 02/07/06 22:04

   やっと動くものを自分で作れました。
   >>582のソースをnasmでコンパイルして
   フロッピーディスクにddコマンドなどでコピー
   ブートすると"2ch"の文字が!!
   全然たいしたものではないのですが、やっぱりうれしいですね。

584 名前: ひげぽん 投稿日: 02/07/06 22:15

   上記ソースだと文字列を表示するのが大変なので
   ↓のようにしたのですが
   "Hello!"の後に文字化けした文字列が出てしまいます。
   なぜでしょうか?
   msg     db  'Hello!'
   start:
           mov si, msg
   print:
           lodsb      
           cmp al, 0  
           je hang
           mov ah, 0Eh
           mov bx, 7
           int 10h
           jmp print  

585 名前: デフォルトの名無しさん 投稿日: 02/07/06 22:36

   >>584
   'Hello!' の後ろに、00h がないからじゃないの ? アセンブラは、C みた
   いに "ABC" で 00h は付加してくれないよ。
   Intel 系のアセンブラは良くわかんないけど...
   msg db 'Hello!', 00h
   とか書けばいいのでは ?

586 名前: デフォルトの名無しさん 投稿日: 02/07/06 22:41

   >>584
   msg db 'Hello!' を
   msg db 'Hello!$'
   cmp al, 0 を
   cmp al ,'$' にしてみては?

587 名前: 586 投稿日: 02/07/06 22:43

   わーだぶっちゃったごめんなさい

588 名前: ひげぽん 投稿日: 02/07/06 23:03

   ;-------------------------------------------------------------------------------
   ; Name        : higeboot.asm
   ; Description : boot from floppy disk and echo "Hello 2ch!!"
   ; Revision    : $Revision: 1.3 $
   ; Copyright (c) 2002 HigePon
   ;-------------------------------------------------------------------------------
   [ORG 0]
   jmp 07C0h:start
           msg db  'Hello 2ch World!', 00h
   start:
           mov ax, cs              ; what??
           mov ds, ax              ; what??
           mov es, ax              ; what??
           mov si, msg             ; set msg
   print:
           lodsb                   ; set al=current charcter at si
           cmp al, 0
           je hang
           mov ah, 0Eh             ; print
           mov bx, 7               ; a charcter
           int 10h                 ; at al
           jmp print               ; next charcter
   hang:
           jmp hang
           times 510-($-$$) db 0
           dw 0AA55h

589 名前: ひげぽん 投稿日: 02/07/06 23:04

   >>585 586
   thanks!!
   これで結構すっきりかけたと思います。

590 名前: 585 投稿日: 02/07/06 23:11

   >>586
   なんか懐かしい。そう言えば、Intel 系って文字列のターミネータが何故
   か '$' だったよね。Motorola 派 (流派かよ!!) としては、結構不思議
   でした。
   >>589
   ひげんぽん一歩前進、おめでとう。俺がついていけるのは、このあたりま
   でだけど、がむばってね。

591 名前: ひげぽん 投稿日: 02/07/07 00:07

   >>585
   本当にありがとう。
   おかげさまで、ちょっとだけ前に進みました。
   次の目標は、
   フロッピーの最初の512byte以降のプログラムを読み込めるように
   することです。

592 名前: デフォルトの名無しさん 投稿日: 02/07/07 00:15

   >>590
   文字列のターミネータが$なのはMS-DOSのシステムコールの仕様。
   このスレ見てたらなんか作りたくなってきた…(w

593 名前: ひげぽん 投稿日: 02/07/07 00:26

   >>592
   >このスレ見てたらなんか作りたくなってきた…(w
   作りましょう。
   ぜひ・・・

594 名前: デフォルトの名無しさん 投稿日: 02/07/07 01:24

   ひげぽん期待age
   有言実行すばらしい。

595 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:00

   ひげぽん素晴らしい。
   漏れもOSとまではいかないでもハードウェアとアセンブラの勉強を
   兼ねてOSもどきを作ろうとか思ってたけどまだ、何もはじめてない…
   水戸黄門の歌みたいだ…♪後から来たのに追い越され〜
   鬱…

596 名前: 590 投稿日: 02/07/07 07:41

   >>592
   ちょっと惜しい。CP/M からだよ。固定文字列なら、いいんだけどカーソル位置
   指定なんかで動的に文字列生成する時に、たまたま '$' が生成されてはまった
   事あり。
   と言うように、優れていない仕様でもとにかく具体的に動くものがあるとなんか
   萌える。そう言う意味で、>>588 みたいにソースを適時出すのはいいことだと
   思う。ひげぽんがむば。

597 名前: 592 投稿日: 02/07/07 08:15

   >>596
   Intel系って80系も含めて言ってたわけね。
   なんかアホみたいだ、俺。
   ってことで、mingw32とnasmをインストール。

598 名前: 592 投稿日: 02/07/07 11:57

   Technical Documents Related to Bochs
   http://bochs.sourceforge.net/techdata.html

599 名前: ひげぽん 投稿日: 02/07/07 12:03

   いくつか疑問点があります。
   >[ORG 0]
   >
   >jmp 07C0h:start
   セグメント07C0hに行くということだと思うのですが、
   どういう意図なのでしょうか?
   意味も分からず書いていました。
   >        msg db  'Hello 2ch World!', 00h
   >
   >start:
   >        mov ax, cs              ; what??
   >        mov ds, ax              ; what??
   >        mov es, ax              ; what??
   csの値を、ds,esに設定しているのですが、
   これは絶対必要な処理なのでしょうか?

600 名前: デフォルトの名無しさん 投稿日: 02/07/07 12:17

   7c0h:startはseg:offの形式だっつーの。

601 名前: デフォルトの名無しさん 投稿日: 02/07/07 12:18

   cs=dsとはコードとデータが同一セグメントにあると言うこと。
   vcのリンカ設定で言うなら、/merge:.data=.textってことサ

602 名前: ひげぽん 投稿日: 02/07/07 12:26

   ありがとうございます。
   >>600
   jmp 07C0した時点で、セグメントアドレスが決まるのか?
   もともとセグメントアドレスは、07COだったのでしょうか?
   >>601
   なるほど。
   コードとデータが同一セグメントであることを指定しない場合、
   どういう扱いになるのでしょうか?
   該当部分をコメントアウトすると、実行しても文字列が
   表示されませんでした。

603 名前: デフォルトの名無しさん 投稿日: 02/07/07 13:44

   >>602
   プログラムの先頭に来た時点 (=jmp 命令実行直前) で CS (コードセグメント
   レジスタ) と IP (命令ポインタ/プログラムカウンタ) は、各々 0x0000 と
   0x7c00 になっている。(インターフェース誌7月号 P.68 参照のこと)
   それで、この jmp 命令で CS に 0x7c00 を入れて IP に Start ラベルの
   オフセットを入れる。
   msg 等のラベルも全て 0x07c0 セグメント内でのオフセットとなっているから
   DS (データセグメントレジスタ) は、0x07c0 を入れておく必要がある。
   (そう言う意味では、mov es, ax は不要。)
   > コードとデータが同一セグメントであることを指定しない場合、
   > どういう扱いになるのでしょうか?
   その時の DS が示す値 (正確には × 16 して) に msg のオフセットを加えた
   所から文字列を持ってこようとする。(要は、変な DS の値を元にアクセスする
   アドレスを計算するため、変な場所から無理矢理データを持ってこようとする。)
   ちなみに、SS (スタックセグメントレジスタ) と SP (スタックポインタ) も
   設定しておいた方が良いと思う。(インターフェース誌, P.70, リスト1〜2参
   照のこと)

604 名前: デフォルトの名無しさん 投稿日: 02/07/07 13:56

   いんたーふぇーすかってこよ

605 名前: デフォルトの名無しさん 投稿日: 02/07/07 14:22

   org 0
   jmp 0x07c0よりも
   org 0x7c00としたほうがds,esにcsをセットしなくてよくてお徳なんじゃないですか?

606 名前: デフォルトの名無しさん 投稿日: 02/07/07 14:33

   そんなことはない。
   raw binaryの実行イメージだから、セグメントの設定は行ってくれない。

607 名前: デフォルトの名無しさん 投稿日: 02/07/07 15:08

   そうなんですか?orgとdsを0x7c00と0x07c0の組合わせで試してみてだめだったので、
   dsの設定をはずしてみたら正しく動いたのですが、これはなにか別なところで問題が
   あることが考えられるのでしょうか?

608 名前: ひげぽん 投稿日: 02/07/07 16:11

   >>603
   603さんの解説とインターフェース誌を総合すると
   jmp 0x07C0:startの替わりに
   jmp startとした場合には、コードセグメントは0のままである。
   その場合は、セグメント0のオフセットアドレス0x7C00のところへ
   ブートプログラムがロードされてしまう。
   するとセグメント0がブートプログラムによって分断されてしまうので
   よろしくないということですよね。
   ところがjmp 0x7C0:startとすると
   ブートプログラムは、セグメント0x7C0の先頭の場所へロードされる。
   ↑
   ここが分かりません。
   BIOSはブートプログラム512byteを物理メモリのあるアドレスに読み込み,
   CPUはそのアドレスへジャンプし、実行すると思うのですが
   なぜセグメント0x7C0を指定するセグメントの先頭にブートプログラムが
   ロードされているかが分からないです。

609 名前: デフォルトの名無しさん 投稿日: 02/07/07 16:27

   ロードされる物理メモリの場所は一定。
   far jmpではCSの値も変更できるから、07c0:0000にロードされると見ることが出来るわけ。
   07c0:0000 と 0000:7c00は物理的には同じアドレスを指してるってコトをよぉく理解しよう。

610 名前: ひげぽん 投稿日: 02/07/07 16:40

   >>609さん
   ありがとう。
   少ない頭で、ただいま考え中です。

611 名前: 609 投稿日: 02/07/07 16:45

   まぁ、segment:offsetの概念ってなかなか理解しがたいものがあるしね…
   物理アドレス = segment * 16 + offset
   つまり、同じアドレスを示すsegとoffの組み合わせが何通りもあるという事。
   利点としては、「64k以下のプログラムなら何処にでもロードできる」と理解しておくのがいいかも。
   以上の話は「リアルモード」でしか通用しないので注意。
   プロテクトモードでどーなるのかは、プロテクトモードに入れる段階になったら考えればよし。

612 名前: ひげぽん 投稿日: 02/07/07 16:56

   >>609さん
   1セグメントのサイズは必ず64KBであり、物理メモリを64KBずつに
   区分けしたものがセグメントだと思っていたので混乱していました。
   結局ブートプログラムは、
   リニアアドレス = 0x7C00に
   ロードされているのですね。
   そこでセグメントレジスタを07C0にセットするとセグメントの先頭ということもあり
   非常に都合が良いと。
   ブートプログラムが開始されてjmpした以降は、
   07C0のセグメントの中でのお話になるという事ですね。
   はじめて読む486の125ページにCSレジスタの役割が書いてありました・・・
   ↑
   日本語が変ですが、609さんのおかげで分かってきました。

613 名前: 609 投稿日: 02/07/07 16:57

   正解。

614 名前: ひげぽん 投稿日: 02/07/07 17:06

   >>609さんに大感謝!!!!
   ちょっと欲を出してマクロまで使ってみました。
   ディスクリセットまで実現!!
   ;-------------------------------------------------------------------------------
   ; Name        : higeboot.asm
   ; Description : boot from floppy disk and echo "Hello 2ch!!"
   ; Revision    : $Revision: 1.3 $
   ; Copyright (c) 2002 HigePon
   ;-------------------------------------------------------------------------------
   ;-------------------------------------------------------------------------------
   ; Name        : PRINTSTR
   ; Description : print string
   ; Param1      : string(db)
   ;-------------------------------------------------------------------------------
   %macro PRINTSTR 1
           mov si, %1
   %%hige:
           lodsb                   ; set al=current character at si
           cmp al, 0               ; if al == 0 then
           je  %%end               ; end this macro
           mov ah, 0Eh             ; print
           mov bh, 0               ; the charcter which is
           int 10h                 ; at al
           jmp %%hige              ; next character
   %%end:
   %endmacro

615 名前: ひげぽん 投稿日: 02/07/07 17:07

   ;-------------------------------------------------------------------------------
   ; Name        : main
   ; Description : boot program
   ; Param1      : NONE
   ;-------------------------------------------------------------------------------
   [ORG 0]
   ; use segment 07C0h and offset is address of start
   ; cs = 07Coh
   jmp 07C0h:start
           osStart db  'Hige start...', 0dh, 0ah, 00h
           resetOk db  'disk reset ok', 0dh, 0ah, 00h
   start:
           cli                     ; disable interrupt
           mov ax, cs              ; code segment address is 07C0h
           mov ds, ax              ; when data access, use 07C0h segment
           mov ss, ax              ; when use stack, user 07C0h segment
           sti                     ; enable interrupt
           PRINTSTR osStart
   reset:
           mov ax, 0               ; reset
           mov dl, 0               ; drive 0
           int 13h                 ;
           jc  reset               ; if failed try again
           PRINTSTR resetOk
   forever:
           jmp forever
           times 510-($-$$) db 0
           dw 0AA55h

616 名前: ひげぽん 投稿日: 02/07/07 17:17

   >>609さんのおかげにより
   ディスクリセットまでこぎつけました。
   次は、ディスクの513byte以降を、或るセグメントに読み込み
   そのセグメントにjmpすれば、そのコードが実行される!!
   ということを実現しようと思っています。
   この読み込まれるプログラムをアセンブラオンリーでなく
   Cオンリーまたは、C with インラインアセンブラで書きたいのですが、
   どのような環境を整えればよいのでしょうか?
   ひげぽんの環境は、
   Windows XP Pro
   NASM
   C++のコンパイラは、
   cygwin のgccと、VC++6.0 standardです。

617 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:24

   すいません。まだ分からない奴がいるんですが、
   >>605 に関連して
   org 0x7c00
   mov ax,cs
   mov ds,ax
   mov es,ax
   なら jmp 07c0h:start をしなくても ok って事?
   あと、
   jmp offset
   は相対アドレスのジャンプで、
   jmp segment:offset
   は絶対アドレスのジャンブって事ですか?

618 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:27

   >>616
   それは取り敢えずリアルモードのまま?

619 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:28

   >>616
   まだプロテクトモードに入ってないから、
   32bitコンパイラは使えないよ。
   16bitコンパイラでバイナリを生成した後にexe2bin汁。
   MSのexe2binは.com形式のためにorg100扱いで実行ファイルを生成した鴨

620 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:29

   >>617
   yep

621 名前: 609 投稿日: 02/07/07 17:30

   >>617
   >なら jmp 07c0h:start をしなくても ok って事?
   OKかもしれないけど…
   …よく分かりません…
   jmp offsetってのはIPにoffsetを代入。
   jmp segment:offsetってのはIPにoffset、CSにsegmentを代入です。

622 名前: ひげぽん 投稿日: 02/07/07 17:32

   >>618
   >>619
   何も考えていませんでした。
   とりあえずプロテクトモードに入ったと仮定しての
   お話でお願いします。
   (プロテクトモードへの移行は一応はじめての486に記述があるので
   いけそうだと踏んでいます。)
   アセンブラとCのつなぎの部分とかが全然分かっていない状態です。
   どういう環境で、どういう手順を踏んだら良いかすら分かっていないです。

623 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:34

   アセンブラとCの繋ぎなんて関係ない。
   メモリ上にロードしてエントリポイントのアドレスへjmpするだけだから。
   #場合によっては環境の設定をしてから。

624 名前: ひげぽん 投稿日: 02/07/07 17:41

   Cでソースを書く(インラインアセンブラを含む??)
   →どのライブラリ、関数が使用可能かということが分からない
   コンパイラでコンパイル
   →どのコンパイラ(もしくは特別なコンパイルオプション)をつかえば
   良いかが分からない。
   コンパイル済みのバイナリをそのままディスクに書き込めばよいのか?
   もう分からないこと尽くしです、
   どなたか、取っ掛かりだけでも教えてもらえないでしょうか?

625 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:45

   1 コンパイラ依存だし、ライブラリのソースが無い物の場合、
    自分で調べられないなら全部作る必要がある。
    まぁ、string.hくらいは使えるかもね
   2 世に出ている16bitのコンパイラで、OS固有のヘッダ領域を除去可能なツールが使える物。
   2 ディスクに書き込んでも良いし、ファイルシステムに保存しても良いけど、
    後者の場合は自前で読み込むか、FSサブシステムをロードしておく必要がある。

626 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:46

   ていうか、ローダーの時点でさっさとプロテクトモードに移行して、
   そこから実行するのが吉かと。

627 名前: 609 投稿日: 02/07/07 17:48

   果たしてあれだけの処理が512バイトに収まるかという問題も有る気が…
   一旦リアルモード -> プロテクトモードにいく16BitプログラムをCで作って
   exe2bin(exeヘッダを取り除く)して、それをディスクのブートセクタ以降に配置
   とかの方がいいかも。
   確かexe2binしたプログラムのエントリポイントは普通0だった気がするから、
   セグメントの先頭に配置してやれば動くはず。

628 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:49

   >>627
   MS-DOSの.com形式は256バイトのPSP領域を勝手にOSが用意するから、
   ORG 100hのバイナリが生成されたと思うけど?

629 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:52

   別に32bitコンパイラでも使う即値が16bit以下ならリアルモードでも動かせるんじゃなかったっけ?

630 名前: 609 投稿日: 02/07/07 17:56

   exdebのマニュアルからコピペ。
   ;"""""""""""""""""""""""""""""""""""""""
   ; .EXE ファイル・ヘッダー
   ; .EXE File Header
   ;"""""""""""""""""""""""""""""""""""""""
   EXH
   Offset Size Name Description
   00h 2 BYTEs exe_ID ;'MZ'または'ZM'
   02h WORD last_page_byte ;最終ページ内のバイト数
   04h WORD file_page ;ファイルの大きさ(1ページ=512バイト)
   06h WORD relocation ;リロケーション数
   08h WORD header_size ;ヘッダの大きさ(1パラグラフ=16バイト)
   0Ah WORD last_byte_min ;プログラムの後に必要な最小メモリ(パラグラフ)
   0Ch WORD last_byte_max ;プログラムの後に必要な最大メモリ(パラグラフ)
   0Eh WORD SS_inital ;SSの初期値
   10h WORD SP_inital ;SPの初期値
   12h WORD head_chk_sum ;チェックサム
   14h WORD IP_inital ;IPの初期値         <= ここの値
   16h WORD CS_inital ;CSの初期値
   18h WORD reloc_tbl_off ;リロケーションテーブルのオフセット
   1Ah WORD overlay_no ;オーバレイ番号
   1Ch WORD reloc_table ;リロケーション情報
   ここの値が幾つかによるわけだ..

631 名前: ひげぽん 投稿日: 02/07/07 17:59

   >>625,626,609,628さん
   ありがとうございます。
   プロテクトモード移行後であれば32bitコンパイラが
   使えるということですね。
   ブートプログラム内または、ブートセクタ以降でプロテクトモードに移行
   すればよいのですね。
   お勧めな環境とかってありますか?
   こういうのってどこで調べればよいのでしょうか。
   キーワードが悪いのか全然だめです。

632 名前: まだ分からない奴 投稿日: 02/07/07 18:08

   話題が映っているのに恐縮ですが、、
   609さん
   >>621 の最後の2行は「教科書的意味」でそうなるのは分かりますが、
   厳密にそうなるのでしょうか?
   今オレは nasm を試せないのですが、 linuxの as86(いわゆる gas だと思う)
   で↓をアセンブルすると、
   jmp L1
   jmp L1
   L1:jmp L1
   jmp 0x07c0:L1
   出力されるコードが、
   eb 02 eb 00 eb fe ea 04 00 c0 07
   となります。つまり最初の6バイトに関しては eb が jmp 命令で
   その後の1バイトが相対アドレスだと思います。
   (負の数を2の補数で表している)
   つまり、機械語レベルでは代入ではなく加算なのではないでしょうか?
   一方最後の5バイトは ea が jmp 命令で 続く4バイトでジャンプ先の
   絶対アドレスを指定しているので文字どおり代入が行われているとおもいます。
   以上をまとめると、jmp off は相対アドレスジャンプで jmp seg:off は絶対アドレスジャンプ
   になり、だからこそ>>480 とかは自分が読みこまれている場所を意識しなくても
   上手く言ったと思うのですが、、
   あと、微かな記憶ですが、 jmp off でも -128 から 127 に入り切らない場合は
   絶対アドレスジャンプの命令に置き換わっていた気がしますが、、

633 名前: 609 投稿日: 02/07/07 18:19

   >>632
   ザッツライトです(汗
   私の言っていることが不正確でした。
   jmpがどのジャンプかはアセンブラがかってに判断してくれるみたいですね…
   普通にアセンブラで書くときは即値かオフセットなのかは全然気にしてなかったもんで..
   MASMとかTASMはかってに絶対アドレス命令に置き換えてくれます。
   (知ったかぶり口調は自制するです…スマソ

634 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:33

   おいおい。
   ひげぽんがしらぬまにまた成長している・・・

635 名前: 592 投稿日: 02/07/07 18:45

   >>632
   shortは8bit相対ジャンプ
   nearは16bit相対ジャンプ
   farは32bit(seg:off)絶対ジャンプ。
   リアルモードでプリフィックスなしではこうなるはず。

636 名前: デフォルトの名無しさん 投稿日: 02/07/08 00:29

   おれも知りたいコンパイラ。

637 名前: ひげぽん 投稿日: 02/07/08 00:48

   OS開発環境を整えるページを見つけました。
   http://www.osdev.org/developers/guide01/
   ただし、gccとnasmの組み合わせが多いですね。
   Windows環境でいけるのが、みつからない・・・

638 名前: デフォルトの名無しさん 投稿日: 02/07/08 01:03

   もちろんこれから作るOSは操作でわからないことがあると
   幼女声で答えてくれたり気紛れな態度を取ってくれる萌えOSなんだろうな?

639 名前: デフォルトの名無しさん 投稿日: 02/07/08 01:11

   >>638
   ひげぽんが喋ります

640 名前: デフォルトの名無しさん 投稿日: 02/07/08 01:29

   >>639
   それは萌え(w
   それ以前に喋らすためにはサウンドドライバ書かなきゃいかんだろ
   昔のソフトみたいにBEEPで喋らすのもありだが(藁

641 名前: FreeDOS教徒 投稿日: 02/07/08 01:50

   ひげぽんたん‥‥‥ハァハァ(ぉ

642 名前: 592 投稿日: 02/07/08 02:10

   >>637
   gcc(mingw32)もnasmもWin32で動くぞ。

643 名前: デフォルトの名無しさん 投稿日: 02/07/08 02:52

   >>637
   いくらひげぽんOSがいいものになっても、それを自分でコンパイルするには、
   VCとか他の有料アプリを購入しなければ行けないとなればオレ的に萎え〜です。
   gccとnasmは萌え〜。

644 名前: デフォルトの名無しさん 投稿日: 02/07/08 10:47

   mingwinってどうやって使うの?
   使い方がいまいち分かんない。

645 名前: デフォルトの名無しさん 投稿日: 02/07/08 12:02

   そもそもそれ何?

646 名前: デフォルトの名無しさん 投稿日: 02/07/08 15:56

   MingW32の間違いでした。
   MingW32は発音できないから、ミングウィンか、ミングイン、の方が言いやすいなぁ。(ぼそ)
   みんぐwは尻切れっぽい感じが・・・。(ぼそぼそ)

647 名前: 645 投稿日: 02/07/08 17:23

   いや、だからさ、そのMingW32って何なのさ。
   おせーて、おせーて、おせーてよ。

648 名前: デフォルトの名無しさん 投稿日: 02/07/08 17:26

   なんかこのスレさ。
   ひげぽんを中心とするエリート軍団と、俺みたいなオッチー軍団に別れちゃったな。
   あーあ。オッチーにも愛の手(やさしい説明)を。

649 名前: デフォルトの名無しさん 投稿日: 02/07/08 17:36

   ム板でスレ建てるコテハンに優秀な奴はいないと思ってたけどそうでもないんだな
   とひげぽんを見てふと思ひ

650 名前: デフォルトの名無しさん 投稿日: 02/07/08 18:03

   >>649
   しかもよく読めば単発質問な。

651 名前: デフォルトの名無しさん 投稿日: 02/07/08 18:15

   > ム板でスレ建てるコテハンに優秀な奴はいない
   誤解だな。正確には
   「ム板で単発質問でスレ建てるコテハンに優秀な奴はいない」だ
   ここの1は単発質問をしていないので上記の条件には当てはまらない。

652 名前: デフォルトの名無しさん 投稿日: 02/07/08 18:27

   >>648
   どこが分からない?

653 名前: デフォルトの名無しさん 投稿日: 02/07/08 19:54

   FreeDOS教徒たんの開発環境ってどんな感じょ?

654 名前: デフォルトの名無しさん 投稿日: 02/07/08 20:34

   WIN32で他のOSの開発環境つながりだから聞いてしまえ!
   >>641
   FreeDOSカーネルのコンパイルはこのページの説明でできるの?
   http://home.interlink.or.jp/~s-nakani/freedos/build.html

655 名前: デフォルトの名無しさん 投稿日: 02/07/08 22:03

   >>647
   Windows上で動くGCC
   GCCはGNU Compiler Collectionの略(になったらしい。前はGNU C Compiler)
   Windows上で動くフリーのコンパイラって事らしい。ちなみにGPL。

656 名前: 655 投稿日: 02/07/08 22:12

   【追加説明】
   MinGW: Minimalist GNU For Windows
   詳細こちら(英語)
   http://www.mingw.org/
   tar.gzはいまダウンロード中だけど、どうすれば良いんだ?
   ソースっぽいし。
   UNIXでコンパイルしてもWindows上で動くのかな?
   exe形式になるの?
   SJIS通るのかな?
   PATH通せばいいだけ?

657 名前: デフォルトの名無しさん 投稿日: 02/07/08 22:19

   SJIS通らないよ。
   それから、gcc3.1系をばらで落とした方が良いかも知れない

658 名前: デフォルトの名無しさん 投稿日: 02/07/08 22:30

   >>656
   UNIXでコンパイルすればUNIXでWin32のコードを吐くクロスコンパイラになる。
   >>657
   別に通らないってことはないだろ。
   ただ、特にSJIS対応してないから
   // ソ
   とか
   // 表
   とか2バイト目に '\' が入ってると楽しいことになるだけで。

659 名前: デフォルトの名無しさん 投稿日: 02/07/08 22:41

   >>658
   そういうのは通らないというのだ

660 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:05

   キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
   Latest MinGW-1.0 Snapshot
   を解凍して、DOSプロンプトから実行したら動いたよ。

661 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:16

   1.0Snapって2.9.4じゃなかった?
   3.1落とせって

662 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:26

   ああ。ソースフォージに行けばいいのね。最新はここか。
   http://sourceforge.net/projects/mingw/
   ・・・なんか良くわかんないな。
   いっぱいファイルあるけど。
   っしかし、なんで、日本語なんだ?
   クライアントコードページでも参照してるのかな?
   CVSもどういう事なんだか良くわかんないし、死にそう。
   CVS超わかんねーよ。ヽ( `Д)ノウワァァァァン
   ソースフォージどうなってんだよ。ヽ( `Д)ノウワァァァァン

663 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:28

   VRAM直接アクセスで画面表示出来たよん。
   int13h 使うのと違って画面の左上に"2ch"って上書きしちゃうから
   bochs 使うと "2ch bios" ってなって(・∀・)ワラエル!!
   -----------------
   [ORG 0]
   jmp 07C0h:start
   start:
   hello:
   mov ax, 0B800h
   mov ds, ax
   mov di, 0
   mov al, '2'
   call print
   mov al, 'c'
   call print
   mov al, 'h'
   call print
   jmp hang
   print:
   mov [di],al
   add di,2
   ret
   hang:
   jmp hang
   times 510-($-$$) db 0
   dw 0AA55h
   ----------------
   んじゃ、ひげたんこれからもガムバテネ。

664 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:32

   >>662
   httpリクエストのAccept-Languageヘッダ見てるだけだと思うが。

665 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:39

   http://prdownloads.sourceforge.net/mingw/bunutils-2_12_90-20020518-1.tar.gz?download
   http://prdownloads.sourceforge.net/mingw/gcc-3_1-core-20020516-1.tar.gz?download
   http://prdownloads.sourceforge.net/mingw/make-3.79.1-20010722.tar.gz?download
   http://prdownloads.sourceforge.net/mingw/gdb-5.1.1-1-mingw.tar.gz?download
   http://prdownloads.sourceforge.net/mingw/mingw-runtime-2.0.tar.gz?download
   http://prdownloads.sourceforge.net/mingw/w32api-1.5.tar.gz?download
   これだけ落とせ。
   Ada/Pascalも欲しければどうぞ

666 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:46

   とりあえず、スナップショットが実行可能形式配付ファイルだと思われる事は解った。
   最新版は1.0.8。
   386、586、686、って分かれてるな。最適化済みの実行ファイルって事か。
   なんかexeっぽいけど何だ?インストールプログラムかな?
   バラバラにダウンロードして組み込んでも良いの?
   バージョンでおかしくなったりしないのかな?
   適当にまとめられてる奴無いのかな。

667 名前: 666 投稿日: 02/07/08 23:51

   >>665
   どうもありがとう。
   >Ada/Pascalも欲しければどうぞ
   ああ。なるほど。
   言語ごとにバラバラしてるわけね。
   で、GCCはそれをコントロールしてるって事か。

668 名前: デフォルトの名無しさん 投稿日: 02/07/08 23:53

   gcc-coreはc/c++コンパイラも含んでる

669 名前: ひげぽん 投稿日: 02/07/08 23:54

   なんだか盛り上がって来てうれしいですね。
   今日は仕事の合間に駄目もとでcygwin gccを試していたがだめでした。
   それで
   http://www.delorie.com/djgpp/
   を見つけました。
   これもWin上で動くgccらしいです。
   でもなんとなく皆さんが紹介してくださった
   Mingwのほうがよさげなのでそちらにしようかと思っております。
   なんだかそろそろgnu makeをきちんと勉強したほうが良い気が
   してきました。必要そうだし。

670 名前: 666 投稿日: 02/07/08 23:57

   って訳でもないか。
   binutilsって何?何かのユーティリティなのかな?
   DOS窓だとmanとか無いし、htmlドキュメントをブラウザで開くのかな?
   これらの混在環境って良いのか?
   バージョンで混乱したりしないのかな?

671 名前: ひげぽん 投稿日: 02/07/08 23:58

   >>663
   >VRAM直接アクセスで画面表示出来たよん。
   それはすごい!!
   ありがとう。
   今日はちょっと試す時間が無いので
   明日試してみます。
   >>665
   取りまとめありがとう。
   利用させてもらいます。
   ちなみにNASM&BochsはWin版を使ってます。

672 名前: 666 投稿日: 02/07/09 00:08

   あり?良いのか。
   ああ。良いんだ良いんだ。
   release note.txt読めば良かったんだね。
   頭混乱してた。恥ずかしいからsage

673 名前: ひげぽん 投稿日: 02/07/09 01:14

   >>669
   前言撤回Mingwやめました。
   DJGPPにしました。
   明日はVRAM叩きをまねして、
   あとはmakeの勉強。
   プロテクトモードへの移行もやらないと
   でもなんだか前より増してやる気が出てきた!
   会社でこそっとやろう。。。

674 名前: デフォルトの名無しさん 投稿日: 02/07/09 01:23

   djgppって32bit DOS extender搭載したDOS用のコンパイラじゃないの?

675 名前: デフォルトの名無しさん 投稿日: 02/07/09 03:41

   DOSエクステンダ用のコンパイラなら、
   TOWNS用にHigh-Cなんてのを持ってたなぁ....
   今はどこかへ行ってしまったが。

676 名前: デフォルトの名無しさん 投稿日: 02/07/09 03:44

   メディア、5インチでよければあるよ、High-C

677 名前: ひげぽん 投稿日: 02/07/09 20:58

   >>674
   以下のようなオプションが使えるので
   OS開発に使えるようです。
   >-ffreestanding
   >produce code that is meant to be run without an OS (ie:kernel code)
   >-c
   >compile but don't link (creates an object file)

678 名前: デフォルトの名無しさん 投稿日: 02/07/09 22:34

   gcc 使う場合リンカは何使うの?
   オレ gcc の標準の ld を使おうかと思っているけど
   -oformat output-format を何にしたら良いか分からなくて止まってる。
   ぐぐっても良く分からないよ〜。

679 名前: ひげぽん 投稿日: 02/07/09 23:08

   >>678
   試してはいませんが、
   OS developer's siteでは、
   ld -Ttext 0x100000 --oformat binary -o
   ld -o xxx -Ttext 0x0 -e main xxxx.o
   のようなものを使っていた。

680 名前: デフォルトの名無しさん 投稿日: 02/07/09 23:22

   >>679
   (・∀・)ソレダ!!

681 名前: デフォルトの名無しさん 投稿日: 02/07/10 00:04

   ちょっと分かった。
   windows では分からないけど linux では、
   nasm -f elf xxxxx.asm
   gcc -c yyyyy.c
   ld -oformat binary -Ttext 0x0 -e start xxxxx.o yyyyy.o
   こんな感じにすると C とアセンブラのくっついた COMファイル(?)ができる。
   つまり、バイナリにヘッダとかなくていきなり実行イメージがきているような奴。
   でも、これだと問題点が二つある。
   * 最後に AA55 をくっつけることが出来ない。
   * C で書いたコードは32bit用コードになっている。
   だから、やっぱり最初の512バイトはオールアセンブリで書いて
   その中でフロッピーをメモリに読みこんでプロテクトモードにして
   それから、上のようにして作った実行イメージを呼び出さなきゃダメっぽい。

682 名前: ひげぽん 投稿日: 02/07/10 00:27

   >>681
   681さん、同じところで悩んでいますよね。
   >だから、やっぱり最初の512バイトはオールアセンブリで書いて
   >その中でフロッピーをメモリに読みこんでプロテクトモードにして
   >それから、上のようにして作った実行イメージを呼び出さなきゃダメっぽい
   プロテクトモードへの移行の前には、
   GDTの設定、ITDRの設定などを行わなければいけないんでよね。
   その辺のことは、本に書いてあるのですが。
   ブートコードからCでコンパイルした
   (bootディスク上にある)実行イメージを呼び出す方法が分からない・・・
   (1)実行イメージのサイズがきちんと分かっている場合
   ディスクを必要セクタ分読み込めばよいのでしょうか?
     int 13hを使う感じで・・・
   (2)アセンブラで出来たブートイメージと、
   Cで書いて出来た実行イメージを
   ひとつのイメージにまとめて
   diskに対して ddコマンド等で書き込んでやればよいのでしょうか?
   今日は一日中悩みました。
   いろいろ実験したのですが、
   Cで実行イメージを作成しようにも、そいつが読み込まれて
   動作したかを確認する方法がないっす。
   int main() {
   }
   と空のmainを書けばライブラリに依存しないのでOKかと思ったのだが
   動作確認が出来ない(涙)

683 名前: デフォルトの名無しさん 投稿日: 02/07/10 00:47

   プロテクトモード移行は 2nd boot でやった方が良さそうな気がして来た。
   で、『はじめて読む486』では、MakeSegDesc とかいう関数作ったりして
   大がかりだけど、eota の boot/2nd/start16.S とか見ると
   ディスクリプタを最初っから直書きしていて、こうした方が楽な気がする。
   できれば、『はじめて読む486』のようにC を使って書きたいところだけど、
   gcc に 16 bit 用コードを吐きださせる方法が分からないから。
   アセンブリ使うしかなさそう。
   (1) そうだと思う。
   (2) 1st boot でプロテクトモードにするならそれでOKだと思うけど、
   2nd boot でプロテクトモードに切り替えるなら2nd boot の先頭はアセンブリの
   コードにしておいて(プロテクトモードに切り替えて)そこから C の関数を
   呼べば良いと思う。
   動作確認は>>663 の VRAM直接アクセスをCで書けば良いと思う。
   /boot/2nd/lib.c の write_vram が参考になる。
   上手く行かなければ、
   int c_func()
   {
   return 'A';
   }
   という関数をアセンブリからcallすれば ax に 'A'が入る。それを
   アセンブリで画面表示すれば良いと思う。
   どうしてもダメならリアルモードに戻してBIOSコールってことになるかな。

684 名前: デフォルトの名無しさん 投稿日: 02/07/10 00:51

   プロテクトモード移行は 2nd boot でやった方が良さそうな気がして来た。
   で、『はじめて読む486』では、MakeSegDesc とかいう関数作ったりして
   大がかりだけど、eota の boot/2nd/start16.S とか見ると
   ディスクリプタを最初っから直書きしていて、こうした方が楽な気がする。
   できれば、『はじめて読む486』のようにC を使って書きたいところだけど、
   gcc に 16 bit 用コードを吐きださせる方法が分からないから。
   アセンブリ使うしかなさそう。
   (1) そうだと思う。
   (2) 1st boot でプロテクトモードにするならそれでOKだと思うけど、
   2nd boot でプロテクトモードに切り替えるなら2nd boot の先頭はアセンブリの
   コードにしておいて(プロテクトモードに切り替えて)そこから C の関数を
   呼べば良いと思う。
   動作確認は>>663 の VRAM直接アクセスをCで書けば良いと思う。
   /boot/2nd/lib.c の write_vram が参考になる。
   上手く行かなければ、
   int c_func()
   {
   return 'A';
   }
   という関数をアセンブリからcallすれば ax に 'A'が入る。それを
   アセンブリで画面表示すれば良いと思う。
   どうしてもダメならリアルモードに戻してBIOSコールってことになるかな。

685 名前: 684 投稿日: 02/07/10 00:51

   死ぬほどミスった。>>683他スマソ

686 名前: デフォルトの名無しさん 投稿日: 02/07/10 00:56

   >>682
   スタートアップルーチンの存在は知らないんだな。

687 名前: デフォルトの名無しさん 投稿日: 02/07/10 00:58

   とりあえず、今後進みやすい道のりは、
   step1
   1st boot, 2nd bootともにオールアセンブリで、 BIOS を使って "Hello higepon"
   step1.5
   1st boot, 2nd bootともにオールアセンブリで、 VRAM直接アクセスで "Hello higepon"
   step 2
   1st boot, 2nd bootともにオールアセンブリで、2nd bootでプロテクトモードにして
   "Hello higepon"(もちろん VRAM アクセス)
   step 3
   1st boot はオールアセンブリ
   2nd boot はアセンブリ+C言語
   アセンブリ部分でプロテクトモードにして C の関数を呼び出し
   C の関数が "Hello higepon"
   step 2.9 ( step 3 がダメだった場合)
   C の関数を
   char *higepon_string()
   {
   const static char buf[]="Hello higepon";
   return buf;
   }
   とかしといてそれを アセンブリで表示。
   って感じでどう?
   step 1 で作った 1st boot はそのままずっと使い、 以後は 2nd boot 部分だけ
   書き換えれば良くなるでしょ?

688 名前: デフォルトの名無しさん 投稿日: 02/07/10 01:01

   >>686
   つまり、普通にコンパイルしたんではスタートアップルーチンがあるから
   上手く行かないって言いたい?

689 名前: デフォルトの名無しさん 投稿日: 02/07/10 17:55

   あれ?スタートアップルーチンってリンカがつけるもんじゃなかったっけ?

690 名前: デフォルトの名無しさん 投稿日: 02/07/10 17:58

   違う

691 名前: デフォルトの名無しさん 投稿日: 02/07/10 17:59

   正確に言うとエントリポイント(スタートアップルーチン)を含んだ
   オブジェクトファイルやライブラリを、大抵のリンカが暗黙の内にリンクしているだけで、
   それを回避するオプションが付いているはず

692 名前: ひげぽん 投稿日: 02/07/10 21:47

   >>683,684,687
   ありがとう。
   >step1.5
   >1st boot, 2nd bootともにオールアセンブリで、 VRAM直接アクセスで "Hello higepon"
   を書いてみました。

693 名前: ひげぽん 投稿日: 02/07/10 21:48

   boot.mac
   ;-------------------------------------------------------------------------------
   ; Name        : PRINTSTR
   ; Description : print string
   ; Param1      : string(db)
   ;-------------------------------------------------------------------------------
   %macro PRINTSTR 1
           push ax
           mov  si, %1
   %%hige:
           lodsb                   ; set al=current character at si
           cmp al, 0               ; if al == 0 then
           je  %%end               ; end this macro
           mov ah, 0Eh             ; print
           mov bh, 0               ; the charcter which is
           int 10h                 ; at al
           jmp %%hige              ; next character
   %%end:
           pop ax
   %endmacro

694 名前: ひげぽん 投稿日: 02/07/10 21:49

   ;-------------------------------------------------------------------------------
   ; Name        : higeboot.asm
   ; Description : boot from floppy disk and echo String
   ; Revision    : $Revision: 1.4 $
   ; Copyright (c) 2002 HigePon
   ; WITHOUT ANY WARRANTY
   ;-------------------------------------------------------------------------------
   %ifndef BOOT_MACRO
   %define BOOT_MACRO
       %include 'boot.mac'
   %endif
   %include 'firstboot.asm'
   %include 'secondboot.asm'

695 名前: ひげぽん 投稿日: 02/07/10 21:51

   ;-------------------------------------------------------------------------------
   ; Name        : firstboot.asm
   ; Description : boot from floppy disk and echo String
   ; Revision    : $Revision: 1.1 $
   ; Copyright (c) 2002 HigePon
   ; WITHOUT ANY WARRANTY
   ;-------------------------------------------------------------------------------
   [ORG 0]
   ; use segment 07C0h and offset is address of start
   ; cs = 07Coh
   jmp 07C0h:start
           osStart db  'Hige start...', 0dh, 0ah, 00h
           resetOk db  'disk reset ok', 0dh, 0ah, 00h
   start:
           cli                     ; disable interrupt
           mov ax, cs              ; code segment address is 07C0h
           mov ds, ax              ; when data access, use 07C0h segment
           mov ss, ax              ; when use stack, user 07C0h segment
           sti                     ; enable interrupt
           PRINTSTR osStart
   reset:
           mov ax, 0               ; reset
           mov dl, 0               ; drive 0
           int 13h                 ;
           jc  reset               ; if failed try again
           PRINTSTR resetOk

696 名前: ひげぽん 投稿日: 02/07/10 21:51

   read:
           mov ax, 1000h
           mov es, ax              ; es:bx is
           mov bx, 0               ; data buffer
           mov ah, 02h             ; read sectors into memory
           mov al, 5               ; number of sectors to read
           mov ch, 0               ; low eight bits of cylinder number
           mov cl, 2               ; sector number
           mov dh, 0               ; head number
           mov dl, 0               ; drive number
           int 13h                 ; read!
           jc  read
           jmp 1000h:0000          ; jump to the secondboot
   forever:
           jmp forever
           times 510-($-$$) db 0
           dw 0AA55h

697 名前: ひげぽん 投稿日: 02/07/10 21:52

   ;-------------------------------------------------------------------------------
   ; Name        : secondboot.asm
   ; Description : firstboot read this from disk and execute.
   ; Revision    : $Revision: 1.1 $
   ; Copyright (c) 2002 HigePon
   ; WITHOUT ANY WARRANTY
   ;-------------------------------------------------------------------------------
   second:
           mov  ax ,cs
           mov  ss, ax
           mov  ax, 0B800h
           mov  ds, ax
           mov  di, 0
           mov  al, '2'
           call print
           mov  al, 'c'
           call print
           mov  al, 'h'
           call print
           jmp hang
   print:
           mov [di], al
           add di, 2
           ret
   hang:
           jmp hang

698 名前: ひげぽん 投稿日: 02/07/10 21:53

   >663さんに感謝

699 名前: デフォルトの名無しさん 投稿日: 02/07/10 21:55

   ひげぽんさん、サイト作ろうよ

700 名前: デフォルトの名無しさん 投稿日: 02/07/10 22:00

   プロテクトモードに移行したあとの次の命令で、Bochsは3rd exeptionって言ってくる
   んですがなにが原因なんでしょう?誰か助けてー

701 名前: デフォルトの名無しさん 投稿日: 02/07/10 22:06

   /cpu/exception.cppによれば,
   ---
   BX_CPU_THIS_PTR errorno++;
   if (BX_CPU_THIS_PTR errorno >= 3) {
   BX_PANIC(("exception(): 3rd exception with no resolution"));
   BX_ERROR(("WARNING: Any simulation after this point is completely bogus."));
   #if BX_DEBUGGER
   bx_guard.special_unwind_stack = true;
   #endif
   return;
   }
   ---
   3回目の割り込みは発生しちゃだめって事らしいヨ

702 名前: デフォルトの名無しさん 投稿日: 02/07/10 22:15

   >>700
   それ俺もなった。で試行錯誤の結果やっと上手くいった。
   それ貼るからちょっと待ってて。

703 名前: デフォルトの名無しさん 投稿日: 02/07/10 22:38

   3rd exception を発生させずにプロテクトモードに移行できたバージョン 1/2
   基本的には、『はじめて(略』に従ったけど、一部変えてある
   2nd-boot は俺は 0x0100 セグメントに読みこまれるように
   してあるから リニアアドレスに変換する部分では 0x1000 を足している。
   もっと上手い方法がありそうだけど分からない。また、『はじめて(略』に
   書かれている offset は nasmでは使えなかった。
   最初はこのリニアアドレス変換をしていなくて 3rd exception しまくってた。
   ------------
   [ORG 0]
   bits16
   lgdt[gdtr]
   RealToProto
   cli
   moveax,cr0
   oreax,1
   movcr0,eax
   ;;
   jmpflush_q1
   gdtr:dw256 * 8 -1 ; ここは適当 ( eota に従った )
   ddgdt + 0x1000 ; リニアアドレスに変換
   gdt:
   dw0; limitL
   dw0; baseL
   db0; baseM
   db0; type
   db0; limitH
   db0; baseH
   ;; seg-08 (code-seg)
   dw0xffff; limitL
   dw0; baseL
   db0; baseM
   db0x9a; type code
   db0xcf; limitH
   db0; baseH
   ;; seg-10 (data-seg)
   dw0xffff; limitL
   dw0; baseL
   db0; baseM
   db0x92; type data
   db0xcf; limitH
   db0; baseH
   ;; seg-18 (stack-seg)
   dw0; limitL
   dw0; baseL
   db0; baseM
   db0x96; type data
   db0xc0; limitH
   db0; baseH
   ; -------------------- 大きすぎて一度に書き込めないので一度ここで切る。

704 名前: デフォルトの名無しさん 投稿日: 02/07/10 22:39

   >>703 の続き
   3rd exception を発生させずにプロテクトモードに移行できたバージョン 2/2
   ------------
   bits32
   flush_q1:
   db0eah
   dw set_cs_desc1 + 0x1000 ; リニアアドレスに変換
   dw08h ; 08h は code-segment
   set_cs_desc1:
   moveax,10h ; 10h は data-segment
   movds,ax
   moves,ax
   moveax,18h ; 18h は stack-segment
   movss,ax
   movesp,0x1000 ; ここが 0 だとなぜかエラー
   hello:movedi,0B8000h
   moval,'2'
   callprint
   moval,'c'
   callprint
   moval,'h'
   callprint
   hang:
   jmphang
   printmov[edi],al
   addedi,2
   ret
   times512-($-$$)db 0

705 名前: 703=704 投稿日: 02/07/10 22:40

   ごめんタブが消えた、、、

706 名前: デフォルトの名無しさん 投稿日: 02/07/10 22:59

   >>705
   どうもありがとうございました。これから格闘してみます。
   ここまではなんとかなりましたが、ここからが厳しいところですね。
   頑張りたいと思います

707 名前: ひげぽん 投稿日: 02/07/10 23:01

   >>703>>704
   ありがとう!!
   先を越されてしまってくやしいっす。
   勉強不足です。反省。

708 名前: デフォルトの名無しさん 投稿日: 02/07/11 00:46

   少なくとも3人は出来るやつがいる模様。(ひげぽんも含む)
   お前ら全員で2ch OS作ってください。

709 名前: デフォルトの名無しさん 投稿日: 02/07/11 00:56

   もちろん 2ch 運営に最適化されたOSということで (w

710 名前: デフォルトの名無しさん 投稿日: 02/07/11 01:08

   運営ですか!!!

711 名前: デフォルトの名無しさん 投稿日: 02/07/11 01:15

   作っても夜勤が採用しないワナ。

712 名前: デフォルトの名無しさん 投稿日: 02/07/11 01:18

   説得汁。

713 名前: デフォルトの名無しさん 投稿日: 02/07/11 01:21

   作れないうちから心配するなアフ

714 名前: デフォルトの名無しさん 投稿日: 02/07/11 01:24

   > 704
   > movesp,0x1000 ; ここが 0 だとなぜかエラー
   0だとスタックに積んだとたんに逝っちゃうよ。

715 名前: デフォルトの名無しさん 投稿日: 02/07/11 01:33

   無事動きましたー。csが1000ならアドレスは10000だということを忘れてました。
   こんにちはプロテクトモード

716 名前: デフォルトの名無しさん 投稿日: 02/07/11 02:12

   割り込みについて調べていたらこんなページをみつけました。
   ttp://poli.cs.vsb.cz/misc/rbint/ix/index.html

717 名前: デフォルトの名無しさん 投稿日: 02/07/11 03:32

   >>716
   >>507-508
   確か、ベクターにwinhelp版があったはず。

718 名前: デフォルトの名無しさん 投稿日: 02/07/11 12:48

   とりあえず、2ndローダでプロテクトモードに切り替えるところまで成功。
   PE形式のカーネルのロードは面倒そうだ…。

719 名前: デフォルトの名無しさん 投稿日: 02/07/11 13:45

   皆さんブートローダの次のステップをどのようにする予定ですか?

720 名前: デフォルトの名無しさん 投稿日: 02/07/11 17:50

   メモリマネージャとタスクマネージャ

721 名前: デフォルトの名無しさん 投稿日: 02/07/11 18:35

   文字出力、ファイルIO、プロセス終了のファンクションリクエストくらいあれば、とりあえずいろいろ動かせる。

722 名前: デフォルトの名無しさん 投稿日: 02/07/11 18:44

   >>720
   いきなりは無理では。
   まず、
   1. とりあえず何もしなくていいから、OSを終了するシステムコール(Halt)
   2. 1文字ずつコンソールに出力するシステムコール(Input)
   3. キーボードから1文字ずつ入力を受け取るシステムコール(Output、後回しで
   いいかも)
   4. ディスクのセクタを直接指定して読み書きするシステムコール(Read, Write)
   5. 特権モードのままでいいし、特定の物理メモリ上でいいし、一つしか実行で
   きず、呼び出したタスクに戻ってこなくていいから、ディスクから読み込んだ
   バイナリを展開し、実行するシステムコール(Exec)
   6. とりあえず何もしなくていいから、タスクを終了するシステムコール(Exit)
   を実装し、
   ブートローダ
   ↓
   カーネル
   ↓
   文字を表示し、入力を受け取り、特定のセクタの内容を読み込み表示し、特定の
   セクタに適当なデータを書込み、終了する、Cで書かれたプログラム
   という感じで動作するものを作ってみるのはどうだろう。
   そのあとで、ユーザモードで動作し、複数展開可能で、呼び出したタスクに戻って
   くるExecを実装し、ユーザモードで動く簡単なコマンドラインシェルを実装する、
   というのはどう?

723 名前: 722 投稿日: 02/07/11 18:56

   >>721
   あ、かぶった。
   >>722をちょい訂正。
   > 2. 1文字ずつコンソールに出力するシステムコール(Input)
   > 3. キーボードから1文字ずつ入力を受け取るシステムコール(Output)
   名前が逆じゃん、出力がOutputで入力がInputね。

724 名前: デフォルトの名無しさん 投稿日: 02/07/11 19:12

   ネイティブな開発はよくわからんが
   システムコールの設計は慎重にやってくれよp

725 名前: デフォルトの名無しさん 投稿日: 02/07/11 19:39

   >>724
   なんで?

726 名前: 722 投稿日: 02/07/11 19:48

   >>724
   別に>>722のシステムコールを最後までそのまま使えって意味じゃないよ。
   あくまで暫定的なもの。ファイルシステムがなければ、openやread、write、
   close等のファイルに関するシステムコールなんて作れないでしょ?ファイル
   システムやメモリマネージャが出来たら、そのときシステムコールを作り
   直せばいい。

727 名前: デフォルトの名無しさん 投稿日: 02/07/11 19:57

   実務開発で言うなら、いわば技術検証(と言う名のお勉強)でしょ?
   まだ設計に入る段階じゃないと思われ。
   勿論、先に設計が来る方が良いけど、未経験なんだから良いんじゃないの?

728 名前: 724 投稿日: 02/07/11 21:16

   だよねーテヘヘぼくちゃん先走っちゃったアハハ

729 名前: ひげぽん 投稿日: 02/07/11 22:58

   そのうちlibcを採用しようかと・・・

730 名前: 718 投稿日: 02/07/12 01:18

   libcなら組込向けのnewlibが扱いやすいかも。
   http://sources.redhat.com/newlib/

731 名前: 718 投稿日: 02/07/12 01:27

   OSに依存しないドライバインターフェース…らしい。
   Uniform Driver Interface
   http://www.projectudi.org/

732 名前: 718 投稿日: 02/07/12 03:09

   ELF関連
   FreeBSDのelf(5)。
   http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=elf&dir=jpman-4.6.0%2Fman§=0
   UNIX USERの掲載記事一覧。
   ELF仕様書へのリンクや"Linkers and Loaders"のオンライン公開本等がある。
   http://www.skyfree.org/jpn/unixuser/

733 名前: デフォルトの名無しさん 投稿日: 02/07/12 03:41

   いま、 eota の boot/2nd/console.c とか boot/2nd/lib.c あたりを
   読んでる。lib.c の set_cursor_pos が、こんな感じになってる。
   -------------------------
   void
   set_cursor_pos (int x, int y)
   {
   int addr;
   lock ();
   addr = CURSOR_POS (x, y);
   /* addr *= 2; */
   outb (GDC_ADDR, 0x0e);
   outb (GDC_DATA, (addr >> 8) & 0xff);
   outb (GDC_ADDR, 0x0f);
   outb (GDC_DATA, addr & 0xff);
   unlock ();
   }
   -----------------------
   lock(), unlock は各々 cli,sti を実行するだけ。
   で質問だけど、
   (1) こんな風に IO ポートのどこに何を書けばどうなるのか、
   ってのはどっかにまとめて載ってない?
   (2) なんでここで割り込みを禁止する必要があるの?
   まあ漠然とは、
   outb(GDC_ADDR,xxxx) と outb(GDC_DATA,xxxx) の間に
   余計なIO ポートアクセスがあったらまずい気がするなぁと感じるけど
   それであってる?

734 名前: 718 投稿日: 02/07/12 06:58

   mingwでld --helpしたらelf32-i386とか出てたからELFバイナリ吐けると思ったらダメらしい。
   素直にPEにしておくか。
   >>733
   (1)
   http://www.oadg.or.jp/tosho/index.htm#techref
   (2)
   vsync割り込みハンドラでグラフィックコントローラを叩く可能性を考えてるのかと。

735 名前: デフォルトの名無しさん 投稿日: 02/07/12 09:03

   >>722
   かなり賛成。ちょうど良い目標ダネ。
   ただちょっと分からなかったんだけど >>722 の 5 はマルチタスクを
   想定しているの? オレはシングルタスクで call とか jmp 使えば
   いいと思うんだけど。
   あとバイナリを展開ってどの程度のこと考えてる?
   オレは実行イメージそのままで良いと思ってる。(固定アドレスに置くんだから)
   あと、 >>722 では触れられてないけど、VRAMとか IOポートにアクセスするのは
   step 1
   ライブラリっぽいものを書いてそれをプログラムにスタティックリンクさせる。
   step 2
   システムコールとして実装
   という段階を踏んだ方が良さそう。
   で確認なんだけど step 2では、ソフトウェア割り込み使えばいいんだっけ?
   そして割り込みを発生させる関数をスタティックリンクすればOK?

736 名前: デフォルトの名無しさん 投稿日: 02/07/12 10:45

   >>735
   システムコールの呼び出しにはコールゲートかトラップゲートを使うかと。

737 名前: riarutyuubou 投稿日: 02/07/12 18:12

   きょう始めてよむ486が届いた
   7月11日に発送してもらったんだけど、はじめて読む486の12刷発行が
   7月11日だった。(わら
   はじめて読む8086の方がまだだ、本来こっちの方が先に届いてほしいんだが。

738 名前: デフォルトの名無しさん 投稿日: 02/07/12 19:25

   そんなに売れてるのか… > はじめて読む
   折れもリア厨のころに買って読んで、サンプル必死に打ってた気がする。
   8086の方は英語がOKなら、上でガイシュツのInterrupt Listとかで十分間に合う。はず。

739 名前: manko_chinko==737 ◆c2rpKRNM 投稿日: 02/07/12 19:43

   >>738
   どうも
   僕は英語駄目なんで(英検三級がやっととれたレベル)、日本国内で日本語を使用した
   86系アセンブラの解説ページで勉強しようと思うのですが、、、

740 名前: manko_chinko==737 ◆c2rpKRNM 投稿日: 02/07/12 19:51

   始めて読む8086の注文はキャンセルしました

741 名前: FreeDOS教徒 投稿日: 02/07/12 20:23

   超亀レスですごめんなさい。
   >>653
   NASMだけです。C言語を使うほどでもありませんし。
   >>654
   あとsuppl.zipが要るかも。ソースの\supplに説明があるはず。

742 名前: 653 投稿日: 02/07/12 20:31

   オールアセンブラ Σヽ(´i i`)ノ ぬりがとう

743 名前: デフォルトの名無しさん 投稿日: 02/07/12 23:13

   C言語から呼び出すときのアセンブラのコードで
   破壊していいレジスタはどれ?
   eax,edx は戻り値に使われるから分かるけど、他のは?
   ぐぐったら windows での話は出てきたけど、これってコンパイラ依存の
   話だからgcc なら別だよな?

744 名前: デフォルトの名無しさん 投稿日: 02/07/12 23:21

   そんなもん、gccで関数をasm出力すれば
   わかるだろうに。

745 名前: デフォルトの名無しさん 投稿日: 02/07/12 23:25

   edi

746 名前: 654 投稿日: 02/07/13 22:45

   >>741
   Thank you.
   これから調べてみます

747 名前: デフォルトの名無しさん 投稿日: 02/07/13 23:12

   プロテクトモードでjmpするとエラーになってしまう...なんでだー

748 名前: FreeDOS教徒 投稿日: 02/07/13 23:27

   >>654
   ヴぁー、申し訳ない。あれcommand.comの作り方だった‥‥
   カーネルはあそこの説明のとおりでよかったです。
   しかもスレ沈めまくってさらに申し訳ない(汗

749 名前: ひげぽん 投稿日: 02/07/13 23:36

   おくれてしまったひでぽんです。
   どうしても3rd exception with no resolutionが出てしまいます。
   どなたかアドバイスをいただけたら幸いです。
   以下エラーになるソースを貼らせていただきます。

750 名前: ひげぽん 投稿日: 02/07/13 23:37

   RealToProtect:
           lgdt [gdtr]             ; load gdtr
           cli                     ; disable interrupt
           mov  eax, cr0           ; real
           or   eax, 1             ; to
           mov  cr0, eax           ; protect
           jmp  flush_q1
   flush_q1:
           db 0eah
           dw set_cs_desc1 + 1000h
           dw 08h
           jmp  hang
   set_cs_desc1:
           mov  ax, 10h
           mov  ds, ax
           mov  es, ax
           mov  ax, 18h
           mov  ss, ax
           mov  sp, 0x1000

751 名前: ひげぽん 投稿日: 02/07/13 23:39

   ;-------------------------------------------------------------------------------
   ; GDT definition
   ;-------------------------------------------------------------------------------
   gdtr:
           dw gdt_end - gdt0 - 1   ; gdt limit
           dd gdt0 + 1000h * 16    ; start adderess
   gdt0:                           ; segment 00
           dw 0                    ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0                    ; segment type
           db 0                    ; segment limitH
           db 0                    ; segment baseH
   gdt08:                          ; segment 08(code segment)
           dw 0xffff               ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0x9a                 ; Type Code
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH

752 名前: ひげぽん 投稿日: 02/07/13 23:39

   gdt10:                          ; segment 10(data segment)
           dw 0xffff               ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0x92                 ; Type Data
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH
   gdt18:                          ; segment 18(stack segment)
           dw 0xffff               ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0x96                 ; Type Stack
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH
   gdt_end:                        ; end of gdt
   hang:
           jmp hang
   print:
           mov [edi], al
           add edi  , 2
           ret

753 名前: デフォルトの名無しさん 投稿日: 02/07/13 23:49

   >>749
   gdt08のセグメントベースは10000hにしてみてはどうでしょうか?
   違うかな

754 名前: デフォルトの名無しさん 投稿日: 02/07/13 23:55

   >>747
   は既に解決してますか?まだなら俺にちょっと心当たりがあります。
   もしかして、cs を 08h とかそう言うGDTRで設定したセグメントにする前の段階の話じゃないですか?

755 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:02

   >>750 と >>751 の間に抜けてるものはない? コピペミスじゃない?
   mov sp,0x1000 のあとに jmp が必要でしょ。

756 名前: ひげぽん 投稿日: 02/07/14 00:03

   >>753
   ありがとうございます。
   gdt08:                          ; segment 08(code segment)
           dw 0xffff               ; segment limitL
           dw 0x00000001           ; segment baseL
           db 0                    ; segment baseM
           db 0x9a                 ; Type Code
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH
           
   としてみましたが、だめでした。
   Bochsがエラーを出すときセグメントは↓となっています。
   00000195256i[CPU  ] |  DS:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
   00000195256i[CPU  ] |  ES:1000( 0000| 0|  0) 00010000 0000ffff 0 0
   00000195256i[CPU  ] |  FS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
   00000195256i[CPU  ] |  GS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
   00000195256i[CPU  ] |  SS:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
   00000195256i[CPU  ] |  CS:1000( 0000| 0|  0) 00010000 0000ffff 0 0

757 名前: ひげぽん 投稿日: 02/07/14 00:06

   >>755
   おっしゃるとおりコピペミスです。
   jmp hang
   があります。

758 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:08

   ひげぽんまだ寝るなよ。あとで、アドバイスすっから。

759 名前: 747&753 投稿日: 02/07/14 00:10

   >>754
   それが設定した後なんです。
   それと753に書いたの間違えました。
   dw set_cs_desc1+1000h
   は+10000hではないでしょうか?

760 名前: ひげぽん 投稿日: 02/07/14 00:11

   >>758
   ありがとうございます。
   お待ちしております。
   よろしくです。

761 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:17

   >>759
   そうですか、じゃあ関係ないかもです。役に立てんでごめんです。
   あと、 10000h は dw に入らないんじゃない?
   ひげぽんは >>750 からのコードどこに置いた? 1000h?
   あと、エラーのときの IP も書いて欲しい。それがそのコードどこにあたるのかとかも
   それから
   bochsout.txt の
   00010420000i[CPU ] protected mode
   00010420000i[CPU ] CS.d_b = 32 bit
   00010420000i[CPU ] SS.d_b = 32 bit
   ↑ここの部分はどうなってた?

762 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:23

   まとめると、多分こう言うことだ。
   エラーのとき CSが1000hになっているってことは、
   コードはリニアアドレスで 10000h に置いたってことだ。
   だから、
   dw set_cs_desc1 + 1000h
   ここは、
   dw set_cs_desc1 + 10000h
   にしなければ行けない。(リニアアドレスを書かなければ行けないから)
   でもそれだと dw に入らない。
   ↓
   結論もっと低いアドレスに置くべき。

763 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:30

   おいっ!寝たのかよ!!レスしろよ。
   あと32ビットモードになったら bits 32 にしないとだめだよ。

764 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:34

   ちっ、寝ちまったか。
   ------------
   bits 16
   L1: jmp L1
   bits 32
   jmp L1
   ------------
   じゃ、起きたら、このコードをアセンブルしてそれをdumpで見て
   それが何を意味するのかよーく考えろよ。
   じゃな。

765 名前: ひげぽん 投稿日: 02/07/14 00:38

   >>761
   >ひげぽんは >>750 からのコードどこに置いた? 1000h?
   1000hです。
   >696のreadのところで読み込んでます。
   >あと、エラーのときの IP も書いて欲しい。それがそのコードどこにあたるのかとかも
   00000195256i[CPU  ] | EIP=0000001a (00000015)
   となっています。
   bochsout.txtは↓となってしました。
   00000195256i[SYS  ] Last time is 1026574623
   00000195256i[CPU  ] protected mode
   00000195256i[CPU  ] CS.d_b = 16 bit
   00000195256i[CPU  ] SS.d_b = 16 bit

766 名前: ひげぽん 投稿日: 02/07/14 00:42

   >>762
   dw set_cs_desc1 + 10000h
   としてみて、アセンブルすると
   通ってしまうのですが、Okなのでしょうか。

767 名前: ひげぽん 投稿日: 02/07/14 00:43

   >763 764
   入れ違いです。すいません。

768 名前: 747 投稿日: 02/07/14 00:43

   調べるてみると
   label:
   jmp label
   はだめで
   jmp label
   label:
   はエラーなしでした。
   >>765
   もし1000hなら
   dd gdt0+1000h*16
   の*16hがいらないのではないでしょうか?

769 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:44

   ひげぽん(・∀・)オキテタ!!
   >>765 それなら、>>762 で決まり。
   >>766 OKじゃねえよ。できたバイナリ見ろよ。

770 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:46

   >>768
   CPUが32bit モードになっているのにbits 32を書いてないので、
   コードが32bit用に成っていないのでは? >>764 は試してみた?

771 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:48

   >>765
   CS が 1000h になっているのに実行イメージが1000hに置かれてるって
   なんか勘違いしてませんか?

772 名前: ひげぽん 投稿日: 02/07/14 00:55

   >>770
   [bits 32]
   flush_q1:
   としてみました。
   >>771
   read:
           mov ax, 1000h
           mov es, ax              ; es:bx is
           mov bx, 0               ; data buffer
           mov ah, 02h             ; read sectors into memory
           mov al, 5               ; number of sectors to read
           mov ch, 0               ; low eight bits of cylinder number
           mov cl, 2               ; sector number
           mov dh, 0               ; head number
           mov dl, 0               ; drive number
           int 13h                 ; read!
           jc  read
           jmp 1000h:0000          ; jump to the secondboot
   とすると、1000hに読み込まれた実行イメージにジャンプするという
   認識だったのですが、もしかして出発点から間違ってます?

773 名前: ひげぽん 投稿日: 02/07/14 00:58

   >>769さん。
   上記>>772
   の1000hの部分を0100hにしてかつ、
   [bits 32]
   flush_q1:
           db 0eah
           dw set_cs_desc1 + 100h * 16
           dw 08h
           jmp  hang
   および
   gdtr:
           dw gdt_end - gdt0 - 1   ; gdt limit
           dd gdt0 + 100h    ; start adderess
   としてみましたがだめでした。

774 名前: デフォルトの名無しさん 投稿日: 02/07/14 00:59

   >>772
   それなら、リニアアドレスでは10000hになるのは分かる?
   そして、flush_q1 の後のジャンプの場所指定で書かなければいけないのはリニアアドレス。
   (なぜならもうプロテクトモードなんだし、08 のコードセグメントのベースが0に成っているから)

775 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:01

   >>773
   違う。 gdtr の所の start addressはリニアアドレス。
   あと、「上手くいった/だめだった」の二元論ではなくどこでエラーが
   起きたのかが重要。ダメなときはどこで止まったのか調べないと。

776 名前: ひげぽん 投稿日: 02/07/14 01:02

   >>774
   なるほど良く分かりました。
   ということは、もともとのCS * 16するってことですよね。
   でもうまくいかないです。
   だいぶ前進したとは思うのですが、

777 名前: ひげぽん 投稿日: 02/07/14 01:07

   >>776さんのおっしゃる通りなのでちょっとまとめます。
   現在の状況は
   0100hに読み込まれたイメージの中でプロテクトモードに移行しようとしているが
   以下のようなエラーが出てしまう。
   00000195256i[CPU  ] protected mode
   00000195256i[CPU  ] CS.d_b = 16 bit
   00000195256i[CPU  ] SS.d_b = 16 bit
   00000195256i[CPU  ] | EAX=60000011  EBX=00000000  ECX=00010002  EDX=00000000
   00000195256i[CPU  ] | ESP=0000fffe  EBP=00000000  ESI=00000025  EDI=0000ffe4
   00000195256i[CPU  ] | IOPL=0 NV UP DI PL NZ NA PE NC
   00000195256i[CPU  ] | SEG selector     base    limit G D
   00000195256i[CPU  ] | SEG sltr(index|ti|rpl)     base    limit G D
   00000195256i[CPU  ] |  DS:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
   00000195256i[CPU  ] |  ES:0100( 0000| 0|  0) 00001000 0000ffff 0 0
   00000195256i[CPU  ] |  FS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
   00000195256i[CPU  ] |  GS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
   00000195256i[CPU  ] |  SS:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
   00000195256i[CPU  ] |  CS:0100( 0000| 0|  0) 00001000 0000ffff 0 0
   00000195256i[CPU  ] | EIP=0000003b (0000003b)

778 名前: ひげぽん 投稿日: 02/07/14 01:09

   移行時に実行していること
   gdtr:
           dw gdt_end - gdt0 - 1   ; gdt limit
           dd gdt0 + 100h * 16     ; start adderess
   ----
   [bits 32]
   flush_q1:
           db 0eah
           dw set_cs_desc1 + 100h * 16
           dw 08h
           jmp  hang
   うーんどこが悪いかが分からない。
   もう少しねばってみます。

779 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:12

   flush_q1 では実はまだ32bit モードじゃないらしいんだよ。
   おれも詳しくは分からないけどプロテクトモードだけど16bit モードってのがあるらしい。
   (bochs のソースを見てそう思った)
   本当に32bit モードに成るのは CS が 08 に成ってから。
   だから、それだとbits32を置く場所がちょっと違う。

780 名前: ひげぽん 投稿日: 02/07/14 01:15

   >>779
   ありがとうございます。
   bits 32の場所を変えてみましたが、だめでした。
   >>704(プロテクトモード移行成功)も同じ場所だったので
   今回のエラーの直接の原因ではないかもしれません。

781 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:19

   >>780 了解。
   じゃあ、エラーが起きてる IP=0x003b のところはソースでいうどこにあたる?

782 名前: ひげぽん 投稿日: 02/07/14 01:25

   >>781さん
   IPってオフセットアドレスですよね?
   ソースのどの部分が該当するかを調べるには
   どうしたらよいのでしょうか
   質問ばかりで申し訳ないです。

783 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:26

   >>782
   デバッガある?

784 名前: ひげぽん 投稿日: 02/07/14 01:35

   >>783
   DJGPPにgdb.exeがついてきていましたが
   これでよいですか?
   使ったことがないのですが、これで出来るなら
   明日にでも勉強いたします。

785 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:38

   gdbで、いいかどうかはちょっと分からない。
   ベクターとかにありそうなMS-DOS用のcomファイルを調べられるの使うのが良い。
   あとは、nasm の -l オプションかな。

786 名前: ひげぽん 投稿日: 02/07/14 01:41

   遅くまでありがとうございます。
   実行しながらデバッグするのでしょうか?
   それだとBochsの機能でなにかあるのかなあ。

787 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:45

   もしかしたら bochs にそういう機能があるかもしれないけど俺は分からん。
   つうか、今はどこでエラーが起きたのか分かれば良いんだから、
   実行しながらデバグなんてしなくて良いよ。
   -l は試した? 結局 3b ってどこなのさっ!!

788 名前: 747 投稿日: 02/07/14 01:47

   なにも変更してないのに突然エラーなくなりました。わけわからん。
   相談に乗っていただいた方どうもありがとうございました。

789 名前: デフォルトの名無しさん 投稿日: 02/07/14 01:49

   >>747
   おめでと。役に立てなくてゴメン。
   またなんかあったら聞いてね。今度こそ役立つアドバイスするカラ

790 名前: 747 投稿日: 02/07/14 02:50

   またエラーになった...もう寝よう

791 名前: ひげぽん 投稿日: 02/07/14 11:56

   おはようございます。
   nasm -l でリストを出力しました。
       62 00000031 AC                  <2>         lodsb
       63 00000032 3C00                <2>         cmp al, 0    
       64 00000034 7409                <2>         je  %%end    
       65 00000036 B40E                <2>         mov ah, 0Eh    
       66 00000038 B700                <2>         mov bh, 0    
       67 0000003A CD10                <2>         int 10h    
       68 0000003C E9F2FF              <2>         jmp %%hige    
       69                              <2> %%end:    
       70 0000003F 58                  <2>         pop ax    
       71                              <1>     
       72                              <1> reset:    
   3bはどこにあるのでしょうか。

792 名前: ひげぽん 投稿日: 02/07/14 12:46

   いろいろ調べてみると
   プロテクトモード移行直後の
   jmp flush_q1以降で死んでいるようです。
   jmp hangとすると3rd exceptionは発生しませんでした。

793 名前: デフォルトの名無しさん 投稿日: 02/07/14 13:13

   今でも死ぬときのIPは 3bなの?

794 名前: ひげぽん 投稿日: 02/07/14 13:16

   ええ。
   3bです。こんな感じです。
   00000195256i[CPU ] | EIP=0000003b (0000003b)

795 名前: デフォルトの名無しさん 投稿日: 02/07/14 13:18

   >>792
   現在のコードはどうなってるの?

796 名前: ひげぽん 投稿日: 02/07/14 13:19

   [bits 16]
   RealToProtect:
           lgdt [gdtr]             ; load gdtr
           cli                     ; disable interrupt
           mov  eax, cr0           ; real
           or   eax, 1             ; to
           mov  cr0, eax           ; protect
           jmp  flush_q1
   ;-------------------------------------------------------------------------------
   ; GDT definition
   ;-------------------------------------------------------------------------------
   gdtr:
           dw gdt_end - gdt0 - 1   ; gdt limit
           dd gdt0 + 100h * 16     ; start adderess
   gdt0:                           ; segment 00
           dw 0                    ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0                    ; segment type
           db 0                    ; segment limitH
           db 0                    ; segment baseH

797 名前: ひげぽん 投稿日: 02/07/14 13:20

   gdt08:                          ; segment 08(code segment)
           dw 0xffff               ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0x9a                 ; Type Code
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH
   gdt10:                          ; segment 10(data segment)
           dw 0xffff               ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0x92                 ; Type Data
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH

798 名前: ひげぽん 投稿日: 02/07/14 13:20

   gdt18:                          ; segment 18(stack segment)
           dw 0                    ; segment limitL
           dw 0                    ; segment baseL
           db 0                    ; segment baseM
           db 0x96                 ; Type Stack
           db 0xcf                 ; segment limitH
           db 0                    ; segment baseH
   gdt_end:                        ; end of gdt

799 名前: ひげぽん 投稿日: 02/07/14 13:20

   [bits 32]
   flush_q1:
           db 0eah
           dw set_cs_desc1 + 100h * 16
           dw 08h
   set_cs_desc1:
           mov  ax, 10h
           mov  ds, ax
           mov  es, ax
           mov  ax, 18h
           mov  ss, ax
           mov  sp, 0x100
           jmp  hang
   hang:
           jmp hang
   ;  ;  print:
   ;  ;          mov [edi], al
   ;  ;          add edi  , 2
   ;  ;          ret

800 名前: ひげぽん 投稿日: 02/07/14 13:21

   >>795
   板を汚して申し訳ありません。
   現状は上記の通りです。

801 名前: デフォルトの名無しさん 投稿日: 02/07/14 13:32

   もしかして>>791は1stブートのやつじゃ、、

802 名前: ひげぽん 投稿日: 02/07/14 13:35

   >>801さん。
   ええその通りです。
   BIOS経由で文字列出力する部分です。
   nasmでアセンブルするときはひとつにまとめるので
   リストもfirst boot, second bootもあわせたものになっています。

803 名前: デフォルトの名無しさん 投稿日: 02/07/14 13:37

   >>802
   Σ(゚д゚lll)ガーン もっと考えれ。
   second boot の先頭を 0 として 3b がどこかを調べなきゃ意味ないだろ。

804 名前: 795 投稿日: 02/07/14 13:37

   >>800
   うーん、リスティングファイルの方がよかったかも。
   で。
   >>695とか見ると、リニアアドレス0x0010000にそのコードをロードしてるみたいだけど。
   > gdtr:
   > dw gdt_end - gdt0 - 1 ; gdt limit
   > dd gdt0 + 100h * 16 ; start adderess
   dd 0010000h+gdt0では?
   > flush_q1:
   > db 0eah
   > dw set_cs_desc1 + 100h * 16
   > dw 08h
   こっちも。
   あと、どっかに垢取ってそっちにコード全体を上げた方がいいかも。

805 名前: ひげぽん 投稿日: 02/07/14 13:46

   >>803
   >>804
   もっと考えます。
   いま、とりあえず垢をとっています。

806 名前: デフォルトの名無しさん 投稿日: 02/07/14 13:47

   もしかしてひげぽんは
   1st-boot と 2nd-boot くっつけてアセンブルしない?
   別々にアセンブルしてからくっつけた方が良いかも

807 名前: 795 投稿日: 02/07/14 13:54

   あと、ベースアドレスが00010000h、リミットが0000FFFFhで16ビットのセレクタを用意して、
   そっちで作業した方が楽だと思われ。
   ベースアドレスが00000000hのセレクタに切り替えると、オフセット計算が面倒なことになる。

808 名前: デフォルトの名無しさん 投稿日: 02/07/14 14:04

   >>806の詳しい解説
   1st-boot は、 2nd-boot の先頭が 1000hにくるように
   ディスクをロードする。
   だから、2nd-boot の先頭から数えた offset に 1000h を加算すれば
   それがちょうど リニアアドレスになる。
   しかし、ひげぽんは1st-bootと2nd-boot をくっつけて
   アセンブルしているので、offsetがずれてしまう。
   nasm -l の出力で
   dd gdt0 + 100h * 16 ; start adderess
   dw set_cs_desc1 + 100h * 16
   この2行がどうアセブルされているか見てみ。
   前者が [1B100000] 後者が[4010]なら正しいぞ。
   でもそうなっていないはず。
   で、今度はばらばらにアセンブルしてみな。
   すると上のようになるはずだ。それを確認したら
   copy とか dd とかつかって二つをくっつける。
   これで上手く行くはず。

809 名前: 795 投稿日: 02/07/14 14:12

   >>808
   >>696でes:bxが1000:0000だからリニアアドレスは00010000hだって。

810 名前: デフォルトの名無しさん 投稿日: 02/07/14 14:13

   >>809
   >>777見れ

811 名前: ひげぽん 投稿日: 02/07/14 14:14

   >>806 >>808
   まとめてアセンブルしてました。
   (1)まとめてアセンブルした場合
       133 00000217 [1B120000] <1> dd gdt0 + 100h * 16 ; start adderess
       172 0000023C [4012] <1> dw set_cs_desc1 + 100h * 16
   (2)secondboot.asm単体アセンブルの場合
   22 00000017 [1B100000] dd gdt0 + 100h * 16 ; start adderess
   61 0000003C [4010] dw set_cs_desc1 + 100h * 16
   >>808さんのおっしゃる通りになってました。
   今から別々にアセンブルを試してみます。

812 名前: 809 投稿日: 02/07/14 14:35

   >>810
    ∧||∧
   (  ⌒ ヽ
    ∪  ノ >>773で変更してたのね…
     ∪∪

813 名前: デフォルトの名無しさん 投稿日: 02/07/14 14:37

   ドマイ。オフセットをWORDに入れなきゃだから。
   >>807みたいな手もあるけど、、、、。

814 名前: ひげぽん 投稿日: 02/07/14 14:39

   ひげぽんです。
   皆さんありがとうございます。
   別々アセンブルでも同じIPでエラーが起きてしまいました。
   今から外出しなければいけなくなってしまったので
   戻り次第アカウントを取得してソースを簡単に公開できるようにします。
   ところで
   copy firstboot.bin + secondboot.bin higeboot.bin
   をddコマンドでやるにはどうやったら良いんでしょうか?
   if=で複数ファイルを指定してみたらうまくいかなかった。

815 名前: デフォルトの名無しさん 投稿日: 02/07/14 14:40

   >>814
   そっか。自信あったんだけどダメだったか。
   ソース公開を待つことにするよ。

816 名前: デフォルトの名無しさん 投稿日: 02/07/14 14:53

   あれ?やっぱできるじゃん。
   俺、ひげぽんの >>796 - 799 と自作 1st-boot で、上手く行ったよ。
   もしかして 1st-boot で、 ds を設定していないとか言うオチですか?

817 名前: ひげぽん 投稿日: 02/07/14 17:22

   >>815
   >>816さん
   ありがとうございます。
   現状の動かないソースを
   http://oshigepon.tripod.co.jp/
   におきましたので、ご参照いただければ幸いです。
   3bはこちら↓でした。
   59 flush_q1:
   60 0000003B EA db 0eah
   61 0000003C [4010] dw set_cs_desc1 + 100h * 16

818 名前: ひげぽん 投稿日: 02/07/14 18:22

   やっと、ソースをほぼ自動的にhtmlとしてアップする仕組みが出来た。
   今日は、OS製作以外でちょっとだけプログラムした・・・
   最近は、ftpの出来ないフリースペースが多いですね。
   アップロードをスクリプトに出来なくて面倒なので
   ftpのokなtripodにしました。

819 名前: デフォルトの名無しさん 投稿日: 02/07/14 18:23

   >>818
   もちろんアセンブラで書いたんですよね?

820 名前: ひげぽん 投稿日: 02/07/14 18:30

   >>818
   私の腕前では無理です(笑)

821 名前: デフォルトの名無しさん 投稿日: 02/07/14 18:46

   >>818
   > 10 00000000 0F0116[1500] lgdt [gdtr] ; load gdtr
   この時のDSレジスタの値は?
   firstbootで設定された07C0hを引きずってるように見えるが。

822 名前: ひげぽん 投稿日: 02/07/14 18:57

   >>821
   07C0hを引きずっています。
   load gdtrした後に
   flush→CSセットとなるのかな。
   00000195256i[CPU  ] |  DS:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
   00000195256i[CPU  ] |  ES:0100( 0000| 0|  0) 00001000 0000ffff 0 0
   00000195256i[CPU  ] |  FS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
   00000195256i[CPU  ] |  GS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
   00000195256i[CPU  ] |  SS:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
   00000195256i[CPU  ] |  CS:0100( 0000| 0|  0) 00001000 0000ffff 0 0
   00000195256i[CPU  ] | EIP=0000003b (0000003b)

823 名前: 821 投稿日: 02/07/14 19:04

   じゃ、それが原因。
   GDTRに不正な値をロード。
   far jump時にCSレジスタに不正な位置を指したセレクタをロードしようとする。
   一般保護例外発生。
   例外ハンドラに処理を渡そうとする。
   IDTRがセットされてないので失敗。
   ダブルフォールトの例外ハンドラに処理を渡そうとする。
   当然失敗。
   トリプルフォールトであぼーん。
   こんなシナリオかと。
   lgdt cs:[gdtr]としてCSレジスタ相対にするか、DSレジスタをCSにそろえるか。

824 名前: ひげぽん 投稿日: 02/07/14 19:06

   >>814
   自己レスです。
   >copy firstboot.bin + secondboot.bin higeboot.bin
   >をddコマンドでやるにはどうやったら良いんでしょうか?
   >if=で複数ファイルを指定してみたらうまくいかなかった。
   catでうまくいきました。
   catってバイナリファイルも連結できるんですね・・・

825 名前: ひげぽん 投稿日: 02/07/14 19:18

   >>821>>823さん
   >GDTRに不正な値をロード。
   gdtrにロードするアドレスが不正なのか
   それともディスクリプタテーブルにセットされている
   セグメント設計が不正なのでしょうか。
   >lgdt cs:[gdtr]としてCSレジスタ相対にするか、DSレジスタをCSにそろえるか
   ldgt cs:[gdtr]はアセンブル時にエラーになってしまいました。

826 名前: 821 投稿日: 02/07/14 19:30

   >>825
   GDTRにロードされる値。
   リスティングファイルを見ながらどんなアドレスが生成されるか考えてみよう。
   gdtrの指すアドレスは0100:0015。
   実効アドレスは00000115h。
   lgdt [gdtr]でロードされるのはds:gdtr。
   dsレジスタは07C0hだから07C0:0015。
   実効アドレスは00007C15h。
   > ldgt cs:[gdtr]はアセンブル時にエラーになってしまいました。
   スマソ、cs:[gdtr]はmasmの書き方だった。
   nasmでは[cs:gdtr]。

827 名前: 821 投稿日: 02/07/14 19:31

   > gdtrの指すアドレスは0100:0015。
   > 実効アドレスは00000115h。
   嘘書くなよ、俺。
   00001015hが正解。

828 名前: 821 投稿日: 02/07/14 19:32

   つーか、実効アドレスの意味間違ってるような。
   実効アドレス→リニアアドレスに訂正。

829 名前: ひげぽん 投稿日: 02/07/14 19:37

   http://ime.nu/oshigepon.tripod.co.jp/
   [報告]
   結論から言うとnasmでは[cs:gdtr]でばっちりうまくいきました。
   >lgdt [gdtr]でロードされるのはds:gdtr。
   ということは、secondbootにジャンプしたときに
   dsをきちんとセットしていなかったのが問題だったわけですね。
           mov  ax, cs
           mov  ds, ax
           lgdt [gdtr]             ; load gdtr
   でもうまくいきました。
   アドバイスを下さったたくさんの方々
   ありがとうございます。

830 名前: ひげぽん 投稿日: 02/07/14 19:41

   http://ime.nu/ime.nu/oshigepon.tripod.co.jp/
   今回の反省点[プロテクトモード移行時]
   ・アセンブラファイルを分割していたことを考慮していなかった。
   ・リニアアドレスを設定しなければいけないところを考慮できていなかった。
   ・firstbootからsecondbootにジャンプしたときにdsを設定しなおさかった。
   ・nasm -lを知らなかった。
   ・bits 16,bits 32の記述をしていなかった。
   いろいろです。

831 名前: ひげぽん 投稿日: 02/07/14 19:52

   [次の目標]
   インラインアセンブラを駆使しつつ、Cでソースをかいて
   32bitコンパイラでコンパイルする。
   出来上がったバイナリを、secondbootで読み込み実行する。

832 名前: ひげぽん 投稿日: 02/07/14 20:01

   プロテクトモード移行に成功したソースを
   http://oshigepon.tripod.co.jp/
   に置きました。
   プロテクモード万歳!!!
   皆さんありがとうございます。
   00161809000i[CPU  ] protected mode
   00161809000i[CPU  ] CS.d_b = 32 bit
   00161809000i[CPU  ] SS.d_b = 32 bit
   本当に皆さんのおかげでこのスレッドは、非常に有用な
   スレッドになっていると思います。
   大変お世話になっております、そしてこれからもよろしくお願いいたします。
   私と同様に、OSを本気で作ろうと考えている人たち
   一緒にがんばりましょう。

833 名前: デフォルトの名無しさん 投稿日: 02/07/14 20:07

   ひげぽんまだいる?もう少し補足がある。

834 名前: ひげぽん 投稿日: 02/07/14 20:08

   >>833
   います。

835 名前: 833 投稿日: 02/07/14 20:19

   ごみん。間違い。>>833 は忘れて。

836 名前: ひげぽん 投稿日: 02/07/14 20:28

   >>835
   了解です。
   そろそろ仮称でも良いからPJ名(OS名)を決めないと・・・
   取り返しがつかなくなる気がする。
   higeboot.asmって結構恥ずかしい名前だ。
   どなたかかっこいい名前ありませんか?

837 名前: デフォルトの名無しさん 投稿日: 02/07/14 20:30

   higepos

838 名前: ひげぽん 投稿日: 02/07/14 20:35

   >>837
   >higepos
   ちなみになんて読むの?ひげぷおーえす?
   もし万が一、有名になって、ちょっとでも外人に名前が知られるように
   なったとしたら、なんて発音するんだって揉めそう(←もめないって?)

839 名前: デフォルトの名無しさん 投稿日: 02/07/14 20:35

   ヒゲポソ

840 名前: =・ 投稿日: 02/07/14 20:36

   まんこ

841 名前: ひげぽん 投稿日: 02/07/14 20:37

   >>839
   あ!半角カタカナにして、2chであることを考慮すると
   読めるってことですね。
   良い名前随時募集中!!

842 名前: デフォルトの名無しさん 投稿日: 02/07/14 20:44

   2chOS

843 名前: デフォルトの名無しさん 投稿日: 02/07/14 20:52

   2ちゃんどうず

844 名前: ひげぽん 投稿日: 02/07/14 20:56

   >>842
   >2chOS
   見た目は非常に良いですね。
   にちゃんおーえす?
   にこす?
   >>843
   >2ちゃんどうず
   なんか微妙です。
   2chdows?
   OSASK,nwsosもそれぞれ読み方が良く分からないです。
   引き続き募集!

845 名前: FreeDOS教徒 投稿日: 02/07/14 21:18

   OSASK -> おさすく/おーえすあすく
   NWSOS -> なうえすおーえす‥‥と呼んでいる
   しっかし、いい名前っていうと思いつかんなぁ

846 名前: デフォルトの名無しさん 投稿日: 02/07/14 21:19

   GATES FREE

847 名前: ひげぽん 投稿日: 02/07/14 21:22

   >>845
   >OSASK -> おさすく/おーえすあすく
   >NWSOS -> なうえすおーえす‥‥と呼んでいる
   なるほど。
   おさすくかあー
   >しっかし、いい名前っていうと思いつかんなぁ
   そうですよね。
   linuxって人の名前からとった割には、
   かっこいい名前ですよね。
   >>846
   >GATES FREE
   ストレートですね。
   受けは良いかもしれませんが・・・
   これって、門が開いている(だれでもいいよ)
   っていう意味にも取れるのかな?
   →英語得意な方

848 名前: デフォルトの名無しさん 投稿日: 02/07/14 21:22

   OSの特徴がはっきりしないんじゃ
   名前の付けようがないだろ。
   プロジェクト名ならhigeposでもかまわん。

849 名前: デフォルトの名無しさん 投稿日: 02/07/14 21:24

   超ひげぽん 

850 名前: ひげぽん 投稿日: 02/07/14 21:31

   >>848
   >OSの特徴がはっきりしないんじゃ
   >名前の付けようがないだろ。
   >プロジェクト名ならhigeposでもかまわん。
   ちょっとこの案に傾いてきた。
   でも、ひげ生えてないんだよね。全然・・・
   名前変えようかな・・・

851 名前: デフォルトの名無しさん 投稿日: 02/07/14 21:31

   よし、かっちょいい名前考えてやるから本名晒せ。

852 名前: ひげぽん 投稿日: 02/07/14 21:41

   PJ名(仮称):higeposに決定!!!
   しました。
   今後ともよろしくお願いいたします。

853 名前: 837 投稿日: 02/07/14 21:42

   ホントに採用されるとは思わなかった (w

854 名前: ひげぽん 投稿日: 02/07/14 21:47

   >>853
   おめでとうございます???
   名付け親ですね。

855 名前: デフォルトの名無しさん 投稿日: 02/07/14 21:59

   ひげぽんプロテクトモード到達
         &
   higeposプロジェクト開始
   まとめてage

856 名前: FreeDOS教徒 投稿日: 02/07/14 22:23

   名前はともかくとして、secondbootのCR0書き換えたあとのジャンプって
   farジャンプなの?これじゃ問題がないとは言えないような‥‥‥
   万全を期したいなら、farジャンプにするために
      DB 0x2E
      JMP なんとか
   っていう形にしてしまえばいいと思うよ。間違ってたらゴミン

857 名前: ひげぽん 投稿日: 02/07/14 22:39

   >>856
   この部分で実際ジャンプしていると思います。
   でも自信なし・・・
   flush_q1:
           db 0eah
           dw set_cs_desc1 + 100h * 16
           dw 08h

858 名前: ひげぽん 投稿日: 02/07/14 22:43

   gccでインラインアセンブラということは、
   Intel形式ではないのですね・・・
   アセンブラからCでコンパイルした実行イメージを読み込めるようがんばります。
   int main() {
       asm("cli");
       return 0;
   }
   こんなやつがsecondbootから呼べればよいんだよね。
   がんばろう。

859 名前: デフォルトの名無しさん 投稿日: 02/07/14 23:30

   ひげぽんがCからアセンブラの関数を呼ぼうとせずに
   インラインアセンブラにこだわる理由って何?

860 名前: ひげぽん 投稿日: 02/07/14 23:38

   >>859
   別にこだわってないですよ。
   >>859さん
   インラインアセンブラ方法と
   Cからアセンブラを呼ぶ方法
   どちらが方法として一般的ですか?
   どちらが容易ですか。
   やはりどちらとも経験しておいたほうが良いでしょうか。

861 名前: デフォルトの名無しさん 投稿日: 02/07/14 23:49

   >>857
   それであってますよ。
   [bit16]
   flush_q1:
     jmp 8:set_cs_desc1 + 1000h
   の方がわかりやすいですけど...。

862 名前: ひげぽん 投稿日: 02/07/15 00:04

   >>861
   >この部分で実際ジャンプしていると思います。
   >でも自信なし・・・
   >flush_q1:
   > db 0eah
   > dw set_cs_desc1 + 100h * 16
   > dw 08h
   ↑は、はじめての486からのパクリです。
   はじめて・・・によると、
   「セレクタ地を使ったセグメント間ジャンプ命令をニーモニックでは記述できないので
   マシン語命令コードを直接している」
   そうです。

863 名前: ひげぽん 投稿日: 02/07/15 00:04

   セレクタ地→セレクタ値

864 名前: デフォルトの名無しさん 投稿日: 02/07/15 00:12

   >>860
   どちらが一般的かは知らんが、俺は関数として
   アセンブリを呼ぶことを勧める。
   まぁ、まずはこれを見ろよ。
   http://ghost.math.sci.hokudai.ac.jp/speedmania/speedmania-6.html
   オールアセンブリでなくC言語を使う理由って何だよ?
   「書きやすさ、読みやすさ、保守のしやすさ、バグの入りにくさ。」
   じゃないのか?
   このページに載ってるのはとてもC言語らしくない醜い物だと思うぞ、俺は。
   一方アセンブリで書いた関数をCから呼ぶ場合、アセンブリ部こんな感じ。
   ;
   ; void outb(word ioaddr,byte data);
   ;
   ; +-----------------------+ sp
   ; | return addr |
   ; +-----------------------+ +4
   ; | ioaddr |
   ; +-----------------------+ +8
   ; | data |
   ; +-----------------------+
   outb:
   mov edx,[esp+4]
   mov eax,[esp+8]
   out dx,al
   ret
   ブラウザで見ると激しくズレるので等幅フォントで見てくれよ。
   Cから呼び出すには、上に書いたプロトタイプにしたがって呼び出せば良い。
   よほどキレイだろ。
   一応、考えられる反論も書いとく:
   (1)#define マクロを使えばもっとキレイにできる。
   → バグの入りやすさは変わらんだろ。
   (2)関数を呼ぶとオーバーヘッドがかかる。
   →なら最初からCなんか使うなよ。
   (3)リンクが大変だ。
   →割り込みのコールバック関数は iret で戻らなきゃ行けないから、
   そこではアセンブリ使わざるを得ないだろ。だから結局
   C言語とアセンブリのリンク作業は避けられん。
   ちなみにリンク作業に付いて補足しておくとウチのところでは、
   gcc -c xxxx.c
   nasm -f aout yyyy.asm
   ld -oformat binary xxxx.o yyyy.o
   で上手く行ったぞ。あと必要に応じて -Ttext、 -Tdata、 -Tbbs、 -e
   等をつければOK

865 名前: デフォルトの名無しさん 投稿日: 02/07/15 00:14

   >>862
   「はじめての486」はMASMを前堤に書いているから
   そうなのかもしれん。しかし、NASMなら>>861でできるぞ。

866 名前: ひげぽん 投稿日: 02/07/15 00:23

   >>864
   大変貴重なご意見ありがとう。
   確かにインラインアセンブラは、アセンブラとCが共存している時点
   で見やすくはありませんね。
   #define lock() asm("cil")
   見たいなのはありですよね?
   >>864さんが
   せっかく方法を提示してくれたので
   明日挑戦してみます。

867 名前: デフォルトの名無しさん 投稿日: 02/07/15 00:24

   >>866
   プログラムやるならコード書くときくらいはミスタイプに慎重になれよ。

868 名前: ひげぽん 投稿日: 02/07/15 00:27

   cliですね。

869 名前: FreeDOS教徒 投稿日: 02/07/15 00:33

   >>861
   プロテクトモードに移行したら速やかにパイプラインの初期化をしなきゃ
   ヘタな16bitコードが間に入ると落ちたりする‥‥けど、この場合は
   ぜんぜん問題なさそうですね。なんかいらん心配してました(汗

870 名前: ひげぽん 投稿日: 02/07/15 00:35

   >>865
   なるほどnasmだと出来るのですね。

871 名前: デフォルトの名無しさん 投稿日: 02/07/15 00:42

   なんかよくわからんけど
   ひげぽん第一目標クリアしたのかな。
   とりあえずおめでとさん〜。
   #こんぱいる済みのもアップしてみてほすぃ。

872 名前: ひげぽん 投稿日: 02/07/15 00:48

   >>871
   higeboot.binもアップするようにしました。
   Bochsでフロッピーイメージとして設定すると
   ブートできますよ。
   実際のディスクにddコマンドで書いてもよいけど。

873 名前: デフォルトの名無しさん 投稿日: 02/07/15 00:54

   >>864
   ちょっと観点がずれてない ?
   > Cから呼び出すには、上に書いたプロトタイプにしたがって呼び出せば良い。
   と言うのは、当然なんだけど、要は呼び出され側をどう作るかじゃないの ?
   フルアセンブラで、
   outb:
   mov edx,[esp+4]
   mov eax,[esp+8]
   out dx,al
   ret
   と書くのと C + インラインアセンブラで
   void outp(word ioaddr, byte data)
   {
    asm("out %%dx,%%al"
      :
      : "d"(ioaddr), "a"(data));
   }
   と書くののどちらがいいかの問題だと思う。個人的には、[esp+4] なんかが結構
   面倒と思う。特にローカル変数とか持つとね。そう言うところは、コンパイラに
   やらせるべきだと思うけど...。

874 名前: デフォルトの名無しさん 投稿日: 02/07/15 01:25

   >>873
   ああ、言われてみればそんな気がして来た。
   俺は、よくありがちなCのコードのなかにasm()がポンポン出てくるような
   インラインアセンブラの使い方が嫌なだけだった。
   インラインアセンブラ をごっそり関数で括ってあとは
   そっちだけ利用すれば一緒だな。
   gasの文法を使わなきゃ行けなかったり、
   : "d"(ioaddr)なんてCらしくなくて気持ち悪いってのはあるけど
   でも、それって確かに主観の問題だ。

875 名前: ひげぽん 投稿日: 02/07/15 01:29

   >>873,>>874
   うーん迷いますね。
   gasの文法で書かなければいけないのが
   インラインアセンブラの微妙なところかもしれないです。
   →正直
   結局gasでよいなら、もともとnasmなんか使わなければ・・・
   迷うので明日の朝起きてから考えよう。

876 名前: デフォルトの名無しさん 投稿日: 02/07/15 01:38

   ひげぽんは、結構質問屋だけど
   質問する前に、自分である程度試しているみたいだし
   学習スピードが速いね。
   これって結構すごいと思う。
   応援しているのでがんばってね。
   もうすぐ多分、俺もついていけなくなる(技術的に)

877 名前: 過去ログ読む気はない! 投稿日: 02/07/15 02:02

   ここってマジに作ってんの?

878 名前: デフォルトの名無しさん 投稿日: 02/07/15 03:10

   他の板でこのスレの宣伝してる奴がいる…
   宣伝厨うぜぇ。

879 名前: デフォルトの名無しさん 投稿日: 02/07/15 06:31

   このスレ見てると、「おちこぼれ」の気分になれます。

880 名前: 投稿日: 02/07/15 19:57

   関数をインライン展開したくなったときにフルアセンブラの関数だと厄介だよね。

881 名前: デフォルトの名無しさん 投稿日: 02/07/15 21:18

   >>879
   この掲示板にいる人がおちこぼれってこと?

882 名前: デフォルトの名無しさん 投稿日: 02/07/15 22:53

   サンプル

883 名前: デフォルトの名無しさん 投稿日: 02/07/15 23:15

   cの配列ってbssセクションにメモリが確保されるの?
   putchar関数をつくってみたけどちゃんと動かない。

884 名前: デフォルトの名無しさん 投稿日: 02/07/15 23:23

   bssは静的配列だけだろ

885 名前: デフォルトの名無しさん 投稿日: 02/07/15 23:39

   >>883
   初期化してるなら data、 してないなら bss、 ローカル変数ならスタックじゃない?
   でも、一度アセンブリ出力したのを見た方が確実かも。

886 名前: デフォルトの名無しさん 投稿日: 02/07/16 01:02

   >>885さんの通りでした。どこに配置されているかはわかったものの
   なにが悪いのかよくわかっていないので、これから解決してみます

887 名前: デフォルトの名無しさん 投稿日: 02/07/16 15:45

   .ldsが書けない。欝だ死ぬ

888 名前: デフォルトの名無しさん 投稿日: 02/07/16 18:54

   NOWSMART OS クロス開発環境 DL 可能記念あげ。

889 名前: 886 投稿日: 02/07/16 19:00

   だめだどうすればいいのかわかんない...

890 名前: デフォルトの名無しさん 投稿日: 02/07/16 19:03

   nowsmartって独自の開発環境があるの?

891 名前: デフォルトの名無しさん 投稿日: 02/07/16 19:06

   >>890
   あるよ。
   独自開発の「処理系」が。
   言語自体は独自じゃなく、MASM 準拠、ANSI C 準拠みたいだけど。
   まあ、独自言語よりも凄いかも知れんけど。

892 名前: デフォルトの名無しさん 投稿日: 02/07/16 20:42

   >>889
   ソースをここにコピペしてくれれば相談に乗れるかも

893 名前: 873 投稿日: 02/07/16 21:27

   >>874
   > 俺は、よくありがちなCのコードのなかにasm()がポンポン出てくるような
   > インラインアセンブラの使い方が嫌なだけだった。
   なら、同意。
   > gasの文法を使わなきゃ行けなかったり、
   > : "d"(ioaddr)なんてCらしくなくて気持ち悪いってのはあるけど
   > でも、それって確かに主観の問題だ。
   こっちも、同意。GNU の文法ってちょっと変と思う。変数属性の二重括弧と
   か...。

894 名前: ひげぽん 投稿日: 02/07/16 23:54

   firstboot real-mode secondbootをディスクを読み込んでjmp
   secondboot protected-modeへ移行 thridをディスクを読み込んでjmp
   thirdでは、Cからアセンブラで実装した引数なしの関数をよぼうと思う。
   現在プロテクトモードでディスクを読み込むところを実装中・・・

895 名前: _ 投稿日: 02/07/17 00:39

   >>891
   この人、凄すぎ。Cコンパイラが動くならGNUのソフトウェアは移植できないのかな。

896 名前: デフォルトの名無しさん 投稿日: 02/07/17 00:56

   >>894
   プロテクトモードでディスク読み込みってまだ難くない?
   secondboot で、ディスク読んでからプロテクトモードに移行の方が良いと思うよ。
   じゃなければ、firstboot で、second third 両方読みこんじゃう手もある。

897 名前: デフォルトの名無しさん 投稿日: 02/07/17 01:07

   ハッカーあげ

898 名前: デフォルトの名無しさん 投稿日: 02/07/17 01:31

   JAVA版のLinuxってどこにあるんですか

899 名前: デフォルトの名無しさん 投稿日: 02/07/17 01:33

   JAVAバイトコードをはく Cコンパイラはありますか

900 名前: 889 投稿日: 02/07/17 01:37

   >>892
   メモリダンプしてみると初期化した値がどこにもないようでした。
   どうやらもっと基本的な部分で間違えているようです。

901 名前: デフォルトの名無しさん 投稿日: 02/07/17 01:42

   >>900
   gcc -Wa,-a -c xxxx.c
   って試してみた?

902 名前: デフォルトの名無しさん 投稿日: 02/07/17 01:48

   ゴメン↑じゃあまり参考にならなそう。リンクのときに、
   -Map mapfile
   ってオプションつけてみ。そして、できたmapfile 見ると良いかも。
   俺もこれの正しい読み方分からないけど、なんとなくなら分かる。
   誰か解説ページ知らない?

903 名前: 889 投稿日: 02/07/17 01:53

   ひょっとしたらなにが原因かわかったかもしれません。もうちょっと試してみます。
   マップファイルをみるとdjgppがつけたと思われるものが色々ありますが、
   これっていらないもののような感じがするんだけど...

904 名前: 903 投稿日: 02/07/17 02:30

   間違ってp2pのスレに書いてしまった...
   問題は半分解決しました。

905 名前: デフォルトの名無しさん 投稿日: 02/07/17 03:34

   >>904
   スマン勝手にコピペさせてもらう。
   >値がないのは、フロッピーの読み込みをちゃんとしていなかったという
   >初等的なミスでした。
   >次に問題なのは、実体のあるアドレスとポインタの値が一定値ずれているということ
   >なのですが、これはまだどうやったらいいのかわからないままです。
   「一定値ずれている」のは、ld のオプションで -Tbbs -Tdata を使えばいい。

906 名前: デフォルトの名無しさん 投稿日: 02/07/17 05:32

   >>895
   恐らく GCC なども移植できるでしょう。

907 名前: デフォルトの名無しさん 投稿日: 02/07/17 14:14

   おい、お前ら3chねるをみろ!

908 名前: デフォルトの名無しさん 投稿日: 02/07/17 16:56

   ん?なんだ
   ニコニコプンしかやってないぞ

909 名前: デフォルトの名無しさん 投稿日: 02/07/17 17:01

   >>908
   ワラタ

910 名前: デフォルトの名無しさん 投稿日: 02/07/17 18:34

   3chでニコニコぷんはやってない。と言う罠。
   でもウケタYO

911 名前: デフォルトの名無しさん 投稿日: 02/07/17 18:42

   掲示板の文字が黒い

912 名前: デフォルトの名無しさん 投稿日: 02/07/17 19:13

   NHK 総合 : 2ch
   NHK 教育 : 12ch
   ですが、何か?

913 名前: デフォルトの名無しさん 投稿日: 02/07/17 19:55

   総合3ch
   教育9ch
   が普通でしょ?ニコニコプンは教育。てかニコニコプンって今もやってるの?

914 名前: デフォルトの名無しさん 投稿日: 02/07/17 19:59

   NHK 総合 : 1ch
   NHK 教育 : 3ch
   これが関東標準だぞ。

915 名前: 志津 投稿日: 02/07/17 19:59

   >>913
   てか、どこにすんでんの

916 名前: 志津 投稿日: 02/07/17 19:59

   >>912は関西標準

917 名前: デフォルトの名無しさん 投稿日: 02/07/17 20:03

   3chはSunTVが畿内標準デス

918 名前: 913 投稿日: 02/07/17 20:05

   私は名古屋です。
   地方で違うんですね。知りませんでした。板汚してごめんよ
   でも900超えたからいいかな?

919 名前: デフォルトの名無しさん 投稿日: 02/07/17 20:09

   これのことだろ。
   >第7回 7/10・ 7/17
   >「OSって何?」
   > コンピューターの働きをつかさどるオペレーティング・システム。
   >複数のプログラムを交通整理するしくみと、その発展の歴史を紹介する。
   ttp://www.nhk.or.jp/denno/nagare/06/top.html

920 名前: ひげぽん 投稿日: 02/07/17 23:22

   >>896
   >プロテクトモードでディスク読み込みってまだ難くない?
   >secondboot で、ディスク読んでからプロテクトモードに移行の方が良いと思うよ。
   >じゃなければ、firstboot で、second third 両方読みこんじゃう手もある。
   昨日、今日とずっと考えてやっとだ取り付いた結論が↑に書いてありました(笑)
   さてどこに読み込んで、プロテクトモードに移ったときに
   どうすれば実行されるのかでまた悩みます・・・
   スレッドが900を超えたのでそろそろ新スレッドを・・・

921 名前: デフォルトの名無しさん 投稿日: 02/07/17 23:57

   >>920
   読みこむ場所はとりあえずどこでも良いんじゃない?
   実行するにはその場所をcallするかjmpする。
   とりあえず簡単なCのプログラムを書いて
   ld のオプションで -e xxxx -Ttext yyyy -oformat binary
   を指定すればOK

922 名前: ひげぽん 投稿日: 02/07/18 00:25

   >>921
   アドバイスありがとう。
   いきなりCのプログラムだと、もし出来なかった場合
   どこが悪いのか分からなくなるので
   firstboot.asm 512byte
   secondboot.asm 512byte
   test.asm 512byte
   としてfirstbootで2セクタ読み込もうとしています。
   firstbootでは、es:bx 0x100:0をバッファとして指定してます。
   リアルモードでは、上記の理由から
   jmp 0x100:0にジャンプしました(secondbootへ)
   secondbootでプロテクモード移行を済ませた後に
   test.asmにjmpしようと思うのですが、どこにjmpしたら
   良いかが、分からなくなりました。
   gdtを設定したことを考慮しなければいけないとは思うのですが、、、

923 名前: デフォルトの名無しさん 投稿日: 02/07/18 00:40

   >>922
   gdt の設定の仕方が前みたい(csのbase=0)だったら
   普通にリニアアドレスを書けば良い。つまり、読みこまれたアドレス。
   たぶんひげぽんの場合だと 0x1000 に2セクタ目から読むから
   0x1000+512 = 0x1200 をcall ( or jmp) かな。
   Cが上手く呼べたかどうか調べるには。
   char c_prog()
   {
   return 'A';
   }
   みたいにして、 eax に'A'がはいってくることを確かめる(アセンブリ部で表示)か、
   void c_prog()
   {
   (*(char *)0xb8000)='A';
   }
   のようにVRAM直接アクセスでよい。
   後者の方がお勧めかな。
   ちなみにかっこ付けて
   char *vram=0xb8000;
   void c_prog()
   {
   vram[0]='A';
   }
   とかやると、変数に上手くアクセスできるかとかそういう問題が
   からんで来ちゃうから最初はやらない方が良い。でも、↓ならOK
   #define vram ((char *)0xb8000)
   void c_prog()
   {
   vram[0]='A';
   }
   うん。まあ上のどれか試してみて報告しれ。

924 名前: 904 投稿日: 02/07/18 02:22

   >>905
   どうもありがとうございました。無事動くようになりました!!

925 名前: 924 投稿日: 02/07/18 03:32

   躓いた大きな点を参考にならないかと思いますが書いておきます。
   ・1トラック当たりのセクタ数は18
   ・binary形式だと.dataセクションや.bssセクションを使うときにだめっぽい
   ・そこでcoff形式にしたところ始めの部分はいらないので
    ddでそこを飛ばして書きこむ必要がある。
   ちなみにgccでつけたオプションはインターフェースに載っていたのも踏まえて
   -nostdlib -g -Wall -W -O2 -fcall-used-ebx -fno-common\
   -fnhibit-size-directive -fomit-frame-pointer -fno-ident -fno-builtin -c
   でした。

926 名前: デフォルトの名無しさん 投稿日: 02/07/18 12:45

   > 925
   リンかスクリプト使えって。
   ld -T simple.ls xxx.obj -o a.exe
   objcopy a.exe a.bin -O binary
   てな感じで。
   /* simple linker script */
   OUTPUT_FORMAT(pei-i386)
   SECTIONS
   {
   . = 0x1000;
   .text : { *(.text) }
   .data : { *(.data) }
   .bss : { *(.bss) }
   }

927 名前: デフォルトの名無しさん 投稿日: 02/07/18 18:21

   みなさん、エミュレータは何を使われてますか?
   それとも実機なのでしょうか?

928 名前: デフォルトの名無しさん 投稿日: 02/07/18 19:20

   >>972
   だいたいBochsの人が多い。
   ていうか過去ログ嫁

929 名前: デフォルトの名無しさん 投稿日: 02/07/18 19:33

   Bochsってコンソールモードじゃ動作しないんでしょ?
   Plex86は動くみたいだけど。。

930 名前: デフォルトの名無しさん 投稿日: 02/07/18 19:59

   >ひげぽん氏
   トリップ付けといたら?

931 名前: デフォルトの名無しさん 投稿日: 02/07/18 20:24

   >>929
   (゚Д゚)ハァ?

932 名前: デフォルトの名無しさん 投稿日: 02/07/18 21:50

   VMwareじゃだめなん?

933 名前: デフォルトの名無しさん 投稿日: 02/07/18 22:23

   フロッピーからコードを0x0000に置くとなぜか止まってしまうんですがこれってなんででつか?

934 名前: デフォルトの名無しさん 投稿日: 02/07/18 22:28

   0:0には16bitの割り込みベクタがあるから、かな?

935 名前: デフォルトの名無しさん 投稿日: 02/07/18 22:34

   >>932
   いいけど、高いよ。

936 名前: デフォルトの名無しさん 投稿日: 02/07/18 22:35

   >>935
   評価版がタダじゃないの?

937 名前: ひげぽん 投稿日: 02/07/18 22:43

   >>923
   ありがとう。
   third.asmにjmpして実行するのには成功したので
   以下のようなCのソースを
   書いてみました。
   大体こんな感じ
   int main() {
   hige();
   }
   char hige() {
   return 'A';
   }
   gcc -c -Wall main.c -o main.o
   みたいな感じでコンパイルしました。
   cat firstboot.bin secondboot.bin main.o >higeboot.bin
   としてみたところ、
   bochs異常終了・・・撃沈。
   ただいま原因究明中。
   >930
   必要と感じたら付けますよ。

938 名前: デフォルトの名無しさん 投稿日: 02/07/18 22:54

   だれか次スレ作れーーー

939 名前: ひげぽん 投稿日: 02/07/18 23:00

   リンクが必要なことに気づいてきました。

940 名前: 投稿日: 02/07/18 23:07

   cygwin の gcc で main って関数名を使うと初期化ルーチンへの
   ジャンプコードが埋め込まれるので注意が必要です。

941 名前: ひげぽん 投稿日: 02/07/18 23:09

   >>940
   cygwinではなく、DJGPPを使っているんですけど
   まずいですかね?
   リンクってオブジェクトファイルがひとつしかない場合も必要なんでしょうか?

942 名前: デフォルトの名無しさん 投稿日: 02/07/18 23:12

   cygwinだろうがDJGPPだろうが、
   mainに引数を渡したりランタイムの初期化処理が入るからダメ。
   プログラムエントリをmainに出来るならそれもOK
   たとえば、VCのリンカだったら -entry:mainCRTStartupみたいな感じで指定できる。

943 名前: ひげぽん 投稿日: 02/07/18 23:14

   >>942
   >cygwinだろうがDJGPPだろうが、
   >mainに引数を渡したりランタイムの初期化処理が入るからダメ。
   >プログラムエントリをmainに出来るならそれもOK
   gccの場合↓のオプションのことでしょうか?
   -ffreestanding
   produce code that is meant to be run without an OS (ie:kernel code)

944 名前: デフォルトの名無しさん 投稿日: 02/07/18 23:26

   950の人が次スレたてればいいと思われ。。。

945 名前: デフォルトの名無しさん 投稿日: 02/07/18 23:48

   >>937
   ひげぽん それ main は要らない。 >>923 は別に主要部分だけ書いたんじゃなくて
   あれで全て。

946 名前: ひげぽん 投稿日: 02/07/19 00:15

   >>945
   深読みしすぎました。
   ${CC} -c -ffreestanding -Wall ??.c -o ../bin/third.bin
   でコンパイルしてcatすればいいはずなのに・・・
   bochs異常終了
   いったい何をやらかしているのだろう。
   他のオブジェクトに依存していない場合は、リンク処理は必要ないですよね。

947 名前: デフォルトの名無しさん 投稿日: 02/07/19 00:22

   リスティングしてコード読んでみれば?

948 名前: デフォルトの名無しさん 投稿日: 02/07/19 00:24

   >>946
   ソースうpれ。Makefileも忠実にな。

949 名前: 投稿日: 02/07/19 07:32

   binaryでリンクした方が良い気がするけどなぁ。
   *.oのヘッダとか自分で解析するの面倒だし。

950 名前: デフォルトの名無しさん 投稿日: 02/07/19 07:55

   >>946
   > 他のオブジェクトに依存していない場合は、リンク処理は必要ないですよね。
   オブジェクトファイルのヘッダがついてるだろ…

951 名前: デフォルトの名無しさん 投稿日: 02/07/19 17:02

   nasm で、セグメント・オーバライト・プレフィックスってどう指定すりゃいいん
   でしょうか ? 具体的には、lodsb に CS セグメントオーバーライトしたいんで
   す。
    cs:loadsb
   とか、
    cs:
    loadsb
   とかやってみたけど、エラーになっちゃう。
    db 2eh
    loadsb
   とやると、ちゃんと動くから命令としてはサポートしてると思うんだけど....。

952 名前: 951 投稿日: 02/07/19 17:26

   >>951
   間違えた loadsb → lodsb だった。(一番上は、合ってんのに暑さでボケ
   てたみたい。)

953 名前: デフォルトの名無しさん 投稿日: 02/07/19 20:40

   >>952
   cs lodsb

954 名前: デフォルトの名無しさん 投稿日: 02/07/19 20:48

   >>951
   ?

955 名前: ひげぽん 投稿日: 02/07/19 21:11

   次スレッドを作りました。
   こちらへどうぞ
   ↓
   http://pc3.2ch.net/test/read.cgi/tech/1027080631/

956 名前: 951 投稿日: 02/07/19 22:19

   >>953
   サンクス。でも、これは思いつかないなぁ...。
   >>954
   アセンブラスレで聞いたほうが良かったかな ? こっちなら、nasm 使ってる人も
   多いかと思ったもので...。(ひげぽん Boot をちょっと改造して遊んでたので、
   まんざら関係ないわけじゃないということで許してちょ。)

957 名前: デフォルトの名無しさん 投稿日: 02/07/20 11:49

   OSをつくろうpart3
   http://pc3.2ch.net/test/read.cgi/tech/1027080631/

958 名前: 次スレ 投稿日: 02/07/20 11:50

   OSをつくろうpart3
   http://pc3.2ch.net/test/read.cgi/tech/1027080631/l50

959 名前: yuji 投稿日: 02/07/25 21:01

   うんこ

960 名前: 次スレ案内 投稿日: 02/07/26 12:09

   OSをつくろうpart3
   http://pc3.2ch.net/test/read.cgi/tech/1027080631/l50

961 名前: デフォルトの名無しさん 投稿日: 02/08/25 16:41

   OSのソースを見たいのですが何処で見れるでしょうか

962 名前: デフォルトの名無しさん 投稿日: 02/08/26 17:38

   もう見つけたと思うけど
   http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/higepos/higepos/src/
   あと次スレがあるからこっちを上げないでね

963 名前: デフォルトの名無しさん 投稿日: 02/09/09 21:09

   あげ

964 名前: デフォルトの名無しさん 投稿日: 02/09/10 17:48

   日本語でOSってつくれるでしょうか?
   是非こっちにきて、言語板の電脳のよくわからない住民に教えてやってくださいな。
   http://academy.2ch.net/test/read.cgi/gengo/1028424001/l50

965 名前: デフォルトの名無しさん 投稿日: 02/09/10 23:11

   >>964
   日本語ニーモニックを開発シル

966 名前: デフォルトの名無しさん 投稿日: 02/10/24 05:21

   てsyと

967 名前: デフォルトの名無しさん 投稿日: 02/11/02 22:26

968 名前: デフォルトの名無しさん 投稿日: 02/11/22 15:30

   0:0には16bitの割り込みベクタがあるから、かな?

969 名前: デフォルトの名無しさん 投稿日: 02/12/08 02:23

970 名前: デフォルトの名無しさん 投稿日: 02/12/09 23:32

   うめ、よろし?

971 名前: デフォルトの名無しさん 投稿日: 02/12/12 22:26

   こっちも...捧げつつ埋め!
   感謝を捧げつつ....てか!?

972 名前: デフォルトの名無しさん 投稿日: 02/12/13 23:54

   ひげぽんこっちには来ないかな?捧げ埋め

973 名前: デフォルトの名無しさん 投稿日: 02/12/15 03:17

   sa sage ume

974 名前: デフォルトの名無しさん 投稿日: 02/12/15 20:47

   ume

975 名前: デフォルトの名無しさん 投稿日: 02/12/15 21:05

   埋め立て

976 名前: デフォルトの名無しさん 投稿日: 02/12/17 00:17

   埋め、ただしまったりと

977 名前: ひげぽん 投稿日: 02/12/18 23:22

   part3がDAT落ちしましたね。残念。
   埋め(・x・)

978 名前: デフォルトの名無しさん 投稿日: 02/12/19 21:27

   一日一人限定ですか >ひげぽん

979 名前: デフォルトの名無しさん 投稿日: 02/12/20 00:13

   うめ!(一日一梅)

980 名前: ひげぽん 投稿日: 02/12/21 16:59

   >>978
   まったりといきませう。
   産め。

981 名前: デフォルトの名無しさん 投稿日: 02/12/22 18:39

   あげ

982 名前: デフォルトの名無しさん 投稿日: 02/12/23 00:34

   梅肉!!

983 名前: デフォルトの名無しさん 投稿日: 02/12/23 00:45

   梅毒!!

984 名前: FreeDOS教徒 投稿日: 02/12/23 10:23

   梅田!!

985 名前: ひげぽん 投稿日: 02/12/23 10:49

   Women

986 名前: デフォルトの名無しさん 投稿日: 02/12/23 23:53

   淋病!!

987 名前: デフォルトの名無しさん 投稿日: 02/12/24 02:04

   イブ埋め!

988 名前: デフォルトの名無しさん 投稿日: 02/12/24 02:28

   梅とくか。

989 名前: 1000とり 投稿日: 02/12/24 12:44

   でもしようかな

990 名前: 1000とり 投稿日: 02/12/24 12:47

   あと10

991 名前: 1000とり 投稿日: 02/12/24 12:47

   9

992 名前: 1000とり 投稿日: 02/12/24 12:48

   ソロソロ8

993 名前: 1000とり 投稿日: 02/12/24 12:48

   7?

994 名前: 1000とり 投稿日: 02/12/24 12:50

   (@@)

995 名前: 1000とり 投稿日: 02/12/24 12:50

   5?!

996 名前: 1000とれ 投稿日: 02/12/24 12:52

   4か!とりてーな

997 名前: 1000とれ 投稿日: 02/12/24 12:53

   1000番!

998 名前: 1000とれ 投稿日: 02/12/24 12:53

   100000000!

999 名前: 1000とれ 投稿日: 02/12/24 12:54

   2000ぬ

1000 名前: 1000とれ@いえい@(・◎・) 投稿日: 02/12/24 12:55

   撮ったぞー

1001 名前: 1001 投稿日: Over 1000 Thread

   このスレッドは1000を超えました。
   もう書けないので、新しいスレッドを立ててくださいです。。。

MENU

now: 1

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 6345, today: 2, yesterday: 1

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:47:55 (3711d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 1.031 sec.