Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > аппаратный скроллинг экрана


Автор: Ruterian 6.3.2005, 21:56
Решил на досуге сравнить время, затрачиваемое на выполнение разных участков программы (текстовый CGA режим). Пришел в ужас. Оказывается, самым длительным является построчный скроллинг экрана вверх, около 150-300 мкс на пне четвертом, 2,53 ГГц. Поскольку текст выводится непрерывно, возникает нерациональный расход времени. Например, при скане поверхности HDD это приводит к лишним минутам при больших объемах. Оптимизация алгоритма ничего не дала. Да и нечего тут оптимизировать:

Код

       mov ax,0b800h
       mov ds,ax
       mov es,ax
       mov si,160
       xor di,di
       mov cx,(80*24)
       rep movsw


В тоже время в разных источниках то и дело читаешь "аппаратный скроллинг", "средствами видеоконтроллера" итд. Как это делается, никто толком не объясняет. Помогите пожалуйста разобраться.

Автор: Chingachguk 6.3.2005, 23:01
Навскидку лично я ничего такого не знаю, но вот приходит такая мысль: просто потрассировать BIOS, он-то наверняка знает, как это делать. Давным-давно я таким образом написал русификатор - подсмотрел у BIOS загрузку символов в знакогенератор. Например (Interrupt list by Ralf Brown):

Цитата
--------V-1006-------------------------------
INT 10 - VIDEO - SCROLL UP WINDOW
AH = 06h
AL = number of lines by which to scroll up (00h = clear entire window)
BH = attribute used to write blank lines at bottom of window
CH,CL = row,column of window's upper left corner
DH,DL = row,column of window's lower right corner
Return: nothing
Note: affects only the currently active page (see AH=05h)
BUGS: some implementations (including the original IBM PC) have a bug which
  destroys BP
the Trident TVGA8900CL (BIOS dated 9/8/92) clears DS to 0000h when
  scrolling in an SVGA mode (800x600 or higher)
SeeAlso: AH=07h,AH=12h"Tandy 2000",AH=72h,AH=73h,AX=7F07h,INT 50/AX=0014h

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)