3: 2007-11-23 (金) 00:32:44 |
4: 2007-11-23 (金) 14:54:00 |
| | | |
| うーーーん・・・なにも変化がない・・・ | | うーーーん・・・なにも変化がない・・・ |
| + | |
| + | **ズギャ!!! 色が出たぞ!!!!! [#bc07c8e2] |
| + | ・・・・なっあぁるほどおぉぉぉお!!!!!!! そういうことなのね!!! |
| + | |
| + | オイラが今までなにやっても変化がなかったコードがこれ。 |
| + | |
| + | io_out8(0x03ce, 0x0005); //書き込みモードを0に |
| + | io_out8(0x03ce, 0x0301); //全プレーンをenableに |
| + | io_out8(0x03ce, 0x0700); //色番号7をセット |
| + | io_out8(0x03ce, 0xff08); //描画データのマスク |
| + | |
| + | for ( i = 0; i <= 512*2; i++){ |
| + | p[i] = 0x6; |
| + | } |
| + | |
| + | #ref(q0.jpg) |
| + | |
| + | 値をいろいろ変化させても白い色の点しか書けない。なにか致命的なミスや勘違いでもあるのかと、かなり迷宮のラビリンスですた・・・ |
| + | |
| + | ''解決!!'' っというか、問題点が見つかった。 |
| + | |
| + | なんのことはない! はりぼてのio_out8は伊達に''8''に字が付いていない。これは8バイトしかアクセスしないんじゃねーかよ!!! ・・・・orz・・・ |
| + | |
| + | 見たほうが早いよね? 同じ目的のコードだけど、これで解決!! |
| + | |
| + | io_out8(0x03ce, 0x05); //書き込みモードを0に |
| + | io_out8(0x03cf, 0x00); |
| + | |
| + | io_out8(0x03ce, 0x01); //全プレーンをenableに |
| + | io_out8(0x03cf, 0x03); |
| + | |
| + | io_out8(0x03ce, 0x00); //色番号7をセット |
| + | io_out8(0x03cf, 0x07); |
| + | |
| + | io_out8(0x03ce, 0x08); //描画データのマスク |
| + | io_out8(0x03cf, 0xff); |
| + | |
| + | for ( i = 0; i <= 512*2; i++){ |
| + | p[i] = 0x6; |
| + | } |
| + | #ref(q1.jpg) |
| + | |
| + | うーーーん・・・。今思えばかなりマヌケな話だなぁ我ながら・・・(^^; |
| + | まあ、とにもかくにも変化が起こり、レジスタにちょっかいを出すと効果が出るというところまで漕ぎ着けた。後はさっそく、各プレーンの意味等を実験してみよう!! |
| + | |
| + | COLOR(red){・・・ラッチは?・・・・ラ・・・ラッチはあぁぁぁぁ????・・・・} |
| + | |
| + | **まずはモード3に絞ってみるか・・・ [#ye165799] |
| + | [[OS-Wiki:http://community.osdev.info/index.php?VGA]]によると、もっとも有用なモードとある。(OSASKでも多様されているらしい) |
| + | |
| + | とりあえずこのモードに絞っていろいろ試してみよう。 |
| + | |
| + | -まずはEnable Set/Resetについて。 |
| + | --プレーン0のみ・プレーン1のみ・・・・プレーン2と3のみ・・・等等と実験してみたが変化はない・・・ |
| + | ''って!!!!'' これはモード0のみしか効かないのか・・・(最初によく読もう) |
| + | |
| + | -次はBit Mask (描画マスク)ね |
| + | --これはまあわかるね。読んで字のごとくだし・・・(^^ |
| + | |
| + | -次にSet/Reset (ラッチとの演算に関するレジスタ)。 |
| + | --ここに色をセットするとその通りの色が書き込まれる・・・でいいのかな?? |
| + | --ここは頭4ビットが無視されるんだから事実上0x0〜0xFまでの値しか指定できない。つまり、16色つーことかな。 |
| + | ---0x00:COLOR(black){黒} |
| + | ---0x01:COLOR(#0000A8){暗い青} |
| + | ---0x02:COLOR(#00A800){暗い緑} |
| + | ---0x03:COLOR(#00A8A8){暗い水色} |
| + | ---0x04:COLOR(#A80000){暗い赤} |
| + | ---0x05:COLOR(#A800A8){暗い紫} |
| + | ---0x06:COLOR(#A85700){暗い黄色} |
| + | ---0x07:COLOR(#A8A8A8){暗い灰色} |
| + | ---0x08:COLOR(#575757){さらに暗い灰色} |
| + | ---0x09:COLOR(#5757FF){青} |
| + | ---0x0a:COLOR(#57FF57){緑} |
| + | ---0x0b:COLOR(#57ffff){水色} |
| + | ---0x0c:COLOR(#FF5757){赤} |
| + | ---0x0d:COLOR(#FF57FF){紫} |
| + | ---0x0e:COLOR(#FFFF57){黄色} |
| + | ---0x01:COLOR(black){白} |
| + | |
| + | **そんなにややこしくない・・・のかな?? [#n84ce344] |
| + | うーーーーーん・・・・ |
| + | |
| + | ここまでやってみたけど、少なくともモード3なら、そんなにバカみたいにややこしいわけではないのかなぁ・・・ |
| + | |
| + | ちょっと試しに、harib01g で同じ動作をするbox関数を作ってみるか・・・ |