2016-01-17 26 views
6

最近、NASMとCでオペレーティングシステムを開発し始めました。私はすでにブートローダ、カーネル、ファイルシステムなどを作っています。これまではVGAテキストモードを使って直接住所0x000B8000。そこで、テキストモードではなくビデオモードに切り替えることにしました。私は最大ディスプレイ解像度320x200を選択しましたが、それから3つの問題があることを認識しました。まず、256色しかありません。第二に、解像度が小さすぎます。第3に、アドレス0x000A0000への書き込みが遅すぎる。私はいくつかのアニメーションをやろうとしましたが、それは非常に遅く、次のフレームの前に1秒以上待つこともあります。高解像度に切り替える

1920x1080などの高解像度に切り替える方法と、256*256*256の色を256の代わりに使用する方法について、インターネットで検索しました。私が見つけたものはすべて、高解像度を使用するのは難しいさまざまな種類のグラフィックスカードのドライバを開発し、いくつかのカードにはドキュメントがないため、リバースエンジニアリングを使用する必要があります。

私は実際にオペレーティングシステムに高解像度のグラフィックスを導入したいと考えています。本当に難しいのですか、それとも簡単な方法がありますか?どのように私はこれを解決することができます上の任意の提案?

+1

VGA 320x200の貧弱な画面で高速アニメーションを表示するためのコードを作成する際に問題が発生している場合は、1ピクセルあたり3倍(おそらく4倍)と30倍(!)倍以上のピクセル。 – usr2564301

答えて

4

ほぼすべてのグラフィックスアダプタは、VESAフレームバッファのセマンティクスをサポートしています。ほぼすべてのビデオモードを設定できます。 https://en.wikipedia.org/wiki/VESA_BIOS_Extensions:欠点は、あなたは、ベンダー固有の機能(加速グラフィックなど)

は、例えばVESA-Xサーバーは、ほぼすべてのグラフィックアダプタで動作します(ただし、機種固有のものがかなり速くなります)

も参照を使用できないということです

+0

ありがとうございますが、まだ問題は1つあります。私は0x0118(1024x768)VESAモードに切り替えましたが、非常に遅いです。それは役に立たないほど遅いです。私はそれをテストするためにいくつかの簡単なことをやろうとしました。私はRAMのいくつかの領域に2014x768のイメージの配列を持っていて、それを次々に読み込む単純なCプログラムを作った。ただし、別の画像をロードする前に1秒以上待つ。私は最適化の問題がないと確信しています。どのように私は約60 + fpsまでそれをスピードアップすることができますか? –

1

高解像度のVESAグラフィックスを組み立てることができます。これは、十分に速いものでなければなりません。

まず、エミュレータ/仮想マシンを使用してテストを行っていることを確認してください。私はQEMUを使用していましたが、それは640x480x24bppでしかグラフィックをやりなおすのが遅かったのです。私はVirtualBoxに切り替えましたが、起動はかなり遅いですが、私は一度も振り返っていません。

プログラミングの部分については、Pure64というプロジェクトを見ることをお勧めします。あなたはGitHubで見つけることができます。 src/init/isa.asmに移動し、ファイルの終わりを見てください - VESAの初期化を行うコードがあります。実際にはPure64を使って64bit環境を構築していますが、VESAグラフィックスを使っていますので、うまく動作すると言えます。

VESA initは、モード情報の取得とビデオモードの設定の2つの部分で構成されています。モード情報を取得すると、連続したメモリ領域へのビデオベースポインタが取得され、バンクの切り替えや複雑な作業をせずにピクセルを書き込むことができます。少なくとも64ビットモード。

私がこれを持っていた唯一の問題は、32bppモードを動作させることができなかったことです。私はRRGGBBである24bppを行うことができます - ピクセルあたり3バイト(HTML/CSSカラーコードとまったく同じ)。バイナリコンピュータ上の3バイトで構成されるすべてのものと同様に、これは(少なくとも初心者のために)少し複雑になります。 1ピクセルあたり4バイトを取り入れることは、まだ私を逃すことになります。おそらく、これはVirtualBoxなどの制限です。

これはすべて、基本的な高解像度グラフィックスでは、ハードウェア固有の多くのことを行う必要がないことを意味します。軽度のハードウェアを使用している場合は、うまくいくはずです。

+0

* "軽度のハードウェア" * - VESAの拡張機能は、90年代初め以来、少なくともサポートされています(ただし、サポートされているいくつかのモードを追加しています)ので、VESAも同様に動作します。 –