// Video Example //Scout equals _VideoMode = 0449h, _Columns = 044Ah, _Rows = 0484h, _VideoOffset = 044Eh, _VideoPage = 0462h MODEL Tiny, Pascal .ORG 100h PROGRAM VExample .LOCALS _@ goto Initialize bytes Flags = 00000000b bytes VideoPage data Columns, Rows, VideoOffset ddata OldCursor // [ Куча всего ] (proc Main()[ds,es,ax,bx,cx,dx] push cs; pop ds es=ax=0 (if Flags.test.00001000b<> // VGA? // На VGA определяем текст или графика ah=al=.in.dx=03CEh dx=.out.al=6 al=.in.dx=+1 dx=-1 al=.test.1 dx=.out.al=ah if <> goto Error // Графика - не всплываем else al=BYTE PTR es:[_VideoMode] // Если не VGA, то режим должен быть или <=3, или 7 if al<=3 or al=7 goto ChkOK Error: ax=0E07h; 10h=.int; goto ExitMain if) ChkOK: // Определить параметры режима VideoOffset=ax=es:[_VideoOffset] ax=es:[_Columns]; Columns=ax=<1 al=es:[_Rows]; ah=0 // А вот на CGA и такое возможно - не надо пугаться! if al<24 then al=24 Rows=ax=+1 VideoPage=al=es:[_VideoPage] // Определение видео сегмента (т.к. монохромом может быть не только 7 режим) BYTE PTR es:[0463h]=.test.01000000b ax=0B800h if = then ax=0B000h es=ax // В ES - видео сегмент // Сохранить параметры курсора ah=03h; bh=VideoPage; 10h=.int WORD PTR OldCursor=cx; (WORD PTR OldCursor+2)=dx // Выключить курсор cx=2000h; ah=01h; 10h=.int // Выключить курсор (mouse) ax=2; 33h=.int .cld // [ Куча всего ] // Восстановить курсор cx=WORD PTR OldCursor; ah=01h; 10h=.int ah=02h; bh=VideoPage; dx=(WORD PTR OldCursor+2); 10h=.int // Включить курсор (mouse) ax=1; 33h=.int ExitMain: return proc) // [ Куча всего ] Initialize: // [ Куча всего ] // Проверить VGA или нет ax=1A00h; 10h=.int; if al=1Ah and bl=8 then Flags=.or.00001000b // [ Куча всего ] return