C ++およびアセンブラーのゼロからの小さなOS

私はすぐに、「ダム、もう一つのポポフ」という考えで記事を閉じないでください。 Ubuntuになめられたものがあり、カーネルやアプリケーションなど、すべてをゼロから持っています。 だから、カットの下での継続。



OSグループ: こちら

最初に、スクリーンショットを1つ表示します。







それらはもうありませんが、今、私がそれを書いている理由についてさらに詳しく説明します。



木曜日の暖かい4月の夜でした。 子供の頃から、OSを書くことを夢見ていたとき、「今、私はプラスとasmを知っています。私の夢を実現してみませんか?」 このトピックのサイトをグーグルで検索したところ、Habrの記事「 OSの作成を開始して停止しない方法 」が見つかりました。 下記のOSDev Wikiへのリンクを作成してくれた著者に感謝します。 私はそこに行き、仕事を始めました。 1つの記事には、最小OSのすべてのデータが含まれていました。 クロスgccとbinutilsの収集を開始し、そこからすべてを書き直しました。 「Hello、kernel World!」という碑文を見たとき、あなたは私の喜びを見ていたはずです。私は椅子から飛び降りて、あきらめないことに気付きました。 「コンソール」を作成しました(引用符で囲んでキーボードにアクセスできませんでした)が、ウィンドウシステムを作成することにしました。 その結果、機能しましたが、キーボードにアクセスできませんでした。 そして、私はX Window Systemに基づいた名前を思いつくことにしました。 Googled Y Window System-そうです。 その結果、彼はOS Window pre-alpha 0.1の一部であるZ Window System 0.1という名前を付けました。 そして、はい、私以外は誰も彼女を見ませんでした。 それから、キーボードサポートを実装する方法に気付きました。 最初のバージョンの画面、何もないとき、ウィンドウシステムさえも:







ご覧のように、テキストカーソルはその中を移動しませんでした。 それから、Zをベースにした簡単なアプリケーションをいくつか作成しました。そして、ここにリリース1.0.0アルファがあります。 システムメニューも含め、多くのことがありました。 また、ファイルマネージャと計算機は機能しませんでした。







さらにテキストエディタを使用した1.0.1、グラフを使用した1.0.2。 640x480モード、デスクトップでは1.0.3、ロシア語では1.0.4、修正プログラムなどでは1.0.5、時計では1.0.6ですが、1.1についてはさらに詳しく説明します。



私は、美しいものだけが重要な友人に直接恐怖を感じました(Mitrofan、ごめんなさい)。 彼は「彼らはVBEモード1024 * 768 * 32を洗い流し、洗い流し、洗い流しました! よく洗い流された!」。 まあ、私はすでに彼の話を聞くのにうんざりしているが、それでもまだ痛い。 以下の実装について。



私はブートローダー、つまりGRUBですべてを行いました。 これを使用すると、Multibootヘッダーにいくつかの魔法の行を追加することにより、問題なくグラフィックモードを設定できます。



.set ALIGN, 1<<0 .set MEMINFO, 1<<1 .set GRAPH, 1<<2 .set FLAGS, ALIGN | MEMINFO | GRAPH .set MAGIC, 0x1BADB002 .set CHECKSUM, -(MAGIC + FLAGS) .align 4 .long MAGIC .long FLAGS .long CHECKSUM .long 0, 0, 0, 0, 0 .long 0 # 0 = set graphics mode .long 1024, 768, 32 # Width, height, depth
      
      





そして、マルチブート情報構造から、フレームバッファのアドレスと画面解像度を取得し、そこにピクセルを書き込みます。 VESAはすべてを非常に混乱させました-RGB色は逆順で入力する必要があります(RGBではなくBGR)。 数日間、ピクセルが表示されない理由がわかりませんでした!? その結果、16の色定数の値を0〜15からRGBに相当するものに変更するのを忘れたことに気付きました。 その結果、私は同時に、グラデーションの背景を洗い流しました。 次に、コンソールと2つのアプリケーションを作成し、1.2をリリースしました。 そうそう、私はほとんど忘れていました-あなたはサイトでOSをダウンロードできます(habraeffect、それは嘘です)

はい、信じられませんが、私は11歳です。

続行するには...



All Articles