VESA General Timing Formula (GTF)とCoordinated Video Timings(CVT) anchor.png

PCのグラフィックス規格を作成しているVESAに説明があります。

Page Top

VBE関係情報 anchor.png

  • CRTInfoBlock
    CRTCInfoBlock		struc
    
    HorizontalTotal		dw	?	; Horizontal total in pixels
    HorizontalSyncStart	dw	?	; Horizontal sync start in pixels
    HorizontalSyncEnd	dw	?	; Horizontal sync end in pixels
    VerticalTotal		dw	?	; Vertical total in lines
    VerticalSyncStart	dw	?	; Vertical sync start in lines
    VerticalSyncEnd		dw	?	; Vertical sync end in lines
    Flags			db	?	; Flags (Interlaced, Double Scan etc)
    PixelClock		dd	?	; Pixel clock in units of Hz
    RefreshRate		dw	?	; Refresh rate in units of 0.01 Hz
    
    Reserved		db	40 dup (?)  ; remainder of ModeInfoBlock
    CRTCInfoBlock		ends

  • CRTInfoBlock->Flags の値と意味について
    ビット番号ビット位置フラグ(を立てた時)の値と意味
    00001bダブルスキャンを有効にする(グラフィックモード)
    10010bインタレースモードにする(グラフィックモード)
    20100b水平同期信号の極性
    0ポジティブ(+)
    1ネガティブ(-)
    31000b垂直同期信号の極性
    0ポジティブ(+)
    1ネガティブ(-)

  • 画面モード設定とフラグの値と意味について
    ビット番号ビット位置ビットの値の意味
    8~00000 0001 1111 1111b画面モード番号(6Ahや102hなど)
    10~90000 0110 0000 0000b予約済(0にする)
    110000 1000 0000 0000bリフレッシュレート
    0既定のリフレッシュレート
    1CRTCInfoBlockで算出されるリフレッシュレート
    13~120011 0000 0000 0000b予約済(0にする。VBE/AF用)
    140100 0000 0000 0000bフレームバッファの設定
    0ウィンドウ
    1リニア/フラット
    151000 0000 0000 0000bフレームバッファのクリア
    0する
    1しない

  • ディスプレイタイミング
    画面外のディスプレイ信号について                                             
    ━━━━━━━━━━━━━━━━━━━━                   H.Active                  
                  H.Active                   :  H.Backporch ├─────┤ H.Frontporch  
               ├─────┤                :           ├-┤          ├-┤            
             ┬┌─────┐──┐┬        :           ┌────────┐┬ ┬V.Back 
             ││//////////│    ││        :         ┬│ ┌─────┐ ││ ┴ porch 
     V.Active││/表示画面/│    ││        : V.Active││ │//////////│ ││          
             ││//////////│    ││V.Total :         ││ │/表示画面/│ ││V.Total   
             ┴└─────┘    ││        :         ││ │//////////│ ││          
               │ ブランク・Sync ││        :         ┴│ └─────┘ ││ ┬V.Front
               └────────┘┴        :           └────────┘┴ ┴ porch 
               ├────────┤          :           ├────────┤            
                      H.Total                :                  H.Total                  
    
    VBE用ディスプレイタイミングのイメージ図
    ━━━━━━━━━━━━━━━━━━━━━━━━
             ライン                 フロント         バック              
            描画開始                 ポーチ          ポーチ              
               ↓         ))       ├───┤    ├───┤                           
               ┌────((────┐      ┌───┐      ┌──────  ※信号の高低 
       信号    │//////// )) //////│      │ 同期 │      │(次のライン)    はイメージ 
             ─┴…………((…………┴───┘ 信号 └───┴………………    です。     
    ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
               ├────-))-───────────────┤ ← HorizontalTotal        
               ├────((────┤                         ← HorizontalActive       
               ├────-))-───────┤                 ← HorizontalSyncStart    
               ├────((────────────┤         ← HorizontalSyncEnd      
       ※垂直方向も同様に。

Page Top

GTFやCVTなどをVESA BIOS Extensionで設定する方法 anchor.png

いわゆるMS-DOS等リアルモードOSから,VGA BIOSを呼び出して設定する方法です。
VGA(VESA)BIOSの都合上,VBE3.0以上の必要があります。

Page Top

基本 anchor.png

VBEファンクション02hを使用して画面モードを切り替える。

例:	mov	bx, 0102h		; ←画面モード番号
	mov	ax, 4F02h		; ←Set VBE Modeファンクション
	int	10h

こんな感じにする。

Page Top

既定の画面モードのリフレッシュレートを変更する anchor.png

画面モードを設定する際に該当するビットを立て,リフレッシュレートを定義した構造体のポインタを指定して切り替える。
これで設定するとディスプレイに送られる信号はGTF基準となる。

例:	mov	bx, 0902h		; ←モード番号とフラグ
	push	ds
	pop	es
	mov	di, offset [CRTCInf]	; ES:DI←構造体へのポインタ
	mov	ax, 4F02h		; ←Set VBE Modeファンクション
	int	10h

;	(中略)
CRTCInf	CRTCInfoBlock	<1904,1520,1672,934,903,909,4,133420000,7502,0>

構造体(CRTCInfoBlock)については上記参照。

CRTCInfoBlock->RefreshRateはBIOSでは使用されず、HorizontalTotalとVerticalTotal、PixelClockから算出されたリフレッシュレートが使用されるようです。
リフレッシュレートの計算方法は以下のようになっています。

                                                  PixelClock
                        refreshRate = ───────────────── 
                                        HorizontalTotal×VerticalTotal

例えば1024x768の画面モードではHTotalが1360、VTotalが802、正規化されたピクセルクロックが65MHzだとすると、このようになります。

                                             65,000,000
                             refreshRate = ─────── = 59.59 Hz
                                             1360× 802


Page Top

既定の画面モードにない解像度設定に変更する anchor.png

画面モード番号に81FFhを使用して画面モードを切り替えるんだと思う。
上記と同様に構造体にあらかじめ信号のパラメータをセットしておき,そのアドレスをES:DIに入れて呼び出すのかな。

Page Top

その他 anchor.png

なし


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 1191, today: 1, yesterday: 1
Last-modified: 2020-12-26 (Sat) 16:07:33 (JST) (816d) by yuji