Элементарная графика 1993 г.

Элементарная графика на БЕЙСИКе - раскладка экрана. Раскладка алфавитно-цифрового экрана. Раскладка экрана в графике высокого разрешения. Раскладка экрана цветовых атрибутов. Основные проблемы при работе с графикой.


1.2 РАСКЛАДКА ЭКРАНА 1.2.1. Раскладка алфавитно-цифрового экрана. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Выше мы сказали, что на экране может быть до 22-х символь- ных рядов. Это не совсем так. На самом деле на полном экране может быть конечно до 24-х символьных рядов, но если Вы работа- ете на БЕЙСИКе, то подчиняетесь той программе-интерпретатору, которая "зашита" в ПЗУ компьютера, а она использует нижние 2 ряда для собственных сообщений к Вам. Это могут быть сообщения об ошибках или более приятное сообщение "O.K." о том, что все в порядке. Эти нижние два ряда называют системным окном, а верх- ние 22 строки - Главным экраном. -----------------------------------------¬ ¦ ¦ ¦ Главный экран ¦ ¦ ¦ ¦ (22 символьных ряда) ¦ ¦ ¦ ¦ ¦ ¦ ¦ +----------------------------------------+ ¦ Системное окно (2 символьных ряда) ¦ L----------------------------------------- Рис. 1 Вот поэтому-то и получается, что при работе на БЕЙСИКе Вам доступны только 22 символьных ряда или 176 точек по вертикали при работе с графикой. Если бы Вы работали в машинном коде, то могли бы отклю- читься от ПЗУ компьютера и тогда могли бы использовать все 24 символьных ряда или 192 точки по вертикали при работе с графи- кой высокого разрешения, но при этом не смогли бы получать со- общений от компьютера о ходе работы программы и любая ошибка приводила бы либо к "зависанию" программы, либо к ее сбросу. Возможен еще третий вариант, когда Вы работает в БЕЙСИКе, но для ускорения тех или иных операций над экраном применяете свои процедуры, написанные в машинном коде, а потом опять воз- вращаетесь в БЕЙСИК (такой подход мы рассмотрим в Главе 3). В этом случае Вам также лучше оставить нижние 2 ряда в покое и не трогать их. Есть еще и четвертый подход, когда написанная Вами про- грамма может быть полностью независимой от БЕЙСИКа и исполнена в машинном коде, но для упрощения изображения графических при- митивов (точек, линий, дуг, окружностей) Вы используете стан- дартные процедуры из ПЗУ, вызывая их по известному Вам адресу (приемы будут даны в Главе 2). В этом случае Вам лучше также не вторгаться в системное окно, поскольку эти процедуры могут проверять координаты позиции печати и не работать с тем, что для них не предусмотрено. Далее мы будем рассматривать экран состоящим как бы из 24-х рядов, помня, что на БЕЙСИКе нам доступны только 22. 0 ---------------------X------------¬ ¦ X ¦ ¦XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX¦ - РЯД ¦ X ¦ ¦ X ¦ ¦ X ¦ ¦ X ¦ 23 ¦ X ¦ L--------------------X------------- 0 ¦ 31 L-- СТОЛБЕЦ Рис. 2 Итак, экран состоит из 24-х символьных рядов по 32 символа в каждом. Ряды нумеруются сверху вниз от 0 до 23-го. С другой стороны, мы можем считать, что экран состоит из 32-х столбцов, которые нумеруются слева направо от 0 до 31-го. Таким образом, позиция с координатами (0,0) для экрана с низким разрешением находится в левом верхнем углу. Поскольку в одном ряду можно расположить до 32-х символов, то говорят, что в ряду содержится 32 знакоместа. ----T---T-----------T---T---------------------¬ ¦ X ¦ X ¦...........¦ X ¦ ................... ¦ L---+---+-----------+---+---------------------- 0 1 ¦ 31 L-- ЗНАКОМЕСТО Рис. 3 Рассмотрим теперь, что же представляет из себя каждое зна- коместо. Оно состоит из 8 линий по 8 точек в каждой. Эти точки называют пикселами (PICture CELL). ----T---T---T---T---T---T---T---¬ ¦ X ¦ X ¦ X ¦ X ¦ X ¦ X ¦ X ¦ X ¦ ------ ЛИНИЯ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ +---+---+---+---+---+---+---+---+ ¦ ¦ ¦ X ¦ ¦ ¦ ¦ ¦ ¦ L---+---+-T-+---+---+---+---+---- ¦ L----- ПИКСЕЛ Рис.4 Каждой линии каждого знакоместа на экране Вашего дисплея соответствует один байт в оперативной памяти Вашего компьютера. Таким образом, для того, чтобы запомнить всю информацию, содер- жащуюся в одном знакоместе, необходимо затратить 8 байтов опе- ративной памяти. С другой стороны, чтобы заполнить на экране одно знакоместо, должно быть прочитано содержимое восьми байтов памяти. Заметьте, что здесь мы уже не говорим ОПЕРАТИВНОЙ ПАМЯ- ТИ, поскольку читать можно не только из нее, но и из ПЗУ, а именно оттуда и берутся 8 байтов, когда на экране изображается стандартный символ, например буква "A". Эти 8 байтов, из кото- рых строится изображение символа, часто еще называют ШАБЛОНОМ символа. Если линия - это байт в памяти, то что же такое пиксел? Вы наверное знаете, что байт состоит из восьми битов, каждый из которых может быть включен или выключен (равен единице или ну- лю). Поэтому каждому пикселу в линии соответствует один бит в байте. Получается, что карта включения битов определяет рас- кладку включенных пикселов в линии. Если, например, байт равен 175, то его побитовая раскладка такова: 128 64 32 16 8 4 2 1 ----T---T---T---T---T---T---T---¬ ¦ 1 ¦ 0 ¦ 1 ¦ 0 ¦ 1 ¦ 1 ¦ 1 ¦ 1 ¦ L---+---+---+---+---+---+---+---- 175 = 128 + 32 + 8 + 4 + 2 + 1 Рис. 5 Совершенно естественно, что линия в знакоместе, которой соответствует байт 175, будет иметь вид: ----T---T---T---T---T---T---T---¬ ¦ X ¦ ¦ X ¦ ¦ X ¦ X ¦ X ¦ X ¦ L---+---+---+---+---+---+---+---- ¦ ¦ Выключенный пиксел --- L-- Включенный пиксел Рис. 6 Сравните Рис.5 и Рис. 6 и убедитесь в их соответствии. Здесь мы столкнулись с интересной особенностью. Дело в том, что для графических работ, в отличие от математических, неважно, какое значение имеет байт, важна его побитовая рас- кладка, то есть как бы обрабатываются они не в соответствии со своими значениями, а в соответствии со своей конструкцией. Обратите внимание на интересное обстоятельство, связанное с особенностью шаблонов стандартных символов. Дело в том, что для того, чтобы текст на экране хорошо читался, между символами должны быть какие-то зазоры. Поэтому в знакоместе 8 X 8 правая колонка пикселов у символов как правило выключена. А это зна- чит, что во всех линиях правый пиксел выключен и в соответству- ющих им байтах самый младший бит равен нулю (см.рис.5). Если же этот бит равен нулю, то байт будет иметь только четное значе- ние. Поэтому, если при просмотре машинного кода фирменных про- грамм Вы найдете последовательность из нескольких сотен четных байтов, то можно почти уверенно предположить, что здесь распо- ложены шаблоны шрифтового набора. Совсем нетрудно написать БЕЙСИК-программу для поиска, скажем, пятидесяти встретившихся подряд четных байтов и быстро определить, где может находиться шрифт (в этом случае нулевой байт тоже условно отнесем к четным). Остался еще неисследованным вопрос о том, какой цвет имеет включенный пиксел и какой цвет имеет на экране пиксел, который выключен. Укажем пока только, что включенный пиксел имеет цвет INK, а выключенный - цвет PAPER и вернемся к этому вопросу, когда будем заниматься цветом. 1.2.2. Раскладка экрана в графике высокого разрешения. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Тридцать два знакоместа по ширине экрана дают 256 (32 X 8) пикселов - такова ширина экрана в "высокой" графике. Двадцать четыре ряда по восемь пикселов в каждом знакомес- те дают нам 192 пиксела по вертикали, но поскольку нижние две строки в БЕЙСИКе недоступны, то считают, что предельный размер по вертикали равен 22 X 8 = 176 пикселов. За начало отсчета принимают левый нижний угол Главного эк- рана (обратите внимание на слово "Главного", то есть системное окно отбрасывается). 175 -----------------------------------------¬ ¦ . ¦ ¦ . Главный экран ¦ ¦ . ¦ ¦ . (176 точек по вертикали, ¦ ¦ . 256 точек по горизонтали) ¦ ¦ . ¦ 0 ¦ . .................................... ¦ +----------------------------------------+ ¦ Системное окно (2 символьных ряда) ¦ L- -- 0 255 Рис. 7 Таким образом, точка с координатами (0,0), если они заданы в пикселах, определяет левый нижний угол Главного экрана. Тот факт, что вертикальная координата в знакоместах отсчитывается сверху вниз, а в пикселах - наоборот снизу вверх иногда приво- дит к путанице начинающих программистов, впрочем с набором пра- ктики это быстро проходит. В заключение этого параграфа давайте для справки прикинем сколько байтов оперативной памяти необходимо для хранения пик- сельного (монохромного - без цвета) изображения всего экрана. Если на каждое знакоместо нам необходимо восемь байтов, то на экранный ряд - 32 X 8 = 256 байтов, а на весь экран - 24 X 256 = 6144 байта. 1.2.3. Раскладка экрана цветовых атрибутов. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Еще одной особенностью "Синклер"-совместимых компьютеров является необычный подход К.Синклера к вопросам, связанным с цветом. Дело в том, что если каждую точку красить в свой цвет, то оперативной памяти компьютера уже ни на что хорошее не останется. Поэтому им было принято гениальное решение - цвет сделать с низким разрешением. То есть для каждого знакоместа возможен только один цвет INK (для включенных пикселов) и один цвет PAPER (для выключенных). Иначе говоря, Вы не можете иметь в одном знакоместе более двух цветов одновременно. Что же это дало? Поскольку всего возможно только 8 цветов, то для задания цвета INK в одном знакоместе достаточно трех битов: Таблица 1 --------------------------------------------------¬ ¦ 0 = 000 - черный BLACK ¦ ¦ 1 = 001 - синий BLUE ¦ ¦ 2 = 010 - красный RED ¦ ¦ 3 = 011 - пурпурный MAGENTA ¦ ¦ 4 = 100 - зеленый GREEN ¦ ¦ 5 = 101 - голубой CYAN ¦ ¦ 6 = 110 - желтый YELLOW ¦ ¦ 7 = 111 - белый WHITE ¦ L-------------------------------------------------- Цвета были выбраны отнюдь не случайно, а исходя из тех соображений, что на экране черно-белого телевизора они должны во-первых хорошо различаться, как разные оттенки серого, а во-вторых, их яркость от черного до белого должна постепенно возрастать. Точно так же для задания 8 цветов PAPER нам тоже доста- точно трех битов на одно знакоместо. Если теперь каждому знако- месту отвести по одному байту для хранения параметров цвета (а в байте 8 битов), то остается еще пара свободных битов, один из которых отдан признаку яркости (BRIGHT), а другой - признаку мигания (FLASH). Таким образом, для каждого знакоместа может быть установлен свой цвет INK, свой цвет PAPER и свои режимы BRIGHT и FLASH. Эти четыре параметра называют цветовыми AТРИБУТАМИ. Использование атрибута BRIGHT эквивалентно расширению палитры цветов в два раза, то есть компьютер имеет как бы 16 цветов. Оценим теперь расход памяти на цветовые атрибуты: 24 ряда по 32 знакоместа = 768 байтов - совершенно ничтож- ный расход памяти для такого богатства красок, которое мы не- редко видим в хороших игровых программах. После выхода первых "Спектрумов" не было пределов востор- женным отзывам. Добиться имитации многоцветной графики высокого разрешения с таким ничтожным расходом памяти - это великое достижение (за которым конечно скрывается иллюзия, т.к. цвет не имеет высокого разрешения, а только имитирует его за счет высокого разрешения пиксельной графики). Общий расход памяти на весь экран с цветом составляет: 6144 + 768 = 6912 байтов, - что очень и очень немного по сравнению с машинами конкурентов. За этим фактом быстро открылась еще одна особенность. По- скольку процессор имеет ограниченную скорость работы, то обслу- жить (перестроить) экран он может тем быстрее, чем меньшую па- мять имеет экранная область и потому фирмы, выпускающие про- граммное обеспечение, легко смогли освоить динамическую графику и добиться превосходных по тем временам успехов в анимации изображений (так на Западе называют мультипликацию). Итак, каждый байт атрибутов соответствует одному знакомес- ту экрана и несет информацию о цветах INK, PAPER и признаках BRIGHT и FLASH. При этом побитовая раскладка этих параметров в байте выглядит так: Номер бита 7 6 5 4 3 2 1 0 г===T===T===T===T===T===T===T===¬ Параметр ¦ F ¦ B ¦ P ¦ P ¦ P ¦ I ¦ I ¦ I ¦ L===¦===¦===¦===¦===¦===¦===¦===- Рис. 8 1.2.4. Основные проблемы при работе с графикой. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Конечно же самая главная проблема при работе с графикой - где взять художественный талант и творческое вдохновение но, здесь мы Вам помочь ничем не сможем - сами их не имеем, так что на первых порах будем считать, что у Вас все это есть, а если и нет, то попробуем обойтись без них, заменив творческое вдохно- вение на кропотливый поиск методом проб и ошибок. Мы же остано- вимся на чисто программистских проблемах, связанных с графикой. 1. Быстродействие. Работа с графикой требует быстрой пе- реброски значительных объемов информации (килобайтов) из одних участков оперативной памяти в другие. Здесь Вам поможет приме- нение процедур, записанных в машинном коде или прямое обращение к процедурам, содержащимся в ПЗУ. 2. Вторая проблема - ограниченный объем памяти компьютера. Так как графические изображения требуют больших объемов памяти, приходится решать и этот вопрос. Есть приемы по борьбе с этой проблемой. Во-первых, стараются использовать для графики не весь экран, а только его часть (необходимую и достаточную для достижения поставленной задачи). Во-вторых, стараются по-воз- можности шире применять вычислительные процессы для создания графических образов - в этом случае графическое изображение не хранится в памяти для выдачи его в нужное время на экран, а строится по заданному алгоритму (векторная графика) именно в тот момент, когда это надо. В-третьих, когда все-таки надо хра- нить десятки изображений, ранее подготовленных в графическом редакторе, применяют методы компрессии при сохранении рисунка и декомпрессии при выдаче его на экран. 3. Третья проблема является чисто программистской. Она состоит в том, что надо хорошо знать как структура экрана соответствует структуре оперативной памяти. Грубо говоря, надо знать какие адреса в памяти каким координатам на экране соответствуют. А поскольку координаты могут быть заданы в знакоместах или в пикселах, то фактически эту проблему надо решать дважды, а если еще добавить цветовые атрибуты, то и трижды. Однако, знать это соответствие еще не достаточно. Надо еще знать методы и приемы, с помощью которых компьютер может рас- считать эти адреса по заданным координатам, надо знать приемы и алгоритмы, с помощью которых данные извлекаются из недр опера- тивной памяти и распределяются по этим адресам. К счастью, если Вы работаете в БЕЙСИКе, то забивать себе этим голову не надо. Смело давайте команду PRINT AT, PLOT x,y, DRAW... и т.п. и интерпретатор БЕЙСИКа, "зашитый" в ПЗУ, сам рассчитает, что нужно в какие ячейки памяти заслать, чтобы Вы на экране получили то, что хотите. Совсем иное дело, если Вы будете работать в машинных кодах - тогда читайте вторую и тре- тью главы этой книги, а пока вернемся к БЕЙСИКу.


СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Письма - Письмо из Горячего Ключа.
Информация - Oбращение редакции журнала к читателям.
Smile - приколы от Александра Никифорова из Минска.
Вечный думатель - Фэндом мёртв - а мы уже нет...
Ресурсы - ZX-Spectrum: ресурсы в Интернет...

В этот день...   21 ноября