* 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