Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 15:40   #1
Yana_
 
Регистрация: 16.10.2010
Сообщений: 5
По умолчанию Вывод линии данных в режиме VGA/EGA на Pascal

Здравствуйте. Помогите, пожалуйста разобраться в данной процедуре:
Код:
rocedure ShowEGA (Y: integer);

{ Put a line of EGA (or VGA) data on the screen }
{ In Turbo Pascal, a '$' means the number is hexadeximal. }

var
   i, j, l, m, t: integer;
   EGAplane: integer;
   EGAscreen: array [0..32000] of byte absolute $A000:$0000;

begin
EGAplane := $0100;                       { the first plane to update }
PortW [$3CE] := $0005;                   { use write mode 0 }

{ PortW [$3CE] := $0005;      does port I/O by words. It is the same as:

  Out 03CEh,05h
  Out 03CFh,00h
}

t := (Header.Xmax - Header.Xmin + 1);    { width in pixels }
m := t and 7;                            { left over bits }

l := (t + 7) shr 3;                      { compute number of bytes to display }
if (l >= 80) then
   begin
   l := 80;                              { don't overrun screen width }
   m := 0;
   end;

if (m <> 0) then
   m := $FF shl (8 - m)                  { m = mask for unseen pixels }
else
   m := $FF;

for i := 0 to Header.Nplanes-1 do
   begin
   j := i * Header.Bytes_per_line_per_plane;
   t := j + l - 1;
   PCXline [t] := PCXline [t] and m;           { mask off unseen pixels }

   PortW [$3C4] := EGAplane + 2;               { set plane number }
   Move (PCXline [j], EGAscreen [Y * 80], l);
   EGAplane := EGAplane shl 1;
   end;

PortW [$3C4] := $0F02;                         { default plane mask }
end;   { ShowEGA }
Я не могу понять :
1) В var оглашение массива EGAScreen что это за тип такой?
2)Что за коды присваиваются портам? Для чего?
3) if (m<>0) then
m:=$FF shl(8-m)
else
m:=$FF.

Последний раз редактировалось Yana_; 07.12.2010 в 15:43.
Yana_ вне форума Ответить с цитированием
Старый 07.12.2010, 17:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
что это за тип такой?
Это так называемые абсолютные массивы.
т.е. ячейки этого массива будут располагаться в памяти на четко указанном адресе. В данном случае это $A000:$0000 - т.е. массив этот будет иметь доступ к ячейкам видеопамяти в графическом режиме (если не опшибаюсь).
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.12.2010, 23:58   #3
Yana_
 
Регистрация: 16.10.2010
Сообщений: 5
По умолчанию

Большущее спасибо! Вы меня просветили)
Yana_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Провод HDMI или VGA ? Fulit Компьютерное железо 13 16.08.2010 20:20
EGA 200*400 4 цветный режим Neuroasper Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 08.01.2010 23:14
Стандартный VGA драйвер Basshunter Компьютерное железо 2 06.10.2009 13:04
Работа с файлами. Вывод в Граф режиме. Паскаль. HITMAN 09 Помощь студентам 8 23.04.2009 20:36
Как организовать вывод сообщений программой в VCL режиме Delphi? Evgenii Помощь студентам 10 28.07.2008 11:28