* VGAのテキストモード [#a843d645]
-BIOSを使わずにテキストモードで文字を書きたい、という人のための情報。

-OS-WikiのルールではどのOSにも関係ないことを書いてはいけないので、書くつもりはなかったのですが、必要な人がたまにいるようなので書くことにしました(by [[K]], 2004.10.21)。半年くらい待ってもこの情報を利用するOSがOS-Wikiにこなければ、このページは消します。


*** とにかく文字を表示したい [#e437daca]
-まあだまされたと思って、0xb800:0x0000の1バイトに適当なキャラクターコードを、そして0xb800:0x0001の1バイトに適当な数値を書いてみてください(この適当な数値のbit0-3が文字色、bit4-7が背景色になる)。そして画面左上に注目してください。
-何を書くと何が出るのかが大体把握できたら、今度は0xb800:0x0002と0xb800:0x0003で同じことをやってみます。・・・それもできたら、今度はアドレスを少しずつ増やしてみればいいでしょう。これで、画面の好きな場所に好きな文字を出せるようになるはずです。
-上の内容はリアルモードのものです。もしプロテクトモードでも使いたかったら物理アドレス0xb8000以降をアクセスしてください。
//もしプロテクトモードでも使いたかったら0xb8000をベースとするセレクタを用意してください。

*** 発展 [#i57b176a]
-画面消去は?
--画面全体を空白のキャラクタコード(0x20)で埋め尽くせばいいでしょう。
-スクロールは?
--行を転送するんです。
-カーソルが邪魔だ or カーソルを移動させたい
--これはVGAのCRTコントローラをいじります。
--まずカーソルをどこに移動させたいかを考えて、それが0xb800:0x0000から何バイト離れているかを考えます。そしてそれを2で割ります。そしてその値をAXに入れます。
--そのあとは次の通り
 PUSH(AX); DX = 0x03d4; AL = 0x0e; OUT(DX, AX); POP(AX); AH = AL; AL = 0x0f; OUT(DX, AX);
--何をやっているのかというと[[VGA]]のCRTコントローラの、レジスタ[0x0e]と[0x0f]を書き換えています。詳細は、[[VGA]]のページを見てください。
--この方法でカーソルを画面外に追放すれば(たとえば一番下の次の行とかにする)、カーソルがいなくなります(カーソルを追い出すだけなら、[0x0a]を使う方法もある)。
--なお、[0x0a]と[0x0b]をいじれば、カーソルの形状もいじれます。

* こめんと欄 [#y0f0ed8d]
-カーソル制御の方法を希望します。よろしくお願いします。 -- ''TaTsu.'' SIZE(10){2004-10-22 (金) 12:29:04}
-C MAGAZINE(2004/07)に書いてあったと思うけど・・・ 元ネタどこだ・・・? -- [[名無しさん]] SIZE(10){2004-10-22 (金) 13:59:38}
-要望があったのでカーソル制御を書き足しました。 -- [[K]] SIZE(10){2004-10-22 (金) 14:40:41}
-私もtextモードの資料きぼんしてますので消さないでくださーい。 -- ''MiSt'' SIZE(10){2004-10-23 (土) 20:07:54}
-やってみましたが、失敗してしまいました。ブート直後ではダメなのでしょうか?? -- [[名無しさん]] SIZE(10){2006-03-13 (月) 23:35:32}
-QEMUでは、成功しました。  ( [[Lights計画]]のブートセクタ中で使ってます。 ) -- [[Sero]] SIZE(10){2006-04-06 (木) 21:28:53}
-けさないでください -- ''とくめい'' SIZE(10){2006-09-06 (水) 11:48:54}

#comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS