Устранения мерцания при изменении палитры VESA 2.0

Тема в разделе "WASM.BEGINNERS", создана пользователем Skycorner, 2 июн 2007.

  1. Skycorner

    Skycorner New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    21
    Подскажите, возможно ли как-то синхронизировать изменение палитры (загрузку массива в DAC-регистры) с обратным ходом луча кинескопа в режиме VESA? Каким образом вообще в VBE делают плавное затенение картинки без мерцания? Заранее спасибо
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Все просто. Палитру надо менять только когда лучь завершил ход по экрану и начинает обратное движение по кадру.
    Нужно дождаться пока 3 бит не будет равным 1
    {ожидание вертикально обратного хода луча}
    Код (Text):
    1. procedure WaitVerticalRetrace;
    2. begin
    3.    while (port[$3da] and 8) = 0 do;
    4. end;
    5.  
    6. @PP:
    7. mov dx,03DAh
    8. in al,dx
    9. test al,8
    10. jz @PP
    Если ты работаешь с VESA то лучше отказаться от политры с 256, а перейти к полноцеветным изоброжениям. А затемнения делаеться перерисовкой с плавным изменением значений RGB пикселя.
     
  3. Skycorner

    Skycorner New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    21
    Большое спасибо, как раз то, что нужно
     
  4. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Паскаль.... Было бы лучше так, и эта процедура задержит в случае если вызвана несколько раз пока стоит бит обратного хода.
    Код (Text):
    1. PROC WaitVSync NEAR                                                    
    2.                 push    AX                                            
    3.                 push    DX                                            
    4.                 mov     DX,03DAh ;регистр статуса EGA                  
    5. @@WaitNotVSyncLoop:                                                    
    6.                 in      AL,DX                                          
    7.                 and     AL,08h ;выделяем бит вертикальной синхронизации
    8.                 jnz     @@WaitNotVSyncLoop                            
    9. @@WaitVSyncLoop:                                                      
    10.                 in      AL,DX                                          
    11.                 and     AL,08h ;выделяем бит вертикальной синхронизации
    12.                 jz      @@WaitVSyncLoop                                
    13.                 pop     DX                                            
    14.                 pop     AX                                            
    15.                 ret                                                    
    16. ENDP WaitVSync
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Здесь ещё вариант c ожиданием через биос