Board logo

标题: 设置120赫兹屏幕刷新率代码 [打印本页]

作者: blackoil     时间: 2006-11-5 11:24    标题: 设置120赫兹屏幕刷新率代码

SetVESA_Mode:        mov ax,0x4F02
                mov bx,[VideoMode]
                push ds
                pop es
                mov di,CRTC
                int 0x10
                int 0x20

VideoMode  dw      VESA_Mode_640x480x16M | VESA_Bit_LFB | VESA_Bit_CRTC
CRTC                dw        848
                dw      680
                dw      744
                dw        518
                dw        483
                dw        487
                db        0
                dd        52500000      ;pixel clock
                dw        12000            ;120hz refresh rate
times        40        db        0
作者: zyl910     时间: 2006-11-5 13:01
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
作者: zyl910     时间: 2006-11-5 13:04
我一直不清楚 水平/垂直总量、回扫时间、消隐时间 这些参数是怎么推算出来的

望大虾指点
作者: blackoil     时间: 2006-11-5 22:45
在google输入 Generate mode timings cvt.c 可以找到

http://www.uruk.org/~erich/projects/cvt/cvt.c

电子束回扫需要时间,单位用像素计量。比所设分辨率大的数值包括回扫的时间
作者: zyl910     时间: 2006-11-6 05:58
Thanks!

研究中
作者: x2wei     时间: 2006-11-8 21:06    标题: 楼上的兄弟搞清了写个小程序出来,给大家试试呀:)共同学

楼主写的asm有点不明白:(
VideoMode  dw      VESA_Mode_640x480x16M | VESA_Bit_LFB | VESA_Bit_CRTC ?
times        40        db        0 ?
作者: zyl910     时间: 2006-11-8 22:07
对于:
CRTC                dw        848
                dw      680
                dw      744
                dw        518
                dw        483
                dw        487
                db        0
                dd        52500000      ;pixel clock
                dw        12000            ;120hz refresh rate
times        40        db        0

这个是CRTCInfoBlock结构:
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



至于
VideoMode  dw      VESA_Mode_640x480x16M | VESA_Bit_LFB | VESA_Bit_CRTC

这是VBE显示模式,估计这些常数是:
VESA_Mode_640x480x16M = 112h
VESA_Bit_LFB = 4000h
VESA_Bit_CRTC = 0800h


这个程序利用了VBE 3.0的一些特性:

  Quote:
Function 02h  - Set VBE Mode

Input:    AX  =  4F02h      Set VBE Mode
          BX  =  Desired    Mode to set
                 D0-D8   =  Mode number
                 D9-D10  =  Reserved (must be 0)
                 D11 = 0    Use current default refresh rate
                     = 1    Use user specified CRTC values for refresh rate
                 D12-13     Reserved for VBE/AF (must be 0)
                 D14 = 0    Use windowed frame buffer model
                     = 1    Use linear/flat frame buffer model
                 D15 = 0    Clear display memory
                     = 1    Don't clear display memory
         
           ES:DI=  Pointer to CRTCInfoBlock structure

Output:   AX  =  VBE Return Status

Note: All other registers are preserved.

The CRTC information block has the following structure:

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


The Flags field defines the following flags that modify the operation of the mode as follows:


D0  =  Double Scan Mode Enable
    0 =  Graphics mode is not double scanned
    1 =  Graphics mode is double scanned
D1  =  Interlaced Mode Enable
    0 =  Graphics mode is non-interlaced
    1 =  Graphics mode is interlaced
D2  =  Horizontal sync polarity
    0 =  Horizontal sync polarity is positive (+)
    1 =  Horizontal sync polarity is negative (-)
D3  =  Vertical sync polarity
    0 =  Vertical sync polarity is positive (+)
    1 =  Vertical sync polarity is negative (-)

VBE 3.0:
http://www.vesa.org/public/VBE/vbe3.pdf
作者: blackoil     时间: 2006-11-12 05:53
我用了自己的编译器的语法
times 40 db 0 就是 40 个字节的0