Азы программирования на "классических" Ammy. Этот текст я писал довольно давно, но и сейчас многие интересующиеся кодингом на Amiga могут найти в нем базовую информацию, которая поможет разобраться в структуре этой машины и начать писать что-то свое...
О AMIGA ИЗНУТРИ...
Многие сейчас параллельно со SPECCY осваивают AMIG'у. Малое количество информации и данных по этой машине заставляет всех добиваться результатов и знаний тяжелым трудом и ценой многих часов "ковыряния" в чужих программах. Мы хотим поделиться своими знаниями и теми скромными достижениями, которые имеем на данный момент. Нужно сказать, что мы сами находимся лишь на начальном этапе освоения AMIG'и, поэтому вполне возможны ошибки и неточности в данном тексте. Но все же - это лучше, чем полное отсутствие информации. Данная статья предназначена как для тех, кто сейчас изучает "внутренности" AMIG'и, так и для тех, кто хочет побольше узнать о этой машине перед ее покупкой.
Сейчас наша группа переживает очень бурный период "амигизации". Мы делаем для себя множество интересных и увлекательных открытий и находок... Все похоже на ситуацию со SPECCY 5-7 лет назад, когда мы были в восторге, написав простенькую бегущую строчку, подвесив музыку на прерывания или выведя на экран картинку. Правда разница в том, что тогда мы осваивали SPECCY каждый сам по себе, а сейчас пытаемся "раскрутить" "ПОДРУЖКУ" общими усилиями. Отличие также состоит и в том, что структура SPECCY гораздо проще и доступнее, чем AMMY. Но мы ужe знакомы с основными приемами программирования, и опыт, накопленный на SPECTRUM'е, очень сильно помогает нам в работе. Освоением AMIG'и в основном занимаемся я и RUFF. (примечание: сейчас RUFF несравнимо опередил меня, стал отличным кодером и, надеюсь, напишет для журнала более обстоятельные и профессиональные статьи о программировании на Amiga). У меня A600, в базовой конфигурации (пока :-), у RUFF'а A500+ с KickStart'ом от A600 и с двумя "метрами" памяти. Из литературы пока имеется только книга Дмитрия Михайлова, которого так и хочется назвать амижным Николаем Родионовым, - "AMIGA#1" (описание операционной системы, внутреннего языка ARREX). Также, есть диск в формате гипертекста (с менюшками по тексту) с описанием ассемблера MC680x0 и три диска гипертекстов о работе с внешними устройствами, сопроцессорами, библиотеками и т.д. Все это тексты на английском языке, что несколько затрудняет восприятие, но вполне приемлемо. Надо заметить, что эти диски попали к нам благодаря ребятам из Smash Band - MIGHTY и GRUNGE. Не будем вдаваться на этот раз в подробности ассемблера и кодинга на AMIGA, тем более, что и сами не многое знаем, а расскажем о всем в целом...
ГРАФИКА:
Во первых, опровергнем кое-какие бытующие в кодерских кругах слухи - будто бы на AMMY можно менять разрешение экрана от одной точки на целый screen, до тысячи и больше... Все гораздо скромнее (но нужно заметить, что все, о чем я пишу в этой статье, касается только AMIG без AGA режима. У них же графические возможности намного выше. AGA амиги - это A1200, A4000). Так вот... Стандартными режимами графики, которые поддерживает AMIGA с ECS набором чипов (A1000, A2000, A500, A500+, A600, A3000) являются следующие: (для режима развертки PAL)
LOW resolution, NON INTERLACED: 320x256
LOW resolution, INTERLACED: 320x512
HI resolution, NON INTERLACED: 640x256
HI resolution, INTERLACED: 640x512
Плюс режим Super Hi resolution, когда разрешение по X равно 1280 пикселям.
При этом LOW и HI resolution - это режимы горизонтального разрешения. Режим высокого (HI) разрешения не вызывает мерцания, но замедляет работу центрального процессора. INTERLACED и не INTERLACED - это режимы вертикального разрешения. При подключении INTERLACED развертка будет происходить черезстрочно (кадр - четные строки, другой кадр - нечетные). Данная смена строк будет вызывать мерцание. Подобные способы улучшения качества картинки применяются в последнее время и на SPECCY, но на AMIGA это сделано аппаратно. Специальные устройства и универсальные мониторы с системой DOUBLE PAL позволяют выводить "интерлейснутые" картинки абсолютно без мигания. Предвидя огорчение или же злорадство :-) на ваших лицах по поводу достаточно скромного разрешения, скажу, что это стандартное разрешение обычного телевизора. И даже картинки 320x256 с собственным цветом для каждой точки смотрятся великолепно. А вообще-то я, как и все, сразу советую вам покупать AGA'шную Амигу и наслаждаться ее великолепной графикой. Далее... У Амиги нет BORDER'а, это значит, что она может формировать изображение по всей плоскости экрана. Перечисленные выше режимы разрешения были даны для стандартно видимых областей экрана, общее же разрешение (часть экрана не влезает в кадр) по вертикали равно 312 строк. Подобие же BORDER'а создается по усмотрению кодера, и делается это для того, чтобы картинка влазила целиком в экран любого монитора или телевизора. На AMIGA нет жестко привязанной экранной памяти как на SPECCY. Там достаточно сопроцессору указать из какого места CHIP памяти извлекать картинку, куда ее выводить на экране и какой формат этих данных. Размер экрана в памяти зависит от нескольких факторов: разрешение (вертикальное и горизонтальное) и количество цветов. Графика хранится в специальном формате - в виде битпланов. Битплановая графика это, по сути, такой же формат графики как на SPECCY, то есть состояние каждой точки на экране определяется тем, включен ли соответствующий бит или нет. Большее количество цветов достигается тем, что несколько битпланов можно накладывать один на другой. В случае если подключено больше чем 1 битплан, при отображении каждой точки будет браться по биту из каждого битплана и полученное число будет соответствовать номеру цветового регистра. Цветовые регистры - это 32 двенадцатибитных значения, каждое из которых содержит в себе один код цвета из палитры 4096 цветов. За каждый из основных цветов тут отвечает по 4 бита:
15-12 не используются
11-8 RED (красный)
7 -4 GREEN (зеленый)
3 -0 BLUE (синий)
Так черному цвету соответствует код $0000, белому $0FFF, красному $0F00, серому со средней интенсивностью $0999 и т.д. Как видите, цветовые регистры очень просто задавать в шестнадцатиричной системе.
Далее о битпланах... Всего одновременно может быть подключено до 6 битпланов. Такая вот битплановая экранная область называется фоном (playfield). За пределами фоновой картинки невозможно выводить никакие изображения, включая спрайты. Есть также режим с двумя фонами, когда на экране формируются две независимые картинки любого размера. В двухфоновом режиме в каждом из фонов можно задать до трех битпланов. Кстати, количество битпланов часто называют глубиной изображения (DEPTH). Естественно, чем больше битпланов задано одновременно, тем большее количество цветов можно выводить:
кол-во битпланов кол-во цветов
1 2
2 4
3 8
4 16
5 32
Итак, стандартно можно выводить до 32-х цветов на экране одновременно, при этом каждый цвет произвольно выбирается из палитры 4096 цветов. Это не так уж и мало, учитывая, что можно самому формировать палитру и окрашивать каждый пиксель в собственный цвет. Во всяком случае игрушки и демки смотрятся очень красочно и привлекательно. Шестой битплан используется в режиме HalfBright, который позволяет увеличить количество цветов до 64, при этом дополнительные 32 цвета берутся из стандартных цветовых регистров с половинной яркостью.
Также есть режим Hold And Modify (HAM), в котором можно выводить одновременно все 4096 цветов, но при некоторой зависимости цвета близлежащих точек одна от другой. Производится своеобразная аппаратная компрессия. Режим эффективен для статичных картинок и заставок, но динамическая графика в HAM усложнена. Еще есть какой-то загадочный режим с разрешением 640х480 с четырьмя цветами из палитры в 64 цвета. Правда и о нем я мало что знаю.
Каждый фон (playfield) может быть произвольного размера. Можно выводить на экран лишь его часть. Сопроцессор (COPPER) сам будет отступать промежутки в длине строки. Также, существуют аппаратные средства для плавного скроллинга фонов по вертикали и горизонтали. Амига может независимо выводить до 8-ми спрайтов заданного размера, отслеживать их местоположение на экране и наложение друг на друга, либо на один из фонов. Размер спрайтов по X не должен превышать 16 пикселей, по Y - не ограничен. Стандартно спрайты 4-х цветные (со своей собственной палитрой), но можно объединить по два спрайта в один и получить при этом 16 цветов.
СОПРОЦЕССОРЫ:
Теперь о аппаратных средствах AMIGA. У каждой Амиги есть два очень полезных "инструмента" для работы с внешними устройствами и для получения различных аудио-визуальных эффектов. Это: COPPER - занимается формированием изображения, синхронизирует вывод графики с разверткой путем отслеживания текущего положения луча. Также, на нем "висит" обслуживание 4-х звуковых каналов. BLITTER - позволяет быстро рисовать линии, закрашивать определенные области в изображении. Также, BLITTER может использоваться для быстрой переброски данных по памяти. За секунду BLITTER может поставить около 1 миллиона точек (в линии). Для примера скажу, что на SPECCY можно вытянуть где-то 50 тысяч точек в секунду, да и то с трудом. А выводя миллион точек 7МГц'ная AMIGA может параллельно играть крутую оцифрованную музыку, подгружать что-то с диска и делать еще кучу различных операций... COOL! Одна точка ставится за 8 тактов. BLITTER организован очень гибко и позволяет рисовать графику в фонах различного размера и разрешения. Для управления сопроцессорами и контроля внешних устройств используются так называемые HARDWARE регистры (регистры управления железом либо хардвэйрные регистры). Каждый из регистров имеет свой собственный адрес, занося либо считывая в/из которого данные, можно общаться с внешним миром и командовать всей мощнейшей структурой машины. Как это делать я расскажу в следующий раз, когда сам разберусь во всех тонкостях.
ОСОБЕННОСТИ АССЕМБЛЕРА:
Самым главным и мучительным отличием от SPECTRUM'овского ассемблера являются непривычно большие адреса, состоящие из четырех байт. Поначалу очень сложно воспринимать столь большие значения. Также прикольным отличием является то, что в амижном ассемблере, при занесении значений из источника в приемник, слева (до запятой) записывается источник, а справа (после запятой) - приемник. На SPECCY и на PC все совсем наоборот. Кстати, амижный стандарт более свойственен европейскому человеку, привыкшему читать слева-направо. Для тех, кто еще не "врубился" в вышесказанное, объясняю, что при LD A,B, (амижный аналог команды LD - MOVE) будет занесено значение регистра A в регистр B. Также, каждая команда работающая с числовыми значениями должна иметь идентификатор (букву, записываемую после точки): .b - один байт
.w - слово (два байта)
.l - длинное слово (четыре байта)
Данный идентификатор служит для разделения типов данных. В ассемблерах принят несколько отличающийся от спектрумовского стандарт записи чисел. Так, перед шестнадцатиричными числами ставится знак "$", перед десятичными не ставится ничего. В случае использования непосредственной адресации перед числом ставится знак "#". Данная особенность может привести к путанице. Аналогом спектрумовского DEFB является команда DC (повидимому, Define Code), после которой тоже ставится идентификатор. Так, команда "DC.L $0" - означает, что по текущему адресу компиляции будет помещено четыре байта, заполненных нулем. Сами по себе программы-ассемблеры (я видел "ASM ONE" и две версии "GENS") снабжены великолепными редакторами текста (не стоит вспоминать "GENS" на SPECCY :-). Также, очень приятна отладка программ прямо по тексту. Правда функций в долбагере маловато (STS круче!), но я не знаю как выглядят отдельные отладчики и говорю о встроенном в "ASM ONE". Регистры в AMIG'е 32-х разрядные (даже в 16 битных A500, A600...). Есть два вида основных регистров: регистры данных и регистры адреса. И тех и других аж по 8 штук - D0-D7, A0-A7. Регистры данных - это что-то типа SPECTRUM'овских HL, DE, BC, только все они одинаковые и имеют по 4 байта. С этими регистрами производится большинство логических и арифметических операций. Регистры адреса - это похожие на наши IX и IY, то есть - индексные регистры. Используя их можно адресовать память со смещением, но не +,- 128 байт, а +,- 32768 байта (COOL!). В совокупности с тем, что имеются команды переходов и вызовов подпрограмм по относительному адресу в таком же диапазоне - это позволяет писать довольно большие перемещаемые программы. Также есть очень приятная возможность ставить в операциях с адресными регистрами "+" или "-" после скобок, при этом содержимое адресного регистра будет уменьшено или увеличено на число, зависящее от типа данных (b, w, l). Например команда MOVE.W #0,(A0)+ означает, что по адресу на который указывает регистр A0 будет помещено два байта "0", а значение A0 будет увеличено на 2. Это позволяет просто и эффективно работать с блоками памяти. В микропроцессорах MC680x0 набор флагов очень схож с набором флагов в Z80. Тут имеются:
X - флаг расширения
N - флаг знака
Z - флаг нуля
V - флаг переполнения
C - флаг переноса
Проверка флагов и переходы по условиям осуществляются несколько иначе чем на SPECCY, а именно - в командах, работающих по условию (B, DB, S и т.д.) к имени команды, без всяких запятых, приписывается имя условия. Вот список всех условий:
F False Z=1
T True Z=0
HI HIgh C+Z=0
LS Low or Same C+Z=0
CC Carry Clear C=0
CS Carry Set C=1
NE Not Equal Z=0
EQ EQual Z=1
VC V=0
VS V=1
PL PLus N=0
MI MInus N=1
GE Greater or = N(+) V=0
LT Less Than N(+) V=1
GT Greather Then Z+(N(+)V)+
LE Less or = Z+(N(+)V)-
Более подробно о всех командах Моторолы я постараюсь рассказать в другой раз (включая действие на флаги и конкретные примеры). А на сегодня наверное хватит.... Делитесь с нами своими знаниями и достижениями. Пишите, спрашивайте, исправляйте, советуйте...
При создании данной статьи использовались:
"MC680x0 GUIDE"
"CODER COMPANION (vol.1,2,3)"
"AMIGA#1" (C) Д. Михайлов
Амигу кроме меня изучали RUFF и ZNAHAR.
УДАЧИ В БОРЬБЕ ЗА ДЕЛО АМИЖНОЙ ПЛАТФОРМЫ!
Оглавление издания: Rush #01
- AMIGA NEWS
Amiga Inc работает над Amiga OS 3.5 с улучшениями, такими как поддержка CD-дисков и PowerPC. Разработка разделена для процессоров M68K и PPC. Выпуск отложен на конец 1999 или начало 2000 года.
- AMIGA NEWS
Описание просмотрщика 'Fast JPEG 1.10' для Amiga, с акцентом на его особенности, установку и использование. Подчеркиваются преимущества, такие как быстрая обработка без потери качества, и предоставляются советы пользователям. Читателям предлагается делиться своими опытом использования программ.
- AMIGA NEWS
Основы программирования для классической Amiga, обсуждение сложностей и обмен знаниями в кодировании на Amiga. Обзор графических возможностей Amiga и особенностей процессоров. Введение в особенности ассемблера Amiga.
- AMIGA NEWS
Обзор событий, связанных с платформой Amiga, с начала до середины 1998 года. Включает новое оборудование, релизы программного обеспечения и заметные сотрудничества компаний. Будущие обновления и разработки запланированы для следующего выпуска.
- AMIGA NEWS
Подборка читов и секретов для классических игр Amiga, собранных Postcard Man. Читатели поощряются делиться своими находками в сложных играх. Предоставлены советы и коды уровней для различных игр.
- AMIGA NEWS
Обсуждение графических карт Phase-5 и возможностей процессора Permedia 2. Подробности о 2D/3D акселерации и совместимости Permedia 2. Упоминание процессоров GLINT Delta и сравнение цен и доступности.
- AMIGA NEWS
Анализ выживания Amiga в 90-х, подчеркивающий усилия сообщества и технологические достижения. Обсуждение аппаратных улучшений и разработки программного обеспечения. Поощрение дальнейшего изучения и освоения платформы Amiga.
- Spectrum программинг
Объяснение быстрого метода для 3D графики в реальном времени на ZX Spectrum. Вводятся эффективные техники вращения и деформации 3D объектов. Подчеркиваются улучшения по сравнению с традиционными методами с практическими примерами.
- Spectrum программинг - Ticklish Jim
Обсуждение совмещения звуковых эффектов с музыкой для AY-чипа Spectrum. Примеры из разработки 'CSC: Deja Vu' и технические трудности. Содержит практическое руководство и примеры кода.
- Spectrum программинг
Обсуждение зеркального отображения байтов и восстановления фона в программировании ZX Spectrum с примерами.
- Spectrum программинг
Подробное руководство для системных программистов с практическими советами по созданию эффективного и удобного ПО, включая техники кодирования, совместимость устройств и стратегии тестирования программ.
- Spectrum программинг
Совершенные методы кодинга и современные способы работы с графикой для ZX Spectrum. Советы по оптимизации графических процедур и программированию на ассемблере. Полезные рекомендации для программистов по улучшению производительности и эффективности.
- The End
Размышления о создании первого номера журнала 'Rush', его целях, аудитории и будущем развитии.
- ZX-SOFT - Вячеслав Медноногов
Обновления разработки новой игры 'Черный Ворон II' от Вячеслава Медного, включая изменения в игровом процессе, введение новых заклинаний и улучшения производительности.
- ZX-SOFT
Обзор новых возможностей обновленного командера от REAL software для ZX Spectrum, включая управление файлами, автодетекцию и просмотр медиа. Улучшения в работе с текстами, шрифтами и музыкой. Ответы на вопросы о будущих обновлениях.
- ZX-SOFT
Дебаты о том, какое демо заслуживало первое место на Funtop'98: Forever от DR или Refresh от XTM. Обсуждения в сообществе демосцены подчеркивают столкновение между техническим мастерством и концептуальной глубиной. Различные мнения отражают эволюцию предпочтений демосцены.
- Авторы
Благодарности авторам и партнёрам в создании журнала Rush. Подробные роли каждого автора и сотрудничество. Признание технической поддержки и медийных партнёрств.
- Виртуальный Спекки
Обсуждение конвертации графики с PC на Spectrum с мнениями различных экспертов. Описаны техники улучшения качества конверсии и инструменты, такие как Photoshop. Акцент на доработке после конверсии в графических редакторах Spectrum.
- Виртуальный Спекки
Обсуждение эмулятора CBSpeccy для ZX-Spectrum на Amiga, выделение его особенностей, мнений сообщества и технической производительности. Критика и похвалы за его эмуляционные возможности, особенно в сравнении с ПК эмуляторами. Рассмотрение возможных улучшений и дебаты в сообществе о обновлениях версий.
- Виртуальный Спекки
FAQ по эмуляции ZX-Spectrum на ПК, охватывающий популярные эмуляторы и форматы файлов. Инструкции по использованию различных эмуляторов и управлению типами файлов, такими как Hobeta и TR-DOS. Обсуждение российских ZX-ориентированных серверов и ресурсов для энтузиастов.
- Вступление
Вступление к журналу Rush, акцент на креативность, прогрессивную сцену и цель создать превосходный источник информации. Журнал стремится собрать перспективные группы и предложить уникальную перспективу. Основное внимание на содержании и атмосфере, приглашая создателей к сотрудничеству.
- Вступление - Grunge
Введение в Rush, новый сценовой журнал для любителей Speccy/Amiga, целью которого является предоставление качественного контента и новостей с поощрением обратной связи от читателей.
- Интервью - Konex
Интервью с группой ANTARES после FUNTOP-98. Обсуждение их демонстраций, трудностей и планов на будущее. Взгляд на формирование и динамику группы.
- Интервью - Kvazar, DUX
Интервью с Александром Селезневым (KVAZAR), обсуждение его истории с компьютерами, состояния сцены ZX Spectrum и будущих планов.
- Интервью - Kvazar
Интервью с витебской группой POWER о демо 'Crazy Love', опыте разработки и будущих проектах.
- Информацриум
Исследование CD с эмуляторами для различных платформ, с акцентом на Spectrum. Подробности об организации и разнообразии контента. Заключается инсайтами из коллекции программного обеспечения Spectrum CD-ROM Project.
- Информацриум
Подборка интересных и полезных интернет-адресов, связанных с ресурсами Amiga, включая журналы, производителей оборудования и компании-разработчики ПО.
- Информацриум - Viator
Обзор существующих и предстоящих изданий о платформе Amiga. Обсуждение доступности и проблем распространения литературы по Amiga. Призыв к сотрудничеству с новыми изданиями.
- О журнале
Обсуждение создания многоплатформенного журнала с акцентом на Spectrum, Amiga и ПК. Подчеркивается важность широкого понимания компьютерной сцены. Призыв к профессионализму и адаптации к изменяющимся технологиям.
- Параллельные миры
Обзор эволюции ОС Windows и процессоров ПК с 1981 по 2000 год. Вехи развития MS-DOS, Windows, процессоров Intel и конкуренции с AMD и Cyrix. Проблемы совместимости с новыми технологиями процессоров.
- Параллельные миры
Обзор моделей Macintosh и их значимость в области дизайна и графики, охватывающий цены и спецификации с 1997-1998 годов. Обсуждение включает эволюцию оборудования Apple, особенно серию PowerMac, и сравнивает новые процессоры G3 с аналогами для ПК. Подчеркивается возрождение Macintosh после кризиса и его продолжающееся влияние на рынок.
- Развитие Spectrum - Slider
Статья обсуждает новое графическое расширение для ZX Spectrum, расширяющее палитру цветов без увеличения ресурсных требований. Используя модифицированный сигнал flash, создаются новые цвета без нарушения совместимости с существующим софтом. В статье даются подробности реализации и решения практических вопросов.
- Развитие Spectrum
Подключение CDOS-модема к компьютеру 'Компакт-128' через устранение конфликтов порта клавиатуры. Описание аппаратных модификаций для решения проблемы. Решение включает автоматическую блокировку с использованием транзисторного инвертора.
- Развитие Spectrum - Ars
Обсуждение разработки AZX-Monstrum 512K, его аппаратной совместимости, вариантов процессора и потенциальных улучшений в графике и ОС.
- Развитие SPECTRUM
Обсуждение новой компьютерной платформы ZX2000 от Клайва Синклера, предназначенной для превосходства над ПК за счет скорости, доступности и эффективности батареи.
- Развитие Spectrum - Андрей Савичев
Рассмотрение эволюции и продолжающейся актуальности процессора Z80, и его роли во встроенных системах. Сравнение Z80 с его преемниками, выделение таких преимуществ, как энергоэффективность и улучшенные команды. Обзор интегрированных процессоров на базе Z80 и их периферийных устройств.
- Реклама
Статья представляет собой рекламу продукции Scorpion, включая оборудование для ZX Spectrum и программное обеспечение для Amiga, с подробностями цен и заказов.
- Реклама
Коллекция объявлений о продаже оборудования и программного обеспечения для Amiga и ZX Spectrum, с контактной информацией продавцов и подробностями о подписке на новый журнал Amiga.
- Реклама
Реклама музыкальной платы General Sound от X-TRADE. Содержит цены, технические характеристики и инструкции по покупке. Включает FAQ и информацию о совместимости.
- Смысл без смысла - Viator
Философские размышления об экзистенциализме, бессмертии и человеческой судьбе. Повествование переплетается с историями о честолюбии, поиске вечной жизни и утопическом падении. Сочетание интроспекции и спекулятивной фантастики.
- Сцена vs профессионалы
Исследование творчества демосцены в сравнении с коммерческой разработкой игр. Обсуждение потенциала создания профессиональных программ участниками сцены. Призыв к сотрудничеству с ведущими группами сцены.
- Сценохрония - Андрей Савичев
Размышления о неизменной привлекательности ZX Spectrum, устойчивости его сообщества и возможном возрождении в России.
- Сценохрония
Обзор деятельности группы Rush, включая прошлые проекты, текущие начинания и будущие планы, с акцентом на разработку ПО и игр.
- Сценохрония
Статья обсуждает различные новости сцены ZX Spectrum, включая релизы игр, демопати и обновления от разработчиков и команд.
- Сценохрония
Статья обсуждает международный фестиваль компьютерного искусства FUNTOP'98, прошедший в Москве, подчеркивая ключевые события, заметных участников и различные конкурсы, проведенные в ходе мероприятия.
- Сценохрония
Обсуждение развития сцены Amiga через сотрудничество, решение проблемы изоляции пользователей и расширение сети.
- Управление оболочкой
Статья описывает управление оболочкой для ZX Spectrum и Amiga, включая клавиши и функции навигации. Упоминаются особенности работы на Amiga с PAL монитором и предоставляется контакт для поддержки. Также отмечено, что текстовые файлы имеют стандартную MS-DOS кодировку.