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

なし


新しくコメントをつける

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

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1596, today: 1, yesterday: 1
最終更新: 2020-12-26 (土) 16:07:33 (JST) (1188d) by yuji