フルカラー化

Bayside2006-10-13


オープンソースカンファレンス(OSC)も迫ってきたので、BayOS の目玉機能として、フルカラー(ハイカラー)化をやってみました。

基本的なフルカラー(ハイカラー)化自体は、以下のような4行の修正で完了ですが、はりぼてOS自体は、256色固定のコードがたくさん混じっているため、その修正が結構大変です。

具体的には http://haribote.org/index.php?advance%2FVESA にあるような修正を行いました。

; haribote-os boot asm
; TAB=4

[INSTRSET "i486p"]

VBEMODE EQU  0x111   ; 640 x  480 x 16bitカラー
; (画面モード一覧)
; 0x100 :  640 x  400 x 8bitカラー
; 0x101 :  640 x  480 x 8bitカラー
; 0x103 :  800 x  600 x 8bitカラー
; 0x105 : 1024 x  768 x 8bitカラー
; 0x107 : 1280 x 1024 x 8bitカラー
; 0x111 :  640 x  480 x 16bitカラー
; 0x114 :  800 x  600 x 16bitカラー
; 0x117 : 1024 x  768 x 16bitカラー
; 0x11A : 1280 x 1024 x 16bitカラー

中略

; 画面モード情報の確認

  CMP  BYTE [ES:DI+0x19],16 ; 8->16
  JNE  scrn320
  CMP  BYTE [ES:DI+0x1b],6  ; 4->6
  JNE  scrn320
  MOV  AX,[ES:DI+0x00]
  AND  AX,0x0080
  JZ  scrn320   ; モード属性のbit7が0だったのであきらめる

; 画面モードの切り替え

  MOV  BX,VBEMODE+0x4000
  MOV  AX,0x4f02
  INT  0x10
  MOV  BYTE [VMODE],16 ; 8->16 画面モードをメモする(C言語が参照する)
  MOV  AX,[ES:DI+0x12]
  MOV  [SCRNX],AX
  MOV  AX,[ES:DI+0x14]
  MOV  [SCRNY],AX
  MOV  EAX,[ES:DI+0x28]
  MOV  [VRAM],EAX
  JMP  keystatus

ちなみに、フルカラー(ハイカラー)化してしまうと、はりぼてOS専用アプリは色がおかしくなってまともに動かなくなりますので、ご注意ください。