Программисткое руководство к ZX-Spectrum`y 1969 г.

Глава 4 - основы видео. Адаптеры дисплеев. Видеопамять SGA. Управление дисплеем.



                   Глава 4. Основы видео

    Для многих  людей дисплей и есть компьютер.  О программе
некоторые "гении" судят исключительно по качеству "картинки"
на экране.  В этой главе мы расскажем о том, как формируется
изображение и покажем как использовать это на практике.

                   4.1 Адаптеры дисплеев

    Большинство пользователей компьютеров семейства Спектрум
сталкиваются с таким понятием, только когда читают журналы о
IBM PC. 99% имеющий стандартных Спектрум даже не подозревают
о существовании других экранов.  Всем им суждено работать со
стандартным экраном.
    На текущий момент мне известны следущие типы адаптеров:

Стандартный  адаптер
(Standart Graphics Adapter SGA)
Улучшенный адаптер
(Enhanced Graphics Adapter EGA)
Моноадапер Профи
(Profi-mono Graphics Adapter PMGA)
Цветной адаптер Профи
(Profi-color Graphics Adapter PCGA)
Адаптер АТМ
(ATM-Turbo Graphisc Adapter AGA)

    Все они отличаются своими характеристиками. Наилучшим из
них является EGA.  Все эти адаптеры являются графическими, в
них нет такого принципиального режима как текстовой (за иск-
лючением АEGA)

    В последнее  время  появилась  информация о АТМ-ТУРБО 2,
где имеется улучшенный адаптер AEGA  (ATM-Turbo  2  Enhanced
Graphics Adapter). Он имеет характеристики как у EGA+AGA, но
кроме всего этого имеет текстовой режим.  К сожалению  я  не
имел общения с ним, поэтому утверждать точно не буду. Вот их
характеристики:

SGA
256*192 2 цвета из 8*2 для 8*8 точек.
EGA    
640*350 16 цветов для каждой точки
PMGA   
512*240 2 цвета на весь экран
PCGA   
512*240 8 цветов+мерцание на 8 точек
512*240 16 цветов на 8 точек
AGA    
640*200 8 цветов для каждой строки
320*200 16 цветов для каждой точки

    Так как в настоящее время распростроннен SGA, поэтому мы
и будем рассмотривать только его.

                    4.2 Видеопамять SGA

    Видеопамять, или,  точнее, оперативная память, использу-
ется для хранения изображения,  физически расположена вместе
с остальными компанентами на плате компьютера. Логически эта
память является частью  адресного  пространства  процессора.
Для  этого зарезервирована область памяти,  начиная с адреса
#4000.  Область логически разделена на  две  части:  область
черно-белого  изображения и область атрибутов - цветов.  Об-
ласть черно-белого изображения  и  область  атрибутов  очень
сложна,  поэтому  мы рассмотрим ее подробно.  Начинается об-
ласть с #4000 до #5AFF,  что дает 6144 байта. Спектрумовский
SGA  экран разделен на знакоместа (тексел от TEXt ELement) -
области в виде квадратиков 8 на 8 точек.  Для каждого знако-
места свои атрибуты. На экране 24 ряда по 32 символа в ряду:
всего 768 атрибутов. Каждые 8 точек храняться в одном байте,
т.е  на хранение изображения 1 знакоместа тратиться 8 байт +
1 байт знакоместа 768*8, что и дает 6144.

    Вообще существует два способа изучить структуру экранной
области ZX Spectrum.  Один - рассмотреть как грузиться экран
с кассеты, другой это внимательно прочить данныю главу. Если
вы выбрали последнее крайне рекомендую набирать все  примеры
на клавиатуре, это будет способствовать большему запоминанию
материала.

    Экран начинается с адреса  16384.  Попробуетм  закрасить
крайний левый верхний угол. Дадим ряд команд:

LD A,%11111111           LET A=255
LD (#4000),A             POKE 16384,A
LD A,%00001111           LET A=15
LD (#4000),A             POKE 16384,A
LD A,%10101010           LET A=170
LD (#4000),A             POKE 16384,A

    После этого примера вы наверно  убедились,  что  биты  в
байте соответствуют пикселям на экране.

LD (#4001),A
LD (#4002),A
.....  и так далее

    Вы будете изменять содержимое экрана,  двигаясь по гори-
зонтали или говоря точнее,  вы будете модифицировать нулевые
линии в нулевом знакоместе нулевого ряда.  Увеличивая  адрес
вы  перемещаетеся вправо по экрану,  ходясь в том же нулевой
линии.  Т.к.  столбцов 32 то попробуем пропустить 32 байта и
занести туда значение: LD (#4000+#20),A

    Но в результате мы получили нечто  иное  чем,  следовало
ожидать. Изменилась нулевая линия в первом ряду. Чтобы изме-
нить первую линию в нулевом  знакоместе  следует  пропустить
256 байт.

    Теперь вы  убедились  в сложности экрана.  Чтобы немного
отдохнуть можете позагружать  картинки,  пройти  72  комнату
EXOLON'а и выпить 2-3 кружечки кофю,  после чего можете про-
должить сие чтиво.

    На первый взгляд такое расположение экранной области не-
лепо.  Но  на  практике  это облегчает работу (шутка) - надо
толкьо все понять.

    Итак, вернемся к экрану.  Экрана также разбит на  трети.
Отсчет в каждой трети начинается заного.  Каждая треть начи-
нается с адресов:

#4000
#4800
#5000

    В кодах адрес как правило храниться в  регистровой  паре
HL. Полный адрес можно представить в виде:


              -------H------¬ -------L------¬
             -+T-T-T-T-T-T-T+T+T-T-T-T-T-T-T+¬
             ¦0¦1¦0¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
             L-+-+-+T+T+T+-+T+T+-+T+T+-+-+-+T-
                    LT- L-T-- L-T-- L---T----
                     1    2     3       4
1  Номер трети
2  Смещение внутри знакоместа
3  Номер ряда
4  Номер столбца

    Чтобы сместиться вправо дадим команду INC L. Чтобы пере-
меститься  по вертикали в одном знакоместе дадим команду INC
H.  Когда вы пройдете все знакоместо и выйдете  за  границу,
номер  столбца  обнулиться,  а  номер рада увеличиться.  Все
просто, пока дело не доходит до других третей.

    На практике часто на экране графика используется  только
на одной трети. КОнечно она есть и на других третях, но чаще
статическая, не подвижная.

    Большую теоретическую информацию вы найдете в любой  ли-
тературе по Спектруму, а нам пора перейти к атрубутам, пред-
варительно пройдя уровень ZYNAPS'а

    Атрибуты каждого  знакоместа  занимают  1  байт,  причем
структура их очень проста. Байты распологаются слева направо
и сверху вниз. Адрес можно вычислить как 22588+32*Y+X.
    На ассемблере это деляется следующим образом:

LD D,X
LD E,Y

LD H,0
LD L,Y
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD A,E
ADD A,L
LD L,A
JR NC,$+3
LD DE,#5800
ADD HL,DE

    В результате чего мы получими в регистре HL адрес  байта
в памяти.  У нас еще остался бордур.  На него конечно нельзя
выводить графику,  но можно менять цвет. Для этого код цвета
нужно выдать в порт #00FE.

    Цвета кодируются следующим образом:

0   черный
1   синий
2   красный
3   фиолетовый или малиновый
4   зеленый
5   голубой
6   желтый
7   белый

    Следует вспомнить,  что в "128К" имеется два  экрана.  В
ПЗУ  нет  подпрограмм,  которые бы работали с новым экраном.
Структура его такая же как и старого,  адреса его расположе-
ния другой (#C000,  7 страница).  Для получения адреса можно
выше указанной схемой для регистра HL, с некоторым отличием.
Старший бит регистра Н быдет указывать номер экрана.

    Для активизации  нового  экрана следует активизировать 7
страницу и установить бит 3 порта #7FFD  или  ячейки  #5B5C,
после чего можно вернуть прежнюю страницу.

    Для активизации  старого  экрана достаточно сбросить бит
#7FFD. И напоследок главы совет: полезно изменять координаты
печать по X не с помощью команды INC L,  а с помощью: LD A,L
ADD A,1 LD L,A

    Это конечно несет потерю в 4 байта,  но иммет  некоторые
плюсы,  связанные с флагами. Вообще, на пактике часто приме-
няется следующий прием: в памяти граняниться таблица с адре-
сами  всех  строк экрана и адрес можно выбирать как смещение
внутри таблицы.

                  4.3 Управление дисплеем

    Управлять экраном дисплея, как и выполнять другие опера-
ции на компьютере, можно тремя способами:

 - используя функции языка программирования
 - используя служебные функции DOS или ROM-BIOS
 - управляя аппаратурой напрямую через память или порты

    Служебные функции  для  работы с изображениями доступные
через языки программирования,  автоматически помящяют данные
в видеопамять ROM-BIOS имеет множество очень мощьных функций
выполняющих почти все операции,  необходимые  для  генерации
вывода на экран.

    Выбирая прямой  вывод  на  экран мы должны отдавать себе
отсчет в том,  что при этом мы может мешать другим системам,
например работающими с окнами.  Тем не менее, многие сущест-
вующие программы созданные для ZX-Spectruma,  генерируют не-
посредственный вывод информации на экран,  настолько многие,
что это уже стало стандартным способом вызова. Все понимают,
что это не хорошо, но все так и поступают.

    Вообще прямой  вывод  следует  применять  только когда в
этом есть особая необходимость.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Аперативчик - Об управлении в обoлочке DEJA VU и о содержании 4 номера журнала
PSC - описание новой версии музыкального редактора Pro Sound Creator 1.07
Дискуссия - "LZB о демосцене и о всём..."
Почта - письма в газету от: Vlаdimir Kаrреnkо, Nikоlаj Аmоsоv, Вlаck Cаt, C-Jеff, Vlаdimir Оstаlcеv, Nickоlау Аbdrаfikоv, Sеrgеу Мurаshоv, Vlаdimir Ivаnnikоv.
Фантастика - крыса из нержавеющей стали (часть 3).

В этот день...   23 апреля