Q:> 2.2.1 Как писать/читать напрямую в видеопамять (в т. ч. и в DPMI)
A:> Писать напрямую в видео память намного быстрее и удобнее, чем
выводить символы на экран через БИОС. Строго говоря, процедура
Write (WriteLN) тоже может писать в видео память напрямую. Тем
не менее обычно лучше пользоваться своими процедурами для
вывода символов. В реале видео память располагается начиная с
$B800:0000. Hа каждый символ отводится 2 байта: сам символ и
его атрибуты. Таким образом на экран 80*25 нужно 4000 байт. В
DPMI никаких принципиальных отличий нет. Просто вместо адреса
$B800:0000 нужно писать типизированную константу SegB800,
которая будет указывать при прогоне на начало видеопамяти.
Таким образом определив следующий массив
var
Screen: Array[1..2000,1..2] of byte absolute $B800:0;
мы получаем доступ к любому символу и его атрибуту по порядковому
номеру символа. Т.е. для точки (1,1)
Screen[1,1] будет ASCII код того, что на экране, а
Screen[1,2] - его атрибуты.