Предисловие
Краткая история игровых приставок
Этап 2. 16-разрядные приставки
Этап 3. 32- и 64-разрядные системы
Этап 4. Современные модели
Игровая приставка DREAMCAST
Игровая приставка PLAYSTATION 2
Игровая приставка Х-ВОХ
ГЛАВА 1. Игровая приставка DENDY
1.2. Архитектура и принцип работы
1.2.1. Структурная схема
1.2.2. Центральный процессор
1.2.3. Адресное пространство
1.2.4. Видеопроцессор
1.2.5. Звуковой процессор
1.2.6. Структура картриджа
1.2.7. Организация ввода/вывода
1.3. Принципиальная схема
1.3.1. Модуль процессора
1.3.2. Картридж
1.3.3. Модулятор
1.3.4. Игровые пульты
1.3.5. Блок питания
1.4. Характерные неисправности
ГЛАВА 2. Игровая система GAME BOY
2.2. Архитектура и принцип работы
2.2.1. Структурная схема
2.2.2. Центральный процессор
2.2.3. Адресное пространство
2.2.4. Видеопроцессор
2.2.5. Звуковой процессор
2.2.6. Структура картриджа
2.2.7. Организация ввода/вывода
2.3. Принципиальная схема
2.3.1. Процессорный модуль
2.3.2. Картридж
2.3.3. Дополнительные устройства
2.3.4. Блок питания
2.4. Характерные неисправности
ГЛАВА 3. Игровая приставка SEGA MEGA DRIVE
3.2. Архитектура и принцип работы
3.2.1. Структурная схема
3.2.2. Центральный процессор
3.2.3. Адресное пространство
3.2.4. Видеопроцессор
3.2.5. Звуковой процессор
3.2.6. Структура картриджа
3.2.7. Организация ввода/вывода
3.3. Принципиальная схема
3.3.1. Процессорный модуль
3.3.2. Картридж
3.3.3. Модулятор
3.3.4. Игровые пульты
3.3.5. Блок питания
3.4. Характерные неисправности
ГЛАВА4. Игровая приставка SONY PLAYSTATION
4.2. Архитектура и принцип работы
4.2.1. Структурная схема
4.2.2. Центральный процессор
4.2.3. Адресное пространство
4.2.4. Внутренние контроллеры
4.2.5. Видеопроцессор
4.2.6. Звуковой процессор
4.3. Принципиальная схема
4.3.1. Модуль центрального процессора
4.3.2. Модуль графического процессора
4.3.3. Модуль декодера и звукового процессора
4.3.4. Модуль контроллера привода CD-ROM
4.3.5. Модуль адаптации
4.3.6. Игровой пульт
4.3.7. Блок питания
4.4. Характерные неисправности
ГЛАВА 5. Программирование для приставок
5.1.1. Использование инструментальных средств
5.1.2. Структура игровой программы
5.1.3. Пример разработки программы
5.2. Написание программ-эмуляторов
5.2.1. Что и как эмулировать
5.2.2. Подготовка к написанию эмулятора
5.2.3. Программирование эмулятора
ПРИЛОЖЕНИЕ 1. Системы команд микропроцессоров, используемых в игровых приставках
1.2 Система команд центрального процессора игровой приставки GAME BOY
1.3 Система команд микропроцессора Z80, используемого в игровых приставках SEGA
1.4 Система команд центрального процессора M68000 игровой приставки SEGA MEGA DRIVE
1.5 Система команд центрального процессора MIPS R3000 игровой приставки SONY PLAYSTATION
ПРИЛОЖЕНИЕ 2. Примеры программ для игровых приставок
2. Программа работы со звуковыми процессорами для игровой приставки SEGA MEGA DRIVE
2.2 Программа для сопроцессора Z80
3. Программа для работы с графическим процессором приставки SONY PLAYSTATION
Литература
Сайты Internet
Текст
                    =


Самые популярные модели известных зарубежных фирм
Полный комплект структурных и принципиальных схем
Качественное графическое исполнение схем и рисунков
Подробное описание работы узлов и блоков
Методика проведения основных регулировок
Характерные неисправности и способы их устранения
BEHBY[NES]
БВМЕ BBY
БАМЕ BOY
SEGA MEGA DRIVE
SONY PLAYSTATID
Х13ОХ

РЕМОНТ И ОБСЛУЖИВАНИЕ

Серия «Ремонт и обслуживание» КОРОЛЕВ А. Г. Выпуск 21 Игровые приставки DENDY [NES] GAME BOY SEGA MEGA DRIVE SONY PLAYSTATION Москва, 2002
УДК 004.388.4 ББК 32.844 К68 Королев А. Г. К68 Игровые приставки. DENDY [NES], GAME BOY, SEGA MEGA DRIVE, SONY PLAYSTA- TION. - M.: ДМК Пресс, 2002. - 240 с.: ил. (Ремонт и обслуживание; Вып. 21). ISBN 5-94074-065-0 В предлагаемой книге рассмотрены различные модели современных игровых видеоприста- вок (консолей) известных фирм - NINTENDO, SEGA и SONY. Приведены подробные описания основных микросхем приставок, а также структурные и принципиальные схемы; представлены рекомендации по обнаружению и устранению ха- рактерных неисправностей. Для каждой модели рассмотрены система команд процессора и программная архитектура. Издание предназначено для подготовленных радиолюбителей и специалистов, занимаю- щихся ремонтом аппаратуры; может использоваться как справочник при разработке перифе- рийных устройств и написании программного обеспечения для игровых консолей. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельца авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность наличия технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводи- мых сведений. В связи с этим издательство не несет ответственности за возможный ущерб любого вида, связанный с применением или неприменимостью любых материалов данной книги. ISBN 5-94074-065-0 © ДМК Пресс, 2002 /
Содержание Предисловие.................................................................. 6 Краткая история игровых приставок................................................7 Этап 1.8-разрядные приставки ..................................................8 Этап 2. 16-разрядные приставки ................................................8 Этап 3. 32- и 64-разрядные системы ............................................9 Этап 4. Современные модели ...................................................10 Игровая приставка DREAMCAST ................................................ 11 Игровая приставка PLAYSTATION 2 ..............................................1 1 Игровая приставка Х-ВОХ ....................................................11 ГЛАВА 1 Игровая приставка DENDY ........................................................12 I. I. Технические характеристики..............................................13 1.2. Архитектура и принцип работы ............................................13 1.2.1. Структурная схема ...................................................13 1.2.2. Центральный процессор................................................14 1.2.3. Адресное пространство ...............................................18 1.2.4. Видеопроцессор ......................................................19 1.2.5. Звуковой процессор ..................................................24 1.2.6. Структура картриджа ............................................... 25 1.2.7. Организация ввода/вывода ............................................26 1.3. Принципиальная схема ....................................................27 •1.3.1 . Модуль процессора .................................................TJ 1.3.2. Картридж .......................................................... 32 1.3.3. Модулятор............................................................33 1.3.4. Игровые пульты ......................................................33 1.3.5. Блок питания ....................................................... 35 1.4. Характерные неисправности ...............................................36 ГЛАВА 2 Игровая система GAME BOY........................................................38 2.1. Технические характеристики ..............................................39 2.2. Архитектура и принцип работы ............................................39 2.2.1. Структурная схема ...................................................39 2.2.2. Центральный процессор................................................40 2.2.3. Адресное пространство ...............................................45 2.2.4. Видеопроцессор ......................................................46 2.2.5. Звуковой процессор ................................................. 52 2.2.6. Структура картриджа ............................................... 57 2.2.7. Организация ввода/вывода ............................................60
Игровые приставки 2.3. Принципиальная схема .....................................................63 2.3.1. Процессорный модуль...................................................63 2.3.2. Картридж .............................................................66 2.3.3. Дополнительные устройства ............................................66 2.3.4. Блок питания ........................................................ 69 2.4. Характерные неисправности ........................................... 70 ГЛАВА 3 Игровая приставка SEGA MEGA DRIVE............................................... 72 3.1. Технические характеристики ...............................................73 3.2. Архитектура и принцип работы .............................................73 3.2.1. Структурная схема ....................................................73 3.2.2. Центральный процессор.................................................74 3.2.3. Адресное пространство ................................................80 3.2.4. Видеопроцессор ..................................................... 80 3.2.5. Звуковой процессор ...................................................90 3.2.6. Структура картриджа ..................................................95 3.2.7. Организация ввода/вывода .............................................97 3.3. Принципиальная схема ....................................................101 3.3.1. Процессорный модуль..................................................101 3.3.2. Картридж ...............................................;............109 3.3.3. Модулятор ...........................................................109 3.3.4. Игровые пульты ......................................................109 3.3.5. Блок питания ...................................................... 109 3.4. Характерные неисправности ...............................................112 ГЛАВА4 Игровая приставка SONY PLAYSTATION 114 4.1. Технические характеристики..............................................115 4.2. Архитектура и принцип работы ...........................................115 4.2.1. Структурная схема ...................................................115 4.2.2. Центральный процессор ...............................................117 4.2.3. Адресное пространство ...............................................128 4.2.4. Внутренние контроллеры ............................................ 131 4.2.5. Видеопроцессор .....................................................134 4.2.6. Звуковой процессор .................................................140 4.3. Принципиальная схема ...................................................143 4.3.1. Модуль центрального процессора......................................143 4.3.2. Модуль графического процессора ......................................148 4.3.3. Модуль декодера и звукового процессора ..............................154 4.3.4. Модуль контроллера привода CD-ROM ..................................154 4.3.5. Модуль адаптации ...................................................155 4.3.6. Игровой пульт........................................................155 4.3.7. Блок питания .......................................................155 4.4. Характерные неисправности ..............................................161 4
Содержание ГЛАВА 5 Программирование для приставок..........................................164 5.1. Создание программ для игровых приставок...........................165 5.1.1. Использование инструментальных средств .......................165 5.1.2. Структура игровой программы ..................................165 5.1.3. Пример разработки программы ..................................166 5.2. Написание программ-эмуляторов....................................170 5.2.1. Что и как эмулировать ........................................170 5.2.2. Подготовка к написанию эмулятора ............................171 5.2.3. Программирование эмулятора ...................................172 ПРИЛОЖЕНИЕ 1 Системы команд микропроцессоров, используемых в игровых приставках.......................................178 ПРИЛОЖЕНИЕ 2 Примеры программ для игровых приставок..................................204 Литература .............................................................234 Сайты Internet..........................................................234 5
Предисловие Повсеместное распространение компьютеров, сопровождавшееся падени- ем цен на интегральные микросхемы, открыло широкому кругу людей доступ к компьютерным играм. Однако не каждый может позволить себе приобрести современный ком- пьютер только для проведения досуга; кроме того, требовались хотя бы на- чальные знания по работе с ним. Сначала это серьезно ограничивало сферу распространения компьютерных игр, что, возможно, и устраивало их созда- телей, но совершенно не устраивало продавцов. Тогда мир электронных развлечений пополнился игровыми автоматами, установленными в барах, кафе и торговых центрах. Следующим шагом стал выпуск игровых приставок, позволяющих наслаждаться игрой, сидя дома в любимом кресле. Что такое типичная игровая приставка? Это специализированный микро- компьютер, спроектированный специально для запуска игровых программ и применяющий обычный телевизор для вывода изображения и звукового сопровождения. Для работы в приставку нужно поместить картридж, кото- рый представляет собой сменное запоминающее устройство с программой для определенной игры. Все управление осуществляется при помощи пуль- та, назначение кнопок которого становится ясным практически сразу. Современные игровые приставки, например PANASONIC 3.DO и SONY PLAYSTATION, уже не используют картриджи для хранения программного обеспечения. Теперь программы записываются на лазерные компакт-диски, что привело к усложнению игр и повышению их качества. Наличие CD-ROM превратило приставку из простого игрового устройства в целый досуговый центр, позволяющий прослушивать музыку или воспроизводить фильмы с Video CD. Первой на российский рынок попала игровая приставка DENDY, которая проложила широкую дорогу к сердцам детей и кошелькам их родителей. За- тем появились и более сложные приставки, благодаря чему любители элек- тронных игр за пять лет перешли от простейших 8-разрядных систем типа DENDY и GAME BOY к сложным 32-разрядным консолям SONY PLAYSTATION. На сегодняшний день в России распространены самые разнообразные иг- ровые системы, что вызывает огромный интерес к вопросам их схемотехни- ки и программного обеспечения. Однако предлагаются обычно только опи- сания игр, а имеющийся минимум технических сведений разбросан по разным источникам и часто недоступен из-за малого тиража. Целью настоящей книги является объединение и систематизация инфор- мации об устройстве наиболее популярных игровых приставок, для чего была проведена значительная работа по поиску последних данных в сети Internet и в зарубежных изданиях. Результаты этой работы перед вами. Для каждой приставки приводятся структурная и принципиальная схемы, рассматривается программная архитектура. Большое внимание уделено описанию специализированных процессоров и возможным заменам эле- ментной базы приставок на более доступные компоненты, один из разделов посвящен методам ремонта. Книга может быть использована как справочник при разработке про- граммного обеспечения или нестандартных внешних устройств. Однако она не является учебником по программированию на языке ассемблера, для этой цели предназначены издания, указанные в списке литературы. В конце книги приведен также список сайтов, содержащих сведения об иг- ровых приставках и программах-эмуляторах, ответы на некоторые вопросы программирования, а также другую полезную информацию. Этим смогут воспользоваться читатели, имеющие доступ к сети Internet.
КРАТКАЯ ИСТОРИЯ ИГРОВЫХ ПРИСТАВОК Наверное, моментом, с которого началась история игровых видеоприставок, следует считать появле- ние персональных компьютеров и зарождение электронной игровой индустрии. Первые игры были не так увлекательны, посколь- ку создавались для алфавитно-цифровых дисплеев и могли заинтересовать только компьютерных фана- тов. Настоящий успех пришел с разработкой удоб- ных, дешевых и простых компьютеров, способных выводить картинку на Э1фан обычного телевизора. В это время распространились Apple, ZX Spectrum, Atari и другие системы, теперь ставшие классикой. Тогда же появились и первые электронные игро- вые автоматы, которые представляли собой компью- тер с игровой программой, записанной в ПЗУ. Вы- сокая стоимость обусловила использование этих устройств в барах, торговых центрах и других об- щественных местах, но не дома. Тем не менее и они сослужили хорошую службу: познакомили с ком- пьютерными играми миллионы людей и Подгото- вили рынок. Следующим, шагом, приблизившим выход ком- пактных видеоприставок, стало удешевление их производства. Резкое снижение цен сделало про- стейший компьютер доступным для обычной семьи. Что же такое игровая видеоприставка? Это спе- циализированный бытовой компьютер, разработан- ный для выполнения игровых программ. Приставка содержит все компоненты обычного компьютера: процессор, память, устройства ввода/вывода инфор- мации. Однако имеется несколько особенностей. Во-первых, изображение выводится на экран обычного телевизора с разрешением ниже, чем у монитора. Во-вТОрых, игровые приставки не осна- щаются полноразмерной клавиатурой: для управ- ления игрой достаточно простейшего пульта или джойстика. В-третьих, в видеоприставках может быть меньший объем памяти. Для первых приставок программы распростра- нялись в виде картриджей, представляющих собой плату с установленными на ней микросхемами ПЗУ и ОЗУ. В ПЗУ находилась программа, кото- рая запускалась после установки картриджа в спе- циальный разъем приставки. Главным преимуществом видеоприставок явля- ется простота их использования. Подключите теле- визор и пульт, вставьте картридж - и можно начи- нать игру, правила которой быстро становятся понятными. Не требуется изучать операционную систему или принципы распределения памяти. За несколько лет приставки прошли практичес- ки такой же путь, как и компьютеры. От приставок типа DENDY с медленным 8-разрядным процессо- ром производители перешли сначала к 16-, а затем к 32- и 64-разрядным. Одновременно увеличивал- ся объем памяти - от 2 Кб в DENDY до нескольких мегабайтов в современных приставках. Значительным шагом вперед стало использование компакт-дисков вместо картриджа с ПЗУ, что позво- лило повысить сложность игр, улучшило их графит ческое оформление и музыкальное сопровождение, превратив видеоприставку в развлекательный центр. Видеоприставки даже опередили персональные компьютеры в применении специализированных графических ускорителей. ПК достигли того же со- отношения «качество графики/производитель- ность» только с появлением разработок компании 3DFX, а ведь именно эта величина в значительной мере определяет успех работы компьютера в каче- стве игрового устройства. i Итак, обратимся к игровым приставкам, полу- чившим наибольшее распространение.
КРАТКАЯ ИСТОРИЯ ИГРОВЫХ ПРИСТАВОК Этап 1.8-разрядные приставки Первой игровой приставкой, получившей широкое распространение, была MASTER SYSTEM фирмы SEGA, построенная на основе популярного процессо- ра Z80. Она выпускалась в 1984-1986 годах, после чего производство было прекращено, и в Советский Союз попало ограниченное количество экземпляров. Настоящий бум на территории СССР начался с появлением игровых приставок под торговой маркой DENDY. И сотворила NINTENDO DENDY, И была DENDY медленна и неуклюжа, И только Super Mario носился над водою... NINTENDO, DENDY, день первый. Игровая приставка NINTENDO ENTERTAIN- MENT SYSTEM (NES), более известная в России под именем одного из ее аналогов - DENDY, стала ответом компании NINTENDO на выход пристав- ки SEGA MASTER SYSTEM. Основой приставки послужил аналог распро- страненного процессора 6502 с тактовой частотой около 1,8 МГц. Простота в обращении и удачный ди- зайн сделали свое дело, и приставка буквально в те- чение года завоевала всемирную популярность, чему в значительной мере способствовала поддержка про- изводителей программного обеспечения, большой ас- сортимент игр и регулярно выходящие новинки. Графический процессор приставки NES форми- ровал изображение размером 256x224 точки, что было стандартом для 8-битных приставок, и палитрой из 52 цветов, из которых одновременно выводились на экран 26. Звуковой процессор поддерживал пять неза- висимых каналов звукового сопровождения. По техническим характеристикам NES (DENDY) была значительно слабее SEGA MASTER SYSTEM, но, благодаря грамотной рекламе и активной помо- щи разработчиков игр, смогла не только обойти кон- курента, но и практически полностью вытеснить компанию SEGA с рынка 8-разрядных приставок. Официальная поддержка игровой платформы DENDY продолжалась до 1994 года, однако в на- шей стране эти приставки и игры к ним не утрати- ли своей популярности - благодаря достаточно низкой цене и простоте в эксплуатации. И увидела NINTENDO, что-DENDY хороша весьма, И сотворила NINTENDO GAME BOY, И был GAME BOY маленький и черно-белый... NINTENDO, GAME BOY, день второй. Огромный успех приставки DENDY побудил компанию NINTENDO создать переносную кар- манную игровую систему. Этап 2. 16-разрядные приставки Основными требованиями для такого устрой- ства стали относительно невысокая цена и малое энергопотребление. Выпуск первой партии GAME BOY сопровождался мощной рекламной кампани- ей. Результат превзошел все ожидания: GAME BOY покупали даже несмотря на то, что к моменту появления приставки для нее существовало только две. игры - Super Mario Land и Tetris. Главными преимуществами новой системы были ее неболь- шие-габарихы и возможность переноски. Основой приставки стал 8-разрядный процес- сор, работающий на тактовой частоте около 4 МГц и являющийся упрощенной версией самого попу- лярного из 8-разрядных микропроцессоров - Z80. Видеопроцессор формировал на жидкокристалли- ческом дисплее изображение размером 160x144 точки с четырьмя градациями яркости, звуковой процессор позволял получать четырехканальное звуковое сопровождение. Кроме того, разрешалось соединять две (а с помощью специального блока - и четыре) приставки для совместной игры. На протяжении первых пяти лет GAME BOY, даже несмотря на черно-белый экран, находился в зените славы. Позднее уровень продаж снизился, и компания NINTENDO выпустила на рынок но- вые модификации: POCKET GAME BOY - игро- вая система меньших размеров в разноцветных корпусах и с более контрастным экраном; COLOR GAME BOY - долгожданная версия с цветным дисплеем; а также SUPER GAME BOY - доба- вочный модуль к приставке SUPER NINTENDO, позволяющий использовать картриджи для GA- ME BOY. В настоящее время названные приставки все еще активно продаются. Выпущено немало аксессуаров, позволяющих сохранить интерес к системе, которая, к слову сказать, на рынке уже более 10 лет и по уров- ню продаж до сих пор превосходит другие. Этап 2.16-разрядные приставки Вслед за 8-разрядными процессорами появились 16-разрядные. И вскоре на смену простейшим иг- ровым приставкам пришли более сложные модели. На этом этапе наблюдаются лишь количествен- ные изменения: повысились разрядность и быстро- действие процессора, увеличился объем памяти, улучшилась графика. Но никаких качественных изменений не произошло. Графика осталась спрай- товой, изображение на экране по-прежнему строи- лось из заранее созданных блоков, а игровые про- граммы так же записывались в ПЗУ картриджа. Время революционных изменений впереди, а по- ка просматривается лишь поиск путей улучшения 8
Этап 3. 32- и 64-разрядные системы приставок: два процессора в SEGA MEGA DRIVE, сложный видеопроцессор в SUPER NINTENDO и т.д. Первой 16-разрядной игровой приставкой стала SEGA GENESIS. Усовершенствованные модели этой приставки называются SEGA MEGA DRIVE и SEGA MEGA DRIVE 2. И увидела SEGA, что NINTENDO богатеет весьма, И сотворила SEGA GENESIS, И была GENESIS первой 16-разрядной... SEGA, GENESIS, день третий. SEGA GENESIS была выпущена в 1989 году. В то время графическое оформление игр и звук, предоставляемые этой приставкой, явились про- сто образцом для подражания. Основную массу игр позаимствовали с игровых автоматов (именно поэтому игры для SEGA, как правило, аркадные). Приставку оснастили процессором М68000 фир- мы MOTOROLA с тактовой частотой, увеличенной до 7,6 МГц, что стало большим шагом вперед. Кро- ме центрального процессора, имелся дополнитель- ный 8-разрядный процессор Z80, который мог вы- полнять свои программы, освобождая центральный процессор. Несмотря на некоторые ограничения в одновре- менном выводе цветов на экран (всего 64 цвета), игры с участием специального персонажа - Ёжика Соника, фирменного знака SEGA - прекрасно про- давались. Приставки SEGA и сегодня продолжают пользо- ваться спросом, но к настоящему времени они делят рынок 16-разрядных игровых систем с приставкой SUPER NINTENDO, о которой речь пойдет ниже. И побежала NINTENDO за SEGA, И сотворила NINTENDO SNES, И была SNES сложна весьма... NINTENDO, SUPER NINTENDO, день четвертый. Итак, SNES, или SUPER NINTENDO, появилась в октябре1991 года - в тот момент, когда рынком 16-разрядных игровых систем практически безраз- дельно владела фирма SEGA. Процессор 65С816, используемый в SUPER . NINTENDO, был гораздо слабее по производитель- ности, чем процессор в SEGA MEGA DRIVE. Поэто- му в приставку установил и мощный видеопроцессор, позволяющий обрабатывать спрайты значительно быстрее и качественнее и выводить на экран одно- временно 256 цветов (всего поддерживалось 32768 цветов). Кроме того, для повышения качества зву- ка был встроен отдельный аудиопроцессор SONY. В целом же SUPER NINTENDO - это усовер- шенствованный вариант DENDY, без каких-либо коренных изменений. И снова более слабая по техническим характеристикам видеоприставка завоевала популярность благодаря качеству и раз- нообразию программного обеспечения. Этап 3.32- и 64-разрядные системы С появлением 32-разрядных микропроцессоров в мире игровых приставок произошли кардиналь- ные изменения. Во-первых, в конкурентную борьбу на рынке игровых систем включились такие фирмы, как MATSUSHITA ELECTRIC (PANASONIC) и SONY. Во-вторых, существенно изменились принципы формирования изображения. На смену плоской спрайтовой графике пришла трехмерная полиго- нальная, с улучшенным разрешением экрана и уве- личенным количеством цветов. В этом классе устройств наибольшее распро- странение получили три системы: 3DO от PANA- SONIC, PLAYSTATION от SONY и NINTENDO 64, выпущенная, естественно, фирмой NINTENDO. И решил PANASONIC сделать игру, И выпустил PANASONIC 3DO, И была 3DO с CD-ROM,, и могла музыку играть... PANASONIC, 3DO, день пятый. Сразу же оговоримся, что игровая система 3DO не является собственной разработкой компании PANASONIC, а изготавливается по лицензии фир- мы 3DO (эта фирма не занимается производством, а только продает свои проекты). Так что, кроме PANASONIC 3DO, вы можете встретить и SAM- SUNG 3DO, и GOLDSTAR 3DO, отличающиеся лишь дизайном. Игровая система 3DO стала одной из первых 32- разрядных игровых видеоприставок, появившихся на российском рынке. Использование CD-ROM, ко- торые тогда имелись не на каждом компьютере, ка- чественная графика и большой выбор программно- го обеспечения сделали эту приставку на некоторое время самой популярной 32-разрядной моделью. Заглянем внутрь творения PANASONIC. В ка- честве центрального применяется 32-разрядный RISC-процессор ARM60, работающий с тактовой частотой 12,5 МГц. К нему подключено ОЗУ емкос- тью 2 Мб, а также энергонезависимое ОЗУ емкос- тью 32 Кб, где можно сохранить игровую ситуацию на время выключения приставки. Кроме того, в ПЗУ объемом 1 Мб записана операционная, система. В качестве дополнительного процессора (видео- процессора) задействована специальная заказная микросхема, формирующая изображение с разре- шением 320x240 точек и выводящая одновременно 32768 цветов (из 16,7 млн). Аудиопроцессор дает КРАТКАЯ ИСТОРИЯ ИГРОВЫХ ПРИСТАВОК 121 9
КРАТКАЯ ИСТОРИЯ ИГРОВЫХ ПРИСТАВОК возможность получать стереофоническое звуковое сопровождение. Для чтения программ приставка оборудована двухскоростным приводом CD-ROM. Встроенное программное обеспечение позволяет работать с дисками формата Audio CD и Photo CD. Имеются стандартные 9-контактные разъемы, к которым можно подключить до 8 игровых пуль- тов, а также 30-контактный разъем расширения для дополнительных устройств. Но вскоре лидерство захватила видеоприставка SONY PLAYSTATION, поскольку система 3DO пере- стала поддерживаться производителями программ- ного обеспечения и техническое обслуживание ухуд- шилось, что привело к ее исчезновению из продажи. О былой популярности 3DO свидетельствует разработанная фирмой CREATIVE плата 3DO Blaster, которая позволяет запускать игры для ви- деоприставки на персональном компьютере. И решила SONY обогнать 3DO, И создала SONY PLAYSTATION, И распространилась PLAYSTATION весьма... SONY, PLAYSTATION, день шестой. Итак, SONY PLAYSTATION - самая распро- страненная на сегодняшний день 32-битная при- ставка. Она способна воспроизводить игровые диски с логотипом PLAYSTATION, аудиодиски, а с помо- щью поставляемого отдельно видеомодуля - ви- деодиски формата MPEG. Эта видеоприставка увидела свет в 1994 году в Японии, причем ее производитель, фирма SONY, не была известна в игровом мире. Просто компания NINTENDO предложила SONY сделать CD-ROM для приставки SUPER NINTENDO, но к финансо- вому согласию партнеры так и не пришли, и в ре- зультате SONY выпустила собственное изделие. Успех был ошеломляющий: к лету 1995 года объем продаж достиг миллиона приставок, и это только в Японии! Осенью 1995 года SONY начала поставки на американский рынок, причем столь же удачно: только за первую неделю было продано бо- лее 100 тыс. штук. Модель PLAYSTATION представляла собой вер- шину технической мысли, включая практически все новейшие разработки: 32-битный RISC-процес- сор R3000A с тактовой частотой 33,87 МГц; ЗО-уско- ритель, выполняющий 80 млн инструкций в секун- ду; звуковое сопровождение Dolby Surround на 24 канала. Кроме того, на экран могло выводиться более 16 млн цветов, а разрешение составляло 640x480 точек. Но и это еще не все. Приставка име- ла память 2 Мб и дополнительно 512 Кб звуковой памяти, а также двухскоростной привод CD-ROM. Этап 4. Современные модели Следует также упомянуть и о 64-разрядной игро- вой видеоприставке NINTENDO 64. В ней исполь- зуется уникальный 64-разрядный RISC-процессор, на порядок увеличивший реализм восприятия графики. Это произошло за счет повышения до 500 МГц скорости обмена с памятью, достигнутого с помощью современных технологий. Новый трех- мерный джойстик с дополнительным аналоговым блоком дает возможность задать любое направле- ние в диапазоне от 0° до 360°. Модель NINTENDO 64 - результат сотрудниче- ства компаний NINTENDO и SILICON GRAPHICS. Приставка уверенно поддерживает трехмерную гра- фику благодаря спаренным процессорам MIPS Tech- nologies и Silicon Graphics с тактовой частотой ос- новного 64-разрядного процессора 93,75 МГц и частотой графического процессора 62,5 МГц. В ре- зультате их слаженной работы практически исчеза- ет текстурное разложение задних планов изображе- ния и движущихся объектов при их приближении. Приставка имеет 4,5 Мб оперативной памяти и эк- ранное разрешение до 640x480 точек. Воспроизве- дение более 16 млн цветов и 100-канальный звук удовлетворят самый взыскательный вкус. Фирма NINTENDO учла основной недостаток своей предыдущей системы, SNES, - слабый процес- сор. По вычислительной мощности NINTENDO 64 - несомненный лидер. Но, к сожалению, в приставке используются не компакт-диски, а картриджи. Ем- кость картриджа не превышает 32 Мб, что несоиз- меримо с 650 Мб обычного CD. Уже несколько лет компания NINTENDO обещает выпустить для своей приставки CD-ROM, однако «воз и ныне там». Так были совершены игровые приставки И все воинство их. И плодились они, и размножались, И владычествовали над сердцами детскими И карманами родительскими. Этап 4. Современные модели Пока идет эволюция процессоров, развиваются и игровые видеоприставки. А на рынке приставок продолжается конкурентная борьба. Можно выделить несколько особенностей совре- менной игровой системы: 64- или 128-разрядный центральный процессор, 128- или 256-разрядный графический процессор, не менее 8 Мб памяти, дис- ковод для DVD, порты для подключения различных устройств, в том числе модема для выхода в Internet. Итак, игровая приставка превращается в мульти- медийный развлекательный центр с множеством функций. 10
Этап 4. Современные модели В настоящее время на рынке присутствуют: SEGA с новой разработкой DREAMCAST; SONY, пред- ложившая модель с легко предсказуемым назва- нием PLAYSTATION 2; на подходе MICROSOFT с Х-ВОХ. Игровая приставка DREAMCAST С точки зрения аппаратуры лидером среди игро- вых видеоприставок до последнего времени была NINTENDO 64. Однако ее 64-разрядный продессор с тактовой частотой 90 МГц не идет ни в какое сравнение с RlSC-процессороМ Hitachi SH4 (200 МГц), используемым в DREAMCAST. Кро- ме того, у DREAMCAST имеется 128-разрядный видеопроцессор на базе кристалла NEC Power VR2. Такая вычислительная мощь позволяет получить чрезвычайно динамичные игры с реалистичными объектами и великолепными имитациями воды, тумана и света. Самым большим преимуществом аппаратуры PLAYSTATION являлось использование дисков CD-ROM: компакт-диски вмещают до 650 Мб ин- формации, что в 20 раз превышает емкость самого большого картриджа NINTENDO. Однако DREAM- CAST превзошел соперника и здесь: в нем приме; няется специальная технология компакт-дисков двойной плотности, называемая GD-ROM. На GD помещается 1,2 Гб информации, a DREAMCAST снабжен 12-скоростным дисководом. Сейчас можно сказать, что успех или провал дан- ной системы зависит только от поддержки произ- водителей программного обеспечения. Игровая приставка PLAYSTATION 2 Эта видеоприставка не только сопоставима с самы- ми современными ПК, но по целому ряду парамет- ров превосходит их. в sony playStation 2 применен 128-раз- рядный процессор Emotion Engine (^ISC-архи- тектура MIPS IV) с тактовой частотой 300 МГц. Процессор имеет два целочисленных блока, два ариф- метических сопроцессора и специальный SIMD-блок для обработки мультимедиа-комавд (аналог блоков MMX, SSE и 3DNow! в архитектуре х86). Упомянем также сопроцессор для обработки изоб- ражений, помимо всего прочего включающий в себя декодер MPEG-2 H обладающий быстродействием 150 млн пикселов в секунду. Оперативная память объемом 32 Мб по быстродействию более чем втрое превосходит память компьютеров IBM PC. Видеопроцессор PLAYSTATION 2 базируется на параллельном рендеринг-процессоре Graphic Synthesizer с встроенным динамическим ОЗУ объ- емом 4 Мб. Скорость обмена по шине «видеопроцес- сор-память» составляет 48 Гб/с. Тактовая частота видеоускорителя и памяти - 150 МГц. Производи- тельность видеопроцессора игровой приставки PLAYSTATION 2 выше, чем у nVidia GeForce256. SONY PLAYSTATION 2 обеспечивает звуковое со- провождение по технологиям Dolby Digital (АС-3) и DTS. Для связи с внешними устройствами в этой мо- дели имеется слот PC Card, порты USB и i.Link (IEEE 1394), а также привод DVD-ROM. Разуме- ется, к портам можно подключать разнообразные периферийные устройства - сетевые карты, моде- мы, винчестеры, ZIP-дисководы и пр., в том числе и от сторонних производителей. х Игровая приставка Х-ВОХ Итак, компания MICROSOFT обратила внимание на рынок игровых видеоприставок и собирается выпустить свою систему, называемую Х-ВОХ. Пока устройство находится в стадии разработки, можно привести только предварительные сведения об ожидающем нас монстре. В качестве центрального используется стандарт- ный процессор Intel Pentium III с тактовой частотой 600 МГц. К нему подключены 64 Мб памяти, специа- лизированный звуковой процессор и графический процессор с аппаратным ускорением 2D- и 3D-rpa- фики. Микросхема графического процессора разра- батывается компанией nVidia, а значит, его произво- дительность будет, вероятно, на несколько порядков выше, нежели у любого другого ускорителя на рынке. Конечно, в наличии все необходимые аксессуа- ры: DVD-ROM, возможность расширения, выход в Internet; уже предусмотрено объединение несколь- ких консолей в сеть. В Х-ВОХ, помимо ставших уже стандартными карт с энергонезависимым ОЗУ, ко- торые предназначены для хранения данных на вре- мя отключения питания, появится жесткий диск. А теперь угадайте, какая система будет записана в ПЗУ приставки? Правильно, Windows. Точнее, специально разработанный для Х-ВОХ вариант, ос- нованный на ядре Windows 2000. В целом видеоприставка Х-ВОХ выглядит много- обещающе, а зная снособность MICROSOFT к из- влечению прибыли, можно с уверенностью говорить о том, что ее модель составит серьезную конкурен- цию как DREAMCAST, так и PLAYSTATION 2. Итак, мы полагаем, в будущем нам будет во что и на чем играть. Шоу должно продолжаться. Продолжение следует... КРАТКАЯ ИСТОРИЯ ИГРОВЫХ ПРИСТАВОК 11
ИГРОВАЯ ПРИСТАВКА DENDY Игровая приставка NES (NINTENDO ENTERTAINMENT SYSTEM), более из- вестная в нашей стране под именем DENDY (а также КЕНГА, FAMICOM и еще под несколькими псевдонимами), одной из первых появилась на российском рынке и познакомила тысячи людей с увлекательным миром компьютерных игр. Она подключается к обычному телевизору через антенный или НЧ вход. К приставке можно подсоединить два игровых пульта GAMEPAD или один пульт GAMEPAD и световой пистолет ZAPPER. На корпусе устройства рас- полагаются клавиши включения питания и перезапуска системы. Назначе- ние кнопок на игровом пульте будет понятно даже тем, кто не знает анг- лийского языка и потому не в состоянии перевести надписи. Внутри устройства располагаются центральный процессор, являющий- ся аналогом известного микропроцессора 6502, аудио- и видеопроцессо- ры. Имеется также оперативное запоминающее устройство объемом 2 Кб. В игровом картридже находится ПЗУ с записанным в нем программным обеспечением и дополнительной видеопамятью. В некоторых модифика- циях содержится дополнительная память, позволяющая сохранять теку- щую игровую ситуацию. Модели отличаются друг от друга размером встроенного ОЗУ и звуко- вым процессором. По этой причине картриджи, нормально функциониру- ющие на одних приставках, не работают с другими. Кроме того, приставки в зависимости от модификации формируют ви- деосигнал либо в системе PAL, либо в системе NTSC. Параметры этих устройств неодинаковы, и картридж, помеченный как «NTSC only», не смо- жет корректно работать с игровой приставкой системы PAL.
Архитектура и принцип работы. Структурная схема 1.1. Технические 1.2. Архитектура характеристики и принцип работы Центральный процессор В этом разделе архитектура игровой приставки Тип Разрядность шины данных Разрядность шины адреса Тактовая частота Память ОЗУ аналог 6502 8 бит 16 бит 1,773447 МГц 2 Кб DENDY рассматривается с точки зрения програм- мирования, подробно описываются центральный процессор, способы формирования изображения, работа аудиопроцессора. Особое внимание уделено внутренним регис- трам игровой приставки и особенностям программ- ного обеспечения. ПЗУ отсутствует Видеопамять Видеопроцессор 2 Кб 1.2.1. Структурная схема Тип графики спрайтовая Структурная схема игровой приставки DENDY Разрядность шины адреса 14 бит приведена на рис. 1.1. Разрядность шины данных 8 бит Основой приставки является центральный про- Количество спрайтов 64 цессор (CPU). Во всех приставках, совместимых со Размер спрайтов 8x8 или 8x16 стандартом NES, используется процессор, анало- Разрешение 256x240 точек гичный известному микропроцессору 6502. Количество цветов На одном кристалле с центральным размещен всего 52 и музыкальный сопроцессор. В оригинальной при- одновременно на экране 16 ставке, производимой фирмой NINTENDO, при- меняется аудиопроцессор, реализующий четыре Рис. 1.1. Структурная схема игровой приставки DENDY 13
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА DENDY аналоговых и один цифровой канал звука. Однако большинство приставок, поставляемых в Россию, являются корейскими аналогами, в них встроен зву- ковой сопроцессор без цифрового канала. Контроллер прямого доступа к памяти (Direct Memory Access, DMA) также располагается на кри- сталле центрального процессора. Игровые пульты и другие устройства подключа- ются к шине данных через модуль ввода/вывода, представляющий собой два буферных регистра. В самостоятельный блок выделено также ОЗУ объемом 2 Кб, которое предназначено для хранения переменных, игровых данных, стека процессора и т.д. Формирование картинки на экране телевизора обеспечивает видеопроцессор приставки (PPU). Информация об изображении хранится в видеопа- мяти (VRAM) объемом 2 Кб. Эта память ие связана с основной памятью приставки, доступ к пей осущест- вляется только через регистры PPU. Видеопроцес- сор формирует стандартный видеосигнал, который подается па выходной разъем приставки. Находящийся в корпусе модулятор преобразует сигналы изображения и звука в ВЧ сигнал, пред- назначенный для подачи на антенный вход телеви- зора. В пультах установлены кнопки управления и микросхема интерфейса, осуществляющая пере- дачу байта данных центральному процессору при- ставки. В картридже, который подключается к пристав- ке через 60-контактный (или 72-контактный в мо- дели NES) разъем, располагаются постоянное запо- минающее устройство объемом от 16 до 256 Кб, в котором записана игровая программа, и память видеопроцессора. Оперативная память с питанием от батарейки (SRAM), куда записывается игровая ситуация на время выключения приставки, также может нахо- диться в картридже. Чтобы задействовать все ре- сурсы графического процессора, некоторые кар- триджи содержат дополнительное ПЗУ или ОЗУ для видеопроцессора (VRAM/VROM). Если объем ПЗУ картриджа превышает 32 Кб, то его обязательной частью является контроллер стра- ниц памяти (МВС), который осуществляет пере- ключение страниц, используемых центральным процессором. Питающее напряжение (+5 В) для приставки поступает от сетевого адаптера через встроенный стабилизатор. 1.2.2. Центральный процессор В данном разделе рассматриваются архитектура процессора, его внутренние регистры, способы ад- ресации, система команд и прерывания. Здесь приводится лишь справочная информация; более полные сведения о программировании на языке ас- семблера для процессора 6502 можно найти в изда- ниях, указанных в конце книги, и в сети Internet. Как отмечалось выше, в игровых приставках, совместимых со стандартом NES, используется центральный процессор, который аналогичен из- вестному микропроцессору 6502 фирмы MOS TECHNOLOGY. От оригинала он отличается от- сутствием десятичного режима выполнения ариф- метических команд. В PAL-версии приставки так- товая частота процессора составляет 1,773447 МГц, а в NTSC-версии - 1,7897725 МГц. Микропроцессор обменивается информацией с другими устройствами посредством 16-разрядиой шипы адреса, 8-разрядиой шины данных и шины управления. 16 разрядов шины адреса позволяют процессору обращаться к 64 Кб памяти (65535 байт). Регистры внешних устройств адресуются про- цессором так же, как и ячейки памяти, и находятся в общем адресном пространстве микропроцессора. Структурная схема центрального процессора иг- ровой приставки DENDY приведена на рис. 1.2. Рис. 1.2. Структурная схема центрального процессора игровой приставки DENDY Регистры процессора Центральный процессор игровой приставки DEN- DY содержит пять 8-разрядных регистров и один 16-разрядиый. Каждый регистр имеет свое имя и отличается по способам использования. Аккумулятор является наиболее часто применя- емым регистром микропроцессора. Он служит для загрузки данных в другие регистры, проведения любых математических, и логических операций, а также для иных целей. Фактически это 8-разряд- ный регистр, который в программах на языке ас- семблера обозначается буквой «А». Индексный регистр X задействуется микропро- цессором для доступа к ячейкам памяти посред- ством индексного метода адресации, о котором 14
Архитектура и принцип работы. Центральный процессор рассказывается ниже. Этот 8-разрядный регистр не- обходим при обработке таблиц, хранящихся в памяти. Индексный регистр Y по своему назначению и ис- пользованию аналогичен индексному регистру X. Однако в их функционировании есть некоторые различия, которые будут рассмотрены при описа- нии методов адресации микропроцессора. Регистр состояния процессора Р хранит инфор- мацию о режиме работы процессора и о результа- тах проведенных вычислений. Каждый бит этого 8-разряднбго регистра является флагом, то есть изменяет свое состояние при определенных усло- виях. На работу процессора можно влиять путем модификации содержимого этого регистра. Структура регистра состояния центрального про- цессора игровой приставки DENDY приведена на рис. 1.3. |n|v|i|b[o|i[z. |с| 7 6 5 4 3 2 10 Рис. 1.3. Структура регистра состояния центрального процессора игровой приставки DENDY Рассмотрим назначение отдельных разрядов ре- гистра. Флаг С играет роль флага переноса, который используется при выполнении сложения или вычи- тания. Разряд С регистра состояния процессора становится равным 1, если результат выполнения команды сложения больше 255 (OFFh) или если результат выполнения команды вычитания мень- ше 0. Таким образом, этот флаг представляет собой как бы дополнительный разряд аккумулятора, по- зволяющий проводить арифметические операции с числами, разрядность которых превышает 8 бит. Флаг Z - флаг нулевого результата, который ра- вен 1, если результатом выполнения команды явля- ется 0. Флаг I - флаг прерываний, устанавливаемый и сбрасываемый командами процессора SEI и CLI. 1 в этом разряде запрещает процессору обрабатывать запросы прерывания, поступающие по линии IRQ. Более подробно эта тема рассматривается при опи- сании системы прерываний процессора. Флаг D - флаг десятичного режима. Микропро- цессор игровой приставки не поддерживает работу арифметических команд в двоично-десятичном коде, поэтому состояние данного флага не влияет на функ- ционирование процессора. Программист может ис- пользовать этот бит регистра состояния по своему усмотрешпо. Состояние флага изменяется программ- но командами SED и CLD. Оригинальный микро- процессор 6502 позволяет складывать и вычитать числа как в двоичном, так и в двоично-десятич- ном коде. Если флаг D равен 0, то операнды ко- манд сложения и вычитания рассматриваются как двоичные числа, а если установлен в 1 - как двоично-десятичные. Флаг В - флаг программного прерывания, уста- навливается при выполнении команды BRK. Флаг V - флаг переполнения. Равен 1, если ре- зультат арифметической операции над числами со знаком выходит за допустимые пределы или если при выполнении арифметической операции осущест- влялся перенос из шестого разряда в седьмой. Флаг N - флаг знака, который равен седьмому разряду результата арифметической операции. Указатель стека S содержит младший байт адре- са первой свободной ячейки в специальной струк- туре данных, называемой стеком. В стек можно за- писывать данные, а при обработке прерываний или при вызове подпрограммы здесь сохраняется адрес возврата. В рассматриваемом микропроцессоре стек всегда располагается в первой странице памяти, ко- торая нахоДится в диапазоне 010 Oh - OlFFh, таким образом, для указания адреса вершины стека доста- точно 8-разрядного регистра. Стек растет вниз, то есть от адреса OlFFh к адресу 010Ch. Счетчик команд PC представляет собой един- ственный 16-разрядный регистр центрального про- цессора игровой приставки DENDY. Его назначе- ние - указывать адрес команды, которая выполняется микропроцессором. Центральный процессор при- ставки регулярно извлекает команду, размещенную в памяти по адресу, на который указывает счетчик команд, увеличивает значение счетчика, обрабаты- вает команду и повторяет этот цикл снова. Коман- ды перехода позволяют изменить содержимое про- граммного счетчика и задать необходимый порядок выполнения команд, размещенных в памяти. Способы адресации Большинство команд процессора обеспечивают выполнение действий с какими-либо данными. Например, для сложения нужны два числа. Один из операндов микропроцессора приставки всегда размещается в аккумуляторе, куда после выполне- ния команды помещается результат. Второй операнд содержится в памяти по исполнительному адресу. Исполнительный адрес - это фактический номер ячейки памяти, начиная с которой располагаются необходимые для процессора команды или данные. Возможные приемы формирования процессором исполнительного адреса называются способами ад- ресации. Описываемый процессор насчитывает три- надцать различных способов адресации (см. ниже). Некоторые методы формирования исполнитель- ного адреса в процессоре игровой приставки DEN- DY представлены на рис. 1.4. Аккумуляторная адресация. При использова- нии этого способа операция производится над со- держимым аккумулятора. ИГРОВАЯ ПРИСТАВКА DENDY 15
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА DENDY а) д) PC РС+1 б) в) 0020 +Х I 002А е) 0020 Регистр А Старший байт адреса операнда Код команды Базовый адрес б нулевой странице 0026 0027 PC РС+1 ЗЕ61 Операнд Младший байт адреса операнда Регистр X г) PC Регистр А РС+1 РС+2 3000 ж) 0016 0017 Код команды Младший байт базового адреса Старший байт базового адреса 3012 Старший байт базового адреса Млодший байт базового адреса Регистр X Оперонд Регистр А Регистр Y Код команды PC РС+1 Адрес в нулевой 16 странице 3620 3629 Операнд Рис. 1.4. Методы формирования исполнительного адреса в процессоре игровой приставки DENDY Например: LSR А ; Логический сдвиг байта ; из аккумулятора вправо. Неявная адресация. Для команд, применяющих такой метод, расположение данных строго фикси- ровано и дополнительных указаний не требуется. Например: ТАХ ; Переслать данные из А в X. Непосредственная адресация. В этом случае 8-разрядный операнд хранится в памяти сразу за кодом команды, то есть по адресу РС+1 (рис. 1.4а). В программах на языке ассемблера непосредственная адресация обозначается знаком # перед операндом. Прямая адресация. При работе с данным алгорит- мом адресации в команде указывается адрес располо- жения операнда в памяти компьютера (рис. 1.46). Прямая адресация нулевой страницы. Если опе- ранд расположен в нулевой странице памяти (адре- са 00 0Oh - OOFFh), можно задействовать команды с прямой адресацией нулевой страницы, которые занимают меньше места в памяти и быстрее вы- полняются. Первый байт адреса всегда равен О и подставляется процессором автоматически. Эта- пы формирования исполнительного адреса пред- ставлены на рис. 1.4в. Индексированная по X адресация. Все коман- ды, применяющие этот метод, занимают в памя- ти компьютера три байта. Первый байт содержит код команды, второй и третий - базовый адрес. - Исполнительный адрес операнда получается сум- мированием базового адреса с содержимым регис- тра X, как показано на рис. 1.4г. Индексированная по Y адресация. Аналогична рассмотренной выше, только вместо регистра X ис- пользуется регистр Y. Индексированная по X адресация нулевой стра- ницы. В данном случае команды занимают два байта: первый содержит код команды, а второй - базовый адрес в нулевой странице памяти. Исполнительный адрес операнда образуется путем сложения базово- го адреса с содержимым регистра X микропроцес- сора, как показано на рис. 1.4д. При попытке адре- соваться за пределы нулевой страницы (если сумма базового адреса и содержимого индексного регис- тра больше OFFh) формируется исполнительный адрес ООО Oh. Индексированная по Y адресация нулевой стра- ницы. Аналогична рассмотренному выше способу, 16
Архитектура и принцип работы. Центральный процессор только вместо регистра X применяется регистр Y микропроцессора. Индексно-косвенная адресация. Команды с та- ким методом адресации всегда двухбайтные. Пер- вый байт включает в себя код команды, а второй - базовый адрес в нулевой странице памяти. Испол- нительный адрес вычисляется по следующему ал- горитму (рис. 1.4е): 1. Базовый адрес суммируется с содержимым регис- тра X. При этом старший байт полученного адреса всегда равен 00b (то есть FFh + 02h = Olh), а не OlOih. 2. Из ячейки с вычисленным адресом считывается младший байт адреса операнда. 3. Адрес ячейки памяти увеличивается на 1. Если ад- рес был OFFh, то следующий адрес будет OOh, то есть адресации за пределы нулевой страницы не происходит. 4. Из ячейки памяти с полученным адресом считыва- ется старший байт адреса операнда. 5. Из ячейки памяти с вычисленным адресом извле- кается операнд. Косвенно-индексная адресация. Команды, ис- пользующие данный метод, также занимают в па- мяти компьютера два байта. Первый байт содержит код операции, а второй - адрес в нулевой странице. Исполнительный адрес операнда вычисляется по следующему алгоритму (рис. 1.4ж): 1. Из ячейки памяти, расположенной в нулевой стра- нице по указанному в команде адресу, извлекается младший байт базового адреса. 2. Адрес ячейки памяти увеличивается на 1. Если ад- рес был OFFh, то следующий адрес будет ooh, то есть адресации за пределы нулевой страницы не происходит. 3. Из ячейки памяти с полученным адресом считыва- ется старший байт базового адреса. 4. К базовому адресу прибавляется содержимое ре- гистра Y. 5. Из ячейки памяти с вычисленным адресом извле- кается операнд. Относительная адресация. Этот метод адресации применяется в командах перехода. Первый байт ко- манды содержит код операции, а второй - смещение в диапазоне от -128 до 127. Отрицательное смеще- ние указывается в дополнительном коде. При вы- полнении команды перехода смещение прибавля- ется к содержимому программного счетчика для получения адреса следующей выполняемой коман- ды. Не забывайте, что смещение складывается с со- держимым программного счетчика, когда тот указы- вает на команду, идущую за командой перехода. Косвенная адресация. С данным методом способ- на работать только команда безусловного перехода JMP. При этом в команде задается адрес ячейки памяти, содержащей адрес перехода. Обратите внимание: выхода за пределы страницы при из- влечении адреса перехода из памяти не будет, то есть старший байт адреса не изменится. Напри- мер, при выполнении команды JMP ($C0FF) младший байт адреса извлекается из ячейки па- мяти с адресом с 0 FFh, а старший байт - из ячей- ки с адресом СО0Oh, а не Cl 0 Oh, как можно было бы ожидать. Система команд Центральный процессор игровой приставки DEN- DY способен выполнять 56 различных команд. Все команды процессора делятся на следующие основ- ные группы: • команды пересылки данных: LDA, STA, LDX, STX, LDY, STY, TAX, TAY, ТХА, TYA, TSX, TXS; • команды арифметических операций: INC, DEC, INX, INY, DEX, DEY, ADC, SBC; • команды логических операций: AND, ORA, EOR; • команды сравнения: CMP, CPX, CPY, BIT; • команды сдвига: ASL, ASR, ROL, ROR; • команды перехода: BCC, BCS, BEQ, BNE, BMI, BPL, BVC, BVS, JMP; • команды работы с подпрограммами: J SR, RTS; • команды управления процессором: CLC, SEC, CLD, SED, CLV, CLI, SEI, RTI, BRK, NOP; • команды работы co стеком: PHA, PHP, PLA, PLP. Полная информация о системе команд централь- ного процессора игровой приставки DENDY приве- дена в приложении 1. Система прерываний Центральный процессор игровой приставки DENDY может обрабатывать три независимых запроса на прерывание. В таком случае выполнение програм- мы приостанавливается, в стеке сохраняется ре- гистр состояния процессора и текущее значение программного счетчика, а затем из памяти считы- вается вектор прерывания. Вектор прерывания - это адрес программы, ко- торая должна выполняться каждый раз, когда цен- тральный процессор получает запрос на прерыва- ния от внешних устройств. Прочитав из памяти вектор прерывания, процес- сор записывает его в программный счетчик и запус- кает процедуру обработки прерывания. Рассмотрим возможные типы прерываний и про- цедуры их обработки. Маскируемое прерывание IRQ. Процедуру обра- ботки данного прерывания центральный процессор выполняет каждый раз, когда получает сигнал низ- кого уровня по шине IRQ, если флаг I в регистре состояния сброшен. Эту процедуру также можно ИГРОВАЯ ПРИСТАВКА DENDY 77
Архитектура и принцип работы. Адресное пространство ИГРОВАЯ ПРИСТАВКА DENDY вызвать, выполнив команду процессора BRK. В слу- чае программного прерывания перед началом его обработки в регистре состояния процессора уста- навливается флаг В. При обслуживании запроса на прерывание в сте- ке сохраняются состояния программного счетчика и регистра состояния процессора, после чего вы- полняется программа, адрес начала которой запи- сан в ячейках памяти FFFEh и FFFFh. Для возвра- та из прерывания применяют команду RTI. При этом из стека считываются сохраненные значения регистра состояния микропроцессора и программ- ного счетчика, а затем продолжается исполнение прерванной программы. В стандартной конфигурации игровой пристав- ки сигнал запроса маскируемого прерывания IRQ выведен на разъемы расширения и подключения картриджа, однако игровые программы используют только возможность программного прерывания при выполнении команды BRK. Немаскируемое прерывание NMI. Это самый важный запрос на прерывание в игровой пристав- ке. Любая программа обязательно содержит проце- дуру его обработки. Каждый раз, когда заканчивается формирование очередного кадра (50 раз в секунду для стандарта PAL и 60 раз в секунду для стандарта NTSC), по переднему фронту кадрового гасящего импульса видеопроцессор приставки формирует сигнал за- проса немаскируемого прерывания и посылает его центральному процессору. Процессор прерывает исполнение программы, сохраняет в стеке значения программного счетчика и регистра состояния, после чего запускает проце- дуру обслуживания немаскируемого прерывания, адрес которой записан в ячейках памяти FFFAh и FFFBh. Возврат из процедуры обработки осущест- вляется также командой RTI. Особая важность этого прерывания для игровой приставки объясняется тем, что центральный про- цессор может обмениваться данными с видеопамя- тью только в те моменты, когда формируется кадро- вый гасящий импульс, начало которого и вызывает запрос на прерывание. Таким образом, программа обработки немаскируемого прерывания в любой видеоигре осуществляет запись в регистры видео- процессора и пересылку заранее подготовленных данных в видеопамять. Сброс микропроцессора. Данное прерывание происходит при включении питания приставки и при поступлении сигнала низкого уровня на вход RESET. При этом центральный процессор копиру- ет в программный счетчик содержимое ячеек памя- ти с адресами FFFCh, FFFDh и начинает выполне- ние программы. Состояние регистров процессора не изменяется. 1.2.3. Адресное пространство Как уже отмечалось, центральный процессор при- ставки способен обращаться к 65536 ячейкам памя- ти с адресами от 0 0 0 Oh до FFFFh. Однако в связи с упрощенной схемой дешифрации адреса реаль- ный объем памяти, используемой видеопристав- кой, гораздо меньше. Рассмотрим распределение адресного простран- ства приставки (рис. 1.5) и назначение основных блоков. Рис. 1.5. Распределение адресного пространства центрального процессора игровой приставки DENDY Адреса 0 0 0 Oh - 0 7FFh: здесь располагается встро- енное ОЗУ приставки, используемое для хранения переменных во время работы программы, а также нулевая страница памяти и стек процессора. При выключении питания содержимое этой области памяти теряется. Адреса 0800h - OFFFh: обращение по любому из указанных адресов приведет к обращению к встро- енному ОЗУ приставки, следовательно, адрес 0 8 0 Oh аналогичен адресу OOOOh, адрес 0 801h- адресу 0 0 0 lh и т.д. Адреса 1000h - 17FFh: то же, что и для адресов 0800h - OFFFh. Адреса 180Oh - IFFFh: то же, что и для адресов 0800h - OFFFh. Адреса 200Oh - 2007h: регистры видеопроцес- сора. Адреса 4000h-4016h: регистры звукового про- цессора, контроллера прямого доступа к памяти (ПДП) и контроллера ввода/вывода. Адреса 5000h - 5FFFh: в стандартной конфигу- рации не используются, предназначены для моду- лей расширения. 18
Архитектура и принцип работы. Видеопроцессор Адреса 6О 0 Oh - 7FFFh: оперативная память кар- триджа. Может отсутствовать. Адреса 8 0 0 Oh - BFFFh: переключаемый байк по- стоянной памяти программ картриджа. В простей- ших картриджах не применяется. Адреса СО0Oh - FFFFh: непереключаемый банк постоянной памяти программ картриджа. Присут- ствует в любом картридже независимо от размера памяти. По этим адресам всегда подключаются по- следние 16 Кб ПЗУ картриджа. В шесть ячеек ПЗУ с адресами FFFAh - FFFFh записаны адреса проце- дур обслуживания прерываний. 12.4. Видеопроцессор Видеопроцессор игровой приставки DENDY пред- назначен для формирования изображения на экране телевизора. Характеристики видеопроцессора в зна- чительной мере определяют возможности пристав- ки и качество выводимой картинки. В ранних моделях DENDY применялась отдель- ная микросхема видеопроцессора НА6538, в более поздних - микросхема UM6561, объединяющая все микросхемы приставки в одном корпусе. С точки зрения параметров видеопроцессора названные микросхемы аналогичны. Описываемый видеопроцессор ориентирован на блочную графику с использованием спрайтов. Ин- формация об изображении хранится в видеопа- мяти, которая не входит в адресное пространство центрального процессора. Доступ к видеопамяти осуществляется через регистры видеопроцессора. Часто в картридже располагается отдельный блок видеопамяти, подключаемый вместо встроенной. Это делается для ускорения работы видеопроцессо- ра и улучшения графики. Различия между PAL- и NTSC-версиями при- ставки проявляются при выводе данных на экран. В системе PAL размер картинки составляет 256x240 точек. В NTSC разрешение меньше - 256x224 точ- ки. Информация об изображении, выходящем за эти границы, остается в видеопамяти, но не появ- ляется на экране. В результате длительность кадрового гасящего импульса изменяется (см. ниже), что может при- вести к несовместимости между названными вер- сиями устройства. Рассмотрим более подробно структуру видеопа- мяти игровой приставки и процесс формирования изображения на экране телевизора. Карта видеопамяти Карта распределения адресного пространства ви- деопроцессора игровой приставки DENDY пред- ставлена на рис. 1.6. Знокоеене ротор 0 Знакогенеротор 1 Экронноя строницо 1 Область символов Экранной страница 1 Область атрибутов Экронноя страница 2 Область символов Экранной страница 2 Область атрибутов Экронноя страница 3 Область символов Экранной строницо 3 Область атрибутов Экранная страница 4 Область символов Экронноя строницо 4 Область атрибутов Не используется Палитра «рано Палитра спрайтов ИГРОВАЯ ПРИСТАВКА DENDY Не используется OOOOh lOOOh 2000h 23C0h 2400h 27COh 2800h 2BCOh 2COOh 2FCOh 3000b 3F00h 3F10h 3F20h 3FFFh Рис. 1.6. Адресное пространство видеопроцессора игровой приставки DENDY Как видно из рис. 1.6, видеопроцессор может ра- ботать с 16 Кб памяти в диапазоне адресов OOOOh- 3FFFh. Однако, как и в случае с центральным про- цессором, объем реально присутствующей памяти гораздо меньше: он составляет всего 2 Кб. В видеопамяти приставки DENDY выделено не- сколько областей, имеющих различное назначение. Рассмотрим, как они влияют на формирование изображения. Знакогенератор. Эта область видеопамяти зани- мает первые 8 Кб с адресами 0 0 0 Oh - IFFFh. Здесь хранятся битовые образы выводимых на экран сим- волов. Под символом в данном случае подразумева- ется блок изображения размером 8x8 точек. Каждый битовый образ требует 16 байт памяти. Видеопро- цессор совмещает две части битового образа, в ре- зультате чего получается четырехцветное изображе- ние. Цвет с кодом, два младших разряда которого равны 0, всегда воспринимается видеопроцессором как прозрачный. Этот процесс поясняется на рис. 1.7. Как видно из рис. 1.6, область памяти OOOOh - IFFFh разделена на две таблицы знакогенераторов с базовыми адресами OOOOh и 100Oh. Одна табли- ца хранит изображения блоков, из которых строит- ся фоновая картинка, в другой находятся битовые образы спрайтов. Назначение таблиц определяется программным путем при записи кода в управляю- щий регистр видеопроцессора. Итак, первым этапом, необходимым для вывода изображения на экран, является разработка знако- генераторов для фона и спрайтов. Из сделанных вами блоков и будет состоять показываемая кар- тинка. 19
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ ПРИСТАВКА DENDY СОДЕРЖИМОЕ ВИДЕОПАМЯТИ 0010: 00010000 (10h) 0018: 00000000 (OOh) ООП: 00000000 (00h) 0019 : 00101000 (28h) 0012 : 01000100 (44h) 001A: 01000100 (44h) 0013 : 00000000 (00h) 001B: 10000010 (82h) 0014: 11111110 (FEh) 001C: 00000000 (OOh) 0015: 00000000 (OOh) 001D: 10000010 (82h) 0016: 10000010 (82h) 001E: 10000010 (82h) 0017: 00000000 (00h) Разряд 0 РЕЗУЛЬТАТ СОВМЕЩЕНИЯ 001F: 00000000 Разряд 1 (OOh) 00 00 00 01 00 00 00 00 ... 1.. 00 00 10 00 10 00 00 00 . .2.2. 00 11 00 00 00 11 00 00 .3. . .3 10 00 00 00 00 00 10 00 2 2. 01 01 01 01 01 01 01 00 1111111. 10 00 00 00 00 00 10 00 2 2. 11 00 00 00 00 00 11 00 3 3 . Об 00 00 00 00 00 00 00 экране не показываются и размер видимого изобра- жения по вертикали уменьшается до 224 точек. Предположим, что на экран нужно вывести бук- ву «А», битовый образ которой уже размещен в зна- когенераторе по адресу OOlOh (рис. 1.7). Если ак- тивна первая экранная страница, то запись числа 0lh в видеопамять по адресу 2 0 0 Oh приведет к по- явлению буквы в верхнем левом углу экрана (толь- ко в PAL-версии). Сразу за областью символов начинается область атрибутов экранной страницы, занимающая 64 бай- та. Каждая ячейка области атрибутов хранит ин- формацию о цвете четырех смежных квадратов размером 2x2 символа, которые в свою очередь образуют квадрат 4x4 символа. Таким образом, два младших бита ячейки области атрибутов пер- вой экранной страницы с адресом 23C0h содер- жат данные о цвете для символов, располагающих- ся в ячейках области символов первой экранной страницы с адресами 2 0 0 Oh, 2 0 0 lh, 2 02 Oh и 2 02 lh. Структура экранной страницы игровой пристав- ки DENDY представлена на рис. 1.8. Рис. 1.7. Формирование символов в игровой приставке DENDY Обычно в ПЗУ игрового картриджа содержится один или несколько заранее записанных знакогене- раторов. Микросхема контроллера управления стра- ницами памяти подключает один из них в адресное пространство видеопроцессора, и все его символы становятся доступными для вывода на экран. Экранная страница. В адресном пространстве видеопроцессора DENDY располагаются четыре экранные страницы. Однако установленной в игро- вой приставке памяти хватает только для размеще- ния двух экранных страниц, одна из которых назы- вается активной. Как программы используют эти страницы, будет объяснено ниже. Каждая экранная страница делится на область символов и область атрибутов. ' Активная экранная страница - это страница ви- деопамяти, содержимое которой служит для фор- мирования изображения на экране. Область символов - часть экранной страницы, включающая информацию о номерах элементов зна- когенератора, из которых строится изображение. Область атрибутов - часть экранной страницы, где хранятся сведения о цвете элементов знакоге- нератора, из которых строится изображение. Область символов каждой экранной страницы содержит 960 байт и представляет собой сетку из 30 строк по 32 символа в каждой. Таким образом, размер экрана равен 256x240 точек. Важное отличие NTSC-версии приставки состо- ит в том, что верхний и нижний ряды символов на а) 6) 32 знакоместо (256 точек) 2000Н 2001h 2020h 202lh 2040h 2360h 2380h 2381h 23A0h 23A1h 23C0h 23C8h 23D0h 23D8h 23E0h 23E8h 23F0h 23F8h 2002h| | 201 Ph 201Eh 201Fh 203Eh 203Fh 205Fh 237Fh 23A2h| |23BDh 239Eh 23BEh 239Fh 23BFh 8 знакомест 23C1h 23C2h 23C3h|23C4h 23C5h 23C6h 23C9h 23C7h 23CAh 23CDh 23Dlh 23D6h 23CEh 23CFh 23D7h 23DFh 23E7h 23E9h 23F1h 23F2h 23F5h 23EEh 23F6h 23F9K 23FAH 23FBh|23FCh 23FDh 23FEH 23EFh 23F7h 23FFh Рис. 1.8. Структура экранной страницы видеопроцессора игровой приставки DENDY: а - область символов; б - область атрибутов Для получения номера цвета точки, изображенной где-либо на экране, требуются два бита из соответ- ствующего банта атрибутов и два бита из битового образа, записанного в знакогенераторе. В результате получается 4-разрядное число в диапазоне 0-15, од- нозначно задающее номер цвета в палитре (рис. 1.9). Внутренней видеопамяти игровой приставки до- статочно только для размещения двух экранных страниц. Это приводит к возникновению эффекта, называемого отражением экранных страниц. Четы- ре основных случая отражения рассмотрены ниже. 1оризонталъное отражение. В этом режиме по- парно объединяются экранные страницы 0,1 и 2,3, 20
Архитектура и принцип работы. Видеопроцессор —ji_ 2000h 200th 2020h 2021h 2040h 2041h 2060h 2061h “XZ 2022h 2023h 2042h 2043h I 2062h 2063h 2002h 2003h | 7 | 6 j 5 | 4 j 3 | 2 | 1 | 0 | Байт атрибутов 23C0h Область символов Рис. 1.9. Формирование цветовой информации в видеопроцессоре игровой приставки DENDY то есть запись в экранную страницу 0 идентична записи в экранную страницу 1. Вертикальное отражение. В данном режиме объ- единяются экранные страницы 0, 2 и 1, 3. Запись в экранную страницу 0 идентична записи в экран- ную страницу 2. Режим одного экрана. В таком случае используется одна экранная страница с установленным номером. Режим четырех экранов. Если в картридже уста- новлено дополнительное ОЗУ для видеопроцессора, то можно работать со всеми четырьмя экранными страницами. Режим отражения экранных страниц видеопамя- ти полностью зависит от контроллера страниц па- мяти, находящегося в картридже. Внутренние схе- мы видеопроцессора не позволяют менять этот режим. Некоторые контроллеры страниц памяти модифицируют его путем записи кода в управляю- щий регистр во время выполнения программы. Палитра. В памяти видеопроцессора игровой приставки по адресам 3F00h-3FlFh располагают- ся палитра фона и палитра спрайтов. Каждая па- литра содержит по 16 цветов, которые могут быть одновременно использованы для раскрашивания изображения. 4-разрядный код, образованный как объяснялось выше, однозначно определяет номер цвета в палитре. В каждую ячейку палитры помещается 8-разряд- ное значение, устанавливающее цвет точки на экра- не. Шестой и седьмой разряды записанного в ячей- ке числа игнорируются. Необходимо учитывать также эффект, называе- мый отражением палитр. Каждая четвертая ячей- ка палитры отражается на аналогичную ячейку другой палитры, то есть в адресном пространстве видеопроцессора совмещены ячейки с адресами 3FOOh и 3F10h, 3F04h и 3F14h, 3F08h и 3F18h, 3F0Ch и 3 FICh, поскольку цвет с двумя младшими битами 00 всегда определяется как прозрачный и не влияет на окраску изображения. Содержимое ячейки памяти с адресом 3F00h задает цвет фона для всего экрана. Возможности видеопроцессора Разнообразие и качество программного обеспече- ния игровой приставки в значительной степени определяются возможностями видеопроцессора и теми манипуляциями с графической информаци- ей, которые он в состоянии производить сам, в то время как центральный процессор приставки занят другими задачами. Игровая приставка DENDY, как уже было сказано, создавалась для использования спрайтовой графи- ки. Спрайты - графические блоки фиксированно- го размера, которые обрабатываются видеопроцес- сором независимо от основного изображения. Видеопроцессор DENDY позволяет выводить иа экран до 64 спрайтов размером 8x8 или 8x16 точек каждый, передвигать спрайты и фон независимо друг от друга и плавно прокручивать фоновую кар- тинку в любом направлении. Рассмотрим эти функ- ции устройства более подробно. Спрайты. Если в игре используются спрайты раз- мером 8x8 точек, то их изображения хранятся в одном из знакогенераторов, расположенных в видеопамяти. Если применяются спрайты размером 8x16 точек, то изображения спрайтов с четными номерами помеща- ются в знакогенератор 0 (с базовым адресом 000Oh), а с нечетными - в знакогенератор 1 (с базовым адре- сом 10 0 Oh). Иногда контроллер страниц памяти, уста- новленной в картридже, дополнительно подключает ПЗУ, где изображения спрайтов записаны заранее. Память спрайтов. Это отдельная страница памя- ти видеопроцессора, которая содержит информацию о специальных графических блоках - спрайтах. Память спрайтов занимает 256 байт, которые не входят в адресное пространство видеопроцессора. Для каждого из 64 спрайтов, с которыми может ра- ботать видеопроцессор игровой приставки, отведе- но по четыре байта. В этих байтах располагается следующая инфор- мация: 1. Координата верхнего левого угла спрайта по вер- тикали. 2. Номер блока с изображением спрайта в знакогене- раторе. 3. Атрибуты спрайта: D7 - отражение спрайта относительно вертикаль- ной оси: 1 - выводится зеркальное отражение спрайта; 0 - выводится обычный спрайт. D6 - отражение спрайта относительно горизон- тальной оси: 1 - выводится зеркальное отражение спрайта; 0 - выводится обычный спрайт.’ D5 - приоритет спрайта: 1 - спрайт поверх фона; 0 - фон поверх спрайта. D4 - D2 - не используются. D1, D0 - два старших бита для формирования цве- товой информации. ИГРОВАЯ ПРИСТАВКА DENDY 21
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ ПРИСТАВКА DENDY 4. Координата верхнеголевого угла спрайта по гори- зонтали. На одной линии экрана может располагаться не более 8 спрайтов. При написании программ для иг- ровой приставки следует помнить об этом ограни- чении. На экране спрайты всегда представлены в соответ- ствии со своим приоритетом. Если вывести в одно и то же место экрана два спрайта, то верхним окажет- ся спрайт с меньшим номером. Номер спрайта опре- деляется положением его описания в памяти спрай- тов. Таким образом, данные о спрайте 0 занимают первые четыре байта памяти спрайтов, о спрайте 1 - вторые четыре байта и т.д. Информация в память спрайтов может быть записана непосредственно через регистры видео- процессора или с помощью контроллера прямого доступа к памяти. Скроллинг изображения. Видеопроцессор игро- вой приставки позволяет плавно прокручивать фо- новое изображение в вертикальном или горизон- тальном направлении независимо от спрайтов. При вертикальной прокрутке две экранные стра- ницы объединяются в общее изображение разме- ром 256x480 точек, которое можно перемещать вверх или вниз. При горизонтальной прокрутке две экранные страницы группируются в изображение размером 512x240 точек, которое передвигается вправо или влево. Выбор способа отражения экранных страниц, которые рассматривались выше, зависит от исполь- зуемого вида аппаратного скроллинга. Скроллинг изображения осуществляется путем записи значе- ния смещения в специальный регистр видеопроцес- сора. Организация экранной памяти при аппаратной прокрутке изображения показана на рис. 1.10. Кадровый синхроимпульс. Доступ к видеопа- мяти игровой приставки возможен только через регистры видеопроцессора при его программном выключении или во время кадрового гасящего им- пульса. Рассмотрим более детально процесс формирова- ния изображения на экране телевизора. Рис. 1.10. Объединение экранных страниц в игровой приставке DENDY при аппаратном скроллинге Экронноя строницо 3 2800b Экронноя строницо 4 2С00И Экронноя Экранная страница 1 страница 2 2000b 2400b Генерация кадра начинается с левого верхнего угла и идет по строкам вниз. По окончании вывода каждой строки в видеосигнал добавляется строч- ный синхроимпульс. Так последовательно отобра- жаются все 240 строк, составляющие полный экран. В завершение видеопроцессор посылает одновремен- но кадровый синхроимпульс и сигнал немаскируемо- го прерывания NMI. Это занимает время, необходи- мое для вывода четырех телевизионных строк. Затем видеопамять становится доступной в течение пери- ода формирования кадрового синхроимпульса. Данный период равен времени, затрачиваемому на вывод 20 телевизионных строк, после чего доступ к видеопамяти запрещается и начинается развертка нового кадра. Такой процесс повторяется 50 раз в се- кунду для системы PAL и 60 раз в секунду для NTSC. Слои изображения. Создаваемое игровой при- ставкой DENDY изображение состоит из четырех независимых слоев. Рассмотрим их, начиная с са- мого нижнего: 1. Полностью окрашенный экран, цвет которого опре- деляется содержимым ячейки видеопамяти с адре- сом 3F00h. 2. Спрайты с битом приоритета, равным 0. 3. Фоновое изображение. 4. Спрайты с битом приоритета, равным 1. Регистры видеопроцессора Всю работу по формированию изображения на экране центральный процессор осуществляет, передавая дан- ные видеопроцессору через регистры управления и получая данные из регистров контроля состояния видеопроцессора. Назначение регистров описано ниже. Регистр 1 управления видеопроцессором Адрес: 2000Н. Tun: запись. Назначение разрядов: D7 - формирование запроса немаскируемого прерывания NMI при кадровом синхроимпульсе: 0 - запрещено; 1 - разрешено. D6 - не используется, должен быть равен 0. D5 - размер спрайтов: 0 - 8x8 точек; 1 - 8x16 точек. D4 - базовый адрес знакогенератора для форми- рования фона: 0 - 0000Н; 1 - 1000h. D3 - базовый адрес знакогенератора для форми- рования спрайтов: 0- OOOOh; 1 - 1000h. 22
Архитектура и принцип работы. Видеопроцессор D2 - приращение адреса при обращении к ви- деопамяти: О - увеличение адреса на 1 (горизонтальная запись); 1 - увеличение адреса на 32 (вертикальная запись). DI, DO - адрес активной экранной страницы: 00 - 2000Н; 01 - 2400Н; 10 - 2800Н; И - 2С00Н. Регистр 2 управления видеопроцессором Адрес: 200 lh. Tun: запись. Назначение разрядов: D7 - D5 - яркость экрана/интенсивность цвета (не используется). D4 - управление отображением: 0 - спрайты не видны; 1 - спрайты выводятся. D3 - управление отображением: 0 - фон не отображается; 1 - фон отображается. D2 - задание области вывода спрайтов: 0 - спрайты невидимы в крайнем левом столбце из 8 точек; 1 - спрайты видны на всем экране. D1 - определение области вывода фона: 0 - фон невидим в крайнем левом столбце из 8 точек; 1 - фон присутствует на всем экране. D0 - тип дисплея (не используется). Регистр состояния видеопроцессора Адрес: 2002Н. Тип: чтение. Назначение разрядов: D7 - флаг кадрового синхроимпульса: 1 - видеопроцессор генерирует кадровый синхроимпульс; 0 - видеопроцессор формирует изображение. Разряд устанавливается при получении кадрово- го синхроимпульса и сбрасывается при окончании формирования синхроимпульса или после чтения содержимого регистра. D6 - флаг обнаружения спрайта 0: 1 - спрайт с номером 0 выведен на экран; 0 - спрайт с номером 0 не обнаружен. Разряд становится равен 1, когда видеопроцессор начинает вывод на экран спрайта с номером 0 (пер- вый в памяти спрайтов). Например, если координата спрайта 0 по вертикали равна 42, то разряд будет уста- новлен во время показа 42-й строки кадра. Сброс раз- ряда происходит при генерации кадрового синхро- импульса или после чтения содержимого регистра. D5 - счетчик количества спрайтов на линии: 1 - больше 8 спрайтов на текущей линии; 0-8 или меньше спрайтов на текущей ли- нии. D4 - разрешение записи в видеопамять: 1 - запись запрещена; 0 - запись разрешена. Регистр адреса памяти спрайтов Адрес: 2003Н. Тип: запись. Назначение разрядов. В регистр записывается 8-разрядное значение кода, определяющее адрес в памяти спрайтов для последующего доступа через регистр 2004Н. Регистр данных памяти спрайтов Адрес: 2004Н. Тип: запись/чтение. Назначение разрядов. Через регистр осуществляется доступ к памяти спрайтов видеопроцессора. Начальный адрес уста- навливается путем записи значения кода в регистр 2 0 0 3 h. После каждого обращения к регистру адрес автоматически увеличивается на 1. Регистр аппаратной прокрутки Адрес: 200 5h. Тип: двойная запись. Назначение разрядов. В регистр последовательно помещаются два кода для осуществления аппаратной прокрутки фоново- го изображения. Первое записываемое значение передается в регистр вертикальной прокрутки, вто- рое - горизонтальной. Эти значения определяют смещение графического фрагмента от начала эк- ранной страницы. При работе с данной функцией видеопроцессора следует помнить, что эффект отра- жения экранных страниц не позволяет одновремен- но использовать вертикальную и горизонтальную прокрутки, если в картридже нет дополнительной видеопамяти. Регистр адреса видеопамяти Адрес: 2006h. Тип: двойная запись. Назначение разрядов. В этот регистр последовательно помещаются два байта 16-разрядного адреса для последующе- го доступа к видеопамяти через регистр 2 007h. Сначала записывается старший байт адреса, затем младший. Регистр данных видеопамяти Адрес: 2007h. Тип: запись/чтение. ИГРОВАЯ ПРИСТАВКА DENDY 23
Архитектура и принцип работы. Звуковой процессор Назначение разрядов. Через регистр осуществляется доступ к видеопамя- ти. Начальный адрес записывается в регистр 2 006h. После каждого обращения к регистру адрес автома- тически увеличивается на 1 или на 32 - в зависимо- сти от состояния разряда D2 регистра 20 00h. Из-за особенностей конструкции видеопроцессора первое чтение из видеопамяти после установки нового ад- реса дает неверный результат. Например, для чтения байта, расположенного в видеопамяти по адресу 2 0 0 Oh, необходимо выполнить следующие команды: VRAM_RD: LDA #$20 STA $2006 ; Установка старшего ; байта адреса. LDA #$00 STA $2006 ; Установка младшего ; байта адреса. LDA $2007 ; Первое чтение ; из видеопамяти. ; Пропуск неверного результата. LDA $2007 ; Второе чтение ; из видеопамяти. ; Теперь в А содержимое ячейки ; видеопамяти с адресом 2000h. LDA $2007 ; Теперь в А содержимое ячейки ; видеопамяти с адресом 2001h, ; если разряд D2 регистра 2000h сброшен, ; или ячейкй видеопамяти с адресом 202Oh, ; если разряд D2 регистра 200Oh ; установлен. При записи данных в видеопамять и при работе с палитрами (адреса 3F00h - 3FlFh) рассмотренная особенность не проявляется. Следует также помнить, что любой доступ к видеопамяти возможен только в момент формирования кадрового синхроимпульса. Прямой доступ к памяти Игровая приставка DENDY содержит контроллер прямого доступа к памяти, который позволяет бы- стро переписать 256 байт из основной памяти в па- мять спрайтов без участия центрального процессора. С точки зрения программирования такой контрол- лер представляет собой один 8-разрядный регистр с адресом 4014h. Регистр адреса прямого доступа к памяти Адрес: 4014h. Tun: запись. Назначение разрядов. В регистр записывается 8-разрядное число, опре- деляющее адрес страницы в основной памяти. Контроллер прямого доступа к памяти передает содержимое выбранной страницы основной па- мяти в память спрайтов. Например, после записи в регистр 4014h кода C3h в память спрайтов видео- процессора направляется содержимое основной па- мяти игровой приставки, расположенное в диапа- зоне C300h - C3FFh. 1.2.5. Звуковой процессор Подобно видеопроцессору, освобождающему цен- тральный процессор от необходимости обрабаты- вать графическую информацию, звуковой процес- сор предназначен для самостоятельных действий по формированию аудиосигналов. Звуковой про- цессор игровой приставки DENDY поддерживает четыре аналоговых аудиоканала и один цифровой (в некоторых моделях цифровой канал отсутствует). Регистры звукового процессора С точки зрения программирования звуковой процес- сор представляет собой набор регистров с адресами 400Oh - 4015h. Записывая данные в эти регистры, программа сообщает звуковому процессору о пара- метрах генерируемого сигнала. Первые два аналоговых канала формируют вы- ходной сигнал с прямоугольной формой импуль- сов, третий канал - треугольные импульсы, а чет- вертый - сигнал шума. Регистр управления канала 1 Адрес: 400 Oh. Tun: запись. Регистр управления генератором канала 1 Адрес: 4001h. Tun: запись. Регистр управления частотой канала 1 Адрес: 4002h, 4003h. Tun: запись. В эти два регистра записывается 12-разрядное число, задающее частоту выходного сигнала. В ре- гистр 40 02h помещаются старшие четыре разряда, а в регистр 4003h - младшие восемь. Регистр управления канала 2 Адрес: 400 4h. Tun: запись. Регистр управления генератором канала 2 Адрес: 4 0 0 5h. Тип: запись. Регистр управления частотой канала 2 Адрес: 4006h, 4007h. Тип: запись. В эти два регистра записывается 12-разрядное дво- ичное число, задающее частоту выходного сигнала.
Архитектура и принцип работы. Структура картриджа В регистр 4 О 0 6h помещаются старшие четыре раз- ряда, а в регистр 4007h - младшие восемь. Регистры управления канала 3 (треугольные им- пульсы) Адрес: 4008h, 4009h. Tun: запись. Регистр управления частотой канала 3 Адрес: 400Ah, 400Bh. Tun: запись. В эти два регистра записывается 12-разрядное дво- ичное число, задающее частоту выходного сигнала аналогично соответствующим регистрам для каналов 1и2. Регистры управления канала 4 (сигнал шума) Адрес: 400Ch, 400Dh. Tun: запись. Регистр управления частотой канала 4 Адрес: 400Ah, 400Bh. Tun: запись. В эти два регистра записывается 12-разрядное дво- ичное число, задающее частоту выходного сигнала аналогично соответствующим регистрам для каналов 1 и 2. Регистр управления цифровым каналом Адрес: 4010Н. Tun: запись. Регистр управления громкостью цифрового ка- нала Адрес: 4011Н. Tun: запись. Число, записываемое в данный регистр, опреде- ляет уровень выходного сигнала цифрового аудио- канала. Регистр часто используется при воспроиз- ведении оцифрованной музыки и речи. Регистр адреса цифрового канала Адрес: 4012Н. Tun: запись. Число, записываемое в этот регистр, задает адрес расположения данных для цифрового канала зву- кового процессора в основной памяти. Адрес вы- числяется следующим образом: (Содержимое регистра 4012h) х 64 + 49152. Регистр длины блока данных цифрового канала Адрес: 4013h. Tun: запись. Число, записываемое в этот регистр, задает дли- ну блока данных, содержащего информацию для цифрового аудиоканала. Длина блока рассчитыва- ется следующим образом: (Содержимоерегистра 4013h)x 16 + 1. Регистр управления звуковым процессором Адрес: 4015h. Tun: запись. Назначение разрядов: D4 - устанавливается в 1 для включения цифро- вого канала. D3 - устанавливается в 1 для включения канала шумового сигнала. D2 - устанавливается в 1 для включения канала с треугольной формой импульсов. D1 - устанавливается в 1 для включения кана- ла 2 звукового сопровождения. DO - устанавливается в 1 для включения кана- ла 1 звукового сопровождения. 1.2.6. Структура картриджа Структурная схема картриджа игровой приставки DENDY приведена на рис. 1.11. ИГРОВАЯ ПРИСТАВКА DENDY Рис. 1.11. Структурная схема картриджа игровой приставки DENDY Любой картридж обязательно содержит одну или несколько 16-килобайтных страниц ПЗУ, хранящих программное обеспечение, а также один или несколь- ко 8-килобайтных блоков памяти (ОЗУ или ПЗУ) для видеопроцессора. ПЗУ с программным обеспечением находится в адресном пространстве центрального процессора в диапазоне 8000h - FFFFh. По адресам COOOh - FFFFh всегда подключена последняя 16-килобайтная страница ПЗУ. В диапазоне адресов 8 0 0 Oh - BFFFh может быть подсоединена любая из оставшихся страниц ПЗУ (сразу после запуска приставки это обычно первая страница). 25
Архитектура и принцип работы. Организация ввода/вывода ИГРОВАЯ ПРИСТАВКА DENDY Если объем ПЗУ картриджа составляет 32 Кб или меньше, такое ПЗУ просто включается в адрес- ное пространство центрального процессора. Если объем ПЗУ больше 32 Кб, в картридж устанавли- вается специальная микросхема контроллера стра- ниц памяти (МВС), определяющая, какая страни- ца ПЗУ доступна центральному процессору при обращении по адресам 80OOh - BFFFh. Имеющаяся в картридже микросхема ПЗУ для видеопроцессора содержит знакогенераторы, ко- торые подключаются к видеопамяти по адресам 000Oh - iFFFh и хранят информацию, необходи- мую для формирования изображения на экране те- левизора. Число используемых знакогенераторов зависит от сложности игры, а управление ими осу- ществляет микросхема контроллера страниц памя- ти. Вместо ПЗУ знакогенератора в картридже может располагаться микросхема ОЗУ, применяемая для тех же целей. В этом случае данные знакогенерато- ров содержатся в ПЗУ с программным обеспечени- ем и передаются в видеопамять программным путем. Некоторые картриджи содержат дополнитель- ное ОЗУ с питанием от встроенной батарейки, ко- торое позволяет сохранять игровую ситуацию на время выключения приставки. ОЗУ подсоединяет- ся к центральному процессору и доступно по адре- сам 6000h - 7FFFh. Следует отметить, что существует более десяти различных моделей контроллеров страниц памяти. Более подробную информацию можно найти в In- ternet на сайтах, указанных в конце книги. 1.2.7. Организация ввода/вывода Управление приставкой осуществляется с помо- щью пультов управления, подключаемых к ней че- рез специальные разъемы. Также к приставке мож- но подсоединить световой пистолет, адаптер для использования четырех пультов, интерфейс управ- ления роботом и другие устройства. Схемотехника этих устройств будет рассмотрена в следующем разделе, а здесь мы опишем архитектуру ввода/вы- вода с точки зрения программирования. В игровой приставке DENDY есть два порта вво- да/вывода, через которые поступают данные от лю- бых подключенных к ней устройств. Назначение разрядов этих портов зависит от типа внешнего устройства. Игровой пульт С приставкой DENDY можно использовать один или два игровых пульта. Для программиста работа с пультами сводится к формированию импульса, по которому происходит запись состояния кнопок пульта в сдвиговый регистр и последующее чтение данных из регистра. Чтобы сохранить состояние кнопок пульта в сдви- говом регистре, необходимо записать сначала 1, а затем 0 по адресу 4 016h посредством приведен- ного фрагмента: Joy_strobe: LDX #$01 STX $4016 DEX STX $4016 После выполнения данной программы в регис- трах обоих пультов сохраняется состояние восьми кнопок. Теперь при каждом обращении по адресу 4016h для первого пульта и 4017h для второго по линии D0 шины данных будут поступать сведения о состоянии кнопок (0 - не нажата; 1 - нажата) в следующем порядке: А, В, SELECT, START, UP, DOWN, LEFT, RIGHT. Следовательно, процедура чтения состояния иг- рового пульта должна выглядеть так: Joy_read: ; Формирование сигнала для записи ; состояния клавиш пульта в регистр. LDX #$01 STX $4016 DEX STX $4016 ; Последовательное чтение состояния ; клавиш. LDY #$08 ; Количество ; последовательных чтений. Joy_loop: LDA $4016 ; Чтение состояния ; клавиши. ROR ; Перенос разряда D0 ; в флаг С. ТХА ROL ; Добавление разряда ; к результату. ТАХ DEY BNE Joy__loop ; В аккумуляторе байт состояния ; кнопок пульта. RTS Через специальный адаптер допустимо одновре- менное подключение четырех игровых пультов. В этом случае при последовательном чтении порта 4 016h сначала передаются восемь бит состояния пульта 1, а затем восемь бит состояния пульта 3. Из порта 4 017 h аналогичным образом считывается со- стояние пультов 2 и 4. При работе с четырьмя пультами формировать синхроимпульс нужно только один раз, после чего будут считаны состояния всех пультов. 26
Принципиальная схема. Модуль процессора Световой пистолет Световой пистолет подсоединяется к разъему игро- вой приставки DENDY вместо одного из пультов. С точки зрения программирования работа со свето- вым пистолетом сводится к анализу двух разрядов в байте, считываемом из порта 4016Н или 4017h. Положение курка светового пистолета опреде- ляется анализом разряда D3: единица здесь сигна- лизирует о нажатии курка. Сигнал с фототранзис- тора влияет на разряд D4: если он засвечен, в этом разряде будет 0. Порты ввода/вывода Система ввода/вывода игровой приставки DENDY состоит из двух портов с адресами 4 016Ь и 4 017h. Регистр игрового порта 1 Адрес: 4016Н. Tun: запись/чтение. Назначение разрядов: D0 - при записи формируется стробирующий импульс для сохранения состояния пультов; при чтении определяется состояние пультов 1 и 3. D3 - показывается состояние курка светового пистолета. D4 - состояние фототранзистора светового пис- толета. Регистр игрового порта 2 Адрес: 4017Н. Тип: запись/чтение. Назначение разрядов: D0 - определяется состояние пультов 2 и 4. D3 - показывается состояние курка светового пистолета. D4 - отражается состояние фототранзистора све- тового пистолета. 1.3. Принципиальная схема В этом разделе приведены подробные принципи- альные схемы процессорного модуля и пультов, а также рассмотрен вариант построения картриджа с программным обеспечением 8-разрядных игро- вых приставок DENDY. 1.3.1. Модуль процессора В игровой приставке DENDY обычно имеются три платы: • центрального процессора; • выходных разъемов; • ВЧ модулятора и стабилизатора. Между собой платы соединены гибкими плоски- ми (ленточными) кабелями. Иногда встречаются варианты, выполненные на одной или двух печат- ных платах, однако это не влияет на схему при- ставки. Первоначально игровые приставки содержали несколько микросхем различной степени интегра- ции, причем основными являлись микросхемы цен- трального процессора и видеопроцессора. Развитие микроэлектроники привело к тому, что игровые приставки теперь включают только БИС типа UM6561 или ее аналог. В этой микросхеме на одном кристалле расположены центральный и гра- фический процессоры, память и регистры ввода/ вывода. Многие видеоприставки корейского производ- ства вместо одной UM6561 используют несколько микросхем (обычно две или три). Однако принцип работы приставки и сигналы на выходных разъемах в таком случае не изменяются, поэтому данные ва- рианты схемы здесь рассматриваться не будут. Многокристальный вариант Принципиальная схема первого варианта игровой приставки DENDY, изготовленного с применением нескольких микросхем различной степени интегра- ции, приведена на рис. 1.12. Итак, основой игровой приставки является мик- росхема центрального процессора (IC1). Работа процессора синхронизируется внешним генерато- ром тактовых импульсов, выполненным на транзис- торах Q1 и Q2, частота которого стабилизирована кварцем XI (21,251465 МГц). Сигналы всех внутренних шин (адреса АО - А15, данных DO - D7 и управления) игровой приставки выведены на разъем XS1, к которому подключает- ся картридж. Шины данных (выводы IC1/21-28), адреса (выводы IC1/4-19) и управления (выводы ICI/31,34) соединяют центральный процессор (IC1) с микросхемой ОЗУ (IC3) и видеопроцессором (IC2). Дешифратор адреса на микросхеме 74LS139 (IC8) вырабатывает сигналы, разрешающие другим мик- росхемам обмениваться данными с центральным процессором. На входы дешифратора поступают три старших разряда шины адреса А13 - А15 (вы- воды 1С8/2,3,13) и сигнал М2 (вывод IC8/14). Если процессор работает с памятью, установленной в кар- тридже, то сигнал ВЗ на выводе IC8/9 имеет низкий уровень. Когда обмен данными происходит с встро- енным ОЗУ приставки (IC3), низкий уровень при- нимает сигнал АО на выводе IC8/4. Сигнал низко- го уровня на выводе IC8/5 свидетельствует о том, что центральный процессор задействует микросхе- му видеопроцессора IC2. На одном кристалле с центральным процессором расположены также звуковой процессор игровой приставки и схема дешифратора адреса портов вво- да/вывода. ИГРОВАЯ ПРИСТАВКА DENDY 27
Принципиальная схема. Модуль процессора DO 2 STRB 3 CLK 4 +5В 6 GND 8 XS2 JOY—1 Разъем пулъта DO 2 STRB 3 CLK 4 +5B 6 GND 8 XS2 JOY-2 Разъем пульта GND 1 AUDIO 2 IRQ 3 J2 D4 4 J2 D3 5 J2 D2 6 J2 DI 7 J2 DO 8 CLK2 9 OUT2 10 OUT1 11 STRB 12 JI D1 13 CLK1 14 +5B 15 XS3 EXPANSION Разъем расширения Рис. 1.12. Принципиальная схема первого варианта игровой приставки DENDY (1 из 2) Выходные сигналы первого и второго аудио- каналов микшируются и поступают на выход AU 1 (вывод IC1/1), а сигналы остальных каналов - на выход AU2 (вывод IC1/2). Полный сигнал звуко- вого сопровождения образуется путем смешивания в схеме, выполненной на резисторах R8 - R12 и конденсаторе С7, а затем подается на выходной разъем игровой приставки и на вход модулятора, формирующего ВЧ сигнал. На выводы IC1/39-37 передаются три разряда числа (DO, D1 и D2), записываемого в порт 4016Н. Каждый раз, когда процессор производит чтение из порта с адресом 4016h, на выходе СК1 (вывод IC 1 /36) появляется импульс низкого уровня. А если процессор читает из порта с адресом 4017h, анало- гичный импульс формируется на выходе СК2 (вы- вод ICI/35). Выходные сигналы игровых пультов и светового пистолета передаются на шину данных через два буферных регистра IC6 и IC7 (типа 74НС368). Микросхема видеопроцессора IC2 совместно с микросхемой видеопамяти IC4 выдает полный 28
Принципиальная схема. Модуль процессора Рис. 1.12. Принципиальная схема первого варианта игровой приставки DENDY (2 из 2) ИГРОВАЯ ПРИСТАВКА DENDY видеосигнал. IC2 и IC4 связаны шинами адреса, дан- ных и управления. Микросхема видеопамяти IC4 аналогична микросхеме основного ОЗУ. Обратите внимание: в видеопроцессоре IC2 одни и те же выводы (IC2/31-37) применяются как шина данных и как шина адреса. Сначала сюда поступают младшие восемь бит адреса ячейки видеопамяти. При появлении сигнала низкого уровня на выходе ALE (вывод IC2/39) эти данные запоминаются в буфер- ном регистре IC5 (74LS373). Затем на выходе ALE устанавливается напряжение высокого уровня, на выводах IC2/26-30 остаются старшие разряды адреса, а выводы IC2/31-37 используются как шина данных. Сигналы шин видеопроцессора также выведены на разъем подключения картриджа XS1. Полный видеосигнал с выхода VIDEO OUT ви- деопроцессора (вывод IC2/21) поступает через эмиттерный повторитель, выполненный на транзис- торе Q3, на выходной разъем VIDEO OUT и на модулятор. Каскад усиления видеосигнала в некоторых мо? делях может отсутствовать. 29
Принципиальная схема. Модуль процессора ИГРОВАЯ ПРИСТАВКА DENDY Теперь мы вкратце расскажем об основных отли- чиях от базовой схемы, присутствующих в других моделях. Все они касаются используемых разъемов и назначения отдельных выводов. Существуют два основных варианта конструкции рассматриваемой игровой системы. Приставка NES оснащается 72-контактным разъемом для подключе- ния картриджа, 48-контактным разъемом расшире- ния и 7-контактными разъемами для подключения игровых пультов. Игровая приставка FAMICOM (DENDY) программно полностью совместима с при- ставкой NES, но использует 60-контактный разъем для подключения картриджа, 15-контактный разъем расширения и 9-контактные разъемы для подключе- ния игровых пультов. Разводка всех разъемов игровой приставки DEN- DY приведена на рис. 1.13а-в, а приставки NES - на рис. 1.13г-е. Однокристальный вариант Принципиальная схема однокристального варианта игровой приставки DENDY приведена на рис. 1.14. Здесь функции центрального процессора, ви- деопроцессора и памяти выполняет одна БИС типа UM6561. Частоту внутреннего тактового ге- нератора стабилизирует кварцевый резонатор XI (26,601712 МГц). Иногда схема тактового генерато- ра содержит также транзистор. Большинство выходных сигналов подаются не- посредственно на разъем картриджа XS4. Часть сиг- налов поступает на разъемы для подключения игро- вых пультов XS1, XS2 и разъем расширения XS3. Видео- и аудиосигналы передаются на выходные разъемы игровой приставки и на вход модулятора, иногда через транзисторные усилители. Выходные разъемы В приставке DENDY имеются два или три разъема для подключения пультов, светового пистолета и дру- гих периферийных устройств. Разъемы могут быть трех типов: 7-, 9- и 15-контактные. Игровые пульты разрешается подсоединять к 7- или 9-контактному разъему для подключения пульта или к 15-контактному разъему расширения пристав- ки, световой пистолет - только к 7- или 15-контакт- ному разъему, другие устройства - к 15-контактному разъему. Для подключения пультов служат два 9-контакт- ных разъема и один 15-контактный разъем расши- рения. Картридж приставки DENDY использует 60-контактный разъем, расположенный сверху. В игровой приставке NES для игровых пультов предназначены два 7-контактных разъема и один 48-контактный разъем расширения. Для подключения картриджа в приставке NES применяется 72-контактный разъем, отличающий- ся от 60-контактного наличием дополнительных цепей, соединенных с разъемом расширения. На этот разъем выведены сигналы шин видеопроцес- сора и центрального процессора. Внешний вид разъемов игровой приставки DEN- DY и назначение отдельных контактов приведены на рис. 1.13. Разъем расширения (рис. 1.136) рас- сматривается ниже, поскольку именно он наиболее
Принципиальная схема. Однокристальный вариант игровой приставки DENDY XI 26.601712МГц S1 RESET Рис. 1.14. Принципиальная схема однокристального варианта игровой приставки DENDY ИГРОВАЯ ПРИСТАВКА DENDY 31
ИГРОВАЯ ПРИСТАВКА DENDY удобен для подключения различных дополнитель- ных устройств. На контакт 2 (AUDIO IN) подается звуковой сигнал, который смешивается с выходными сигна- лами звукового процессора. Контакты 4-8 (J2 DO - J2 D4) представляют со- бой входы соответствующих разрядов порта второ- го джойстика. Коды сигналов с этих входов можно получить из порта 4017h командой LDA $4017. Вход JI D1 (контакт 13) подсоединен к разряду D1 порта 4016h. При обращении центрального процессора к портам с адресами 4 016h и 4 017h на выходах CLK1 (контакт 14) и CLK2 (контакт 9) формируются кратковремен- ные импульсы низкого уровня. На выходы OUTO - OUT2 (контакты 10-12) передаются разряды D0 - D2 слова, записываемого в порт 4 016h. На вход IRQ (контакт 3) поступает сигнал за- проса прерывания. 1.3.2. Картридж Сменный модуль игровой приставки DENDY - кар- тридж - содержит обычно две микросхемы ПЗУ или ОЗУ. Одна микросхема ПЗУ подключается к видеопро- цессору и хранит информацию знакогенераторов. Вместо ПЗУ знакогенераторов в некоторых картрид- жах используется микросхема статического ОЗУ. Принципиальная схема. Картридж Другая микросхема ПЗУ с программным обеспе- чением подсоединяется к центральному процессору. . Иногда на плате картриджа располагается до- полнительное ОЗУ с питанием от литиевой бата- реи, которое предназначено для сохранения игро- вой ситуации. Практически во всех картриджах, за исключени- ем самых простых, имеется микросхема контролле- ра страниц памяти, выполняющая функцию про- граммируемого дешифратора адреса. Конструктивно картридж приставки DENDY представляет собой защитный пластмассовый корпус размерами 105x90x20 мм с ключом в виде двух ско- сов для правильной установки. В нем располагает- ся печатная плата с 60-контактным разъемом и уста- новленными бескорпусными микросхемами: ПЗУ, ОЗУ и контроллера страниц. Принципиальная схема игрового картриджа без дополнительного ОЗУ с контроллером страниц типа МВС1 приведена на рис. 1.15. Картридж состоит из двух микросхем ПЗУ (IC1 и IC2) и контроллера страниц памяти IC3. Микро- схема IC1 (27С128) - это ПЗУ видеопроцессора с записанными в нем знакогенераторами. В адресное пространство видеопроцессора от- дельные страницы ПЗУ помещаются по адресам OOOOh - IFFFh. Младшие разряды адреса поступа- ют на микросхему IC1 непосредственно с соответ- ствующих контактов разъема XS1. Старшие разряды 10 То А1 А2 8 25 <9 24 '"23 ^326 4 20, 25 ____24 '1D 21 JI 23 12 2 I3 26 I4 27 15 1 I6 22 17 20, 22 АО ROM 19 R CS 18 6 IC3 МВС1 IC1 27С128 А2 АЗ А4 А5 А6 А15 А16 D0 D1 D2 D3 D4 D5 D6 D7 D0 Di D2 D3 D4 D5 D6 D7 А4 А5 А6 А7 А8 А9 А10 Al 1 А12 А13 А13 А14 ; М2 ЕА17 _5J----- 21 23 17 5 18 6 13 2 15 3 ЕА14 ^ЕА15 J-- ЕА16 D6 +5B GND 15 1 36 2 С2 0.01 Рис. 1.15. Принципиальная схема картриджа игровой приставки DENDY +5В|^А GND А8 А9 А10 А1 1 А12 А13 18 6 19 74 8s D — V~CS EV12 EV13 EV14 £|fV15 D7 D0 VA10 VAI 1 VAI 2 WRO VA10* +5B GND Cl О.О1 IC2 KONAMI 1М Al +5B A2 М2 A3 A12 A4 A13 A5 A14 A6 D7 A7 D6 A8 D5 A9 D4 A1D D3 Al 1 D2 A12 DI A13 DO A14 CS A15 AUD 0 A16 AUD 1 A17 V WR A18 V CS A19 VA13 A20 VA7 A21 VA8 A22 VA9 A23 VAIO A24 VA11 A25 VAI 2 A26 VA13 A27 VD7 A28 VD6 A29 VD5 A30 VD4 XS1.1 '12 2 У '5 то У“ У" 2 У У 5~ B1 GND B2 A11 B3 АЮ B4 A9 B5 A8 B6 A7 B7 A6 B8 A5 B9 A4 B10 A3 B11 A2 B12 Al B13 A0 B14 WR B15 TRO B16 GND B17 V RD B18 VAIO' В T9 VA6 B20 VA5 B21 VA4 B22 VA3 B23 VA2 B24 VA1 B25 VAO B26 VDO B27 VD1 B28 VD2 B29 VD3 B30 +5B XS1.2 32 a
Принципиальная схема. Модулятор адреса VA12 и VA13 формирует микросхема кон- троллера страниц памяти IC3. Выбор микросхемы ПЗУ происходит при нали- чии сигнала низкого уровня на входе CS (вывод ICI/20), подключенном к линии VA13 шины адре- са видеопроцессора. Данные передаются с выходов ПЗУ на контакты разъема XS1. Микросхема IC2 (KONAMI ROM 1Mbit) пред- ставляет собой масочное ПЗУ с записанной в нем программой емкостью 1 Мбит (128 Кб). Младшие разряды адреса АО - А13 поступают с соответству- ющих контактов картриджа, а старшие разряды адреса А14 - А16 генерирует контроллер страниц памяти IC3. Сигнал CS, разрешающий работу ПЗУ IC2, также передается с микросхемы IC3. IC3 является программируемым дешифратором адреса, формирующим старшие разряды адреса для микросхем ПЗУ IC1 и IC2. Она также вырабатыва- ет сигнал VA10’, от уровня которого зависит выбор режима отражения экранных страниц. В рассматриваемом картридже часть выходов не подключена, поэтому возможности микросхемы используются не полностью. г 1.3.3. Модулятор Модулятор игровой приставки DENDY получает сигнал изображения от микросхемы видеопроцес- сора IC2 и звуковой сигнал от микросхемы цен- трального процессора IC1 и формирует полный телевизионный ВЧ сигнал в одном из метровых диапазонов. Схема модулятора не стандартизирова- на и определяется, как правило, фирмой-изготови- телем. Однако принцип работы и состав основных узлов всегда одинаковы, так что изменения схемы не должны вызывать затруднений при ремонте. Принципиальная схема одного из возможных ва- риантов ВЧ модулятора приведена на рис. 1.16. Задающий ВЧ генератор выполнен на высоко- частотном транзисторе Q2 (аналог транзистора КТ368А). Он формирует несущую частоту одного из телевизионных каналов. Обычно рабочая часто- та генератора приставки находится в пределах 170— 230 МГц и определяется элементами LI, С8 - СИ, R9 - R11. Регулировка частоты производится изме- нением индуктивности катушки L1. Генератор, реализованный на транзисторе Q1 (аналог транзистора КТ3102), формирует поднесу- щую звука для полного телевизионного сигнала. Вы- ходной сигнал генератора модулируется сигналом звуковой частоты, поступающим через цепь R4, С1 с входа AUDIO IN (контакт' 4 разъема CN1). В зависимости от страны-изготовителя пристав- ки частота генератора составляет 5,5 или 6,5 МГц. Точная подстройка частоты сигнала осуществляет- ся вращением сердечника трансформатора Т1. Смеситель, выполненный на диодах DI, D2 (ана- лог диода КД503А), трансформаторе Т2 и транзис- торе Q3, формирует полный ВЧ телевизионный сигнал. На вход смесителя поступает сигнал зада- ющего генератора и низкочастотный видеосигнал с контакта 3 разъема CN1. С выхода смесителя ВЧ сигнал передается через согласующую цепь С15, L3 на выходной разъем RF OUT процессорного модуля. 1.3.4. Игровые пульты Для игровой приставки DENDY существует около десяти различных видов игровых пультов. Однако наибольшее распространение получили стандарт- ный игровой пульт, входящий в комплект поставки, турбо-пульт с дополнительными кнопками и свето- вой пистолет. Ниже рассмотрены принципиальные схемы этих устройств, а также схема адаптера для одновремен- ного подключения четырех пультов. Стандартный игровой пульт Стандартный игровой пульт для приставки DEN- DY состоит из подвижной крестовины и четырех Рис. 1.16. Принципиальная схема ВЧ модулятора игровой приставки DENDY ИГРОВАЯ ПРИСТАВКА DENDY 33
Принципиальная схема. Игровые пульты ИГРОВАЯ ПРИСТАВКА DENDY отдельных кнопок. Внутри пульта установлена бес- корпусная микросхема регистра сдвига, являющаяся аналогом микросхемы HEF4021B. В случае отсут- ствия оригинальной микросхемы можно исполь- зовать практически любой 8-разрядный регистр сдвига. Принципиальная схема стандартного пульта при- ведена на рис. 1.17. Рис. 7.77. Принципиальная схема стандартного игрового пульта для приставки DENDY При нажатии кнопки во время игры на соответ- ствующий вход сдвигового регистра подается сигнал низкого уровня. Высокий уровень при разомкнутых кнопках обеспечивается соединением входных ли- ний регистра с шиной питания +5 В через резисто- ры сопротивлением 10-68 кОм. Состояния входов в регистре IC1 запоминаются при поступлении импульса высокого уровня на вход РЕ микросхемы. После этого по отрицатель- ному фронту сигнала на входе CLK (вывод ICI/10) происходит сдвиг содержимого регистра и выдача старшего разряда по шине D0. У второго игрового пульта, поставляемого вместе с приставкой, могут отсутствовать кнопки START и SELECT, однако на схему пульта и принцип его работы это не влияет. Турбо-пульт Принципиальная схема турбо-пульта для игровой приставки DENDY приведена на рис. 1.18. Единственное отличие турбо-пульта от стандарт- ного заключается в наличии дополнительного выхо- да Т 6 Hz у микросхемы сдвигового регистра и двух дополнительных кнопок TURBO А и TURBO В, соединенных с этим выходом. Внутренний генератор микросхемы пульта фор- мирует на выходе Т последовательность импульсов частотой 6-10 Гц. Таким образом, нажатие и удержи- вание кнопки TURBO А аналогично нажатию и от- пусканию кнопки А с интенсивностью 6 раз в секун- ду. Применение данных кнопок уменьшает износ клавиш пульта, поскольку кнопки А и В обычно ис- пользуются в игре при стрельбе. Рис. 1.18. Принципиальная схема турбо-пульта для игровой приставки DENDY Адаптер для подключения четырех пультов В некоторых играх могут участвовать до четырех игроков. В этом случае четыре игровых пульта па- раллельно подключаются к разъемам игровой при- ставки через специальный адаптер. Принципиальная схема адаптера приведена на рис. 1.19. Как видно из принципиальной схемы, основной задачей адаптера является обеспечение считывания информации с пультов 1 и 3 во время поступления первых восьми синхроимпульсов, и с пультов 2 и 4 - при следующих восьми. Сигнал синхронизации, поданный по линии STRB, фиксирует состояние пультов в их внутрен- них регистрах и осуществляет начальную установ- ку схем адаптера. В течение первых восьми синхроимпульсов на выходах Q8 счетчиков IC1 и IC2 формируются сиг- налы низкого логического уровня, что обеспечива- ет поступление синхроимпульсов на пульты 1 и 3, а также передачу информации от этих пультов на входы игровой приставки. После восьмого синхроимпульса, пересылаемого от игровой приставки при чтении из порта ввода/ вывода, на выходе Q8 соответствующей микросхемы (IC1 или IC2) появляется сигнал высокого логичес- кого уровня (лог. 1), что приводит к переключению коммутатора IC3 или IC4 и подсоединению к разъ- емам приставки пультов 2 или 4 соответственно. Световой пистолет На рис. 1.20 приведены возможные варианты прин- ципиальной схемы светового пистолета игровой приставки DENDY. В качестве светочувствительного элемента здесь используется фототранзистор. В самых дешевых при- ставках его иногда заменяют фотодиодом, что приво- дит к ухудшению чувствительности устройства. Сигнал с выхода фотодиода через разделитель- ный конденсатор С1 поступает на усилитель, вы- полненный на транзисторе QI. С коллектора этого транзистора инвертированный сигнал через кон- такт 5 по цепи D4 передается в процессорный мо- дуль игровой приставки.
Принципиальная схема. Блок питания Рис. 1.19. Принципиальная схема адаптера для подключения четырех пультов к игровой приставке DENDY Рис. 1.20. Принципиальная схема светового пистолета игровой приставки DENDY Если пистолет направлен на телевизионный эк- ран, то на выходе D4 формируется импульсный сиг- нал с частотой, равной периоду кадровой развертки. Курок светового пистолета соединен с кнопкой с нормально замкнутыми контактами. Если курок отпущен, контакт разъема D3 соединен с общим проводом. При нажатии курка контакты размыка- ются, и на входе D3 появляется сигнал высокого логического уровня, который обеспечивается за счет подключения этой цепи внутри игровой при- ставки через резистор 10-51 кОм к шине +5 В. 1.3.5. Блок питания Блок питания игровой приставки DENDY состоит из внешнего сетевого адаптера и внутреннего ста- билизатора. Задачей внешнего сетевого адаптера является преобразование сетевого напряжения -220 В в по- стоянное напряжение 9-12 В, которое передается на внутренний стабилизатор игровой приставки. Принципиальная схема сетевого адаптера DEN- DY представлена на рис. 1.21. При ремонте блока следует помнить, что на вы- ходном разъеме центральный контакт соединен с об- щим проводом. +9... + 12S С1 470x25В Рис. 1.21. Принципиальная схема сетевого адаптера игровой приставки DENDY 35
Характерные неисправности ИГРОВАЯ ПРИСТАВКА DENDY Нестабилизированное напряжение с адаптера по- ступает на внутренний стабилизатор игровой при- ставки, выполненный на микросхеме AN7805 или на транзисторе и расположенный в процессорном мо- дуле. На выходе стабилизатора формируется по- стоянное напряжение +5 В. Принципиальные схемы двух вариантов стаби- лизатора напряжения питания игровой приставки DENDY приведены на рис. 1.22 и в дополнитель- ном описании не нуждаются. Рис. 1.22. Принципиальные схемы стабилизатора напряжения питания игровой приставки DENDY 1.4. Характерные неисправности Приставка не включается Возможные причины: неисправность сетевого адап- тера или внутреннего стабилизатора; короткое за- мыкание или обрыв цепей питания; неисправность картриджа; неисправность процессорного модуля. Алгоритм поиска неисправности: 1. Измерить выходное напряжение сетевого адапте- ра. Если оно превышает 9-12 В, заменить сетевой адаптер. Практика показывает, что наиболее часто сбои вызваны диодами выпрямительного моста. Если вышел из строя трансформатор, подойдет лю- бой источник питания с выходным напряжением 9- 12 В и допустимым током нагрузки 500 мА. 2. Отключить от процессорного модуля пульты, кар- тридж и модулятор, после чего проверить блоки иг- ровой приставки на отсутствие коротких замыка- ний. Если короткое замыкание обнаружено, после его устранения проверить стабилизатор и установ- ленный в нем низкоомный резистор. При возник- новении перегрузки обычно происходит обрыв од- ного из печатных проводников в цепи питания, поэтому необходимо тщательно осмотреть платы и убедиться в целостности проводников. З.Если короткое замыкание отсутствует, проверить внутренний стабилизатор игровой приставки. На- пряжение на выходе стабилизатора должно нахо- диться в пределах 5±0,1 В; в противном случае в ста- билизаторе, выполненном на микросхеме AN7805, следует заменить микросхему IC1 (аналог КР142Е- Н5А) и проверить конденсаторы С1 - С4. В стаби- лизаторе, реализованном на транзисторе, прове- рить транзистор Q1 (возможная замена - КТ815), стабилитрон D1 (возможная замена - КС156А) и ре- зистор R1. Вместо резистора допустимо поставить предохранитель, который будет защищать стаби- лизатор от короткого замыкания. 4. Включить приставку без пультов, модулятора и кар- триджа. На выходном разъеме VIDEO OUT должен присутствовать видеосигнал. При подаче этого сиг- нала на НЧ вход телевизора на экране появится хаотическое изображение, состоящее из цветных точек и квадратов. Наличие выходного сигнала сви- детельствует о неисправности в пультах или в моду- ляторе. 5. При отсутствии выходного сигнала проверить квар- цевый генератор и транзисторный каскад усиления видеосигнала. Исправность кварцевого резонатора Х1 и транзисторов Q1 - Q3 позволяет сделать вывод о необходимости замены всего процессорного мо- дуля. Приставка работает нестабильно Возможные причины: неисправность внешнего сете- вого адаптера или внутреннего стабилизатора; за- грязнение контактов разъема подключения кар- триджа. Алгоритм поиска неисправности: 1. Проверить выходное напряжение сетевого адап- тера. Часто сбой возникает из-за малой нагрузоч- ной способности адаптера, поставляемого в ком- плекте с игровой приставкой. Проблема решается подключением более мощного адаптера. 2. Проверить надежность контактных соединений в разъемах приставки. Разъем подключения кар- триджа необходимо осмотреть особенно тщатель- но. Протереть контакты спиртом. 3. Проверить внутренний стабилизатор игровой при- ставки. Полезно установить микросхему или сило- вой транзистор стабилизатора на радиатор с до- статочной площадью рассеивания (около 10 см2). 4. Установить дополнительные конденсаторы в цепи питания, например номиналом 100,0 мкФ х 16 В и 0,01 мкФ на каждой из плат приставки и в кар- тридже. Не работает световой пистолет Возможные причины: обрыв в соединительном кабе- ле или плохие контакты в разъеме; неисправность 36
Характерные неисправности фотодиода или транзистора светового пистолета; неисправность контактов курка в световом писто- лете. Алгоритм поиска неисправности: 1 . Проверить целостность соединительного кабеля и надежность соединения в разъеме. В случае вы- хода из строя разъема заменить его вместе с ответ- ной частью на любой 7-контактный разъем, имею- щийся в наличии. 2 . Проверить транзистор в световом пистолете и кон- такты под курком. Удостовериться в наличии замы- кания контактов при нажатом курке, поскольку по- ломка, как правило, происходит в механической части пистолета. 3 .Низкая чувствительность пистолета часто объяс- няется смещением фокусирующей линзы, уста- новленной в стволе. В этом случае необходимо установить линзу на'место и закрепить ее. Регу- лировка места крепления линзы позволяет улуч- шить характеристики даже работающего свето- вого пистолета. 4 .Исправность внутренних цепей светового пистоле- та свидетельствует о необходимости замены всего процессорного модуля игровой приставки. Не работает пульт Возможные причины: обрыв в соединительном ка- беле или плохой контакт в разъеме; загрязнение кнопок; неисправность микросхемы пульта. Алгоритм поиска неисправности: 1. Проверить целостность соединительного кабеля и надежность соединения в разъеме. В случае вы- хода из строя разъема заменить его вместе с ответ- ной частью на любой 7-контактный разъем, имею- щийся в наличии. 2. Проверить входные сигналы РЕ и STROBE. Отсут- ствие сигналов свидетельствует о необходимости замены центрального процессора. 3. Проверить выходной сигнал микросхемы, установ- ленной в пульте. При отсутствии сигнала заменить пульт. Не работают некоторые кнопки пульта Возможные причины: загрязнение пульта или неис- правность микросхемы. Алгоритм поиска неисправности: 1. Протереть спиртом плату пульта и резиновую про- кладку с токопроводящими площадками. 2. Если неисправны токопроводящие площадки на резиновой прокладке, восстановить их, наклеив кусочки фольги. Удобнее использовать фольгу от сигаретных пачек: она имеет бумажную основу, что обеспечивает лучшее приклеивание к резине. 3. В случае нарушения токопроводящего покрытия на плате восстановить его с помощью очищенного монтажного провода, припаянного к дорожкам пе- чатной платы. 4. Если все контактные площадки исправны, необхо- димо заменить микросхему, установленную в пуль- те, или весь пульт. Нет ВЧ сигнала на выходе модулятора Возможные причины: нарушение настройки генера- тора, неисправность задающего генератора или смесителя. Алгоритм поиска неисправности: 1. Убедиться, что неисправный элемент находится в схеме ВЧ модулятора, проверив наличие видео- и аудиосигналов на НЧ выходе. Отсутствие какого- либо из этих сигналов свидетельствует о поломке процессорного модуля. 2. Если нет ни звука, ни изображения, наиболее ве- роятна неисправность задающего генератора. Для проверки генератора следует измерить частоту вы- ходного сигнала: она должна находиться в преде- лах 170-230 МГц. Отсутствие сигнала позволяет сделать вывод о необходимости замены транзисто- ра Q2. В случае выхода частоты генератора за ука- занные границы необходимо проверить элементы LI, С8 --С11. R10, R11. 3. Убедившись в исправности задающего генератора, проверить смеситель (диоды D1, D2 и трансформа- тор Т2), а также согласующую цепь L2, С13, С14. 4.Отсутствие аудиосигнала при нормальном изоб- ражении свидетельствует о сбое генератора под- несущей звуковой частоты. В этом случае прове- рить соответствие частоты генератора ПЧ звука телевизионному стандарту (5,5 или 6,5 МГц) и при необходимости подстроить генератор вращением сердечника трансформатора Т1. При отсутствии сиг- нала на выходе генератора заменить транзистор Q1. 37
ИГРОВАЯ СИСТЕМА GAME BOY Игровая система GAME BOY производится фирмой NINTENDO и относит- ся к числу ее наиболее удачных разработок. Несмотря на относительную простоту, GAME BOY на протяжении более 10 лет остается одной из самых популярных игровых систем. Новую волну интереса к ней вызвал выпуск приставки COLOR GAME BOY, в которой ис- пользуется уже не черно-белый, а цветной дисплей. Основным преимуществом системы GAME BOY является ее компакт- ность. Приставку не нужно подключать к телевизору, вся информация отображается на встроенном дисплее ЖКИ. Для питания устройства применяются четыре (а в версии POCKET GAME BOY всего две) стандартные батарейки типа АА, что позволяет играть в лю- бимые игры дома, в транспорте, на работе. Еще одна причина широкого распространения приставки - наличие по- следовательного порта, обеспечивающего соединение двух или четырех (посредством специального адаптера) игровых систем с целью совмест- ной игры. Для данной системы разработано множество дополнительных устройств. Так, например, портативный принтер, фотокамера, полноразмерная кла- виатура и специальный картридж превратят ваш GAME BOY в персональ- ный компьютер. Внутри корпуса располагаются центральный процессор, являющийся упрощенной версией известного процессора Z80, звуковой процессор и видеопроцессор, формирующий изображение на экране ЖКИ размером 144x160 точек, а также встроенные ОЗУ и ПЗУ. Картридж с программным обеспечением подключается к игровой сис- теме через 32-контактный разъем. Внутри картриджа находится ПЗУ с про- граммой, а иногда и ОЗУ, предназначенное для сохранения игровой ситу- ации. На передней панели имеется крестовина управления и четыре отдель- ные кнопки. Лампа подсветки экрана отсутствует, но при необходимости ее можно приобрести отдельно.
Архитектура и принцип работы. Структурная схема 2.1. Технические характеристики Центральный процессор Тип Разрядность шины данных Разрядность шины адреса Тактовая частота упрощенный Z80 8 бит 16 бит 4,19 МГц Память ОЗУ 8 Кб ПЗУ 256 байт Видеопамять 8 Кб Видеопроцессор Тип графики спрайтовая Адресное пространство 8 Кб Разрядность шины данных 8 бит Количество спрайтов 40 Размер спрайтов 8x8 или 8x16 Разрешение 256x256 Размер экрана 160x144 Количество цветов 1(4 градации яркости) 2.2. Архитектура и принцип работы В этом разделе рассматриваются структура игро- вой системы GAME BOY и особенности написания программного обеспечения для нее. Подробно рас- сказывается об архитектуре центрального процес- сора, звукового сопроцессора и видеопроцессора, а также о назначении внутренних регистров микро- схем и их использовании программами. 2.2.1. Структурная схема Внутренняя архитектура приставки GAME BOY типична для разработок фирмы NINTENDO и не содержит сложных схемотехнических решений. Структурная схема игровой системы GAME BOY приведена на рис. 2.1. Основу схемы составляет центральный процессор (CPU), являющийся упрощенной версией распро- страненного 8-разрядного процессора Z80. От ори- гинала он отличается сокращенным набором команд и меньшим числом внутренних регистров. К ядру процессора подсоединены встроенное ОЗУ микропроцессора объемом 256 байт и внутреннее ПЗУ объемом 256 байт, а также переключатель бан- ков памяти, осуществляющий дешифрацию адреса и формирование сигналов выборки внутреннего ОЗУ и ПЗУ процессора. Система ввода/вывода состоит из контроллера клавиатуры и контроллера последовательного ин- терфейса, связывающего приставки посредством соединительного кабеля. Функционирование всех узлов процессора син- хронизирует внутренний генератор тактовой часто- ты и таймер, формирующий запросы на прерывание для процессора. Частота внутреннего генератора (4,19 МГц) стабилизируется кварцевым резонатором. Встроенный контроллер прерываний обрабаты- вает сигналы, поступающие от видеопроцессора, таймера, контроллера последовательного интер- фейса и контроллера клавиатуры, и посылает ядру процессора запрос на прерывание. На одном кристалле с центральным процессором размещается музыкальный сопроцессор, поддержи- вающий четыре независимых аудиоканала. Два вы- ходных сигнала звукового процессора поступают на вход усилителя 34 и на контакты разъема под- ключения головных телефонов. Усиленные сигна- лы звукового сопровождения смешиваются и пода- ются на встроенный динамик приставки. В модуль видеопроцессора входят непосредствен- но схема видеопроцессора, схема интерфейса видео- памяти и контроллер прямого доступа к памяти. В видеопамяти хранится информация, необхо- димая при создании изображения. Видеопроцессор получает эту информацию и формирует сигналы для схемы управления матрицей ЖКИ. Схема ин- терфейса видеопамяти вырабатывает все необходи- мые сигналы для чтения или записи в видеопамять и следит за разрешением конфликтов при одновре- менном обращении к видеопамяти графического и центрального процессоров. Контроллер прямого доступа к памяти (ПДП) позволяет быстро пересылать данные из встроенно- го ОЗУ или картриджа в видеопамять без участия центрального процессора. Данная возможность при- меняется для обновления изображения во время кадрового синхроимпульса. Следует отметить, что все рассмотренные выше блоки аппаратно реализованы в виде одной 80-вы- водной БИС, к которой подключены две микросхе- мы ОЗУ объемом по 8 Кб. Одна из этих'микросхем используется как память центрального процессора, а другая - как видеопамять. Сигналы шины данных, шины адреса и шины управления центрального процессора выведены на 32-контактный разъем, через который подсо- единяется картридж с программным обеспечени- ем. В картридже располагается ПЗУ с программой, микросхема контроллера страниц памяти и иногда дополнительное ОЗУ. Клавиатура системы пред- ставляет собой матрицу нормально разомкнутых контактов. 39
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ СИСТЕМА GAME BOY Рис. 2.1 Структурная схема игровой системы GAME BOY На отдельной плате помещается матрица ЖКИ, служащая экраном системы, и схемы для управле- ния ею. На эту плату поступают сигналы, сформи- рованные видеопроцессором, с помощью которых схемы управления создают изображение на экране. Размер экрана системы GAME BOY составляет 160x144 точки, но видеопроцессор может работать с картинкой большего размера - 256x256 точек. Фраг- мент, который будет выведен на экран, определяется программным путем. Для этого в управляющие ре- гистры видеопроцессора записываются координаты верхнего левого угла отображаемого фрагмента. Блок питания GAME BOY несколько сложнее обычного блока питания 8-разрядной игровой сис- темы. Внешний сетевой адаптер формирует напря- жение, подаваемое на внутренний стабилизатор приставки. Для питания матрицы ЖКИ в блоке пи- тания кроме линейного стабилизатора предусмот- рен импульсный преобразователь, вырабатываю- щий напряжение -18 В. 2.2.2. Центральный процессор В игровой системе GAME BOY в качестве ядра ис- пользуется упрощенный вариант широко распро- страненного процессора Z80 производства фирмы ZILOG, отличающийся от оригинала сокращенным набором команд и меньшим числом внутренних регистров. Тактовая частота процессора GAME BOY составляет 4,19 МГц, SUPER GAME BOY - 4,29 МГц. Микропроцессор связан с другими устройствами посредством 16-разрядной шины адреса, 8-разрядной шины данных и шины управления. Шина адреса по- зволяет процессору адресоваться к 64 Кб памяти (65535 байт). Регистры внешних устройств адре- суются процессором так же, как и ячейки памяти, и находятся в общем адресном пространстве мик- ропроцессора. Структурная схема центрального процессора иг- ровой системы GAME BOY приведена на рис. 2.2. 40
Архитектура и принцип работы. Центральный процессор Как видно из рис. 2.2, процессор содержит вы- числительный блок с набором регистров общего назначения (АЛУ), внутреннее ОЗУ и внутрен- нее ПЗУ объемом по 256 байт, дешифратор адре- са и схему выборки памяти. Дешифратор выраба- тывает сигналы, которые разрешают различным модулям занимать шины процессора для обмена ин- формацией. Внутренней памятью процессора управ- ляет схема выбора блока памяти. Рис. 2.2. Структурная схема центрального процессора игровой системы GAME BOY В следующих разделах подробно рассматрива- ются программная архитектура процессора, внут- ренние регистры, способы адресации, система ко- манд и система прерываний; указываются отличия процессора GAME BOY от оригинального Z80. Более полную информацию по архитектуре про- цессора и программированию на языке ассемблера Z80 можно найти в печатных изданиях и на сайтах Internet, перечисленных в конце книги. Регистры процессора Центральный процессор игровой системы GAME BOY содержит восемь 8-разрядных регистров и два 16-разрядных. Все регистры имеют уникальные имена и различаются по назначению. Ниже подроб- но описано назначение отдельных регистров. Аккумулятор А. Этот регистр наиболее часто используется в процессоре. С его помощью произ- водится обмен данными с памятью и портами вво- да/вывода, а также выполнение любой арифмети- ческой или логической операции. Регистры общего назначения В, С, D, Е, Н, L. Шесть 8-разрядных регистров процессора могут применяться для хранения промежуточных данных. Чтобы обработать 16-разрядные значения, эти ре- гистры допустимо объединить в регистровые пары: ВС, DE, HL. Регистр состояния процессора Е Каждый бит данного регистра является флагом и изменяет свое значение в зависимости от результата выполненной команды. Структура регистра состояния центрального процессора GAME BOY приведена на рис. 2.3. |z^m|h|c|o|o|o|o| 7 6 5 4 3 2 10 Рис. 2.3. Структура регистра состояния центрального процессора игровой системы GAME BOY В регистре состояния используются только че- тыре разряда из восьми. Младшие четыре разряда всегда равны 0. Назначение старших разрядов при- водится ниже. Флаг С является флагом переноса, который при- меняется при выполнении операций сложения и вычитания. Разряд С регистра состояния процес- сора устанавливается в 1, когда результат сложения больше 255 (OFFh) или если результат операции вычитания меньше 0. Флаг N - флаг вычитания; устанавливается в 1, если последней выполненной процессором ариф- метической операцией была команда вычитания (SUB или SBC). Используется при работе с числа- ми в двоично-десятичном коде. Флаг Н - флаг вспомогательного переноса; уста- навливается в 1, если при выполнении арифмети- ческой операции произошел перенос из D3 в D4. Применяется внутренними схемами процессора при работе с числами в двоично-десятичном коде. Флаг Z - флаг нулевого результата; устанавли- вается в 1, если результат выполнения операции равен 0. Указатель стека SP. Этот 16-разрядный регистр указывает на первую свободную ячейку стека. В про- цессоре игровой системы GAME BOY стек может располагаться в любом месте памяти системы, хотя обычно его размещают в верхних адресах ОЗУ. Стек растет вниз, то есть от адреса, содержащегося в регистре SP, к адресу OOOOh. Счетчик команд PC. Это еще один 16-разрядный регистр процессора. Его назначение - указывать ад- рес команды, которая должна быть выполнена. Ко- манды перехода позволяют изменить содержимое данного регистра и задать необходимую последова- тельность выполнения команд, находящихся в па- мяти. ИГРОВАЯ СИСТЕМА GAME BOY 41
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ СИСТЕМА GAME BOY Способы адресации Чтобы процессор работал правильно, в коде коман- ды требуется указать местоположение необходи- мых для работы данных. Это делается с помощью различных методов адресации. Методы адресации для центрального процессора игровой системы GA- ME BOY подробно рассмотрены ниже. Регистровая адресация. Операнды находятся в регистрах центрального процессора. Названия используемых регистров указываются непосред- ственно в команде. Например: INC А ; А = А + 1. ADD HL, DE ; HL = HL + DE. Неявная адресация. Расположение операндов для команд строго фиксировано, дополнительных указаний не требуется. Например: RLA ; Сдвиг содержимого ; аккумулятора влево. Непосредственная адресация. 8-разрядный операнд хранится в памяти сразу за кодом коман- ды, то есть по адресу РС+1. Например: LD А, 16 ; А = 16. ; Код команды ЗЕ 10. Косвенная адресация. В команде указывается адрес операнда в памяти. Например: LD А, (#ЗЕ00) ; Загрузка в А значения ; из ячейки памяти ; с адресом ЗЕООЬ. Регистровая косвенная адресация. Адрес опе- ранда содержится в одной из регистровых пар про- цессора. Например: LD A, (DE) ; Загрузка в А значения ; из ячейки памяти, ; адрес которой ; хранится в регистровой ; паре DE. Побитовая адресация. Указание непосредствен- ного разряда операнда, с которым производится не- обходимое действие, в коде команды. Данный метод используют три команды: BIT, SET и RES. Например: RES 7, А ; Сброс старшего разряда ; аккумулятора. Относительная адресация. Применяется в ко- мандах перехода. Во втором байте команды задается 8-разрядное смещение в диапазоне от -128 до 127, которое прибавляется к текущему содержимому счетчика команд для получения адреса следующей выполняемой команды. Например: JR $+20 ; Переход на 20 байт ; вперед. Система команд Центральный процессор игровой системы GAME BOY может выполнять около 120 различных команд. Они делятся на следующие функциональные группы: • команды пересылки данных: LD, LDHL, LDD, LDI; • команды арифметических и логических опе- раций: ADD, ADC, SUB, SBC, DAA, INC, DEC, CP, AND, OR, XOR, CPL; • команды работы с отдельными разрядами: BIT, SET, RES; • команды сдвига: RLCA, RRCA, RLA, RRA, SWAP, RLC, RL, RRC, RR, SLA, SRA, SRL; • команды перехода: JR, JP; • команды работы с подпрограммами: CALL, RST, RET, RETI; • команды управления процессором: NOP, HALT, STOP, DI, El, CCF, SCF; • команды работы co стеком: PUSH, POP. Полная информация о системе команд централь- 'ного процессора игровой системы GAME BOY при- ведена в приложении 1. Система прерываний Центральный процессор игровой системы GAME BOY обрабатывает несколько сигналов прерыва- ний, которые поступают от различных устройств. При этом выполнение программы приостанавлива- ется, и вызывается программа обслуживания пре- , рывания, расположенная по определенному адресу. Адреса, по которым передается управление, зада- i ются аппаратно; их модификация запрещена. Далее рассмотрены возможные типы прерыва- ний и процедуры их обработки. Сброс микропроцессора. Это прерывание про- исходит при включении питания системы, а также при поступлении сигнала низкого логического уровня по линии RESET. Центральный процессор в таком случае обнуляет регистры, подсоединяет встроенное ПЗУ системы и начинает выполнение программы с адреса 0000b. Прерывание по сигналу кадровой синхрониза- ции. Каждый раз, когда видеопроцессор завершает формирование очередного кадра, выдается запрос на обслуживание данного прерывания, а управле- ние передается на адрес 004Oh. Запрос генерируется 42
Архитектура и принцип работы. Центральный процессор видеопроцессором с частотой 59,7 Гц (в приставке GAME BOY) или 61,1 Гц (в приставке SUPER GAME BOY). Во время кадрового синхроимпульса видеопроцессор не обращается к видеопамяти, осво- бождая доступ к ней для центрального процессора, поэтому процедура обработки данного прерывания часто изменяет информацию в видеопамяти и, сле- довательно, изображение на экране. Прерывание от видеопроцессора. Видеопроцес- сор вырабатывает запрос на обслуживание данного прерывания, если происходит одно из событий, указанных программистом. Как правило, генера- цию запроса прерывания используют при форми- ровании строки экрана с заданным номером. Про- грамма обслуживания запроса должна начинаться с адреса 0048h. Более подробно данное прерывание будет рассмотрено при описании видеопроцессора. Прерывание при переполнении таймера. Пре- рывание происходит каждый раз, когда внутренний счетчик таймера переполняется (содержимое регис- тра TIMA изменяется с FFh на OOh). При этом управление передается на адрес 005 Oh. Более де- тально этот запрос прерывания рассматривается при описании таймера. Прерывание контроллера последовательного ин- терфейса. Данный запрос на обслуживание прерыва- ния генерируется контроллером последовательного интерфейса каждый раз, когда завершается передача байта. Адрес начала процедуры обработки - 0058h. Прерывание порта клавиатуры. Запрос на пре- рывание выдается внутренними схемами каждый раз, когда на какой-либо из входных линий порта клавиатуры появляется низкий логический уро- вень. Точка входа в программу, обслуживающую этот запрос, должна находиться по адресу 006Oh. Программные прерывания. Такие прерывания происходят при выполнении процессором команды рестарта из диапазона RST 0 Oh - RST 3 8h: вызыва- ется процедура, расположенная по одному из восьми фиксированных адресов. В программах названные команды удобны для вызова многократно использу- емых процедур, поскольку занимают меньше места и выполняются быстрее, чем стандартная команда вызова подпрограммы CALL. Чтобы корректно работать с прерываниями, следу- ет изучить программную архитектуру контроллера прерываний, который получает запросы от осталь- ных блоков и формирует адрес перехода, передава- емый ядру процессора. С точки зрения программирования обслужива- ние запросов на прерывание зависит от состояния внутреннего флага процессора IME и данных, запи- санных в регистр управления контроллера преры- ваний IE (FFFFh). В регистре состояния контролле- ра прерываний IF (FFOFh) отображаются сигналы на линиях запроса прерывания. Внутренний флаг процессора IME сбрасывается командой DI, а устанавливается командой EI. В ре- гистр управления контроллером прерываний IE за- писывается число, разрешающее контроллеру об- служивать соответствующий запрос. В результате процедура обработки запроса на прерывание в иг- ровой приставке GAME BOY выглядит следующим образом. 1 . При поступлении запроса на прерывание от како- го-либо устройства в регистре IF соответствующий разряд становится равным 1. 2 , Если установлен флаг IME центрального процессо- ра, а соответствующий разряд регистра управления контроллером прерываний IE равен О, то обработ- ка запроса на прерывание продолжается, в против- ном случае никаких действий не производится. 3 .Сбрасывается флаг IME, и запрещается прием но- вых запросов на прерывание. 4 .Состояние счетчика команд (PC) сохраняется в стеке. 5.Управление передается на стартовый адрес проце- дуры обслуживания соответствующего прерывания. В начале процедуры обработки прерывания не- обходимо сохранить в стеке все данные регистров процессора, которые могут быть изменены. В кон- це процедуры информация, хранившаяся в регис- трах, восстанавливается. Возврат из процедуры обработки прерывания осуществляется командой RETI или RET. Команда RETI устанавливает флаг IME, разрешая продол- жение обработки запросов на прерывание, и пере- дает управление по адресу, сохраненному в стеке. Если вы пользуетесь командой RET, установите флаг IME с помощью команды EI. Как отмечалось выше, во время выполнения про- цедуры обслуживания прерывания запросы на пре- рывание от других устройств игнорируются. Однако можно реализовать и вложенную обработку запросов, управляя флагом IME и регистрами контроллера пре- рываний внутри процедуры обработки. Рассмотрим более подробно структуру регистров контроллера прерываний игровой системы GAME BOY. Флаг IME Внутренний флаг центрального процессора, который устанавливается командой EI, а сбрасывается коман- дой DI. Процессор будет обслуживать поступившие запросы на прерывание, только если этот флаг равен 1. Регистр состояния контроллера прерываний IF Адрес: FFOFh. Tun: чтеиие/запись. Назначение разрядов. Отдельные разряды регистра устанавливаются в 1 при поступлении запроса на прерывание от ИГРОВАЯ СИСТЕМА GAME BOY 43
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ СИСТЕМА GAME BOY соответствующего устройства — независимо от со- стояния флага IME и регистра IE. D7 - D5 - не используются. D4 - поступило прерывание от порта клавиатуры. D3 — поступило прерывание от контроллера по- следовательного интерфейса. D2 - поступило прерывание от таймера. D1 - поступило прерывание от видеопроцессора. DO - поступило прерывание, по сигналу кадро- вой синхронизации. Регистр управления контроллером прерываний IE Адрес: FFFFh. Tun: чтение/запись. Назначение разрядов. Отдельные разряды этого регистра разрешают контроллеру прерываний обрабатывать запросы от устройств. Если соответствующий разряд установ- лен в 1, то при поступлении запроса контроллер формирует сигнал прерывания для центрального процессора. Если разряд равен 0, запрос на преры- вание игнорируется. D7 - D5 - не используются. D4 - разрешено прерывание от порта клавиатуры. D3 - разрешено прерывание от контроллера по- следовательного интерфейса. D2 - разрешено прерывание от таймера. D1 - разрешено прерывание от видеопроцессора. DO - разрешено прерывание по сигналу кадро- вой синхронизации. Специальные режимы работы процессора Существует два специальных режима работы цен- трального процессора игровой системы GAME BOY, связанных с особенностями выполнения команд HALT и STOP. Как правило, они используются с це- лью уменьшения энергопотребления системы и со- ответствующего увеличения срока службы батарей. Режим остановки процессора. Если выполняет- ся команда STOP, центральный процессор и видео- процессор останавливаются и экран выключается. Выход из этого режима осуществляется нажатием какой-либо клавиши. Выполнение программы про- должается с команды, следующей за STOP. Данный режим удобен, если программа ожидает нажатия клавиши в течение долгого времени (бо- лее 5 мин). Благодаря переходу в режим остановки процессора заряд батарей сохраняется дольше. Обратите внимание на две важные особенности: 1. Перед остановкой процессора необходимо выклю- чить звуковое сопровождение, записав 0 в разряд D7 регистра NR52 (FF26h). 2. Реакция игровой системы на нажатие клавиш в ре- жиме остановки зависит от содержимого регистра Р1 (FFOOh). Возможны следующие варианты: ooh-работа продолжается при нажатии любой клавиши; 10h - работа продолжается только после нажатия клавиш А, В, SELECT или START; 2 Oh - работа продолжается только после нажатия клавиш крестовины; 30h - приставка не реагирует на нажатие клавиш. Режим пониженного энергопотребления. Если процессор исполняет команду HALT, его дальнейшие действия определяются состоянием флага IME. Ког- да флаг установлен (прерывания разрешены), рабо- | та процессора останавливается, пока не будет полу- I чен запрос на прерывание; в противном случае I команда HALT игнорируется. В аппаратном обеспечении существует ошибка, I которую следует учитывать при использовании ко- I манды HALT. Когда процессор читает байт, следую- I щий за командой HALT, приращения содержимого | счетчика команд PC не происходит, поэтому такой I байт считывается процессором дважды. Проиллюс- I трируем сказанное на примерах. Команда, занимающая в памяти один байт и рас- I положенная после команды HALT, исполняется два I раза. После выполнения приведенного ниже фраг- I мента содержимое аккумулятора будет увеличе- I но на 2: 76 HALT ЗС INC А Если за командой HALT встречается команда, зани- я мающая несколько байтов, результат работы предска- | зать трудно. Например, вместо фрагмента 76 HALT FA 34 12 LD A, (1234h) будет выполнен фрагмент 76 HALT FA FA 34 LD A,(34FAh) 12 LD (DE),A И наконец, исполнение двух расположенных друг 1 за другом команд HALT остановит процессор. Чтобы избежать подобных проблем, за командой I HALT необходимо располагать команду NOP. В заключение рассмотрим пример использования । команды HALT для снижения энергопотребления j системы. Построение основного цикла программы В так, как показано ниже, увеличит срок службы бата- I рей на 5-50%. ; Основной цикл игры. Main: £ HALT ; Останов процессора ПОР- ; для экономии заряда I ; батарей. 44
Архитектура и принцип работы. Адресное пространство LD A,(VblkFlag) ; Произошло прерывание OR A по кадровому JR Z,Main ; синхроимпульсу ? Нет, ожидание XOR A продолжается. Да, флаг LD CALL (VblkFlag),A Controls ; сбрасывается. Проверка состояния CALL t Game ; клавиш. Выполнение JR t Main необходимых для игры действий. ; Процедура обработки прерывания ; по сигналу кадровой синхронизации. Vblank: PUSH AF ; Сохранение ; регистров. PUSH ВС PUSH DE PUSH HL CALL SpriteDMA ; Изменение ; информации ; о спрайтах. LD А,1 ; Установка флага. LD (VblkFlag),А POP HL ; Восстановление ; содержимого ; регистров. POP DE POP ВС POP AF RETI Прокомментируем приведенную программу Оста- новка процессора и ожидание запроса на прерыва- ние происходят в начале основного цикла. При по- ступлении запроса процессор возобновляет работу и обслуживает его. Если осуществляется процедура обработки прерывания по сигналу кадровой синхро- низации, то после ее выполнения будет установлен флаг VblkFlag. В основном цикле проверяется со- стояние этого флага; если он был установлен, теперь сбрасывается, а потом вызываются подпрограмма проверки состояния клавиш и подпрограмма, произ- водящая необходимые для процесса игры действия. Затем основной цикл повторяется. Отличия от процессора Z80 В России широкое распространение получил- про- цессор Z80, являющийся усовершенствованным ва- риантом процессора 18080. Ниже приводится краткий обзор основных от- личий центрального процессора игровой системы GAME BOY от оригинального процессора Z80. Эта информация поможет при переносе программного обеспечения, написанного для компьютеров с про- цессором Z80 (MSX, ZX SPECTRUM и т.п.), на при- ставку GAME BOY. Итак, в процессоре GAME BOY: • отсутствует альтернативный набор регистров, индексные регистры IX, IY и регистры I и R; • изменена структура регистра состояния про- цессора; • отсутствуют команды, использующие индекс- ные регистры, команды с префиксом EDh, все команды ввода/вывода (IN и OUT), все коман- ды обмена (ЕХ и ЕХХ) и все условные пере- ходы (JP), условные вызовы подпрограмм (CALL) и возвраты (RET), которые применяют флаг четности/переполнения и флаг знака; • команды LD А, (xxxxh); LD (xxxxh) , А и RETI имеют другой код; • добавлены новые команды, с которыми мож- но ознакомиться в приложении 1. 2.2.3. Адресное пространство Центральный процессор игровой системы GAME BOY способен обращаться к 65536 ячейкам памяти с адресами 0 0 0 Oh - FFFFh. В едином адресном про- странстве располагаются внутреннее ПЗУ и ОЗУ системы, регистры ввода/вывода, память видеопро- цессора и память подключенного картриджа. Распределение адресного пространства игровой системы GAME BOY показано на рис. 2.4. Рассмотрим более подробно назначение основ- ных областей памяти. Адреса OOOOh - OOFFh: здесь располагается об- ласть встроенного ПЗУ системы с программой на- чального запуска, предназначенной для считывания информации из картриджа, сравнения ее с записан- ным образцом и передачи управления в ПЗУ кар- триджа по адресу 010 Oh. После передачи управле- ния внутреннее ПЗУ отключается, и при обращении по этим адресам становится доступным ПЗУ кар- триджа. Стартовая программа, содержащаяся в ПЗУ сис- темы, выполняет следующие действия: 1 . Считывает данные, записанные в картридже по ад- ресам 0104h- 0133h, и передает их в видеопамять. В результате такой операции в верхней части экра- на появляется логотип NINTENDO. 2 . Выведенное изображение плавно перемещается в центр экрана и сопровождается воспроизведени- ем двух музыкальных нот. 3 .Данные, записанные по адресам 0104h - 0133h, сравниваются с образцом, хранящимся во встроен- ном ПЗУ. При обнаружении различий игровая при- ставка прекращает работу. ИГРОВАЯ СИСТЕМА GAME BOY 45
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ СИСТЕМА GAME BOY FEFFh Регистр управления контроллером прерываний FF80h-FFFEh Встроенное ОЗУ процессора FF40h-FF7FK Не используется FFOOh-FF4Ch Порти ЬВодо/бы&ода (для видеопроцессоре, звукового процессора и т.д.) FEAOh-FEFFh Не используется FEOOh-FE9Fh ОЗУ спрайтов EOOOh—FDFFh Повторяется внутреннее ОЗУ приставки COOOh-DFFFh Внутреннее ОЗУ приставки ACOOh—BFFFh ОЗУ картридже 8000h-9FFFh Видеопамять 4000h-7FFFh Переключаемый бонк ПЗУ картриджа OOOOh—3FF^h НепереключоемыС банк ПЗУ картридже (банк 0) OODOh—OOFFh Внутреннее ПЗУ приставки. Отключается, когда выполняется программа из картриджа Рис. 2.4. Распределение адресного пространства игровой системы GAME BOY 4 .Байты, расположенные по адресам 0134h- 014Dh, последовательно суммируются, и к полученному результату прибавляется 25. 5 . Приставка прекращает работу, если результат пре- дыдущей операции отличается от 0. 6 .Управление передается по адресу oiooh, и внут- реннее ПЗУ отключается. Адреса OOOOh - 3FFFh: непереключаемый банк ПЗУ картриджа. Присутствует в любом картридже независимо от модели. По этим адресам всегда бу- дут расположены первые 16 Кб ПЗУ картриджа не- зависимо от его объема. Адреса 4000h- 7FFFh: переключаемый банк по- стоянной памяти картриджа. Микросхема контрол- лера страниц памяти, установленная в картридже, подсоединяет по этим адресам произвольный 16-ки- лобайтный блок ПЗУ, номер которого задается про- граммным путем. Адреса 8000h - 9FFFh: память видеопроцессора. Более подробно структура данной области памяти и особенности ее использования рассматриваются в разделе, посвященном архитектуре видеопроцес- сора. Адреса АО 0 Oh - BFFFh: переключаемый банк ОЗУ картриджа. В некоторых картриджах опера- тивная память может отсутствовать. Адреса СОOOh - DFFFh: встроенное ОЗУ систе- мы, применяемое для хранения данных во время работы программы. Адреса EOOOh - FDFFh: чтение или запись по этим адресам приведет к выбору встроенного ОЗУ, расположенного в диапазоне COOOh - DDFFh. Та- ким образом, обращение к памяти по адресу EOOOh аналогично обращению к памяти по адресу COOOh, | Е001И - С001И и т.д. Адреса FEOOh - FE9Fh: память спрайтов. По- дробно рассматривается при описании видеопро- цессора. Адреса FEA0 - FEFFh: не используются. Адреса FFOOh - FF4Ch: порты ввода/вывода. Адреса FF4Dh - FF7Fh: не используются. Адреса FF80h - FFFEh: внутреннее ОЗУ цен- трального процессора. Обычно применяется для I хранения стека. Адрес FFFFh: регистр управления контроллером прерываний. 2.2.4. Видеопроцессор Видеопроцессор игровой системы GAME BOY вы- рабатывает управляющие сигналы для схем, кото- рые формируют изображение на экране ЖКИ. Он I располагается на одном кристалле с центральным процессором и соединен с микросхемой видеопамя- I ти объемом 8 Кб отдельными шинами данных, ад- | реса и управления. Видеопамять входит в адресное I пространство центрального процессора и доступна I для записи и чтения обычным образом. Видеопроцессор игровой приставки ориентире- I ван на блочную графику с использованием спрай- I тов. Изображение строится из заранее заданных I блоков размером 8x8 точек. Разрешение выводи- I мой на экран картинки составляет 160x144 точки I (20x18 символов). Однако общий размер храняще- I гося в видеопамяти рисунка составляет 256x256 I точек. Какой именно фрагмент видеопамяти будет ! отображен на экране, определяется программным * путем. Распределение видеопамяти и процесс формиро- I вания изображения на экране приставки GAME I BOY более подробно описываются ниже. Карта видеопамяти Видеопамять системы GAME BOY имеет размер I 8 Кб и располагается в адресном пространстве цен- I трального процессора в диапазоне 8000h - 9FFFK I Эту область памяти занимают два частично пере- I крывающихся знакогенератора и две экранные стра- ] ницы. Здесь также хранятся битовые образы выво- в димых символов (под символом подразумевается 1 участок изображения размером 8x8 точек). Первый знакогенератор размещается по адресам I 8000’n - 8FFFh, второй - по адресам 8800b - 97FFh. | В них содержатся символы для изображения фона Е и образы спрайтов. Назначение знакогенератора i определяется программным путем при установке со- I ответствующего флага в регистре управления видео- а процессором. 46
Архитектура и принцип работы. Видеопроцессор Распределение адресного пространства видеопа- мяти игровой системы GAME BOY показано на рис. 2.5. Как видно из приведенной карты памяти, две страницы частично перекрываются, следовательно, часть символов будет одинаковой для обоих знако- генераторов. В диапазоне 8000h - 87FFh хранятся 128 битовых образов первого знакогенератора для его символов с кодами 0 Oh - 7Fh, в диапазоне 900Oh - 97FFh расположены образы символов с ко- дами 0 Oh - 7Fh второго знакогенератора. Область памяти с адреса 8800h по адрес 8FFFh использу- ется знакогенераторами совместно, поэтому обра- зы символов с кодами 8 Oh - FFh, содержащиеся здесь, будут одинаковыми для обоих знакогенера- торов. Любой символ занимает в памяти знакогенера- тора 16 байт. Видеопроцессор совмещает два бито- вых образа каждой строки и получает изображение с четырьмя градациями яркости. Процесс получения изображения поясняется на рис. 2.6. Первым этапом, необходимым для вывода изоб- ражения на экран игровой системы, является со- здание одного или нескольких знакогенераторов, па основе которых будет формироваться фоновое изображение и спрайты. Знакогенераторы записы- ваются в ПЗУ картриджа и во время работы про- граммы по мере необходимости копируются в ви- деопамять. Экранные страницы игровой системы GAME BOY начинаются с адресов 9800h и 9C00h и располага- ются в видеопамяти по адресам 9800h - 9FFFh. Структура экранной страницы игровой системы GAME BOY приведена на рис. 2.7. Как уже отмечалось, размер экранной страницы составляет 32x32 символа. Однако на экране отоб- ражается только фрагмент картинки - 20x18 сим- волов. Местоположение выводимого фрагмента за- дается путем записи координат его верхнего левого угла в регистры видеопроцессора SCY (FF42h) и SOX (FF43h). Одна экранная страница служит для хранения фонового рисунка, другая содержит изображение, называемое окном. Окно обычно используется для показа информационной панели состояния игры внизу экрана. Оно выводится поверх фона, а его местоположение задается путем записи координат верхнего левого угла в регистры видеопроцессора WY (FF4Ah) И WX (FF4Bh). ИГРОВАЯ СИСТЕМА GAME BOY 9C00h-9FFFh Экранная строницо 2 9800h-9BFFn Экранная страница 1 9000h-97FFh Символы знакогенератора 2 с кодами 00h—7Fh 8800h-8FFFh Символы с кодами 80h—FFh. общие для знако- генераторов 1 и 2 8000h—87FFh Символы знакогенераторе 1 с кодами 00h—7Fh 98006 9801h 9802b1 |9810b 981 Eh 981Fh 9820h 9821h 983En 983Fh 9840h 985Fn 9BA0h 98BFh 9BC0h 9BC1h 9B0Eh 9BDFh 9BE0h 9ВЕ1П 9BE2b | | 9BF011 9BFEh 9BFFh ре------------32 знакоместе (256 точек) Рис. 2.5. Распределение адресного пространства видеопроцессора игровой системы GAME BOY Рис. 2.7. Структура экранной страницы игровой системы GAME BOY 8000 800? 8002 8003 8004 8005 8006 8007 8008 8009 800А 800В 800С 800D 800Е 800F О 1 1 1 1 1 О О | 0 111110 0/ 00000000) 1 10 0 0 1 10 / 1 10 0 0 1 1 О | 00000000/ 00000000 'I 11111110/ 1 10 0 0 1 1 0 | 1 1 0 0 0 1 1 о / 00000000| 1 10 0 0 1 1 О / 1 10 0 0 1 1 О | 00000000/ 00000000] 00000000/ 00 11 11 11 10 10 СО 00 01 01 00 00 10 10 10 10 11 11 00 00 10 10 00 00 01 01 00 00 00 00 00 00 11 11 00 00 00 10 10 00 00 01 01 00 10 10 10 00 00 11 11 00 00 10 10 00 00 01 01 00 00 00 00 00 *33333** 2 2 * * * 2 2 * 1 1 * * * 1 1 * 2 2 2 2 2 2 2 * 3 3 * * * 3 3 • 2 2 * * * 2 2 * 1 I * * * 1 1 * Содержимое памяти знс когенера торс Результат совмещения битовых обрезов Четы рехцбет ное изображение Цвет с кодом О всегда обрабатывается видеопроцессором кок прозрачные Рис. 2.6. Формирование цветного изображения в видеопроцессоре игровой системы GAME BOY 47
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ СИСТЕМА GAME BOY Возможности видеопроцессора В этом разделе рассматриваются встроенные гра- фические функции видеопроцессора GAME BOY, способы формирования изображения и особеннос- ти создания программного обеспечения. Видеопроцессор игровой системы GAME BOY предназначен для работы с блочной графикой, ос- нованной на спрайтах. Термин «блочная графика» означает, что изображение на экране формируется из заранее нарисованных блоков. Видеопроцессор способен использовать 40 неза- висимых друг от друга спрайтов размером 8x8 или 8x16 точек. Размер всех отображаемых на экране спрайтов одинаков и задается программным путем. С помощью манипуляций с регистрами видеопроцес- сора допустимо плавно перемещать картинку и реа- лизовывать нестандартные графические режимы, ко- торые значительно расширяют возможности игровой системы. Спрайты. Изображения спрайтов хранятся в од- ном из знакогенераторов, определяемом программ- ным путем. Изображения спрайтов размером 8x16 символов занимают два последовательно располо- женных символьных образа, при этом номер перво- го символа всегда четный. В связи с использованием спрайтов видеопроцессор системы налагает одно важное ограничение: на одной строке экрана может находиться не более десяти спрайтов одновременно. Память спрайтов. Память спрайтов игровой сис- темы GAME BOY представляет собой отдельную область в общем адресном пространстве централь- ного процессора. Этот блок памяти находится в диа- пазоне адресов FEOOh - FE9Fh и содержит всю не- обходимую информацию о расположении каждого спрайта на экране и режиме его отображения. На каждый из 40 спрайтов в памяти отведено по четы- ре байта. В этих байтах, называемых описанием спрайта, имеется следующая информация: 1. Координата верхнего левого угла спрайта по вер- тикали. Если это значение равно 0 или больше 160 (144 + 16), то спрайт на экране не отображается. 2. Координата верхнего левого угла спрайта по гори- зонтали. Если это значение равно 0 или больше 168 (160 + 8), то спрайт на экране не отображается. 3. Номер символа знакогенератора, хранящего изоб- ражение спрайта. При использовании спрайтов размером 8x16 точек номера используемых симво- лов могут быть только четными. Если же в таблице спрайтов указан нечетный символ (например, 3), он будет уменьшен на 1 (то есть станет символом 2). Д.Атрибуты спрайта (применяются старшие четыре разряда): D7 - приоритет спрайта: 0 - спрайт выводится поверх изображения фона и окна; 1 - спрайт скрыт за изображением фона и окна. Он виден только в том случае, если скрывающие его части фона и окна имеют цвет с кодом 0, ко- торый интерпретируется видеопроцессором как прозрачный. D6 - отражение спрайта относительно вертикаль- ной оси: 0 - выводится обычное изображение; 1 - выводится зеркальное отражение. D5 - отражение спрайта относительно горизон- тальной оси: 0 - выводится обычное изображение; 1 - выводится зеркальное отражение. D4 - номер палитры спрайта (OBJOPAL или OBJ1PAL): 0 - палитра OBJOPAL; 1 - палитра OBJ1PAL. Размещая спрайт, важно помнить, что его поло- жение на экране не совпадает со значениями, хра- нящимися в первом и втором байтах описания. Координаты спрайта на экране можно вычис- лить по приведенным формулам: Экранная координата у = координата у (байт 1) - 16; Экранная координата х = координата х (байт 2) - 8. Следовательно, чтобы спрайт находился в левом верхнем углу экрана и был полностью видим, его координаты нужно установить таким образом: у = 16; х = 8. Информацию в память спрайтов разрешается за- писать непосредственным обращением по требуе- мому адресу или при помощи контроллера ПДП. На экране спрайты всегда отображаются в соот- ветствии со своим приоритетом. Если вывести в од- но и то же место экрана два спрайта, то верхним окажется спрайт с меньшим номером. Номер спрай- та определяется положением его описания в памяти спрайтов. Таким образом, информация о спрайте О занимает адреса FEOOh - FE03h, а информация о спрайте 1 - адреса FE04h - FE07h и т.д. При написании программы важно учитывать осо- бенность игровой системы GAME BOY: из-за аппа- ратной ошибки, допущенной при проектировании видеопроцессора, нельзя выполнять команды LDI (HL) , A; LDD (HL) , A;LDIA, (HL) hLDDA, (HL), если в регистровой паре HL содержится число из диапазона FEOOh - FEFFh, поскольку это приводит к изменению содержимого памяти спрайтов. Формирование изображения на экране Видеопроцессор во время работы совмещает фоно- вое изображение, спрайты и окно, после чего выво- дит полученный результат на экран ЖКИ игровой системы. 48
Архитектура и принцип работы. Видеопроцессор Перед началом формирования изображения в па- мяти должны находиться два знакогенератора, изоб- ражения фона и окна и информация о спрайтах. Следует также помнить, что цвет с двумя младши- ми битами 00 всегда определяется как прозрачный и не влияет на окраску карТинки. Сначала показываются спрайты, у которых бит приоритета (D7) в четвертом байте описания ра- вен 1. Они закрываются изображениями фона и окна. Приоритет соответствует нумерации, так что спрай- ты с меньшим номером при совпадении координат будут выводиться поверх спрайтов с большим но- мером. Затем отображается фрагмент экранной страни- цы с фоновым рисунком размером 160x144 точки. Координаты левого верхнего угла показанного фраг- мента записываются в регистры SCX и SCY видео- процессора. При изменении содержимого регистров SCX и SCY фон плавно перемещается. Следующим шагом в формировании картинки является вывод окна, хранящегося во второй экран- ной странице. Позиция на экране, начиная с кото- рой будет располагаться его изображение, зависит от значений, записанных в регистры WX и WY. По- мните, что в регистр WX необходимо помещать зна- чение на 7 меньше, чем координата положения окна на экране. Отметим также, что при передвижении фона окно остается на прежнем месте. Для его пе- ремещения необходимо изменить содержимое ре- гистров WX и WY. Последней операцией является вывод спрайтов с установленным в 0 битом приоритета - поверх изображения фона и окна. Приоритет этих спрай- тов также определяется по номерам. Процесс совмещения экранной страницы, выво- димого фрагмента и окна представлен на рис. 2.8. Режимы работы видеопроцессора В любой момент времени видеопроцессор игровой системы GAME BOY находится в одном из четы- рех режимов, обозначенных числами от 0 до 3. Что- бы узнать, в каком режиме работает видеопроцес- сор, необходимо считать содержимое регистра STAT (FF41h) и проверить два младших разряда. Режим видеопроцессора влияет на доступность видеопа- мяти для центрального процессора. Режим 0. В этом режиме генерируется строчный синхроимпульс, длительность которого зависит от числа спрайтов в формируемой строке экрана. Мини- мальная длительность синхроимпульса при 10 спрай- тах в строке составляет 18,72 мкс; максимальная длительность, когда в строке нет ни одного спрай- та, равна 48,64 мкс. Режим 1. Когда видеопроцессор находится в та- ком режиме, вырабатывается кадровый синхроим- пульс. Центральный процессор может свободно 1 — экранной страница В помогши приставки 2 — фрагмент экранной страницы. Выводимый на экран 3 - окно; фрагмент другой экранной страницы, локазыбоемый поверх фонобого изображения SCX, SCY, WX, WY — координаты, записанные 6 соответствующие регистры Рис. 2.8. Формирование изображения на экране игровой системы GAME BOY ИГРОВАЯ СИСТЕМА GAME BOY обращаться к видеопамяти и к памяти спрайтов. Длительность кадрового синхроимпульса в игро- вой приставке GAME BOY составляет 1,09 мс. Режим 2. Видеопроцессор обращается к памяти спрайтов. Доступ к памяти спрайтов для централь- ного процессора в течение этого периода запрещен. Длительность работы процессора в данном режиме равна 19,31 мкс. Режим 3. В режиме 3 происходит чтение данных из видеопамяти. Доступ к видеопамяти для цен- трального процессора запрещен. Продолжитель- ность функционирования видеопроцессора в таком режиме зависит от числа спрайтов в текущей стро- ке и находится в пределах 41,37-70,69 мкс. Работу видеопроцессора игровой системы GA- ME BOY поясняет временная диаграмма, приве- денная на рис. 2.9. Формирование строки изображения начинается с обращения видеопроцессора к памяти спрайтов (режим 2), занимающего 80 тактов работы процес- сора. Затем видеопроцессор переходит в режим 3 и считывает данные из видеопамяти. После получе- ния строки изображения он генерирует строчный синхроимпульс. Таким образом, видеопроцессор последовательно переключается между режимами 0, 2 и 3. Рис. 2.9. Временная диаграмма работы видеопроцессора игровой системы GAME BOY 49
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ СИСТЕМА GAME BOY Вывод полной строки изображения в игровой сис- теме GAME BOY происходит за 109 мкс (456 тактов процессора). После завершающей строки видеопро- цессор переключается в режим 1 и генерирует кад- ровый синхроимпульс. В этом режиме видеопроцес- сор находится 1,09 мс (4560 тактов процессора), после чего начинает формирование нового кадра. Полный цикл отображения кадра в системе GA- ME BOY происходит за 70224 такта центрального процессора. Контроллер прямого доступа к памяти Контроллер прямого доступа к памяти (ПДП) иг- ровой системы GAME BOY осуществляет быструю передачу блока информации из ПЗУ или ОЗУ в па- мять спрайтов. Наиболее часто эта функция требует- ся во время кадрового синхроимпульса для обновле- ния информации о положении спрайтов на экране. Процесс пересылки данных занимает 160 мкс. Чтобы включить режим прямого доступа к памя- ти, необходимо записать старший байт адреса нача- ла пересылаемого блока в регистр DMA (FF46h); младший байт всегда равен 0. При использовании ПДП следует помнить о двух особенностях аппаратуры игровой системы GA- ME BOY. Во-первых, память спрайтов недоступна во время формирования видеопроцессором изображения на экране, поэтому пересылку данных посредством пря- мого доступа к памяти нужно производить, когда ви- деопроцессор генерирует кадровый синхроимпульс. Как правило, вызов процедуры, работающей с кон- троллером ПДП, осуществляют во время обслужива- ния соответствующего запроса на прерывание. Во-вторых, при работе контроллера ПДП цен- тральный процессор системы может задействовать только свою внутреннюю память, расположенную по адресам FF8 0h - FFFEh. Поэтому программа должна переместить фрагмент, взаимодействующий с контроллером ПДП к памяти, в верхнюю область ОЗУ, находящуюся в диапазоне адресов FFOOh - FFFCH. Рассмотрим пример программы, использующей прямой доступ к памяти для изменения информа- ции о спрайтах. ; Сюда будет передано управление ; при поступлении запроса на обработку ; прерывания по кадровому синхроимпульсу. ORG $0040 JP $FF80 ; С этого места начинается ; выполнение программы. ORG $0100 NOP JP Start ; Здесь располагается служебная ; информация о картридже. Start: DI LD HL,$FF80 Кед процедуры обработки прерывания пер вмещается из ПЗУ картриджа во внутреннюю LD DE.Vblk LD B,20h Loop: LD A, (DE) память процессора. LDI (HL) ,A начиная с адреса FF80h. INC DE DEC В JR NZ, Loop El ; Здесь располагается остальной код игры. ; Процедура обработки запроса ; на прерывание. Vblk: PUSH AF ; Сохранение ; регистров. LD A,(SPR_TAB) ; Запись адреса ; начала LD ($FF46) , A ; пересылаемого ; блока ; в регистр DMA. LD A,28h Wait: DEC A ; Ожидание ; в течение 160 мкс JR NZ,Wait ; пока производится ; пересылка. POP AF ; Восстановление ; регистров. RETI ; Завершение ; обработки ; прерывания. Итак, с точки зрения программирования контрол- лер прямого доступа к памяти игровой системы GAME BOY представляет собой один регистр. Регистры видеопроцессора Управление работой видеопроцессора осущест- вляется через 11 портов ввода/вывода посредством записи туда значений, определяющих требуемые параметры изображения и режимы работы. Инфор- мация о текущем режиме считывается из регистра состояния. В адресном пространстве игровой системы GA- ME BOY регистры видеопроцессора располагают- ся в диапазоне FF40h - FF4Bh. Регистр управления видеопроцессором LCDC Адрес: FF40h. Tun: запись/чтение. 50
Архитектура и принцип работы. Видеопроцессор Назначение разрядов: D7 - разрешение работы видеопроцессора: О - видеопроцессор выключен, изображение на экране отсутствует. Для обеспечения кор- ректной работы выключение видеопроцессо- ра (перевод разряда из 1 в 0) должно осущест- вляться в течение периода, пока длится кадровый синхроимпульс; 1 - видеопроцессор включен. D6 - выбор экранной страницы, хранящей изоб- ражение окна: 0 - 9800h - 9BFFh; 1 - 9C00h - 9FFFh. D5 - разрешение вывода окна на экран: О - не выводится; 1 - выводится. D4 - выбор знакогенератора для хранения эле- ментов фона и окна: 0 - знакогенератор расположен по адресам 8800h - 97FFh; 1 - знакогенератор расположен по адресам 8000h - 8FFFh (здесь же содержатся изоб- ражения спрайтов). D3 - выбор экранной страницы для хранения фона: 0 - 9800h - 9BFFh; 1 - 9C00h - 9FFFh. D2 - задание размера спрайтов; 0 - 8x8; 1 - 8x16. D1 - разрешение вывода спрайтов на экран: О - не выводятся; 1 - выводятся. D0 - разрешение вывода фона и окна на экран: 0 - не выводятся; 1 - выводятся. Регистр состояния видеопроцессора STAT Адрес: FF41h. Тип: чтение/запись. Назначение разрядов: D7 - не используется. Разряды D6 - D3 доступны для записи и задают события, при наступлении которых видеопроцессор генерирует запрос на прерывание. Запрос на преры- вание от видеопроцессора выдается только в том слу- чае, если соответствующий разряд установлен в 1. D6 - видеопроцессор формирует строку, номер которой указан в регистре LYC (FF45h). D5 - видеопроцессор перешел в режим 3. D4 - видеопроцессор перешел в режим 2. D3 - видеопроцессор перешел в режим 0. Оставшиеся разряды регистра доступны для чте- ния и передают информацию о текущем состоянии видеопроцессора. D2 - совпадение номера строки: 0 - номер формируемой видеопроцессором строки не равен номеру в регистре LYC; 1 - номер формируемой строки равен номе- ру в регистре LYC. D1 - D0 - режим работы видеопроцессора: 00 - режим 0, формирование строчного син- хроимпульса; 01 - режим 1, формирование кадрового син- хроимпульса; 10 - режим 2, чтение из памяти спрайтов; 11 - режим 3, чтение из видеопамяти. Регистр вертикальной координаты экрана SCY Адрес: FF42h. Тип: запись/чтение. Назначение разрядов. Записываемое в регистр 8-разрядное значение задает вертикальную координату верхнего левого угла выводимого фрагмента экранной страницы. Изменяя его, можно плавно прокручивать фоновое изображение на экране. Использование регистра поясняется на рис. 2.8. Регистр горизонтальной координаты экрана SCX Адрес: FF43h. Тип: запись/чтение. Назначение разрядов. Записываемое в регистр 8-разрядное значение задает горизонтальную координату верхнего лево- го угла выводимого фрагмента экранной страницы. Изменяя его, можно плавно прокручивать фоновое изображение на экране. Использование регистра представлено на рис. 2.8. Регистр номера формируемой строки LY Адрес: FF44h. Тип: чтение. Назначение разрядов. В регистре находится информация о номере стро- ки экрана, формируемой в данный момент видео- процессором. Значения 0-143 соответствуют но- мерам строк экрана, начиная с верхней. Во время генерации кадрового синхроимпульса значение, хра- нящееся здесь, изменяется от 144 до 153. Регистр номера строки LYC Адрес: FF45h. Тип: чтение/запись. Назначение разрядов. В регистр записывается произвольное 8-разряд- ное значение. Когда номер формируемой строки, находящийся в регистре LY, совпадает с значением, заданным в регистре LYC, разряд D2 регистра со- стояния видеопроцессора STAT становится равен 1. ИГРОВАЯ СИСТЕМА GAME BOY 51
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ СИСТЕМА GAME BOY Если при этом разряд D6 регистра STAT также уста- новлен в 1, видеопроцессор генерирует запрос на прерывание. Регистр контроллера прямого доступа к памяти DMA Адрес: FF46h. Tun: запись. Назначение разрядов. В регистр помещается 8-разрядное значение, определяющее адрес страницы в основной памяти. Контроллер ПДП скопирует содержимое выбран- ной страницы основной памяти в память спрайтов. Например, после записи в регистр FF46h значения 13h в память спрайтов видеопроцессора переписы- вается содержимое основной памяти игровой сис- темы, расположенное по адресам 13 0 Oh - 139Fh. Регистр палитры фона BGP Адрес: FF47h. Тип: запись/чтение. Назначение разрядов. Когда видеопроцессор совмещает два битовых образа строки символа из знакогенератора, каждая точка на экране кодируется комбинацией из двух битов: 00, 01,10 или 11. Однако это значение явля- ется не кодом выводимого цвета, а индексом опре- деленной палитры. Из регистра палитры выбирают- ся два бита, соответствующие коду точки, которые и являются цветом, отображаемым на экране. Со- держимое регистра влияет на изображение фона и окна. D7, D6 - цвет точки с кодом И; D5, D4 - цвет точки с кодом 10; D3, D2 - цвет точки с кодом 01; DI, D0 - цвет точки с кодом 00. Регистр палитры спрайтов 1 ОВРО Адрес: FF48h. Тип: чтение/запись. Назначение разрядов. Этот регистр используется так же, как и регистр BGP, только его содержимое влияет на цвет спрай- тов, у которых разряд D4 в байте атрибутов равен 0. Регистр палитры спрайтов 2 ОВР1 Адрес: FF49h. Тип: чтение/запись. Назначение разрядов. Регистр применяется так же, как и регистр BGP, только его содержимое влияет на цвет спрайтов, у которых разряд D4 в байте атрибутов равен 1. Регистр вертикальной координаты окна WY Адрес: FF4Ah. Тип: чтение/запись. Назначение разрядов. В регистр записывается номер строки экрана, на- чиная с которой видеопроцессор отображает окно. Если значение превышает 143, окно выводиться не будет. Использование регистра поясняется на рис. 2.8. Регистр горизонтальной координаты окна WX Адрес: FF4Bh. Тип: чтение/запись. Назначение разрядов. В регистр записывается номер точки в строке экрана, начиная с которой видеопроцессор отобра- жает окно. Если значение превышает 166, окно вы- водиться не будет. Содержимое регистра должно быть на 7 больше, чем реальная координата грани- цы окна на экране. Применение регистра показано на рис. 2.8. 2.2.5. Звуковой процессор Аудиопроцессор игровой системы GAME BOY формирует звуковое сопровождение, освобождая тем самым время центрального процессора для дру- гих задач. В этом разделе приводится краткое описание ар- хитектуры звукового процессора и его регистров. Методы воспроизведения музыки и спецэффектов с его помощью представляют собой отдельную об- ласть и здесь рассматриваться не будут. Информа- цию по данной теме можно найти на сайтах In- ternet, перечисленных в конце книги. Структурная схема звукового процессора игро- вой системы GAME BOY показана на рис. 2.10. Как видно из структурной схемы, аудиопроцессор представляет собой четыре независимых генератора сигналов, выходы которых соединены через анало- говые коммутаторы. Выходные сигналы коммутато- ров сгруппированы в две шины: правого и левого каналов. Далее два сигнала поступают на электрон- ные регуляторы громкости, а затем с выходов звуко- вого процессора передаются на внешний усилитель. Отдельный блок, состоящий из регистров NR50 - NR52, предназначен для управления внутренними цепями звукового процессора. Путем записи опре- I деленных значений в эти регистры осуществляется включение и выключение генераторов, коммутация выходных сигналов и регулировка громкости. Помимо общих регистров звукового процессо- ра в каждом генераторе есть собственные регистры управления. Понять их назначение поможет струк- турная схема, приведенная на рис. 2.11. В качестве I примера рассматривается структурная схема вто- , рого звукового генератора. Схемы других генера- торов несколько отличаются, но принцип работы остается прежним.
Архитектура и принцип работы. Звуковой процессор Основой генератора является программируемый счетчик-делитель частоты. На его вход поступает опорная частота звукового процессора, деленная на четыре. С выхода программируемого делителя сни- мается сигнал, частота которого (f,) определяется значением, записанным в регистры NR23, NR24. Затем выходной сигнал через схему регулировки длительности импульсов поступает на вход циф- ро-аналогового преобразователя (ЦАП), формиру- ющего выходной сигнал генератора. На другие входы ЦАП приходят сигналы от счет- чика огибающей, которые определяют амплитуду выходного сигнала. Счетчик огибающей соединен с регистром NR22, который позволяет программи- ровать форму огибающей выходного сигнала зву- кового генератора. Генерация звукового сигнала начинается после установки соответствующего разряда в регистре NR24. Послехжончания формирования сигнала уста- навливается внутренний триггер генератора, что при- водит к прекращению работы программируемого счетчика-делителя частоты. Разряды регистра регулировки NR21, управляю- щие длительностью звучания, соединены со схемой регулировки длительности импульсов, которая кон- тролирует поступление сигнала на вход ЦАП. По истечении заданного периода времени счетчик об- нуляется и формирование звука прекращается. Регистры звукового процессора С точки зрения программирования звуковой про- цессор игровой системы GAME BOY представляет собой 21 регистр ввода/вывода, расположенный по адресам FF1 Oh - FF2 6h, и область данных, опреде- ляющих форму выходного сигнала, которая нахо- дится в диапазоне FF30h - FF3Fh. Ниже приводится подробное описание регистров аудиопроцессора. Все регистры имеют однотипное обозначение, состоящее из двух букв (NR) и двух цифр. Первая цифра - номер звукового генерато- ра, к которому относится данный регистр. Если это цифра 5, то регистр является управляющим для все- го звукового процессора. Вторая цифра - порядко- вый номер регистра. Таким образом, регистр NR22 - это регистр 2 второго звукового генератора. Сведения обо всех регистрах аудиопроцессора игровой системы GAME BOY и назначении отдель- ных разрядов каждого регистра приведены ниже. Регистр управления изменением частоты канала 1 (NR10) Адрес: FFlOh. Tun: чтение/запись. Назначение разрядов: D7 - не используется. D6 - D4 - служат для хранения кода, определя- ющего время, через которое происходит модифика- ция частоты: ООО - частота остается постоянной; 001 - 111 - частота изменяется через (7,8 х х Т) мс, где Т - десятичное значение, которое соответствует двоичному коду, записанному в данных разрядах. D3 - задание направления изменения частоты: 0 — увеличение; 1 - уменьшение. ИГРОВАЯ СИСТЕМА GAME BOY Рис. 2.10. Структурная схема звукового процессора игровой системы GAME BOY 53
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ СИСТЕМА GAME BOY Рис. 2.11. Структурная схема отдельного канала звукового процессора игровой системы GAME BOY D2 - DO - регулировка скорости изменения час- тоты п = 0-7. Новая частота рассчитывается по формуле: Частота f0 (начальное значение частоты сигнала) задается содержимым регистров NR13, NR14. Регистр регулировки сигнала канала 1 (NR11) Адрес: FFllh. Tun: чтение/запись. Назначение разрядов: D7, D6 - код, задающий длительность импульсов. Зависимость длительности импульсов от кода, записываемого в регистр, поясняется на рис. 2.12. D5 - D0 - код, указывающий длительность зву- чания. Длительность звучания определяет время рабо- ты генератора аудиосигнала. Время (в секундах) рассчитывается по следующей формуле: t = (64 - tl) х (1 / 256), где tl - десятичное значение кода, записанного в данных разрядах. Регистр управления огибающей канала 1 (NR12) Адрес: FF12h. Тип: чтение/запись. Назначение разрядов: D7 - D4 - начальное значение огибающей: 0000 - минимум (звук отсутствует); 1111 - максимум. Рис. 2.12. Зависимость длительности импульсов от кода, записываемого в регистр D3 - направление изменения огибающей: 0 - затухание; 1 - нарастание. D2 - D0 - время изменения огибающей, N: N = 0 - огибающая не используется; N= 1-7 - огибающая изменяется через N/64 с. Регистр управления частотой канала 1 (NR13) Адрес: FF13h. Tun: чтение/запись. Назначение разрядов. В регистр записываются младшие восемь разря- дов 11-разрядного значения кода начальной часто- ты сигнала аудиоканала 1. Регистр управления канала 1 (NR14) Адрес: FF14h. Тип: чтение/запись. Назначение разрядов: D7 - при записи 1 в этот разряд происходит пе- резапуск звукового генератора канала 1 с началь- ными значениями параметров сигнала. 54
Архитектура и принцип работы. Звуковой процессор D6 - циклическая/последовательная работа: О - звук генерируется постоянно, независи- мо от значения в разрядах D5 - DO регистра NR11; 1 - звук генерируется в течение времени, ко- торое определяется значением, записанным в разрядах D5 - DO регистра NR11, после чего канал выключается (сбрасывается раз- ряд DO в регистре NR52). D5 - D3 - не используются. D2 - DO - три старших разряда 11-разрядного значения кода начальной частоты сигнала аудиока- нала 1. Частота (в герцах) рассчитывается по сле- дующей формуле: F = 131072 / (2048 - f), где f - десятичное число, эквивалентное 11-разряд- ному коду из регистров NR13 и NR14. Регистр регулировки сигнала канала 2 (NR21) Адрес: FF16h. Tun: чтение/запись. Назначение разрядов: D7, D6 - код длительности импульсов. Понятие длительности импульсов поясняется на рис. 2.12. D5 - D0 - код, задающий длительность зву- чания. •Длительность звучания определяет время рабо- ты генератора звукового сигнала. Время (в секун- дах) рассчитывается по следующей формуле: t = (64- tl) х (1/256), где tl - десятичное значение кода, записанного в данных разрядах. Регистр управления огибающей канала 2 (NR22) Адрес: FF17h. Тип: чтение/запись. Назначение разрядов: D7 - D4 - начальное значение огибающей: 0000 - минимум; 1111 - максимум. D3 - направление изменения огибающей: 0 - затухание; 1 - нарастание. D2 - D0 - код времени изменения огибающей, N: N = 0 - огибающая не используется; N = 1-7 — огибающая изменяется через N/64 с. Регистр управления частотой канала 2 (NR23) Адрес: FF18h. Тип: чтение/запись. Назначение разрядов. В регистр записываются младшие восемь разря- дов 11-разрядного значения начальной частоты сиг- нала аудиоканала 2. Регистр управления канала 2 (NR24) Адрес: FF19h. Тип: чтение/запись. Назначение разрядов: D7 - при записи в этот разряд 1 происходит пе- резапуск звукового генератора канала 2 с началь- ными значениями параметров сигнала. D6 — циклическая/последовательная работа: 0 - звук генерируется постоянно, независимо от значения в разрядах D5 - D0 регистра NR21; 1 - звук генерируется в течение времени, ко- торое определяется значением, записанным в разрядах D5 - D0 регистра NR21, после чего канал выключается (сбрасывается раз- ряд D1 в регистре NR52). D5 - D3 - не используются. D2 - D0 - три старших разряда И-разрядного значения начальной частоты сигнала звукового ка- нала 1. Частота (в герцах) рассчитывается по сле- дующей формуле: F = 131072 / (2048 - f)> где f - десятичное число, эквивалентное 11 -разряд- ному коду из регистров NR23 и NR24. Регистр выключения канала 3 (NR30) Адрес: FFlAh. Тип: чтение/запись. Назначение разрядов: D7 - работа генератора канала 3: 0 - генератор выключен; 1 - генератор работает. D6 - D0 - не используются. Регистр длительности звучания канала 3 (NR31) Адрес: FFIBh. Тип: чтение/запись. Назначение разрядов. В этот регистр записывается 8-разрядное число, определяющее время работы tl генератора канала 3. Время (в секундах) рассчитывается по формуле: t = (256 — tl) / 2, где tl - десятичное число, эквивалентное коду, ко- торый записан в регистре. Регистр управления громкостью канала 3 (NR32) Адрес: FFICh. Тип: чтение/запись. Назначение разрядов: D7 - не используется. D6, D5 - громкость канала 3: 00 - звук не выводится; 01 - громкость определяется значением, считанным из ОЗУ паттерна. ОЗУ паттерна ИГРОВАЯ СИСТЕМА GAME BOY 55
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ СИСТЕМА GAME BOY расположено по адресам FF3 0h - FF3Fh и описано далее в этом разделе; 10 - громкость определяется значением, счи- танным из ОЗУ паттерна и разделенным на 2; 11 - громкость определяется значением, счи- танным из ОЗУ паттерна и разделенным на 4. Регистр управления частотой канала 3 (NR33) Адрес: FFIDh. Tun: чтение/запись. Назначение разрядов. В регистр записываются младшие восемь разря- дов ll-разрядного значения начальной частоты сигнала аудиоканала 3. Регистр управления канала 3 (NR34) Адрес: FFlEh. Тип: чтение/запись. Назначение разрядов: D7 - при записи в этот разряд 1 происходит пе- резапуск звукового генератора канала 3 с началь- ными значениями параметров сигнала. D6 - циклическая/последовательная работа: 0 - звук генерируется постоянно, независи- мо от значения в регистре NR31; 1 - звук генерируется в течение времени, ко- торое определяется значением, записанным в регистре NR31, после чего канал выключа- ется (сбрасывается разряд D2 в регистре NR52). D5 - D3 - не используются. D2 - D0 - три старших разряда 11-разрядного значения начальной частоты сигнала аудиокана- ла 3. Частота (в герцах) рассчитывается по следую- щей формуле: F = 131072 / (2048 - f). где f- десятичное число, эквивалентное 11-разряд- ному коду из регистров NR33 и NR^4. Регистр управления длительностью сигнала кана- ла 4 (NR41) Адрес: FF20h. Тип: чтение/запись. Назначение разрядов: D7, D6 - не используются. D5 - D0 - код длительности звучания tx = 0-63. Длительность звучания определяет время работы генератора звукового сигнала. Время (в секундах) вычисляется по следующей формуле: t = (64 - tx) х (1 / 256). Регистр управления огибающей канала 4 (NR42) Адрес: FF21h. Тип: чтение/запись. Назначение разрядов: D7 - D4 - начальное значение огибающей: 0000 - минимум; 1111 - максимум. D3 - направление изменения огибающей: 0 - затухание; 1 - нарастание. D2 - D0 - время изменения огибающей, N: N = 0 - огибающая не используется; N = 1-7 - огибающая изменяется через N/64 с. Регистр управления счетчиком канала 4 (NR43) Адрес: FF22h. Тип: чтение/запись. Назначение разрядов: D7 - D4 - изменение частоты счетчика: 0000 - Х/2; 0001 - Х/22; 0010 - Х/23; ООН - Х/24; 1101 - Х/214, где X - коэффициент деления частоты, определяемый разрядами D2 - D0; 1110, 1111 - неиспользуемые значения. D3 - код числа шагов счетчика: 0-15 шагов; 1-7 шагов. D2 - D0 - код коэффициента деления частоты X: 000-f/4; 001 - f / 8; 010-f / 16; Oil -f/24; 100 - f / 32; 101 - f / 40; 110 -f/48; 111 -f/56, где f = 4,194304 МГц. Регистр управления канала 4 (NR44) Адрес: FF23h. Тип: чтение/запись. Назначение разрядов: D7 - при записи в этот разряд 1 происходит пе- резапуск звукового генератора канала 3 с началь- ными значениями параметров сигнала. D6 - циклическая/последовательная работа: 0 - звук генерируется постоянно, независи- мо от значения в регистре NR41; 1 - звук генерируется в течение времени, которое определяется значением в регистре NR41, после чего канал выключается (сбра- сывается разряд D3 в регистре NR52). D5 - D0 - не используются. Регистр регулировки громкости (NR50) Адрес: FE2 4h. Тип: чтение/запись. 56
Архитектура и принцип работы. Структура картриджа Назначение разрядов: D7 - если этот разряд установлен в 1, сигнал с входа внешнего аудиосигнала V IN поступает на выход S02 звукового процессора. D6 - D4 - установка громкости сигнала на вы- ходе S02: ООО - минимум; 111 - максимум. D3 - если этот разряд установлен в 1, сигнал с входа внешнего аудиосигнала V IN поступает на выход S01 звукового процессора. D2 - DO - громкость сигнала на выходе S01: ООО - минимум; 111 - максимум. Регистр коммутации каналов (NR51) Адрес: FF2 5h. Тип: чтение/запись. Назначение разрядов: D7 - если этот разряд установлен в 1, сигнал кана- ла 4 передается на выход S02 звукового процессора. D6 - если этот разряд установлен в 1, сигнал кана- ла 3 передается на выход S02 звукового процессора. D5 - если этот разряд установлен в 1, сигнал кана- ла 2 передается на выход S02 звукового процессора. D4 - если этот разряд установлен в 1, сигнал кана- ла 1 передается на выход S02 звукового процессора. D3 - если этот разряд установлен в 1, сигнал кана- ла 4 передается на выход S01 звукового процессора. D2 - если этот разряд установлен в 1, сигнал кана- ла 3 передается на выход S01 звукового процессора. D1 - если этот разряд установлен в 1, сигнал кана- ла 2 передается на выход S01 звукового процессора. DO - если этот разряд установлен в 1, сигнал кана- ла 1 передается на выход S01 звукового процессора. Регистр управления звуковым процессором (NR52) Адрес: FF2 6h. Тип: чтение/запись. Назначение разрядов: D7 - управление работой звукового процессора: О - выключен; 1 - включен. D6 - D4 - не используются. D3 - выключение канала 4 звукового процессора: О - выключен; 1 - включен. D2 - выключение канала 3 звукового процессора: О - выключен; 1 - включен. D1 - выключение канала 2 звукового процессора: О - выключен; 1 - включен. D7 - выключение канала 1 звукового процессора: О - выключен; 1 - включен. ОЗУ паттернов Адрес: FF3 0h - FF3Fh. Тип: чтение/запись. Назначение. В ОЗУ паттернов хранятся 32 4-разрядных зна- чения, определяющие форму выходного сигнала звукового процессора. Эти числа записываются в ячейки ОЗУ попарно, причем сначала использу- ется значение из старших четырех разрядов, а затем из младших. 2.2.6. Структура картриджа Структурная схема картриджа игровой системы GAME BOY приведена на рис. 2.13. Обязательной частью любого картриджа являет- ся микросхема ПЗУ с кодами программы. В неко- торые картриджи для увеличения объема памяти игровой системы встроено также внутреннее ОЗУ. Для сохранения игровой ситуации на время вы- ключения системы микросхема ОЗУ может полу- чать питание от литиевой батарейки, размешенной внутри картриджа. Если объем ПЗУ превышает 32 Кб, в картридже имеется микросхема контроллера страниц памяти, представляющая собой программируемый дешиф- ратор адреса. ПЗУ с программным обеспечением подсоединя- ется в адресное пространство центрального процес- сора в диапазоне 000Oh - 7FFFh. При этом по ад- ресам 0 0 0 Oh - 3 FFFh всегда располагаются первые 16 Кб ПЗУ, независимо от его объема. По адресам 400Oh - 7FFFh может быть подключена любая из оставшихся 16-килобайтных страниц ПЗУ. Номер используемой страницы записывается в регистр микросхемы контроллера страниц памяти. ОЗУ картриджа становится доступным для цен- трального процессора по адресам АО 0 Oh - BFFFh. Если объем ОЗУ превышает 8 Кб, оно также делит- ся на несколько страниц, переключением которых ИГРОВАЯ СИСТЕМА GAME BOY Рис. 2.13. Структурная схема картриджа игровой системы GAME BOY 57
Архитектура и принцип работы. Структура картриджа ИГРОВАЯ СИСТЕМА GAME BOY управляет микросхема контроллера страниц памя- ти (МВС). В первой 16-килобайтной странице ПЗУ долж- но содержаться несколько блоков данных, причем их расположение строго фиксировано. Ниже эти блоки и данные, которые должны в них храниться, рассмотрены подробно. Точки входа для команд RST. При выполнении центральным процессором одной из команд RST запоминается адрес следующей команды в стеке и Осуществляется переход по одному из перечис- ленных адресов: 0000h, 0008h, 0010h, 0018h, 0020h, 0028h, 0030h, 0038h. КомандаRSTудоб- на для вызова часто используемых подпрограмм. По указанным адресам должны находиться точки входа в соответствующие подпрограммы. Следует отметить, что эта функция процессора применяет- ся не всегда. Точки входа процедур обработки прерывания. При поступлении запроса на прерывание централь- ный процессор игровой системы GAME BOY пере- дает управление по одному из следующих адресов: 0040h, 0048h, 0050h, 0058h, 0060h. Обычно здесь расположены команды перехода (JP), передающие управление соответствующей процедуре обработки прерывания. Если для какого-либо прерывания про- цедура обслуживания не используется, рекоменду- ется разместить по данному адресу команду RETI. Рассмотрим блок описания картриджа. Он обя- зательно должен присутствовать, причем должен быть правильно заполненным. Ошибка в этом блоке приведет к неработоспособности картриджа. Блок занимает адреса 0100h - 014Fh. Ниже подробно рассматривается назначение отдельных байтов. 010Oh - 0103h. Точка входа в программу кар- триджа. Исполнение записанной в ПЗУ программы начинается с адреса 0100h. По этим адресам поме- щается команда NOP и команда перехода на начало программы JP. Этот фрагмент выглядит следующим образом: 0100 00 NOP 0101 СЗ хх хх JP xxxxh ; хххх - адрес запуска. 0104h - 0133h. Здесь хранится изображение торгового знака фирмы NINTENDO, показываемое на экране в начале игры. Изменение хотя бы одно- го байта в этой области памяти приведет к нерабо- тоспособности картриджа. Ниже приведено содержимое данной области: 0104 010С 0114 011С СЕ 03 00 DC ED 73 08 СС 66 00 11 6Е 66 83 IF E6 СС 00 88 DD 0D ОС 89 DD 00 00 00 D9 OB OD OE 99 0124 ВВ ВВ 67 63 6Е 0Е ЕС СС 012С DD DC 99 9F ВВ В9 33 ЗЕ 0134h - 0142h. Название игры, записанное за- главными английскими буквами в кодировке ASCII. Свободные ячейки заполняются кодом 00h. 014 3 h. Если здесь содержится код 8 0 h, програм- ма предназначена для игровой системы COLOR GAME BOY. 0144h, 0145h. Лицензионный код. Если содер- жимое ячейки с адресом 014 Bh не равно 3 3 h, то по этим адресам записаны нули. 0146h. Тип системы: 00h для GAME BOY, 03h для SUPER GAME BOY. Если здесь записан код 00h, дополнительные функции игровой системы SUPER GAME BOY не используются. 0147h. Информация о структуре картриджа. Возможны следующие значения: 0 Oh - имеется только ПЗУ; 01h - имеется ПЗУ и контроллер МВС1; 02h — имеется ПЗУ, контроллер МВС1 и ОЗУ; 03h - имеется ПЗУ, контроллер МВС1, ОЗУ и батарея; 05h — имеется ПЗУ и контроллер МВС2; 0 6h - имеется ПЗУ, контроллер МВС2 и батарея; 08h - имеется ПЗУ и ОЗУ; 09h - имеется ПЗУ, ОЗУ и батарея; OBh - имеется ПЗУ и контроллер МММ01; ОСЬ - имеется ПЗУ, контроллер МММ01 и ОЗУ; ODh - имеется ПЗУ, контроллер МММ01, ОЗУ и батарея; OFh - имеется ПЗУ, контроллер МВСЗ, таймер и батарея; 10h - имеется ПЗУ, контроллер МВСЗ, ОЗУ, таймер и батарея; 1 lh - имеется ПЗУ и контроллер МВСЗ; 12h - имеется ПЗУ, контроллер МВСЗ и ОЗУ; 13h - имеется ПЗУ, контроллер МВСЗ, ОЗУ и батарея; 19h - имеется ПЗУ и контроллер МВС5; lAh - имеется ПЗУ, контроллер МВС5 и ОЗУ; IBh - имеется ПЗУ, контроллер МВС5, ОЗУ | и батарея; ICh - имеется ПЗУ, контроллер МВС5 и карта I RUMBLE; lDh - имеется ПЗУ, контроллер МВС5, карта | RUMBLE и ОЗУ; lEh - имеется ПЗУ, контроллер МВС5, карта | RUMBLE, ОЗУ и батарея; lFh - камера для GAME BOY; FDh - картридж BANDAI ТАМА5 (тамагочи); I FEh - контроллер HUDSON HUC3; FFh - контроллер HUDSON HUC1. 0148h. Информация об объеме установленного | в картридже ПЗУ: 'f I 58
Архитектура и принцип работы. Структура картриджа О Oh - 32 Кб (2 банка); Olh - 64 Кб (4 банка); 02h - 128 Кб (8 банков); 03h - 256 Кб (16 банков); 04h-512K6 (32 банка); 05h - 1 Мб (64 банка); 06h - 2 Мб (128 банков); 52h - 1,1 Мб (72 банка); 53h - 1,2 Мб (80 банков); 54h - 1,5 Мб (96 банков). 0149h. Информация об объеме установленного в картридже ОЗУ: 0 Oh - ОЗУ не установлено; Olh - 2 Кб (1 банк); 02h - 8 Кб (1 банк); 03h - 32 Кб (4 банка); 04h - 128 Кб (16 банков). 014Ah. Код страны распространения картриджа: 0Oh - Япония; Olh - другие страны. 014Bh. Лицензионный код производителя. Для использования дополнительных функций системы SUPER GAME BOY в этом разряде должен быть записан код 33h. 33h - лицензионный код указан в байтах с ад- ресами 0144h, 0145h. 79h - Accolade; A4h - Konami. 014Ch. Код микросхемы ПЗУ. Обычно в этом байте записано значение 00h. 014Dh. Дополнительный код блока данных. Про- грамма, расположенная во встроенном ПЗУ систе- мы, вычисляет сумму блока данных, которые нахо- дятся в ПЗУ картриджа по адресам 013 4h - 014Dh. Затем к результату прибавляется 25. Выполнение программы, записанной в картридже, начинается только в том случае, если младший байт получен- ной суммы равен 0. 014Eh, 014Fh. Контрольная сумма содержимого картриджа, которая вычисляется путем последова- тельного сложения всех байтов, записанных в ПЗУ картриджа (кроме байтов с контрольной суммой). Система GAME BOY игнорирует это значение. Для корректной работы системы SUPER GAME BOY здесь должна храниться правильная контрольная сумма. Основной задачей микросхемы контроллера стра- ниц памяти является переключение страниц ОЗУ и ПЗУ, позволяющее использовать картриджи с объ- емом ПЗУ более 32 Кб и ОЗУ более 8 Кб. С точки зрения программирования микросхема контроллера страниц памяти представляет собой несколько ре- гистров, доступных при записи по адресам OOOOh- 7FFFh. Ниже в качестве примера рассмотрен кон- троллер страниц памяти МВС1. Подробное описание всех моделей контроллеров не входит в задачу данного издания. В случае необ- ходимости эту информацию можно найти на сайтах Internet, указанных в конце книги. Контроллер MBCI Микросхема контроллера страниц памяти МВС1 может работать в двух режимах: в первом (режим 16/8) предусмотрено использование ПЗУ объемом до 2 Мб (16 Мбит) и ОЗУ объемом до 8 Кб; во вто- ром (режим 4/32) за счет уменьшения максималь- ного размера применяемого в картридже ПЗУ до 512 Кб (4 Мбит) объем оперативной памяти увели- чивается до 32 Кб. Сразу после включения питания картридж переходит в режим 16/8. С точки зрения программирования данный кон- троллер страниц представляет собой три порта, до- ступных для записи. Рассмотрим назначение каж- дого из них. Регистр разрешения записи в ОЗУ Адрес: любой из диапазона OOOOh - IFFFh. Tun: запись. Назначение разрядов. Сразу после подачи питания на картридж мик- росхема контроллера запрещает запись в ОЗУ кар- триджа. Чтобы разрешить модификацию содержи- мого ОЗУ, необходимо поместить в этот регистр число OAh. При любом другом числе, хранящемся здесь, ОЗУ картриджа доступно только для чтения. Фирма NINTENDO рекомендует для блокирова- ния записи использовать число 0 Oh. Регистр номера страницы ПЗУ Адрес: любой из диапазона 2000h - 3FFFh. Тип: запись. Назначение разрядов: D7 - D5 - не используются. D4 - D0 - если картридж работает в режиме 4/32, то в этот регистр помещается номер страницы ПЗУ, подсоединяемой к центральному процессору по ад- ресам 400Oh - 7FFFh. Страница с номером 0 все- гда находится в диапазоне 0000h - 3FFFh, поэто- му когда в регистр номера страницы ПЗУ записан 0, то по адресам 4000h - 7FFFh будет подключена первая страница. Если картридж работает в режи- ме 16/8, то в регистр помещаются пять младших разрядов номера страницы ПЗУ. Два старших раз- ряда записываются в регистр номера страницы ОЗУ. ИГРОВАЯ СИСТЕМА GAME BOY Регистр номера страницы ОЗУ Адрес: любой из диапазона 400Oh - 5FFFh. Тип: запись. 59
Архитектура и принцип работы. Организация системы ввода/вывода Назначение разрядов: D7 - D2 - не используются. DI, DO - если картридж работает в режиме 4/32, то в два младших разряда этого регистра заносится код номера задействованной страницы ОЗУ; в ре- жиме 16/8 туда помещаются два старших разряда кода номера страницы ПЗУ, подключенной по ад- ресам 4000h - 7FFFh. Не забудьте перед примене- нием ОЗУ картриджа передать в регистр разреше- ния записи код 0 Ah. Регистр режима работы контроллера Адрес: любой из диапазона 600Oh - 7FFFh. Тип: запись. Назначение разрядов: D7 - D1 - не используются. D0 - режим работы контроллера: 0 - режим 16/8; 1 - режим 4/32. 2.2.7. Организация ввода/вывода К устройствам ввода/вывода, используемым игро- вой системой GAME BOY, относятся таймер, кон- троллер последовательного интерфейса и контрол- лер клавиатуры. С точки зрения программирования все эти устрой- ства представляют собой доступные для чтения и за- писи порты, расположенные по адресам FFOOh - FF07h. Таймер Иногда полезно иметь встроенный таймер, с опре- деленной периодичностью генерирующий запросы на прерывания. Часто запрос, полученный от тай- мера, служит для вызова подпрограммы, которая должна выполняться через заданные промежутки времени. Игровая система GAME BOY оснащена встроен- ным таймером с программным управлением. Воз- можные значения частоты таймера составляют 4096, 16384, 65536 и 262144 Гц. Это число обозна- чает, насколько часто значение, хранящееся в регис- тре счетчика таймера TIMA, увеличивается на 1. Когда счетчик таймера переполняется (его зна- чение изменяется с FFh на 00h), формируется за- прос на прерывание. После этого значение из регис- тра модуля таймера ТМА копируется в регистр счетчика таймера TIMA, и счет продолжается. Для правильного взаимодействия с таймером следует ознакомиться с его регистрами. Регистр делителя частоты DIV Адрес: FF04h. Tun: запись/чтение. Назначение разрядов. Содержимое регистра увеличивается на 1 с час- тотой 16384 Гц (16779 Гц в игровой системе SUPER GAME BOY). Запись любого значения по этому ад- ресу приведет к установке в регистр значения 00h. Регистр счетчика таймера TIMA Адрес: FF05h. Тип: запись/чтение. Назначение разрядов. Значение, хранящееся здесь, увеличивается на 1 с частотой, которая зависит от режима работы тай- мера, задаваемого через регистр ТАС. Когда эта ве- личина изменяется с FFh на 00h, таймер генериру- ет запрос на прерывание и копирует в регистр счетчика таймера TIMA значение из регистра мо- дуля таймера ТМА. Регистр модуля таймера ТМА Адрес: FF06h. Тип: запись/чтение. Назначение разрядов. В регистре хранится 8-разрядное.значение, кото- рое копируется в регистр счетчика таймера TIMA каждый раз после переполнения последнего. Таким образом, это значение задает делитель опорной час- тоты таймера. Более подробно работа с данным ре- гистром объясняется в приводимых ниже примерах. Регистр режима работы таймера ТАС Адрес: FF07h. Тип: запись/чтение. Назначение разрядов: D7 - D3 - не используются. D2 — включение таймера: 0 — таймер выключен; 1 - таймер включен. DI, D0 - код, определяющий опорную частоту таймера; значения в скобках приведены для систе- мы SUPER GAME BOY: 00 - 4096 (4194) Гц; 01 -262144 (268400) Гц; 10-65536 (67110) Гц; И - 16384 (16780) Гц. Рассмотрим два примера, которые помогут луч- ше понять принципы программирования встроен- ного таймера. ; Пример 1. Запрос на прерывание ; генерируется 4096 раз в секунду. Timerl: LD A,-l LD ($FF06),А ; Коэффициент деления ; равен 1. LD А,4 . 60
Архитектура и принцип работы. Организация системы ввода/вывода LD ($FF07),A ; Частота таймера ; составляет 4096 Гц. Записав в регистр ТМА (FF0 6h) значение -1 (OFFh), мы устанавливаем коэффициент деления частоты, равный 1. При этом первый же импульс от генератора вызовет переполнение счетчика и форми- рование запроса на прерывание. Соответственно сле- дующий цикл счета снова начнется со значения FFh. Два младших разряда регистра ТАС (FF07h) за- дают рабочую частоту таймера 4096 Гц. Таким об- разом, запрос на прерывание будет генерироваться 4096 раз в секунду. ; Пример 2. Запрос на прерывание ; генерируется 1024 раза в секунду. Timer2: LD А,-16 LD ($FF06), А ; Коэффициент деления ; равен 16. LD А, 7 LD ($FF07),A ; Частота таймера ; составляет 16384 Гц. Записав в регистр ТМА (FF0 6h) значение -16 (OFOh), мы устанавливаем в делителе частоты коэф- фициент деления, равный 16. При этом шестнадца- тый импульс от генератора вызовет переполнение счетчика и формирование запроса на прерывание. Следующий цикл счета снова начнется со значе- ния FOh. Код в двух младших разрядах регистра ТАС (FF07h) определяет рабочую частоту таймера, рав- ную в нашем случае 16384 Гц. Таким образом, за- прос на прерывание будет поступать 16384 / 16 = = 1024 раза в секунду. Контроллер последовательного интерфейса Последовательный порт ввода/вывода игровой сис- темы GAME BOY очень прост по сравнению со стан- дартными последовательными портами RS-232 (IBM PC) или RS-485 (Macintosh). Стартовые и стоповые биты отсутствуют, так что использовать такой порт нужно осторожно. Сначала передаваемый байт записывается в ре- гистр данных последовательного интерфейса SB (FFOlh). Для пересылки байта разряд D7 регистра управления последовательным интерфейсом SC (FF02h) необходимо установить в 1. Обмен дан- ными происходит поразрядно, начиная со старше- го разряда. Следует помнить, что во время переда- чи записанный в регистр SB байт также сдвигается. Когда выведены все восемь разрядов байта, раз- ряд D7 регистра управления последовательным ин- терфейсом SC автоматически устанавливается в 0 и формируется запрос на прерывание. Для синхронизации процесса обмена данными используется внутренний или внешний тактовый генератор. Передача каждого разряда сопровожда- ется появлением импульса низкого логического уровня на линии синхронизации. Частота внутрен- него генератора фиксирована и составляет 8192 Гц; частота внешнего генератора может принимать лю- бое значение от 1 Гц до 500 кГц. Полученный контроллером последовательного интерфейса байт также хранится в регистре данных SB. Если к последовательному порту не подключе- но никакое устройство, из регистра SB будет счи- тан код FFh. Рассмотрим фрагмент программы, осуществля- ющий передачу кода 63h через последовательный порт. ИГРОВАЯ СИСТЕМА GAME BOY SerlalOut: LD А,$63 LD ($FF01),A . ; Запись байта в регистр ; данных. LD A,$81 ; Включение передачи ; данных (D7 = 1) LD ($FF02),A ; с внутренней ; синхронизацией (DO = 1) . В заключение приведем краткое описание регис- тров контроллера последовательного интерфейса системы GAME BOY. i Регистр данных последовательного интерфейса SB Адрес: FFOlh. Tun: запись/чтение. Назначение разрядов. В регистр записывается передаваемый через по- следовательный порт байт данных. Отсюда же счи- тывается байт, принятый через этот порт. Регистр управления последовательным интер- фейсом SC Адрес: FF02h. Tim: запись/чтение. Назначение разрядов: D7 - разрешение передачи байта из регистра данных: 0 - нет передачи; 1 - запуск процесса передачи байта. D6 - D1 - не используются. D0 - определение типа синхронизации: 0 - внешняя синхронизация (1 Гц - 500 кГц); 1 - внутренняя синхронизация (8192 Гц). Контроллер клавиатуры Последним из рассматриваемых нами устройств ввода/вывода является клавиатура. Чтобы правиль- но описывать процедуры определения нажатой 61
Архитектура и принцип работы. Организация системы ввода/вывода ИГРОВАЯ СИСТЕМА GAME BOY клавиши, необходимо сначала изучить принципы ра- боты и схемотехнику клавиатуры игровой системы. Принципиальная схема клавиатуры системы GA- ME BOY приведена на рис. 2.14. Рис. 2.14. Принципиальная схема клавиатуры игровой системы GAME BOY С точки зрения схемотехники клавиатура пред- ставляет собой восемь клавиш с нормально разом- кнутыми контактами, организованных в виде матри- цы из двух столбцов по четыре клавиши в каждом. По шинам Р14 и Р15 от процессора поступает сигнал сканирования клавиатуры. Низкий логичес- кий уровень сигнала на одной из шин определяет, какой из столбцов клавиатуры будет сканировать- ся. По шинам РЮ - Р13 данные от клавиш посту- пают на входы процессора. Если ни одна клавиша не нажата, то на шинах РЮ - Р13 будет высокий логический уровень. Нажатие какой-либо клавиши приведет к подаче сигнала на соответствующую шину с линии скани- рования Р14 или Р15. Если на линии сканирования высокий уровень, нажатие клавиши не повлияет на состояние выходных сигналов блока клавиатуры; в противном случае на соответствующей выходной шине будет низкий логический уровень. Таким образом, порядок опроса состояния кла- виш игровой системы имеет следующий вид: 1. Установить низкий уровень на линии Р14 и высокий уровень на линии Р15. 2. Определить нажатую клавишу крестовины (RIGHT, LEFT, UP и DOWN) по наличию низкого логического уровня на шинах РЮ - Р13. 3. Установить высокий уровень на линии Р14 и низкий уровень на линии Р15. 4.0пределить нажатую клавишу А, В, SELECT или START по наличию низкого логического уровня на шинах РЮ - Р13. С точки зрения программирования клавиатура системы GAME BOY представляет собой один порт ввода/вывода с адресом FFOOh. В документации и программах этот порт обозначен как Р1. Регистр контроллера клавиатуры Р1 Адрес: FFOOh. Tun: чтение/запись. Назначение разрядов: D7, D6 - не используются. D5 - состояние линии Р15 (запись). D4 - состояние линии Р14 (запись). D3 - состояние линии Р13 (чтение). D2 - состояние линии Р12 (чтение). D1 - состояние линии Р11 (чтение). DO - состояние линии РЮ (чтение). В заключение рассмотрим фрагмент игры Ms Pacman, осуществляющий опрос клавиш и форми- рующий байт состояния клавиатуры. ; Процедура чтения состояния клавиатуры. Pad_in: LD A,$20 LD ($FFOO),A ; Установка P15 = 1 - ; и P14 = 0. LD A,($FF00) ; Считывание ; состояния ; клавиш крестовины. LD A,($FF00) ; Две команды чтения ; необходимы ; для формирования ; задержки. CPL ; Теперь нажатой ; клавише ; соответствует 1. AND $0F ; Удаление ненужных ; разрядов. SWAP A ; Внесение результата LD B,A ; в четыре старших LD A,$10 ; разряда. LD ($FF00),A ; Установка Р15 = 0 ; й Р14 = 1. LD A,($FF00) ; Считывание ; состояния клавиш LD A,($FFOO) ; А, В, START ; и SELECT. LD A,($FFOO) ; Несколько команд LD A,($FF00) ; чтения необходимы LD A,($FF00) ; для формирования LD A,($FF00) ; задержки. CPL ; Теперь нажатой ; клавише ; соответствует 1. AND $0F ; Удаление ненужных ; разрядов. OR В ; Объединение ; результатов ; сканирования ; двух столбцов. 62
Принципиальная схема. Процессорный модуль LD B,A ; Сохранение результата LD A,$30 ; в регистре В. LD ($FF00),A ; Установка Р15 = 1 ; и Р14 = 1. LD A,В RET В результате выполнения описанных действий в регистре А процессора будет сформирован 8-раз- рядный код, установленные биты которого соответ- ствуют нажатым клавишам. В данном случае разряды байта соотносятся со следующими клавишами на пульте системы: D7- START D6 - SELECT D5- В D4-А D3 - DOWN D2-UP DI - LEFT DO - RIGHT 2.3. Принципиальная схема Данный раздел посвящен описанию аппаратного обес- печения и принципов работы системы GAME BOY. Приведены подробные принципиальные схемы игровой системы и осциллограммы сигналов в кон- трольных точках. 2.3.1. Процессорный модуль Процессорный модуль GAME BOY разделен на два функционально законченных блока, которые кон- структивно размещены на различных платах. Принципиальная схема модуля центрального процессора игровой системы GAME BOY приведе- на на рис. 2.15. Принципиальная схема модуля кон- троллера ЖКИ представлена на рис. 2.16. Распо- ложение контактов в разъемах игровой системы GAME BOY показано на рис. 2.17. Основой процессорного модуля GAME BOY яв- ляется микросхема IC1 (LR35902), объединяющая центральный, графический и звуковой процессоры. Микросхема выполнена в 80-выводном корпусе, предназначенном для поверхностного монтажа. Центральный процессор игровой системы син- хронизируется от внутреннего тактового генератора, работающего на частоте 4,194304 МГц. Стабилизация частоты генератора осуществляется кварцевым резо- натором XI, подключенным к выводам ICI/73,74. Центральный процессор соединен с микросхе- мой видеопамяти IC2 (LH5264) посредством шины адреса (VA0 - VA12) и шины данных (VD0 - VD7). Центральный процессор системы при обраще- нии к видеопамяти генерирует три управляющих сигнала. Обращаясь к микросхеме видеопамяти для чте- ния или записи, центральный процессор формиру- ет на выходе VCS (вывод ICI/43) сигнал низкого логического уровня. Во время чтения из микросхе- мы видеопамяти на выходе VWR (вывод ICI/49) присутствует высокий логический уровень, запре- щающий запись в память, а на выходе VOE (вывод ICI/45) - низкий уровень, позволяющий микро- схеме памяти IC2 передавать данные из адресуемой ячейки на шину данных. Во время записи в видеопамять на выходе VWR центрального процессора имеется низкий уровень, разрешающий запись данных в адресуемую ячейку микросхемы памяти. ____ Высокий логический уровень на линии VOE блокирует передачу данных на шину. С помощью отдельных шин (адреса, данных и управления) к центральному процессору IC1 под- ключена микросхема IC3 (LH5264) внутреннего ОЗУ системы с объемом памяти 8 Кб. Выбор микросхемы внутреннего ОЗУ осущест- вляется, если на вход СЕ1 (вывод IC3/20) поступа- ет сигнал низкого логического уровня, а на вход СЕ2 (вывод IC3/26) - высокого логического уровня. При обращении к микросхеме ОЗУ для чтения центральный процессор подает на вход ОЕ (вывод IC3/22) сигнал низкого логического уровня, разре- шающий выдачу данных из адресуемой ячейки на шину. При записи в ОЗУ на вход WR (вывод 1СЗ/ 27) поступает сигнал низкого логического уровня, при этом полученный по шине данных байт поме- щается в ячейку памяти с заданным адресом. Все сигналы Шин данных, адреса и управления приходят на 32-контактный разъем, через который подключается картридж. Кроме восьми сигналов шины данных (DO - D7) и шестнадцати сигналов шины адреса (АО — А15) на этот разъем также выведены пять сигналов управления и напряжение питания +5 В. Сигнал WR, поступающий на контакт 3 разъема XS1, принимает низкий логический уровень, когда центральный процессор выполняет операцию запи- си байта в память. Низкий уровень сигнала RD сигнализирует о чтении процессором информации из памяти или внешнего устройства, подключенно- го к шине данных. Низкий уровень сигнала CS (контакт 5 разъема XS1) показывает, что централь- ный процессор обращается к внешней памяти, рас- положенной в диапазоне адресов OOOOh - 8000h или АО 0 Oh - FDFFh. Дальнейшая дешифрация ад- реса для определения микросхемы, с которой будет ИГРОВАЯ СИСТЕМА GAME BOY 63
Принципиальная схема. Процессорный модуль К модулю контроллера матрица ЖКИ CN1 DATA1 DATAC CONTROL CLOCK H SYNC DATALCH ALTSIGL V SYNC 0А4 S2 S3 _I_ IC2 LH5264 IC3 LH5264 IC1 LR35902 АО 16 ХО _|_ S5 S4 _L_ 74 VAO VAI VA2 VA3 AO Al P10 P11 P12 P13 P14 - VWR - VCS - VOE XI 4.194304МГц А12 WR CD СЕ2 ОЁ В S2 - SELECT S3 - START S4 - A 12 13 49. 43 45 18 19 38 39 40 25 24 S6 Do D6 C9~ ~C10 C9. СЮ 0.047мкФ DA1-DA4 C13 100.0x6В R1-R4 220 R5. R6 50 C8 100 СЗ, С4 1.0x6В VR1 J_ и 2x1 К DAN215 S5 - LEFT S6 - UP S7 - DOWN S8 - RIGHT 18 19 C15, Cl6 100,0x6В Рис. 2.15. Принципиальная схема процессорного модуля игровой системы GAME BOY 25 24 21 23 2 27 20 26 22 AO A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 DO DI D2 D3 D4 D5 D6 D7 33 31 30 29 28 27 26 25 34 35 48 46 42 S1 I VD'O VD1 VD2 VD3 VD4 VD5 VD6 VD7 VA4 VA5 VA6 VA7 VA8 VA9 VS10 VA11 VA12 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 Al 2 A13 A14 A15 DI D2 D3 D4 D5 D6 D7 20 21 22 23 24 A2 A3 A4 A5 A6 A7 A8 АУ 2/ 20 26 22 Al 2 WR <T CE2 OE D2 D3 D4 D5 D6 D7 658 GND R7 180K 1 +58 '> CLK 3 WR 4 PC 5 CS 6 AO 7 Al 8 A2 9 A3 10 A4 11 A5 12 A6 13 A7 1 4 A8 15 A9 16 A10 17 A11 18 Al 2 19 A13 20 A14 21 A15 22 DO 23 DI 24 D2 25 D3 26 D4 27 D5 28 D6 29 D7 30 RtS 31 V IN 32 GND XS1 Розьем для подключенья кортиджо 50 _51 52 53 54 55 56 59 69 66 65 64 63 62 LD1 LDO CPG CP ST CPL FR S RST WR RD CS Cl К SOI S02 so SI sex T2 78 79 80 75 60 59 70 R2 69 R3 68 R4 +58 GND R1 270 C6r± Z±C7 58 36 Розьем последобо- тельного интерфейса XS2 +58 S OUT S IN P14 CLK GND 05—C7 1 no C11, Cl 2 C5 C7 100 100<0x6B -L C14 ci6 T0,047 J 1 подключения наушников производиться обмен информацией, выполняется путем анализа состояния старших разрядов шины адреса. На вывод ICI/71 процессора подается сигнал на- чальной установки RESET. Если он имеет низкий логический уровень, игровая система перезапуска- ется, после чего выполняется программа из внут- реннего ПЗУ центрального процессора. К выводам IC1/62-69 центрального процессора подключена клавиатура игровой системы, представ- ляющая собой матрицу из нормально разомкнутых контактов. Для защиты от перегрузки к выходам процессора (Р14 и Р15) подсоединены диодные сборки DAI - DA4. Последовательный интерфейс игровой системы осуществляется через выводы IC1/68-70. Тактовые импульсы, синхронизирующие пересылку данных по двум однонаправленным линиям, поступают с выхода SCX (вывод ICI/68). Данные от игровой системы передаются на внешние устройства через выход S-OUT (вывод ICI/70). Данные от внешних устройств поступают на вход S-IN (вывод 1С1/ 69). Через резисторы R2 — R4 эти сигналы прихо- дят на контакты 2, 3 и 5 разъема XS2 (GB LINK). 64
Принципиальная схема. Процессорный модуль С1—С5 1.0x508 Рис. 2.16. Принципиальная схема модуля контроллера ЖКИ игровой системы GAME BOY ИГРОВАЯ СИСТЕМА GAME BOY Рис. 2.17. Разъемы игровой системы GAME BOY На контакт 4 разъема последовательного интер- фейса подается сигнал выхода Р14 контроллера клавиатуры. Диоды, подключаемые между контак- тами выходного разъема, шиной +5 В и общим про- водом, предназначены для защиты выходов процес- сора от помех. Два аудиосигнала с выводов IС 1/59,60 поступа- ют на микросхему усилителя 34 (выводы IC4/7.8). Внешний звуковой сигнал с контакта 31 разъема для подключения картриджа подается на вход V IN (вывод ICI/61). Он может быть микширован (объ- единен) внутри звукового процессора с выходными аудиосигналами. Размах входного сигнала, посту- пающего на усилитель, регулируется с помощью пе- ременного резистора VR1, который используется как регулятор громкости. С выводов IC4/12.6 усиленные сигналы переда- ются на разъем подключения наушников. Монофо- нический сигнал с выхода IC4/3 поступает на встро- енный динамик игровой системы. При подсоединении наушников замыкаются кон- такты переключателя S1, вывод IC4/4 соединяется с общим проводом и выходной каскад усилителя, формирующий сигнал для встроенного динамика, отключается. Модуль процессора питается стабилизирован- ным напряжением +5 В. Для связи центрального процессора игровой сис- темы с контроллером, генерирующим изображение на экране матрицы ЖКИ, предназначена группа из восьми выходов (выводы IC1/50-57). Сигналы с выходов LD1, LD0 (выводы ICI/50,51), определяющие яркость точек экрана, поступают на контакты DATA0 и DATA1 разъема CN1. Инфор- мация о яркости передается последовательно, точ- ка за точкой, начиная с верхнего левого угла экра- на. Данные фиксируются в регистре контроллера ЖКИ по отрицательному фронту сигнала DATA LCH (вывод ICI/55). Сигнал, синхронизирующий работу контролле- ра дисплея (матрицы ЖКИ) и центрального про- цессора, поступает на контакт разъема CLOCK с выхода СР (вывод ICI/53). В конце передачи данных, образующих одну строку на экране, центральный процессор форми- рует для контроллера дисплея сигнал строчной 65
ИГРОВАЯ СИСТЕМА GAME BOY синхронизации, передаваемый через выход ST (вы- вод ICI/54) на контакт разъема HSYNC. После получения полного кадра изображения процессор генерирует сигнал кадровой синхрони- зации, передаваемый с выхода S (вывод ICI/59) в модуль контроллера дисплея через контакт разъ- ема V SYNC. Сигналы CONTROL (с выхода ICI/52) и ALT- SIGL (с выхода ICI/56) предназначены для управ- ления режимами работы контроллера дисплея. На плате модуля контроллера дисплея игровой системы GAME BOY (рис. 2.16) располагаются матрица ЖКИ с контроллером IC8 (LH5028 или S890623), микросхема формирователя напряжений для индикатора IC9 (IR3E02) и несколько дискрет- ных элементов. Микросхема контроллера IC8 получает данные от центрального процессора системы и выводит изображение на экран матрицы ЖКИ. Формирователь напряжений IC9 получает опор- ное напряжение питания (вывод IC9/18) и гене- рирует отдельные напряжения, необходимые для работы матрицы ЖКИ на выводах IC9/12-16. Ре- гулируя опорное напряжение питания с помощью переменного резистора VR1, можно изменять кон- трастность картинки. Для питания модуля контроллера дисплея необ- ходимо напряжение питания -18 В. 23.2. Картридж Картридж для игровой системы GAME BOY содер- жит ПЗУ объемом от 16 Кб, а в некоторых моделях и дополнительное ОЗУ. Если объем ПЗУ превышает 32 Кб, то обязатель- ной частью картриджа является микросхема кон- троллера банков памяти (МВС), определяющая, какая из страниц ПЗУ и ОЗУ подключена к цен- тральному процессору. Принципиальная схема картриджа, содержаще- го ПЗУ, ОЗУ с резервным питанием от литиевой батареи и микросхему контроллера банков памяти МВС1, приведена на рис. 2.18. Картридж состоит из микросхемы ПЗУ объемом 512 Кб (IC1), микросхемы ОЗУ объемом 8 Кб (IC3) и контроллера страниц памяти (IC2). Микросхема IC1 (LH534) представляет собой масочное ПЗУ с записанной программой. Младшие разряды адреса (АО - А13) поступают с соответ- ствующих контактов разъема картриджа, а старшие (А14 - А18) формируются микросхемой управле- ния банками памяти IC2. Сигнал CS, разрешающий работу ПЗУ IC1, яв- ляется сигналом старшего разряда шины адреса А15. Таким образом, обмен данными с ПЗУ проис- ходит в тот момент, когда процессор обращается Принципиальная схема. Картридж к памяти, расположенной по адресам OOOOh - 7FFFh. Сигнал низкого логического уровня на входе ОЕ (вывод ICI/24) позволяет ПЗУ занимать шину дан- ных для передачи байта процессору. На этот вывод микросхемы подается сигнал RD, низкий уровень которого указывает, что процессор считывает байт из памяти. Микросхема IC3 (HY6264A) - это статическое ОЗУ. Шины адреса (АО - А12) и данных (DO - D7) подключены непосредственно к одноименным кон- тактам разъема картриджа. Выбор микросхемы ОЗУ происходит при нали- чии сигналов низкого логического уровня на входе CS1 (вывод IC3/20) и высокого логического уров- ня на входе CS2 (вывод IC3/26). Вход CS2 соеди- нен с выходом 3 микросхемы IC4, а вход CS1 - с выходом RCS микросхемы контроллера страниц памяти. Считывание информации из ОЗУ допустимо при низком логическом уровне сигнала RD на вхо- де ОЕ (вывод IC3/22). Для записи информации в микросхему ОЗУ7 сиг- нал низкого логического уровня подается на вход WR (вывод IC3/27), подключенный к одноименно- му контакту разъема. Микросхема контроллера банков памяти (IC2) представляет собой программируемый дешифра- тор адреса, формирующий старшие разряды адреса для микросхемы ПЗУ IC1. На входы микросхемы IC2 поступают сигналы шины адреса (А13 - А15) и данных (DO - D4). С выходов микросхемы IC2 снимаются старшие разряды адреса (МА14 - МАШ), которые затем пе- редаются на входы микросхемы ПЗУ IC1, а также дополнительные разряды адреса (ЕАО и ЕА1), не- обходимые при применении микросхем ОЗУ или ПЗУ большей информационной емкости. В рассматриваемой схеме картриджа часть вы- ходов микросхемы не подключена и функции кон- троллера банков памяти используются не полно- стью. С помощью дополнительных выходов ЕА1 и ЕА2 можно увеличить объем ПЗУ до 16 Мбит или ОЗУ до 32 Кб. В первом случае следует соединить выходы ЕАО и ЕА1 микросхемы IC2 с входами А19 и А20 шины адреса микросхемы ПЗУ; во втором - выходы ЕАО и ЕА1 микросхемы IC2 с входами А13 и А14 микросхемы ОЗУ. 233. Дополнительные устройства Для игровой приставки GAME BOY разработано множество различных дополнительных устройств, в том числе принтер и фотокамера. Рассмотреть все типы устройств не представля- ется возможным. Ниже рассказывается о способах 66
Принципиальная схема. Дополнительные устройства Рис. 2.18. Принципиальная схема картриджа игровой системы GAME BOY объединения нескольких игровых систем GAME BOY, а также об использовании последовательного порта игровой системы для соединения с нестан- дартными устройствами. Соединение нескольких систем GAME BOY Основной задачей последовательного порта игровой системы GAME BOY является установка связи с дру- гими игровыми приставками. Используя этот порт, можно насладиться игрой с одним или несколькими партнерами, что гораздо интереснее, чем игра с ком- пьютером. Проще всего объединить две игровые системы GAME BOY. Для этого потребуется только специ- альный кабель, входящий в комплект поставки. Принципиальная схема такого кабеля приведена на рис. 2.19. Несколько сложнее подключить большее число приставок: дело в том, что последовательный порт обладает минимальными возможностями контроля передаваемых данных. Следовательно, понадобится дополнительное оборудование, выполняющее функ- цию сервера и контролирующее пересылку данных от системы к приставке. Фирма NINTENDO выпустила адаптер для од- новременного подключения четырех игровых систем GAME BOY. Принципиальная схема такого адаптера представлена на рис. 2.20. +5В 1 S OUT 2 S IN 3 P14 4 CLK 5 GND 6 1 +5В 2 5 OUT ? S iN 4 Р14 5 CLK 6 GND Рис. 2.19. Принципиальная схема кабеля для соединения двух игровых систем GAME BOY Основу адаптера составляет специальный микро- контроллер типа МС68НС05Р7 производства фир- мы MOTOROLA, управляющий обменом данными. Приставка главного игрока подключена с помощью встроенного кабеля с разъемом для основной сис- темы. На кабеле имеются еще три разъема (гнезда) для подключения приставок других игроков по- средством стандартных соединительных кабелей. Микросхема IC2 (PST529G) формирует сигнал начальной установки для микроконтроллера IC1. Рабочую частоту внутреннего тактового генера- тора микроконтроллера стабилизирует кварцевый резонатор XI (3 МГц), подключенный к выводам IС 1/26,27. Использование последовательного порта Дополнительные устройства для игровой системы GAME BOY можно подсоединить двумя способа- ми: через разъем картриджа и через последователь- ный порт. 67
Принципиальная схема. Дополнительные устройства ИГРОВАЯ СИСТЕМА GAME BOY ГлаВньО игрок (кобелв) Игрок 2 (разъем) Игрок 3 (розьем) Игрок 4 (разъем) Рис. 2.20. Принципиальная схема адаптера для соединения четырех игровых систем GAME BOY Если использование разъема картриджа явля- ется достаточно простым, а основные принципы становятся ясными после знакомства с принципи- альной схемой картриджа, то подключение к после- довательному порту требует понимания принци- пов его работы, а также определенных навыков программирования. В этом разделе на конкретных примерах анали- зируется функционирование устройств, подсоеди- няемых к игровой системе GAME BOY через по- следовательный порт. Исследование возможностей последовательного порта игровой системы мы начнем с рассмотрения временной диаграммы его работы, приведенной на рис. 2.21. Для получения изображенного на диаграмме сиг- нала необходимо выполнить следующие команды: LD А,$75 LD ($FF01),A LD А,$81 LD ($FF02),A ; Запись байта в регистр ; данных. ; Включение передачи ; данных (D7 = 1) ; с внутренней ; синхронизацией (DO = 1). Затем на выходе синхронизации (контакт 5 разъ- ема последовательного порта) формируется после- довательность тактовых импульсов частотой 8192 Гц, после чего на выходе данных (контакт 3 разъема последовательного порта) будут появляться значе- ния отдельных разрядов числа из регистра данных, начиная с младшего разряда. Чтобы принять такой сигнал и преобразовать его в параллельные данные, наиболее удобен регистр сдвига, например микросхема 74НС595, подклю- ченная по схеме, которая изображена на рис. 2.22. Рис. 2.21. Временная диаграмма работы последовательного порта игровой системы GAME BOY Рис. 2.22. Принципиальная схема модуля для обмена параллельными данными через последовательный порт игровой системы GAME BOY Для ввода информации через последовательный порт также используется регистр сдвига. Данные с выхода сдвигового регистра поступают на вход данных последовательного порта игровой системы (контакт 3 разъема), в результате чего становятся доступными центральному процессору при чтении из регистра данных SB (FFOlh). При работе с последовательным портом игровой приставки удобнее всего составить программу так, чтобы передача и прием шли одновременно и гене- рация запроса на прерывания от контроллера по- следовательного порта была разрешена. Для этого необходимо установить бит D3 в регистре управле- ния контроллером прерываний IE (FFFFh), напри- мер командой: 68
Принципиальная схема. Блок питания LD А, #09 ; Разрешение прерывания ; от видеопроцессора LD (#FFFF) , А ; и от последовательного ; порта. Каждый раз, когда контроллер последователь- ного порта выполнит передачу восьми бит данных, будет генерироваться запрос на прерывание с пе- редачей управления по адресу 0 058h, где обычно располагается команда перехода на процедуру об- работки прерывания. Рассмотрим еще один пример программы: ORG JP #0058h Serin Serlnit: LD A, #09 Разрешение прерывания от LD (#FFFFh) , A ; последовательного RET SerOut: < порта. LD A,(data) ; Запись передаваемого байта LD (#FF01),A ; в регистр контроллера LD A, #81 и включение передачи LD (#FF02),A ; с внутренней RET Serin: синхронизацией. PUSH AF LD A,(#FF01) ; Чтение принятого r байта LD (port),A и запись•в память. POP RETI AF В начале вызывается подпрограмма Serinit, которая разрешает обрабатывать запросы на пре- рывание, поступающие от контроллера последова- тельного интерфейса. Когда необходимо передать байт, следует запи- сать его в ячейку памяти data и вызвать подпро- грамму SerOut, которая запускает процесс обмена информацией через последовательный порт систе- мы, после чего возвращает управление в основную программу. Когда передача будет окончена, одно- временно завершится и процесс приема байта, а за- тем запустится процедура обработки прерывания. В результате принятый байт окажется в ячейке па- мяти port, откуда его может считать основная про- грамма. Если вы применяете внешнюю синхронизацию, не забудьте сбросить соответствующий разряд в регистре управления последовательным интерфейсом и по- дать тактовый сигнал от схемы на контакт 6 разъ- ема последовательного интерфейса: в противном слу- чае обмен данными производиться не будет. Еще одно замечание касается написания про- грамм, которые используют передачу данных меж- ду двумя приставками. Одна из приставок должна быть ведущей, работающей на основе внутренней синхронизации передачи и управляющей обменом данными. Другая приставка соответственно будет ведомой, применяющей внешнюю синхронизацию и передающей данные по запросу от ведущей сис- темы. 2.3.4. Блок питания Блок питания, используемый игровой системой GAME BOY, разделен на два функционально неза- висимых модуля: внешний сетевой адаптер и внут- ренний преобразователь напряжения. Сетевой адаптер выполнен по традиционной для игровых приставок схеме и содержит понижающий трансформатор, диодный мост для выпрямления переменного напряжения и конденсатор, сглажива- ющий пульсации выходного напряжения. Выход- ное напряжение адаптера составляет 6-8 В. Принципиальная схема сетевого адаптера GAME BOY приведена на рис. 2.23. Внутренний стабилизатор в системе GAME BOY представляет собой двухканальный импульсный пре- образователь напряжения с разделительным транс- форматором. Он преобразует напряжение +6,5 В, по- ступающее от сетевого адаптера или батареи, в два напряжения: +5 В (для микросхем системы) и -18 В (для матрицы ЖКИ). Принципиальная схема внутреннего стабилиза- тора (преобразователя) игровой системы GAME BOY представлена на рис. 2.24. Напряжение питания поступает на схему преоб- разователя от внешнего сетевого адаптера через за- щитный диод D1. Фильтр, выполненный на элемен- тах С1, С2, LI, СЗ, предназначен для сглаживания пульсаций выходного напряжения сетевого адаптера и защиты от высокочастотных помех со стороны преобразователя. Преобразователь выполнен по схеме блокинг-ге- нератора. Ключевой транзистор Q1 периодически ИГРОВАЯ СИСТЕМА GAME BOY Рис. 2.23. Принципиальная схема сетевого адаптера игровой системы GAME BOY 69
Характерные неисправности гг I F"sa2 Рис. 2.24. Принципиальная схема внутреннего стабилизатора игровой системы GAME BOY подсоединяет обмотку трансформатора Т1 к источ- нику питания. На обмотке обратной связи наводит- ся напряжение, которое через цепь С4, R3 управляет частотой переключения Q1. Выходные напряжения на вторичных обмотках выпрямляются диодами D3, D2 и сглаживаются фильтрами С7 - С10. Преобразователь имеет дополнительную обрат- ную связь для стабилизации канала +5 В. Выход- ное выпрямленное напряжение после диода D3 че- рез стабилитрон D4 поступает на базу транзистора Q2, который регулирует открывающее смещение транзистора Q1. Это приводит к изменению дли- тельности импульса на обмотках трансформатора, в результате чего напряжение канала +5 В стабили- зируется. 2.4. Характерные неисправности В данном разделе приводится перечень неисправ- ностей, наиболее часто встречающихся при эксплу- атации игровой системы GAME BOY, а также алго- ритмы их поиска и методы устранения. печатных проводников в цепи питания, поэтому еле- дует тщательно осмотреть платы и удостовериться | в целостности проводников. : 3. Если короткого замыкания нет, проверить внутрен-1 ний стабилизатор игровой системы, отключив выход-1 ной разъем. Напряжения на выходе стабилизатора г должны быть в пределах +5+0,1 В и -19+0,25 В. Если I напряжение выходит за указанные границы, в ста- J. билизаторе следует проверить напряжения на об-( мотках трансформатора Т1, диоды D2, D3 и транзис- j торы Q1, Q2. - 4. Проверить кварцевый генератор, а также функци- • онирование микросхемы формирователя напря- J жений для матрицы ЖКИ. Исправность этих эле- j ментов свидетельствует о необходимости замены j Я всего процессорного модуля. i Приставка работает нестабильно Возможные причины: неисправность внешнего сете- ’ вого адаптера или внутреннего стабилизатора; за- • грязнение контактов разъема подключения кар-1 триджа; разряд или выход из строя аккумуляторов. | Алгоритм поиска неисправности: - 1. Проверить исправность аккумуляторных батарей, 1 Приставка не включается Возможные причины: неисправность блока питания или внутреннего стабилизатора; короткое замыка- ние или обрыв цепей питания; неисправность кар- триджа; неисправность процессорного модуля. Алгоритм поиска неисправности: 1. Проверить выходное напряжение сетевого адапте- ра. Если измеренное значение выходит за пределы 6-7 В, заменить сетевой адаптер. Практика показы- вает, что наиболее часто из-за перегрузки выходят из строя диоды выпрямительного моста, Если адап- тер вышел из строя полностью, то подойдет любой источник питания с выходным напряжением 6-7 В при токе нагрузки 500 мА. 2. Проверить блоки игровой системы на отсутствие коротких замыканий. Если короткое замыкание об- наружено, проверить стабилизатор и установлен- ные в нем транзисторы. При возникновении корот- кого замыкания часто происходит обрыв одного из измерив напряжение каждого элемента под нагруз- < кой. Часто нестабильная работа системы объясняет-1 ся выходом из строя одного из аккумуляторов. 2. Проверить выходное напряжение сетевого адапте- j ра. Сбой обычно возникает из-за малой нагрузочной I способности адаптера, поставляемого в комплекте 8 с игровой приставкой. Проблема решается при под-1 ключении более мощного источника питания. 3. Проверить надежность контактных соединений! в разъемах системы. Разъем для подключения кар-1 триджа необходимо осмотреть особенно тщатель- j но, при необходимости протереть его спиртом. 4. Проверить внутренний стабилизатор напряжения н питания игровой системы. Особое внимание следу- $ ет обратить на уровень пульсаций выходного на-1 пряжения импульсного преобразователя. 5. Возможным способом решения проблемы являет-1 ся установка дополнительных конденсаторов емко-1 стью 100,0 мкФ х 16 В и 0,01 мкф в цепи питания на | каждой из плат системы и в картридже.
Характерные неисправности На экране отсутствует изображение, звук есть Возможные причины: выход из строя микросхемы IC9 или транзистора Q1 в модуле контроллера дис- плея; неисправность матрицы ЖКИ; обрыв в цепи регулятора контрастности VR2; обрыв или плохой контакт в цепи питания матрицы ЖКИ. Алгоритм поиска неисправности: 1. Проверить напряжения питания -18 В на плате с ЖКИ. Если это напряжение отсутствует, проверить соответствующий выпрямитель в блоке питания, а также прохождение напряжения от блока питания до микросхем модуля контроллера матрицы ЖКИ. 2. Тестером проверить напряжение на выводе IC9/18. При отсутствии напряжения заменить регулятор контрастности VR2, 3. Проверить напряжения на выводах IC9/11-14. От- сутствие напряжения на любом из них свидетель- ствует о неисправности микросхемы IC9. 4. Проверить транзистор Q1 на плате контроллера матрицы ЖКИ и при необходимости заменить его. 5. Проверить прохождение сигналов от центрального процессора (выводы IC1/50-57) до контроллера мат- рицы ЖКИ (выводы IC8/3-9,16-18). Наличие сигна- лов позволяет сделать вывод о неисправности кон- троллера дисплея, а их отсутствие - о неисправности центрального процессора IC1. Отсутствует звуковое сопровождение Возможные причины: неисправность центрального процессора IC1 или усилителя ГС4; обрыв в регу- ляторе громкости VR1; неисправность переключа- теля в разъеме подсоединения наушников. Алгоритм поиска неисправности: 1. Проверить наличие звукового сигнала на выходах S01 и S02 центрального процессора (выводы 1С1/ 59,60). Отсутствие сигнала свидетельствует о неис- правности центрального процессора IC1. 2. Проверить прохождение сигнала от выходов про- цессора IC1 до входов усилителя IC4 (выводы IC4/ 7,8) через регулятор громкости VR1. 3. Проверить наличие выходного сигнала на выводах 104/12,15. При отсутствии сигнала заменить микро- схему IC4. 4. Проверить работу выключателя, расположенного в разъеме подключения наушников, и при необхо- димости заменить его. 5. Проверить динамик игровой системы. Не работают все кнопки управления Возможные причины: обрыв проводников или пло- хой контакт; загрязнение кнопок; неисправность микросхемы IC1. Алгоритм поиска неисправности: 1. Проверить целостность проводников, идущих от кнопок к выводам центрального процессора. Тка- нью, смоченной в спирте, тщательно очистить кон- тактные площадки, расположенные под клавишами. 2. Проверить выходные сигналы Р14 и Р15 процессора (выводы 1С1/62,63). Отсутствие сигналов свиде- тельствует о необходимости замены микросхемы центрального процессора IC1. 3. Проверить диодные сборки DA1 - DA4. Если сигна- лы с клавиатуры поступают на входы процессора (выводы IC1/64-69), неисправна микросхема цен- трального процессора IC1. Не работают некоторые кнопки управления Возможные причины: загрязнение контактных пло- щадок или неисправность микросхемы IC1. Алгоритм поиска неисправности: 1. Протереть спиртом контактные площадки на плате и резиновую прокладку с токопроводящими пло- щадками. 2. Если неисправны токопроводящие площадки, то восстановить их можно, наклеив кусочки фольги. Удобнее использовать фольгу от сигаретных пачек: она имеет бумажную основу, что обеспечивает луч- шее приклеивание к резине. 3. Токопроводящее покрытие на плате воссоздается с помощью очищенного монтажного провода или токопроводящего клея. ИГРОВАЯ СИСТЕМА GAME BOY 77
ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Игровая приставка MEGA DRIVE фирмы SEGA была первой 16-разрядной игровой системой и использовала передовые схемотехнические решения. Система до сих пор имеется в продаже и для нее выпускается различное программное обеспечение. Дальнейшим развитием ряда, начатого моделями SEGA GENESIS и SEGA MEGA DRIVE, стала видеоприставка MEGA DRIVE 2. Популярность приставки объясняется большим количеством качествен- ного программного обеспечения, обусловленным удачным выбором про- цессора. Компания SEGA всегда отдавала предпочтение передовым тех- нологиям, и на этот раз также не отступила от своего принципа. Основой приставки является процессор 68000 производства фирмы MOTOROLA. При 16-разрядной шине данных он имеет 32-разрядную внут- реннюю архитектуру, увеличивающую быстродействие программ. Кроме того, данный процессор используется в таких компьютерах, как Apple Macintosh и Amiga, что открывает доступ к большому количеству программ, которые легко переносятся на приставку. В помощь основному процессору предназначен дополнительный 8-раз- рядный сопроцессор, в качестве которого применяется микропроцессор Z80. Часть программы может загружаться в память сопроцессора и выпол- няться независимо от основной программы (вот вам и настоящая много- задачность!), что освобождает ресурсы центрального процессора. - Графический сопроцессор представляет собой специально разработан- ную микросхему, формирующую цветное изображение размером 320x224 точки. Одновременно на экране отображаются только 64 цвета из доступных 512. Графика в приставке спрайтовая, и картинка строится из заранее созда- ваемых блоков. Спрайты могут иметь размер от 8x8 до 32x32 точки. При вы- воде на экран совмещаются два слоя фонового изображения и спрайты. Для создания звукового сопровождения используются две микросхемы: программируемый четырехканальный звуковой генератор и синтезатор производства фирмы YAMAHA. Программы для игр хранятся в картриджах, подключаемых к системе че- рез 64-контактный разъем. Внутри картриджа располагается ПЗУ с запи- санной программой, а иногда и ОЗУ для сохранения игровой ситуации. К приставке подсоединяются два 10-кнопочных игровых пульта. Четыре кнопки образуют стандартную крестовину, а оставшиеся шесть предназна- чены для управления. Существуют также пульты с большим числом кнопок.
Архитектура и принцип работы. Структурная схема 3.1. Технические характеристики Центральный процессор Тип М68000 Разрядность шины данных 16 бит Разрядность шины адреса 23 бит Тактовая частота 7,6 МГц Память ОЗУ 64 Кб ПЗУ 2 Кб Видеопамять 64 Кб Видеопроцессор Тип графики спрайтовая Адресное пространство 64 Кб Разрядность шины данных 8 бит Количество спрайтов 80 Размер спрайтов 8x8 ... 32x32 Разрешение Число цветов 320x224 всего 512 одновременно на экране 64 3.2. Архитектура и принцип работы В этом разделе подробно описана архитектура центрального процессора, звукового сопроцессора и видеопроцессора игровой приставки SEGA ME- GA DRIVE. Затем рассказывается о назначении внутренних регистров микросхем и их использова- нии программами. Проанализируем структуру игровой приставки и особенности написания программного обеспече- ния для нее. 3.2.1. Структурная схема Внутренняя архитектура игровой приставки ME- GA DRIVE несколько отличается от рассмотрен- ных ранее. Дело в том, что в данной приставке при- меняются два процессора, работающие с общим адресным пространством. Структурная схема игровой приставки SEGA ME- GA DRIVE приведена на рис. 3.1. Основой схемы является центральный процессор (CPU), в качестве которого используется микропро- цессор М68000 фирмы MOTOROLA. К нему под- ключено внутреннее ОЗУ игровой приставки объ- емом 64 Кб (32Кх16) и внутреннее ПЗУ объемом 2 Кб, располагаемые в картридже. Также к процессо- ру подсоединен системный контроллер (SYSCON), осуществляющий дешифрацию адреса и формиро- вание сигналов выборки внутреннего ОЗУ и ПЗУ. Дополнительно системный контроллер синхронизи- рует взаимодействие центрального процессора и со- процессора с общим адресным пространством. Сопроцессор Z80 управляет двумя звуковыми процессорами игровой приставки. ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 10-321 Рис. 3.1. Структурная схема игровой приставки SEGA MEGA DRIVE 73
Архитектура и принцип работы. Центральный процессор Звуковой процессор PSG - это программируе- мый генератор аудиосигналов, требующийся в ос- новном для создания различных звуковых эффектов. Второй аудиопроцессор представляет собой ше- стиголосный музыкальный синтезатор, задачей ко- торого является воспроизведение фоновой музыки во время игры. Сопроцессор Z80 храпит данные и программы в ОЗУ объемом 8 Кб. Следует отметить, что ОЗУ включено в общее адресное пространство централь- ного процессора, благодаря чему процессор в состо- янии записывать сюда данные и программы. Затем управление передается сопроцессору, который бу- дет выполнять загруженную программу, освобож- дая ресурсы центрального процессора. Выходные сигналы звуковых процессоров посту- пают на входы усилителя НЧ и на разъем подклю- чения головных телефонов. Усиленные сигналы звукового сопровождения смешиваются и подают- ся на линейный выход аудиосигнала приставки. Видеопроцессор состоит из собственно видео- процессора, схемы интерфейса видеопамяти и кон- троллера прямого доступа к памяти. Информация, необходимая для генерации изоб- ражения, хранится в видеопамяти объемом 64 Кб. Она не включена в адресное пространство цен- трального процессора, и доступ к ней осуществля- ется через регистры видеопроцессора или посред- ством контроллера прямого доступа к памяти. Из полученных данных видеопроцессор вырабатывает сигналы развертки и основных цветов. Далее они используются в микросхеме формирователя полно- го видеосигнала, которая преобразует их в стандарт- ный телевизионный цветной сигнал, передаваемый на соответствующий выход приставки. Синхронизация работы всех модулей игровой приставки также возложена на видеопроцессор. Опорная частота его внутреннего генератора стаби- лизируется внешним кварцевым резонатором XI (53 МГц). Видеопроцессор формирует сигналы так- товой частоты 7,6 МГц для центрального процессо- ра и 3,5 МГц для процессора Z80. Контроллер прямого доступа к памяти позволя- ет быстро пересылать данные из встроенного ОЗУ или картриджа в видеопамять без участия цен- трального процессора. Эта функция применяется для обновления сведений в видеопамяти во время кадрового синхроимпульса. Контроллер ввода/вывода игровой приставки SEGA MEGA DRIVE обеспечивает обмен инфор- мацией с игровыми пультами через два разъема. Особенностью пультов приставки является пе- редача данных контроллеру ввода/вывода в па- раллельном коде. Это значит, что состояние всех клавиш считывается за одно обращение к порту (в приставках фирмы NINTENDO, например, одно обращение соответствует операции чтения состоя- ния определенной клавиши). Встроенный контроллер прерываний обрабаты- вает сигналы, поступающие от видеопроцессора, и формирует запросы на прерывание, передавае- мые центральному процессору. Системный контроллер, контроллер ввода/вы- вода и видеопроцессор могут быть как отдельными микросхемами, так и составными частями 208-вы- водной БИС. Однако это изменение конструкции приставки не влияет на ее программную архитек- туру и основные сигналы. Сигналы всех шин (данных, адреса и управле- ния) центрального процессора выведены на 64-коп- тактный разъем, через который подключается кар- тридж с программным обеспечением. В картридже располагается ПЗУ и при необходимости дополни- тельное ОЗУ. Кроме того, здесь разрешается уста- новить микросхему, выполняющую переключение страниц ПЗУ. Внешний сетевой адаптер подает напряжение на внутренний стабилизатор (+5 В), обеспечивающий функционирование микросхем игровой приставки. 3.2.2. Центральный процессор Структурная схема центрального процессора игро- вой приставки SEGA MEGA DRIVE приведена на рпс. 3.2. В приставке MEGA DRIVE в качестве централь- ного используется популярный процессор М68000 производства фирмы MOTOROLA, тактовая час- тота которого составляет 7,6 МГц. Микропроцессор связан с другими устройства- ми посредством 23-разрядной шины адреса, 16-раз- рядной шины данных и шины управления. Шина адреса позволяет процессору обращаться к 16 Мб памяти. Регистры внешних устройств (системного контроллера, видеопроцессора и т.д.) адресуются процессором так же, как и ячейки памяти, и нахо- дятся в его общем адресном пространстве. Обрати- те внимание: у микропроцессора нет выхода для младшего разряда адреса АО, вместо этого исполь- зуются два сигнала - LDS и UDS. Низкий уровень на выходе LDS соответствует ожиданию процессо- ром передачи младшего байта данных по разрядам D7 - DO; на выходе UDS - ожиданию передачи старшего байта по линиям D15 - D8. Если считы- вается 16-разрядное слово, низкий уровень уста- навливается одновременно на обоих выходах. Как видно из структурной схемы, процессор состо- ит из вычислительного блока с набором регистров общего назначения (АЛУ), контроллера шины и кон- троллера прерываний. Сигналы, вырабатываемые
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Рис. 3.2. Структурная схема центрального процессора игровой приставки SEGA MEGA DRIVE контроллером шины, разрешают различным моду- лям занимать шины процессора для обмена инфор- мацией. Контроллер прерываний принимает запро- сы, поступающие от других узлов приставки, и обеспечивает их обслуживание центральным про- цессором в соответствии с приоритетом и установ- ленным режимом. Далее рассматриваются программная архитекту- ра процессора, внутренние регистры, способы адре- сации, система команд и система прерываний. Полная документация по процессору М68000 за- нимает 649 страниц, что не позволяет включить ее в книгу разумного объема. Если окажется, что при- веденных здесь сведений вам недостаточно, обрати- тесь к литературе, указанной в конце книги, или попробуйте найти информацию на перечисленных там же сайтах Internet. Регистры процессора Отличительной чертой процессора М68000 пристав- ки SEGA MEGA DRIVE является внутренняя 32- разрядная архитектура при внешней 16-разряд ной шине данных. Именно поэтому такой вариант мик- ропроцессора считается переходным от 16-разряд- ных моделей к 32-разрядным. В связи с названной особенностью все внутренние регистры процессора также являются 32-разрядными. Центральный процессор игровой приставки SEGA MEGA DRIVE содержит восемь 32-разряд- ных регистров данных (DO - D7), восемь 32-раз- рядных регистров адреса (АО - А7), один из кото- рых используется как 32-разрядный указатель стека пользователя (А7 или USP), а также 32-раз- рядный счетчик команд (PC) и 16-разрядный ре- гистр состояния процессора (CCR): Каждый ре- гистр имеет собственное имя и назначение. Регистры данных DO - D7. Используются для хранения битов, байтов, слов, двойных слов и любых других структур данных, над которыми процессор производит различные операции. Также могут при- меняться как индексные регистры при обращении к памяти. Регистры адреса АО - А7. Задействуются как программные указатели стека, индексные регистры 75
Архитектура и-принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE или регистры базового адреса. В таком качестве они полезны при выполнении операций с 16- или 32- разрядными данными. Регистр А7 используется при вызове подпрограмм и обработке исключений как аппаратно реализованный указатель стека. Регистр указателя системного стека SSP. Про- цессор М68000 может работать с двумя независи- мыми стеками. Один из стеков применяется Про- граммой пользователя, а другой - операционной системой (он включается, когда процессор функци- онирует в режиме супервизора). Регистр состояния процессора SR. Этот 16-раз - рядный регистр разделен на две части. Каждый бит в младшем байте данного регистра является флагом и изменяет свое значение в зависимости от резуль- тата выполненной процессором команды. Старший байт регистра предназначен для переключения ре- жимов центрального процессора. Младший байт имеет собственное имя (CCR). Структура регистра состояния центрального про- цессора игровой приставки SEGA MEGA DRIVE представлена на рис. 3.3. CCR SR |T|o|s|ojojl2|ll|lo|o|o|o|x|N|z|v|c| Рис. 3.3. Структура регистра состояния центрального процессора игровой приставки SEGA MEGA DRIVE Старший байт регистра состояния задает режим работы процессора. Как видно из рис. 3.3, только пять разрядов влияют на функционирование про- цессора, оставшиеся три разряда постоянно уста- новлены в 0. Флаг Т - флаг трассировки. Если он установлен, то после выполнения каждой команды процессор будет передавать управление процедуре обслужи- вания трассировочного прерывания. Флаг исполь- зуется при отладке программ, а в остальных случа- ях должен быть равен 0. Флаг S является флагом режима супервизора. Процессор М68000 может работать в пользователь- ском режиме или в режиме супервизора. Если этот флаг равен 0, то процессор функционирует в режи- ме пользователя и использует стек пользователя. Если же флаг установлен, процессор находится в режиме супервизора и применяет системный стек. При запуске программы задействован стек пользователя. Системный стек включается при об- работке исключений и запросов на прерывание. Флаги 12 - 10 - маска приоритета прерываний, их состояние определяет реакцию процессора при поступлении запроса на прерывание. Эти три раз- ряда интерпретируются как число в диапазоне от 0 до 7. После установки указанных флагов в 1 про- цессор не будет обслуживать прерывания с номе- ром, меньшим или равным заданному. Прерывание с номером 7 запретить нельзя. Из восьми разрядов младшего байта регистра со- стояния используются только пять. Три старших разряда регистра флагов всегда сброшены. Ниже кратко описано их назначение. Флаг X - флаг расширения. Применяется при выполнении арифметических команд. Флаг прини- мает значение 1, если разрядность результата ариф- метической операции превосходит установленную разрядность операндов. Данный флаг является ана- логом флага переноса, но на него не влияют логи- ческие и некоторые арифметические операции. Флаг N - флаг отрицательного результата. Уста- навливается в 1, если самый старший разряд ре- зультата выполненной операции равен 1. В против- ном случае флаг сбрасывается. Флаг Z - флаг нулевого результата. Устанавли- вается в 1, если результат выполнения операции ра- вен 0. Флаг V - флаг переполнения. Флаг принимает значение 1, если разрядность результата выполнен- ной операции над числами со знаком превосходит установленную разрядность операндов. Другими словами, состояние этого флага определяется нали- чием переноса в самый старший разряд. Флаг С - флаг переноса. Равен 1, если разряд- ность результата выполненной операции превосхо- дит установленную разрядность операндов. Напри- мер, если при сложении двух 8-разрядных чисел получится 9-разрядное число. Иначе говоря, состо- яние данного флага определяется наличием пере- носа из самого старшего разряда. Счетчик команд PC. В этом регистре процессо- ра хранится адрес команды, которая должна быть выполнена. Во время обработки команды содержи- мое регистра автоматически увеличивается, после чего он указывает на следующую команду. Коман- ды перехода позволяют изменить содержимое регис- тра и задать необходимую последовательность вы- полнения команд, размещенных в памяти. При использовании относительной адресации содержи- мое счетчика команд интерпретируется как указа- тель на адрес команды. Способы адресации Для корректной работы процессора в код команды необходимо включить местоположение необходимых данных с помощью различных методов адресации. Ниже подробно рассмотрены методы адресации центрального процессора игровой приставки SEGA MEGA DRIVE (рис. 3.4). 76
Архитектура и принцип работы. Центральный процессор с^жвяаыж ч«зя«»М'’'дах»**»ллАЛМ0Кай-?н»»^ - _ -а«“*ж-л »* Непосредственная регистровая адресация с ис- пользованием регистра данных. Операнд находит- ся в одном из регистров данных центрального процес- сора. Название применяемого регистра указывается непосредственно в команде (рис. 3.4а). Непосредственная регистровая адресация с ис- пользованием регистра адреса. Операнд находится в одном из регистров адреса центрального процессо- ра. Название регистра задается непосредственно в команде (рис. 3.46). Косвенная регистровая адресация. В команде определяется имя регистра адреса, где хранится ад- рес операнда в памяти (рис. 3.4в). Не посредствен ноя регистроВоя одресоиия „ 31 О Регистр п i---------------------1 донных Un |Операнд| с использо&онием регистра данных б) 31 о Регистр ।-----------------------1 адреса Ап Операнд Косвенная регистровая адресация с последую- щим увеличением адреса. В команде указывается один из регистров АО - А7, где содержится адрес, определяющий расположение операнда в памяти. После того как выборка данных произведена, чис- ло, хранящееся в регистре, автоматически увеличи- вается на длину операнда (на 1 для байта, на 2 для слова и на 4 для двойного слова). Название исполь- зуемого регистра адреса вводится непосредственно в команде (рис. 3.4г). Косвенная регистровая адресация с предшест- вующим уменьшением адреса. В команде указы- вается регистр (АО - А7), где содержится адрес, Косвенная регистровая адресация 31 О Регистр ।--------------------------------------1 одресо Ап оперондо . | Память I Операнд ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE с использованием регистра адреса Косвенная регистровая адресация с увеличением адреса 31 О Регистр i--------------------------------------1 адреса Ап {____________Адрес операнда__________| 1, 2 или 4 I Размер операнда Косвенная регистробоя адресация с уменьшением адреса 31 Регистр г---------------------------- адресе АГ Адрес оперондо 1, 2 или 4 [Размер оперондо Память Операнд Помять I Операнд е) Относительная одресоиия со смешением КосВенная регистровая адресация со смешением Счетчик команд Память КосВенно—индексная регистровая адресация со смещением 31 рс [22 Б азо Вы й адрес Смешение Операнд В качестбе индексного регистра может использобаться регистр адреса или регистр данных В качестбе индексного регистра может использобаться регистр адреса или регистр донных Рис. 3.4. Методы адресации центрального процессора М68000 игровой приставки SEGA MEGA DRIVE 77
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE определяющий расположение операнда в памяти. Перед выборкой данных из памяти число, храняще- еся в регистре, автоматически уменьшается на дли- ну операнда (на 1 для байта, на 2 для слова и на 4 для двойного слова). Название применяемого регис- тра адреса вписывается непосредственно в команде (рис. 3.4д). Косвенная регистровая адресация со смещени- ем. В команде указывается регистр адреса и 16-раз- рядное смещение. Расположение операнда в памяти определяется путем сложения содержимого регис- тра адреса с заданным смещением. Смещение рас- сматривается как число со знаком в диапазоне от -32768 до 32767 (рис. 3.4е). Косвенно-индексная регистровая адресация со смещением. В команде указывается регистр адре- са, индексный регистр и 8-разрядное смещение. Расположение операнда в памяти определяется пу- тем сложения.содержимого регистра адреса с со- держимым индексного регистра и заданным смеще- нием. Смещение рассматривается как число со знаком в диапазоне от -127 до 128 (рис. 3.4ж). Относительная адресация со смещением. Адрес операнда вычисляется так же, как и при косвенной регистровой адресации со смещением, только вме- сто регистра адреса используется счетчик команд PC (рис. 3.4з). Относительная адресация со смещением и ин- дексированием. Адрес операнда вычисляется так же, как и при косвенно-индексной регистровой ад- ресации со смещением, только вместо регистра ад- реса применяется счетчик команд PC (рис. 3.4и). Абсолютная короткая адресация. В команде указывается 16-разрядный адрес размещения опе- ранда в памяти. Абсолютная длинная адресация. В команде ука- зывается полный 32-разрядный адрес размещения операнда в памяти. Неявная адресация. Для команд расположение операндов строго фиксировано, дополнительных указаний не требуется. Непосредственная адресация. Операнд хранит- ся в памяти сразу за кодом команды, начиная с ад- реса РС+1. В записи команды на языке ассемблера при этом указываются непосредственные данные. Система команд Центральный процессор игровой приставки SEGA MEGA DRIVE может выполнять около 120 различ- ных команд. Они делятся на следующие функцио- нальные группы: • команды пересылки данных: MOVE, EXG; • команды арифметических операций: ADD, ADDI, SUB, SUBI, MULS, MULU, DIVS, DIVU, NEG, CLR; • команды логических, операций: AND, EOR, NOT, OR; • команды работы с отдельными разрядами: BCHG, BCLR, BSET, BTST; • команды вычисления адреса: LEA, PEA; • команды сдвига и вращения: ASL, ASR, LSR, LSL, ROL, ROR, ROXR, ROXL; • команды двоично-десятичной арифметики: ABCD, NBCD, SBCD; • команды управления выполнением програм- мы: Вес, DBcc, BRA, BSR, JMP, JSR, RTS; • команды управления процессором: NOP, RTE, STOP, BREAK, TRAP, MOVE to SR, MOVE from SR. Список команд центрального процессора игро- вой приставки SEGA MEGA DRIVE и их краткое описание приведены в приложении 1. Для получе- ния более полной информации по системе команд следует обратиться к специальной литературе. Система прерываний Обработка запросов на прерывание в центральном процессоре игровой приставки SEGA MEGA DRIVE базируется на понятии «исключение» (exception) и характерна для 16-разрядных процессоров. При возникновении какого-либо события, требующего немедленной реакции системы, выполнение теку- щей программы прекращается, а управление пере- дается по заданному адресу для обработки новой ситуации. Исключения могут быть внутренними (напри- мер, деление на 0 или ошибка адресации), которые вызываются в результате работы программы, и внеш- ними (запросы на прерывания), инициируемыми внешними устройствами системы. Рассмотрим действия центрального процессора при обслуживании внутреннего исключения: 1. После получения сигнала об исключении устрой- ство управления процессора генерирует вектор ис- ключения. Фактически вектор представляет собой внутренний номер возникшей ситуации. 2. Полученный вектор умножается на 4 для формиро- вания адреса в диапазоне Oh - 3FCh. 3. Содержимое счетчика команд и регистра состояния процессора запоминается в стеке. 4. Двойное слово, расположенное в памяти по вычис- ленному ранее адресу, записывается в счетчик ко- манд. Таким образом, управление передается про- цедуре обработки исключения. Обработка внешнего запроса прерывания несколь- ко отличается от рассмотренной выше процедуры. У процессора есть три входа запроса прерывания. Низкий логический уровень на всех входах свиде- тельствует об отсутствии запроса на прерывание. 78
Архитектура и принцип работы. Центральный процессор Если же на этих входах появляется любая другая комбинация, она сравнивается с значением, запи- санным в разрядах 12 - 10 регистра состояния про- цессора. Когда код на входах процессора больше, чем установленный в регистре состояния приори- тет (12 - 10), происходит обработка соответствую- щего исключения. В игровой приставке SEGA MEGA DRIVE ис- пользуются только три прерывания: с номером 2 (прерывание от внешнего устройства), 4 (прерыва- ние по строчному синхроимпульсу) и 6 (прерыва- ние по кадровому синхроимпульсу). Всего центральный процессор игровой пристав- ки SEGA MEGA DRIVE может обрабатывать 256 исключительных ситуаций. При этом первые 64 с кодами 0 Oh - 3Fh используются системой, а ос- тавшиеся 192 могут задействоваться пользователь- ской программой. Ниже кратко описано назначе- ние системных векторов. Вектор 00 - рестарт системы. Исключительная ситуация возникает при первом запуске системы или при поступлении сигнала RESET. Это един- ственный вектор, занимающий два двойных слова. При начальной установке системы процессор перехо- дит в режим супервизора, маска приоритета преры- ваний задается равной 7, трассировка выключается. Двойное слово, записанное по адресу 0 0 0 0 0 Oh, копи- руется в указатель системного стека SSP Следующее двойное слово копируется в счетчик команд PC. Вектор 01 - рестарт системы. Практически не применяется, поскольку данные используются при возникновении исключения с кодом 0. По адресу, соответствующему этому вектору, записан адрес, по которому передается управление при начальном за- пуске системы. Вектор 02 - ошибка шины. Исключительная си- туация возникает при появлении сигнала низкого логического уровня на входе BERR процессора. Вектор 03 - ошибка адресации. Данная ошибка появляется, если процессор пытается обратиться к слову или двойному слову, начинающемуся с не- четного адреса. Вектор 04 - неизвестная операция. По адресу, заданному в этом векторе, управление будет пере- дано, если процессор получил неправильный код команды (то есть команда с таким кодом отсутству- ет в системе команд процессора). Вектор 05 - деление на 0. Причина возникнове- ния данной ситуации ясна из названия. Вектор 06 - команда СНК. После выполнения команды СНК, если условие Dn < 0 или Dn > опе- ранд верно (см. таблицу команд в приложении 1), управление будет передано по указанному в векто- ре адресу. Вектор 07 - команда TRAPV. По адресу, опре- деляемому этим вектором, управление передается после выполнения команды TRAPV, если флаг V установлен в 1. Вектор 08 - нарушение привилегий. Исключи- тельная ситуация возникает при попытке выпол- нить привилегированную команду в пользователь- ском режиме (флаг S равен 0). Вектор 09 - трассировка. Если флаг трассиров- ки Т в регистре состояния установлен, то после вы- полнения каждой команды управление передается по адресу, заданному вектором. Основное назначение данного исключения - пошаговая отладка программ. Векторы 0А - 0Е. Зарезервированы (не исполь- зуются). Вектор 0F - неинициализированный вектор прерывания. Процедура обработки данной исклю- чительной ситуации вызывается, когда процессор получил запрос на прерывание, но не может опре- делить соответствующий ему вектор из-за непра- вильных управляющих сигналов. Векторы 10-17. Зарезервированы (не использу- ются). Вектор 18 - нераспознанное прерывание. Исклю- чительная ситуация возникает, если при обработке запроса на прерывание на вход BERR поступает сиг- нал низкого логического уровня, свидетельствующий об ошибке на шине процессора. Вектор 19 - вектор прерывания 1. По адресу, за- писанному в векторе, управление передается, когда поступает запрос на прерывание с приоритетом 1. Вектор 1А - вектор прерывания 2. По адресу, записанному в векторе, управление передается, когда поступает запрос на прерывание с приори- тетом 2. В игровой приставке SEGA MEGA DRI- VE это прерывание от дополнительных внешних устройств. Вектор 1В - вектор прерывания 3. По адресу, за- писанному в векторе, управление передается при поступлении запроса на прерывание с приорите- том 3. Вектор 1С - вектор прерывания 4. По адресу, за- писанному в векторе, управление передается, когда поступает запрос на прерывание с приоритетом 4. В игровой приставке SEGA MEGA DRIVE это пре- рывание по строчному синхроимпульсу. Вектор 1D - вектор прерывания 5. По адресу, за- писанному в векторе, управление передается при по- ступлении запроса на прерывание с приоритетом 5. Вектор 1Е - вектор прерывания 6. По адресу, за- писанному в векторе, управление передается, когда поступает запрос на прерывание с приоритетом 6. В игровой приставке SEGA MEGA DRIVE это пре- рывание по кадровому синхроимпульсу. ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 79
Архитектура и принцип работы. Адресное пространство ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Вектор 1F - вектор прерывания 7. По адресу, записанному в векторе, управление передается, когда поступает запрос на прерывание с приори- тетом 7. Векторы 20 - 2F - векторы команды TRAP. Пос- ле выполнения команды TRAP #п вызывается про- цедура обработки исключения с номером 20h+n. Векторы 30 - ЗЕ Зарезервированы (не исполь- зуются). Векторы 40 - FE Векторы применяются про- граммой пользователя для собственных целей. 3.2.3. Адресное пространство Центральный процессор игровой приставки MEGA DRIVE способен обращаться к 16 Мб памяти с ад- ресами 00000Oh - FFFFFFh. В едином адресном пространстве располагаются внутреннее ПЗУ и ОЗУ приставки, регистры вво- да/вывода, память сопроцессора Z80 и память под- ключенного картриджа. Распределение адресного пространства игро- вой приставки SEGA MEGA DRIVE показано на рис. 3.5. Рассмотрим более подробно назначение основ- ных блоков памяти. OOOOOOh 400000h 800000b AOOOOOh AlOOOOh A12000h COOOOOh EOOOOh FFOOOOh FFFFFFh Рис. 3.5. Распределение адресного пространства центрального процессора игровой приставки SEGA MEGA DRIVE ПЗУ кс р m pu джа Резерв Резерв Адресное простран- ство сопроцессор© Z80 Регистр и ВВодо / ВьВодо и управления сопроцессором Резерв Регистры Видеопро цессоро Внутреннее ОЗУ присгпсВки Адреса OOOOOOh - 0007FFh. Здесь располагает- ся встроенное ПЗУ приставки с программой на- чального запуска, которая считывает информацию из картриджа, сравнивает ее с записанным образ- цом и передает управление в ПЗУ картриджа по адресу запуска игры. После передачи управления внутреннее ПЗУ отключается, а при обращении по этим адресам становится доступным ПЗУ картриджа. В некоторых моделях стартовое ПЗУ отсутствует. Адреса OOOOOOh - 3FFFFFh. По указанным ад- ресам подключается ПЗУ картриджа с записанной в нем программой. Адреса 40 000 Oh - 7FFFFFh. Эта область па- мяти зарезервирована фирмой-изготовителем для дальнейших расширений. Некоторые картриджи могут подключать сюда ПЗУ, если объем програм- мы превышает 4 Мб. Адреса 80000 Oh - 9FFFFFh. Данная область па- мяти также зарезервирована фирмой-изготовите- лем для дальнейших расширений. Некоторые кар- триджи подключают по этим адресам внутреннее ОЗУ. Адреса AOOOOOh - AOFFFFh. Область памяти, которая используется совместно центральным про- цессором М68000 и сопроцессором Z80. Более по- дробно работа этой области памяти будет рас- сматриваться в разделе, посвященном звуковым процессорам игровой приставки. Адреса AlOOOOh - AllFFFh. Регистры управле- ния сопроцессором. Адреса A12000h - BFFFFFh. Не используются. Адреса COOOOOh - DFFFFFh. Регистры управле- ния видеопроцессором. Адреса EOOOOOh - FEFFFFh. Доступ запрещен. Адреса FFOOOOh - FFFFFFh. Внутреннее ОЗУ игровой приставки. 3.2.4. Видеопроцессор Структурная схема видеопроцессора игровой при- ставки SEGA MEGA DRIVE приведена на рис. 3.6. Видеопроцессор игровой приставки SEGA ME- GA DRIVE формирует сигналы трех основных цве- тов (R, G, В) и синхронизации. Они преобразуются в стандартный видеосигнал, передаваемый на ли- нейный выход игровой приставки. Посредством отдельных шин данных, адреса и управления к видеопроцессору подключены мик- росхемы видеопамяти общим объемом 64 Кб. Ви- деопамять не входит в адресное пространство цен- трального процессора и доступна для записи и чтения только через регистры видеопроцессора или посред- ством контроллера прямого доступа к памяти. Используемый в игровой приставке видеопро- цессор ориентирован на блочную графику на осно- ве спрайтов: все изображение на экране строится из заранее заданных блоков размером 8x8 точек. Раз- решение выводимой на экран картинки составляет 320x224 точки (40x28 символов). Рассмотрим более подробно процесс формиро- вания изображения игровой приставкой SEGA ME- GA DRIVE. 80
Архитектура и принцип работы. Видеопроцессор Рис. 3.6. Структурная схема видеопроцессора игровой приставки SEGA MEGA DRIVE Распределение видеопамяти В видеопамяти игровой приставки SEGA MEGA DRIVE хранится следующая информация: • знакогенератор, содержащий символы разме- ром 8x8 точек, из которых строится рисунок; • две экранные страницы размером от 32x32 до 128x128 символов; • данные о спрайтах. Расположение этих областей памяти не являет- ся строго определенным, а задается программным путем через регистры видеопроцессора. Рассмот- рим назначение каждой области. Знакогенератор Видеопроцессор игровой приставки SEGA MEGA DRIVE использует один знакогенератор, содержа- щий образы символов, из которых будет строиться все изображение. Максимальный размер знакогенератора составля- ет 2048 символов. Символы имеют фиксированный размер 8x8 точек, причем для задания цвета одной точки используется четыре бита. Следовательно, чтобы определить битовый образ одного символа, нужно 32 байта видеопамяти (по 4 байта для каж- дой из 8 строк). Применение четырех бит для каждой точки по- зволяет получить 16 различных цветов в пределах одного символа. Однако цвет с кодом 0 всегда ин- терпретируется как прозрачный, так что реально видимых цветов будет 15. Первым этапом, необходимым для формирова- ния картинки на экране игровой приставки, явля- ется разработка одного или нескольких знакогене- раторов, из которых будут составляться фоновое изображение и спрайты. Созданные знакогенерато- ры записываются в ПЗУ картриджа и во время вы- полнения программы по мере необходимости копи- руются в видеопамять. В качестве примера приведем описание симво- ла знакогенератора с изображением буквы «А». На экране этот символ будет отображаться цветом с номером 2 из выбранной палитры. Все числа при- ведены в шестнадцатеричной системе счисления. ; Описание символа знакогенератора. dc.l $02222200 dc.l $22000220 dc.l $22000220 dc.l $22222220 dc.l $22000220 dc.l $22000220 dc.l $22000220 dc.l $00000000 Экранные страницы Две экранные страницы игровой приставки SEGA MEGA DRIVE содержат информацию о символах, из которых состоит изображение, выводимое на эк- ран. Размер экранной страницы может изменяться от 32x32 до 128x128 символов. На каждый символ отводится по два байта (одно 16-разрядное слово). Назначения разрядов данного слова описывают- ся ниже. D15 - приоритет. Сброс этого бита приведет к то- му, что на экране появится вторая экранная страни- ца, поверх нее первая и затем спрайты. При уста- новке этого разряда в 1 у символа первой экранной страницы он будет отображаться поверх спрайтов и закрывать их. При установке в 1 бита приоритета у какого-либо символа второй экранной страни- цы он будет отображаться поверх первой экран- ной страницы. D14, D13 - номер палитры. Определяет номер одной из четырех палитр, используемой для зада- ния цветов данного символа. D12 - вертикальное отражение. Если этот раз- ряд установлен, то вместо символа выводится его зеркальное отражение относительно горизонталь- ной оси. D11 - горизонтальное отражение. Если этот раз- ряд установлен, то вместо символа выводится его 11-321 81
Архитектура и принцип работы. Видеопроцессор зеркальное отражение относительно вертикальной оси. DIO - DO - номер символа. Здесь задается номер одного из символов знакогенератора (от 0 до 2047), который будет показан в данной позиции экрана. Следует отметить, что для формирования цвета точки применяются четыре бита из знакогенерато- ра и два бита, определяющие палитру. Таким образом, одновременно на экране могут отображаться 64 цвета. Однако число возможных цветов, поддерживаемых приставкой, равно 512, поскольку 6-разрядное значение цвета использует- ся как индекс для обращения к одной из ячеек ОЗУ палитры, где записаны действительные 9-разряд- ные значения, задающие выводимый на экран цвет. Существует еще одна экранная страница - окно. При выводе на экран она совмещается с первой эк- ранной страницей, затем полученное изображение накладывается на вторую экранную страницу, а по- верх него располагаются спрайты. Формат окна ни- чем не отличается от формата обычной экранной страницы. Спрайты Видеопроцессор игровой приставки SEGA MEGA DRIVE позволяет работать с 80 спрайтами разме- ром от 8x8 до 32x32 точки. Спрайт, как и картинка, строится из символов знакогенератора, поэтому размеры спрайта всегда кратны 8. При использовании спрайтов, размер ко- торых превышает 8x8 символов, их изображения формируются из нескольких последовательно рас- положенных символов знакогенератора. В связи с применением спрайтов видеопроцес- сор приставки налагает важное ограничение: на одной линии экрана может находиться не более 20 спрайтов одновременно. Память спрайтов. Память спрайтов игровой приставки SEGA MEGA DRIVE представляет со- бой отдельную область в адресном пространстве видеопроцессора. Этот блок содержит всю необхо- димую информацию о положении каждого спрайта на экране и режиме его отображения. Для каждого из 80 спрайтов в памяти отведено по восемь байт, в которых находится следующая информация: • байты 1 и 2: сумма координаты верхнего лево- го угла спрайта по вертикали и числа 128. Зна- чение вертикальной координаты может изме- няться от 0 до 511; • байт 3: размеры спрайта. Назначение разрядов этого байта таково: D7 - D4 - не используются. D3, D2 - задание ширины спрайта: 00-8 точек; 01-16 точек; 10-24 точки; 11-32 точки. DI, D0 - определение высоты спрайта: 00-8 точек; 01-16 точек; 10-24 точки; 11-32 точки; • байт 4: номер следующего по приоритету спрайта. С помощью данного байта можно про- извольным образом менять порядок вывода спрайтов на экран и соответственно их при- оритет (рис. 3.7). Все спрайты должны состав- лять один непрерывный список, а у последне- го спрайта в этот байт записывается 0; Спрайт О Спрайт 1 Спрайт 2 Спрайт 3 Порядок Вы&одо спрайтоЬ О — 1 — 2 — 3 Спрайт О Спрайт 1 Спрайт 2 Спрайт 3 Порядок ЬыЬода спрайтоЬ О - 2 - 3 - 1 Рис. 3.7. Использование байта связи для задания приоритета спрайтов • байты 5, 6: атрибуты спрайта (приоритет, от- ражение, используемая палитра), а также но- мер первого символа спрайта в знакогенерато- ре. Формат этого слова аналогичен формату слова, которое описывает символы, выводи- мые на экран. Если размер спрайта превышает 8x8 точек, для его формирования применяют- ся несколько последовательно расположен- ных символов. Схема генерации такого спрай- та показана на рис. 3.8; • байты 7, 8: сумма координаты верхнего левого угла спрайта по горизонтали и числа 128. Зна- чение горизонтальной координаты может из- меняться от 0 до 511. ОЗУ палитры ОЗУ палитры представляет собой набор из 64 12-разрядпых регистров, в которых хранятся дан- ные о цветах, отображаемых на экране. Для опреде- ления цвета нужны только девять разрядов. С помо- щью 9-разрядных чисел можно задать 512 различных 82
Архитектура и принцип работы. Видеопроцессор Спрайт размером 8*24 точки, состоящий из трех символов Спрайт размером 16x8 точек, состоящий из двух символов Спрайт размером 24x8 точек, состоящий из трех символов Символ 1 Символ 3 Символ 5 Символ 2 Символ Символ 6 Спрайт размером 24x16 точек, состоящий из шести символов Рис. 3.8. Формирование спрайтов, состоящих из нескольких символов оттенков, однако размер ОЗУ палитры ограничива- ет количество одновременно используемых цве- тов - их не должно быть больше 64. В знакогенераторе указываются четыре младших разряда цвета, а в байте, описывающем символ эк- ранной страницы или спрайт, - два старших. При их совмещении получается 6-разрядное двоичное число в диапазоне 0-63, устанавливающее адрес расположения 12-разрядного кода выводимого на экран цвета в ОЗУ палитры. При описании цвета вводятся три 3-разрядных значения, определяющие интенсивность красной, синей и зеленой составляющих, другие три разря- да не задействуются: Dll - D9 - интенсивность синего цвета; D8 - не используется; D7 - D5 - интенсивность зеленого цвета; D4 - не используется; D3 - D1 - интенсивность красного цвета; D0 - не используется. Способы доступа к ОЗУ палитры для чтения установленных значений и записи новых будут рас- смотрены в разделе, посвященном регистрам ви- деопроцессора. Формирование изображения на экране Видеопроцессор совмещает два слоя фоновой кар- тинки, спрайты и окно, после чего выводит полу- ченный результат на экран телевизора. Рассмотрим этот процесс более подробно. Итак, перед началом формирования изображе- ния в памяти должны располагаться: знакогенера- тор, две экранные страницы, изображение окна, информация о горизонтальной прокрутке и инфор- мация о спрайтах. Следует также помнить, что код цвета, у которого четыре младших разряда равны 0, обрабатывается видеопроцессором как прозрачный. Символ 1 Символ 3 Символ 2 Символ 4 Спрайт размером 16x16 точек, состоящий из четырех символов Символ 1 Символ 4 Символ 2 Символ Символ 3 Символ 6 Спрайт размером 16x24 точки, состоящий из шести символов Сначала совмещаются первая экранная страни- ца и окно. Положение окна задается путем записи значений во внутренние регистры видеопроцессо- ра с номерами 17 и 18. Более детально этот процесс рассматривается при описании регистров. Затем две экранные страницы и спрайты совме- щаются в следующем порядке: 1. Экран, окрашенный в цвет фона. 2. Символы второй экранной страницы с битом при- оритета, равным 0. 3. Символы первой экранной страницы с битом при- оритета, равным 0. 4. Спрайты с битом приоритета, равным 0. 5. Символы второй экранной страницы с битом при- оритета, равным 1. 6. Символы первой экранной страницы с битом при- оритета, равным 1. 7. Спрайты с битом приоритета, равным 1. Процесс совмещения экранных страниц, окна и спрайтов поясняется на рис. 3.9. Чересстрочный режим Видеопроцессор игровой приставки SEGA MEGA DRIVE способен формировать изображение на эк- ране в трех режимах: обычном, чересстрочном и че- ресстрочном с двойным разрешением. В обычном режиме на экран телевизора выво- дится растр размером 320x224 точки, причем чет- ные кадры ничем не отличаются от нечетных. В чересстрочном режиме дважды отображается одна и та же картинка: в одном кадре в четных стро- ках, а в другом - в нечетных. Это повышает четкость изображения, поскольку размер выводимого на эк- ран фрагмента становится равным 320x448 точек. Изображение на четных п нечетных кадрах также не отличается. ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 83
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Рис. 3.9. Формирование изображения видеопроцессором игровой приставки SEGA MEGA DRIVE При чересстрочном режиме с двойным разреше- нием совмещаются две различные части кадра, в ре- зультате чего получается картинка с большим разре- шением. Каждый символ знакогенератора в таком случае должен занимать не 32, а 64 байта. Во время четных кадров на экран будут выводиться первые 32 байта символа в четные строки, а во время не- четных - вторые 32 байта в нечетные строки. Ин- формация, отображаемая на четных и нечетных кад- рах, различна; для человеческого глаза смена кадров незаметна, и два изображения объединяются в одно. Ниже рассматриваются встроенные функции об- работки графики видеопроцессором игровой при- ставки SEGA MEGA DRIVE, способы доступа к видеопамяти и особенности программного обес- печения для видеопроцессора. Аппаратная прокрутка экрана В видеопамяти игровой приставки SEGA MEGA DRIVE имеется специальная область, задающая горизонтальное смещение строк экрана. Изменяя хранящиеся здесь данные, можно плавно прокручи- вать по горизонтали любые строки. В этой области памяти попарно записаны 16-раз- рядные числа, первое из которых представляет со- бой смещение для фрагмента первой экранной страницы, а второе - смещение для того же фраг- мента второй экранной страницы. Далее следуют два числа, соответствующие смещению для следу- ющего фрагмента и т.д. В зависимости от режима работы видеопроцес- сора смещения разрешается задавать тремя спосо- бами: для всего экрана, для каждой строки символов или для каждой строки экрана. Само 16-разрядное число интерпретируется как число со знаком в диа- пазоне от -32768 до 32767, что позволяет прокру- чивать изображение как вправо, так и влево. Для реализации вертикальной прокрутки экрана используется специальная область памяти, называ- емая VSRAM. Она не является частью видеопамя- ти, а представляет собой отдельное статическое ОЗУ объемом 80 байт, доступ к которому возможен через регистры видеопроцессора. В эту память так- же попарно записываются числа, равные величине вертикального смещения для отдельных блоков первой и второй экранных страниц. В зависимости от установленного режима можно задавать смеще- ние либо для всего экрана сразу, либо для отдель- ных столбцов шириной по два символа (16 точек). Контроллер прямого доступа к памяти Контроллер прямого доступа к памяти (ПДП) игро- вой приставки SEGA MEGA DRIVE осуществляет передачу блока информации из ПЗУ или ОЗУ в ви- деопамять, а также обеспечивает пересылку данных внутри видеопамяти. Наиболее часто эта функция применяется во время кадрового синхроимпульса для быстрого обновления информации о положе- нии спрайтов на экране, для смены изображения или для заполнения областей экрана. На время работы контроллера ПДП центральный процессор игровой приставки останавливается, одна- ко сопроцессор Z80 продолжает функционировать до обращения к памяти центрального процессора. При использовании прямого доступа к памяти сле- дует помнить о трех особенностях приставки SEGA MEGA DRIVE. Во-первых, видеопамять недоступна во время фор- мирования изображения видеопроцессором, поэтому пересылку данных посредством прямого доступа к памяти следует производить во время кадрового синхроимпульса. Наиболее часто вызов такой про- цедуры осуществляют во время обработки соответ- ствующего запроса на прерывание. Во-вторых, во время прямого доступа к памяти центральный процессор приставки может исполь- зовать только область памяти, расположенную по адресам FFOOOOh - FFFFFFh. Поэтому программа должна переместить фрагмент, взаимодействующий с контроллером ПДП, из ПЗУ в верхнюю память. В-третьих, адрес источника данных следует за- писать в регистр ПДП командой записи слова, на- пример MOVE. W. Применять команды записи байта или двойного слова нельзя. Существуют три режима работы контроллера прямого доступа к памяти. Первый режим: передача информации из памя- ти центрального процессора в видеопамять, ОЗУ 84
Архитектура и принцип работы. Видеопроцессор палитры или ОЗУ вертикальной прокрутки. При этом данные считываются из памяти центрального процессора словами по 16-разрядов и записываются в видеопамять побайтно, а в ОЗУ палитры и в ОЗУ вертикальной прокрутки - 16-разрядными словами. Второй режим: заполнение видеопамяти, когда во все ячейки видеопамяти в заданном диапазоне помещается один и тот же код. Третий режим: копирование видеопамяти, при ко- тором пересылка данных осуществляется из одной области видеопамяти в другую. Такой режим часто используется для быстрого перемещения фрагмен- тов изображения, расположенных в видеопамяти. С точки зрения программирования контроллер прямого доступа к памяти игровой приставки SEGA MEGA DRIVE представляет собой несколь- ко регистров видеопроцессора. Регистры видеопроцессора В адресном пространстве центрального процессора игровой приставки SEGA MEGA DRIVE видеопро- цессор представлен тремя 16-битными регистрами. С помощью этих регистров осуществляется до- ступ к видеопамяти, ОЗУ палитры и ОЗУ вер- тикальной прокрутки, а также к внутренним регистрам видеопроцессора и контроллера ПДП. Регистры располагаются по адресам COOOOOh, C00004h и C00006h. Рассмотрим назначение названных регистров и ра- боту с ними при обращении к видеопамяти и регис- трам видеопроцессора. Регистр данных Адрес: COOOOOh. Tun: запись/чтение. Назначение разрядов. В регистр записывается 16-разрядное значение, которое внутренние схемы видеопроцессора пере- дадут в один из внутренних регистров видеопро- цессора или в видеопамять. При чтении через этот регистр из видеопамяти получают слово, расположенное по адресу, который задается через регистр управления C00004h. Данный регистр также доступен при обращении по адресу C00002h. Регистр управления Адрес: СО 00 04h. Тип: запись/чтение. Назначение разрядов. При чтении и при записи назначение разрядов данного регистра различно. Кроме того, в регистр необходимо последовательно записать два 16-раз- рядных слова, поэтому назначение разрядов будет рассматриваться для каждого случая отдельно. При чтении становится доступным слово состо- яния видеопроцессора со следующими данными: D15-D10 - разряды не используются. D9 - разряд равен 1, если очередь записи в ви- деопроцессор пуста. D8 - разряд равен 1, если очередь записи в ви- деопроцессор полностью занята. D7 - разряд равен 1, если схемы видеопроцессора ожидают поступления кадрового синхроимпульса. D6 - разряд равен 1, если на одной строке оказа- лось слишком много (более 20) спрайтов. D5 - разряд равен 1, если видеопроцессор обнару- жил наложение двух спрайтов (перекрываются пик- селы спрайтов, у которых код цвета отличен от 0). D4 - разряд используется, когда видеопроцессор работает в чересстрочном режиме: 1 - отображается четный кадр; 0 - отображается нечетный кадр. D3 - наличие 1 в этом разряде соответствует ре- жиму генерации видеопроцессором кадрового син- хроимпульса, в противном случае формируется кадр. D2 - установка в 1 свидетельствует о выработке видеопроцессором в данный момент строчного син- хроимпульса. Если же разряд сброшен, формирует- ся строка изображения. D1 - разряд равен 1, когда контроллер прямого доступа к памяти пересылает данные. Если разряд равен 0, то контроллер ПДП находится в режиме ожидания. D0 - информация о стандарте видеосигнала при- ставки: 1 - работа в режиме PAL; 0 - работа в режиме NTSC. В случае записи в регистр назначение отдельных разрядов при обращении к внутренним регистрам видеопроцессора и при обращении к видеопамяти, ОЗУ палитры и ОЗУ вертикальной прокрутки так- же различается. Во время доступа к внутренним регистрам ви- деопроцессора в старшем байте записываемого в регистр числа указывается номер внутреннего ре- гистра микропроцессора, а в младшем байте пере- даются данные, которые будут помещены в регистр: D15 - D13 - разряды, которые должны содер- жать двоичное число 100. D12 - D8 - номер внутреннего регистра видео- процессора. D7 - D0 - данные, записываемые в регистр. Запись в регистр двойного слова (32-разрядного числа) эквивалентна двум последовательным опе- рациям записи 16-разрядного слова, причем снача- ла сохраняются разряды D31 - D16 двойного сло- ва, а затем разряды D15 - D0. При доступе к видеопамяти, ОЗУ палитры или ОЗУ вертикальной прокрутки в регистр управления ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 85
Архитектура и принцип работы. Видеопроцессор помещается код, определяющий нужную область памяти, тип операции (чтение или запись), а также базовый адрес, начиная с которого разрешается до- ступ к информации. Для этого необходимо последовательно внести в регистр два 16-разрядных слова или одно двойное слово (в таком случае сначала сохраняются разря- ды D31 - D16, а затем D15 - DO). Структура слов, помещаемых в регистр управле- ния для доступа к видеопамяти, ОЗУ палитры и ОЗУ вертикальной прокрутки и назначение от- дельных разрядов показаны на рис. 3.10. 015__________________________________________________________________00 | IDO | ID1 |а1з|а12 | Л11 j А10 ] А9 j А8 | А7 | А6 | А5 | А4 I Лэ j Л2 | А! | АО | первое слово D15__________________________________________________________________DO I О | О I С j О | С | О j 0 | О | О j О 'роз | ID? | О | О |л15|А14| второе слово Рис. 3.10. Назначение разрядов слова, записываемого в регистр состояния видеопроцессора ID3 - ID0 - код режима доступа к видеопамяти. Возможны следующие значения: 0000 - чтение из видеопамяти; 0001 - запись в видеопамять; ООН - запись в ОЗУ палитры; 0100 - запись в ОЗУ вертикальной прокрутки: 0101 - чтение из ОЗУ вертикальной прокрутки; 1000 - чтение из ОЗУ палитры. А15 - АО - адрес, с которого начинаются опера- ции чтения или записи. Регистр счетчика развертки Адрес: C00008h. Тип: чтение. Назначение разрядов. Данный регистр представляет собой счетчик, ко- торый возвращает при чтении координаты точки, формируемой на экране в данный момент. В разря- дах D15 - D8 передается координата по вертикали (от 0 до 239), а в разрядах D7 - D0 -- координата но горизонтали (от 0 до 319). В чересстрочном режиме, когда на экране со- вмещаются две экранные страницы, координата по вертикали может изменяться в пределах от 0 до 479. В этом случае самый младший разряд коорди- наты не передается, а в разряде D8 находится до- полнительный (девятый) разряд координаты. Внутренние регистры видеопроцессора Все управление видеопроцессором осуществляется через 24 внутренних регистра, куда записываются коды, определяющие требуемые параметры изобра- жения и режимы работы. Из регистра состояния можно считывать инфор- мацию о текущем режиме работы. Внутренние регистры видеопроцессора доступ- ны только для записи, и обращаться к ним следует через регистр управления видеопроцессором, как было описано выше. Регистр i управления режимом работы Номер: 0. Назначение разрядов: DI - D5 - не используются. В этих разрядах дол- жен быть код 000. D4 - разрешение запроса на прерывание по фронту строчного синхроимпульса. Установка раз- ряда в 1 приводит к тому, что при генерации строч- ного синхроимпульса центральному процессору иг- ровой приставки посылается запрос на прерывание с приоритетом 4. Если разряд равен 0, то запрос на прерывание вырабатываться не будет. D3, D2 - не используются. В этих разрядах дол- жен быть код 01. D1 - разрешение доступа к счетчику развертки. Если разряд установлен, то при обращении к регис- тру счетчика развертки C00008h координаты фор- мируемой на экране точки недоступны (внутренний счетчик видеопроцессора остановлен). Чтобы внут- ренний счетчик передавал данные при чтении из регистра C00 0 08h, разряд должен равняться 0. D0 - разряд не используется и должен быть сброшен. Регистр 2 управления режимом работы Номер: 1. Назначение разрядов: D7 - разряд не используется и должен быть сброшен. D6 - разрешение работы видеопроцессора. Если разряд равен 0, то видеопроцессор не формирует изображение на экране телевизора. Для генерации картинки необходимо, чтобы разряд равнялся 1. D5 - разрешение запроса на прерывание по кад- ровому синхроимпульсу. Когда разряд установлен в 1, при формировании фронта кадрового синхро- импульса центральному процессору игровой при- ставки будет послан запрос на прерывание с приори- тетом 6. Установка разряда в 0 запрещает генерацию запроса на прерывание. D4 -- разрешение работы контроллера прямого доступа к памяти. Чтобы программа могла переда- вать данные с использованием контроллера ПДП, этот разряд необходимо установить в 1. Если раз- ряд сброшен, контроллер прямого доступа к памя- ти заблокирован. D3 - определение размера экрана по вертикали. В моделях системы NTSC разряд должен быть равен 86
Архитектура и принцип работы. Видеопроцессор О (именно такие модели наиболее распространены на территории России). Модели, вырабатывающие видеосигнал в системе PAL, могут формировать изображение размером 30 или 28 символьных строк по вертикали. Если этот разряд установлен, картинка будет содержать 30 строк (240 точек) по вертикали, а если сброшен - 28 строк (224 точки). D2 - разряд не используется и должен быть ра- вен 1. DI, D0 - разряды не используются и должны быть равны 0. Регистр базового адреса первой экранной страницы Номер: 2. Назначение разрядов. В регистр записываются три старших разряда (А15 - А13) адреса начала первой экранной стра- ницы в видеопамяти. D7, D6 - разряды не используются и должны быть равны 0. D5 - D3 - разряды А15 - А13 базового адреса первой экранной страницы. D2 - D0 - разряды не используются и должны быть равны 0. Таким образом, если вы хотите, чтобы первая эк- ранная страница начиналась в видеопамяти с адре- са 800Oh, в этот регистр необходимо поместить число 2 Oh. Регистр базового адреса окна Номер: 3. Назначение разрядов. В регистр записываются пять старших разрядов (А15 - АН) адреса начала области с изображением окна в видеопамяти. D7, D6 - разряды не используются и должны быть равны 0. D5 - D2 - разряды А15 - А12 базового адреса окна. D1 - если видеопроцессор формирует изображе- ние размером 40 символов по горизонтали, в этом разряде должен быть 0. Если же видеопроцессор работает в режиме 32 символа по горизонтали, сюда записывается разряд АН базового адреса. D0 - разряд не используется и должен быть равен 0. Таким образом, если вы хотите, чтобы область окна в видеопамяти начиналась с адреса АО 00h, в этот ре- гистр необходимо поместить число 28h. Регистр базового адреса второй экранной страницы Номер: 4. Назначение разрядов. В регистр записываются три старших разряда (А15 - А13) адреса начала второй экранной стра- ницы в видеопамяти. D7 - D3 - разряды не используются и должны быть равны 0. D2 - D0 - разряды А15 - А13 базового адреса второй экранной страницы. Таким образом, если вы хотите, чтобы первая эк- ранная страница начиналась в видеопамяти с адре- са COOOh, в этот регистр необходимо поместить число 06h. Регистр базового адреса области атрибутов спрайтов Номер: 5. Назначение разрядов. В регистр записываются семь старших разрядов (А15 - А9) адреса начала области атрибутов спрай- тов в видеопамяти. D7 - разряд не используется и должен быть ра- вен 0. D6 — D1 - разряды А15 - А10 базового адреса области атрибутов спрайтов. D0 - если видеопроцессор формирует изображе- ние размером 40 символов по горизонтали, то раз- ряд должен быть равен 0. Если же видеопроцессор работает в режиме 32 символа по горизонтали, сюда записывается разряд А9 базового адреса. Таким образом, если вы хотите, чтобы область атрибутов спрайтов располагалась в видеопамяти с адреса E800h, в этот регистр необходимо помес- тить число 7 4h. Регистр 6 Номер: 6. Назначение разрядов. Регистр не используется. Регистр цвета фона Номер: 7. Назначение разрядов. Данный регистр определяет цвет, в который бу- дет окрашен фон экрана (самый нижний слой изоб- ражения). D7, D6 - разряды не используются и должны быть равны 0. D5, D4 - номер палитры (0-3). D3 - D0 - номер цвета в палитре (0-15). Регистр 8 Номер: 8. Назначение разрядов. Регистр не используется. Регистр 9 Номер: 9. Назначение разрядов. Регистр не используется. ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 87
Архитектура и принцип работы. Видеопроцессор Регистр периода запроса на прерывание по строч- ному синхроимпульсу Номер: 10. Назначение разрядов. Записываемое в регистр 8-разрядное значение определяет периодичность запроса на прерывание, посылаемого видеопроцессором по фронту строч- ного синхроимпульса. Если сюда помещено значе- ние 0 Oh, запрос на прерывание будет генериро- ваться после формирования каждой строки; при значении Olh - после каждой второй строки; при 02h - после каждой третьей, и т.д. Регистр 3 управления режимом работы Номер: И. Назначение разрядов: D7 - D4 - разряды не используются и должны быть равны 0. D3 - разрешение запроса на прерывание от внешнего устройства. Разряд необходимо устано- вить в 1, чтобы при поступлении сигнала от внеш- него устройства центральному процессору игровой приставки был послан запрос на прерывание с при- оритетом 2. Если разряд сброшен, запрос на преры- вание формироваться не будет. D2 — режим вертикальной прокрутки экрана. Если разряд равен 0, по вертикали прокручивает- ся экран целиком; в противном случае осущест- вляется независимая прокрутка для каждых двух столбцов (16 точек) экранной страницы. D1 - D0 - режим горизонтальной прокрутки эк- рана: 00 - прокручивается экран целиком; 01 - значение не используется; 10 — прокрутка производится независимо для каждой символьной строки (8 точек) эк- ранной страницы; 11 - прокрутка реализуется независимо для каждой строки экрана. Регистр 4 управления режимом работы Номер: 12. Назначение разрядов: D7 - разряд обязательно должен быть равен раз- ряду D0. D6 - D4 - разряды не используются и должны быть равны 0. D3 - разрешение на формирование тени. Уста- новите разряд в 1, чтобы на фоновой картинке появилась тень от спрайтов. Если разряд равен 0, то тень отображаться не будет. D2 - D1 - включение чересстрочного режима: 00 - обычный режим работы; 01 - чересстрочный режим; 10 - код не используется; 11 - чересстрочный режим с двойным разре- шением. D0 - размер экрана по горизонтали: 0-32 символа (256 точек); 1-40 символов (320 точек). Регистр базового адреса области параметров го- ризонтальной прокрутки Номер: 13. Назначение разрядов. В регистр записываются шесть старших разря- дов (А15 - А10) адреса начала области с данными для горизонтальной прокрутки экрана в видеопа- мяти. D7, D6 - разряды не используются и должны быть равны 0. D5 - D0 - разряды А15 - А10 области данных горизонтальной прокрутки. Регистр 14 Номер: 14. Назначение разрядов. Регистр не используется. Регистр увеличения адреса Номер: 15. Назначение разрядов. В данный регистр записывается 8-разрядное зна- чение, которое видеопроцессор автоматически при- бавляет к текущему адресу после обращения к ви- деопамяти. Для последовательного доступа к видеопамяти сюда помещается число 2, поскольку центральный процессор передает 16-разрядное значение, кото- рое преобразуется видеопроцессором в два 8-раз- рядных. Чтобы прочитать содержимое какой-либо обла- сти видеопамяти, необходимо выполнить следую- щие действия: • записать в регистр управления C00004h сло- во с кодом, определяющим тип выполняемой операции, и адрес, начиная с которого будет выполняться чтение; • прочитать значение из видеопамяти, обратив- шись к регистру данных COOOOOh; • после обращения к регистру данных видеопро- цессор автоматически прибавит к установлен- ному адресу значение из регистра увеличения адреса; • при следующей операции чтения из регистра данных COOOOOh будет получено очередное значение из видеопамяти. 88
Архитектура и принцип работы. Видеопроцессор Регистр размера области горизонтальной про- крутки Номер: 16. Назначение разрядов. Код, записываемый в данный регистр, определя- ет размер фрагмента изображения, который будет смещаться при использовании аппаратной прокрут- ки экрана. Иногда этот регистр называют регистром размера экранной страницы. D7, D6 - разряды не используются и должны быть равны 0. D5, D4 - определение размера прокручиваемой области по вертикали: 00 - 32 символа (256 точек); 01-64 символа (512 точек); 10 - код не используется; 11 - 128 символов (1024 точки). D3, D2 - разряды не используются и должны быть равны 0. DI, D0 - установка размера прокручиваемой об- ласти по вертикали: 00 - 32 символа (256 точек); 01 - 64 символа (512 точек); 10 - код не используется; 11 - 128 символов (1024 точки). Регистр горизонтальной координаты окна Номер: 17. Назначение разрядов: D7 - если разряд сброшен, окно располагается сле- ва от базовой точки, в противном случае - справа. D6, D5 - разряды не используются и должны быть равны 0. D4 - D0 - определение координаты базовой точ- ки окна по горизонтали: 00000 - левая граница экрана; 00001- - на один символ (8 точек) вправо; 00010 - на два символа вправо; и т.д. Процедура совмещения изображения экранной страницы и окна поясняется на рис. 3.11. Регистр вертикальной координаты окна Номер: 18. Назначение разрядов: D7 — если разряд равен 0, окно располагается выше базовой точки, если равен 1 — ниже. D6, D5 - разряды не используются и должны быть равны 0. D4 - D0 - установка координаты базовой точки окна по вертикали: ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Окно слева и вверху от базовой точки R17 = 02h. R18 = 10h Окно справа и внизу от базовой точки R17 = 82h. R18 = 90h Окно справа и Вверху от базовой точки R17 = 82h, R18 ~ 10h Первая экранная страница Окно Окно слева и Внизу ат базовой точки R17 == 02h, R18 = 90h R17, R18 — Внутренние регистры Видеопроцессора Рис. 3.11. Установка положения окна на экранной странице игровой приставки SEGA MEGA DRIVE -321 89
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 00000 - верхняя граница экрана; 00001 - на один символ (8 точек) вниз; 00010 - иа два символа вниз; и т.д. Регистры длины блока контроллера ПДП Номер: 19, 20. Назначение разрядов. В эти два регистра записывается 16-разрядное число, определяющее длину блока, который будет перемещен с помощью контроллера ПДП. Млад- шие восемь разрядов записываются в регистр 18, а старшие - в регистр 19. Регистры адреса блока контроллера ПДП Номер: 21, 22, 23. Назначение разрядов. В эти три регистра записывается адрес начала блока данных, который будет копироваться с помо- щью контроллера ПДП. В регистр 21 записываются разряды А7 - АО ад- реса, в регистр 22 - А15 - А8, в регистр 23 - А22 - А16 адреса и код, определяющий режим работы контроллера ПДП. Рассмотрим назначение отдельных разрядов ре- гистра более подробно: D7, D6 - определение типа выполняемой опера- ции. Если разряд D7 равен 0, го блок данных из па- мяти центрального процессора передается в видео- память. В этом случае в разряд D6 записывается разряд А23 адреса источника данных. Пересылка информации внутри видеопамяти осуществляется, если разряд D7 равен 1, причем режим зависит от состояния разряда D6: если он равен 0, то видео- память заполняется посредством записи кода из самой первой ячейки во все ячейки блока; если ра- вен 1, то фрагмент копируется внутри видеопа- мяти. D5 - D0 - разряды А22 - A1G адреса источника данных. Контроллер прямого доступа к памяти начинает пересылку данных сразу после записи в регистр 23. Для нормальной работы контроллера необходи- мо, чтобы команда записи в регистр 23 находилась во внутреннем ОЗУ приставки, расположенном по адресам FFOOOOh - FFFFFFh. 3.2.5. Звуковой процессор Звуковой процессор приставки SEGA MEGA DRIVE служит для формирования звукового со- провождения игры, освобождая тем самым ресур- сы центрального процессора для других задач. Ниже приводится краткое описание архитектуры звукового процессора и его регистров. Методы вос- произведения музыки и спецэффектов с помощью звукового процессора игровой приставки представ- ляют собой отдельную тему и в данной публикации не рассматриваются. Для читателей, которые инте- ресуются этими вопросами, в конце книги приведе- ны ссылки на сайты Internet, содержащие необхо- димые материалы. Как видно из общей структурной схемы игровой приставки SEGA MEGA DRIVE, воспроизведени- ем звука в ней занимается отдельный мини-ком- пьютер, состоящий из микропроцессора Z80 (со- процессор), ОЗУ объемом 8 Кб, программируемого звукового генератора и синтезатора. Поэтому мы посвятим отдельные разделы сопроцессору (цен- тральному процессору), распределению адресного пространства, музыкальному синтезатору и про- граммируемому звуковому генератору. Архитектура сопроцессора игровой приставки В качестве сопроцессора в приставке SEGA MEGA DRIVE, применяется стандартный микропроцессор Рис. 3.12. Структурная схема микропроцессора Z80 90
Архитектура и принцип работы. Звуковой процессор Z80, работающий на тактовой частоте 4 МГц. На сегодняшний день он является наиболее распро- страненным 8-разрядным процессором и отличает- ся высокой производительностью, развитой систе- мой команд и простотой использования. Структурная схема микропроцессора Z80 приве- дена на рис. 3.12. Как видно из рис. 3.12, микропроцессор состо- ит из арифметико-логического устройства, блока управления шиной данных, блока регистров, блока управления шиной адреса и устройства управления с дешифратором команд. Все блоки микропроцес- сора связаны внутренней шиной данных. Для обращения микропроцессора к памяти пред- назначена 16-разрядная шина адреса. Таким обра- зом, сопроцессор игровой приставки может непо- средственно обращаться к 64 Кб памяти с адресами от 000 Oh до FFFFh. Обмен информацией осущест- вляется через 8-разрядиую шину данных. Регистры сопроцессора Сопроцессор игровой приставки SEGA MEGA DRIVE имеет 22 внутренних регистра, из них 18 ре- гистров 8-разрядные, а 4 - 16-разрядные. При этом некоторые 8-разрядные регистры способны объ- единяться в регистровые пары, что позволяет про- изводить операции с 16-разрядиыми числами. Аккумулятор является наиболее часто задейству- емым регистром процессора. Он предназначен для обмена данными с памятью и портами ввода/выво- да, а также для выполнения любой арифметичес- кой или логической операции. В программах, на- писанных на языке ассемблера, этот 8-разрядный регистр обозначается буквой «А». Регистры общего назначения. Для хранения промежуточных данных разрешается использовать шесть 8-разрядных регистров процессора, обозна- чаемых буквами «В», «С», «D», «Е», «Н» и «Ь». Для обработки 16-разрядных значений эти регис- тры могут объединяться в три регистровые пары - ВС, DE, IIL. Регистр состояния процессора F. Каждый бит этого регистра является флагом и изменяет свое значение в зависимости от результата выполненной команды. Из восьми разрядов регистра состояния исполь- зуются только шесть, их назначение описано ниже. Значение разрядов D5 и D3 регистра состояния со- впадает с разрядами Г*5 и D3 в результате послед- ней выполненной арифметической или логической команды микропроцессора. D7 (S) - флаг вычитания. Установлен в 1, если последней выполненной арифметической опера- цией была команда вычитания, и сброшен, если последней была команда сложения. Используется при работе с двоично-десятичными числами. D6 (Z) - флаг нулевого результата; устанавливает- ся в 1, если результат выполнения операции равен 0. D4 (Н) - флаг вспомогательного переноса; уста- навливается в 1, если при выполнении арифмети- ческой операции произошел перенос из разряда D3 в разряд D4. Применяется внутренними схемами процессора при работе с числами в двоично-деся- тичном коде. D2 (P/V) - флаг четности/переполнения. В ло- гических операциях устанавливается в 1, если в ре- зультате получено четное число установленных в 1 разрядов (не путать с четным числом!). В арифме- тических операциях показывает переполнение, то есть индицирует перенос в самый старший разряд результата (обычно D7). DI (N) - флаг отрицательного результата. Со- впадает с самым старшим разрядом (D7 или D15) результата выполненной команды. DO (С) - флаг переноса. Разряд С регистра со- стояния процессора становится равным 1, если ре- зультат сложения больше 255 (OFFh) или если ре- зультат вычитания меньше 0. Другими словами, этот флаг совпадает с переносом из самого старшего раз- ряда результата. Обратите внимание; процессор Z80 имеет два на- бора 8-разрядных регистров. Набор, с которым про- цессор работает в данный момент, называется актив- ным. Другой набор регистров при этом недоступен для программы, но все записанные в него значения сохраняются. Программа может переключать набо- ры регистров с помощью специальных команд. Регистр вектора прерываний I. Регистр исполь- зуется при обслуживании запроса на прерывание. Более подробную информацию об этом регистре можно найти в литературе, посвященной микро- процессору Z80. Регистр регенерации памяти. Регистр предна- значен для регенерации динамического ОЗУ. Каж- дый раз, когда микропроцессор извлекает из памя- ти код очередной команды, семь младших разрядов данного регистра автомагически увеличиваются на 1; старший разряд регистра не меняется. Индексные регистры. Особенностью процессо- ра Z80 является наличие индексного метода адре- сации, когда в команде указывается не непосред- ственный адрес данных в памяти, а 8-разрядное смещение в пределах от -128 до 127 относительно базового адреса, хранящегося в 16-разрядном ин- дексном регистре IX или IY. Указатель стека. Данный 16-разрядный регистр задает первую свободную ячейку в стеке. В процес- соре Z80 стек может располагаться в любом месте ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 91
Архитектура и принцип работы. Звуковой процессор памяти системы, хотя обычно его размещают в верх- них адресах ОЗУ. Стек растет вниз, то есть от адре- са, содержащегося в регистре SP, к адресу OOOOh. Счетчик команд. Это еще один 16-разрядный регистр процессора. Его назначение - указывать адрес команды, которая должна быть выполнена. Команды перехода позволяют изменить содержимое регистра и определить нужную последовательность выполнения команд, находящихся в памяти. Способы адресации В коде команды следует указать местоположение необходимых для работы процессора данных при помощи различных методов адресации. Ниже по- дробно рассмотрены методы адресации микропро- цессора Z80. Регистровая адресация. Операнды находятся в регистрах центрального процессора. Названия используемых регистров задаются непосредствен- но в команде. Неявная адресация. Расположение операндов для команд строго фиксировано, дополнительных указаний не требуется. Непосредственная адресация. 8-разрядный операнд хранится в памяти сразу за кодом коман- ды, то есть по адресу РС+1. Косвенная адресация. В команде определяется адрес расположения операнда в памяти. Регистровая косвенная адресация. Адрес опе- ранда содержится в одной из регистровых пар про- цессора. Индексная адресация. В команде вместо адреса указывается 8-разрядное смещение в диапазоне от -128 до 127 относительно базового адреса, храня- щегося в индексном регистре IX или IY. Побитовая адресация. В код команды помеща- ется непосредственный разряд операнда, с которым и производится необходимое действие. Данный ме- тод используют три команды: BIT, SET и RES. Относительная адресация. Этот метод предна- значен для команд перехода. Во втором байте ко- манды задается 8-разрядное смещение в диапазоне от -128 до 127, которое прибавляется к текущему значению счетчика команд для получения адреса следующей выполняемой команды. Система команд Сопроцессор игровой приставки SEGA MEGA DRI- VE (микропроцессор Z80) может выполнять 158 различных команд. Они делятся на следующие функциональные группы: • команды пересылки данных: LD, EX, LDD, LDI; • команды арифметических операций: ADD, ADC, SUB, SBC, DAA, INC, DEC, CP; • команды логических операций: AND, OR, XOR, CPL; • команды работы с отдельными разрядами: BIT, SET, RES; • команды сдвига: RLCA, RRCA, RLA, RRA, SWAP, RLC, RL, RRC, RR, SLA, SRA, SRL; • команды перехода: JR, JP; • команды работы с подпрограммами: CALL, RST, RET, RETI; • команды управления процессором: NOP, HALT, STOP, DI, El, IM, CCF, SCF; • команды работы co стеком: PUSH, POP. Полная информация о системе команд микро- процессора Z80, используемого в игровой пристав- ке SEGA MEGA DRIVE, приведена в приложе- нии 1. Распределение адресного пространства Распределение адресного пространства сопроцес- сора показано на рис. 3.13. Адресное пространство сопроцессора игровой приставки является частью адресного простран- ства центрального процессора. Таким образом, цен- тральный процессор может приостановить рабо- ту сопроцессора и свободно обращаться к любым ячейкам памяти и регистрам, находящимся в ад- ресном пространстве сопроцессора. Соответствие адресов центрального процессора и сопроцессора очень простое: адресу OOOOh сопроцессора сопо- ставлен адрес АО 0 0 0Oh центрального процессора, адресу OOOlh - AOOOOlh и так далее до адреса FFFFh, которому сопоставлен адрес АОFFFFh. Рассмотрим назначение основных блоков ад- ресного пространства сопроцессора. В диапазоне OOOOh - IFFFh располагается ОЗУ сопроцессора объемом 8 Кб. Здесь хранятся собственные данные FFFFh 8000h 7F11h 6000h 4003h 4000h 2000h Бонк для доступе к помяты центрального процессора Не используется Регистр прог ро м м и руе м ого звукового генератора Не используется Регистр номера банка памяти Не используется Регистра музакольного синтезатора Не используется ОЗУ сопроцессоре Рис. 3.13. Адресное пространство сопроцессора игровой приставки SEGA, MEGA, DRIVE 92
Архитектура и принцип работы. Звуковой процессор сопроцессора, а также программа, которая загружа- ется в память центральным процессором приставки для ее последующего выполнения сопроцессором. По адресам 4000h - 4003h находятся четыре регистра, через которые программа управляет му- зыкальным синтезатором игровой приставки. Бо- лее подробно назначение этих регистров описано ниже. По адресу 6 0 0 Oh находится регистр переключения страниц памяти. Сопроцессор Z80 может обращаться ко всему адресному пространству центрального про- цессора, используя механизм переключения банков памяти. Для этого вся память центрального процес- сора разбивается на блоки по 32 Кб, один из которых становится доступным сопроцессору при обраще- нии по адресам 800Oh - FFFFh. Для обращения к какой-либо ячейке адресного пространства цен- трального процессора необходимо сгенерировать 24-разрядный адрес. Младшие 15 разрядов форми- рует сопроцессор на шине адреса, старшие девять берутся из регистра переключения страниц памяти. Чтобы задать эти девять разрядов, определяющие подсоединенный банк, сопроцессору необходимо девять раз выполнить запись в регистр переключе- ния страниц памяти. При записи значение имеет только младший разряд D0, где последовательно передаются девять старших разрядов адреса, с А15 до А23. Например, при обращении по адресам 8000h - FFFFh сопроцессору будет доступна стра- ница памяти основного процессора, расположенная в диапазоне 03 800Oh - 03FFFFh, если три раза за- писать в регистр переключения страниц памяти число, у которого разряд D0 равен 1, а затем еще шесть раз — число, у которого разряд D0 равен 0. Этого можно добиться, выполнив следующую про- грамму: LD HL,6000Н ; Задание адреса ; регистра. LD А, 1 ; DO = 1. LD (HL),А ; А15 = 1. LD (HL), А ; А16 = 1. LD (HL),А ; А17 = 1. LD А,0 ; DO = 0. LD (HL),А ; А18 = 0. LD (HL),А ; А19 = 0. LD (HL),А ; А20 = 0. LD (HL),А ; А21 = 0. LD (HL),А ; А22 = 0. LD (HL),А ; А23 = 0. Через регистр с адресом 7fllh сопроцессор управляет программируемым звуковым генератором приставки. Использование этого регистра рассмат- ривается в соответствующем разделе. Последние 32 Кб памяти сопроцессора занимает переключаемый банк, через который сопроцессор обращается к адресному пространству центрально- го процессора игровой приставки, как было описа- но выше. Музыкальный синтезатор В приставке SEGA MEGA DRIVE применяется микросхема музыкального синтезатора Yamaha 2612. Она является усовершенствованным вариан- том микросхемы Yamaha 2151, используемой в иг- ровых автоматах SEGA и в некоторых электронных музыкальных инструментах. Основные параметры микросхемы Yamaha 2612 следующие: • шесть независимых каналов звукового сопро- вождения; • 8-разрядный цифровой аудиоканал, замещаю- щий один из аналоговых каналов; • стереофонический выход сигнала звукового сопровождения; • низкочастотный генератор, предназначенный для формирования различных эффектов; • два таймера. Рассмотрим более подробно назначение отдель- ных модулей музыкального синтезатора. Для каждого из шести каналов звукового сопро- вождения задается опорная частота сигнала и ука- зываются параметры, определяющие процесс пре- образования опорной частоты в сложный выходной аудиосигнал. Процесс преобразования зависит от четырех параметров, называемых операторами, ко- торые определяют модуляцию опорной частоты, изменение огибающей и другие характеристики звука. Эти четыре оператора затем объединяются в алгоритмы, которые и задают форму выходного сигнала. Шесть аудиоканалов разделены на две группы: в первую входят каналы 0-3, а во вторую - каналы 4-6. Цифровой канал звукового сопровождения представляет собой 8-разрядный ЦАП, преобразу- ющий данные в напряжение на выходе; наиболее часто он применяется для воспроизведения речи. Если программа использует данный канал, то он будет подключен вместо аналогового с номером 6. Выходной сигнал любого аудиоканала разрешает- ся подать на выход левого или правого канала или на оба выхода вместе, что позволяет добиться сте- реофонического звучания. Следует отметить, что стереофонический сигнал снимается только с разъ- ема для наушников. На линейный выход звукового сигнала и на вход модулятора поступает монофо- нический аудиосигнал. Низкочастотный генератор дает возможность плавно изменять амплитуду или частоту выходного 93
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE сигнала какого-либо канала для получения различ- ных эффектов. Путем записи информации во внут- ренние регистры микросхемы музыкального синтеза- тора для каждого канала допустимо задать степень влияния сигнала низкочастотного генератора на вы- ходной звуковой сигнал. Синхронизировать программу с произвольными временными интервалами позволяют два таймера. Однако существует ограничение: по истечении за- данного промежутка времени они не генерируют запрос на прерывание, поэтому, чтобы удостове- риться в окончании заданного периода, программе нужно выполнять непрерывный опрос регистров таймера. В адресном пространстве сопроцессора микро- схема музыкального синтезатора занимает адреса 4000h, 4001h, 4002h и 4003h. Кратко опишем на- значение этих регистров. Музыкальный синтезатор игровой приставки SEGA MEGA DRIVE имеет более 150 внутренних регистров. Для доступа к какому-либо регистру требуется сначала записать его номер по адресу 4000b для каналов 0 3 или по адресу 4002b для каналов 4-6. Потом необходимые данные помеща- ются по адресу 4001b для каналов 0-3 или по ад- ресу 4003И для каналов 4-6. Прежде чем выполнять запись, надо прочитать слово состояния микросхемы синтезатора и прове- рить состояние разряда D7. Если разряд установ- лен в 1, то микросхема занята и не может прини- мать данные. Слово состояния располагается по адресу 4000h. Большое количество внутренних регистров мик- росхемы музыкального синтезатора не позволяет рассмотреть их в рамках данной книги. Программируемый звуковой генератор Программируемый звуковой генератор является второй микросхемой, которая используется в игро- вой приставке SEGA MEGA DRIVE для формиро- вания звукового сопровождения. Генератор позво- ляет получать аудиосигналы с заданной частотой по трем независимым каналам, а по одному каналу подавать сигнал шума. Основой каждого канала является программиру- емый делитель частоты. На вход делителя прихо- дит опорная частота, а с выхода снимается сигнал, частота которого зависит от значения, записанного в регистры микросхемы. Далее выходной сигнал че- рез регулятор громкости поступает на вход оконеч- ного усилителя, формирующего выходной сигнал аудиоканала. В адресном пространстве сопроцессора игровой приставки данная микросхема занимает один адрес (7Fllh) и один порт ввода/вывода с адресом 7Fh. Принципы ее работы очень похожи на микросхему музыкального синтезатора. В порт ввода/вывода помещается 8-разрядное значение, содержащее код нужного внутреннего регистра микросхемы и запи- сываемую туда информацию. Затем в тот же самый порт можно занести дополнительные данные, кото- рые будут переданы в регистр. Всего в микросхеме звукового генератора есть восемь внутренних регистров - по два регистра для каждого аудиоканала. Для обращения к ним в порт ввода/вывода с адресом 7 Fh должен быть записан байт со следующим назначением разрядов: D7 - значение разряда должно быть равно 1. D6 - D4 - определение номера регистра, в кото- рый передаются данные: 000 - регистр частоты канала 1; 001 - регистр громкости канала 1; 010 - регистр частоты канала 2; 011 — регистр громкости канала 2; 100 - регистр частоты канала 3; 101 - регистр громкости канала 3; 110 - регистр управления каналом шума; 111 - регистр гром кости канала шума. D3 - D0 - данные, записываемые в регистр. Рассмотрим более подробно работу с регистрами микросхемы генератора звуковых сигналов. Регистры частоты Задать выходную частоту сигнала для любого из трех звуковых каналов микросхемы позволяет ин- формация в регистрах частоты. Частота определя- ется 10-разрядным значением, так что для записи в этот регистр программа должна выполнить два обращения к порту 7Fh. При первом обращении выбирается необходимый регистр, а в разрядах D3 - D0 передаются младшие четыре бита кода час- тоты. При следующем обращении в порт записыва- ется число, у которого разряды D7 и D6 сброшены, а в разрядах D5 - D0 передаются старшие шесть бит кода частоты. Регистры громкости Амплитуда выходного сигнала соответствующего канала звукового генератора программируется с по- мощью названных регистров. Всего существует 16 уровней громкости, которые определяются кодом в разрядах D3 - D0 байта, записываемого в регистр с адресом 7Fh. Обратите внимание, что коду 0000 соответствует максимальная громкость выходного сигнала, а коду 1111- минимальная. Регистр управления каналом шума При программировании канала, формирующего сигнал шума, задавать 10-разрядное значение, опре- деляющее частоту сигнала, не требуется. Вместо 94
Архитектура и принцип работы. Структура картриджа этого записывается байт, у которого в разрядах D7 - D4 имеется код 1110; назначение остальных разря- дов следующее: D3 - разряд не используется и должен быть равен 0. D2 - определение типа генерируемого шума: 0 - периодический (подобно низкочастотно- му генератору); 1 - белый шум. DI, D0 - установка опорной частоты генератора сигнала шума: 00 — частота внешнего генератора, деленная на 2; 01 - частота внешнего генератора, деленная па 4; 10 - частота внешнего генератора, деленная на 8; 11 - выходная частота канала 3. Под частотой внешнего генератора здесь пони- мается частота сигнала на входе тактовых импуль- сов микросхемы генератора звуковых сигналов. II музыкальный синтезатор, и программируе- мый звуковой генератор являются микросхемами общего применения, поэтому их описание можно найти в сети Internet, Полный текст программы для работы со звуковыми процессорами игровой при- ставки SEGA MEGA DRIVE приведен в приложе- нии 2 и полезен при знакомстве с основными осо- бенностями написания программного обеспечения для этой игровой системы. Взаимодействие центрального процессора и сопроцессора Как уже отмечалось, адресное пространство сопро- цессора игровой приставки SEGA MEGA DRIVE является частью адресного пространства централь- ного процессора. Это позволяет центральному процессору обращаться как к ОЗУ сопроцессора, записывая туда программу, так и к регистрам му- зыкального синтезатора и программируемого зву- кового генератора. Центральный процессор игровой приставки SEGA также осуществляет управление сопроцессором с помощью двух регистров с адресами AlllOOh nA11200h. Регистр захвата шин сопроцессора Адрес: AlllOOh. Tun: запись/чтение. Назначение разрядов. Запись. Для того чтобы послать сопроцессору запрос на захват шип, центральный процессор должен запи- сать в регистр 16-разрядное слово, где разряд D8 равен 1. Чтение. Если в 16-разрядном слове, прочитанном из ре- гистра, разряд D8 установлен в 1, сопроцессор иг- ровой приставки использует собственную намять и центральный процессор не вправе к пей обращать- ся. Если же разряд D8 сброшен, значит, сопроцессор освободил шины н центральный процессор может работать с его памятью. Регистр сигнала сброса сопроцессора Адрес: A11200h. Тип: запись. Назначение разрядов. Если записать в регистр число FFh, то сопроцес- сору игровой приставки будет послан сигнал сбро- са, после чего он начнет выполнение программы, расположенной в ОЗУ с адреса 000Oh. Итак, основные принципы построения программ, которые формируют звуковое сопровождение при помощи функций, предоставляемых сопроцессором игровой приставки SEGA MEGA DRIVE, можно сформулировать следующим образом: • основная программа должна быть написана для процессора М68000, а фрагменты, отвеча- ющие за воспроизведение звукового сопро- вождения, - для процессора Z80; • центральный процессор посылает запрос на захват шин сопроцессора, поместив код 010 Oh в регистр AlllOOh; • центральный процессор копирует программу, отвечающую за воспроизведение звука, из сво- ей памяти в ОЗУ сопроцессора после того, как разряд D8 в слове, считанном из регистра AlllOOh, будет установлен в 0; • сопроцессор начнет выполнение имеющейся в ОЗУ программы с адреса 0000h после запи- си числа FFh в регистр A11200hn0000hBре- гистр AlllOOh. Приведенная в приложении 2 программа помо- жет понять основные принципы работы со звуко- вым процессором игровой приставки SEGA MEGA DRIVE. 3.2.6. Структура картриджа В приставке SEGA MEGA DRIVE структура кар- триджа проще, чем в других игровых системах, по- скольку здесь не применяются специализирован- ные контроллеры страниц памяти. Часто внутри картриджа располагается только одна или две мик- росхемы ПЗУ. Обязательной частью любого картриджа являет- ся микросхема ПЗУ, содержащая коды программы. В некоторых картриджах также имеется внутреннее ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 95
Архитектура и принцип работы. Структура картриджа ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE ОЗУ, расширяющее память игровой приставки. Иногда микросхема ОЗУ получает питание от ли- тиевой батарейки, которая размещается внутри картриджа, и применяется для сохранения игровой ситуации на время выключения устройства. ПЗУ с программным обеспечением занимает адресное пространство центрального процессора в диапазоне OOOOOOh - 3FFFFFh. Если объем ПЗУ превышает 4 Мб, требуется установка про- стейшего дешифратора адреса из микросхем серии SN74, главной задачей которого является пере- ключение страниц ПЗУ, используемых централь- ным процессором. Если в картридже есть ОЗУ, оно доступно для центрального процессора в пределах общего адрес- ного пространства. Адреса подключения ОЗУ не являются стандартными и определяются фирмой- изготовителем устройства. В начальных адресах ПЗУ содержится несколь- ко структур данных, расположение которых строго фиксировано. Ниже эти блоки, а также информа- ция, которая должна в них храниться, рассмотрены детально. Точка входа при сбросе. По адресу OOOOOOh за- писывается значение, которое при перезапуске сис- темы будет скопировано в указатель системного сте- ка центрального процессора, а по адресу 000004h- адрес, с которого начнется выполнение программы. При перезапуске системы данный адрес копируется в счетчик команд. Точки входа процедур обработки исключений. В области 000008h - OOOOFFh размещаются ад- реса передачи управления в случае возникновения различных исключительных ситуаций. При ана- лизе программного обеспечения наибольший ин- терес представляют адреса 0 0 0 0 7 Oh и 0 00 07 6h - это адреса начала процедур обработки запросов на прерывание по строчному и по кадровому синхро- импульсу соответственно. Следом располагается блок описания картрид- жа. Он обязательно должен присутствовать, при- чем должен быть правильно заполненным. Ошиб- ка здесь может привести к отказу картриджа на некоторых моделях приставок. Блок занимает адре- са 0 0 010 Oh - OOOlFFh. Ниже подробно рассматри- вается назначение отдельных байтов. OOOlOOh- OOOllFh. Здесь содержится надпись, информирующая об авторских правах на игровую систему: SEGA MEGA DRIVE (С) SEGA 1988.JUL 0 0 012 Oh - 00014Fh. Название игры для пристав- ки версии DOMESTIC, записанное заглавными английскими буквами в кодировке ASCII. Свобод- ные ячейки заполняются кодом 2 Oh. 000150h - 00 017Fh. Название игры для при- ставки версии OVERSEAS, записанное заглавными английскими буквами в кодировке ASCII. Свобод- ные ячейки заполняются кодом 2Oh. Обычно это поле идентично предыдущему. 000180h-00018Dh. Строка в коде ASCII следую- щего формата: GM ХХХХХХХ-ХХ, где ХХХХХХХ- XX - это код, определяющий тип картриджа, код производителя программы и номер версии. 00018Eh, 00018Fh. Контрольная сумма про- граммы, записанной в ПЗУ картриджа. 000190h - 00019Fh. Код доступных программе устройств ввода/вывода - текстовая строка, каж- дый символ которой определяет тип периферийно- го устройства: джойстик для SEGA MASTER SYSTEM - D; джойстик для SEGA MEGA DRIVE - J; клавиатура - К; контроллер последовательного интерфейса - R; принтер — Р; контроллер дисковода - F; привод CD-ROM - С. OOOlAOh - 0 001A7h. Два двойных слова, опре- деляющие, по каким адресам располагается ПЗУ картриджа. Первое из этих слов всегда равно OOOOOOh, а второе соответствует адресу последней ячейки ПЗУ. 0001A8h - OOOlAFh. Размер используемого ОЗУ. По этим адресам всегда записываются два двойных слова: FFOOOOh и FFFFFFh. OOOlBOh- OOOlBBh. Строка кодов, определяю- щая параметры установленного в картридже ОЗУ. Если ОЗУ не установлено, эта область памяти за- полняется кодом 2 Oh. Рассмотрим значения адре- сов подробнее: OOOlBOh - ASCII-код буквы «R»; OOOlBlh - ASCII-код буквы «А»; 0001B2h - параметры установленного ОЗУ: D7 — разряд не используется и равен 1. D6 - разряд установлен в 1, если информа- ция в ОЗУ сохраняется после отключения питания. D5 - разряд не используется и равен 1. D4, D3 - способ доступа к ОЗУ: 00 - ОЗУ доступно при обращении по чет- ным и нечетным адресам; 01 - код не используется; 10 - ОЗУ доступно только по нечетным ад- ресам; 11 - ОЗУ доступно только по четным адресам. D2 - D0 - разряды не используются и равны 0. 0001B3h - байт, содержащий код 2Oh. 96
Архитектура и принцип работы. Организация ввода/вывода 0001B4h - двойное слово, адрес начала области ОЗУ картриджа в адресном пространстве цен- трального процессора. 0001B8h - двойное слово, адрес области конца ОЗУ картриджа в адресном пространстве цен- трального процессора. OOOIBCh - 0001C7h. Строка, определяющая па- раметры установленного модема. Если модем для работы картриджа не требуется, эта область памя- ти заполняется кодом 2 Oh. 0001C8h - OOOlEFh. Данная область памяти не используется и заполняется кодом 2 Oh. OOOlFOh. Код страны, для которой разработан картридж: U - США, J - Япония, Е - Европа. OOOlFlh - OOOlFFh. Эта область памяти не ис- пользуется и заполняется кодом 2 Oh. Чтобы понять принципы организации области данных, расположенной в начале ПЗУ картриджа, приведем пример ее описания на языке ассембле- ра. Помните, что количество пробелов в текстовых строках является значимой величиной. dc.b "SEGA GENESIS (С)SEGA 1996 MAY" dc.b "SAMPLE SOUND PROGRAM dc.b "SAMPLE SOUND PROGRAM dc.b "GM 00000000-00” dc.b $a5,$fb dc.b "JD dc.b $00,$00,$00,$00,$00,$02,$00,$00 dc.b $OO,$ff,$OO,$OO,$ff,$ff,$ff,$ff, dc.b " dc.b " dc.b " dc.b "JUE 3.2.7. Организация ввода/вывода К устройствам ввода/вывода, которые могут быть использованы вместе с приставкой SEGA MEGA DRIVE, относятся различные варианты игровых пультов, модем, дисковод с контроллером и привод CD-ROM. Поскольку специализированные контрол- леры в нашей стране не получили распространения, ниже мы расскажем об общих принципах взаимодей- ствия с периферийными модулями и технике работы с игровыми пультами. Периферийные устройства могут соединяться с приставкой SEGA MEGA DRIVE двумя способа- ми: через 60-контактный системный разъем и через 9-контактные разъемы для джойстиков. Если устройство подключается через системный разъем, как, например, контроллер CD-ROM, или через разъем картриджа, то оно связывается непо- средственно с шинами центрального процессора и получает от него сигналы адреса, данных и управ- ления. С точки зрения программирования в этом случае в адресном пространстве центрального про- цессора появляются новые области памяти и новые порты ввода/вывода. Поскольку подобное измене- ние конфигурации зависит от конкретного устрой- ства, мы не будем детально описывать данный метод. Рассмотрим назначение двух портов ввода/вы- вода, которые не связаны напрямую с системой ввода/вывода игровой приставки, но могут приме- няться программами при соединении с различны- ми устройствами, а также при определении конфи- гурации приставки. Регистр номера версии Адрес: Al0000h. Tun: чтение. Назначение разрядов. В данном регистре содержится информация об аппаратной части игровой приставки, которую не- возможно определить программным путем. D7 - модель игровой приставки: 0 - Domestic; 1 - Overseas. D6 - стандарт видеосигнала и тактовая частота центрального процессора: 0 - NTSC, частота процессора 7,67 МГц; 1 — PAL, частота процессора 7,60 МГц. D5 — наличие контроллера дисковода: 0 - контроллер подключен; 1 - контроллер отсутствует. D4 - разряд не используется. D3 - D0 - код версии схемы игровой приставки. Регистр режима работы ОЗУ Адрес: AllOOOh. Тип: запись. Назначение разрядов. Игровая приставка SEGA MEGA DRIVE может работать с внешними устройствами, использующи- ми микросхемы динамической памяти, которые тре- буют постоянной регенерации. При этом внутренние схемы приставки будут формировать управляющие сигналы для динамического ОЗУ. Чтобы игровая приставка перешла в режим ра- боты с динамическим ОЗУ, в этот регистр необхо- димо записать слово, у которого разряд D8 будет равен 1; в противном случае схема управления ди- намическим ОЗУ отключится, и импульс регенера- ции посылаться не будет. В случае устройств ввода/вывода, подсоединяе- мых к приставке через 9-контактные разъемы, об- мен информацией идет через контроллер, стандарт- ный для всех моделей игровой приставки. 21 97
Архитектура и принцип работы. Организация ввода/вывода ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Контроллер ввода/вывода SEGA MEGA DRIVE может управлять тремя портами, через которые осуществляется обмен информацией с внешними устройствами. Сигналы этих портов выведены на три 9-контактных разъема, которые обычно имену- ются CONTROL 1, CONTROL 2 и EXP. Через разъемы CONTROL 1 и CONTROL 2 подключают игровые пульты, а разъем ЕХР предназначен для до- полнительных устройств, например модема. Если на вашей игровой приставке нет разъема ЕХР, значит, он просто не был установлен при изготовлении; од- нако контроллер ввода/вывода все равно работает с данным портом и формирует необходимые сигна- лы. Ниже мы будем называть порт CONTROL 1 портом 1, порт CONTROL 2 - портом 2, а порт ЕХР - портом 3. Архитектура названных портов идентична (рис. 3.14). Как видно из рис. 3.14, порт ввода/вывода спо- собен работать как 7-разрядный параллельный или как последовательный порт. В первом случае для любого выхода можно непосредственно задать на- правление пересылки данных; допустим либо ввод данных, либо их вывод. С каждым портом ввода/вывода связано шесть 8-разрядных регистров, используемых как для за- писи, так и для чтения. Регистр данных хранит информацию, переданную в порт в параллельном режиме и доступную при чтении из него. Регистр управления параллельным интерфейсом задает ре- жим работы отдельных выходов параллельного порта. В регистр передатчика последовательного интерфейса записываются данные, которые долж- ны быть переданы через последовательный порт. Информация, введенная через последовательный порт, становится доступной центральному процес- сору при чтении из регистра приемника последова- тельного интерфейса. Регистр управления последо- вательным интерфейсом определяет режим его работы и скорость обмена данными. Рассмотрим назначение регистров контроллера ввода/вывода игровой приставки SEGA MEGA DRIVE более подробно. Ко всем регистрам можно обращаться двумя способами: либо как к 8-разряд- ным ячейкам памяти, либо как к 16-разрядным. Во втором случае содержимое старшего байта прочи- танного 16-разрядного слова игнорируется. Регистр данных порта 1 Адрес: A10002h. Tun: запись/чтение. Назначение разрядов. Разряд D7 регистра не используется, а разряды D6 - DO применяются для обмена данными через порт 1 в режиме параллельного интерфейса. Запи- санные данные будут переданы на соответствующие выходные шины, если они работают в режиме вы- вода. При чтении из этого регистра процессор по- лучает информацию с шин порта, функционирую- щих в режиме ввода. Регистр данных порта 2 Адрес: А10004h. • Тип: запись/чтение. Назначение разрядов. Регистр аналогичен регистру данных порта 1. Регистр данных порта 3 Адрес: A10006h. Тип: запись/чтение. Назначение разрядов. Регистр аналогичен регистру данных порта 1. Регистр управления параллельным интерфейсом порта 1 Адрес: A10008h. Тип: запись. Назначение разрядов: D7 - разрешение генерации запроса на преры- вание: О - запрос на прерывание не формируется; 1 - запрос на прерывание посылается при из- менении состояния линии TH (D6). D6 - DO - определение рёжима работы шин порта ввода/вывода. При установке разряда в 0 соответ- ствующая линия порта используется для ввода ин- формации, а если разряд равен 1 - для вывода. На- пример, чтобы использовать шины D3 - DO порта 1 для ввода информации, а остальные шины - для вы- вода, необходимо записать в этот регистр число OFh. Регистр управления параллельным интерфейсом порта 2 Адрес: AlOOOAh. Тип: запись. Назначение разрядов. Регистр аналогичен регистру управления парал- лельным интерфейсом порта 1. Регистр управления параллельным интерфейсом порта 3 Адрес: AlOOOCh. Тип: запись. Назначение разрядов. Регистр аналогичен регистру управления парал- лельным интерфейсом порта 1. Регистр передатчика последовательного интер- фейса порта 1 Адрес: AlOOOEh. Тип: запись. 98
Архитектура и принцип работы. Организация ввода/вывода 1/0 — схеме Выбора направления передачи донных S/P — коммутатор Выбора параллельного или последовательного интерфейса Рис. 3.14. Архитектура порта подключения внешних устройств игровой приставки SEGA MEGA DRIVE ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Назначение разрядов. В регистр записывается 8-разрядное значение, ко- торое будет передано через последовательный интер- фейс порта 1. Регистр приемника последовательного интерфей- са порта 1 Адрес: AlOOlOh. Тип: чтение. Назначение разрядов. В регистре хранится 8-разрядное значение, принятое через последовательный интерфейс порта 1. Регистр управления последовательным интерфей- сом порта 1 Адрес: A10012h. Тип: запись/чтение. Назначение разрядов. Отдельные разряды данного регистра позволяют задавать режим работы последовательного интер- фейса порта 1, а также сигнализируют о возникаю- щих ошибках. D7, D6 - скорость работы последовательного ин- терфейса: 00 - 4800 бит/с; 01 - 2400 бит/с; 99
Архитектура и принцип работы. Организация ввода/вывода ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 10 - 1200 бггт/с; 11 - 300 бит/с. D5 - управление шиной TR (D5): 0 - линия функционирует в составе парал- лельного интерфейса; 1 - линия работает в режиме приема данных последовательного интерфейса. D4 - управление шиной TL (D4): 0 - линия работает в составе параллельного интерфейса; 1 - линия функционирует в режиме переда- чи данных последовательного интерфейса. D3 - генерация запроса на прерывание: 0 — запрос на прерывание не формируется; 1 - запрос на прерывание передается процес- сору после принятия байта через последова- тельный интерфейс. D2 - разряд ошибки. Если разряд равен 1, зна- чит, во время приема данных через последователь- ный интерфейс произошла ошибка и регистр при- емника последовательного интерфейса содержит неправильные данные. D1 - регистр готовности приемника. Если пре- рывания не используются, при работе с последова- тельным интерфейсом программа должна постоян- но контролировать состояние этого разряда. Когда будет принят очередной байт данных, разряд уста- новится в 1. D0 - если разряд равен 1, последовательный ин- терфейс выполняет пересылку байта, и записывать очередной байт в регистр передатчика последова- тельного интерфейса нельзя. Регистр передатчика последовательного интер- фейса порта 2 Адрес: А10 014h. Tun: запись. Назначение разрядов. Регистр аналогичен регистру передатчика после- довательного интерфейса порта 1. Регистр приемника последовательного интерфей- са порта 2 Адрес: А10 016h. Тип: чтение. Назначение разрядов. Регистр аналогичен регистру приемника после- довательного интерфейса порта 1. Регистр управления последовательным интерфей- сом порта 2 Адрес: A10018h. Тип: запись/чтение. Назначение разрядов. Регистр аналогичен регистру управления после- довательным интерфейсом порта 1. Регистр передатчика последовательного интер- фейса порта 3 Адрес: AlOOlAh. Тип: запись. Назначение разрядов,. Регистр аналогичен регистру передатчика после- довательного интерфейса порта 1. Регистр приемника последовательного интерфей- са порта 3 Адрес: AlOOlCh. Тип: чтение. Назначение разрядов. Регистр аналогичен регистру приемника после- довательного интерфейса порта 1. Регистр управления последовательным интерфей- сом порта 3 Адрес: AlOOlEh. Тип: запись/чтение. Назначение разрядов. Регистр аналогичен регистру управления после- довательным интерфейсом порта 1. Пример работы с игровым пультом Способ взаимодействия программного обеспечения с дополнительными устройствами, подключаемыми к игровой приставке, как видно из приведенного выше описания, может варьироваться в очень ши- роких пределах. В принципе вполне допустима процедура, которая позволит программе работать с пультом от другой игровой приставки, например DENDY. Разумеется, при этом потребуется заме- нить разъем пульта. Чтобы лучше понять принципы программирова- ния устройств ввода/вывода, ггзучггте приведенную нггже процедуру на языке ассемблера, которая счи- тывает состоянгге кнопок игрового пульта, подсо- единенного к разъему CONTROL 1, гг возвращает его основной программе в регистре D0. ; Процедура инициализации порта CONTROL 1 ; для работы с игровым пультом. jsinit: moveq #$40,d0 move.b d0,$a!0009 rts ; Процедура чтения состояния ; игрового пульта, ; подключенного к разъему CONTROL 1. юо
Принципиальная схема. Процессорный модуль . результат возвращается ; в разрядах D7 - D0 регистра D0. ; Соответствие кнопок разрядам: ; D7 - Start, D6 - A, D5 - С, D4 - В ; D3 - Right, ; DO - Up. D2 - Left, DI - Down, ; Если кнопка нажата, разряд равен 1. ; Команды пор добавлены с целью ; временной задержки, ; необходимой , Для срабатывания ; внутренних схем игрового пульта. porta: move .Ь #$40,$а!0003 пор пор move .Ь $а10003,<31 andi .ь #$3f,<31 move .ь #$00,$а10003 пор пор move ,ь $al0003 ,<30 andi .ь #$30,<30 Isl. ь #2, <10 or .b <11, <30 not. ь <30 rts 3.3. Принципиальная схема Этот раздел посвящен описанию аппаратного обеспе- чения и принципов работы игровой приставки SEGA MEGA DRIVE. Приведены подробные принципи- альные схемы и сведения об используемых микро- схемах и их возможной замене. 3.3.1. Процессорный модуль Принципиальная схема модуля центрального процессора SEGA MEGA DRIVE приведена на рис. 3.15. Расположение контактов в разъемах игровой приставки показано на рис. 3.16. Как уже было сказано, основой схемы являются микросхема центрального процессора IC1 и систем- ный контроллер. Тип системного контроллера за- висит от года выпуска приставки. В базовой моде- ли, которая будет описана в этом разделе, модуль системного контроллера образован четырьмя за- казными микросхемами: контроллером шин IC8 (ТА-04), контроллером ввода/вывода IC7 (ТА-05), видеопроцессором IG9 (ТА-06) и звуковым процес- сором IC11 (ТА-07). Вместо названных в некоторых игровых приставках используются три микросхемы серии SE: SE-93, SE-94 и SE-95, а в более поздних моделях весь набор реализован в виде одной БИС MD270, выполненной в 208-выводном корпусе. Принципы работы, архитектура базовой модели и формируемые сигналы остаются неизменными, несмотря на различия в конструктивном исполне- нии, что позволяет детально рассматривать только один из возможных вариантов электрической схе- мы на основе микросхем серии ТА. В качестве центрального процессора в игровой приставке SEGA MEGA DRIVE используется мик- росхема IC1 (М68000Р10), выполненная в DIP- корпусе с 64 контактами. В некоторых моделях имеется процессор MC68000FN8, реализованный в корпусе для поверхностного монтажа с 68 выво- дами; в этом случае номера выводов центрального процессора будут отличаться от приведенных на схеме. С внешними устройствами микропроцессор со- единяется посредством 16-разрядной шины данных D15 - DO (выводы IC1/1-5,54-64), 23-разрядной шины адреса А23 - А1 (выводы IC1/29-48, 50-52) и шины управления. Важной особенностью микро- процессора М68000 является отсутствие выхода младшего разряда шины адреса АО, вместо которого применяются сигналы LDS и UDS шины управле- ния (выводы ICl/7,8). При обращении процессора к байту, записанному по четному адресу, сигнал низ- кого уровня формирует сигнал LDS и данные посту- пают в процессор по части шины данных D7 - D0. Но если запрашивается байт, находящийся по нечет- ному адресу, то сигнал низкого уровня генерируется на выходе UDS и данные передаются по другой час- ти шины данных D15 - D8. В случае обращения процессора к 16-разрядному слову на выходах LDS и UDS выдается сигнал низкого уровня, а для пере- сылки данных задействуется вся шина D15 - D0. Кроме уже рассмотренных сигналов LDS и UDS по шине управления передаются и другие сигналы, определяющие режим работы центрального про- цессора и других блоков приставки. Низкий уровень сигнала на выходе AS (вывод IC1/6) сообщает периферийным микросхемам, что центральный процессор вывел на шину адреса пол- ный 23-разрядный адрес. Тип выполняемого при этом действия определяется уровнем сигнала R/W (вывод IC1/9). Если процессор выполняет чтение данных, то сигнал на данном выходе имеет высокий уровень, а если запись - низкий. Активизация выходов FC0 - FC2 позволяет про- цессору работать с четырьмя раздельными сегмен- тами памяти, однако в игровой приставке SEGA MEGA DRIVE эта функция не используется. ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Ю1
Принципиальная схема. Процессорный модуль приставки SEGA MEGA DRIVE ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 75 78 70) (69) (68) (67) (66) (65, (64, (63) (62) (61, (60) (59 О о О at tit f— o 1— T~ K) tn '“X ш at at -i О at GO T“~ Гч| at 2 о m N $ N co N cr N I M a 74 73 51 80 72 о GO Z1 17 м SYSCLK WRM1 ЕВ WRM cs WRM0 ЕВ BR S4738 BGACK —(88 S4739 89 H90 Vdd Y41 S8062 91 Vdd S486 S4219 -—493 Y93 AS UDS Y94 LDS RST R/W Y96 TST2 DTACK S4161 Z1 18 A130 co о GND ZD7 Vcc Y93 Y94 RESET Y96 TST2 ID HSYNC GO at R51 4.7K C20 1000 1C7 TA-05 PIO IC8 TA-04 SYSCON R94 IK <71 эО 49 48 46 45 10 43 9 42 5 41 40 39 ++-+494 95 96 98 99 32 100 31 20 21 22 19 23 24 25 30 65 DO D1 66 2 D2 3 D3 68 4 D4 5 70 D5 6 6 71 D6 7 472 33 Vdd 73 D7 32 8 D8 31 9 D9 30 10 D10 29 28 D1 1 12 D12 27 79 D13 26 14 D14 о 15 20, 34 8 (81) ZA13 И ZA14 ?5 ZA15 1 6 (84) ZDO О S2C52 (86) S8108 (87) S7931 —v \ \ \--\— 14 13 12 11 101 9 tn Q GJ 2 0 Z z ro О Ю {64) (63J(62J(61J(6O)(59)(58)(57J (5 ф 5 2)Q51)(5 0)(4 9)(48)(47)(4 6X45Д44)(43)(4 2 0 <0 in Tj- ro О <Din-erocN^:or'VDin-«i-rncNr:o z CD CO О CD CO 5 m "Э * “Э <<<<<<<<<<<<<<< 41 ZDO ZD1 40 39 RAI 8x1 OK J-C19 I'00 69 74 75 76 7 7 78 80 ZD2 ZD3 ZD4 ZD5 ZD6 NTSC 38 37 35 34 4 5 4 '—4 5 16 -Ur 2( 4 5 6, 7 0 «- 0 m r- z z z a?* z X X О 0 0 0 0 To) (T1Y12) (13) (m) (fs) (Гб NO 125 Рис. 3.15. Принципиальная схема процессорного модуля игровой приставки SEGA MEGA DRIVE (1 из 5) 102
Принципиальная схема. Процессорный модуль приставки SEGA MEGA DRIVE v 1 10 2 9 3 8 4 7 5 6 ч 6 5 7 4 8 3 9 25 , 10 24 1 1 21 . 12 23 L3 2 22 27 IC12 HM6264L—12 20 26 AO Al A2 A3 A4 A5 A6 A7 A8 A9 A10 Al 1 A12 RAM DO DI D2 D3 D4 D5 D6 D7 ОЁ WE CS1 CS2 T5B GND 17 6 16 5 12 2 13 3 1 1 4 18 7 19 8 28 —4 1 30 . 2 31 ч 3 32 4 33 5 34 6 Ч. 35 7 36 . 8 37 . 9 38 10 39 1 1 40 12 1 . I3 2 14 3 1 5 и 1 8 5 ———— . 2 3 , 3 4 4 5 5 6 . 6 7 7 8 . 8 9 10 1 1 12 IC11 ТА—07 GND PSG CLK DO Vcc D1 Vcc D2 LO D3 RO D4 GND D5 A1 D6 AO D7 RD NC WR RES CS GND IRQ 18 17 16 14 1 2 3 4 ° 330 7 R9 330 4 РАО 2 PA1 3 PA2 4 РАЗ 5 + 5B 6 PA4 7 PA5 8 GND 9 PA6 XS6 JOYSTICK 1 2 17 25 23 — " 24 24 23 22 21 20 19 8 9 10 1 1 12 R18 13 330 14 R19 330 IC10 28400А АО CPU DO А1 D1 А2 D2 АЗ D3 А4 D4 А5 D5 А6 D6 А7 D7 А8 CLK А9 — АЮ RES MREO А1 1 — IORQ А12 — RD А1 3 WR А14 — RESH А1 5 — — INT NMI HALT BRQ BACK — + 5B WAIT М1 GND 16 1 РАО 2 РА1 3 РА2 4 РАЗ 5 +-5В 6 РА4 7 РА5 8 GND 9 РА6 XS7 JOYSTICK 2 15 16 18 ЮЗ 26 19 20 21 22 28 14 1 1 29 ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 1 5 2 12 3 8 4 7 5 9 6 10 7 13 6 1 9 R20 20 330 21 R21 330 1 РАО 2 PA1 3 PA2 4 РАЗ 5 4 5B 6 РА4 7 РА5 8 GND 9 РА6 XS8 EXPANSION Рис. 3.15. Принципиальная схема процессорного модуля игровой приставки SEGA MEGA DRIVE (2 из 5)
I Принципиальная схема. Процессорный модуль приставки SEGA MEGA DRIVE 96195 93 92 88 87 86 85 84 83 75 74 73 72 70 69 94 91 89 82 79 68 67 o> co см D9 10 D8 ZINT D7 BR 62 D6 BGACK D5 BG D4 59 Y41 D3 SSS486 58 D2 D1 56 DO Vdd 53 --------T109 0 (111 CHROMA 50 UDS CPUCLK LDS R/W XR2 IC9 TA—06 PPU GND о со GND Ск 15 105 14 60 55 ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 23 22 20 19 16 15 98 100 9 101 02 103 99 10 9 8 7 6 5 XI 53,693175МГц IPL1 IPL2 ZIORQ ZRD SYSCLK 7WR SYSCLK1 ZM1 Z80CLK AS RESET DIACK NTSC/PAL WRH WRL Z1 17 HSYNC OE CS RAM VSYNC m 8 14 13 10 106 107 108 5 TEST 116 X20 117 18 SYNC 119 120 121 XR1 XB12 122 123 VA7 124 VA6 VA5 125 VA4 126 VA3 127 VA2 о 24 28 30 22 25 27 29 IC5 HM53461ZP—12 1 1 12 5 1 8 я 9 9 4 8 7 14 24 J12 13 10 3 F C66 22пФ C30 0,01 R52 1K 2 7 Х1 4.433619МГц — С29 Т 1 ООпФ 23 1 22 2 21 3 20 4 17 5 16 6 15 7 19 3 2 1 C31 0,022 11 1 R53 10K NC GND + 5B ( 4 OSC( 3 4 I 5 IC4 HM53461ZP-12 АО А1 А2 АЗ А4 А5 А 6 А7 VRAM GO 01 02 03 SOO S01 S02 S03 )RAS 7 CAS ) WE ) DTOE ) SOE SC + 5B GND 8 11 12 1' 1 2 2 3 23 1 22 2 21 3 20 A 17 5 16 6 15 7 19 7 AO VRAM 00 Al 01 A2 02 A3 03 A4 A5 SOO A6 S01 A7 S02 — SO3 p RAS p CAS ) WE p DTOE + 5B p SOE SC GND 49 48 47 46 45 44 43 39 37 • 7 36 6 40 R56 38)—ч 34 33 35 00 R59 4,7K R60 4.7K 5 8 C59 220 Г UO R61 4.7F С43 0,022 ----1|----- 044 0,022 ----1|----- С45 0.022 (O ct J13 J14 Рис. 3.15. Принципиальная схема процессорного модуля игровой приставки SEGA MEGA DRIVE (3 из 5) Ю4
Принципиальная схема. Процессорный модуль приставки SEGA MEGA DRIVE 21 12 13 22 23J 14 241 IC1 МС68000Р10 10 38 11 39 12 40 13 41 14 42 15 43 16 44 17 45 18 46 19 47 20 48 21 50 22 51 23 52 10 8 12 9 13 10 15 17 1 1 18 12 21 2 30 9 37 7 35 8 36 5 33 6 34 3 31 4 32 1 29 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A1 1 A12 A13 A14 A15 A16 Al 7 A18 A19 A20 A21 A22 A23 CPU DO D1 02 03 D4 D5 06 D7 08 D9 D10 DI 1 012 D13 D14 D15 AS ( UDS C LDS ( R/W BG ( VM A ( E FC2 FC1 FCO DTACK BGACK BR CLK HALT RES VPA BERR IPL2 Три IPLO Vcc GND 64 6 63 7 62 8 61 9 60 10 59 1 1 58 12 54 16 6 7 20 3 3 4 2 2 4 1 5 1 1 2 3 8 9 4 , 1 1 5 19 26 6 27 28 7 14 Hi 49 16 15 25 53 R75...R77, 0.022 со R54 2.2К IC14 СХА1 145 1 2 3 4 5 6 7 8 9 10 11 12 GND RGB GND R IN R OUT G IN G OUT В IN В OUT XO VIDEO X1 Vcc NT/PAL Y IN AU IN C IN AU OUT Y OUT SYNC IN C OUT SYNC OUT VREF Vcc IREF 24 23 22 19 18 17 16 15 14 13 21________ 2Q R68 75 IC2 Н61256-70 1 10 S. AO 2 9 Al 3 8 A2 4 7 — A3 5 6 — A4 6 5 — A5 7 4 A6 8 3 4 A7 9 25 A8 10 24 A9 11 21 A10 12 23 ~~— Al 1 13 — A12 14 26 '— A13 15 1 k A1 4 20 CS 22 R92 75 ОЕ 271 —= RAM DO D1 D2 D3 04 D5 D6 D7 • + 5B GND ± С51 Л“220,0х16В R70 1,2К С53 ,, 680 1 1 1 12 2 13 3 15 4 , 16 5 17 6 18 7 j 19 8 28 14 1 С62 -L 0,022 J R93 ЮК 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 25 10 24 1 1 21 12 23 13 2 14 26 15 1 4 20 IC3 Н61 256-70 22 27 АО Al А2 АЗ А4 А5 А6 А7 А8 А9 А10 Al 1 Al 2 A13 A14 RAM DO DI 02 D3 04 D5 Do 07 ) CS 2 OE j WE <513 GND 1 1 9 12 10 13 1 1 15 12 16 13 17 14 18 15 19 16 28 ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE С63 0.022 00 R66 1000К R65 47К С60 R69 1К С52 ЮОх 16В D3 1N4148 f * С77 100,0x16В Х10.0-16В R73 20K _ (2ZH R71 1.2К R67 ЮК ю ю IC6 _|_ С27 Т1000 L4 J_C54 100 18 С55 180 m о «- Ю X IC6 LM358A Рис. 3.15. Принципиальная схема процессорного модуля игровой приставки SEGA MEGA DRIVE (4 из 5) 105 1
Принципиальная схема. Процессорный модуль приставки SEGA MEGA DRIVE ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE XS 1.2 Bl AUDIO L 82 RSI IN ВЗ AUDIO R В4 A9 85 A10 В6 A18 87 AI9 В8 A20 89 A21 В10 A22 81 1 A23 812 S4660 813 VSYNC 814 HSYNC В15 SYSCLK 816 OE ROM 817 CS ROM В18 AS В19 CPUCLK В20 DTACK 821 S4379 822 D15 823 D14 824 D13 825 D12 826 S4738 82 7 RESET 828 WRL 829 WRH ВЗО TEST 831 Al 30 В32 CHECK XS 1.1 Al GND \2 +-5B A3 A8 A4 Al 1 A5 A7 A6 A12 A7 A6 AS A13 A9 A5 A10 A14 A1 1 A4 A1 2 A15 A13 A3 Л1 4 Al 6 A15 A2 A16 A17 1 A17 Al A18 <1 GND Al 9 D7 A20 DO A21 D8 A22 D6 A23 D1 A24 D9 A25 D5 A26 D2 А2/ D10 A23 D4 A29 D3 A3U D1 1 A31 + 5B A32 GND Разъем для подключения картриджа CN8 1 + 58 2 VIDEO 5 AUDIO 4 GND VIDEO PAL CN1 1 AUDIO 2 GND 3 VIDEO 4 ;5R Cj G 6 R 7 SYNC 8 В VDEO NTSC 1 Vcc 1 2 Vcc 2 3 GND Рис. 3.15. Принципиальная схема процессорного модуля игровой приставки SEGA MEGA DRIVE (5 из 5) 106
Принципиальная схема. Процессорный модуль >!шА^|^К4>^№$29ЯМв<1^е%&*евМ^Шв)М11*Шк1№<М%ма№Кй*вЯ*МШИтМ<Я№МММ1Йек№(Чй1*Ьт'^ -игичдал - В случае захвата шин микропроцессора другими устройствами применяются сигналы BG и BGACK. Периферийная микросхема посылает запрос на захват шин процессора путем установки низкого уровня сигнала BGACK (вывод ICI/12). Процес- сор переводит свои выходы в третье состояние и из- вещает об этом сигналом низкого уровня BG, после чего периферийному устройству разрешается зани- мать шины. Данная возможность необходима, в част- ности, контроллеру прямого доступа к памяти. Сигнал низкого уровня на входе DTACK (вывод ICI/10) свидетельствует о том, что периферийная микросхема, к которой обращается процессор, гото- ва к обмену данными. По входам IPL0 - IPL2 центральный процессор получает запросы на прерывание. Обратите внима- ние: активный уровень сигналов на этих входах - низкий. Следовательно, для формирования запро- са на прерывание с приоритетом 7 (111 в двоичном коде) на эти входы должна подаваться комбинация сигналов ООО - другими словами, обратный код чис- ла. Вход 1PL0 в игровой приставке SEGA MEGA DRIVE не используется и соединен через резистор с цепью +5 В. По сигналу низкого уровня на входе RES (вы- вод ICI/18) производится начальная установка процессора (см. раздел, посвященный архитекту- ре приставки). Работа процессора синхронизируется тактовым сигналом частотой 7,6 МГц, поступающим на вход CLK (вывод ICI/15). Большая часть сигналов центрального процессо- ра выведена на 64-контактный разъем подключения картриджа. Кроме того, на отдельные контакты разъема подаются сигналы от системного контрол- лера игровой приставки, в частности сигналы строч- ной и кадровой синхронизации. Чтобы процессор начал выполнять программу, записанную в картрид- же, на контакт В32 должен поступить сигнал низко- го уровня, для чего внутри картриджа этот контакт обычно соединяют с общим проводом. Часть сигна- лов системы выводится на разъем расширения. Разводка сигналов на разъемах игровой приставки изображена на рис. 3.16. К центральному процессору подключается ОЗУ объемом 64 Кб, которое может быть выполнено на двух микросхемах объемом 32Кх8 или на четырех микросхемах объемом 16Кх8. В игровой приставке ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE UP/Z DOWN/Y LEFT/X RIGHT/MODE +5В А/В SYN GND START/C х — отсутствующий контакт Розьем для подключения модулятора 9— конто ктн ай розьем для подключения игрового пульта приставки SEGA MEGA DRiVE для подключения Внешних устройств 64—контактнай разьем для подключения картриджа Рис. 3.16. Разъемы игровой приставки SEGA MEGA DRIVE 107
Принципиальная схема. Процессорный модуль применяются широко распространенные микросхе- мы статического ОЗУ типа МВ84256 или Н61256 (HM62256FLP). Рассмотрим принципиальную схему модуля ви- деопроцессора. Напомним, в данном разделе описы- вается принципиальная схема игровой приставки SEGA MEGA DRIVE, выполненная на комплекте микросхем серии ТА. В качестве видеопроцессора используется специализированная микросхема ТА-06. На входы микросхемы от центрального про- цессора IC1 поступают сигналы шины адреса (выво- ды IC9/71-93) и шины данных (выводы IC9/55-70), а также сигналы шин управления центрального про- цессора и сопроцессора (выводы IC9/98-119). Посредством отдельных шин адреса FAO - FA7 (выводы IC9/31-38), данных SD0 - SD7 (выводы IC9/1-8) и управления (выводы IC9/10-16) видео- процессор соединен с двумя микросхемами видео- памяти IC4, IC5. В видеопамяти применяются мик- росхемы типа HM53461ZP-12, МВ81461-12 или аналогичные, представляющие собой двухпортовое видео-ОЗУ. Порты работают асинхронно. Динамическое ОЗУ объемом 64Кх4 управляет- ся сигналами RAS (вывод IC4/14), CAS (вывод IC4/24) и WE (вывод IC4/13). Обмен данными с ним происходит по шине данных DU - DI4 (вы- воды 104/1,2,11,12). Последовательный порт быстрого доступа для видео-ОЗУ содержит четыре 256-разрядных регис- тра и управляется сигналами DT/ОЕ (вывод 1С4/ 10), SOE (вывод IC4/3) и SC (вывод IC4/7). Обмен данными между видеопроцессором и этим портом ведется по шине SD1 - SD4 (выводы 1С4/4,5,8,9). Чтобы изменить состояние отдельных разрядов видеопамяти, разрешается воспользоваться маски- рованной записью. Данный режим ускоряет выпол- нение некоторых графических операций. Микросхема видеопроцессора формирует изоб- ражение кадра на основе считанной из видеопамя- ти информации. С выхода видеопроцессора снима- ются сигналы основных цветов - R, G, В (выводы IC9/27-29) и сигналы строчной HSYNC (вывод IC9/42) и кадровой VSYNC (вывод IC9/41) син- хронизации. Эти сигналы передаются на микросхему IC14 (СХА1145), которая вырабатывает полный видеосиг- нал системы PAL или NTSC. Стандарт выходного сигнала устанавливается при изготовлении при- ставки, но при необходимости может быть изменен путем перепайки перемычек Jll - J14. С выхода микросхемы IC14 (вывод IC14/20) сни- мается полный видеосигнал, поступающий затем на выходной разъем игровой приставки и на вход мо- дулятора. На других выходах микросхемы IC14 формируются раздельные яркостная (вывод 1С14/ 16) и цветовая (вывод IC14/15) составляющие. Самостоятельной задачей видеопроцессора яв- ляется синхронизация всех модулей игровой при- ставки. Для этого внутренний генератор стабили- зируется внешним функциональным элементом XI (53,693175 МГц), подключенным к выводу IC9/52, и генерирует опорную частоту, которая в видеопро- цессоре преобразуется в тактовую частоту для центрального процессора (вывод IC9/49) и сопро- цессора (вывод IC9/51). Микросхема системного контроллера IC8 (ТА- 04) синхронизирует совместную работу основного микропроцессора IC1 и сопроцессора IC10 посред- ством сигналов их шин управления. Системный контроллер управляет захватом шин сопроцессора, а также координирует функционирование двух про- цессоров с общим ОЗУ и регистрами ввода/вывода. Дополнительно системный контроллер выполняет дешифрацию адреса при обращении центрального процессора игровой приставки к ОЗУ сопроцессо- ра, программируемому звуковому генератору IC4 и контроллеру ввода/вывода IC7. К сопроцессору IC10 подключена микросхема ста- тического ОЗУ объемом 8 Кб IC11 (MM6264L-12). На неиспользуемый вывод IC11/1 этой микросхемы от микропроцессора Z80 поступает сигнал А13 шипы адреса, что позволяет заменять ее статичес- ким ОЗУ объемом 16 Кб. Основной задачей сопроцессора IC10, как отмеча- лось выше, является управление звуковым сопро- цессором IC4 (ТА-07). Данные для музыкального процессора передаются по шине данных сопроцессо- ра, подключенной к выводам IC4/2-9. На входы микросхемы также поступают сигналы управления чтением и записью (выводы IC4/15.16), два разряда шины адреса (выводы 1С4/17Д8) и сигнал выбора микросхемы (вывод IC4/14), формируемый систем- ным контроллером IC8. Для синхронизации рабо- ты звуковых генераторов на вход СК (вывод IC11/ 24) подается сигнал тактовой частоты центрально- го процессора приставки (7,6 МГц). Сигналы двух аудиоканалов снимаются с выхо- дов LO и RO (выводы IC4/20.21) и через пассивные фильтры поступают на разъем для подключения наушников, а также на входы усилителя на мик- росхеме IC6 (LM358A). После усиления объ- единенный сигнал через выходной фильтр передает- ся на линейный выход звукового сигнала, а также на вход модулятора, формирующего полный телеви- зионный сигнал. Двумя портами для игровых пультов управляет микросхема контроллера ввода/вывода IC7 (ТА-05). Разъемы Х5 и Х6, к которым подключаются пульты, 108
Принципиальная схема. Блок питания соединены с выводами IC7/42-63. Кроме того, на входы контроллера поступают сигналы шины дан- ных и шины адреса центрального процессора, а так- же шины данных сопроцессора. 3.3.2. Картридж Картридж для игровой приставки SEGA MEGA DRIVE содержит ПЗУ объемом от 256 Кб до 4 Мб, а при необходимости — дополнительное ОЗУ. Схема такого картриджа гораздо проще, чем у NINTENDO, поскольку фирма SEGA практически не использует микросхемы контроллера страниц памяти. На рис. 3.17 приведена принципиальная схема двух вариантов картриджа. В первой модификации (рис. 3.17а) имеется только микросхема 16-разряд- ного ПЗУ объемом 4 Мб (2Мх16), а во второй (рис. 3.176) применяются две микросхемы 8-раз- рядного ПЗУ объемом 1 Мб (1Мх8)'и микросхема ОЗУ объемом 2 Кб (2048x8) с резервным питани- ем от литиевой батареи. 3.3.3. Модулятор Следует сразу же отметить, что схема ВЧ модулято- ра игровой приставки SEGA MEGA DRIVE не стан- дартизирована и зависит от фирмы-изготовителя. Принципиальная схема одного нз возможных ва- риантов модулятора представлена на рис. 3.18. Модулятор получает сигнал изображения от ви- деопроцессора и аудиосигнал от звукового процес- сора и формирует из них полный телевизионный ВЧ сигнал в одном из метровых диапазонов. На высокочастотном транзисторе Q1 выполнен задающий генератор, который формирует несущую частоту телевизионного канала. Обычно рабочая частота генератора приставки находится в пределах 170-230 МГц и определяется контуром LI, СЗ. На- стройка частоты производится путем изменения индуктивности катушки L1. Поднесущую звука для полного телевизионного сигнала формирует генератор на транзисторе Q2. Его выходной сигнал модулируется звуковым сиг- налом, поступающим через цепь Rl, С4 с выхода AUDIO OUT на базу транзистора Q2. В зависимости от страны-изготовителя частота генератора составляет 5,5 или 6,5 МГц. Точная подстройка частоты сигнала поднесущей осущест- вляется вращением сердечника трансформатора Т1 или изменением емкости конденсаторов С7 и СП. Смеситель на транзисторе Q3 формирует полный высокочастотный телевизионный сигнал. На вход смесителя поступает сигнал задающего генератора, низкочастотный видеосигнал с выхода игровой приставки и сигнал ПЧ звукового сопровождения с вторичной обмотки трансформатора Т1. ВЧ сиг- нал через согласующую цепь С14, L2 поступает на выходной разъем RF OUT приставки. 3.3.4. Игровые пульты Стандартный игровой пульт для приставки SEGA MEGA DRIVE содержит подвижную крестовину и шесть отдельных кнопок. Внутри пульта установ- лена бескорпусная микросхема коммутатора. При отсутствии оригинальной микросхемы можно ис- пользовать TTL-коммутаторы, соответственно скор- ректировав схему. Принципиальная схема стандартного пульта приведена на рис. 3.19. Здесь вместо бескорпусной микросхемы применяется аналогичная схема из двух 4-разрядных коммутаторов типа 74НС157 (ана- лог К555КП11). Это позволит разобраться в особен- ностях работы пульта, а при необходимости само- стоятельно изготовить его из доступных элементов. На 9-контактный разъем, к которому подключа- ется пульт, выведены семь шин, способных рабо- тать и на ввод, и на вывод, а также две шины пита- ния: +5 В и GND. При использовании стандартного пульта контакт Р6 зарезервирован для вывода сигнала переключения коммутатора, а шины Р5 - Р0 - для ввода сигналов о состоянии соответствующих кнопок. Таким образом, для получения сведений о состо- янии всех кнопок пульта необходимо дважды про- читать информацию из порта. Сначала на контакте Р6, подключенном к выводу 1 микросхем IC1 и IC2, устанавливается высокий уровень напряжения, и передается состояние кнопок С, В, RIGHT, LEFT, DOWN и UP. При этом нажатой кнопке соответ- ствует низкий уровень напряжения на выходе. За- тем на контакте Р6 устанавливается низкий уро- вень и считывается состояние кнопок START, А, MODE, X, Y и Z. Резисторы, расположенные в пульте, предназначены для формирования напря- жения высокого уровня на соответствующем выхо- де при ненажатой кнопке. В варианте с бескорпус- ной микросхемой эти резисторы отсутствуют. 3.3.5. Блок питания Блок питания игровой приставки SEGA MEGA DRIVE отличается очень простой конструкцией. Функционально его можно разделить на внешний сетевой адаптер и внутренний стабилизатор. Принципиальная схема сетевого адаптера игро- вой приставки SEGA MEGA DRIVE приведена на рис. 3.20. ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE 109
Принципиальная схема. Картриджи игровой приставки SEGA MEGA DRIVE IC1 8M8BL IC2 8M88H 19 8 AO 18 A3 20 VD2 2k 01 2SC945 12 10.0x1 OB'~ 10 6 3 9 7 23 22 15 3 16 2 7 12 6 13 5 ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE XS 1.1 GNO Al +5В A2 А8 A3 А11 A4 А7 A5 А12 A6 А6 A7 А13 A8 А5 A9 А14 A10 А4 Al 1 А15 A12 АЗ A13 А16 A14 А2 A15 А17 A16 А1 A17 GND A18 D7 Al 9 DO A20 D8 A21 D6 A22 D1 A23 D9 A24 D5 A25 D2 A26 D10 A27 04 A28 03 A29 Dll АЗО +56 A31 GND A32 XS 1.2 NC B1 NC B2 NC B3 A9 B4 A10 B5 A18 B6 A19 B7 A20 B8 A21 B9 A?2 810 A23 Bl 1 NC B12 VSYNC B13 HSYNC B14 SYSCLK B15 OE ROM B16 CS ROM 817 AS B18 CPUCLK B19 DIACK B20 NC B21 015 822 D14 B23 D13 B2A D12 B25 NC B26 RESET B27 WRL 328 WRH B29 NC B30 NC 831 CHECK B32 IC3 SRM2016C AO A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A17 A19 OE CS ROM DO D1 D2 03 D4 D5 D6 07 АО А1 А2 АЗ А4 A6 A7 A8 A9 АЮ Al 1 412 A15 A16 A17 Al 8 A19 ROM 00 DI 02 D3 D4 05 Do D7 A6 A7 A8 A9 A10 WE OE CS RAM DC DI D2 03 D4 05 . D6 D7 +5В GNOR^-I R1 33K R2 2K +5В --- GND —I 4-5В — GND —1 GB1 ' ЗВ R3 100К R4 33K Рис. 3.17. Принципиальная схема картриджей игровой приставки SEGA MEGA DRIVE а) простейший картридж с 16-разрядным ПЗУ объемом 4 Мб (2Мх16) б) картридж с двумя 8-разрядными ПЗУ объемом по 1 Мб (1Мх8) и ОЗУ объемом 2 Кб (2048x8) 110
Принципиальная схема. Блок питания Рис. 3.18. Принципиальная схема ВЧ модулятора игровой приставки SEGA MEGA DRIVE Рис. 3.19. Принципиальная схема стандартного игрового пульта приставки SEGA MEGA DRIVE Задача внешнего сетевого адаптера - преобразова- ние переменного напряжения 220 В в постоянное на- пряжение 9-11 В, поступающее на внутренний ста- билизатор приставки. В качестве адаптера может служить любой выпрямитель, формирующий напря- жение 9 11 Ви рассчитанный па ток не менее 1,2 А. От внешнего адаптера нестабилизированное по- стоянное напряжение поступает на внутренний стабилизатор игровой приставки. Принципиальная схема внутреннего стабилизато- ра SEGA MEGA DRIVE представлена на рис. 3.21. На выходе стабилизатора формируется постоян- ное напряжение +5 В. В стабилизаторе использу- ются две аналогичные схемы, которые выполнены на микросхемах AN7805. Каждая из них подает пи- тание на свою часть процессорного модуля. Схема является стандартной и в дополнительном описа- нии не нуждается.
Характерные неисправности ИГРОВАЯ ПРИСТАВКА SEGA MEGA DRIVE Рис. 3.20. Принципиальная схема сетевого адаптера игровой приставки SEGA MEGA DRIVE 3.4. Характерные неисправности В данном разделе приводится перечень наиболее часто встречающихся при эксплуатации игровой приставки SEGA MEGA DRIVE неисправностей, а также алгоритмы их поиска и методы устранения. Приставка не включается Возможные причины: неисправность блока питания или внутреннего стабилизатора; короткое замыка- ние или обрыв цепей питания; неисправность кар- триджа или процессорного модуля. Алгоритм поиска неисправности: 1. Проверить выходное напряжение сетевого адаптера. Если оно выходит за пределы 9-12 В, заменить сете- вой адаптер. Практика показывает, что наиболее часто выходят из диоды выпрямительного моста. Если адаптер полностью вышел из строя, то подой- дет любой источник питания с выходным напряже- нием 9-11 В, обеспечивающий ток нагрузки 1,2 А. 2. Отключить от процессорного модуля пульты, кар- тридж и модулятор, после чего проверить блоки иг- ровой приставки на отсутствие коротких замыканий. Если короткое замыкание обнаружено, проверить выходное напряжение внутренних стабилизаторов приставки. При возникновении короткого замыка- ния часто происходит обрыв одного из печатных проводников в цепи питания, поэтому следует тща- тельно осмотреть платы и удостовериться в целост- ности проводников. 3. Если короткого замыкания нет, проверить внутрен- ний стабилизатор игровой приставки. Напряжение на выходе стабилизатора должно быть в пределах +5+0,1 В. Если напряжение выходит за указанные границы, в стабилизаторе следует заменить микро- схему AN7805 (аналог КР142ЕН5А) и проверить конденсаторы сглаживающего фильтра. 4. Включить приставку без пультов, модулятора и кар- триджа. При этом на выходном разъеме VIDEO OUT должен появиться низкочастотный видеосигнал. Наличие выходного сигнала свидетельствует о не- исправности пульта или модулятора. 5. При отсутствии выходного сигнала проверить квар- цевый генератор Х101 и цепь формирования видео- сигнала. Исправность этих элементов свидетельству- ет о необходимости замены всего процессорного модуля. Приставка работает нестабильно Возможные причины: неисправность внешнего сете- вого адаптера или внутреннего стабилизатора; за- грязнение контактов разъема для подключения картриджа. Алгоритрм поиска неисправности: 1. Проверить выходное напряжение сетевого адапте- ра. Часто сбой возникает из-за недостаточной нагру- зочной способности адаптера, поставляемого в ком- плекте с игровой приставкой. Проблема решается подключением более мощного источника питания. 2. Проверить надежность контактных соединений в разъемах приставки. Разъем подключения кар- триджа осмотреть особенно тщательно и при необ- ходимости протереть спиртом. 3. Проверить внутренний стабилизатор игровой приставки. Рекомендуется установить микросхему Рис. 3.21. Принципиальная схема внутреннего стабилизатора напряжения игровой приставки SEGA MEGA DRIVE 112
Характерные неисправности стабилизатора на радиатор с достаточной площа- дью рассеивания (около 10 см2). 4. Возможным способом решения проблемы являет- ся установка в цепи питания дополнительных кон- денсаторов номиналом 100 мкФ х 16 В и 0,01 мкФ на каждой плате приставки и в картридже. Не работает пульт Возможные причины: обрыв в соединительном ка- беле или плохой контакт в разъеме; загрязнение кнопок; неисправность микросхемы пульта. Алгоритм поиска неисправности: 1. Проверить целостность соединительного кабеля и надежность соединений в разъеме. В случае выхо- да из строя разъема заменить его (вместе с ответной частью) на любой 9-контактный разъем, имеющий- ся в наличии. 2. Очистить контактные площадки пульта и проверить работоспособность микросхем, замыкая площадки любым токопроводящим предметом. 3. Проверить прохождение сигналов от микросхемы контроллера ввода/вывода IC7 до разъемов. При обрыве проводников восстановить их и проверить прохождение сигнала. Д.Отсутствие сигналов на выходах микросхемы IC7 свидетельствует о неисправности контроллера вво- да/вывода или системного контроллера. В таком случае необходимо заменить плату процессорного модуля целиком. 5. Проверить выходной сигнал микросхемы, установ- ленной в пульте. При отсутствии сигнала заменить микросхему или пульт. Не работают некоторые кнопки управления Возможные причины: загрязнение пульта пли неис- правность микросхемы. Алгоритм поиска неисправности: 1. Протереть спиртом плату пульта и резиновую про- кладку с токопроводящими площадками. 2. Если неисправны токопроводящие площадки на резиновой прокладке, восстановить их, наклеив кусочки фольги. Удобнее использовать фольгу от сигаретных пачек: она имеет бумажную основу, что обеспечивает лучшее приклеивание к резине. 3. Токопроводящее покрытие на. плате воссоздается с помощью очищенного монтажного провода. 4. Проверить прохождение сигналов от микросхемы контроллера ввода/вывода 1С7до разъемов. В слу- чае обрыва проводников восстановить их и прове- рить прохождение сигнала. 5. Если все контактные площадки исправны, заменить микросхему, установленную в пульте, или весь пульт. Отсутствует ВЧ сигнал на выходе модулятора Возможные причины: изменение настройки генера- тора; неисправность задающего генератора или смесителя. Алгоритм поиска tieucnpaeuocmu: 1. Убедиться, что неисправный элемент находится в схеме ВЧ модулятора, проверив наличие видео- и аудиосигналов на НЧ выходе. Отсутствие како- го-либо из этих сигналов свидетельствует о неис- правности процессорного модуля. 2. Если нет ни звука, ни изображения, то наиболее вероятна неисправность задающего генератора. Для проверки генератора следует измерить частоту выходного сигнала: она должна находиться в диа- пазоне 170-230 МГц. Отсутствие выходного сигна- ла позволяет сделать вывод о необходимости за- мены транзистора Q1. В случае выхода частоты генератора за указанные пределы необходимо про- верить элементы СЗ, С5, С6, С8, L1. 3. Убедившись в исправности задающего генератора, проверить смеситель (транзистор Q3), а также со- гласующую цепь СЮ, С13, R1. 4.Отсутствие звукового сигнала при нормальном изображении свидетельствует о сбое генератора поднесущей частоты. В этом случае проверить со- ответствие частоты генератора телевизионному стандарту (5,5 или 6,5 МГц) и при необходимости подстроить генератор вращением сердечника транс- форматора Т1. При отсутствии сигнала на выходе генератора заменить транзистор Q2.
ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION История появления наиболее распространенной на сегодняшний день 32- разрядной приставки SONY PLAYSTATION очень интересна. Все началось, когда фирма NINTENDO занялась созданием новой игровой консоли с при- водом CD-ROM, которая сейчас известна как NINTENDO 64. Однако затем NINTENDO решила оставить привычные картриджи, и CD-ROM остался у фирмы SONY. Рассудив, что перспективной разработке пропадать не следует, и учтя опыт выпуска приставок под торговой маркой 3DO, фирма SONY предложила собственную игровую систему, которая по числу про- даж обогнала и 3DO и NINTENDO 64. Основой устройства является процессор, использующий RISC-ядро MIPS R3000 и функционирующий на частоте 33,9 МГц. Графический про- цессор представляет собой специальную микросхему, формирующую цветное изображение размером от 224x240 до 640x480 точек. Видеопро- цессор способен работать с 15- или 24-разрядным кодированием цвета и ориентирован на трехмерную полигональную графику. Для звукового сопровождения применяется программируемый 24-ка- нальный звуковой процессор CXD2925Q производства фирмы SONY. В формировании выходного сигнала участвует и двухканальный 16-раз- рядный дельта-сигма ЦАП, используемый при непосредственном вос- произведении звуковых фрагментов с компакт-диска. Программы для приставки хранятся на CD. Для чтения информации с дисков установлен стандартный двухскоростной привод CD-ROM, кото- рый управляется посредством отдельного блока, состоящего из контрол- лера, устройства автоматической регулировки и декодера. В ПЗУ записана многозадачная операционная система, применяемая для воспроизведения звука с Audio CD, работы с файловой системой на дисках с программами, реализации интерфейса с устройствами внешней памяти типа memory card и управления микросхемами приставки. В стандартный комплект приставки входят 14-кнопочные игровые пуль- ты. Четыре кнопки образуют традиционную крестовину, остальные пред- назначены для управления. Кроме пультов, существует множество допол- нительных устройств, таких как рули для гонок, джойстики и специальные приспособления с обратной связью (Force Feedback).
Архитектура и принцип работы. Структурная схема MIPS R3000 32 бит 32 бит 33,9 МГц 2 Мб 512 Кб 1 Мб полигональная 1 Мб 32 бит до 640x480 32767 или 16 млн 4.1. Технические характеристики Центральный процессор Тип Разрядность шины данных Разрядность шины адреса Тактовая частота Память ОЗУ ПЗУ Видеопамять Видеопроцессор Тип графики Адресное пространство Разрядность шины данных Разрешение Количество цветов 4.2. Архитектура и принцип работы В этом разделе рассматривается архитектура игро- ’ вой приставки SONY PLAYSTATION и особеннос- ти разработки программного обеспечения для нее. Подробно рассказывается об архитектуре централь- ного процессора, звукового сопроцессора и видео- процессора. В каждом разделе описано назначение внутренних регистров микросхем и их использова- ние при программировании. 4.2.1. Структурная схема Внутренняя архитектура приставки SONY PLAY- STATION несколько сложнее представленных ранее игровых систем. Главные отличия связаны с тем, что в PLAYSTATION программы хранятся на CD-ROM, для которого требуется схема управления. Другой особенностью являются увеличенные объемы ОЗУ и ПЗУ, установленных в системе. Структурная схе- ма игровой приставки SONY PLAYSTATION при- ведена на рис. 4.1. Основой схемы является центральный процес- сор (CPU), в качестве которого используется мик- росхема CXD8606AQ производства фирмы SONY. Она содержит ядро RlSC-riponeccopa MIPS R3000A и два сопроцессора - управления системой (System Control Coprocessor) и графических вычислений (Graphics Transformation Engine). К центральному процессору подсоединяется внутреннее ОЗУ игро- вой приставки объемом 2 Мб и ПЗУ объемом 512 Кб с записанной в него операционной системой. Также имеется соединение с графическим процессором приставки и декодером, преобразующим поступа- ющие от CD-ROM сигналы в цифровые данные. Отдельной задачей центрального процессора яв- ляется взаимодействие с игровыми пультами и дру- гими устройствами, подключаемыми к разъемам JOYSTICK (CN102), SERIAL I/O (CN104) и PA- RALLEL I/O (CN103). Тактовый генератор цен- трального процессора стабилизируе гея внешним резонатором XI частотой 67,73 МГц. Частота для ядра процессора получается путем деления опор- ной частоты генератора на 2. Сопроцессор управления системой предназначен для обработки сигналов, поступающих от различ- ных блоков игровой приставки. Его основными функциями являются обслуживание поступающих запросов на прерывание, обработка возникающих исключений и передача информации о них ядру процессора, управление таймерами и контролле- ром прямого доступа к памяти. Сопроцессор графических вычислений занят быстрым выполнением базовых операций трехмер- ной графики над матрицами и векторами, чтобы затем передать полученные данные видеопроцессо- ру приставки, который в результате сформирует изображение. Для синхронизации работы программы в игро- вой приставке SONY PLAYSTATION установлены четыре таймера с различной опорной частотой, что дает возможность жестко привязывать выполнение требуемых действий к процессу развертки изобра- жения или отмерять заданные промежутки времени. С целью быстрого обмена данными между раз- личными блоками игровой приставки предусмот- рен контроллер прямого доступа к памяти, позво- ляющий передавать большие блоки информации без участия центрального процессора. Наиболее часто контроллер ПДП применяется для приема данных от CD-ROM и обмена ими с графическим процессором. В модуль видеопроцессора входят непосредствен- но схема графического процессора, видеопамять и ЦАП для генерации выходных сигналов основных цветов. В видеопамяти приставки (объем 1 Мб) хра- нится информация, необходимая для создания изоб- ражения. Видеопроцессор получает эту информа- цию и посылает 24-разрядный цифровой сигнал цветности и сигналы развертки. Микросхема ЦАП преобразует цифровой сигнал цветности в три ана- логовых сигнала для основных цветовых составля- ющих - R, G, В. Далее эти сигналы вместе с импуль- сами синхронизации поступают на микросхему формирователя полного видеосигнала, которая пре- образует их в полный стандартный телевизионный сигнал, передаваемый на выход приставки. 115
\ ИГТ! Wj—riW \ТГГГЖП1иШЩНМИМ1т'И1Я1‘МИММММ|М1'1ГГ - Архитектура и принцип работы. Структурная схема ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION Рис. 4.1. Структурная схема игровой приставки SONY PLAYSTATION В аудиосистему SONY PLAYSTATION входят процессор, генерирующий 24-канальное звуковое сопровождение, буферное ОЗУ и ЦАП. Цифровой сигнал стереофонического звукового сопровождения с выходов процессора поступает на входы цифро-ана- логового преобразователя. Также на входы ЦАП мо- жет подаваться сигнал от контроллера CD-ROM. В качестве цифро-аналогового преобразователя ис- пользуется последовательный однобитовый 16-раз- рядный дельта-сигма ЦАП. Его задачей является формирование полного стереофонического сигнала из данных, приходящих от аудиопроцессора и CD- ROM. Для хранения информации к звуковому про- цессору подключено собственное ОЗУ объемом 116
Архитектура и принцип работы. Центральный процессор 512 Кб, которое позволяет ему работать независи- мо от центрального процессора приставки. Выход- ные сигналы ЦАП поступают на разъем для под- ключения телевизора A/V OUT. Система ввода/вывода игровой приставки SO- NY PLAYSTATION реализована в микросхеме цен- трального процессора. Контроллер ввода/выво- да обрабатывает сигналы, поступающие с разъемов JOYSTICK и SERIAL I/O. Данные от устройств, подключаемых к этим разъемам, приходят в после- довательном формате, бит за битом, и преобразу- ются контроллером в параллельный код, который доступен центральному процессору через соответ- ствующие регистры. Аналогичным образом полу- ченная от процессорного ядра информация преоб- разуется в последовательный код, передаваемый на разъем SERIAL I/O. Для быстродействующих устройств предусмотрен параллельный двуна- правленный порт PARALLEL I/O, обеспечиваю- щий высокоскоростную передачу информации в параллельном виде. Кроме сигналов шины дан- ных и управляющих сигналов на разъем парал- лельного порта выведен ряд тактовых сигналов для синхронизации обмена. Блок питания PLAYSTATION также сложнее, чем линейные стабилизаторы более простых игро- вых приставок. Он выполнен по схеме импульсно- го преобразователя напряжения, что обеспечивает высокую стабильность выходных напряжений и на- дежную защиту от перегрузок, скачков напряжения и коротких замыканий. Необходимость применения такого источника питания связана с повышенным энергопотреблением устройства, жесткими требо- ваниями к стабильности питающих напряжений и с необходимостью формировать несколько вы- ходных напряжений разной величины. 4.2.2. Центральный процессор В SONY PLAYSTATION в качестве центрального процессора используется стандартное ядро RISC- процессора MIPS R3000A. Основными особеннос- тями RISC-процессоров являются сокращенный на- бор команд, где предусмотрены только элементарные операции, одинаковая длина и структура всех ко- манд, минимизация числа обращений к памяти. Кроме того, RISC-процессоры отличаются боль- шим числом внутренних регистров, наличием кэш- памяти для команд и данных, развитыми средства- ми предсказания переходов (за дополнительной информацией о RISC-процессорах можно обра- титься к изданиям, указанным в конце книги). Так- товая частота процессора приставки SONY PLAY- STATION составляет 33,9 МГц. Микропроцессор и другие устройства связаны между собой 32-разрядной шиной адреса, 32-раз- рядной шиной данных и шиной управления. Адрес- ное пространство процессора достигает 256 Мб. Регистры внешних устройств, как это обычно и де- лается в игровых приставках, адресуются процессо- ром аналогично ячейкам памяти и находятся в об- щем адресном пространстве. Структурная схема центрального процессора приставки SONY PLAY- STATION приведена на рис. 4.2. Как видно из рис. 4.2, процессор содержит ариф- метико-логическое устройство, набор из 32 регис- тров общего назначения, схему умножения и деле- ния с собственным 64-разрядным регистром, схему вычисления адреса и схему сдвига, кэш-память для команд (объем 4 Кб) и кэш-память для данных (объем 1 Кб). Взаимодействие блоков центрального процессора происходит с помощью внутреннего устройства управления. Следует отметить, что Шина Шина Шина адреса денных управления Рис. 4.2. Структурная схема центрального процессора игровой приставки SONY PLAYSTATION 117
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION в центральном процессоре SONY PLAYSTATION вместо сопроцессора для вычислений с плавающей точкой есть два специализированных сопроцессо- ра, созданных именно для данной системы. Сопро- цессор управления системой (System Control Co- processor) играет роль дополнительного блока управления, обрабатывая поступающие сигналы и формируя на их основе данные, которые исполь- зуются центральным процессором для контроля состояния отдельных модулей приставки. Сопро- цессор графических вычислений (Graphics Trans- formation Engine) предназначен для быстрого вы- полнения операций над матрицами и векторами трехмерной графики. Он не является стандартным сопроцессором для вычислений с плавающей точкой и, кроме того, не участвует в формировании выводи- мого игровой приставкой изображения, а только вы- полняет необходимые вычисления. Ниже сопроцес- соры будут описаны более подробно. Рассмотрим программную архитектуру процессо- ра, внутренние регистры, систему команд и преры- ваний. Более полную информацию по архитектуре процессора MIPS R3000 и программированию мож- но найти в печатных изданиях и на сайтах Internet, перечисленных в конце книги. Регистры процессора Центральный процессор игровой приставки SONY PLAYSTATION содержит 32 регистра общего назна- чения, счетчик команд PC и 64-разрядный регистр схемы умножеиия/деления, который доступен как два 32-разрядных регистра с именами HI (старшая половина) и LO (младшая половина). Список регис- тров центрального процессора игровой приставки SON)7 PLAYSTATION приведен в табл. 4.1. Все регистры процессора идентичны. В качестве имени регистра используется его номер. Приведен- ные во второй и третьей, колонках таблицы имена регистров и особенности их использования не яв- ляются обязательными, однако их соблюдение об- леигает другим людям чтение и понимание ваших программ. Кроме того, если вы собираетесь пользо- ваться подпрограммами внутреннего ПЗУ пристав- ки, соблюдение приведенных рекомендаций упрос- тит составление программ. Регистры 0 и 31 являются исключением из пра- вила. Регистр с номером 0 всегда содержит число 0 - независимо от того, что вы в него записали. Регистр 31 применяется командой jal для сохранения ад- реса возврата (указателя на команду, следующую за jal). Команда jalr может использовать для этой цели любой регистр процессора, однако по умолча- нию выбирается 31. Счетчик команд PC во время функционирова- ния процессора служит для выборки команд. Фак- тически данный регистр не является обычным, поскольку изменение его содержимого происхо- дит при работе процессора или при выполнении команд перехода. Умножение и деление осуществляется посред- ством двух регистров (HI и LO), которые образуют один 64-разрядный; в системе команд процессора для него предусмотрены отдельные команды. Способы адресации Чтобы процессор работал корректно, в коде коман- ды следует задать местоположение необходимых данных при помощи различных методов адресации. В отличие от рассмотренных ранее, набор методов адресации RISC-процессора может показаться очень небольшим. Регистровая адресация. Наиболее часто исполь- зуемый метод. В команде указывается регистр про- цессора, где содержится нужная информация. На- пример; or t2,a2,v0 ; t2 = а2 OR vO. Непосредственная адресация. В команде имеет- ся непосредственная 16-разрядная константа, кото- рая применяется в качестве операнда. Например: addiu t4,t4,$08 ; t4 = t4 + 8. Индексная адресация. Адрес вычисляется как сумма содержимого определенного регистра и за- данного в команде 16-разрядного смещения. На- пример: sb vl,txtU(tO) ; Запись ; младшего байта ; из регистра vl ; по адресу ; (tO + txtU) . Относительная адресация. Этот метод использу- ется в командах перехода. Атрес следующей выпол- няемой команды равен сумме текущего значения в регистре PC и смещения, указанного в команде. Система команд Центральный процессор игровой приставки SONY PLAYSTATION может выполнять 120 различных команд. Они делятся на следующие функциональ- ные группы: • команды пересылки данных: LB, LH, LW, SB, SH, SW, LUI; • команды арифметических операций: ADD, ADDI, ADDU, SUB, SUBI, SUBU, MULT, DIV; • команды логических операций: AND, OR, XOR, NOR; • команды сдвига: SLL, SRL, SRA; • команды сравнения: SLT, SLTU, SLTI, SLTIU; • команды перехода: J, JR, BEQ, BNE, BGTZ, BLTZ, BLEZ, BGEZ; 775
Архитектура и принцип работы. Центральный процессор Таблица 4.1. Регистры центрального процессора игровой приставки SONY PLAYSTATION Номер регистра Название Описание 0 zero Регистр всегда содержит константу 0 1 Ct Рабочий регистр для временного хранения данных 2 v0 Регистры служат для возврата данных из подпрограмм 3 vl 4 а0 Регистры применяются для передачи аргументов в подпрограмму 5 al 6 a2 7 a3 8 tO Регистры общего назначения, могут произвольно использоваться в программах 9 tl 10 t2 11 t3 12 t4 13 t5 14 t6 15 t7 16 sO Регистровые переменные. Если эти регистры требуются, подпрограмма должна сохранить их содержимое и восстановить его перед возвратом 17 si 18 s2 19 s3 20 s4 21 s5 22 s6 23 s7 24 t8 Регистры общего назначения, могут произвольно задействоваться в программах 25 t9 26 kO Регистры, используемые операционной системой 27 kl 28 9P Регистр применяется как указатель общего назночения 29 sp Регистр играет роль указателя стека 30 fp Регистр выполняет функции указателя кодра либо дополнительной регистровой переменной 31 ra В регистре сохраняется адрес возврата из подпрограммы pc Счетчик команд hi, Io Регистры схемы умножения/деления • команды работы с подпрограммами: JAL, JALR, BLTZAL, BGEZAL; • команды управления процессором: МТС 0, MFC 0, МТС1, MFC1, SYSCALL, BREAK, СОР2, RFE. Полная информация о системе команд централь- ного процессора игровой приставки SONY PLAY- STATION приведена в приложении 1. Сопроцессор управления системой Сопроцессор управления системой SONY PLAY- STATION выполняет функции управления и пред- назначается для отладочных целей, разрешения ситуаций при возникновении прерываний и ис- ключений, а также для анализа сигналов, поступа- ющих от других модулей. С точки зрения программирования сопроцессор управления системой представляет собой 16 регис- тров с номерами от 0 до 15. Для работы с ними в системе команд центрального процессора преду- смотрены две специальные команды. Команда mt с 0 г s, с 0 г копирует значение из ре- гистра rs центрального процессора в регистр сОг сопроцессора. Команда mf с0 rd,cOr пересылает данные из регистра сопроцессора в регистр rd цен- трального процессора системы. ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 119
Архитектура и принцип работы. Центральный процессор Рассмотрим подробнее внутренние регистры со- процессора управления системой и их использова- ние при составлении программ. Регистр О Имя: INX. Назначение разрядов. Рабочий регистр сопроцессора. Регистр 1 Имя: RAND. Назначение разрядов. Рабочий регистр сопроцессора. Регистр 2 Имя: TLBLO. Назначение разрядов. Рабочий регистр процессора, используемый ко- мандой TLB. Более подробную информацию можно найти в документации на процессор MIPS R3000. Регистр 3 Имя: ВРС. Назначение разрядов. В регистр записывается адрес точки останова. При чтении команды, расположенной по указанному ад- ресу, произойдет генерация исключения, и выполне- ние программы прекратится. Регистр 4 Имя: СТХТ. Назначение разрядов. Рабочий регистр сопроцессора. Регистр 5 Имя: BDA. Назначение разрядов. В регистр записывается адрес точки останова в области данных. При чтении или записи данных по указанному адресу возникнет исключительная ситуация и выполнение программы будет прервано. Регистр 6 Имя: PIDMASK. Назначение разрядов. Рабочий регистр сопроцессора. Регистр 7 Имя: DCIC. Назначение разрядов. Регистр управляет обработкой точек прерыва- ния. Для этого в него записывается код со следую- щими значениями разрядов: D31, D30 - разряды должны быть равны 1. D29 — разряд должен быть сброшен. D28 - если разряд установлен в 1, то точка преры- вания, заданная в регистре 5 (прерывание при обра- щении к данным), будет срабатывать при записи. D27 - если разряд равен 1, то точка прерыва- ния, указанная в регистре 5, будет срабатывать при чтении. D26 - если разряд равен 1, то сопроцессору раз- решено обслуживать точку прерывания, задаваемую в регистре 5 (прерывание при обращении к дан- ным); если разряд сброшен, точка прерывания иг- норируется. D25 - если разряд установлен в 1, сопроцессору разрешено обрабатывать точку прерывания, зада- ваемую в регистре 3 (прерывание при чтении ко- манды); в противном случае точка прерывания иг- норируется. D24 — разряд должен быть равен 1. D23 - DO - разряды должны быть сброшены. Регистр 8 Имя: BADVADDR. Назначение разрядов. При возникновении исключения, связанного с ошибкой адресации при обращении к памяти, здесь сохраняется адрес, обращение к которому вызвало ошибку. Регистр доступен только для чтения. Регистр 9 Имя: BDAM. Назначение разрядов. Маска для точки прерывания при обращении к данным. Когда центральный процессор считыва- ет или записывает данные, выполняется логическая операция И над значением адреса и маской, храня- щейся в регистре, после чего результат сравнивает- ся со значением из регистра 5. Использование мас- ки позволяет ставить точку прерывания, которая срабатывает при обращении к заданному диапазо- ну адресов. Регистр 10 Имя: TLBHI/PID. Назначение разрядов. Внутренний регистр сопроцессора, применяе- мый при работе команды TLB. За дополнительной информацией об этой команде следует обратиться к документации на процессор MIPS R3000. Регистр 11 Имя: ВСРМ. Назначение разрядов. Маска для точки прерывания при чтении ко- манд. Регистр используется аналогично регистру 9 (BDAM). Задаваемая маска необходима при обраще- нии процессора к памяти с целью чтения команды. 120
Архитектура и принцип работы. Центральный процессор Регистр 12 Имя: SR. Назначение разрядов. Регистр состояния системы. Код, записываемый сюда, определяет режим работы центрального про- цессора. Назначение разрядов в слове состояния следующее: D31 - работа сопроцессора 3 запрещена, если в этом разряде 0, и разрешена, если 1. В приставке PLAYSTATION сопроцессор 3 отсутствует, так что состояние разряда на работу системы не влияет. D30 - регламентирует работу сопроцессора 2 - сопроцессора графических вычислений (Graphics Transformation Engine). Если в разряде 0, функцио- нирование сопроцессора 2 запрещено, при .1 сопро- цессор включен. D29 - работа сопроцессора 1 запрещается при записи в разряд 0 и разрешается при 1. Сопроцес- сор 1 - это сопроцессор для вычислений с плаваю- щей точкой, который отсутствует в игровой при- ставке. D28 - изменение разряда необходимо для вы- полнения ряда привилегированных команд. На ре- ализацию обычных команд его состояние не влияет. Если в разряд записан 0, сопроцессор управления системой (сопроцессор 0) работает в режиме ядра; в противном случае он функционирует в пользова- тельском режиме. D27, D26 - не используются и должны быть равны 0. D25 - разряд определяет размещение многобайт- ных данных в памяти. Если он равен 0, то младший байт располагается по младшему адресу, если же установлен в 1, данные записываются в обратном порядке: старший байт по младшему адресу. D24, D23 - не используются и равны 0. D22 - если разряд сброшен, то векторы исключе- ний хранятся в ОЗУ, в противном случае — в ПЗУ. D21 - разряд устанавливается, если в программе встретились две команды TLB подряд. D20 - ошибка четности кэша. D19 - разряд показывает результат последней операции загрузки данных с изоляцией кэша дан- ных. Установлен, если необходимая информация содержалась в кэш-памяти. D18 - когда разряд установлен, в бит контроля четности кэша записывается 0. D17 - режим обмена в кэш-памяти. Если бит ра- вен 1, то кэш-память команд будет играть роль кэша данных, а кэш данных - кэша команд. D16 - кэш-память данных работает в обычном режиме, если в разряде установлен 0, и изолирует- ся от шин при 1. В обычном режиме все операции чтения и записи адресуются к кэш-памяти данных, а не напрямую к памяти приставки. D15 - D8 - маска прерываний. Если какой-нибудь разряд установлен, то при поступлении запроса на прерывание с приоритетом, соответствующим этому разряду, будет генерироваться исключение. Когда разряд сброшен, запрос на прерывание игнорируется. D7, D6 - не используются и равны 0. D5 - при возникновении исключения здесь со- храняется состояние разряда D3. D4 - при возникновении исключения здесь со- храняется состояние разряда D2. D3 - при возникновении исключения в разряде устанавливается 1. Команда г f е копирует сюда бит из разряда D5. D2 - при возникновении исключения разряд сбрасывается. Команда rf е копирует в него бит из разряда D4. D1 - 0 - нормальный уровень привилегий; 1 - уровень привилегий ядра. При возникновении ис- ключения этот разряд копируется в разряд D3. Ко- манда rfe помещает сюда бит из разряда D3. D0 - 0 — прерывания разрешены; 1 - все преры- вания запрещены. При возникновении исключения состояние этого разряда сохраняется в разряде D2. Команда rfe копирует сюда бит из разряда D2. Регистр 13 Имя: CAUSE. Назначение разрядов. Регистр информации об исключении доступен только для чтения и содержит информацию о по- следнем возникшем исключении. Назначение раз- рядов в регистре следующее: D31 - если разряд установлен в 1, то последнее исключение указывает на команду перехода, в этом случае при возврате из процедуры обработки ис- ключения надо пропустить четыре байта. D30 - не используется и равен 0. D29, D28 - номер сопроцессора, выполнение ко- манды которого вызвало возникновение исключе- ния, поскольку работа не была разрешена установ- кой соответствующего разряда в регистре SR. D27 - D16 - не используются и равны 0. D15 - D8 - сигналы прерываний. Разряд уста- навливается в 1, если поступил запрос на прерыва- ние. Разряды D8 и D9 доступны также и для записи, что позволяет генерировать запросы на прерывание программным путем, записывая нужное значение в регистр. Чтобы запрос был обработан процессо- ром, необходимо установить соответствующий раз- ряд в регистре SR. D7 - не используется и равен 0. D6 — D2 - код последнего исключения: 0 - запрос на прерывание; 1 - модификация tlb; 2 - загрузка tlb; ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 521
Архитектура и принцип работы. Центральный процессор 3 - запись tlb; 4 - ошибка адреса при чтении данных или выборке команды; 5 - ошибка адреса при записи (выход за пре- делы установленного сегмента или непра- вильное выравнивание данных); 6 - сбой на шине при выборке команды; 7 - сбой на шине при чтении данных; 8 - выполнена команда SYSCALL; 9 - точка останова; 10 - зарезервированная команда; 11 — сопроцессор недоступен; 12 - арифметическое переполнение. DI, D0 - не используются и сброшены в 0. Регистр 14 Имя: ЕРС. Назначение разрядов. Регистр содержит адрес возврата из процедуры обработки исключения. Если в регистре CAUSE разряд D32 установлен, возврат выполняется по ад- ресу ЕРС+4. Регистр 15 Имя: PRID. Назначение разрядов. Регистр доступен только для чтения и содержит идентификатор, определяющий тип и модель про- цессора. Идентификатор процессора возвращается в разрядах D15 - D8, а в разрядах D7 - D0 содер- жится номер версии. Старшие разряды регистра не используются и сброшены. Регистр 16 Имя: ERREG. Назначение. Рабочий регистр сопроцессора управления сис- темой. Как видно из описания внутренних регистров со- процессора управления системой, его функции в иг- ровой приставке SONY PLAYSTATION аналогичны функциям устройства управления микропроцессо- ров, использующихся в других приставках. Сопроцессор графических вычислений Перейдем к рассмотрению второго сопроцессора, называемого сопроцессором графических вычисле- ний (Graphics Transformation Engine, GTE). Он применяется при любых расчетах трехмер- ной графики, таких как перспективная проекция, вращение п масштабирование объектов, вычисле- ние освещенности и др. Для действий над вектора- ми и матрицами предназначен специальный набор операций, которые сопроцессор выполняет гораздо быстрее центрального процессора приставки. Со- процессор подключен к центральному процессору системы как СОР2 и не занимает адресов в про- странстве CPU. Для работы с ним в системе команд центрального процессора предусмотрены специ- альные команды. Знакомство с трехмерной графикой Прежде чем говорить о принципах функциониро- вания данного сопроцессора, системе команд и на- значении внутренних регистров, напомним основ- ные соотношения, используемые в трехмерной графике. Конечно, здесь мы представим лишь базо- вые понятия, дополнительную информацию можно найти в соответствующей литературе. Чтобы определить местоположение точки в трех- мерном пространстве, обычно используют декартову систему координат, изображенную на рис. 4.3. В этой системе координат любая точка в пространстве может быть определена набором из трех значений, отража- ющих ее позицию вдоль каждой из осей. Обычно они указываются в угловых скобках, например <1,2,3>. Рис. 4.3. Декартова система координат в трехмерном пространстве Точка - это базовый примитив трехмерной графи- ки, но строить изображение из точек слишком утоми- тельно. Поэтому нам потребуются вершины и грани. Вершины (vertices) представляют собой точки, которые используются для задания положения та- ких объектов, как грани и сети, в трехмерном про- странстве. Вершины, подобно точкам, указывают местонахождение, однако сами невидимы. Грань (face) - это плоский многоугольник, зада- ваемый своими вершинами. Каждая вершина уста- навливает угол грани. Все вершины грани должны находиться в одной и той же плоскости, формируя плоскую грань. Грань, вершины которой принадле- жат разным плоскостям, является неправильной, и нарисовать ее нереально. Простейшая грань определяется тремя вершина- ми. Получившаяся треугольная грань удобна для работы: во-первых, задать три вершины так, чтобы они не принадлежали одной и той же плоскости, невозможно, следовательно, грань всегда будет правильной; во-вторых, графический процессор использует именно треугольные грани, и, если вы 122
Архитектура и принцип работы. Центральный процессор укажете более сложные грани, для вывода на экран их все равно придется разделять на треугольники. Сеть (mesh) - это набор соединенных граней, как правило, описывающий один объект в сцене. Сеть может иметь одну или много граней. Попробуем смоделировать трехмерные объекты, создавая грани и объединяя их в сеть. Для этого нужно познакомиться с базовыми преобразования- ми трехмерных объектов. Преобразования рассмат- риваются применительно к отдельной точке. Если вы захотите выполнить такие операции для грани или сети, потребуется преобразовать каждую из вершин объекта. Вращение выполняют, умножая определяющий точку вектор на матрицу вращения. Матрица вра- щения - это матрица размером 3x3, которая состо- ит из трех единичных векторов, ортогональных друг к другу. Сведения о том, каким образом получают матрицы и как выполняется умножение вектора на матрицу, можно почерпнуть из учебника математи- ки. Здесь мы приведем только конечный результат: Вращение на угол А вокруг оси X 1 О О О cos A -sin А О sin A cos А Вращение на угол В вокруг оси У cosB 0 sinB О 1 О -sin В 0 cos В Вращение на угол С вокруг оси Z cosC -sinC О sin С cos С О О 0 1 Чтобы выполнить вращение вокруг нескольких осей одновременно, следует перемножить соответ- ствующие матрицы, причем результат зависит от порядка множителей. К сожалению, сопроцессор графических вычислений не в состоянии вычис- лять тригонометрические функции - этим должен заниматься центральный процессор системы. Перемещение объекта осуществляется путем сложения вектора, задающего вершину, с вектором, определяющим направление и дальность передви- жения. Еще раз напоминаем, что в операциях с мат- рицами и векторами очень важен порядок их вы- полнения. Изменив последовательность операндов, вы получите совсем другой результат. Теперь, ознакомившись с основными математи- ческими понятиями, перейдем к рассмотрению их реализации в сопроцессоре игровой приставки SONY PLAYSTATION. Регистры сопроцессора графических вычислений Сопроцессор графических вычислений игровой при- ставки SONY PLAYSTATION имеет 64 внутренних регистра (32 управляющих и 32 регистра данных), которые используются при расчетах. Рассмотрим сначала управляющие регистры, предназначенные для хранения различных констант. Регистр О Имя: R11R12. Назначение. Элементы 11 и 12 матрицы вращения. Элемент 12 занимает разряды D32 - D16, а элемент И - разря- ды D15 - DO. Числа хранятся в формате (1, 3, 12): один знаковый разряд, три разряда для целой части числа и 12 разрядов для дробной. Регистр 1 Имя : R13R21. Назначение. Элементы 13 и 21 матрицы вращения. Эле- мент 21 занимает разряды D32 - D16, а элемент 13 - разряды D15 - DO. Числа хранятся в форма- те (1, 3, 12). Регистр 2 Имя: R22R23. Назначение. Элементы 22 и 23 матрицы вращения. Элемент 23 занимает разряды D32 - D16, а элемент 22 - разря- ды D15 - DO. Числа хранятся в формате (1, 3,12). Регистр 3 Имя: R31R32. Назначение. Элементы 31 и 32 матрицы вращения. Эле- мент 32 занимает разряды D32 - D16, а элемент 31 - разряды D15 - DO. Числа хранятся в форма- те (1, 3, 12). Регистр 4 Имя: R33. Назначение. Элемент 33 матрицы вращения. Занимает разря- ды D15 - DO. Старшие 16 разрядов регистра не ис- пользуются. Число хранится в формате (1, 3, 12). Регистр 5 Имя: TRX. Назначение. Элемент X вектора перемещения. Число хранит- ся в формате (1, 31, 0). Регистр 6 Имя: TRY. Назначение. Элемент Y вектора перемещения. Число хранит- ся в формате (1, 31, 0). Регистр 7 Имя: TRZ. Назначение. Элемент Z вектора перемещения. Число хранит- ся в формате (1, 31, 0). ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 123
Архитектура и принцип работы. Центральный процессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION Регистр 8 Имя: L11L12. Назначение. Элементы 11 и 12 матрицы освещения. Элемент 12 занимает разряды D32 - D16, а элемент 11 - разря- ды D15 - DO. Числа хранятся в формате (1, 3, 12): один знаковый разряд, три разряда для целой час- ти числа и 12 разрядов для дробной. Регистр 9 Имя: L13L21. Назначение. Элементы 13 и 21 матрицы освещения. Элемент 21 занимает разряды D32 - D16, а элемент 13 - разряды D15 - DO. Числа хранятся в формате (1,3, 12). Регистр 10 Имя: L22L23. Назначение. Элементы 22 и 23 матрицы освещения. Элемент 23 занимает разряды D32 - D16, а элемент 22 - разряды D15 - D0. Числа хранятся в формате (1,3, 12). Регистр 11 Имя: L31L32. Назначение. Элементы 31 и 32 матрицы освещения. Элемент 32 занимает разряды D32 - D16, а элемент 31 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12). Регистр 12 Имя: L33. Назначение. Элемент 33 матрицы освещения. Занимает раз- ряды D15 - D0. Старшие 16 разрядов регистра не используются. Число хранится в формате (1,3,12). Регистр 13 Имя: RBK. Назначение. Красная составляющая цвета фона. Число хра- нится в формате (1, 19, 12). Ретстр 14 Имя: GBK. Назначение. Зеленая составляющая цвета фона. Число хра- нится в формате (1, 19, 12). Ретстр 15 Имя: ВВК. Назначение. Синяя составляющая цвета фона. Число хранит- ся в формате (1, 19, 12). Регистр 16 Имя: LR1LR2. Назначение. Элементы 1 и 2 красной составляющей цветовой матрицы освещения. Элемент 2 занимает разряды D32 - D16, а элемент 1 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12): один знаковый раз- ряд, три разряда для целой части числа и 12 разря- дов для дробной. Регистр 17 Имя: LR3LG1. Назначение. Элемент 3 красной составляющей и элемент 1 зе- леной составляющей цветовой матрицы освещения. Зеленая составляющая занимает разряды D32 - D16, а красная - разряды D15 - D0. Числа хранят- ся в формате (1, 3, 12). Регистр 18 Имя: LG2LG3. Назначение. Элементы 2 и 3 зеленой составляющей цветовой матрицы освещения. Элемент 3 занимает разряды D32 - D16, а элемент 2 - разряды D15 - D0. Числа хранятся в формате (1,3, 12). Регистр 19 Имя: LB1LB2. Назначение. Элементы 1 и 2 синей составляющей цветовой матрицы освещения. Элемент 2 занимает разряды D32 - D16, а элемент 1 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12). Регистр 20 Имя: LB3. Назначение. Элемент 3 синей составляющей цветовой матри- цы освещения. Занимает разряды D15 - D0. Стар- шие 16 разрядов регистра не используются. Число хранится в формате (1, 3, 12). Регистр 21 Имя: RFC. Назначение. Красная составляющая общей освещенности. Число хранится в формате (1, 27, 4). Регистр 22 Имя: GFC. Назначение. Зеленая составляющая общей освещенности. Число хранится в формате (1, 27, 4). 124
Архитектура и принцип работы. Центральный процессор Регистр 23 Имя: BFC. Назначение. Синяя составляющая общей освещенности. Чис- ло хранится в формате (1, 27, 4). Регистр 24 Имя: OFX. Назначение. Смещение экрана по оси X. Регистр 25 Имя: OFY. Назначение. Смещение экрана по оси Y. Регистр 26 Имя: FL Назначение. Расстояние до плоскости проекции. Число хра- нится в разрядах D16 - DO в формате (0, 16, 0). Регистр 27 Имя: DQA. Назначение. Параметр, задающий глубину сцены. Число хра- нится в разрядах D16 - D0 в формате (0, 7, 8). Регистр 28 Имя: DQB. Назначение. Параметр, задающий глубину сцены. Число хра- нится в разрядах D16 - D0 в формате (0, 7, 8). Регистр 29 Имя: ZSF3. Назначение. Множитель Z3, обычно равен 1/3. Число хранит- ся в разрядах D16 - D0 в формате (1, 3, 12). Регистр 30 Имя: ZSF4, Назначение. Множитель Z4, обычно равен 1/4. Число хранит- ся в разрядах D16 - D0 в формате (1, 3, 12). Регистр 31 Имя: FLAG. Назначение. Состояние отдельных разрядов регистра сообща- ет о результате выполнения последней операции сопроцессора и о возникновении ошибок. Теперь рассмотрим назначение 32 регистров дан- ных. Эти регистры служат для хранения данных, 'г предназначенных для обработки, и результатов. Регистр 0 Имя: VXY0. Назначение. В регистре хранятся значения координат х и у для первого вектора. Координата у записывается в разряды D31 - D16, а координата х-в разряды D15 - D0. Числа могут храниться в формате (1, 3, 12) или (1, 15, 0). Регистр 1 Имя: VZ0. Назначение. В регистре хранится значение координаты z для первого вектора. Координата записывается в разряды D15 - D0 в формате (1, 3, 12) или (1, 15, 0). Стар- шие 16 разрядов регистра не используются. Регистр 2 Имя: VXY1. Назначение. В регистре хранятся значения координат х и у для второго вектора. Координата у записывается в разряды D31 - D16, а координата х-в разряды D15 - D0. Числа могут храниться в формате (1, 3, 12) или (1, 15, 0). Регистр 3 Имя: VZ1. Назначение. В регистре хранится значение координаты z для второго вектора. Координата записывается в раз- ряды D15 - D0 в формате (1, 3, 12) или (1, 15, 0). Старшие 16 разрядов регистра не используются. Регистр 4 ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION Имя: VXY2. Назначение. В регистре хранятся значения координат х и у для третьего вектора. Координата у записывается в разряды D31 - D16, а координата х-в разряды D15 - D0. Числа могут храниться в формате (1, 3, 12) или в формате (1, 15, 0). Регистр 5 Имя: VZ2. Назначение. В регистре хранится значение координаты z для третьего вектора. Координата записывается в раз- ряды D15 - D0 в формате (1, 3, 12) или (1, 15, 0). Старшие 16 разрядов регистра не используются. 125
Архитектура и принцип работы. Центральный процессор Регистр 6 Имя: RGB. Назначение. В регистре хранится код цвета. Разряды D31 - D24 не используются, в разрядах D23 - D16 содержится код для синей составляющей, в разрядах D15 - D8 - для зеленой и в разрядах D7 - DO - для красной. Регистр 7 Имя: OTZ. Назначение. В младших 16 разрядах регистра хранится сред- нее значение z в формате (0, 15, 0). Регистр досту- пен только для чтения. Регистр 8 Имя: IR0. Назначение. Регистр для промежуточного результата. В стар- ших 16 разрядах содержится копия знакового бита, а в младших - число в формате (1,3, 12). Регистр 9 Имя: IR1. Назначение. Регистр для промежуточного результата. В стар- ших 16 разрядах содержится копия знакового бита, а в младших - число в формате (1, 3, 12). Регистр 10 Имя: IR2. Назначение. Регистр для промежуточного результата. В стар- ших 16 разрядах содержится копия знакового бита, а в младших — число в формате (1,3, 12). Регистр 11 Имя: IR3. Назначение. Регистр для промежуточного результата. В стар- ших 16 разрядах содержится копия знакового бита, а в младших - число в формате (1, 3, 12). Регистр 12 Имя: SXY0. Назначение. Элемент очереди для хранения экранных коорди- нат х и у. Координата у хранится в разрядах D31 - D16 в формате (1,15,0), а координата х — в разрядах D15 - D0 в аналогичном формате. Очередь работает по принципу FIFO, то есть сначала считывается пер- вый записанный элемент. Регистр 13 Имя: SXY1. Назначение. Элемент очереди для хранения экранных коор- динат х и у. Регистр 14 Имя: SXY2. Назначение. Элемент очереди для хранения экранных коор- динат х и у. Регистр 15 Имя: SXYP. Назначение. Элемент очереди для хранения экранных коор- динат х и у. Регистр 16 Имя: SZ0. Назначение. Элемент очереди для хранения экранной коорди- наты z. Она хранится в разрядах D15 - D0 в форма- те (0,16, 0) и всегда является положительной. Стар- шие разряды регистра не используются. Регистр 17 Имя: SZ1. Назначение. Элемент очереди для хранения экранной коор- динаты z. Регистр 18 Имя: SZ2. Назначение. Элемент очереди для хранения экранной коор- динаты z. Регистр 19 Имя: SZP. Назначение. Элемент очереди для хранения экранной коор- динаты z. Регистр 20 Имя: RGB0. Назначение. Элемент очереди для хранения цветовых кодов. Формат хранения аналогичен используемому в ре- гистре 6 (RGB). Регистр 21 Имя: RGB1. Назначение. Элемент очереди для хранения цветовых кодов. Формат хранения аналогичен используемому в ре- гистре 6 (RGB). Регистр 22 Имя: RGB2. Назначение. Элемент очереди для хранения цветовых кодов. Формат хранения аналогичен используемому в ре- гистре 6 (RGB). 126
Архитектура и принцип работы. Центральный процессор - wiMiSjas^^JWs ияда-гт-,:™.® / . • iK«ae*s™wsiss<si^ Регистр 23 Имя: RES1. Назначение. Регистр не используется и недоступен для про- грамм. Регистр 24 Имя: МАСО. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 25 Имя: МАС1. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 26 Имя: МАС2. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 27 Имя: МАСЗ. Назначение. Регистр хранения результата. Числа содержатся в формате (1,31,0). Регистр 28 Имя: IRGB. Назначение. Регистр ввода 15-разрядного кода цвета. В ре- гистр записывается 15-разрядный код, при этом значение синей составляющей определяется раз- рядами D14 - D10, значение зеленой - разряда- ми D9 - D5, а значение красной - разрядами D4 - DO. Сразу после сохранения значения каждой со- ставляющей цвета автоматически преобразуются в формат (1, 11, 4) и помещаются во внутренние регистры сопроцессора (IR1, IR2 и IR3). Регистр доступен только для записи. Регистр 29 Имя: ORGB. Назначение. Регистр чтения 15-разрядного кода цвета. При чтении из этого регистра содержимое внутренних регистров IR1, IR2 и IR3 автоматически преобра- зуется в 5-разрядные коды для цветовых составля- ющих, из которых получается значение в формате, аналогичном используемому в регистре 28 (IRGB). Регистр доступен только для чтения. Регистр 30 Имя: LZCS. , Назначение. Регистр данных для счетчика ведущих нулей. Сюда записывается число в формате (1, 31, 0), а результат возвращается в регистре 31 (LZCR). Ре- гистр доступен только для записи. Регистр 31 Имя: LZCR. Назначение. Счетчик ведущих нулей. При чтении из этого ре- гистра возвращается 6-разрядное число, которое указывает количество ведущих нулей в числе, запи- санном в регистр 30 (LZCS). Если число в регис- тре 30 отрицательно, то передается число ведущих единиц. Регистр доступен только для чтения. После приведенного описания регистров сопро- цессора графических вычислений игровой пристав- ки SONY PLAYSTATION следует дать несколько пояснений. Во-первых, чтобы лучше разобраться с форматами хранения данных, нужно обратиться к рис. 4.4. Во-вторых, необходимо учитывать, что не- которые регистры образуют очереди. Работа с этими очередями ведется таким образом: когда вычисля- ется очередное значение, оно помещается в по- следний регистр очереди, а все элементы очереди 1 3 12 Зной Целая часть Дробная чость 15 14 12 11 Знак Целое число 3’ 30 О Формот (1, 31. О) 1 27 4 Формот (1. 3. 12) 1 19 12 Знак Целая часто Дробная часть 31 30 12 11 0 Формот (1, 19. 12) 1 15 16 Знак Целая чость Дробная часть 31 30 16 15 О Формот (1. 15. 16) Знак Целая чость Дробная чость 31 30 4 3 0 Формот (1, 19. 12) Целое число 15 О Формат (О. 16, О) Рис. 4.4. Форматы данных для сопроцессора графических вычислений ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 127
Архитектура и принцип работы. Адресное пространство ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION сдвигаются на одну позицию к началу. Например, новое значение координат х и у будет помещено в регистр SXYP. Значение, которое здесь хранилось, копируется в регистр SXY2, значение из регистра SXY2 - в регистр SXY1 и значение из регистра SXY1 - в регистр SXY0. Работа с сопроцессором графических вычислений Ниже рассматриваются принципы взаимодействия ядра центрального процессора игровой приставки SONY PLAYSTATION и сопроцессора графических вычислений. С этой целью в систему команд цен- трального процессора введены шесть команд для об- мена данными и одна команда для передачи сопро- цессору кода выполняемой операции. Команды LWC2 и SWC2 позволяют загружать дан- ные из памяти в регистры данных сопроцессора и за- писывать содержимое этих регистров в память. Ко- манды МТС 2 и MFC 2 предназначены для передачи чисел из регистров центрального процессора в регис- тры данных сопроцессора и обратно. Обмен информацией между управляющими ре- гистрами сопроцессора графических вычислений и регистрами центрального процессора осущест- вляется с помощью команд СТС2 и CFC2. Команда СОР2 служит для пересылки сопроцес- сору команд, которые необходимо выполнить. Пос- ле нее указывается 25-разрядный код команды со- процессора графических вычислений. Перед тем как центральный процессор обратит- ся к сопроцессору графических вычислений, раз- ряд 30 в регистре SR сопроцессора управления сис- темой следует установить в 1, в противном случае обращение к сопроцессору вызовет возникновение исключения. Команды сопроцессора графических вычислений нельзя использовать в процедурах об- служивания исключений и запросов на прерывание. Если очередная команда обращения к сопроцес- сору будет выполнена центральным процессором до того, как сопроцессор закончит обработку преды- дущей команды, центральный процессор остановит- ся, ожидая окончания работы сопроцессора. Система команд сопроцессора графических вычислений Ниже мы расскажем о системе команд сопроцес- сора. Знакомство начнем с формата команды, изоб- раженного на рис. 4.5. Любая команда представляет собой 25-разрядное двоичное число. В этом числе выделяется несколько полей, состояние разрядов в которых может влиять на местоположение операндов команды и алгоритм вычисления. Опишем поля более детально: sf - 0 - вычисления; 1 - вычисления со значени- ями из регистров IR; шх - 00 - умножение на матрицу вращения; 01 - умножение на матрицу освещенности; 10 - умножение на матрицу цвета; 11 - не исполь- зуется; v - 00 - операнд в векторе 10; 01 - операнд в век- торе II; 10 - операнд в векторе 12; И - опе- ранд в регистре IR; cv - 00 - прибавление вектора перемещения TR; 01 - прибавление вектора фонового цвета ВК; 10 - прибавление вектора удаленного освещения FAR (работает неправильно); 11 - прибавление вектора отсутствует; 1m - 0 - нет ограничений на результат; 1 - резуль- тат ограничен нулем. Более подробные сведения о системе команд со- процессора графических вычислений игровой при- ставки SONY PLAYSTATION можно найти в In- ternet. 4.2.3. Адресное пространство В этом разделе описывается распределение памяти, установленной в игровой приставке SONY PLAY- STATION. Блоки, рассмотрению которых посвяще- ны следующие разделы, например видеопамять, здесь представлены очень кратко. ПЗУ, имеющееся в иг- ровой приставке, и записанная в нем операционная система анализируются более развернуто, посколь- ку эти сведения необходимы для понимания функ- ционирования основных узлов устройства. Итак, в приставке SONY PLAYSTATION память применяется центральным процессором, видеопро- цессором, звуковым процессором и процессором управления приводом CD-ROM. К центральному процессору подключено ПЗУ, в котором записана операционная система, и 2 Мб оперативной памяти, которые используются про- граммами. ПЗУ и ОЗУ вместе составляют основ- ную память игровой приставки. Оперативная память располагается в самом начале адресного простран- ства (адреса 0000000Oh - 002 00 000h), однако часто в программах можно увидеть адрес, начина- ющийся с 8 Oh. Дело в том, что центральный процес- сор преобразует логические 32-разрядные адреса 24 20 1918 1716 1514 1312 11 10 9 Код комонды SF MX V CV Im Код комондо Рис. 4.5. Формат команды сопроцессора графических вычислений 128
Архитектура и принцип ра боты. Адресное .пространство в физические адреса установленной памяти. При этом адрес, начинающийся с 8 Oh, разрешает рабо- ту кэш-памяти команд. Следовательно, память рас- полагается и по адресам 8000000 Oh- 8020000Oh. Первые 64 Кб задействуются ядром операционной системы, так что первый доступный для размеще- ния программы адрес - 8001000Oh. Регистры различных контроллеров игровой при- ставки включены в общее адресное пространство, где для них имеется отдельная область. Эти регис- тры не являются частью ОЗУ или ПЗУ, но при про- граммировании работа с ними ничем не отличается от работы с памятью. Видеопроцессор для хранения информации о формируемом изображении использует видео- ОЗУ объемом 1 Мб. Оно не является частью обще- го адресного пространства и доступно только через регистры видеопроцессора или посредством кон- троллера прямого доступа к памяти. Звуковой процессор также применяет собствен- ную память объемом 256 Кб, одна часть которой зарезервирована для звуковых данных, поступаю- щих с CD-ROM, а другая хранит данные, необхо- димые внутренним схемам звукового процессора при формировании аудиосигналов. Еще одно ОЗУ объемом 256 Кб подключено к контроллеру управления приводом CD-ROM. Эта память играет роль буфера, ускоряющего обра- щение к CD-ROM из программ. Рассмотрим более подробно операционную сис- тему, которая записана в ПЗУ, игровой приставки. Операционная система SONY PLAYSTATION Операционная система приставки SONY PLAY- STATION представляет собой 32-разрядную много- задачную операционную систему, предназначенную для управления аппаратурой игровой приставки, работы с файловой системой на компакт-диске и осуществления межпоточного взаимодействия в программах. Вызовы функций операционной системы произ- водятся через точку входа с адресом В Oh. Номер функции передается через регистр 11 центрально- го процессора. Таким образом, для обращения к функции операционной системы необходимо за- писать ее номер в регистр 11 и выполнить команду jal $000000В0. Функция openevent Номер: 0 8h. Параметры: аО - класс события; al - спецификатор события; а2 — режим события; аЗ - адрес функции, которая будет выпол- няться при возникновении события. Результат: v0 - дескриптор события или -1, если про- изошла ошибка. Описание. Данная функция создает структуру описателя собы- тия и добавляет' ее в таблицу обрабатываемых собы- тий. Параметры, помещаемые в регистры АО - А2, рас- сматриваются ниже. Возвращаемый дескриптор события в дальнейшем используется при обращении к другим функциям. Класс события определяет, какое устройство вы- зывает возникновение данного события. Старший байт задает группу событий: FFh - события межпоточного взаимодействия; F4h - события системы ввода/вывода; F3h - пользовательские события; F2h - счетчики; F0h - события аппаратуры. Младшие три байта позволяют более детально охарактеризовать событие в зависимости от его группы. Для событий, возникающих по сигналам от аппаратуры, возможны следующие значения: F0000001h- прерывание по кадровому синхро- импульсу (VBLANK); F0000002h- сигнал от видеопроцессора (GPU); F0000003h- сигнал от дешифратора CD-ROM; F0000004h - контроллер прямого доступа к па- мяти; F0000005h - RTC0; F0000006h - RTC1; F0000007h - RTC2; F0000008h- игровой пульт; F0000009h- звуковой процессор: FOOOOOOAh - параллельный порт; FOOOOOOBh - последовательный порт; FOOOOOlOh- исключение; FOOOOOllh- карта памяти (memory card); F0000012h - карта памяти (memory card); F0000013h - карта памяти (memory card). Для событий таймера в старшем байте, как уже упоминалось, содержится число F2h, а в младшем байте — номер канала таймера от 0 до 3. Система ввода/вывода использует события, вы- зываемые картой памяти memory card с классом F4 0 0 0 0 0lh и математической библиотекой с клас- сом F4000002h. Спецификатор служит для более точного опреде- ления действия, вызвавшего возникновение события. Наиболее часто применяются следующие специфи- каторы: 0 0 0 lh - счетчик равен нулю; 0002h - работа прервана; 0004h - конец ввода/вывода; 0008h - файл закрыт; 0010b - подтверждение приема команды; 002 Oh - выполнение команды завершено; 129 -32)
Архитектура и принцип работы. Адресное пространство О04Oh - данные готовы; 0 0 8 Oh - конец данных; 010 Oh - время истекло; 020Oh - неизвестная команда; 040Oh - конец буфера чтения; 0800h - конец буфера записи; lOOOh - прерывание; 2 0 0 Oh - новое устройство; 4000h - команда syscall; 03 01h - ошибка в библиотеке libmat'h; 03 02h - неправильный диапазон в библиотеке libmath. И наконец, режим события определяет тип вы- зываемого обработчика. Если этот параметр равен lOOOh, обслуживается запрос на прерывание или исключение; если же параметр равен 200Oh, сразу вызывается обработчик события. Функция closeevent Номер: 09h. Параметры: аО - дескриптор события. Результат: v0 - 1 при удаче, 0 при ошибке. Описание. Функция удаляет структуру описателя события из таблицы обрабатываемых событий. Функция enableevent Номер: OCh. Параметры: аО - дескриптор события. Результат: v0 - 1 при удаче, 0 при ошибке. Описание. Функция разрешает обработку события из табли- цы, определяемого заданным дескриптором. Чтобы в программе могло обслуживаться какое-либо со- бытие, необходимо с помощью функции open- event сначала создать запись о нем, а затем по- средством функции enableevent разрешить его обработку. Функция disableevent Номер: ODh. Параметры: аО - дескриптор события. Результат: v0 - 1 при удаче, 0 при ошибке. Описание. Функция запрещает обслуживание события с ука- занным дескриптором. Из таблицы событий запись не удаляется, так что в дальнейшем можно снова разрешить обработку этого события, вызвав функ- цию enableevent, или удалить структуру описа- ния события функцией closeevent. Функция open Номер: 32h. Параметры: аО - указатель на имя файла; al - режим работы с файлом. Результат: v0 - дескриптор файла или -1 при ошибке. Описание. Функция открывает файл (на компакт-диске или на устройстве memory card) для дальнейшей работы с ним. Игровая приставка SONY PLAYSTATION мо- жет использовать одновременно не более 16 файлов. Режим задают следующие разряды: DO - 1 для чтения. D1 - 1 для записи. D9 - 1 для создания нового файла. D16 - D31 - число блоков в карте памяти (me- mory card), резервируемое для нового файла. Возвращаемый функцией дескриптор файла при- меняется другими функциями. Функция Iseek Номер: 33h. Параметры: аО - дескриптор файла; al - смещение; а2 - база. Описание. Функция перемещает указатель, определяющий текущую позицию доступа к файлу, на число бай- тов, заданное в регистре al. Если в регистре а2 за- писан 0, то смещение вычисляется относительно начала файла, если 1 - относительно имеющейся позиции указателя. Никаких проверок на выход за границы файла не производится. Функция read Номер: 34h. Параметры: аО - дескриптор файла; al - указатель на буфер для считанных дан- ных; al - число байтов, которые будут прочитаны. Результат: v0 - число реально прочитанных байтов или -1 при ошибке. Описание. Функция читает данные из открытого файла и записывает их в память по указанному адресу. Функция write Номер: 35h. Параметры: аО - дескриптор файла; al - указатель на записываемые данные; а2 - число записываемых байтов. 130
Архитектура и принцип работы. Внутренние контроллеры Результат: vO - число реально записанных байтов или -1 при ошибке. Описание. Функция записывает данные в карту memory card. При попытке сохранить информацию на CD- ROM в качестве результата будет возвращен 0. Функция close Номер: 3 6h. Параметры: аО - дескриптор файла. Результат: vO - дескриптор файла или -1 при ошибке. Описание. Функция закрывает определяемый дескрипто- ром файл. Разумеется, функций в ПЗУ игровой приставки гораздо больше, чем описано здесь. В разделе при- веден только минимальный набор, который позво- лит разобраться с излагаемым далее материалом, а также понимать тексты программ. 4.2.4. Внутренние контроллеры Внутренние контроллеры игровой приставки пере- сылают данные, формируют запросы на прерыва- ние и управляют состоянием аппаратуры. В отли- чие от сопроцессоров, для работы с контроллерами не предусмотрено специальных команд; с точки зрения программирования они представляют собой несколько ячеек в общем адресном пространстве приставки. Ниже мы рассмотрим программную архитекту- ру таймера, контроллера прерываний и контролле- ра прямого доступа к памяти. Контроллер прерываний Контроллер прерываний формирует запросы на об- служивание прерываний, которые в дальнейшем будут обрабатываться сопроцессором управления системой. Контроллер использует два регистра садресами lF801070hn lF801074h. Разряды ре- гистров управляют следующими прерываниями: D0 - прерывание по кадровому синхроимпульсу; D1 - прерывание от графического процессора: D2 - прерывание от контроллера CD-ROM; D3 - прерывание от контроллера прямого досту- па к памяти; D4 - прерывание от канала 0 таймера; D5 - прерывание от канала 1 таймера; D6 - прерывание от канала 2 таймера; D7 - прерывание от пульта; D8 - прерывание от последовательного порта; D9 - прерывание от звукового процессора; D10 - прерывание от параллельного порта. Если вы сравните приведенный перечень со спис- ком классов событий, возникающих при работе с ап- паратурой, то увидите, что каждому типу прерывании соответствует определенный класс события. Чтобы процессор мог обслуживать запросы на прерывания, требуется разрешить формирование сигнала, поместив соответствующий разряд в ре- гистр lF801074h, и допустить обработку запросов сопроцессором управления системой, для чего уста- новить разряд D0 и один из разрядов D15 - D8, со- ответствующий данному прерыванию в регистре SR сопроцессора управления системой. После ини- циализации аппаратной части посредством функции openevent необходимо создать запись в таблице об- рабатываемых событий с соответствующим классом и, наконец, вызвать функцию enableevent, чтобы разрешить обслуживание данного события. Перед завершением программа обслуживания прерывания должна передать контроллеру сигнал о своем завершении. Для этого необходимо сбро- сить соответствующий разряд в регистре подтверж- дения прерывания с адресом lF801070h. В про- тивном случае дальнейшая генерация запросов для данного прерывания будет блокирована. Таймер Таймер обычно применяется для синхронизации работы программы и различных блоков игровой приставки, а также для измерения временных ин- тервалов с целью привязки функционирования процессора к реальному времени. Всего в таймере предусмотрено три независимых канала. Как отдельный таймер можно также ис- пользовать запрос прерывания по кадровому син- хроимпульсу. На вход каждого из каналов таймера поступает опорный сигнал с фиксированной частотой, кото- рая задается следующим образом: канал 0 - частота формирования точек на экране; канал 1 - частота строчной синхронизации; канал 2 - частота процессора, деленная на 8. При поступлении тактового импульса показания внутреннего 16-разрядного счетчика таймера уве- личиваются на 1. Когда счетчик достигает значения FFFFh или значения, записанного в управляющем регистре, соответствующий канал таймера генери- рует запрос на прерывание. С точки зрения программирования канал тайме- ра представляет собой три регистра, о которых по- дробно рассказывается ниже. Счетчик канала 0 Адрес: IFSOllOOh. Назначение разрядов. Текущее 16-разрядное значение внутреннего счет- чика канала 0. 131
Архитектура и принцип работы. Внутренние контроллеры ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION Управляющий регистр канала О Адрес: lF801104h. Назначение разрядов: DO - управление состоянием таймера: О - таймер включен; 1 - таймер в режиме ожидания. D3 - определение режима счета: О - счет до FFFFh; 1 - счет до заданного значения. D4, D6 - разряды должны быть равны 1, чтобы таймер формировал запрос на прерывание. D8, D9 - код опорной частоты: 00 - опорная частота 33,872 МГц; 01 - опорная частота равна частоте формиро- вания точек изображения; 10, 11 - не используются. Регистр граничного значения канала 0 Адрес: lF801108h. Назначение разрядов. Если разряд D3 в управляющем регистре установ- лен, то счет ведется до значения, заданного в этом регистре. Счетчик канала 1 Адрес: lF801110h. Назначение разрядов. Текущее 16-разрядное значение внутреннего счет- чика канала 1. Управляющий регистр канала 1 Адрес: lF801114h. Назначение разрядов: D0 - управление состоянием таймера: 0 - таймер включен; 1 - таймер в режиме ожидания. D3 - определение режима счета: 0 - счет до FFFFh; 1 - счет до заданного значения. D4, D6 - разряды должны быть равны 1, чтобы таймер формировал запрос на прерывание. D8, D9 - код опорной частоты: 00 - опорная частота 33,872 МГц; 01 - опорная частота равна частоте строчной развертки; 10, И - не используются. Регистр граничного значения канала 1 Адрес: lF801118h. Назначение разрядов. Если разряд D3 в управляющем регистре уста- новлен, счет ведется до значения, заданного в этом регистре. Счетчик канала 2 Адрес: lF80112 0h. Назначение разрядов. Текущее 16-разрядное значение внутреннего счет- чика канала 2. Управляющий регистр канала 2 Адрес: lF801124h. Назначение разрядов: D0 - управление состоянием таймера: 0 - таймер включен; 1 - таймер в режиме ожидания. D3 - определение режима счета: 0 - счет до FFFFh; 1 - счет до заданного значения. D4, D6 - разряды должны быть равны 1, чтобы таймер формировал запрос на прерывание. D8, D9 - код опорной частоты: 00 - опорная частота 33,872 МГц; 10 - 4,234 МГц; 01, И - не используются. Регистр граничного значения канала 2 Адрес: lF80112 8h. Назначение разрядов. Если разряд D3 в управляющем регистре уста- новлен, счет ведется до значения, заданного в этом регистре. Чтобы использовать таймер в ваших програм- мах, потребуется выполнить следующие действия: 1. Инициализировать таймер, поместив О в регистр счетчика и регистр режима. 2. Записать в регистр граничного значения необходи- мый предел для счета, затем ввести код требуемо- го режима в регистр управления. 3. Разрешить формирование запроса на прерывание, установив соответствующие разряды в регистрах контроллера прерываний (за прерывания от счет- чиков отвечают разряды D4 - D6). 4. Создать запись в таблице событий, вызвав функцию openevent. В качестве параметров указать класс события F200 00 00h (если используется канал 0), F2oooooih (для канала 1) или F2000002h (для ка- нала 2),спецификаторсобытия о о о21т (прерывайие) и режим ЮООЬ (обработка прерывания). В регис- тре аЗ задать адрес функции, которая будет обслу- живать данное прерывание. 5. Разрешить обработку только что созданного собы- тия, вызвав Функцию enableevent. 6.Убедиться, что сопроцессор управления системой будет принимать поступающие запросы на преры- вание. Для этого разряды D10 и DO в регистре SR должны быть установлены. 132
Архитектура и принцип работы. Внутренние контроллеры Все необходимые действия выполнены. Ваш об- работчик должен восстанавливать значения регис- тров и завершаться командой j г га. Контроллер прямого доступа к памяти Контроллер прямого доступа к памяти позволяет быстро передавать большие объемы данных между различными блоками системы без участия цен- трального процессора. Подобное устройство имеет- ся практически в каждой игровой приставке и ис- пользуется во всех программах. Контроллер ПДП SONY PLAYSTATION может обслуживать семь независимых каналов прямого доступа к памяти, каждый из которых характеризу- ется собственной функцией: канал 0 - вход декодера MDEC; канал 1 - выход декодера MDEC; канал 2 - графический процессор; канал 3 - CD-ROM; канал 4 - звуковой процессор; канал 5 - параллельный порт; канал 6 - очистка очереди. С точки зрения программирования контроллер прямого доступа к памяти SONY PLAYSTATION представляет собой два общих регистра управле- ния и по три регистра для каждого из каналов. Об- щие регистры управления располагаются по адресам lF8010F0h и 1F8010F4L. Регистры канала 0 зани- мают адреса 1F80108 Oh, lF801084hn lF801088h, канала 1 - lF801090h, lF801094h иlF801098h, канала 2 - lF8010A0h, lF8010A4h и lF8010A8h и так далее до канала 6. Названные регистры аналогич- ны, поэтому ниже мы опишем их только для канала 0. Регистр разрешения работы каналов Адрес: IFSOlOFOh. Назначение разрядов. Разряды регистра разрешают или запрещают рабо- ту отдельных каналов прямого доступа к памяти. Что- бы канал можно было использовать, надлежащий разряд нужно установить в 1. Соответствие разря- дов регистра номерам каналов следующее: D3 - канал 0; D7 - канал 1; D11 - канал 2; D15 - канал 3; D19 - канал 4; D23 - канал 5; D27 - канал 6; Регистр управления прерываниями Адрес: lF8010F4h. Назначение разрядов. Разряды регистра управляют генерацией запро- сов на прерывание от контроллера ПДП. Чтобы для выбранного канала прямого доступа к памяти фор- мировался запрос на прерывание, здесь нужно уста- новить определенный разряд: D16 для канала 0, D17 для канала 1, D18 для канала 2 и т.д. После обслу- живания запроса программа должна установить бит подтверждения обработки: D24 для канала 0, D25 для канала 1, D26 для канала 2 и т.д. Это необходи- мо, чтобы запрос на прерывание мог генерироваться повторно. Разряды D23 и D31 всегда должны быть равны 1. Далее рассматриваются регистры, предназначен- ные для управления отдельным каналом прямого доступа к памяти. Вместо х следует подставлять со- ответствующую цифру базового адреса (8 для кана- ла 0; 9 для канала 1; А для канала 2 и т.д.). Регистр базового адреса Адрес: lF8010x0h. Назначение разрядов. В регистр записывается начальный адрес блока, который будет передаваться или приниматься по- средством прямого доступа к памяти. Регистр размера блока Адрес: lF8010x4h. Назначение разрядов. В разряды D15 - D0 регистра записывается раз- мер передаваемого блока в словах, а в разряды D31 - D16- количество таких блоков. Убедитесь, что устройство, которому пересылаются данные, способ- но принять блоки заданной величины. Например, графический и звуковой процессоры игровой при- ставки могут получать блоки размером не более 16 слов. Регистр управления каналом Адрес: lF8010x8h. Назначение разрядов. Регистр предназначен для управления отдель- ным каналом прямого доступа к памяти. D24 - канал свободен, если разряд сброшен. Пе- редача данных начнется, когда сюда будет записа- на 1. Разряд автоматически сбрасывается после за- вершения пересылки данных. D10 - если разряд установлен, передается свя- занный список данных. Этот режим возможен толь- ко при работе с графическим процессором. D9 - если разряд установлен в 1, передается по- следовательный поток данных. D0 - если разряд сброшен, данные принимаются от устройства и записываются в память; если уста- новлен - считываются из памяти и передаются устройству. ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 133
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 4.2.5. Видеопроцессор Графический процессор игровой приставки SONY PLAYSTATION (Graphics Picture Unit, GPU) яв- ляется основным устройством, отвечающим за формирование картинки на экране. Для хранения данных об изображении графический процессор использует 1 Мб быстродействующей видеопамя- ти и 2 Кб кэш-памяти текстур. Процессор ориен- тирован на трехмерную полигональную графику, но может также работать с двумерной графикой и спрайтами. Для быстрой передачи данных от центрального процессора к графическому приме- няется канал прямого доступа к памяти. Видеопамять Знакомство с работой видеопроцессора мы начнем с описания различных областей памяти, которые используются при формировании изображения. К таким областям относятся буфер кадра, память текстур и цветовая таблица. В памяти кадра хранятся все графические дан- ные, которые видеопроцессор применяет для по- строения очередного кадра. Для центрального про- цессора эта область памяти доступна только через регистры графического процессора, поэтому рабо- та с ней имеет определенную специфику. С точки зрения программирования память кадра представ- ляет собой массив точек: 1024 по горизонтали и 512 по вертикали. Каждая точка в памяти зани- мает одно слово (16 разрядов) и хранится в фор- мате, изображенном на рис. 4.6а. Доступ к точке осуществляется по ее координатам, а не по адре- су в видеопамяти. Верхнему левому углу соответ- ствуют координаты (0, 0), а правому нижнему — (1023, 511). Когда графический процессор выводит рисунок на экран, из памяти кадра выбирается отображаемая область, на основе данных которой формируется выходной сигнал. Размеры показываемого фрагмен- та определяются путем записи координат его верх- него левого угла и размеров в регистры графичес- кого процессора. Кроме 15-разрядного, игровая приставка SONY PLAYSTATION может использовать 24-разрядный цвет. В таком случае две точки, выводимые на эк- ран, представляются тремя точками в памяти кад- ра. Применяемый при этом формат хранения дан- ных показан на рис. 4.66. Другой областью видеопамяти является память текстур. Текстурой называется двумерное изобра- жение, накладываемое при выводе на полигон или спрайт. Шаблоны текстур представляют собой изобра- жения фиксированного размера. В качестве места хранения текстур в SONY PLAYSTATION задей- ствуется часть памяти кадра. Создаваемые текстуры могут быть 15-,. 8- или 4-разрядными. Разрядность текстуры определяет число битов, выделяемых для размещения информации о точке, и, следовательно, максимальное количество цветов, которые можно использовать для текстуры. Форматы хранения текстур представлены на рис. 4.6, ниже приведено их краткое описание. В 15-разрядных текстурах каждой точке соот- ветствует одно слово (два байта), где располагают- ся 15-разрядный код цвета (в разрядах DO - D14) и бит признака прозрачности (в разряде D15). О ре- ализации эффекта прозрачности речь пойдет чуть позже. Таким образом, 15-разрядные текстуры об- ладают самой большой палитрой - до 32768 цветов, но также превосходят остальные и по объему зани- маемой памяти. В 8-разрядных текстурах применен несколько иной формат хранения. В этом случае каждый байт содержит индекс цвета. Одно слово задает две точ- ки, а в текстуре имеется 256 цветов. Графический процессор приставки получает индекс и считывает цвет с данным индексом из таблицы. Таблица пред- ставляет собой отдельную область памяти, в которой хранятся полные 15-разрядиые коды цвета. Струк- тура таблицы цветов и принципы работы с нею бу- дут описаны ниже. Число таблиц не ограничивает- ся ничем, кроме объема памяти, но текстура может использовать только одну таблицу. 4-разрядные текстуры очень похожи на 8-раз- рядные, но для каждого цвета здесь требуется 4 бита. Соответственно такие текстуры являются 16-цветными. Для них также необходима таблица цветов. Синий компонент Зеленой компонент Кроений компонент / Флаг 15 87 О 15 87 О 15 87 О Зеленой для точки 0 Красной для точки 0 Красной для точки 1 Синий для точки 0 Синий для точки 1 Зеленый для точки 1 Рис. 4.6. Формат графических данных в экранной памяти 134
Архитектура и принцип работы. Видеопроцессор Текстуры хранятся в специальной области памяти, называемой страницей текстур, которая является частью памяти кадра и имеет размер 256x256 точек независимо от установленного цветового режима. Точки в странице текстур адресуются относитель- но начала этой страницы, а не относительно начала памяти кадра. Таким образом, координаты верхне- го левого угла страницы текстур всегда будут рав- ны (0, 0), а координаты правого нижнего - (255, 255). В случае необходимости разрешается создать несколько страниц текстур. Графическому процессору при формировании изображения приходится производить чтение тек- стуры из памяти для каждого использующего ее примитива. Чтобы эти действия не приводили к большим потерям времени, в графическом про- цессоре установлена кэш-память текстур. Размер изображения, которое может храниться в кэше, за- висит от применяемого формата текстуры и состав- ляет 64x64 точки для 4-разрядных текстур, 64x32 точки для 8-разрядных и 32x32 точки для 15-раз- рядных. Для максимально быстрого исполнения программ следует использовать текстуры указан- ного размера. Таблица цветов Таблица цветов требуется при работе графическо- го процессора с текстурами и представляет собой часть памяти кадра. Она содержит 256 слов для 256-цветного режима или 16 слов для 16-цветного. В каждом слове хранится код одного цвета в стан- дартном 15-разрядном формате, характерном и для приставки SONY PLAYSTATION. Цветовых таб- лиц может быть несколько, как и областей текстур, но каждый примитив способен использовать толь- ко одну таблицу цветов и одну страницу текстур. Возможности графического процессора Ознакомившись с областями памяти, применяе- мыми при формировании изображения, перейдем к рассмотрению возможностей графического про- цессора. Рисунок на экране строится из примитивов. При- митивы - это базовые графические элементы, ис- пользуемые графическим процессором для создания изображений. Более сложные фигуры должны раз- деляться на составляющие их примитивы. Набор примитивов характерен для трехмерной графики. Точка - простейший элемент изображения, опре- деляющий единственную точку и ее цвет. Факти- чески он обрабатывается графическим процессо- ром как прямоугольник с размерами 1x1. Линия - несколько более сложный элемент, зада- ющий прямую линию (совокупность точек) между двумя точками с указанными координатами. При рисовании линии можно использовать затенение Гуро. Полилиния характеризует ломаную линию, состоящую из нескольких отрезков. Прямоугольник - примитив, который представ- ляет собой прямоугольную область экрана, специ- фицируемую координатами верхнего левого угла, высотой и шириной. При отображении такого эле- мента на экран выводится прямоугольник, закра- шенный выбранным цветом. Спрайт - прямоугольник с текстурой, опреде- ляемый так же, как и любой прямоугольник, но имеющий в качестве дополнительного параметра расположение нужной текстуры. Хотя этот элемент и назван спрайтом, его возможности несколько мень- ше, чем в игровых приставках, ориентированных на спрайтовую графику. Полигон - выпуклый многоугольник, из набо- ра которых строится изображение на экране. Гра- фический процессор игровой приставки SONY PLAYSTATION способен рисовать полигонами с тремя и четырьмя вершинами, причем четырех- угольник обрабатывается процессором как два тре- угольника. Каждый многоугольник описывается координатами своих вершин. При рисовании мож- но использовать затенение Гуро. Работа с полиго- нами осуществляется медленнее, чем вывод прямо- угольников, и их назначение также различно: прямоугольники необходимы для изображения плоских объектов, а полигоны - для трехмерных. Полигон с текстурой - это полигон, который по- казывается вместе с выбранной текстурой. Текстура играет роль обоев, наклеиваемых на объект с целью нанесения сложного рисунка на его поверхность. Полигон с текстурой создается аналогично обычно- му полигону, но требует в качестве дополнительно- го параметра адрес используемой текстуры. Вид выводимых на экран примитивов опреде- ляют три параметра: прозрачность, освещенность и маскирование. Когда при формировании изображения исполь- зуется режим прозрачности, цвет точки, которая будет показана на экране, вычисляется на основе цвета точки, уже записанной на этом месте в памя- ти кадра, и точки, которая рисуется. В зависимости от выбранного режима расчета прозрачности при- годна одна из следующих формул: 0,5В + 0.5F; 1,0В + l,0F; 1,0В - l,0F; 1,0В + 0,25F, где В - цвет точки из памяти кадра, a F - цвет ри- суемой точки. Режим прозрачности разрешается задать для лю- бого изображаемого примитива. Если примитив не использует текстуру, прозрачность применяется ко 135
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION всему объекту. Если рисуется полигон с текстурой, возможны следующие варианты: • в случае 15-разрядных текстур режим задает- ся индивидуально для каждой точки текстуры посредством флага, расположенного в стар- шем разряде; • в случае 8- или 4-разрядных текстур прозрач- ность указывается для каждого цвета. С этой целью в таблице цветов устанавливается стар- ший разряд данных соответствующего оттенка. Применение такого режима замедляет работу графического процессора, поскольку для рисова- ния точки на экране требуются две операции чте- ния и расчет значения цвета. Освещенность позволяет изменять цвет объекта в зависимости от положения источников света. В иг- ровой приставке SONY PLAYSTATION имеется ре- жим равномерной освещенности и освещенности по алгоритму Гуро. В первом случае для любого прими- тива используется одно значение, определяющее его яркость; во втором отдельные значения яркости ука- зываются для каждой вершины примитива, а конеч- ное значение вычисляется путем их интерполяции. Режим маскирования разрешает задавать в па- мяти кадра области отсечения, ограничивающие рисуемое изображение. Ниже мы рассмотрим основные принципы зада- ния параметров, определяющих вид выводимого изображения. Более подробную информацию мож- но найти в разделе, посвященном командам графи- ческого процессора. Сначала надо указать размер экрана, которое будет использоваться в программе. Экран может быть 256, 320, 384, 512 или 640 точек шириной и 240 или 480 точек высотой. Этот параметр также определяет раз- мер отображаемой области памяти в буфере кадра. Затем требуется определить, будет ли использо- ваться чересстрочный режим. Дело в том, что боль- шинство телевизионных приемников не в состоянии показывать картинку с разрешением 480 точек по вертикали. В этом случае включается чересстроч- ный режим формирования изображения, когда на экран сначала выводятся четные строки, а затем нечетные. Для зрителя чередующиеся полукадры сливаются в один. Следующий шаг - выбор числа цветов: 15- или 24-ра.зрядное кодирование цвета. Кроме того, нужно задать формат выходного сиг- нала. Игровая приставка SONY PLAYSTATION мо- жет формировать выходной сигнал, используя сис- тему кодирования цветовой информации PAL или NTSC. Выбор системы осуществляется программ- ным путем. Работа с графическим процессором Вся работа с графическим процессором игровой приставки ведется с применением двух 32-разряд- ных регистров: данных и управления. Для передачи данных графическому процессору часто использует- ся контроллер ПДП. Особенности прямого доступа к памяти будут рассмотрены чуть позднее. Регистр данных графического процессора Адрес: 1F801810L. Назначение разрядов. Через регистр осуществляется обмен данными между центральным и графическим процессорами приставки. Регистр состояния графического процессора Адрес; 1F801814L. Назначение разрядов. Регистр применяется при управлении функцио- нированием графического процессора и для полу- чения информации о текущем режиме. Назначение разрядов различно при чтении и записи, поэтому работу с данным регистром мы рассмотрим отдель- но для каждого режима. При чтении из регистра программа получает сло- во состояния графического процессора. Назначе- ние разрядов этого слова следующее: D31 - состояние разряда используется только при работе в чересстрочном режиме. Если разряд сброшен, то видеопроцессор в данный момент фор- мирует кадр с четными строками, если установлен в 1 - с нечетными строками. D29, D30 - состояние разрядов зависит от теку- щего режима работы контроллера прямого доступа к памяти. Возможны следующие комбинации: 0 0 - контроллер ПДП не применяется; 0 1 - неиспользуемая комбинация; 10 - данные передаются от центрального процес- сора к графическому; И - данные передаются от графического процес- сора к центральному. D28 - если разряд сброшен, графический про- цессор не готов к приему команды. D27 - если разряд сброшен, графический про- цессор не готов к пересылке изображения. D26 - если разряд сброшен, графический про- цессор занят рисованием примитива. Если разряд равен 1, графический процессор простаивает. D25, D24 - не используются. D23 - если разряд сброшен, графический процес- сор формирует изображение на экране, если уста- новлен в 1 — графический процессор отключен, и изображение на экране отсутствует. 136
Архитектура и принцип работы. Видеопроцессор D22 - если разряд установлен в 1, графический процессор работает в чересстрочном режиме. D21 - если разряд сброшен, используется 15-раз- рядное кодирование цвета; если установлен в 1 - 24-разрядное. D20 - если разряд установлен в 1, видеопроцес- сор формирует сигнал изображения в системе PAL, в противном случае - в формате NTSC. D19 - определяет размер изображения по верти- кали: О - 240 точек; 1 - 480 точек. D18-D16 - указывают размер изображения по горизонтали: ООО - 256 точек; 001 - 384 точки; 010 - 320 точек; 100 - 512 точек; 110-640 точек. D15 - D13 - не используются. D12 - если разряд установлен в 1, точки, у кото- рых установлен бит маскирования (самый старший разряд), не отображаются. DI 1 - если разряд установлен в 1, активизирует- ся режим маскирования; иначе данный режим вы- ключен. D10 - управление рисованием в области экрана: если разряд установлен, рисование разрешено, если сброшен - запрещено. D9 - включение режима смешивания цветов. D8, D7 - задание разрядности цвета текстур: 00 - 4-разрядных текстур; 01 - для 8-разрядных; 10 - для 15-разрядных; 11 - не применяется. D6, D5 - код, помещаемый в эти разряды, опре- деляет формулу для работы с прозрачными тексту- рами. Соответствие кодов и формул следующее: 00 0,5В + 0.5F; 01 1,0В + l,0F; 10 1,0В - l,0F; И 1,0В + 0.25F, где В - цвет точки, уже записанной в памяти кадра, a F - цвет рисуемой точки прозрачной текстуры. D4 - определение вертикальной координаты на- чала страницы текстур. Если разряд сброшен, она равна 0, в противном случае - 256. D3 - D0 - задание горизонтальной координаты начала страницы текстур. Она равна значению, за- писанному в этих разрядах, умноженному на 64, то есть может принимать значения 0,64,128,192 и т.д. При работе с графическим процессором в регистр управления помещаются команды для процессора, при этом код команды заключается в разрядах D31 - D24, а оставшиеся разряды применяются для передачи параметров. Рассмотрим некоторые наиболее часто используемые команды графичес- кого процессора. Сброс графического процессора Код команды: 00h. Параметры: 0 0 0 0 0 Oh. Назначение. Команда используется для инициализации гра- фического процессора, а в некоторых случаях - для прекращения формирования изображения. После ее выполнения в слове состояния графического процессора устанавливается комбинация флагов 14802000b. Сброс буфера команд Код команды: 0 lh. Параметры: 0 0 0 0 0 0h. Назначение. Команда очищает буфер команд графического процессора. Сброс IRQ Код команды: 02h. Параметры: OOOOOOh. Назначение. Команда принудительно сбрасывает формируе- мый графическим процессором сигнал запроса на прерывание. Включение экрана Код команды: 03 b. Параметры: OOOOOOh - разрешить формирование изображе- ния на экране; 0 0 0 0 0 lh - запретить. Назначение. Команда служит для управления формировани- ем изображения на экране. В выключенном состоя- нии графический процессор не формирует выход- ных сигналов и не обращается к видеопамяти. Установка прямого доступа к памяти Код команды: 04h. Параметры: OOOOOOh - прямой доступ к памяти отключен; 000002h — данные передаются от центрального процессора к графическому; 000003h- данные передаются от графического процессора к центральному. Назначение. Команда указывает направление пересылки дан- ных при использовании прямого доступа к памяти. ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION )21 137
Архитектура и принцип работы. Видеопроцессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION Установка начала экрана Код команды: 0 5h. Параметры: в разрядах DO - D9 задается коор- дината по горизонтали (0 -1023), в разрядах D10 - D18 - координата по вертикали (0-512). Назначение. Команда применяется для определения левого верхнего угла области видеопамяти, которая содер- жит выводимое на экран изображение. Задание режима отображения Подкоманды: 08h. Параметры: число, состояние разрядов которо- го характеризует включаемый режим. Назначение отдельных разрядов следующее: D6 - если разряд установлен, а разряды 0 и 1 сброшены, то размер экрана по горизонтали равен 384 точкам. Во всех остальных случаях этот разряд должен быть сброшен. D5 - если разряд установлен, включается черес- строчный режим формирования изображения. D4 - если в разряд записана 1, будет использо- ваться 24-разрядный цвет; в противном случае - 15-разрядный. D3 - видеорежим: 0 - PAL; 1 - NTSC. D2 - размер изображения по вертикали: 0 - 240 точек; 1 - 480 точек. DI, D0 - размер изображения по горизонтали: 00 - 256 точек; 01 - 320 точек; 10-512 точек; 11 - 640 точек. Получение параметров графического процессора Код команды: 10h. Параметры: номер требуемого параметра графи- ческого процессора. Назначение. Данная команда позволяет прочитать нужный параметр графического процессора из регистра дан- ных. Например, если в качестве параметра команды передать код 000007b, то в регистре данных будет возвращен кодовый номер модели установленного графического процессора (для стандартной микро- схемы, используемой в SONY PLAYSTATION, этот номер равен 2). Командные пакеты графического процессора Для того чтобы графический процессор создал изображение на экране, ему должны быть переда- ны все сведения о параметрах изображения (размер по вертикали и горизонтали, положение выводимо- го фрагмента в видеопамяти, разрядность цвета и т.д.), а также сведения о каждом из графических примитивов, составляющих картинку. Все данные относительно рисунка и его парамет- ров передаются графическому процессору в виде пакетов команд. Каждый пакет сообщает об одном примитиве либо устанавливает какой-либо параметр изображения. Следует различать параметры изоб- ражения и дисплея: первые передаются как пакеты команд и характеризуют создаваемую картинку; вторые влияют на генерируемый графическим про- цессором видеосигнал и задаются через команды, записываемые в регистр управления графическо- го процессора. Чтобы графический процессор пра- вильно сформировал изображение, требуется ука- зать как параметры дисплея, так и параметры изображения. Командные пакеты составляются работающей программой, после чего передаются пословно через порт данных графического процессора. Более пред- почтительной из-за скорости и затрат времени цен- трального процессора является пересылка пакетов на основе прямого доступа к памяти. Чтобы упрос- тить управление обменом большого числа пакетов, в игровой приставке SONY PLAYSTATION преду- смотрен специальный режим прямого доступа к па- мяти, когда все передаваемые графическому про- цессору пакеты объединяются в связанный список, каждый элемент которого содержит сведения о его размере, адрес следующего элемента и собственно пакет данных. Отдельные части связанного списка не обязательно должны располагаться в памяти по порядку. Эта технология объясняется на рис. 4.7. Рис. 4.7. Связанный список пакетов команд для графического процессора 138
Архитектура и принцип работы. Видеопроцессор Графический процессор обрабатывает пакеты в порядке их пересылки, следовательно, передан- ные ранее примитивы при рисовании будут пере- крываться теми, которые получены позже. Если в список необходимо внести еще несколько пакетов команд, достаточно найти место, куда они будут по- мещены, заменить указатель найденного элемента списка на адрес добавляемого пакета, а в сам пакет вставить ссылку на следующий элемент списка. Чтобы в связанном списке легче было найти мес- та для вставки новых пакетов, в игровой приставке SONY PLAYSTATION введена функция сортировки пакетов команд. С этой целью сначала строится пу- стой связанный список, который содержит только заголовки данных без самих пакетов. Теперь, если в список нужно добавить какой-либо пакет, доста- точно выбрать его по индексу. Поскольку при формировании трехмерного изоб- ражения требуется, чтобы расположенные ближе к наблюдателю объекты рисовались позже тех, ко- торые находятся дальше, в качестве индекса часто используется координата z отображаемого объекта. После того как программа создала все пакеты ко- манд, которые будут передаваться графическому процессору, следует указать адрес первого элемен- та в списке и переслать все данные, используя кон- троллер прямого доступа к памяти. Отдельный канал контроллера ПДП может со- здавать такие отсортированные таблицы пакетов, что значительно упрощает программирование гра- фического процессора. Рассмотрим структуру элемента связанного спис- ка более подробно (рис. 4.8). В первом 32-разрядном слове содержится заго- ловок элемента списка, включающий в себя размер следующего за заголовком пакета команд в словах (старший байт) и указатель на следующий элемент (остальные байты). Для последнего элемента спис- ка указатель должен быть равен FFFFFFh. Со второго слова начинается пакет команд. В са- мом старшем байте хранится код, определяющий тип пакета, а затем записаны параметры, количество которых зависит от типа пакета. Пакет команд все- гда занимает целое число 32-разрядных слов. Работа с использованием прямого доступа к памяти Графический процессор игровой приставки SONY PLAYSTATION использует два канала прямого до- ступа к памяти. Канал 2 применяется для пересылки связанных списков, содержащих пакеты команд, от центрального процессора к графическому, а также для передачи изображения в буфер или обратно. Канал 6 предназначен для создания пустых связанных спис- ков, назначение которых описывалось выше. Более подробно работа с контроллером прямого доступа к памяти и необходимые регистры были рассмотрены в соответствующем разделе. Основные приемы программирования графического процессора Теперь, изучив основные функции и команды гра- фического процессора SONY PLAYSTATION, мы можем проанализировать основные алгоритмы, ис- пользуемые в программах для него. Работа всегда начинается с инициализации гра- фического процессора игровой приставки, которая выполняется по следующему алгоритму: 1. Передать графическому процессору команду сбро- са (код о Oh). 2. Установить размеры изображения по горизонтали и вертикали, передав в регистр управления графи- ческого процессора команды с кодом 06h и 07h. 3. Задать режим дисплея командой 08h. 4. Указать координаты начала экранной области ко- мандой 05h. 5. Сформировать в памяти пакеты с кодами Elh (режим изображения), E3h, E4h (размеры изображения), E5h (координаты изображения) и последовательно передать их графическому процессору через порт данных или канал прямого доступа к памяти. 6. Разрешить генерацию изображения. Далее программа создает связанный список па- кетов команд, содержащих информацию об изоб- ражении. Чтобы передать этот список графическо- му процессору, необходимо выполнить следующие действия: 1. Подождать, пока графический процессор подгото- вится к приему команд. Об этом сигнализирует установка разряда D28 в регистре состояния графи- ческого процессора. 2. Разрешить работу второго канала контроллера пря- мого доступа к памяти. 3. Установить режим пересылки данных от централь- ного процессора к графическому. 4. Записать в регистр D2_MADR адрес начала списка пакетов команд. ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 139
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 5. Поместить в регистр D2_BCR 0. 6.Указать в регистре D2_CHCR число о 10004Olh. Этот набор флагов запускает передачу связанного списка из памяти в порт графического процессора на основе прямого доступа в память. Рассмотренные алгоритмы представляют собой лишь основы программирования графики для иг- ровой приставки SONY PLAYSTATION. Пример реализации изложенных в этом разделе принци- пов приведен в приложении 2, где представлена учебная программа для игровой приставки, рисую- щая изображение путем передачи данных через порт графического процессора и с использованием прямого доступа в память. 4.2.6. Звуковой процессор Звуковой процессор приставки SONY PLAYSTA- TION служит для формирования звукового сопро- вождения, освобождая тем самым ресурсы цен- трального процессора для других целей. Отличие данного модуля от рассмотренных выше заключа- ется в том, что, помимо обычной программной ге- нерации различных звуков, игровая приставка SONY PLAYSTATION позволяет воспроизводить аудиофайлы с компакт-дисков в формате Audio CD. В этом разделе приводится краткое описание архи- тектуры звукового процессора и его регистров. Микросхема звукового процессора игровой при- ставки SONY PLAYSTATION поддерживает рабо- ту 24 независимых аудиоканалов, дает возмож- ность генерировать стереофоническое звучание и микшировать его с аудиосигналом, получаемым с CD-ROM. Привод CD-ROM управляется через операционную систему приставки (данная тема в настоящей книге не рассматривается из-за боль- шого объема материала). Чтобы ускорить работу звукового процессора, применяется ОЗУ объемом 512 Кб, предназначенное для хранения звуковых данных. ОЗУ звукового процессора В документации ОЗУ звукового процессора называ- ется звуковым буфером (Sound Buffer), мы в даль- нейшем также будем использовать этот термин. Данные в ОЗУ хранятся в виде компрессиро- ванных блоков, за каждым из которых закрепле- но 16 байт. Два байта здесь занимает заголовок, содержащий служебную информацию, а осталь- ные 14 байт отводятся под сведения о формируе- мом аудиосигнале. При декомпрессии блока эти 14 байт преобразуются в 28 байт, передаваемых звуковому процессору. Первые 4 Кб памяти играют роль буфера для хра- нения декодированных звуковых данных, поступа- ющих от CD-ROM, а также данных каналов 1 и 3, воспроизводимых звуковым процессором. Инфор- мация в этих областях хранится в виде 16-разряд- ных чисел, по одному числу на такт воспроизведе- ния. Тактовая частота формирования звукового сигнала в игровой приставке составляет 44,1 кГц. Следующие 4104 байт зарезервированы систе- мой и используются звуковым процессором в соб- ственных целях. С адреса 1008h начинается область аудиодан- ных, а за ней находится область обработки спецэф- фектов. Размеры этих областей меняются в зависи- мости от того, задействован ли блок спецэффектов и какие именно спецэффекты применяются. Распределение адресного пространства звуково- го процессора игровой приставки SONY PLAY- STATION показано на рис. 4.9. OOOOh 03FFh 0400h 07FFh 0800h OBFFh OCOOh OFFFh lOOOh 1007h 1008h Донные левого ханола для Audio CD Данные правого канала для Audio CD Донные для канала 1 Синтезатора - Донные для канола 3 синтеза тора Зарезервировано системой Области зВукобых данных Области донных для э<р<ректоВ XXXXh 7FFFFh Рис. 4.9. Карта памяти звукового процессора Формирование звукового сигнала Как уже упоминалось, звуковой процессор игровой приставки имеет 24 независимых канала. Любой из них может создавать звуковой сигнал, генерировать шум или частоту модуляции для другого канала. Кроме того, каждый канал включает программируе- мый ADSR-фильтр огибающей. Работа ADSR-филь- тра поясняется на рис. 4.10. Процесс формирования звукового сигнала делит- ся на несколько фаз: 1. Нарастание сигнала (А). Сигнал нарастает от нуле- вого значения до максимума. 2. Понижение уровня (D). Уровень звукового сигнала понижается до основного уровня. 140
Архитектура и принцип работы. Звуковой процессор Рис 4.10. ADSR-фильтр огибающей звукового сигнала 3. Основное звучание (S). В течение заданного време- ни генерируется сигнал, уровень которого может понижаться или повышаться. 4. 3атухание (R). Уровень сигнала снижается до нуля. Регистры звукового процессора С точки зрения программирования звуковой про- цессор игровой приставки SONY PLAYSTATION представляет собой набор регистров, занимаю- щих в адресном пространстве приставки диапа- зон lF801C00h - lF801DFFh. Все регистры звуко- вого процессора являются 16-разрядными. Сначала идут 24 группы по восемь 16-разрядных регистров, каждая из таких групп предназначена для управления одним каналом. Поскольку все группы аналогичны, мы рассмотрим только одну из них. Регистр громкости левого канала Адрес: !F801xx0h. Назначение разрядов. Регистр используется для установки громкости и настройки генератора. Назначение разрядов в этих режимах различно и описывается ниже. В режиме настройки громкости: D15 - выбор режима, должен быть равен 0. D14 - фаза сигнала: 0 - нормальная; 1 - инверсная. D13 - DO - громкость сигнала. В режиме настройки генератора: D15 - выбор режима, должен быть равен 1. D14 - режим изменения сигнала: 0 - линейное изменение; 1 - экспоненциальное изменение. D13 - направление изменения уровня сигнала: 0 - увеличение; 1 - уменьшение. D12 - фаза сигнала: 0 - нормальная; 1 - инверсная. Указанная здесь фаза должна совпадать с фазой, заданной при настройке громкости. Dll - D7 - не используются. D6 - D0 - приращение уровня сигнала. Регистр громкости правого канала Адрес: lF801xx2h. Назначение разрядов. Регистр аналогичен регистру громкости левого канала. Регистр высоты звука Адрес: lF801xx4h. Назначение разрядов. В разряды D13 — D0 регистра записывается зна- чение, определяющее высоту генерируемого звука. Разряды D15 и D14 не используются. Регистр адреса звуковых данных Адрес: !F801xx6h. Назначение разрядов. В регистр записывается адрес начала воспроиз- водимых данных в ОЗУ звукового процессора, де- ленный на 8. Регистр 1 настройки огибающей Адрес: lF801xx8h. Назначение разрядов. Регистр используется для настройки огибающей формируемого аудиосигнала, изображенной на рис. 4.22. D15 - режим нарастания: 0 - линейный; 1 - экспоненциальный. D14 - D8 - код, задающий время нарастания сигнала (Аг на рис. 4.22). D7 - D4 - код, определяющий время понижения уровня (Dr на рис. 4.22). Понижение уровня всегда происходит в экспоненциальном режиме. D3 - D0 - код уровня сигнала основного звуча- ния (S1 на рис. 4.22). Регистр 2 настройки огибающей Адрес: lF801xxAh. Назначение разрядов. Регистр применяется для настройки огибающей формируемого аудиосигнала, изображенной на рис. 4.22. D15 - режим изменения основного звучания: О - линейный; 1 - экспоненциальный. D13 - направление изменения сигнала основно- го звучания: 0 - нарастание; 1 - затухание. ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 141
Архитектура и принцип работы. Звуковой процессор ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION D12 - не используется. Dll - D6 — код, задающий время основного зву- чания (Sr на рис. 4.22). D5 - режим затухания: О - линейное; 1 - экспоненциальное. D4 - DO - код, указывающий время затухания сигнала (Rr на рис. 4.22). Регистр текущего уровня огибающей Адрес: lF801xxCh. Назначение разрядов. При чтении из регистра программа получает ин- формацию о текущем уровне огибающей сигнала данного канала. Регистр адреса повтора Адрес: IFSOlxxEh. Назначение разрядов. В регистр помещается деленный на 8 адрес, с ко- торого следует начать повторное воспроизведение звуковых данных. Адрес нужно записывать во вре- мя проигрывания звука, поскольку при запуске ге- нератора в регистре будет 0. Далее идет группа регистров, предназначенная для управления звуковым процессором игровой приставки в целом. Регистр уровня сигнала левого канала Адрес: lF801D80h. Назначение разрядов. Код, записываемый в регистр, определяет уро- вень выходного сигнала для левого канала. Выход- ной сигнал получается после микширования сигна- лов всех левых каналов звукового процессора. Регистр уровня сигнала правого канала Адрес: lF801D82h. Назначение разрядов. Код, записываемый в регистр, определяет уро- вень выходного сигнала для правого канала. Вы- ходной сигнал получается после микширования сигналов всех правых каналов звукового процес- сора. Регистр глубины реверберации левого канала Адрес: lF801D84h. Назначение разрядов. Код, записываемый в регистр, определяет пара- метры реверберации сигнала для левого канала. D15 - фаза сигнала: 0 - нормальная; 1 - инверсная. D14 - D0 - громкость эффекта. Регистр глубины реверберации правого канала Адрес: lF801D86h. Назначение разрядов. Код, записываемый в регистр, определяет пара- метры реверберации сигнала для правого канала. D15 - фаза сигнала: 0 - нормальная; 1 — инверсная. D14 - D0 - громкость эффекта. Далее следуют группы по два 16-разрядных ре- гистра, которые предназначены для управления отдельными каналами звукового процессора Каж- дый разряд записываемого сюда значения управля- ет отдельным стереофоническим каналом. Так, на- пример, для контроля канала 0 используется разряд D0 первого регистра в паре, каналом 1 управляет разряд D1, каналом 2 - разряд D2 и так далее до ка- нала 15, которому соответствует разряд D15. Кана- лами 16-23 управляют, устанавливая или сбрасывая разряды второго регистра в паре. При этом для ка- нала 16 применяется разряд D0, для канала 17 - раз- ряд Din т.д. Старшие восемь разрядов второго ре- гистра не используются и должны быть равны 0. Регистры включения каналов звукового процес- сора Адрес: lF801D88h, 1F801D8AK. Назначение разрядов. Установка в 1 какого-либо разряда в этих регистрах приведет к включению соответствую- щего аудиоканала. Регистры выключения каналов звукового процес- сора Адрес: lF801D8Ch, 1F801D8EK. Назначение разрядов. Установка в 1 какого-либо разряда в этих регис- трах приведет к выключению соответствующего аудиоканала. Регистры включения режима частотной модуляции Адрес: lF801D90h, lF801D92h. Назначение разрядов. Чтобы канал звукового сопровождения работал в режиме частотной модуляции, необходимо уста- новить в 1 соответствующий разряд. В качестве частоты модуляции используется выходной сигнал предыдущего канала. Регистры включения генератора шума Адрес: lF801D94h, lF801D96h. Назначение разрядов. Установкой 1 в соответствующем разряде этих регистров канал звукового сопровождения можно перевести в режим генератора шума. 742
Принципиальная схема. Модуль центрального процессора Регистры включения режима реверберации Адрес: lF801D98h, 1F801D9AE. Назначение разрядов. Установкой 1 в соответствующем разряде канал звукового сопровождения можно перевести в ре- жим реверберации. Регистры контроля работы каналов Адрес: lF801D9Ch, 1F801D9EE. Назначение разрядов. Регистры доступны для чтения и используются для контроля работы каналов звукового процессора. Когда канал занят формированием аудиосигнала, соответствующий ему разряд установлен в 1. Если же канал находится в режиме ожидания, разряд равен 0. 4.3. Принципиальная схема Итак, мы познакомились с программной архитек- турой игровой приставки SONY PLAYSTATION, которая, как и ожидалось, гораздо сложнее, чем у остальных описанных в книге устройств. Дан- ный раздел посвящен описанию аппаратной части и принципов работы SONY PLAYSTATION. Конструктивно приставка SONY PLAYSTATION выполнена на трех платах. На первой плате распо- ложена собственно игровая приставка, схема которой разделена на следующие функционально закончен- ные блоки: модуль центрального процессора, модуль графического процессора, модуль звукового про- цессора и модуль контроллера привода CD-ROM. К плате центрального процессора подключается вто- рая плата - модуль адаптации, предназначенный для работы с компакт-дисками различных производите- лей. На третьей плате выполнен импульсный блок питания. 4.3.1. Модуль центрального процессора Рассмотрение схемы игровой приставки мы начнем с модуля центрального процессора. Его принципи- альная схема изображена на рис. 4.11. Основой процессорного модуля SONY PLAYSTA- TION является микросхема IC103 (CXD8606AQ), объединяющая RISC-ядро центрального процессора и контроллер ввода/вывода. Микросхема выполне- на в корпусе для поверхностного монтажа с 208-вы- водами. Работа центрального процессора синхронизирует- ся внутренним тактовым генератором, частота кото- рого стабилизирована кварцевым резонатором Х101 (67,73 МГц), подключенным к входу CRYSTALP (вы- вод IC103/4). Тактовая частота около 33,9 МГц для работы RISC-ядра процессора формируется внутрен- ним делителем. Посредством шины данных DD0 - DD31 (выво- ды IC 103/42-40,37-28,25-16,23-31), шины адреса DAO - DA11 (выводы IC103/68,67,64-55) и шины управления, образованной цепями передачи сигна- лов DWE (вывод IC103/43), DRAS0 (вывод 1С103/ 45) nDCASO - DCAS3 (выводы IC103/49-46), к центральному процессору подключено динами- ческое ОЗУ приставки объемом 2 Мб. ОЗУ выпол- нено на четырех микросхемах динамической па- мяти IC106 - IC109 (KM4BVC14BJ-6) объемом 512 Кб каждая. В некоторых моделях используется одна микросхема динамического ОЗУ IC106 типа А65844 или А67871, выполненная в 70-выводном корпусе. Для подсоединения этой микросхемы ис- пользуются те же выводы центрального процессо- ра. Обратите внимание: на шине адреса динамичес- кого ОЗУ центрального процессора разряды DA8 (вывод IC103/58) и DA10 (вывод IC103/56) не при- меняются, а разряды адреса DA9 (вывод 1С103/ 57) hDAII (вывод IC103/55) подключены не- стандартным способом. На выходе DAl 1 форми- руется разряд адреса СРМА8, а на линии DA9 - разряд СРМА9. Это обусловлено внутренней структурой процессора и картой распределения адресного пространства, выбранной фирмой-про- изводителем. Работа центрального процессора с динамическим ОЗУ происходит обычным образом. Сначала на шину адреса подаются девять младших разрядов адреса, сопровождаемые сигналом низкого уровня на выходе DRAS0, а затем девять старших разрядов адреса ячейки памяти, и на выходах DCAS0 - DCAS3 формируется сигнал низкого уровня. Одновремен- но происходит запись или считывание информа- ции из динамического ОЗУ. Выполняемое действие (запись или чтение) определяется уровнем сигнала на выходе DWE центрального процессора. Низкий логический уровень соответствует записи, высо- кий - чтению данных. Как в любом динамическом ОЗУ, микросхемы, используемые в игровой приставке, требуют посто- янной регенерации хранящейся в них информации. Во время регенерации центральный процессор уста- навливает на шине адреса динамического ОЗУ ад- рес регенерации и генерирует на выходе DRAS0 сигнал низкого логического уровня. Поскольку в течение этого сигнала на все выходы CAS микро- схем динамического ОЗУ поступает напряжение высокого логического уровня, происходит регене- рация ОЗУ, а не чтение или запись. ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 143
Принципиальная схема. Модуль центрального процессора ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION DIG_+3,3B DIG_GND ^>- - — —— ——— CPMDO C113 ,,0.1 IC гСX A 04AM A — AO A10A00 A'JA 01л'7' A* A^ Y“* Л ° х-ч 1 .У x—/4 V У V У\ YY / x. 7 I rts и KM4BVS14BJ- Vcc^Vss© IDO 107© ID1 106© ID2 ID5© ID3 ID4© NC CAS© WE > DE© RAS ° NC@ A9 A8© АО A7© Al A6© A2 A5© АЗ A4 © Vcc Vss(15r DI 1 4 ,,0.1 -6 CPMD7 CPMD1 CPMD6 CPMD2 CPMD5 CPMD3 CPMD4 CPMA9 — CPMA8 k. CPMAO CPMA7 CPMA1 CPMA6 CPMA2 CPMA5 CPMA3 CPMA4 CPMD15 CPMD8 IC 107 О © © © © © © © © © © © II KM4BVS14BJ- Vcc'' ^Vss (28^ 100 ID7© ID1 ID6© 102 ID5© ID3 ID4© NC CAS© WE >• DE© RAS ° NC© A9 A8© АО A7© Al A6© A2 A5© A3 A4© Vcc Vss(l5j :iis ,,o.i -6 CPMD9 CPMD14 CPMD10 CPMD13 CPMD11 CPMD12 CPMA8 CPMD23 —r CPMA9 — CPMAO CPMA7 CPMA1 CPMA6 CPMA2 CPMA5 CPMA3 CPMA4 CPMD16 IC 10E © © в © © © © © © © © © ( 11 KM4BVS14BJ- Vcc Vss(28, IDO ID7© 101 ID6© ID2 ID5© ID3 ID4© INC CAS© WE > DE© RAS ° NC© A9 A8© AO A7@ Al A6© A2 A5© АЗ A4© Vcc Vssu5. 31 16 ,, 0,1 -6 CPMD17 CPMD22 CPMD18 CPMD21 CPMD19 CPMD20 CPMA8 CPMD31 CPMA9 — CPMAO CPMA7 CPMA1 CPMA6 CPMA2 CPMA5 CPMA3 CPMA4 CPMD24 IC 109 © © © © © © © © © © © © 11 KM4BVS14BJ- Vcc Vss(28) IDO ID7© ID1 ID6© 102 ID5© ID3 ID4© NC CAS© WE DE© RAS ° NC© A9 A8© АО A7© А1 А6И8) A2 A5© АЗ A4 © Vcc Vss (l5i -6 CPMD25 CPMD30 CPMD26 CPMD29 CPMD27 CPMD28, CPMA8 CPMA9 —I CPMAO CPMA7 CPMA1 CPMA6 CPMA2 CPMA5 CPMA3 CPMA4 k Разъем для подключения пультов SCKO © + 3.3B (9) TXD (8) GND RXD О (© ° ° DTROA О + 8B (4) DTROB © DSR (2) INT б Л сюо ЮООпФ в (-52/-62) I-------1 R169 О FL112 CL199 ЕХТ_+8В > DIG-+3.3B > (-52/62) D110 RD3.95B \ t-43 FL111 D109 RD3.95B L106 1 мкГ н FL119 R140 470 — CTR_3,3B fjH’ D12Q RO^95B] 0107 FL109_________ RD3.95B FL108 —_FL107 FL173 Разъем DlG_GND>-o- последовательного интерфейса L105 1мкГн (-52/62) R139 470 R138 КЗ-* D108 RD3.95B L104 1мкГн D106 RD3.95B D112 RD3.95B (-52/62) 0111 RD3.95B 47, R142 470 R141 470 KJ37 R150 47 ± 47 ,.1„. .................. IJ .ill С135 ЮООпФ В DIG_ + 3,3B L102 1 CL526 О' R143 22 £5} R144 22 R145 22 ^-43—0101 RD3.95B fLW2 SIO_FG (© SIO_FG (© SIO_+3.3B (3)- RXD (© TXD DSR ( б\ 0 0 DTR л <л © о CTS (©- RTS (9/ SIO_GND © SIO_FG ©> SIO_FG ©- - CL527 CL528 CL529 L CL530 CL531 L CL532 CL533 L D105 RD3.95B D104 RD3.95B 0103 RD3.95B^LU)4 D102 RD3.95B£!JO3 R146 1К R146 1К Q101 DTC114ЕХ 0102 DTC114ЕХ 0103 DTC114ЕХ 0104 DTC114ЕХ Рис. 4.11. Принципиальная схема модуля центрального процессора игровой приставки SONY PLAYSTATION (1 из 3) 144
Принципиальная схема. Модуль центрального процессора 0,1 F ю © ЮООпФ Vdd С104 2 Vdd CRYSTALN 3 CRYSTALP CPMD31 DD31 5 CPMD30 DD30 6 CPMD29 DD29 CPMD28 D28 CPMD27 D27 CPMD26 10)D26 CPMD25 D25 CPMD24 12 D24 CPMD23 D23 Vdd 4 Vss °CPMD22 DD22 1 6 CPMD21 DD21 17 CPMD20 DD20 18 CPMD19 DD19 CPMD18 DD18 20 CPMD17 DD17 С157 0,01 ЮООпФ В тПт ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION V CS7 VRD VWR со о со со о о UJ со СУ' 0~ Q СО т (/) Q (/) CPMD15 CPMD16 7 8 9 1 13 1 5 21 DD16 22 DD15 CPMD14 <24 DD14 m ю e CPMD13 25 DD13 26 Vdd IC ЮЗ CXD8606Q Центральный процессор CXD8606Q С155 0.01 27) Vss 12 CPMD11 (Zti) DU1 2 (29)DD11 (ЗО) DD10 Ш) DD9 б|) DD8 (33) DD7 (34) DD6 (35) DD5 (Зб) DD4 (37) DD3 Я Vdd (39) Vss j40) DD2 CPMD10 CPMD9 CPMD8 CPMD7 CPMD6 CPMD5 CPMD4 CPMD3 CPMD2 CPMD1 CPMDO ~{42) DDO R128 22 DWI DRAS1 R129 22 DRASO R124 22 DCAS3 R125 22 DC AS 2 R126 22 DCAS1 R127 22 DCASO Vdd co (/) Vss LiJ CO Vss С312 ЮООпФ L1J СО Ш О о 44 45 46 48 49 50 52 Г 71 86 92 93 95 62 66 69 72 75 76 77 78 82 83 85 87 88 90 55 63 64 67 70 84 C125...C128 ЮОпФ C128 C127 47 0 СП оо со ю < < о о о о 0 56) (57) (58) (59) (60) <61 С136 0,01 Рис. 4.11. Принципиальная схема модуля центрального процессора игровой приставки SONY PLAYSTATION (2 из 3) 145 21
Принципиальная схема. Модуль центрального процессора C145 ЮООпФ VSS 156 155 Vss SYSCLK1 154 VA2 SA23 SA. 23 152 SA. 2 2 151 SA.21 50 SA. 20 149 SA. 19 148 SA. 18 147 SA. 17 146 SA.1 6 45 Vdd 144 Vss 143 SA. 15 SA. 14 141 SA. 13 140 SA. 12 139 SA.1 1 138 SA. 10 137 SA.9 36 SA.8 135 SA. 7 34 SA.6 133 SA.5 132 Vdd 13 Vss 130 SA. 4 129 SA.3 128 SA. 2 127 SA 1 126 R104 SAOO SA.O 125 22 SD15 SD15 24 SD14 SD14 123 SD13 SD13 122 SD12 SD12 121 SD1 1 SD1 1 120 SD10 SD10 119 Vdd 18 Vss I 17 SD09 SD9 116 SD08 SD8 SD07 SD7 114 SD06 SD6 13 SD05 SD5 112 SD04 SD4 11 SD03 SD3 110 SD02 SD2 109 SD1 IC103 CXD8606Q SAO 5 С1 10 ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION z С1 1 1 —ЮООпФ CPUA2 SA22 SA21 SA20 SA19 SAI 8 SA17 SA16 R152 22 SA15 SA14 SA 13 SA12 SA1 1 SA10 SA09 SA08 SA07 SA06 л R102 22 FB102 SYSCLK1 FL142 120 CL103 FL141 150 CL104 FB104 150 SD2 SD4 150 SD8 SD10 SD12 SD14 SA04 SAG SA03 FL 130 120 CL1 15 SA2 SA02 SA01 SD6 RB112 SDO RB111 DIG_+3,3B EXT_+8B SA4 RB1 13 CL101 CL102 CL 105 I CL107 CL108 I CL109 CL1 10 I CL111 CL1 12 | CL1 13 tzrJ си 14 FL129 150 CL1 16 С1 1 1 1 мкГн C1 1 0 1 мкГн CL1 19 I CL121 150 SA6 SAS SA10 RB114 SA12 150 I I—( SA14 SA16 SA18 < — 1—j CL122 I CL123 I CL125 CL126 I CL127 SA20 SA22 CL124 108 SDO Ю Vdd (106 Ю ю IC1 '(Л Ю Vdd 97 99 101 96 100 102 SD01 SDOO CPUINT FL1 18 150 CL129 FL117 150 CL130 SYSCLK1 EXTBCK FL116 120CL131 CL 132 FB105 120 CL133 FL113 150 R113 22 R112 22 98 С1 10 ЮООпФ В SRD R111 22 R155 10K ЮК ЮК R130 R131 С138 0,01 В С139 0,01 В С109 ЮООпФ В SA16 SA15 SA12 SA7 SA6 SA5 SA4 SA3 SA2 SA1 SDO SD1 SD2 IC1O2 NT/PAL MSM334031C 2 3 4 5 6 7 8 9 10 12 1 3 4 15 16 I NC Vcc (32, А1 6 A18i А15 A1 71 (30 А12 A14I А7 Al 31 А6 A8 О А5 A9l S А4 A1 11 S АЗ DEi @ А2 Al Oi А1 CEi (Ц SO D7i @ DO D6I (20 D1 D5I D2 D4I Vss D3I (iZ SA18 SA17 SA14 SA13 SA8 SA9 SA1 1 SA10 SD7 SD6 SD5 SD4 SD3 шина адреса o Системная шина данных CL1 17 BCK CN103 GND RESET DREQ CSO NC SDO SD2 SD4 SD6 SD8 SD10 SD12 SD14 SAO SA2 NC + 3.3B NC SA4 SA6 SAS SA10 SA12 SA14 SA16 SA18 SA20 SA22 SRD NC о о E co о E о о <L> SYSCLK1 68Р GND DACK IRQ SWR1 NC SD1 SD3 SD5 SD7 SD9 SD1 1 SD13 SD15 SA1 SA3 NC + 3.3B + 8B NC SA5 SA7 SA9 SA1 1 SA 13 SA15 SA17 SA19 SA21 SA23 SWR0 NC LRCK DATA GND CL134 GND 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66)~ 67 CL137 FL172 150 CL138 FL171 150 CL139 FL170 120 CL142 CL143 I I RB116 CL144 CL145 | CL146 CL147 | CL 148 LcCT-J 150 CL149 FL160 150 CL 150 FL1 19 150 CL153 CL155 । CL156 CL157 I CL158 --- CL159 I CL160 CL161 | RB1 17 I 150 I RB118 150 SD1 SD3 SDo SD7 SD9 SD1 1 SD13 SD15 SA1 SA3 SA5 , SA7 SA9 SAI 1 SA13 SA1 5 SA17 SA19 SA21 CL163 FL148 150 CL164 FL147 150 CL165 FL146 120 CL 166 CL167 FL144 150 FL143 150 SA23 SWRO EXTLRCK EXTDATA 68 b R109 100 R108 D119 МА8120 D118 MAS < SPUCS SPUINT SPUOREO SPUDACK RES3.3 4ZZE—< CDRDCS 100 ------< CDRDINT C1 17 20 ! 0,01 В Рис. 4.11. Принципиальная схема модуля центрального процессора игровой приставки SONY PLAYSTATION (3 из 3) 146
Принципиальная схема. Модуль центрального процессора Рассмотренные выше шины адреса, данных и управления предназначены только для подклю- чения к центральному процессору динамического ОЗУ. Для подсоединения внешних устройств и обмена информацией с другими блоками игровой приставки используются 16-разрядная системная шина данных SD0 - SD15 (выводы 10103/107-116,119-124) и 23- разрядная системная шина адреса SA0 - SA23 (выво- ды IC103/125-129,132-142,145-152). Поскольку графическая система игровой пристав- ки особенно требовательна к скорости передачи дан- ных, обмен информацией между центральным и гра- фическим процессорами в SONY PLAYSTATION осуществляется по отдельной 32-разрядной шине VD0 - VD31 (выводы 10103/161-169,172-181,184- 194,197,198). Внутреннее ПЗУ приставки IC102 (MSM334031C) объемом 512 Кб, в котором записана операционная система, необходимая для работы системы, под- ключено к системной шине адреса и восьми млад- шим разрядам системной шины данных. При обра- щении к ПЗУ центральный процессор формирует сигнал низкого логического уровня на выходе SRD (вывод IC103/101) и на линии выборки ПЗУ CS2 (вывод IC103/97). Сигнал CS2 подается на вход вы- бора кристалла микросхемы ПЗУ (вывод 1С102/ 22). Сигнал чтения поступает на вход разрешения чтения ОЕ (вывод IC102/24). Микросхема центрального процессора IC103 дополнительно генерирует управляющие сигна- лы, контролирующие обмен информацией с други- ми модулями игровой приставки. В модуль графического процессора передаются тактовые сигналы DBLCLK (вывод IC103/206) и SYSCLK0 (вывод IC103/154), предназначенные для синхронизации работы двух процессоров. По- средством сигнала разрешения передачи информа- ции GPUCS (вывод IC103/205), сигнала разре- шения записи данных в графический процессор GPUWR (вывод IC103/203) и сигнала разрешения чтения данных из регистров графического процес- сора GPURD (вывод IC103/204) центральный процессор приставки управляет обменом инфор- мацией с графическим процессором. Для этого в зависимости от выполняемой операции (запись или чтение) должен быть установлен низкий логи- ческий уровень на выходе GPUCS и на одном из выходов GPURD или GPUWR. Регистр графичес- кого процессора, с которым производится обмен, определяется уровнем сигнала на выходе GPUA2 центрального процессора (вывод IC103/153). Низ- кий логический уровень соответствует регистру данных, высокий - регистру управления. Когда для передачи данных используется кон- троллер прямого доступа к памяти, графический процессор посылает сигнал запроса на захват шины, устанавливая низкий логический уровень на шине GPUDREQ, подключенной к выводу 200 централь- ного процессора IC103. Получив такой запрос, про- цессор освобождает шины, извещая об этом уста- новкой низкого логического уровня на выходе GPUDACK (вывод IC103/202). От графического процессора на входы центрально- го поступают тактовый сигнал РСК (вывод 1С103/ 160) частотой 13,3 МГц (опорная частота формиро- вания изображения, деленная на 4), сигнал строч- ной синхронизации HBLANK (вывод IC103/159) и сигнал кадровой синхронизации VBLANK (вывод IC103/199). На вход INTIN1 (вывод IC103/102) подается сигнал GPUINT, низкий уровень которо- го свидетельствует о том, что графический процес- сор запрашивает обработку прерывания. Сигнал начальной установки поступает на вход EXT RESET (вывод IC103/76). Он формируется в блоке питания при включении или при нажатии кнопки RESET. Кратковременный импульс низкого логического уровня приводит к сбросу микропроцес- сора и остальных контроллеров игровой приставки. Для управления звуковым процессором цен- тральный процессор вырабатывает четыре сигнала. Звуковой процессор обменивается данными с цен- тральным по сигналу разрешения низкого уровня на выходе SPUCS (вывод IC103/96). Информация при этом передается по системной шине данных, а адрес регистра звукового процессора - по систем- ной шине адреса. Тип операции (запись или чте- ние) определяется сигналами на выходах SRD (вы- вод IC103/101) и SWR0 (вывод IC103/100). Сформированный звуковым процессором сигнал запроса на прерывание SPUINT поступает на вход INTIN9 (вывод IC103/90). Сигналы SPUDREQ (вывод IC103/88) и SPUDACK (вывод 1С103/87) предназначены для запроса прямого доступа к па- мяти: звуковой процессор запрашивает прямой до- ступ путем установки на выходе SPUDREQ сигнала низкого уровня, после чего центральный процессор освобождает шины и сигнализирует об этом низким уровнем на выходе SPUDACK. Сигналы CDRDCS и CDRDINT управляют де- кодером информации, поступающей от CD-ROM. Когда центральный процессор обращается к регис- трам декодера для чтения или записи данных, он устанавливает низкий логический уровень на шине CDRDCS (вывод IC103/95). По шине CSRDINT запрос на прерывание передается от декодера на вход INTIN2 центрального процессора (вывод IC103/94). Отдельной задачей микросхемы центрального процессора является координация взаимодействия процессорного модуля с различными устройства- ми, подключаемыми к разъему параллельного 147
Принципиальная схема. Модуль графического процессора интерфейса CN103, разъему последовательного ин- терфейса CN104 и разъему игрового пульта CN102. На разъем параллельного интерфейса выведены сигналы системной шины данных (контакты CN103/ 6-13,40-47) и системной шины адреса (контакты CN103/14,15,20-29,48,49,54-63). На контакт 2 этого разъема подается сигнал сброса, служащий для на- чальной инициализации подсоединенного устрой- ства. Также в распоряжение внешнего устройства, подключаемого к разъему параллельного интер- фейса, предоставляется один канал прямого досту- па к памяти и один запрос на прерывание. Восполь- зоваться прямым доступом к памяти можно, подав сигнал низкого уровня на контакт 3 разъема. Ког- да центральный процессор освобождает шины, он сигнализирует об этом установкой низкого уров- ня на выходе DACK (контакт CN103/36). Чтобы отправить центральному процессору запрос на пре- рывание, внешнее устройство должно установить низкий уровень на линии IRQ (контакт CN103/37). Регистры внешнего устройства отображаются на память центрального процессора, то есть для работы с ними применяются те же команды процессора, что и для ячеек памяти. При обращении к выделенной для этих целей области памяти процессор формиру- ет сигнал низкого уровня на выходе CS0 (вывод IC103/98), подключенном к контакту CN103/4. До- полнительную информацию о выбранном регистре (если их несколько) получают, дешифруя данные на шине адреса. Если процессор осуществляет чтение из регистра внешнего устройства, на линии SRD (контакт CN103/30) вырабатывается сигнал низко- го логического уровня. В случае записи в регистры на SWR0 (контакт CN103/64) и SWR1 (контакт CN103/38) формируется сигнал низкого уровня. Для синхронизации допускается использовать так- товый сигнал SYSCLK1, с вывода IC103/154 посту- пающий на контакт CN103/32. Кроме того, на разъем параллельного интерфей- са выведены напряжения питания +3,3 В (контак- ты CN103/17.51) и +8 В (контакты CN103/18,52). Для соединения двух игровых приставок в режи- ме сетевой игры чаще всего применяется разъем по- следовательного интерфейса CN104. На его контак- ты поступает напряжение +3,3 В (контакт CN 104/3) и пары сигналов RXD-TXD, DSR-DTR и CTS- RTS, стандартные для последовательных интерфей- сов. При связи двух приставок необходимо на вход TXD одной из них подать сигнал с выхода RXD другой и наоборот (на вход TXD - с выхода RXD) н сделать такие же совмещения для оставшихся двух пар (DSR-DTR и CTS-RTS). Иные контакты разъемов соединяются в соответствии со своими номерами (1 к 1, 10 к 10 и т.д.). Данные передают- ся по цепи TXD (контакт CN103/5), а принима- ются по цепи RXD (контакт CN103/4). Эти сигналы поступают непосредственно с выводов процессора IC103/74 и IC103/75. Управляющие сигналы, пере- сылаемые по цепям DSR (контакт CN104/6), DTR (контакт CN104/7), CTS (контакт CN104/8) и RTS (контакт CN104/9) проходят через буферные уси- лители на транзисторах Q101 - Q104. Диоды D101 - D105, D114 и ВЧ дроссели FL101 - FL106 используются для защиты от бросков напряжения и сглаживания возникающих помех в последова- тельном интерфейсе. Дроссели L101 и L102 уста- новлены на шинах питания. Пульты игровой приставки подключаются к разъ- емам коммутационной платы, которая в свою оче- редь соединена с разъемом CN102 процессорного модуля. От центрального процессора на разъемы для под- ключения пультов поступают сигналы выбора пульта DTR0A (контакт CN102/5) и DTR0B (контакт CN102/3), сигнал тактовой частоты SCK0 (контакт CN102/10) и данные, передаваемые на пульт (кон- такт CN102/8). Центральный процессор получает от пульта запросы на прерывание INT (контакт CN102/ 1), DSR (контакт CN102/2) и пакет с информацией о нажатых на пульте кнопках по цепи RXD (контакт CN102/6). Кроме того, на разъем выведены напря- жения питания +8 В (контакт CN102/4) и +3,3 В (контакт CN102/9). Для защиты от перегрузок и по- мех, как и в последовательном интерфейсе, исполь- зуются диоды и ВЧ дроссели в цепях питания. 4.3.2. Модуль графического процессора Рассмотрим модуль графического процессора игро- вой приставки SONY PLAYSTATION, формирую- щий видеосигнал. Его принципиальная схема при- ведена на рис. 4.12. Обработкой графической информации в пристав- ке SONY PLAYSTATION занимается микросхема графического процессора IC203 (CXD8561Q). Как и в большинстве игровых приставок, видеопроцессор является заказной микросхемой и не имеет аналогов. Данные, необходимые при формировании изображе- ния, хранятся в видеопамяти, в качестве которой при- меняется микросхема 32-разрядного динамического ОЗУ типа SGRAM IC201 (KM4132G2710) объемом 1 Мб. Вместо указанной могут использоваться мик- росхемы pPD481850GF-A12 или цРВ481850-А10. Микросхема IC202 (TDA8771AH) представляет со- бой трехканальный ЦАП, преобразующий 24-разряд- ный цифровой код от графического процессора в три аналоговых сигнала основных цветов. Обмен данными между графическим и централь- ным процессорами приставки происходит по 32-раз- рядной шине данных GPUD, подключенной к вы- водам IC203/24-28,31-36,39-42,45-50,53-59,62-65. 148
Принципиальная схема. Модуль графического процессора VIDC-+5B VID_GND VDACB VDACG VDACR 25 27 26 24 23 co m CD m B6 B7 GO G1 G2 G3 G4 G5 G6 G7 RO TDAB771AH 22 21 2 SG3 SG4 SG5 7 16 19 4 SG7 3 15 SG6 20 (5501/5502) SGO SG2 SG1 (5500) DIG_+3,3B FSC CSYNC SBO SB1 SB2 SB3 SB4 SB5 SB6 SB7 SGO SG1 SG2 SG3 Г C206 0,1 F G X201 R2O2 CL202 * X201 Модель 5500/5501: 53,69МГц Модель 5502: 53,20МГц R204 220 NTPL —VSYNC <Д 158 59 60 SBO SB1 16 SB2 162 157 РСК > DBLCLK > GPUCS > GPUA2 > GPURO > GPURW > GPUDACK > RES3.3G > SYSCLKO > GPUDREQ > GPUINT > HBLANK > VBLANK > Шина данных графического процессора -HSYNC ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION SB3 164 Vss Vdd 166 SB4 167 SB5 168 SB6 169 SB7 170 SGO <• 4165 С21 1 ЮООпФ* || , SG4 SG5 SG6 SG7 SRO SR1 SR2 SR3 SR4 SR5 SR6 SR7 SG3 Vss Vdd SG4 SG5 SG6 SG7 SRO SR1 SR2 SR3 Vss Vdd SR4 SR5 SR6 SR7 Vss Vdd VCKN-A . || < Vdd Vss Vdd VCKP-A Vdd Vss PCK Vss Vdd DMASK DDE2 Vss Vdd —DSYSCK Vss Vdd 171) SG1 -(172) SG2 173 174 175 76 177 178 179 180 181 82 183 184 186 187 188 89 90 4 4191 192 4193 194 195 196 198 199 200 • 4201 202 203 204 -4205 206 207 T C244 < 4185 C210 0,1 F O,1°F 1 И И19? R2O6 22 C209 0,1 F II f4208 Рис. 4.12. Принципиальная схема модуля графического процессора игровой приставки SONY PLAYSTATION (1 из 3)
Принципиальная схема: Модуль графического процессора ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION ^•ssasitisW-'^* FD13 FD15 99 98 96 Vss 1 T 3 FD1 1 FD12 FD14 FD16 Vdd FD1 7 FD18 FD19 FD20 FD21 FD22 FD23 Vss Vdd FD24 FD25 FD26 FD27 FD28 Vss Vdd FD29 FD30 FD31 Vss Vdd TESTO TEST1 TEST2 TEST3 PCKSLO PCKSL1 PCKSL2 Vdd Vss DO D1 D2 D3 Vdd Vss D4 D5 D6 D7 D8 D9 00 m m D10 14X15X16X17 GO 09 09 09 09 09 09 00 IC203 CXDB561Q Г росрический процессор I FD 10(104'' 103 102 01 100 97 95 94 93 92 9 9C 89 88 87 86 85 84 83 82 81 8C 77 76 75 74 73 72 71 7C 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 22 24 25 2C 23 26 27 3C 38 42 45 Рис. 4.12. Принципиальная схема модуля графического процессора игровой приставки SONY PLAYSTATION (2 из 3) 150
Принципиальная схема. Модуль графического процессора GPUDO GPUD1 LA9 LA7 LA б LA5 LA4 LA3 LA2 LA1 LAO LA9 C227 0,1 F ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION C240 0,01 В FD17 FD18 FD19 FD20 FD21 FD22 FD23 FD17 FD18 ... FD19 FD20 FD21 FD22 - FD23 _|| FD24 FD25 FD26 FD27 FD28 FD29 FD30 FD31 C220 0,1 00 Q FD19 С224 0.1 F GPUD2 GPUD3 GPUD4 GPUD5 GPUD6 GPUD7 GPUD8 GPUD9 GPUD1O Рис. 4.12. Принципиальная схема модуля графического процессора игровой приставки SONY PLAYSTATION (3 из 3) 151
Принципиальная схема. Формирователь аудио- и видеосигналов -’-WStSSRS;-;- AUD_GND ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION R443 0 AUD_+5B AUD_GND>f RES3.3> SPCLK> SPBCK> SPDATA > SPLRCK> SPMUTE> ill L IL . C404 ЮООпФ В (5501/5502) R445 - 220 C457 0,1 F C445 0,01 В R446 2700 C444 =7 0,01 L401 1 ОмкГ h C407 J+ 10 16B"j“ R444 10 C42 10 16B CL401 R426 1K R424 П 100K Ц оо v R430 100 tn RD3.95B _ D406 2\ RD3.95B RD 4 RST 5 6 CKS 7 DCK 8 SO 5 0 NC 1 12 NC DVss C443 + 22 6,3B IC403 АК4309 1 )TST1 2 )DVdd MCLK XRSCK 2 7 VrefL 26 VrefH NC 25 NC 24 23 AVss 22 AVdd VCOM 21 20 AOUTL AOUTR NC 18 NC C408 C406 0,1 F 10 16B Q401 DTC144EKA 19 D401 г---, BAP202U । r -------—-4 a ю oo D409 RD3.95B 2\ D408 RD3.95B C423 10 16B R425 1K R429 100 FB401 * FB401, FB402 5500: FERRITE BEAD 5501/5502: CONDUCTOR CHIP FB402 * cr T_ Q402 ' DTA144EKA FB501 FB502 C529 ЮОпФ CH C530 ЮОпФ CH CN502 CL501 CL502 CL503 CL504 CL505 CL506 CL507 CL.508 CL509 CL510 CL51 1 CL512 M_R M_G M_B M...DCOUT M_C M_YCGND M_Y M „VIDEO M._VIGND M_AUR M_AUGND M_AUL I 7 C524 D501 37 QI [7 MAS 120 D502 _ MA8120A ESC R501-L C501 2,2K T 5пФ CH R522 Cr)22 D503 J/ 220 4B MA8120 C522 CSYNC > 75 R521 -pil—D504 C528 MA812O2\ 220 4B VID2_+5B VDACR R503...R505 5500: 390 5501/5502: 150 VDACG > R541...R543 5500: 390 5501/5502: 0 VDACB VIU_GND VID2_ + 5B NTPL > C506 0.1 F R502 2.2K C502 47пФ CH R505! R54 1 4 5 0503 2SA1037AK R542 C504 0.1 F R504 0502 2SA1037AK R543 Q501 2SA1037AK R503 4 C505 0,1 F IH C508 47 6 7 8 9 0 12 6,3B C509 0,1 F -И IC501 CXA1645M GND1 GND2 (28/ RIN ROUT (27) GIN GOUT i (26/ BIN BOUT - (25) NC CVOUT । SCIN Vcc2l (23} NPIN FOi (22) BFOUT YTRAPI C21) YCLPC YOUTl (20} SYNC1 COUTI C19> NC Vref I Vcc 1 Iref I fl7> R520 75 C518 D5°5 V 220 4 В MA8120 —Til—1 D506 , C527 МА8120Ф C518 220 4B R519 75 R516 * C51 1 10 16B L507 C523 ЗЗмкГн R518 75 R517 75 0505 2SC1623-L5L6 C507 0.1 В R515 47K C510 Hh 0,1 F R528 1K R527 18K R525 5600 R530 3.3 0504 2SB624 D507 MA8120 ’ C523 5500/5501: 62пФ 5502: 59пФ * * R516 5500/5501: 20K 5502: 18K Рис. 4.13. Принципиальная схема формирователя аудио- и видеосигналов игровой приставки SONY PLAYSTATION 152
Принципиальная схема. Модуль графического процессора Регистр графического процессора, с которым произ- водится обмен, выбирается в зависимости от уровня сигнала на шипе адреса GPUA2 (вывод IC203/2). Также от центрального процессора поступают такто- вые сигналы DBLCLK (вывод IC203/206), SYSCLK0 (вывод IC203/9) и управляющие сигналы GPUCS (вывод IC203/1), GPURD (вывод IC203/3), GPUWR (вывод IC203/4), RES (вывод IC203/6) и GPUDACK (вывод IC201/5). Назначение этих сигналов было описано в предыдущем разделе. От графического процессора к центральному пере- даются сигнал тактовой частоты 13,3 МГц РСК (вы- вод IC203/199), сигналы кадровой VBLANK (вывод IC203/17) и строчной HBLANK (вывод IC203/14) разверток, сигнал запроса на прерывание GPUINT (вывод IC203/13) и сигнал запроса на захват шин GPUDREQ (вывод IC203/12). Работа внутренних схем графического процессо- ра, отвечающих за формирование выходных сигна- лов развертки, тактируется внутренним генерато- ром, частота которого стабилизирована кварцевым резонатором Х201 (53,69 МГц). Видеопамять обменивается информацией с графи- ческим процессором игровой приставки посредством 32-разрядпой шипы данных FDD - FD31,9-разряд- пой шипы данных LAO - LA9 и сигналов управле- ния RAS (вывод IC201/27), CAS (вывод IC201/26), WE (вывод IC201/25) и CS (вывод IC201/28). Сиг- нал низкого уровня па входе CS разрешает обмен данными с видеопамятью. При этом производимая операция определяется уровнем сигнала на входе WE (низкий логический уровень соответствует за- писи). Адрес передается от графического процессо- ра к видеопамяти в мультиплексном режиме, обыч- ном для динамических ОЗУ. Сначала по шине адреса пересылаются младшие девять разрядов ад- реса, сопровождаемые сигналом RAS низкого логи- ческого уровня, затем старшие девять разрядов, которые запоминаются по спаду сигнала CAS. Ре- генерация памяти происходит автоматически и за- нимает 1024 цикла (16 мс). Микросхема видеопамяти позволяет максималь- но быстро изменять сохраненные данные. Для этого в ней предусмотрены регистры цвета, маски и управ- ления. Помещая определенные команды в регистр управления, можно постранично записывать и счи- тывать данные, производить ускоренную очистку памяти и другие действия над содержимым видео- памяти. Микросхема IC202 представляет собой трехка- пальный ЦАП, задачей которого является преобра- зование получаемых от графического процессора 8-разрядпых кодов в аналоговые значения трех ос- новных цветовых составляющих. Данные от графи- ческого процессора передаются по трем 8-разряд- пым шипам: SBO - SB7 (для кода синего цвета), SG0 - SG7 (для кода зеленого цвета) и SR0 - SR7 (для кода красного цвета). Микросхема трансфор- мирует полученные коды в аналоговые значения на- пряжения на выходах OUTB (вывод IC202/36), OUTG (вывод IC202/40) и OUTR (вывод 1С202/ 44). Напряжения здесь изменяются от 0,2 В (когда па все входы соответствующего капала ЦАП посту- пают сигналы низкого логического уровня) до 3,2 В (когда па все входы канала подается сигнал высоко- го логического уровня). Работа цифро-аналогового преобразователя тактируется сигналом РСК, снима- емым с выхода IC203/199 графического процессора. На рис. 4.13 приведена принципиальная схема формирователя аудио- и видеосигналов, преобра- зующего получаемые данные в сигналы на выход- ном разъеме приставки. Формирователь звуковых сигналов описывается в следующем разделе, а сей- час мы рассмотрим только ту часть схемы, которая генерирует полный видеосигнал. Формирование низкочастотного телевизионного сигнала игровой приставки SONY PLAYSTATION происходит в микросхеме IC501 (СХА1645М). Сиг- налы с выходов ЦАП IC202 поступают па входы формирователя IC501 (выводы IC501/2-4) через эмиттерные повторители па транзисторах Q501 - Q503. Они предназначены для согласования уров- ня выходных сигналов ЦАП (находящихся в пре- делах 0,2-3,2 В) с входными уровнями микросхемы 1С501 (0-1 В). Кроме того, от графического процес- сора приходят сигналы тактовой частоты 4,443 МГц (вывод IC501/6), смесь кадровых и строчных син- хроимпульсов CSYNC (вывод IC501/10) и логи- ческий сигнал NTPL (вывод IC501/7), определяю- щий кодировку формируемого видеосигнала (NTSC пли PAL). В некоторых моделях сигнал NTPL не ис- пользуется и вывод IC501/7 соединен через кон- денсатор с общим проводом. С выходов формирователя IC501 снимается шесть сигналов, подающихся на выходной разъем CN502 видеоприставки. Сигнал M_VIDEO (вывод 1С501/ 24) - это низкочастотный полный телевизионный сигнал стандарта PAL пли NTSC амплитудой около 1,5 В. С выходов COUT (вывод IC501/19) и YOUT (вывод IC501/20) снимаются раздельные цвето- вая п яркостная составляющие видеосигнала. Так- же микросхема генерирует выходные сигналы трех цветовых составляющих ROUT (вывод IC501/27), GOUT (вывод IC501/26) и BOUT (вывод IC501/25). Сигналы поступают на контакты выходного разъема CN501 через согласующие резисторы R517 - R521 (75 Ом). Видеосигнал проходит через раздели- тельные конденсаторы С518, С527, яркостная со- ставляющая - через конденсаторы С522, С528, а цветовая составляющая — через конденсатор С524. Стабилитроны D501 - D511 (МА8120) установлены для защиты выходных цепей приставки от скачков ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 153
Принципиальная схема. Модуль контроллера привода CD-ROM ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION напряжения и статического электричества. Вместо них можно использовать любые стабилитроны на напряжение 4,7 В. 4.3.3. Модуль декодера и звукового процессора Модуль декодера осуществляет преобразование ин- формации, полученной от контроллера CD-ROM, в цифровые данные, передаваемые затем централь- ному процессору. Звуковой процессор применяется программами при формировании различных аудио- эффектов. Принципиальная схема модуля, содержа- щего декодер и звуковой процессор, представлена на рис. 4.14. Данные, считанные с компакт-диска, поступают на вход декодера IC305 (CXD1815), работающего совместно с процессором IC304 (SC430929PB). Эти две микросхемы преобразуют параллельный поток данных и корректируют возможные ошибки. Для хранения данных декодер использует мик- росхему буферного ОЗУ IC303 емкостью 32 Кб с организацией 32Кх8. К микросхеме звукового процессора CXD2925Q (IC308) подключено звуковое ОЗУ IC309 (М5М 44260CJ) объемом 512 Кб с организацией 256Кх16. В нем хранятся данные, необходимые при генера- ции звукового сопровождения. Подробно об этой области памяти рассказывалось в разделе, посвя- щенном программной архитектуре звукового про- цессора приставки. Возможности музыкального процессора позволя- ют использовать приставку SONY PLAYSTATION как бытовой проигрыватель музыкальных компакт- дисков. Для этого к выходу приставки рекомендует- ся подключить стационарный усилитель либо сте- реонаушники. Цифровые аудиоданные последовательно пере- даются от звукового процессора на вход формиро- вателя аудиосигнала IC402 (см. рис. 4.13). Эта мик- росхема представляет собой специализированный двухканальный 16-разрядньш дельта-сигма ЦАП и ра- ботает с частотой дискретизации 44,1 кГц, что вполне достаточно для обеспечения качественного звучания. Информация на ЦАП поступает по трем входам. На вход SDATA (вывод IC402/9) последовательно, бит за битом, приходят звуковые данные. Процесс передачи синхронизируется сигналом на входе BICK (вывод IC402/8). Уровень сигнала на входе LRCK (вывод IC402/10) определяет канал, для ко- торого пересылаются данные (если на этом входе высокий уровень - передаются данные левого ка- нала, если низкий - правого). Работа формирователя аудиосигнала синхрони- зируется поступающим на вход MCLK (вывод IC402/6) тактовым сигналом частотой 16,9344 МГц. Выходные сигналы левого и правого каналов звукового сопровождения снимаются с выходов микросхемы IC402 (выводы IC402/15,16) и посту- пают на выходной разъем CN502. Транзисторные ключи Q403 и Q404 используются для блокиров- ки звука при нажатии кнопки RESET или при на- личии сигнала высокого логического уровня на выводе IC308/37. 4.3.4. Модуль контроллера привода CD-ROM На рис. 4.15 изображена принципиальная схема модуля контроллера CD-ROM и цепей его сопря- жения с процессорной платой. Три идентичных усилительных канала микросхе- мы IC702 (BA6392FP фирмы ROHM), специально предназначенной для проигрывателей CD и приво- дов CD-ROM, управляют сервоприводом объектива (LI, L2) и двигателем привода СГ (М2), а дифферен- циальный четвертый - двигателем вращения диска (Ml). Основные параметры BA6392FP таковы: на- пряжение питания 6 16 В, ток покоя 8-18 мА, мощ- ность рассеивания 1,7 Вт, сопротивление нагрузок 8-20 Ом, выходное напряжение 1,3-5,2 В, коэффи- циент усиления канала вращения диска 8-13 дБ. В исходном состоянии, когда двигатели остановлены, напряжения на всех выходах BA6392FP одинаковы и близки к 3,5 В. В зависимости от разности напря- жений на соответствующих выходах двигатели вра- щаются по часовой или против часовой стрелки. Двигатель Ml контролируется комбинирован- ным способом: грубо - изменением постоянной со- ставляющей, точно - пачками разнополярных им- пульсов. Рабочее направление вращения диска - по часовой стрелке (при положительной разности на- пряжений на выводах 27 и 26 IC702). Открывание крышки привода CD-ROM вызывает экстренное торможение путем подачи на двигатель Ml напря- жения обратной полярности. Управление шаговым двигателем М2, перемеща- ющим считывающую головку, только импульсное. Контакты выключателя S1 замыкаются, когда каретка СГ упирается в ограничитель. Система позициониро- вания считывающей головки получает сигнал, запре- щающий дальнейшее передвижение СГ. Коммутационные помехи подавляются фильтра- ми FB701 - FB704, а выбросы напряжения ограни- чиваются стабилитронами VD1 - VD4 с напряже- нием стабилизации 4,7 В. Сервопривод объектива действует подобно ди- намической головке громкоговорителя, в которой звуковая катушка, находящаяся в поле постоянно- го магнита, движется под действием протекающего тока. Обмотки L1 и L2 сервопривода перемещают объектив во взаимно перпендикулярных плоскостях. 154
Принципиальная схема. Блок питания Излучающий диод лазера А1 включен в коллек- торную цепь транзистора Q701. Номинальная сила тока составляет 60-80 мА. Подстройка осущест- вляется резистором R1, входящим в цепь обратной связи CAP-МЛ. Он расположен на гибком печат- ном ленточном кабеле, соединяющем СГ с вилкой CN702. При уменьшении сопротивления R1 сила тока и мощность излучения лазера увеличиваются. Сигналы, снимаемые с матрицы фототранзисторов А2, поступают на микросхему IC703 (A1791N) че- рез разделительные конденсаторы СЗ — С6. Чув- ствительность устройства регулируется подстроеч- ным резистором RV703. 4.3.5. Модуль адаптации Назначение этого модуля — обеспечивать работу приставки с компакт-дисками как фирменного, так и нефирменного производства с маркировками «NTSC U/С» (США/Канада), «NTSC J» (Япония), «PAL» (Европа, Азия). Здесь применен 8-разрядный микроконтроллер Z86E0208PSC фирмы ZILOG с масочным ПЗУ объемом 512 байт (IC801), в кото- рое при изготовлении заносится программа, пред- ставленная заказчиком. Тактовая частота 4,433 МГц равна частоте цветовой поднесущей в системе PAL и задается кварцевым резонатором Х801. Принципиальная схема устройства показана на рис. 4.16. В блоке использованы всего два выхода микро- контроллера. На первом из них (Q1) формируется синхропоследовательность для интерфейса CD- ROM, на втором (Q2) при включении питания ге- нерируется импульс высокого логического уровня длительностью около 1 с. Все элементы блока адаптации установлены на отдельной печатной плате, приклеенной к обратной стороне процессорной платы приставки и соеди- ненной с ней проводами. В некоторых моделях PLAYSTATION вместо Z86E0208PSC применяется микроконтроллер 12С508/Р фирмы MICROCHIP TECHNOLOGY. 4.3.6. Игровой пульт Принципиальная схема стандартного игрового пуль- та, поставляемого в комплекте с игровой приставкой SOW PLAYSTATION, приведена на рис. 4.17. Основой игрового пульта является микросхема IC1 (23-0271 А), производящая опрос всех кнопок и формирование пакетов импульсов, передаваемых центральному процессору приставки. Процессор опрашивает состояния кнопок 50 раз в секунду во время обратного хода кадровой развертки. Для этого генерируются сигналы PEI, РЕ2, SYN1 и SYN2, представляющие собой пачки импульсов с периодом повторения 20 мс. Микросхема пульта вырабатывает на выходе OUT1 последовательность синхроимпульсов, а на выходе OUT2 - последовательность импульсов, зависящую от состояния кнопок пульта. Нажатым кнопкам соответствуют импульсы отрицательной полярности. Работа микросхемы IC1 синхронизируется внут- ренним генератором, частота которого стабилизи- рована кварцевым резонатором XI (4 МГц). 4.3.7. Блок питания В SONY PLAYSTATION имеется импульсный стаби- лизатор, обеспечивающий высокую экономичность и стабильность выходных напряжений при колебани- ях напряжения в сети и изменении токов нагрузки. Игровая приставка потребляет ток до 0,8 А по цепи +8 В и до 0,5 А по цепи +3,3 В. Принципиальная схе- ма блока питания приведена на рис. 4.18. Через помехоподавляющий фильтр С001, L001 и С002 сетевое напряжение поступает на выпрями- тель (диодный мост D001 - D004) и далее на пре- образователь напряжения. Конденсатор С003 сгла- живает пульсации. Конденсаторы СОЮ, СОИ, для повышения надежности соединенные последова- тельно, цепью GND связывают выпрямитель с об- щим проводом приставки, что ослабляет влияние на нее помех, проникающих по сети. По правилам электробезопасности суммарная емкость этих кон- денсаторов не должна превышать 6600 пФ. Однотактный преобразователь напряжения со- бран по схеме блокинг-генератора с обратным включением диода. Его работа основана на накопле- нии энергии в магнитном поле трансформатора Т001 во время открытого состояния ключа и после- дующей передаче ее в нагрузку. «Самозащищенный» ключ на транзисторах Q001 и Q002 устроен таким образом, что при перегрузках и переходных процес- сах ток, протекающий через него, ограничивается, не достигая опасных значений. Датчик тока состо- ит из резистора R009 и диода D008. Напряжение с него поступает на базу транзистора Q002, откры- вая его при резком нарастании тока эмиттера тран- зистора Q001. В результате базовая цепь последнего шунтируется, что и приводит к ограничению тока. При начальном запуске ключ открывается то- ком, протекающим через резистор R003. Напряже- ние обратной связи, необходимое для самовоз- буждения блокинг-генератора, подается на базу транзистора Q001 с обмотки II трансформатора TOOL Конденсатор С004 вместе с емкостью коллек- торного перехода транзистора Q001 и индуктивно- стью рассеивания трансформатора Т001 образуют последовательный колебательный контур, который настроен на частоту, близкую к частоте преобразо- вания. В результате напряжение на коллекторе ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 755
Принципиальная схема. Модуль декодера и аудиопроцессора ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION < SUBO < SENS < SYSCLK < CDLRCK < CDDATA < CDBCK < C2P0 < EMPH L303 1 ОмкГн L304 1 ОмкГ н CDLRCK CDDATA CDBCK C2P0 EMPH 30 25 22 29 28 26 23 20 24 <л SDO SD1 HD1 PMP 87 C2P0 CDBCK 86 BCLK CDDATA 85 DATA CDLRCK 84 LRCK 83 RMCK 88 R302 C301 ЮК ЮООпФ 43 CDMA1 CDMA2 44 32 33 SD3 37 SD7 35 SD5 SD6 DIG_GND DIG_+3,3B RES3.3 SPUREQ SPUINI SPUDACK SRD SWRD SPUCS CDRDCS CDRDINT (5500: -31/-41 /5501/5502) DIG_+3,3B DIG_GND SER_GND DIG_+5B L..J / ХсЛ apYx / ТxрУxpixлYxxYxoYx 1 YxrYоqYopYo / U MOD 6 _____ MCD7 (40)DECD6 (4j) DECD7 . О ОIO / АЭ О/J ОJLЭ H АЭ ОА-J Z А О I /О U A Z J Ю А Ю (N JT О T9 Cr' A _J ОТ О О О a Q Я n 5 о Z bJ о Ш о о о о О О > о X <2 (X Ld bJ UJ bJ UJ Lj? UJ {/) > Ct CL Q О О Q ° О 0^1^ or '' ro CN О о О О (/J) ( ) bJ UJ bJ bJ bJ Q Q О Q о Y CY (Y) fY (ю 31)HDO SD2 HD2 HD3 SD4 HD4 HD5 HD6 HD7 HOP GND HDRQ XHAC CDMAO MAO MA1 MA2 TD1 TD2 MA3 MA4 MA5 R301 ЮК IC305 CXD1815Q CDMA3 CDMA4 CDMA5 34 38 39 40 41 42 45 46 47 CKSL HCLK 72 52 53 54 55 56 59 57 58 60 62 63 65 66 68 69 /6 79 64 67 70 73 78 80 28 27 26 25 24 23 22 20 1 5 7 12 13 tn 48 49 50 36 R.34.Q2< D R341 22? у, ™ И2Ж CLKO --------< SCON --------<-SQCK --------< MRSW TD3(1OO) TD4(99) TD5(98) TD6(97) TD7 (96) MUTE (95) BCK0(94} WCKO(93) LRCO(92) dato(sh) GND(90} XRST (89) C307 0,1 F < MCLK < RES3.3 < XRST < LDON ,Г L 73 C327 1 J Ц1 R304 1K R303 1K R339 EMPH 1K C2P0 82)- ♦ 81 R343 4700 (5500: -11/-21) Рис. 4.14. Принципиальная схема модуля декодера и аудиопроцессора игровой приставки SONY PLAYSTATION (1 из 2) 156
Принципиальная схема. Блок питания Q001 приобретает почти синусоидальную форму Демпфирующая цепь С005, R002 и D005 защищает транзистор Q001 от перегрузки. Напряжения вторичных обмоток III и IV транс- форматора Т001 выпрямляются диодами с барьером Шоттки D101, D102. Их отличает малое прямое па- дение напряжения, что улучшает энергетические R330 10K C310 0,1 Г C324 I 10E 19 20 23 24 25 26 27 28 29 30 EXTLRCK>n 100 XCS(31b WCKO 99 SPDATA> DATO LRCO XWRI33, SPLRCK>* 97 DACK(34}— SPPBCK>-*- BCKO 1K 96 XIRQ(35> EXTDATA> DTI В DREQ (36 LRIB MUTE(37P —CSPMUTE BOB DTIA XRST (38} LRIA BOA Vss(40 Vss SYSCK 41} XCK Vss XDEI TEST 44 SPMD15 86 XWEI MD1 5(45} SPMD14 MD 1 4 (46 SPMD13 MD 13(47}- SPMD12 R329 10K EXTBCK>—i Vss(42)— TEST (43) 98 SPMD11 SPMD10 R324 1K XDEO XWEO MAO SPMAO —(82) MA1 SPMA1 81) MA2 00 01 R320 75 R323 1K IC308 CXD2925Q (CPU-C) CL301 SPCLK>f * H R325 MD12 48)- MD1 1 49} MD10 79 78 77 75 74 65 56 76 73 72 70 69 67 66 64 63 59 55 54 53 52 57 COLRCK 37 38 40 36 39 R335 22 95 94 93 92 9 90 89 88 87 85 84 83 (5501/5502) R332 0 ГЛ1 R322 LTJ (5500) характеристики источника питания. Резисторы R101, R102 - балластные: они создают нагрузку, необхо- димую для устойчивого функционирования пре- образователя при различных режимах работы приставки. Стабилитрон D103 с напряжением ста- билизации 10 В ограничивает возможные при пере- ходных процессах всплески напряжения. Пройдя ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION Рис. 4.14. Принципиальная схема модуля декодера и аудиопроцессора игровой приставки SONY PLAYSTATION (2 из 2)
Принципиальная схема. Модуль контроллера CD-ROM ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION LDON > i * R706 >: C756 22 6.3B C701 0.1 F SER_+3,5B SER_GND C715 0,047=Ь 10K HI- 5500: -1 1/-21: 1M r74. 5500: —31/—41 Ь , T /5501/5502:470K 0,1 С714 0,0047 В тт R710 e (51)GT0Rzj (52) XUGF (53) XPLCK (54) GFS RFO(25) ADICH24 57) XRADF AVS2(23 IGEN122 CL772 O-(60) MNT1 AVD2(21H CL773 O—(61) MNTO VCKK20 VPC0I19 SYSCLK <62)XTA1 PD0(18 T63)XTAO TES3117 (64) XTSL TES2116H- f (65) DVss (66 FST1 IC701 CXD25450 CL7710-459) MNT2 CL770 0-458) MNT3 (55) RECK ---(56)С2РО CDLRCK CDLRCK CDDATA CDDATA CDBCLK CDBCLK C2PO C2PO EMPH EMPH H67 ESTO MCLK VC (30} FE 29b SE(28 ТЕ (27} RFDC(26} C716 _L 0,1 F "" R732 15K 6 R717 2? ioo DVss(15 TEST (1 4 -----О CL760 R723 33K | R727 15K R733 100K VCOI 13 468) FSOF VCOO(12 <69)C16M FFON(11 MD2 FRDR(10 DOUT EMPH FRON(9 FFDRf 8 WFCK SCDR TFON( 7 ) SCOR TRDR 6 } SBSO EXCK TRON(5 SUBQ TFDR(4 У- SUBQ SFON(3 ) SOCK SRDR(2 KSRON( 1 SENS (/) 100 (5500) CS XRST SCLK DATO XLTC CLKO R780 0 (5501/5502) CL733 ЕМРН 70 77 (5500) 2 7 3 6 4 5 16 2 15 3DC705 3 4 C719 R728 3300 0,5% R708 47K 4 U) 5 12 R721 6 7 8 Г t C725 0,1 В C708 1500пФ В 2200пФ В R777 0 _Юйк LHCJ (5501/5502) C707 R716 0,022 В О _______1500 2200пФ 0,5% В C713 2200пФ В C712 C723 2200пФ В С722 13 7 CL774 0-473 78)SOCK 79) MUTE 80) SENS 'СО (X СК v —1 о сл со 1 1— 1— 3 v о о о 'О р ск ОС р 5 о Q. О со о V о о а. ।— (Л X а со а а X о о о Q р —1 03 ш) (82) (83) (84) (85) (86) (87) (88) (89) (90) (7?) (92) (93) (94) (95) (96) (97) (98) (99 R778 0 ! Л! (5501/5502)0 ~](5500) C755 0,1 F R709 220K my 3DC704 C745 10 16B R702 15K SPEED MOT_+8B MOT_GND CG R719 470K R725 75K C71 1 2,2 6,3В C716 0,1 F II ---- C748 0,1 F 0,04 7 В Рис. 4.15. Принципиальная схема модуля контроллера CD-ROM игровой приставки SONY PLAYSTATION (1 из 3) 158
Принципиальная схема. Блок питания Q CL707 -4—---- “7------Г" CL712 CL706 С741 22 4В ----II- С740 22 4В -НИ-—т CN702 16Р CL775 CL776 CL777 CL778 CL779 • - R749 9К CL780 CL781 CL783 -— • - LD Vcc VC F- NC PD2 PD1 E- Ml VR GND LS FSC+ TRK + TRK- FCS- ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION (5501/5502) JZ и [ D7035 I l D701 I I 5 \ L Z D704 j ID701...D704 । MA8120 \ D702 ’ L ’ J * FB702 . . - - . _ CL785 * FB701 ' e у * FB703 ' . . * FB704 " X * FB701...FB704 5500: -11/—21: CONDUCTOR CHIP 5500: —31/—41 /5501/5502: FERRITE BEAD CN701 4P CL784 • SP- /з) SP + CL786 >-< • — (2) SL+ CL787 —_ Ф — CD SL- RV705 47K —♦ 6 CL751 Рис. 4.15. Принципиальная схема модуля контроллера CD-ROM игровой приставки SONY PLAYSTATION (2 из 3) сглаживающие фильтры (С101, L101, С103 и С102, L102, С104), выпрямленные напряжения через вы- ключатель5\У101 и разъем CN101 поступают на про- цессорную плату После замыкания контактов выключателя SW101 при наличии обоих питающих напряжений загора- ется зеленый светодиод PD101, включенный в кол- лекторную цепь транзистора Q101. Он состоит из 159
Принципиальная схема. Блок питания ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 1 1 Рис. 4.15. Принципиальная схема модуля контроллера CD-ROM игровой приставки SONY PLAYSTATION (3 из 3) IC801 Z86E0208PSC OSC1 OSC2 CPU Q1 02 Vcc GND С1 20 СП Z801 4,433МГц т — ♦ -------------- *► К Выводу ► К Выводу *► 4-5В сз 0,047мк IC705/1 IC705/7 С2 20 PCLK -----► К Выводу IC501/6 Рис. 4.16. Принципиальная схема модуля адаптации игровой приставки SONY PLAYSTATION обычного транзистора и резистивного делителя в цени базы. Вход последнего можно соединять не- посредственно с выходом цифровой ТТЛ или КМОП мн к рос хсм ы. Вы ход 11 ые н ап ряже] и ш преобразователя стабил п- зированы. Регулирование происходит с помощью микросхемы IC101, на вход которой через делитель из резисторов R106, R107 поступает напряжение, пропорциональное выходному в цепи +3,3 В, а на другой вход - опорное напряжение. Выход IC101 через резисторы R103, R104 и светодиод оптрона РС001 подключается к цепи +8 В. При повышении любого из выходных напряжений ток через светоди- од увеличивается. В результате изменяется сопротив- ление участка коллектор-эмиттер фототранзистора оптрона в цени обратной связи блокинг-генератора. Этот процесс вызывает такое изменение частоты и длительности генерируемых импульсов, что выход- ные напряжения возвращаются к установившимся значениям. Например, при увеличении нагрузки в 1,5 раза частота преобразования снижается со 160 до 120 кГц с одновременным увеличением относи- тельной длительности открытого состояния транзис- тора Q001 (то есть времени накопления энергии). Цени R010, С008 и R105, С105 придают системе ав- томатического регулирования iiai[ряже!]i1я динами- ческую устойчивость. Коэффициент стабилизации довольно высок: напряжение в цепи +3,3 В изменяет- ся всего на 0,5% при увеличении тока нагрузки с 0,035 до 1 А. Для напряжения +8 В этот показатель хуже: 11% при изменении тока нагрузки от 0,075 до 1 А. При коротком замыкании любого из вы ходов преобразователь переходит в режим стабилизации тока. После устранения замыкания нормальная ра- бота восстанавливается автоматы чески. Как уже говорилось, преобразователь функцио- нирует все время, пока сетевая вилка вставлена в розетку, даже если контакты выключателя SW101 «POWER» разомкнуты. Открывая игровую при- ставку для ремонта, ire забыванте о высоком напря- жении на этой плате (до 300 В). На плате питания находится таймер IC102, фор- мирующий сигнал сброса для процессорной платы. В момент включения приставки кнопкой SW101, а также при нажатии и отпускании кнопки SW102 на выходе таймера появляется импульс низкого ло- гического уровня длительностью 500 мс. Времяза- дающим элементом является конденсатор С106. Цепь D105, Rill, R112, D106 обеспечивает генера- цию сигнала сброса при кратковременном уменьше- нии напряжения в цепи +8 В. В результате после так 160
Характерные неисправности ^*Я*ЭД«'<ч'Й»«й Рис. 4.17. Принципиальная схема стандартного игрового пульта для приставки SONY PLAYSTATION называемых просадок сетевого напряжения цен- тральный процессор автоматически перезапуска- ется. Напряжение стабилизации D105 составляет 5,1 В. Транзистор Q101 при необходимости можно заме- нить обычным маломощным п-р-п транзистором, включив последовательно в его базовую цепь резис- тор со противлением -10 кОм. В качестве IC101 до- пустимо использовать TLP431CLP, TL1431 (TEXAS INSTRUMENTS), НА174 (HITACHI), КР142ЕН19. В последнем случае нужно иметь в виду, что встречаются приборы с нестандартным расположе- нием выводов. Оптрон TLP621 (РС001) можно за- менить на TLP521 или NEC256. Для повышения надежности платы питания и уменьшения помех другим электронным приборам, создаваемых ею в момент подключения к сети, в раз- рыв одного из сетевых проводов (например, последо- вательно с плавкой вставкой F001) рекомендуется добавить резистор сопротивлением 10-100 Ом и но- минальной мощностью не менее 2 Вт. 4.4. Характерные неисправности Казалось бы, усложнение принципиальной схемы приставки должно привести к увеличению списка возможных неисправностей и способов их устране- ния. Однако па самом деле ремонт игровой при- ставки SONY PLAYSTATION зачастую сводится к замене всей процессорной платы. Это связано как с трудностью перепайки микросхем, так и с тем, что сами микросхемы являются специализированными и отсутствуют в продаже. Поэтому ниже рассмат- риваются только те поломки, которые можно ис- править, нс заменяя процессорную плату и исполь- зуя доступные радиодетали. Приставка не включается Возможные причины: неисправность источника пи- тания; короткое замыкание или обрыв цепей пита- ния; неисправность процессорного модуля. Алгоритм поиска неисправности: 1. Проверить выходные напряжения импульсного стабилизатора. В случае их отсутствия убедиться в исправности предохранителя F001. Если предо - хранитель неисправен, а новый предохранитель при замене сразу перегорает, проверить диодный мост D001 - D004 и транзистор Q001. 2. При выходе напряжений за пределы 7,6-8,2 и 3,2- 3,4 В осмотреть выходные цепи блока питания (ди- оды D101 - D104, конденсаторы С101 - С104 и мик- росхему IC101). 3. Проверить блоки приставки на отсутствие коротких замыканий. При возникновении замыкания часто происходит обрыв одного из печатных проводников в цепи питания, поэтому следует тщательно осмотреть платы и удостовериться в целостности проводников. 4. Если короткого замыкания нет, проверить внутрен- ний стабилизатор игровой приставки. Напряжения на выходе стабилизатора должны быть в пределах 5±0,1 и 8±0,25 В. Если напряжение выходит за ука- занные границы, в стабилизаторе следует прове- рить диоды D2, D3 и микросхему IC501. 5. После проверки цепей питания необходимо прове- рить формирование сигнала RESET. При нажатии на кнопку RESET на контакте разъема CN101/5 дол- жен появиться кратковременный импульс низкого уровня. Наличие на этом контакте постоянного низ- кого уровня или отсутствие импульса при нажатии кнопки позволяет сделать вывод о неисправности кнопки SW102 или микросхемы IC102. Приставка работает нестабильно Возможные причины: неисправность импульсного стабилизатора или внутреннего стабилизатора; ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION 161
Принципиальная схема. Блок питания игровой приставки SONY PLAYSTATION СО О Ю О Z* ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION R109 13,ЗК R1 10 ЮК С104 180 16В <~] С103 180 16В ’ RIO?4”3 1,1 К (ADJ)| г г I □ м о О о о <=; О Е О Е СГ I ф £ о ГО ф D X ф J о т m о ю о S Е ф ф «ч (Т> Рис. 4.18а. Принципиальная схема блока питания игровой приставки SONY PLAYSTATION 162
Характерные неисправности Рис. 4.186. Принципиальная схема блока питания игровой приставки SONY PLAYSTATION ИГРОВАЯ ПРИСТАВКА SONY PLAYSTATION загрязнение контактов разъема для подключения картриджа. Алгоритм поиска неисправности: 1. Проверить выходное напряжение импульсного ста- билизатора. Сбой возникает из-за малой нагрузоч- ной способности стабилизатора. Часто эта пробле- ма вызвана неисправностью микросхемы IC101. 2. Проверить надежность контактных соединений в разъемах приставки, при необходимости проте- реть контакты разъемов спиртом. 3. Проверить внутренний стабилизатор игровой при- ставки. Особое внимание следует обратить на уро- вень пульсаций выходного напряжения. Они не должны превышать 100 мВ. 4. Возможным способом решения проблемы явля- ется установка в цепи питания дополнительных конденсаторов номиналом 100 мкФ х 16 В и 0,01 мкФ на каждой плате приставки и в картридже. Не работают некоторые кнопки пульта Возможные причины: загрязнение1 пульта или неис- правность м 11 кросхем ы. Алгоритм поиска неисправности: 1. Протереть спиртом плату пульта и резиновую про- кладку с токопроводящими площадками. 2. Если неисправны токопроводящие площадки на ре- зиновой прокладке, то можно восстановить их, на- клеив кусочки фольги. Удобнее использовать фоль- гу от сигаретных пачек: она имеет бумажную основу, что обеспечивает лучшее приклеивание к резине. 3. Токопроводящее покрытие на плате воссоздается с помощью очищенного монтажного провода.
в ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК Заключительная глава данной книги посвящена вопросам разработки про- граммного обеспечения, связанного с приставками. Глава разделена на две части. В первой части рассматривается процесс создания программ для игро- вых приставок. Кратко описывается типичная структура игровой програм- мы и необходимые инструментальные средства, приводятся сведения об отладке программ. Во второй части рассказывается об эмуляции игровых приставок с по- мощью персонального компьютера. Здесь разбирается структура про- граммы-эмулятора и анализируются имеющиеся в ней функции. Весь материал представлен применительно к игровой приставке DENDY, однако его можно использовать и для других приставок.
Создание программ для игровых приставок. Структура игровой программы 5.1. Создание программ для игровых приставок В целом создание программ для игровых приставок аналогично разработке программ для обычных ком- пьютеров, но существуют и некоторые особенности. В основном они связаны с использованием кросс- средств, поскольку программа составляется не на том компьютере, на котором будет выполняться. Также широко применяются специализированные графические редакторы, которые ускоряют процесс получения фоновых изображений и спрайтов в фор- мате, требующемся для конкретной приставки. 5.1.1. Использование инструментальных средств Ниже представлен перечень инструментальных средств, необходимых для разработки программ: • текстовый редактор, в котором набираются исходные тексты программы; • кросс-ассемблер (если вы создаете программу на ассемблере) или кросс-компилятор (если вы пишете программу на языке высокого уровня), которые генерируют код для процессора, уста- новленного в игровой приставке; • специализированный графический редактор, с помощью которого будет создаваться игро- вая графика (его тип зависит от того, для ка- кой игровой приставки предназначается про- грамма); • эмулятор игровой приставки для предвари- тельной отладки программы; • программатор и перепрограммируемый кар- тридж для завершающей отладки и создания ПЗУ картриджа. Для каждой игровой системы фирма-производи- тель выпускает комплект разработчика, включающий все названные компоненты и необходимую докумен- тацию. Однако, поскольку цена такого комплекта ко- леблется от 2000 до 10000 долларов, его приобрете- ние для домашнего использования не представляется возможным. Как правило, вместо него применяют бесплат- ные и условно бесплатные программы аналогично- го назначения, доступные через Internet. Часто весь набор программ (эа исключением программатора) объединяют в комплект, называемый интегриро- ванной средой разработки (IDE). Перечислим этапы создания программы: 1. Написание первой версии программы, определе- ние ее размера и типа ПЗУ, создание графики. 2.О тладка базовой версии программы с помощью эмулятора. 3.З апись отлаженной программы в перепрограмми- руемое ПЗУ картриджа и ее проверка на игровой приставке. Не следует пропускать этот этап, по- скольку функционирование эмулятора и приставки не идентично, особенно при формировании звуко- вого сопровождения и при использовании жесткой синхронизации по времени выполнения. 4.Д обавление в базовый вариант звукового сопро- вождения, дополнительной графики, специальных аппаратно-зависимых функций, после чего про- грамма снова проверяется на реальной приставке. 5.З апись готовой программы в ПЗУ картриджа и пе- редача на окончательное тестирование. 5.1.2. Структура игровой программы На рис. 5.1 приведена блок-схема типичной про- граммы для игровой приставки. В данном разделе мы рассмотрим ее структуру и назначение отдель- ных блоков, а в следующем покажем, как указанные концепции реализуются при программировании для конкретной модели. ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК Рис. 5.1. Блок-схема программы для игровой приставки 165
Создание программ для игровых приставок. Пример разработки программы ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК Итак, первым действием, которое должна выпол- нить программа, является инициализация аппара- туры приставки. Фактически при этом в регистры видеопроцессора, контроллера ввода/вывода, зву- кового процессора и других микросхем записывают- ся значения, определяющие режим работы. Чтобы добиться стабильного функционирования програм- мы, необходимо явно задавать все значения, а не полагаться на те, которые устанавливаются в при- ставке при нажатии кнопки RESET. Затем происходит инициализация глобальных переменных игровой программы. В память видео- процессора загружаются необходимые знакогенера- торы и указываются начальные значения перемен- ных, которые являются общими для всей программы. Обычно это адреса различных таблиц, подпро- грамм обработки запросов на прерывание и ссыл- ки на различные структуры данных. После завершения инициализации на экран вы- водится главное меню игры, программа переходит в состояние ожидания ввода данных. В этом блоке в простейшем случае следует постоянно опраши- вать состояние кнопки START на игровом пульте, а когда она будет нажата, перейти к следующему блоку. Более сложные меню могут включать в себя несколько пунктов, позволяющих выбрать число игроков, изменить уровень сложности, загрузить записанную ранее игровую ситуацию и т.д. Кроме того, меню допустимо оформить с помощью раз- личных анимированных спрайтов, добавить музы- кальное сопровождение - тогда структура меню уподобится структуре целой программы с блоками, обрабатывающими различные варианты выбора пользователя, отвечающими за вывод изображений и звука, перемещающими графические объекты. Когда пользователь ввел требуемые данные и на- жал на кнопку START, запускается собственно иг- ровая программа, которая начинается с инициали- зации переменных. В этом блоке указывается число игровых объектов и их начальные позиции, счет игры становится равным 0, задается стартовая по- зиция игрока, а в видеопамять при необходимости загружается новый знакогенератор. Основной цикл игры начинается вводом инфор- мации с игрового пульта. Затем центральный про- цессор рассчитывает новые положения всех игро- вых объектов и проверяет, не закончилась ли игра. Если игра действительно закончилась, программа выведет финальную картинку и вернется к началь- ному меню. В противном случае после очередного кадрового синхроимпульса процессор обновит изоб- ражение на экране, а программа будет вводить дан- ные с пульта, и основной цикл повторится. Отметим, что процедура обновления изображе- ния часто вызывается при поступлении запроса на прерывание по кадровому синхроимпульсу. В этом случае процессор не тратит время на ожидание син- хроимпульса, а сразу переходит к новому вводу данных с пульта. Конечно, блоки описанной схемы могут менять- ся местами. Для упрощения материала в представ- ленную блок-схему не включены модули, которые отвечают за вывод звукового сопровождения. 5.1.3. Пример разработки программы Для изучения основ программирования мы выбра- ли логическую игру Sokoban, на примере которой можно ознакомиться с особенностями работы с пуль- тами и графикой, а потом перейти к созданию соб- ственных проектов. Попробуем написать простейшую игру для при- ставки DENDY, воспользовавшись блок-схемой, приведенной на рис. 5.1. Полный текст программы приведен в приложении 2, а все файлы проекта можно найти на сайте www.dmkpress.ru. Начнем с распределения памяти и определения основных структур данных. Игра Sokoban состоит из нескольких уровней, каждый из которых пред- ставляет собой небольшой лабиринт. В разных ме- стах расставлены контейнеры, которые игрок дол- жен переместить на выделенное для них место. При этом игрок может передвигаться сам или толкать один контейнер. Тянуть контейнер за собой или толкать несколько контейнеров запрещено. Типич- ный вид игрового экрана представлен на рис. 5.2. Рис. 5.2. Вид игрового экрана программы Sokoban Наметим основные блоки данных, составляю- щие игру. Во-первых, необходим знакогенератор, из которого будут создаваться изображения на экра- не. Чтобы сделать игру привлекательнее, мы будем применять для каждого уровня разные наборы сим- волов. Всего потребуется пять групп символов для отображения следующих объектов: стена, пол, мес- то для контейнера, контейнер и игрок, а также от- дельный символ пробела для заполнения неисполь- зуемых фрагментов экрана. Неподвижные объекты. 166
Создание программ для игровых приставок. Пример разработки программы к которым относятся пол, стены и места для кон- тейнеров, выводятся как фоновое изображение, иг- рок и контейнеры реализуются в виде спрайтов. Сам знакогенератор помещается в ПЗУ, подключа- емое к видеопроцессору. Итак, произведем распределение памяти знако- генератора: • символы с кодами 0 Oh - 3Fh применяются для стен; • символы с кодами 5 Oh - 8 Fh - для пола; • символы с кодами AOh - DFh - обозначение мест для контейнеров; • спрайты с кодами 0 Oh - 3Fh - для игрока; • спрайты с кодами 4 Oh - 7 Fh - для контейнеров. Кроме перечисленных, в знакогенераторе распо- лагаются символы для создания титульного экрана с кодами от FOh до FFh (символы для титульной кар- тинки) и от 9 Ah до 9Fh (символы для надписи «PRESS START»). Первый знакогенератор с базовым адресом OOOOh используется для спрайтов, а второй, начинающийся с адреса lOOOh, - для элементов фонового изображения. Выбранное в данном слу- чае распределение памяти знакогенератора приве- дено на рис. 5.3. OOOOh O3FFh 0400h Спрайта для игрока O7FFh 0800h Спрайта для контейнеров Не используется OFFFh Знакогенератор для спрайтоВ 1000h 13FFh 1400h 14FFh 1500h l8FFh 1900h 19FFh lAOOh 1DFFh lEOOh 1EFFh iFOOh IFFFh Симбола для рисоВония стен Не используется СимВола для рисобания пола СимВола для меню СимВола для мест контейнеров Не используется СимВола для титульного экрана Знакогенератор для фона Рис. 5.3. Распределение памяти в знакогенераторе игры Sokoban Вы можете нарисовать свой знакогенератор, ру- ководствуясь приведенными в описании игровой приставки сведениями, или воспользоваться гото- вым знакогенератором из файла sokoban.chr. Помимо знакогенератора нам потребуется ПЗУ для хранения карт уровней, титульного экрана и са- мой программы. Разработаем структуры уровня игры. Для каждого уровня нужна карта и палитра. Карты уровней начинаются с адреса 8 0 0 Oh, каж- дая занимает 256 байт и состоит соответственно из 16 строк по 16 байт. Первый байт в каждой строке используется для хранения цвета из палитры дан- ного уровня. Таким образом, в 16 строках заданы все 16 цветов палитры уровня. Оставшиеся 15 байт строки применяются для изображения карты уровня. Каждый байт определяет две клетки карты, при этом принята следующая кодировка: О - пустая клетка? 1 - стена; 2 - пол; 3 - место для контейнера; 4 - контейнер; 5 - игрок. Закодированные данные для карты уровня, изоб- раженного на рис. 5.2, при этом будут выглядеть так: 8000: 00 00 00 00 00 00 00 00 8008: 00 00 00 00 00 00 00 00 8010: 0Е 00 00 00 00 00 00 00 8018: 00 00 00 00 00 00 00 00 8020: 02 00 00 00 00 00 00 00 8028: 00 00 00 00 00 00 00 00 8030: 11 00 00 00 00 01 11 11 8038: 00 00 00 00 00 00 00 00 8040: 21 00 00 00 00 01 22 21 8048: 00 00 00 00 00 00 00 00 8050: 0F 00 00 00 00 01 42 21 8058: 00 00 00 00 00 00 00 00 8060: 02 00 00 00 01 11 22 41 8068: 10 00 00 00 00 00 00 00 8070: 05 00 00 00 01 22 42 42 8078: 10 00 00 00 00 00 00 00 8080: 36 00 00 01 11 21 21 12 8088: 10 00 11 11 11 00 00 00 8090: OF 00.00 01 22 21 21 12 8098: 11 11 12 23 31 00 00 00 8ОА’О: 05 00 00 01 24 22 42 22 80А8: 22 22 22 23 31 00 00 00 80В0: 15 00 00 01 11 11 21 11 80В8: 21 51 12 23 31 00 00 00 80С0: 14 00 00 00 00 01 22 22 80С8: 21 11 11 11 11 00 00 00 80D0: 00 00 00 00 00 01 11 11 80D8: 11 00 00 00 00 00 00 00 80Е0: 00 00 00 00 00 00 00 00 80Е8: 00 00 00 00 00 00 00 00 80F0: 00 00 00 00 00 00 00 00 80F8: 00 00 00 00 00 00 00 00 Следуя приведенному образцу, можно создавать уровни вручную или написать программу для ри- сования уровней и знакогенераторов к ним. Кроме карт уровней, в выделенной области памяти находится титульный экран и палитра для него. Эти данные занимают диапазон адресов B200h - B30Fh. Начиная с адреса C000h располагается сама про- грамма, а в ячейках FFFAh - FFFFh записаны три адреса, по которым осуществляется переход при сбро- се процессора и поступлении запросов на маскируе- мое и немаскируемое прерывание. Распределение па- мяти в нашей программе можно увидеть на рис. 5.4. ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК 167
Создание программ для игровых приставок. Пример разработки программы ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК Рис. 5.4. Распределение памяти в игре Sokoban Теперь перейдем к написанию программы. Сна- чала в блок-схеме идет инициализация аппаратуры, создание таблиц, распределение памяти и другие действия, выполняющиеся только один раз при первом запуске программы с помощью следующего фрагмента: org $C000 ; Адрес начала программы reset: sei eld Idx stx #$0 $2000 ; Выключение stx stx Idx txs / ppuconl $2001 #$FF видеопроцессора. Установка указателя Ida #7 стека. Подготовка к очистке sta $1 ОЗУ по адресам Ida Idy #0 #0 0 - $7FF. clrram: sta (0),y ; Цикл очистки ОЗУ. dey bne dec bpl Ida clrram $1 clrram #$20 Подготовка к очистке sta $2006 ; видеопамяти. Запись адреса для Ida #0 доступа к видеопамяти в регистры sta Idy Idx $2006 #$10 #0 видеопроцессора. clrvram: sta $2007 Цикл очистки / видеопамяти. dex bne clrvram dey bne clrvram Ida #$3F ; Установка адреса Idx #$0 ; для копирования sta $2006 ; палитры в память stx ; видеопроцессора. $2006 Idy #$20 setpal: Ida bgpal,х ; Цикл sta ; копирования ; данных $2007 ; в ОЗУ палитры. inx dey bne setpal Ida #$0 ; Задание sta ; используемых ; символов bgwall ; для стен, Ida #$50 sta bgground ; для пола, Ida #$А0 sta bggoal ; для мест Ida ; контейнеров, #$0 sta spehar ; для игрока, Ida #$40 sta spbox ; для контейнера. Ida #1 sta boxleft Ida #$90 ; Включение sta ; видеопроцессора, ; задание $2000 ; экранной страницы sta ; и разрешение ppuconl ; на формирование После ; запроса NMI. выполнения приведенного фрагмента приставка полностью инициализирована и готова к работе. Обратите внимание: в этой части про- граммы явно производится очистка всех областей памяти. Никогда не стоит рассчитывать, что при за- пуске программы во всех ячейках памяти и регис- трах будут записаны нули. Следующим фрагментом блок-схемы является отображение титульного экрана и работа с меню. Стартовое меню в нашей игре отсутствует, и пос- ле вывода заставки программа просто ждет, пока на игровом пульте будет нажата кнопка START. Весь блок удобно оформить в виде подпрограммы и добавить в основную программу следующий фраг- мент: 168
Создание программ для игровых приставок. Пример разработки программы Ida #0 sta startkey jsr title ; Вывод титульного экрана После того как пользователь нажал требуемую кнопку, программа переходит к следующему бло- ку - началу основного цикла игры: Ida #$80 sta lvlptr+1 loop: jsr loadlevel waitnmi: jmp waitnmi ; Установка ; указателя ; данных уровня ; на адрес $8000 ; (уровень 1). ; Загрузка ; уровня. ; Ожидание ; кадрового ; импульса. Все действия очень просты: сначала указатель текущего уровня устанавливается на адрес 8 0 0 Oh - адрес блока данных для первого уровня. Затем под- программа loadlevel загружает карту уровня и отображает ее на экране. Когда уровень загружен, программа входит в бесконечный цикл и ожидает поступления запроса на прерывание по кадровому синхроимпульсу от видеопроцессора. После поступления запроса на немаскируемое прерывание, который формируется видеопроцес- сором в начале кадрового синхроимпульса, цен- тральный процессор прекращает цикл ожидания и переходит на метку vblank. Если текущий уро- вень выполнен, программа начнет загрузку в па- мять следующего уровня; если же задача, стоящая перед игроком, еще не решена, будет произведена инициализация рабочих переменных. vblank: pha ; Сохранение ; регистров A, X и Y txa ; в стеке. pha ty.a pha Ida boxleft ; Если boxleft = 0, bne Play ; то уровень ; завершен. inc lvlptr+1 ; Изменение указателя ; на данные jsr loadlevel ; и загрузка нового Play: Ida #0 уровня. ; Отключение sta $2005 ; скроллинга ; изображения. sta $2005 sta dirx ; Обнуление ; переменных, sta diry ; задающих ; направление ; движения. Ida #2 sta $4014 ; Программирование ; звукового ; процессора. После опроса игрового пульта можно изменить положение всех объектов на игровом поле. Снача- ла фиксируется состояние пульта в его регистре и считывается состояние кнопок А, В и SELECT. Поскольку в игре эти кнопки не используются, то полученные данные игнорируются. Idx #1 ; Фиксация состояния ; пульта. stx $4016 dex stx $4016 Ida $4016 ; Считывание состояния ; кнопок А, Ви SELECT Ida $4016 ; Эти кнопки Ida $4016 ; не используются. ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК Затем проверяется состояние кнопки START. Если игрок нажимает эту кнопку, происходит пере- загрузка текущего уровня. Ida $4016 ; Нажата клавиша START? and #1 beq notstart pla ; Да, стек очищается. pla pla dec bgwall ; Установка ; знакогенератора. dec bgground dec bggoal dec spchar dec spbox jmp bigloop Повторная загрузка ; уровня. Затем следует проверка состояния клавиш управления движением игрока. Если какая-либо из них нажата, то программа соответствующим обра- зом инициализирует переменные dirx и diry, пос- ле чего управление передается фрагменту, начина- ющемуся с метки trymove, который проверяет допустимость данного перемещения. Если же ни одна из клавиш не задействована, то процедура об- работки прерывания прекращается, и программа продолжает исполнение бесконечного цикла, ожи- дая нового запроса на прерывание. 169
Написание программ-эмуляторов. Что и как эмулировать ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК notstart: Ida #0 sta startkey. Ida $4016 ; Вверх. and #1 beq notup Ida #$FF sta diry jmp trymove notup: Ida $4016 ; Вниз. and #1 beq notdown Ida #1 sta diry jmp trymove notdown: Ida $4016 ; Влево. and #1 beq notleft Ida #255 sta dirx jmp trytomove notleft: Ida $4016 ; Вправо. and #1 beq notmove Ida #1 sta dirx jmp trytomove notmove: pla ; Восстановление ; регистров. tay pla tax pla rti Фрагмент программы, расположенный начиная с метки trymove, контролирует перемещение иг- рока в указанном направлении. Если движение невозможно, программа переходит на метку not- move и возвращается в цикл ожидания кадрового синхроимпульса. Если же игрок передвигается, бу- дет вызвана подпрограмма move, меняющая поло- жение спрайта игрока. Однако если при этом необ- ходимо перетащить еще и контейнер, то вызывается подпрограмма movebox, перемещающая спрайты контейнера и игрока. Прежде чем осваивать написание программ для конкретной приставки, следует научиться адаптиро- вать имеющиеся программы. Однако у каждой из рассмотренных приставок существуют свои прави- ла оформления программ, фиксированные области данных и т.д. Часть этих особенностей уже рассматривалась при описании конкретных приставок и сопровожда- лась фрагментами программ. Кроме того, в приложе- нии 2 приведено несколько законченных программ. Их изучение и модификация позволят лучше по- нять приемы программирования игровых приста- вок различных моделей. 5.2. Написание программ-эмуляторов При разработке программного обеспечения игровых приставок широко используются эмуляторы. Вопро- сы их создания представляют отдельную и весьма обширную область, так что здесь мы приведем лишь краткий обзор применяемых технологий. 5.2.1. Что и как эмулировать Эмуляция - это моделирование-работы какого- либо программируемого устройства на другом ком- пьютере, возможно отличающемся по архитектуре, с применением специальной программы-эмулято- ра, но без изменения исходного кода выполняемой программы. Эмулировать можно практически любое устрой- ство, внутри которого установлен микропроцессор и которое работает в соответствии с заданной про- граммой. К таким устройствам относятся компью- теры, калькуляторы, игровые приставки и автома- ты, микроконтроллеры и многое другое. Ниже мы расскажем о некоторых вопросах эмуляции игро- вых приставок и компьютеров. Существуют два основных направления эмуля- ции - интерпретация кода и рекомпиляция. Интерпретация кода При интерпретации программа-эмулятор последо- вательно читает из памяти коды команд програм- мы и выполняет их. Главный цикл работы эмуля- тора выглядит так: while (state == EMU_RUN) Read(OpCode); Execute (OpCode); / / Чтение кода // команды. // Исполнение / / команды. Работа подобных эмуляторов проста и понятна. Их положительными чертами являются легкость встраивания отладочных функций, возможность гибкой коррекции скорости работы и легкость мо- дификации. Главный, и весьма большой, недоста- ток - низкая производительность. Как и любой 170
Написание программ-эмуляторов. Подготовка к написанию эмулятора интерпретатор, такой эмулятор занимает много вре- мени центрального процессора и требует применения мощного компьютера для достижения приемлемой скорости выполнения эмулируемой программы. Рекомпиляция кода При использовании статической рекомпиляции программа-эмулятор обрабатывает сразу всю ис- ходную программу и формирует программу, кото- рую можно будет запустить на другом компьютере. Код, получающийся в результате статической ре- компиляции, функционирует очень быстро. Одна- ко существуют и ограничения: например, данный метод неприменим к программам, которые во вре- мя исполнения изменяют собственный код. При использовании динамической рекомпиля- ции программа-эмулятор преобразует фрагменты исполняемой программы в код, который может быть выполнен на другом компьютере, непосред- ственно во время ее работы. Как обычно, наилучшие результаты достигаются при разумном совмещении всех трех методов. В на- стоящей главе мы ограничимся вопросами созда- ния эмуляторов, использующих метод интерпрета- ции кода. 5.2.2. Подготовка к написанию эмулятора Если вы решили написать эмулятор, подготовьтесь к этому и оцените свои возможности, а также про- изводительность системы, которую вы собираетесь эмулировать, и системы, на которой будет работать программа-эмулятор. Не пытайтесь написать эму- лятор Dreamcast, который бы функционировал на компьютере с процессором i486. Помните, что эму- лятор - это сложный проект, требующий тщатель- ной оптимизации кода для достижения наивыс- шей производительности. Здесь потребуется опыт программирования и хорошее знание цифровой электроники, а также языка ассемблера - и для системы, которую нужно эмулировать, и для сис- темы, на которой будет выполняться программа- эмулятор. Шаг 1. Поиск сведений об эмулируемой системе Для начала следует собрать все возможные сведе- ния о той системе, для которой вы собрались напи- сать эмулятор. К этим сведениям относится полная информация о центральном процессоре, видеопро- цессоре, портах ввода/вывода, распределении ад- ресного пространства и многое другое. Часть необ- ходимой информации представлена в этой книге, остальное доступно через Internet. Весьма приветствуется наличие рабочей эмули- руемой системы, что позволит сразу же проверить появляющиеся в процессе разработки вопросы. Чем больше данных вы соберете, тем лучше. Затем тщательно изучите их и переходите ко второму шагу. Шаг 2. Выбор языка программирования Хотя существуют примеры эмуляторов, написан- ных на таких языках программирования, как Java и Visual Basic, из-за серьезных требований к быстро- действию программы реально Можно рассматривать только две альтернативы: С и ассемблер. Конечно, если вы пишете эмулятор любимого калькулятора «Электроника», который будет работать на Pen- tium III, вас устроит и Visual Basic. Но мы рассмат- риваем ситуацию, приближенную к реальности, по- этому ограничимся выбором из двух языков. Сначала рассмотрим ассемблер. Преимущества- ми ассемблера являются: • создание максимально быстродействующей программы; • применение при эмуляции регистров процес- сора, что приближает систему к рекомпилиру- ющему эмулятору; • при использовании регистров процессора в ка- честве регистров эмулируемой системы многие команды могут быть напрямую заменены един- ственной командой центрального процессора компьютера, на котором работает эмулятор. Конечно же, кроме положительных моментов есть и отрицательные: • программы на ассемблере имеют большой объем и достаточно трудны для понимания, модифи- кации и отладки; • при разработке аналогичного эмулятора, но для другого компьютера программу придется пол- ностью переписывать; • поиск ошибок и правка текста занимают мно- го времени. Теперь пришла очередь языка С. Его достоинства таковы: • программы легко понимаются и отлаживаются; • при разработке эмулятора для другого компью- тера не требуется полностью переписывать про- грамму; • программу легко модифицировать, добавив эму- ляцию различных дополнительных устройств. А вот и недостатки: • размер скомпилированной программы по срав- нению с ассемблером увеличивается, а быстро- действие уменьшается. ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК 777
Написание программ-эмуляторов. Программирование эмулятора ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК Наилучшего результата можно добиться при со- вместном использовании обоих языков: интерфейс пользователя пишется на С, а критичные по време- ни исполнения процедуры эмуляции - на ассемб- лере. В любом случае необходимо хорошее знание используемого языка. Если вы разрабатываете эмулятор простой сис- темы, например DENDY, несложно удовольство- ваться одним только С. Если же ваша цель - эму- лятор PLAYSTATION или NINTENDO 64, то без ассемблера вам не обойтись. Наиболее разумным представляется следующий подход: сначала программа-эмулятор пишется пол- ностью на С, затем отлаживается, и часть, отвечаю- щая за эмуляцию, переписывается на ассемблере. ШагЗ. Разработка проекта После сбора информации об эмулируемой системе и выбора языка программирования начинается раз- работка проекта, который лучше разделить на не- сколько файлов. Основная программа реализует интерфейс пользо- вателя, загружает исполняемую программу, запус- кает непосредственно эмулятор и при необходимо- сти вызывает встроенный отладчик. Модуль эмуляции центрального процессора вы- полняет команды центрального процессора эмули- руемой системы. Если вы эмулируете стандартный процессор, например Z80 или 6502, можно восполь- зоваться одним из свободно распространяемых эму- ляторов данного процессора, которые доступны в Internet. Модуль эмуляции памяти обрабатывает обраще- ния любых устройств к памяти системы. Модуль эмуляции видеопроцессора формирует изображение на экране, а также работает со спрай- тами, устанавливает флаги синхронизации и гене- рирует сигналы прерывания для модуля эмуляции центрального процессора. Эта часть сложна для на- писания и при выполнении занимает достаточно много времени центрального процессора. Модуль эмуляции ввода/вывода позволяет вво- дить информацию, например с клавиатуры, и пре- образует ее в данные, которые для эмулятора про- цессора аналогичны сигналам от различных внешних устройств, таких как пульты, джойстики, световые пистолеты и т.д. Модуль эмуляции звукового процессора форми- рует звуковое сопровождение. Эта часть программы наиболее критична к качеству синхронизации ра- боты эмулятора и сложна в отладке. Встроенный отладчик позволяет в любой момент остановить выполнение программы, проверить состо- яние регистров процессора и памяти. Модуль необ- ходим при отладке программы-эмулятора. Если вы пишете эмулятор для последующего создания про- граммного обеспечения, следует уделить особенное внимание удобству работы с отладчиком и предо- ставляемым возможностям. Также очень полезными будут кросс-ассемблер и дизассемблер для эмулируемой системы. При же- лании вы можете написать и их, но проще воспользо- ваться уже готовыми, которые доступны в Internet. 5.2.3. Программирование эмулятора Теперь мы готовы к созданию эмулятора. В каче- стве примера рассмотрим простейший эмулятор игровой приставки DENDY, описание которой при- ведено в первой главе. Шаг 1. Необходимые данные об эмулируемой системе приведены в главе 1. Эмулятор будет рабо- тать на компьютере IBM PC с видеокартой VGA. Шаг 2. Эмулятор пишется полностью на С, без применения ассемблера. Шаг 3. В проект войдут следующие файлы: main.c - основная программа; сри.с - эмулятор центрального процессора; шешогу.с - эмулятор памяти; screenx - эмулятор видеопроцессора; gamepad.c - эмулятор игрового пульта. Мы не включили в проект эмуляцию звукового процессора и встроенный отладчик, поскольку во- просы создания качественных эмуляторов заслу- живают отдельной книги. При желании можно до- писать эти модули самостоятельно. Эмуляция центрального процессора Собственно говоря, мы уже познакомились с про- стейшим эмулятором центрального процессора. Опишем его еще раз и попробуем изменить для на- ших целей. #define EMU_RUN 1 BYTE state, OpCode; main() { state = EMU_RUN; while (state == EMU_RUN) { OpCode = ReadMemory(); Execute (OpCode); } } Сначала нужно задать константу EMU_RUN по- средством стандартной директивы препроцессора // Чтение // кода / / команды. // Исполнение // команды. 172
Написание программ-эмуляторов. Программирование эмулятора языка С #def ine. Затем указываются две перемен- ные: state и Opcode. В переменной state будет храниться код, определяющий режим работы эму- лятора процессора. Далее следует цикл выполнения команд. В нача- ле цикла переменной Opcode присваивается значе- ние кода команды, считанного из памяти функцией ReadMemory (). Затем функция Execute выполня- ет считанную команду, и цикл повторяется. Однако в результате выполнения этой програм- мы мы ничего не сможем увидеть и ввести, по- скольку для взаимодействия эмулятора с экраном и клавиатурой не предусмотрено никаких функ- ций. Кроме того, отсутствует эмуляция подачи сиг- нала сброса и сигнала запроса на прерывание. Итак, следует определить, какие функции нам по- требуются. Во-первых, ResetCPU, эмулирующая сброс микропроцессора. Затем IrqCPU HNmiCPU, которые будут выполнять действия, необходимые при поступлении запросов на прерывание. StepCPU исполняет одну команду процессора. Главной функ- цией модуля станет RunCPU, задачей которой яв- ляется запуск программы и вызов всех остальных функций эмулятора. Также нужно создать перемен- ные, эмулирующие регистры центрального процес- сора. Начнем работу с указания необходимых струк- тур данных. Центральный процессор игровой при- ставки DENDY содержит пять 8-разрядных регис- тров и один 16-разрядный: struct REG_6502 { byte a; /* Аккумулятор. */ byte p; /* Регистр флагов. */ byte x,y; /* Индексные регистры. byte s; /* Указатель стека. */ union /* 16-разрядный счетчик команд. */ { struct {byte l,h;} В; word W; } pc; } cpu_reg; int iPeriod, iTact; Теперь, чтобы обратиться, например, к перемен- ной, хранящей значение регистра X эмулируемого процессора, нужно задать cpu_reg . х. Особого внимания заслуживает реализация 16-раз рядного счетчика команд. Приведенное выше описание по- зволяет обращаться как ко всему регистру в целом (cpu_reg . pc . W), так и отдельно к старшему (cpu_reg. рс . В . h) или младшему (cpu_reg. рс. В. 1) байту этого регистра. Кроме данной структуры, описывающей регис- тры эмулируемого процессора, для эмуляции сис- темы прерываний используются две переменные: iPeriod и iTact. Каждая команда процессора вы- полняется за определенное число тактов, и, посколь- ку частота кадровой развертки телевизора известна заранее (не забудьте, что она различна для систем PAL и NTSC), можно рассчитать количество команд, выполняемых процессором в течение формирования одного кадра. Полученное число записывается в пе- ременную iPeriod. Когда функция StepCPU обра- ботает команду, в качестве результата она вернет число тактов iTact, за которое команда была бы выполнена реальным процессором. Это число вычи- тается из переменной iPeriod; как только она ста- нет меньше или равна 0, программаэмулятор обно- вит изображение на экране. Теперь перейдем к рассмотрению отдельных функ- ций. Функция ResetCPU эмулирует действия, кото- рые происходят при нажатии на кнопку RESET. void ResetCPU(void) { /* Инициализация аккумулятора и индексных регистров. */ cpu_reg.a=cpu_reg.x=cpu_reg.y=O; /* Инициализация регистра флагов: разряд D5 всегда равен 1, флаг нулевого результата Z (D1) установлен, поскольку в регистре А записан 0. */ cpu_reg.p = 0x22; /* Инициализация указателя стека. */ cpu_reg.s = OxFF; /* Инициализация счетчика команд. После поступления сигнала сброса в счетчик команд записывается адрес из ячеек памяти с адресами FFFCh и FFFDh. */ cpu_reg.pc.В.l=ReadMemory(OxFFFC); cpu_reg.pc.В.h=ReadMemory(OxFFFD); /* Инициализация счетчика обновления экрана. */ iPeriod = FRAME_PERIOD; } Назначение практически всех операторов дан- ной функции ясно из приведенных комментариев. Функция ReadMemory будет добавлена позже, при создании модуля эмуляции памяти. Ее задача - эмуляция чтения из памяти и возвращение прочи- танного байта. В качестве параметра функции пе- редается адрес требуемого байта. Константа FRAME_PERIOD - это число тактов процессора за время развертки одного кадра. Ее значение зависит от тактовой частоты процессора ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК 173
Написание программ-эмуляторов. Программирование эмулятора ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК эмулируемой системы и формата выходного видео- сигнала (PAL или NTSC). Теперь можно написать функцию NmiCPU, ими- тирующую реакцию процессора на поступление запроса немаскируемого прерывания. void NmiCPU() { /* Счетчик команд и регистр флагов запоминаются в стеке. */ WriteMemory (0x100 I cpu_reg.s, cpu_reg.pc.B.h); -~cpu_reg.s; WriteMemory (0x100 I cpu_reg.s, cpu_reg.pc.В.1); --cpu_reg.s; WriteMemory (0x100 I cpu_reg.s, cpu_reg.p); --cpu_reg.s; /* После поступления сигнала запроса немаскируемого прерывания в счетчик команд записывается адрес из ячеек памяти с адресами FFFAh и FFFBh. */ cpu_reg.рс.В.l=ReadMemory(OxFFFA); cpu_reg.pc.В.h=ReadMemory(OxFFFB); /* Обработка запроса на прерывание занимает семь тактов процессора, так что необходимо соответственно скорректировать счетчик. */ iPeriod -= 7; } Эта функция также достаточно проста и не тре- бует дополнительных пояснений. Функция Wri- teMemory эмулирует запись в память; первый параметр — адрес записи, второй - сохраняемое значение. В качестве упражнения можно создать функцию IrqCPU, имитирующую действия процессора при поступлении запроса на маскируемое прерывание. Рассмотрим основную функцию эмуляции про- цессора - StepCPU, выполняющую при каждом вызове одну команду процессора и возвращающую число тактов, за которое эта команда осуществля- ется на реальном процессоре. Большая часть этой функции представляет собой один оператор switch с вариантом выбора для каждой команды: Byte StepCPUО { /» Чтение кода команды из памяти и увеличение значения счетчика команд. */ Opcode = ReadMemory(cpu_reg.pc.W++) ; switch (Opcode) { case 0x00: /* BRK. */ /* Здесь располагается программа эмуляции команды процессора с кодом 00h. */ return tact[0x00]; case 0x01: /* ORA (a8,X). */ /* Здесь располагается программа эмуляции команды процессора с кодом Olh. */ return tact[0x01]; case 0x09: /* ORA #d8. */ /* Выполнение команды. */ cpu_reg.a = cpu_reg.a I ReadMemory(cpu_reg.pc.W++); /* Установка флагов. */ cpu_reg.p &= 0x7D; /* N=0; Z=0. */ if (cpu_reg.a == 0) /* Если A=0, to Z=l. */ cpu_reg.p I = 2 ; /* Установка флага знака. */ if (cpu_reg.a > 127) cpu_reg.p 1= 0x80; /* Возврат количества тактов. */ return tact[0x09]; case 0x48: /* PHA. */ /* Выполнение команды. */ WriteMemory (0x100 I cpu_reg.s, cpu_reg.a); --cpu_reg.s; /* Возврат количества тактов. */ return tact[0x48]; case 0x9A: /* TXS */ /* Выполнение команды. * / cpu_reg.s = cpu_reg.x; /* Возврат количества тактов. */ return tact[0x9A]; default: /* Неизвестная команда. */ printf ("Неизвестный код команды %х", OpCode); state = EMU_STOP; /* Остановка */ /* эмулятора. */ return 0; } } Поскольку полный текст программы, обрабаты- вающей все команды центрального процессора, за- нял бы около десяти страниц, здесь приводится лишь фрагмент, поясняющий структуру функции и обслуживающий только три команды. Команда ORA #d8 выполняет логическую опера- цию ИЛИ над содержимым аккумулятора и байта, записанного в памяти сразу за кодом команды. Ре- зультат сохраняется в аккумуляторе, и в зависимо- сти от него изменяется состояние флагов Z и N в регистре состояния процессора. Команда РНА сохраняет содержимое аккумуля- тора в стеке, а команда TXS копирует содержимое 174
Написание программ-эмуляторов. Программирование эмулятора регистра X в регистр указателя стека S. На состоя- ние флагов эти команды не влияют. Сгруппируем написанные ранее блоки в единый модуль эмуляции процессора. void RunCPU () { ResetCPU (); /* Сброс процессора. */ while (state == EMU_RUN) { /* Выполнение команды. */ iTact = StepCPU(); iPeriod -= iTact; /* Проверка, не пора ли обновлять экран. */ if (iPeriod <= 0) { /* Увеличение значения счетчика тактов для формирования нового кадра. */ iPeriod += FRAME_PERIOD; /* Обновление экрана. */ UpdateScreen(); /* Проверка состояния клавиш. */ TestKeys(); /* Формирование запроса на прерывание. */ NmiCPU(); } } } Эмулятор процессора последовательно выполняет команды. Когда подходит время формирования оче- редного кадра, вызывается функция UpdateScreen, преобразующая содержимое видеопамяти в выводи- мое на экран изображение. Следом вызывается функция TestKeys, которая проверяет состояние клавиатуры и трансформирует код нажатой клави- ши в формат, приемлемый для обработки эмулято- ром процессора. Эмуляция памяти и портов ввода/вывода После написания программы, эмулирующей цен- тральный процессор, нужно создать модуль для эму- ляции памяти и портов ввода/вывода. Работа с ним из любых других модулей осуществляется посред- ством вызова двух функций: ReadMemory, которая эмулирует чтение байта из памяти, и Writ eMemory, эмулирующая запись в память. Если используется язык C++, то достаточно логичным решением яв- ляется оформление каждого из рассматриваемых модулей в виде отдельного класса. Тогда для клас- са эмуляции памяти две упомянутые функции не- обходимо объявить как открытые члены, а всю ос- тальную реализацию можно закрыть. Реализация функций определяется структурой карты памяти эмулируемой приставки. Например, в адресном пространстве игровой приставки DEN- DY выделяются следующие области: • встроенное ОЗУ; • регистры видеопроцессора и звукового про- цессора; • ОЗУ картриджа; • ПЗУ картриджа. С учетом особенностей дешифрации адреса, опи- санных в первой главе книги, функция Write- Memory выглядит так: /* Эмуляция записи байта в память: А - адрес, V - записываемый байт. */ void WriteMemory (word A, byte V) { switch(А>>13){ case 0: RAM[A&0x7FF]=V; /* Запись во */ /* внутреннее ОЗУ. */ break; case 3 : WRAM[A&OxlFFF]=V; /* Запись в ОЗУ */ /* картриджа. */ break; case 1: case 2: I0_write(A,V); /* Запись в регистры */ /* видеопроцессора */ break; /* или звукового */ /* процессора. */ default: MMC_write(А,V); /* Запись в регистр */ /* контроллера */ break; /* страниц памяти */ /* в картридже. */ } } Как видим, области ОЗУ игровой приставки в программе представляются просто массивами со- ответствующей размерности. В частности, встроен- ное ОЗУ приставки в тексте программы описыва- ется следующей строкой: byte RAM[0x800]; Работа с портами ввода/вывода видеопроцессо- ра, звукового процессора и контроллера страниц памяти, который устанавливается в картридже, оформляется в виде отдельных функций. Завершая раздел, посвященный эмуляции памя- ти, приведем текст функции и ReadMemory: ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК byte ReadMemory (word A) { 775
Написание программ-эмуляторов. Программирование эмулятора ПРОГРАММИРОВАНИЕ ДЛЯ ПРИСТАВОК switch(А>>13){ case 0: /* Чтение из внутреннего ОЗУ. */ return RAM[A&0x7FF] ; case 3: /* Чтение из ОЗУ картриджа. */ return WRAM[A&OxlFFF] ; case 1: case 2: /* Чтение из порта ввода/вывода. */ return IO_read(A); default: /* Чтение из ПЗУ картриджа. */ return Page[А»13] [А]; } } Эмуляция видеопроцессора Теперь приступим к созданию модуля эмулятора ви- деопроцессора, который будет формировать выводи- мое на экран изображение. Написание этого модуля является достаточно сложной задачей, поскольку требуется жесткая синхронизация формирования изображения и эмуляции работы центрального про- цессора. Кроме того, в игровых приставках обраще- ние к видеопамяти разрешено, как правило, только во время кадровых и строчных синхроимпульсов, а в любое другое время она недоступна. Зная строчную и кадровую частоту выходного сигнала игровой приставки, несложно рассчитать время формирования одного кадра и каждой стро- ки кадра, а также длительность кадрового и строч- ного синхроимпульсов. Затем на основе значения тактовой частоты центрального процессора вычисля- ется длительность всех названных временных проме- жутков (в тактах процессора). Далее необходимо создать несколько счетчиков, например счетчик строк и счетчик точек в строке. Тогда запись в ви- деопамять станет возможна только при определен- ных состояниях этих счетчиков. Пример реализации такого способа синхрониза- ции был приведен в эмуляторе центрального про- цессора, когда число в счетчике iPeriod после вы- полнения каждой команды уменьшалось на число тактов процессора, а при достижении нулевого зна- чения эмулировалось поступление сигнала NMI. Отображать картинку на экране можно несколь- кими способами. Допустимо сразу формировать все изображение и выводить его на экран. В приведенном выше эму- ляторе центрального процессора это производится вызовом функции UpdateScreen, которая должна рисовать на экране фоновое изображение и спрайты для всего кадра, используя данные из массива, эму- лирующего память видеопроцессора. Такой подход является самым простым, но имеет очевидный не- достаток - невозможность эмуляции различных эффектов, которые на реальной приставке реали- зуются изменением содержимого видеопамяти за время формирования кадра. Примером подобного эффекта служит переключение используемого зна- когенератора при достижении какой-либо строки экрана. Чтобы устранить этот изъян, можно отображать не весь экран сразу, а разделив его на небольшие фрагменты, например на отдельные строки. Когда счетчик строчной развертки покажет, что процессор отработал столько тактов, сколько занимает вывод на экран одной строки, будет вызываться функция UpdateLine, которая в специально выделенной об- ласти памяти сформирует изображение очередной строки и сдвинет указатель на начало следующей. В таком случае функция UpdateScreen копиру- ет содержимое выделенной области, где уже имеет- ся новый кадр, в видеопамять компьютера и устанав-. ливает указатель на начало области, подготавливая ее к получению нового кадра. Третий способ является наиболее сложным и тре- бует наличия многозадачной среды. Программа эму- ляции видеопроцессора представляет собой отдель- ный процесс, работающий независимо от главной программы и постоянно формирующий изображе- ние на экране. Основная программа управляет этим процессом путем записи значений в переменные, являющиеся аналогами регистров реального видео- процессора. Эмуляция ввода/вывода В качестве примера эмуляции ввода/вывода мы рассмотрим принципы эмуляции игровых пультов приставок. Если программа пишется для компью- тера, при управлении, вероятно, будет применяться не пульт, а клавиатура. Следовательно, необходимо обеспечить эмуляцию пульта с использованием кла- виатуры. Определение состояния пульта представляет со- бой работу с портами ввода/вывода. Программа, отвечающая за эмуляцию порта, в нашем примере может выглядеть так: void WriteJoyl (byte V) { if ((PSG[0x16]&1) && !(V&l)) { joy_readbit = 0; keyscan(); } PSG[0x16]=V; } byte ReadJoy1( ) { ret = (joy_l>>joy_readbit)&1; 176
Написание программ-эмуляторов. Программирование эмулятора joy_readbit=(joy_readbit+l)&7 ; return ret; } Когда выполняется запись информации в порт с адресом 4 016h, вызывается функция WriteJoyl. При этом сохраняемое значение запоминается в переменной PSG [ 0x1 б ]. Если в результате зна- чение в младшем разряде записываемого байта изменилось с 1 на 0, инициализируется перемен- ная joy_readbit, которая определяет номер счи- тываемого бита, после чего функция keyscan ска- нирует клавиатуру и фиксирует состояние клавиш, играющих роль кнопок пульта, в переменной j оу_1. При чтении из порта с адресом 4016h вызывается функция ReadJоу 1, которая выделяет бит, соответ- ствующий считываемой в данный момент кнопке, из переменной joy_l, изменяет номер опрашиваемой клавиши, хранящийся в переменной joy_readbit, и возвращает вычисленное значение. Заключение Как при разработке программ для приставок, так и при создании эмуляторов очень полезно изуче- ние исходных текстов готовых программ. С этой целью на сайте www.dmkpress.ru размещен исход- ный текст эмулятора игровой приставки DENDY.
РИЛОЖЕНИ СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ
Система команд центрального процессора игровой приставки DENDY 1.1. Система команд центрального процессора игровой приставки DENDY Мнемоника Краткое описание Методы адресации Запись на языке ассемблера Код команды Число байтов Изменяемые флаги ADC Сложение с учетом переноса: А + d8 + С. Результат в аккумуляторе А и флоге переноса С IMM ADC #d8 69 d8 2 V, N, Z, С ZP ADC а8 65 08 2 ZP, X ADC а8, X 75 a8 2 ABS ADC al6 6D al6l al6h 3 ABS, X ADC 016, X 7D al6l al6h 3 ABS, Y ADC ol6, Y 79 ol6l al6h 3 IND, X ADC(a8, X) 61 a8 2 IND, Y ADC(a8),Y 71 08 2 AND Поразрядное логическое И аккумуляторе и оперондо IMM AND #d8 29 d8 2 N,Z ZP AND 08 25 08 2 ZP, X AND a8, X 35 a8 2 ABS AND al6 2D al6l ol6h 3 ABS, X AND al6, X 3D al61 al6h 3 ABS, Y AND al6,Y 39 a!6l al6h 3 IND, X AND(o8, X) 21 08 2 IND, Y AND (a8), Y 31 08 2 ASL Арифметический сдвиг операнда влево (умножение на 2) С?бит76ит0?0 АСС ASL A OA 1 N,Z, С ZP ASL a8 06 a8 2 ZP, X ASL a8, X 16 08 2 ABS ASL al6 ОЕ a 161 al6h 3 ABS, X ASL al6, X 1E ol6l al 6h 3 вес Переход, если флог С = 0 REL BCC i8 90 i8 2 BCS Переход, если флаг С = 1 REL BCS 18 BO 18 2 BEQ Переход, если флаг Z = 1 REL BEQ i8 FO18 2 BIT Установка флагов в соответствии с результатом выполнения поразрядного логического И над содержимым аккумулятора и операнда. Бит 6 результата копируется в флаг V, а бит 7 - в флаг N ZP BIT a8 24 a8 2 N, V, Z ABS BIT al 6 2Cal6lal6h 3 BMI Переход, если флаг N = 1 REL BMI i8 3018 2 BNE Переход, если флаг Z = 0 REL BNE i8 DO i8 2 BPL Переход, если флог N = 0 REL BPL i8 1018 2 BRK Программное прерывание IMPL BRK 00 1 1 BVC Переход, если флаг V = 0 REL BVC 18 50 i8 2 BVS Переход, если флаг V = 1 REL BVS i8 70 i8 2 ас Сброс флага С IMPL CLC 18 1 C CID Сброс флага D IMPL CLD D8 1 D си Сброс флага 1 (разрешение прерываний) IMPL CLI 58 1 1 civ Сброс флага V IMPL CLV B8 1 V CMP Установка флагов в соответствии с результатом вычитания операнда из содержимого аккумулятора IMM CMP #d8 C9d8 2 N,Z,C ZP CMP 08 C5 a8 2 ' ZP,X CMP 08, X D5a8 2 ABS CMP al6 CD ol6l al6h 3 ABS, X CMP al6, X DD 0161 al6h 3 ABS, Y CMP al6,Y D9 ol 61 ol6h 3 IND, X CMP (a8, X) Cl a8 2 IND, Y CMP (a8), Y DI 08 2 CPX Установка флагов в соответствии с результатом вычитания операнда из содержимого регистра X IMM CPX #d8 E0d8 2 N,Z,C ZP CPX 08 E4 d8 2 ABS CPX ol6 EC ol 61 ol 6h 3 CPY Установка флагов в соответствии с результатом вычитания операнда из содержимого аккумулятора IMM CPY #d8 CO d8 2 N,Z,C ZP CPY a8 C4a8 2 ABS CPY al6 CCol6lal6h 3 СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 179
Система команд центрального процессора игровой приставки DENDY СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Краткое описание Методы адресации Запись на языке ассемблера Код команды Число байтов Изменяемые флаги DEC Уменьшение операнда на 1 ZP DEC а8 C6a8 2 N,Z ZP,X DEC а8, X D6 a8 2 ABS DEC а!6 CEal6lal6h 3 ABS, X DECal6, X DEal6lal6h DEX Х = Х- 1 IMPL DEX CA 1 N,Z DEY Y-Y-1 IMPL DEY 88 1 N,Z EOR Поразрядное Исключающее ИЛИ содержимого аккумулятора и операнда IMM EOR #d8 49 d8 2 N,Z ZP EOR a8 45 a8 2 ZP,X EOR a8, X 55 a8 2 ABS EOR al 6 4Dal6lal6h 3 ABS, X EOR al6, X 5Dal6lal6h 3 ABS, Y EOR al6,Y 59 al 61 al6h 3 IND, X EOR(a8, X) 41 a8 2 IND, Y EOR(a8), Y 51 a8 2 INC Увеличение операнда на 1 ZP INC a8 E6a8 2 N,Z ZP,X INC a8, X F6 a8 2 ABS INC al6 EE al6l a!6H 3 ABS, X INC al6, X FE al6l al6h 3 INX Х-Х+1 IMPL INX E8 1 N,Z INY Y-Y+1 IMPL INY C8 1 N,Z JMP Переход по указанному адресу ABS JMP al6 4Cal6lal6h 2 IND JMP (a 16) 6Cal6lal6h 2 JSR Вызов подпрограммы с указанным адресом. В стеке сохраняется адрес возврата ABS JSR a!6 20 al 61 al6h 3 IDA Загрузка операнда в аккумулятор IMM LDA #d8 A9 d8 2 N,Z ZP LDA a8 A5 a8 2 ZP,X LDA a8, X B5 a8 2 ABS LDA al6 ADal6lal6h 3 ABS, X LDA al6,X BDal6lal6h 3 ABS, Y LDA al6,Y B9al6lal6h 3 IND, X LDA (a8, X) Al a8 2 IND,Y LDA (a8), Y Bl a8 2 LDX Загрузка операнда в регистр X IMM LDX #d8 A2d8 2 N,Z ZP LDX a8 A6a8 2 ZP, Y LDX a8, Y B6 a8 2 ABS LDX al6 AEal6lal6h 3 ABS,Y LDX al6,Y BE al61 al6h 3 LDY Загрузка операнда в регистр Y IMM LDY #d8 A0d8 2 N,Z ZP LDY a8 A4 a8 2 ZP, Y LDY a8,Y B4a8 2 ABS LDY al6 ACal6lal6h 3 ABS, Y LDY al6,Y BCal6l al6h 3 LSR Логический сдвиг операнда вправо (деление на 2) 0?бит7...?...бит0?С ACC LSR A 4A 1 N,Z,C ZP LSR a8 46 a8 2 ZP,X LSR a8, X 56 a8 2 ABS LSR al6 4E al 61 al6h 3 ABS, X LSR al6,X 5E a 161 al6h 3 NOP Нет операции IMPL NOP EA 1 ORA Поразрядное логическое ИЛИ содержимого аккумулятора и операнда IMM ORA #d8 09 d8 2 N,Z ZP ORA a8 05 a8 2 ZP,X ORA a8,X 15 a8 2 ABS ORA al6 0Dal6lal6h 3 ABS, X ORA al6, X ID a!6l a!6h 3 ABS,Y ORA a16,Y 19 aJ6l al6h 3 IND, X ORA (a8, X) 01 a8 2 IND, Y ORA (a8),Y 11 a8 2 180
Система команд центрального процессора игровой приставки DENDY Мнемоника Краткое описание Методы адресации Запись на языке ассемблера Код команды Число байтов Изменяемые флаги РИА Помещение содержимого аккумулятора в стек IMPL РИА 48 1 РНР Помещение регистра состояния в стек IMPL РНР 08 1 PLA Помещение байта с вершины стека в аккумулятор IMPL PLA 68 1 PLP Помещение байта с вершины стека в регистр состояния IMPL PLP 28 1 Все флаги ROL Циклический сдвиг операнда влево С ? бит 7... ?... бит 0 ? С ACC ROL А 2A 1 N, Z, С ZP ROL а8 26 a8 2 ZP, X ROL а8, X 36 a8 2 ABS ROL а!6 2E al6l al6h 3 ABS, X ROL а!6,X 3E al6l a!6h 3 ROR Циклический сдвиг операнда вправо С ? бит 7... ?... битО?С ACC ROR А 6A 1 N, Z, С ZP ROR а8 66 a8 2 ZP,X ROR а8, X 76 a8 2 ABS ROR а16 6Eal6lal6h 3 ABS, X ROR а!6, X 7E al6l al 6h 3 RTI Возврат из прерывания IMPL RTI 40 1 Все флаги RTS Возврат из подпрограммы IMPL RTS 60 1 SBC Вычитание операнда из содержимого аккумулятора с учетом переноса IMM SBC #d8 E9 d8 2 N, V, Z, С ZP SBC а8 E5 a8 2 ZP,X SBC а8, X F5a8 2 ABS SBC а16 EDal6lal6h 3 ABS, X SBC al6,X FDal6lal6h 3 ABS, Y SBC al6,Y F9 al 61 a 16h 3 IND, X SBC (a8, X) El a8 2 IND,Y SBC (a8), Y Fl a8 2 SEC Установка флага С IMPL SEC 38 1 С SED Установка флага D IMPL SED F8 1 D SEI Установка флага I (запрещение прерываний) IMPL SEI 78 1 1 STA Запись содержимого аккумулятора в память ZP STA a8 85 a8 2 ZP,X STA a8, X 95 a8 2 ABS STA al6 8D 0161 al6h 3 ABS, X STA al6,X 9Dal6lal6h 3 ABS,Y STA al6,Y 99 al6l al6h 3 IND,X STA (a8,X) 81 a8 2 IND,Y STA (08), Y 91 a8 2 STX Запись содержимого регистра X в память ZP STX a8 86 a8 2 ZP, Y STX a8,Y 96 a8 2 ABS STX al6 8Eal6lal6h 3 STY Запись содержимого регистра Y в память ZP STY a8 84 a8 2 ZP,X STY a8, X 94 a8 2 ABS STY a!6 8Cal6lal6h 3 TAX Пересылка содержимого аккумулятора в регистр X IMPL TAX AA 1 N, Z TAY Пересылка содержимого аккумулятора в регистр Y IMPL TAY A8 1 N, Z TSX Пересылка содержимого указателя стека в регистр X IMPL TSX BA 1 N,Z TXA Пересылка содержимого регистра X в аккумулятор IMPL TXA 8A 1 N,Z TXS Пересылка содержимого регистра X в указатель стека IMPL TXS 9A 1 TYA Пересылка содержимого регистра Y в аккумулятор IMPL TYA 98 1 N,Z СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 181
СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Система команд центрального процессора игровой приставки DENDY Методы адресации: ABS - прямая, указывается полный 16-разрядный адрес операнда: ABS,X - индексированная по X, указывается базовый 16-разрядный адрес, к которому прибавляется смещение из регистра X; ABS,Y - индексированная по Y, указывается базовый 16-разрядный адрес, к которому прибавляется смещение из регистра Y. АСС - аккумуляторная, операнд в регистре А процессора. IMM - непосредственная, 8-разрядный операнд расположен сразу за кодом команды. IMPL - неявная, операнды не указываются. IND - косвенная, задается адрес ячейки памяти, в которой хранится адрес операнда: IND,X - индексно-косвенная, указывается 8-разрядный адрес в нулевой странице, к которому прибав- ляется содержимое регистра X, после чего из ячейки памяти с вычисленным адресом извлекается полный 16-разрядный адрес операнда; IND,Y - косвенно-индексная, в нулевой странице указывается 8-разрядный адрес, после чего из задан- ной ячейки памяти считывается 16-разрядный базовый адрес, к которому прибавляется содержимое регис- тра Y, и из ячейки с вычисленным адресом извлекается операнд; REL - относительная, в команде указывается 8-разрядное смещение относительно содержимого счетчи- ка команд PC; ZP - адресация нулевой страницы, в команде задается 8-разрядный адрес, определяющий ячейку памя- ти нулевой страницы, где хранится операнд; ZP,X - индексированная по X адресация нулевой страницы, указывается 8-разрядный базовый адрес в нулевой странице, к которому прибавляется содержимое регистра X, и из ячейки памяти с вычисленным адресом извлекается операнд; ZP,Y - индексированная по Y адресация нулевой страницы, в нулевой странице указывается 8-разряд- ный базовый адрес, к которому прибавляется содержимое регистра Y, и из ячейки памяти с вычисленным адресом извлекается операнд. Условные обозначения: а16 - 16-разрядный адрес al6h - старший байт 16-разрядного адреса а!61 - младший байт 16-разрядного адреса а8 - 8-разрядный адрес в нулевой странице d8 - непосредственный 8-разрядный операнд i8 - 8-разрядное смещение в диапазоне от -128 до 127 182
Система команд центрального процессора игровой приставки GAME BOY 1.2. Система команд центрального процессора игровой приставки GAME BOY Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флоги ADC А,(Н1) Сложение с учетом переноса содержимого аккумулятора и ячейки, адрес которой хранится в регистровой паре HL A = A + (HL) + CY ADC A,(HL) 8E Z, H, C, N ADCA,d8 Сложение с учетом переноса содержимого аккумулятора и непосредственных данных d8 A = A + d8 + CY ADC A,d8 CE d8 Z, H, C, N ADC А,г Сложение с учетом переноса содержимого оккумуляторо и указонного регистра А = А + г + CY ADC А,В 88 Z, H, C, N ADC A,C 89 ADC A,D 8A ADC A,E 8B ADC A,H 8C ADC A,L 8D ADC A,A 8F ADD A,(HL) Сложение содержимого оккумуляторо и ячейки, адрес которой хранится в регистровой паре HL А = А + (HL) ADD A,(HL) 86 Z, H, C, N ADD A,d8 Сложение содержимого аккумулятора и непосредственных данных d8 A = A + d8 ADD A,d8 C6d8 Z, H, C, N ADD А,г Сложение содержимого оккумуляторо и указанного регистра А = А + г ADD A,В 80 Z, H, C, N ADD A,C 81 ADD A,D 82 ADD A,E 83 ADD A,H 84 ADD A,L 85 ADD A,A 87 ADD HL,rl 6 Сложение содержимого регистровой поры HL и указанной регистровой пары HL = HL + rl6 ADD HL,BC 09 H, C,N ADD HL,DE 19 ADD HL,HL 29 ADD HL,SP 39 ADDSP,d8 Прибавить 8-разрядное число d8 к указателю стека SP ADD SP,d8 E8d8 Z, H, C, N AND (HL) Логическое И содержимого оккумуляторо и ячейки, адрес которой хранится в регистровой паре HL А = А & (HL) AND (HL) A6 Z, H, C, N ANDd8 Логическое И содержимого аккумулятора и непосредственных данных d8 A = A&d8 AND d8 E6d8 Z, H, C, N AND г Логическое И содержимого аккумулятора и указанного регистра А = А&г AND В AO Z, H, C, N AND C Al AND D A2 AND E A3 AND H A4 AND L A5 AND A A7 BIT b,(HL) Проверка состояния бито с номером b в ячейке помяти, адресуемой парой HL Если бит равен 0, то флаг Z равен 1, и наоборот BIT O,(HL) CB 46 Z, H,N BIT 1,(HL) CB4E BIT 2,(HL) CB 56 BIT 3,(HL) СВ 5E BIT 4,(HL) CB 66 BIT 5,(HL) CB6E BIT 6,(HL) CB 76 BIT 7,(HL) |CB7E СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 183
Система команд центрального процессора игровой приставки GAME BOY СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги BIT b,r Проверка состояния бита с номером Ь в регистре г. Если бит равен 0, то флаг Z равен 1, и наоборот BIT Ь,В СВ 40+8*b Z, H,N BIT ь,с CB41+8*b BIT b,D CB 42+8*b BIT b,E CB 43+8*b BIT b,H CB44+8*b BIT b,L CB 45+8’b BIT b,A CB 47+8‘b CALL NZ,al6 Вызов подпрограммы, если флаг Z = 0 CALL NZ,al6 C4 a 161 a 16h CALLZ,al6 Вызов подпрограммы, если флаг Z = 1 CALLZ,al6 CCol6lol6h CALLNC,al6 Вызов подпрограммы, если флаг С = 0 CALLNC,al6 D4al6lal6h CALL C,al6 Вызов подпрограммы, если флаг С = 1 CALL C,al6 DCal6lal6h CALL al 6 Вызов подпрограммы, адрес возврата сохраняется в стеке CALL al 6 CDal6lal6h CCF Инверсия флага С CCF 3F N,H,C CPL Инверсия содержимого аккумулятора CPL 2F N,H CP (HL) Сравнение содержимого аккумулятора и ячейки, адрес которой хранится в регистровой паре HL CP (HL) BE Z, H, C, N CP d8 Сравнение содержимого аккумулятора с числом d8 CP d8 FEd8 Z, H, C, N СР г Сравнение содержимого аккумулятора и указанного регистра СР В B8 Z, H, C, N CP C B9 CP D BA CP E BB CP H BC CP L BD CP A BF DAA Коррекция результата (необходима для получения правильного результата в двоично-десятичном коде) DAA 27 Z,H,C DEC (HL) Уменьшение на 1 содержимого ячейки памяти, одресуемой регистровой парой HL (HL) = (HL)-1 DEC (HL) 35 Z,H,N DECr Уменьшение на 1 содержимого регистра г = г- 1 DEC В 05 Z,H,N DEC C 0D DEC D 15 DEC E ID DEC H 25 DEC L 2D DEC A 3D DECH6 Уменьшение на 1 содержимого регистровой пары DEC BC OB DEC DE IB DEC HL 2B DEC SP 3B DI Запрещение обработки маскируемых прерываний DI F3 El Разрешение обработки маскируемых прерываний El FB HALT Выключение процессора до поступления запроса на прерывание HALT 76 INC (HL) Увеличение на 1 содержимого ячейки памяти, адресуемой регистровой парой HL HL) = (HL)+ 1 INC (HL) 34 Z,H,N 184
Система команд центрального процессора игровой приставки GAME BOY Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги INC г Увеличение на 1 содержимого регистра г = г+1 INC В 04 Z, H,N INC С ОС INC D 14 INC Е IC INC Н 24 INC L 2C INC A 3C INC г16 Увеличение на 1 содержимого регистровой пары INC BC 03 INC DE 13 INC HL 23 INC SP 33 JPNZ,al6 Переход, если флаг Z = 0 JP NZ,al6 C2al6lal6h JP Z,al6 Переход, если флаг Z = 1 JP Z,al6 CAal6lal6h JPNC,al6 Переход, если флаг С = 0 JP NC,al6 D2al6lal6h JPC,al6 Переход, если флаг С = 1 JP C,al6 DAal6lal6h JP a!6 Переход по указанному адресу РС = а16 JP al6 C3al6lal6h JP(HL) Переход по адресу из регистровой пары HL PC = HL JP (HL) E9 JR NZ,i8 Переход па смещению i8, если флаг Z = 0 JP NZ,ol6 2018 JRZ,i8 Переход по смещению 18, если флаг Z = 1 JP Z,al6 28 18 JR NC,i8 Переход по смещению i8, если флаг С = 0 JP NC,al6 3018 JR C,i8 Переход по смещению i8, если флаг С = 1 JP C,al6 38 i8 JR 18 Переход по указанному смещению i8 PC - PC + i8 JP a!6 1818 LD (C),A Запись байта из аккумулятора в ячейку памяти с адресом (FFOOH + регистр С) LD (C),A E2 LD (HL),d8 Загрузка d8 в ячейку памяти, адрес которой указан в регистровой паре HL LD (HL),d8 36 d8 LD (HL),г Запись байта из регистра г в ячейку памяти, адрес которой указан в регистровой паре HL LD (HL),В 70 LD (HL),C 71 LD (HL),D 72 LD (HL),E 73 LD (HL),H 74 LD (HL),L 75 LD (HL),A 77 LD (a 16),A Запись байта из аккумулятора в ячейку памяти с адресом а 16 LD (a 16),A EA a 161 al6h LD (rl6),A Запись байта из аккумулятора в ячейку памяти, адрес которой указан в регистровой паре г16 LD (BC),A 02 LD (DE),A 12 LD A,(al6) Загрузка в аккумулятор байта из ячейки памяти с адресом а 16 LD A,(al6) FA a 161 a 16h LD A,(rl6) Запись байта из ячейки памяти, адрес которой указан в регистровой паре г! 6, в аккумулятор LD A,(BC) 0A LD A,(DE) 1A LD A,(C) Загрузка в аккумулятор байта из ячейки памяти с адресом (FFOOH + регистр С) LD A,(C) F2 СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 321 185
Система команд центрального процессора игровой приставки GAME BOY СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги LD r,d8 Загрузка 8-разряднаго числа d8 в регистр г LD B,d8 06 d8 LD C,d8 0E d8 LD D,d8 16d8 LD E,d8 IE d8 LD H,d8 26 d8 LD L,d8 2Ed8 LD A,d8 3Ed8 LD г, (HL) Загрузка байта из ячейки памяти, адрес которой указан в регистровой паре HL, в регистр г LD B,(HL) 46 LD C,(HL) 4E LD D,(HL) 56 LD E,(HL) 5E LD H,(HL) 66 LD L,(HL) 6E LD A,(HL) 7E LD rl,r2 Копирование данных из регистра г2 в регистр rl LD B,B 40 LD B,C 41 LD B,D 42 LD B,E 43 LD B,H 44 LD B,L 45 LD B,A 47 LD C,B 48 LD C,C 49 LD C,D 4A LD C,E 4B LD C,H 4C LD C,L 4D LD C,A 4F LD D,B 50 LD D,C 51 LD D,D 52 LD D,E 53 LD D,H 54 LD D,L 55 LD D,A 57 LD E,B 58 LD E,C 59 LD E,D 5A LD E,E 5B LD E,H 5C LD E,L 5D LD E,A 5F LD H,B 60 LD H,C 61 186
Система команд центрального процессора игровой приставки GAME BOY Мнемоника - Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги Копирование данных из регистре г2 в регистр rl LD Н,Е 63 LD Н,Н 64 LD НД 65 LD Н,А 67 LD 1,8 68 LD L,C 69 LD L,D 6A LD L,E 6B LD L,H 6C LD L,L 6D LD L,A 6F LD A,В 78 LD A,C 79 LD A,D 7A LD A,E 7B LD A,H 7C LD A,L 7D LD A,A 7F LDrl6,dl6 Запись 16-разряднаго числа dl 6 в регистровую пару г 16 LD BC,dl6 01 dl6ld!6h LD DE,dl6 11 dl61dl6h LD HL,dl6 21 dl6ldl6h LD SP,dl6 31 dl6ldl6h LDSP,HL Запись 16-разрядного числа из регистровой пары HL в указатель стека SP LD SP,HL F9 LD (a!6),SP Запись указателя стека в ячейки памяти па адресу а 16 LD (al6),SP 08 al 61 al 6h LDD(HL),A Запись байта из аккумулятора в ячейку памяти, адрес которой указан в регистровой паре HL, и уменьшение адреса в регистровой паре HL на 1 LDD (HL),A LD (HLD),A LD (HL-),A 32 LDI (HL),A Запись байта из аккумулятора в ячейку памяти, адрес которой указан в регистровой паре HL, и увеличение адреса в регистровой паре HLho 1 LDI (HL),A LD (HLI),A LD (HL+),A ЗА LDH (d8),A Запись байта из аккумулятора в ячейку памяти с адресом (FFOOh + d8) LDH (d8),A E0d8 LDH A,(d8) Загрузка в аккумулятор байта из ячейки памяти с адресом (FFOOh + d8) LDH A,(d8) F0d8 LDHLSP,d8 Загрузка в регистровую пару HL значения SP + d8 LD HL,SP+d8 LDHLSP,d8 F8d8 NOP Нет операции NOP 00 СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 187
Система команд центрального процессора игровой приставки GAME BOY СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги OR (HL) Логическое ИЛИ содержимого аккумулятора и ячейки, адрес которой хранится в регистровой паре HL A-Al(HL) OR (HL) B6 Z, Н, С, N ORd8 Логическое ИЛИ содержимого аккумулятора и непосредственных данных d8 А = А | d8 OR d8 F6d8 Z, Н, С, N OR г Логическое ИЛИ содержимого аккумулятора и указанного регистра А = А] г OR В ВО Z, Н, С, N OR C Bl OR D B2 OR E ВЗ OR H В4 OR L В5 OR A В7 POPH6 Извлечение 16-разрядного числа из стека и помещение в регистровую пару г!6 POP BC С1 POP DE D1 POP HL Е1 POP AF F1 PUSH rl6 Помещение 16-разрядного числа из регистровой пары г16 в стек PUSH BC С5 PUSH DE D5 PUSH HL Е5 PUSHAF F5 RES b,(HL) Сброс бита с номерам Ь в ячейке памяти, адресуемой парой HL RES 0,(HL) СВ 86 RES 1,(HL) СВ8Е RES 2,(HL) СВ 96 RES 3,(HL) СВ9Е RES 4,(HL) СВ А6 RES 5,(HL) СВАЕ RES 6,(HL) СВ В6 RES 7,(HL) СВ BE RES b,r Сброс бита с номером Ь в регистре г RES b,B СВ 80+8’Ь RES b,C СВ 81+8*Ь RES b,D СВ 82+8‘Ь RES b,E СВ 83+8‘Ь RES b,H СВ 84+8*Ь RES b,L СВ 85+8*Ь RES b,A СВ 87+8*Ь RETNZ Возврат из подпрограммы, если флаг Z = 0 RET NZ СО RETZ Возврат из подпрограммы, если флаг Z = 1 RET Z С8 RETNC Возврат из подпрограммы, если флаг С = 0 RET NC DO RETC Возврат из подпрограммы, если флаг С = 1 RET C D8 RET Возврат из подпрограммы. Адрес возврата берется с вершины стека RET С9 RETI Возврат из процедуры обработки запроса на прерывание RETI D9 RLA Циклический сдвиг байта в аккумуляторе влево через флаг переноса RLA 17 Z, N, Н, С RLCA Циклический сдвиг байта в аккумуляторе влево RLCA 07 Z, N, Н, С 188
Система команд центрального процессора игровой приставки GAME BOY Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги RL(HL) Циклический сдвиг байта в ячейке памяти, адресуемой регистровой парой HL, влево через флаг переноса RL (HL) CB 16 Z, N, H, C RLr Циклический сдвиг байта в регистре г влево через флог переноса RL В CB10 Z, N, H, C RL С CB IT RL D CB 12 RL Е CB13 RL Н CB14 RL L CB15 RL А CB17 RLC (HL) Циклический сдвиг байта в ячейке памяти, адресуемой регистровой парой HL, влево RLC (HL) CB06 Z, N, H, C RLCr Циклический сдвиг байта в регистре г влево RLC В CBOO Z, N, H, C RLC С CB01 RLC D CB02 RLC Е СВОЗ RLC Н CB04 RLC L CB05 RLC А CB 07 RRA Циклический сдвиг байта в аккумуляторе вправо через флаг переноса RRA IF Z, N, H, C RRCA Циклический сдвиг байта в аккумуляторе вправо RRCA OF Z, N, H, C RR(HL) Циклический сдвиг байта в ячейке памяти, адресуемой регистровой парой HL, вправо через флаг переноса RR (HL) CB1E Z,N, H,C RRr Циклический сдвиг байта в регистре г вправо через флаг переноса RR В CB18 Z, N, H, C RR С CB19 RR D CB1A RR Е CB1B RR Н CB1C RR L CB1D RR А CB1F RRC(HL) Циклический сдвиг байта в ячейке памяти, одресуемай регистровой парой HL, вправо RRC (HL) СВОЕ Z, N, H, C RI?Cr Циклический сдвиг байта в регистре г вправо RRC В CB08 Z, N, H, C RRC С CB 09 RRC D CB 0A RRC Е CB OB RRC Н CBOC RRC L CBOD RRC А СВОЕ RSTo Переход к подпрограмме, расположенной по фиксированному адресу (рестарт) RST OOh C7 RST 08h CF RST lOh D7 RST 18h DF RST 20h E7 RST 28h EF RST 30h F7 RST 38h FF СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 189
Система команд центрального процессора игровой приставки GAME BOY СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги SBC A,(HL) Вычитание с учетом заема содержимого ячейки, адрес которой хранится в регистровой паре HL из аккумулятора А = А - (HL) - CY SBC A,(HL) 9E Z, H, C, N SBCA,d8 Вычитание с учетам заема содержимого 8-разряднога числа d8 из аккумулятора А = А - d8 - CY SBC A,d8 DEd8 Z, H, C, N SBC А,г Вычитание с учетом заема содержимого указанного регистра из аккумулятора A = A-r-CY SBC А,В 98 Z, H, C, N SBC A,C 99 SBC A,D 9A SBC A,E 9B SBC A,H 9C SBC A,L 9D SBC A,A 9F SCF Установка флага переноса SCF 37 C SET b,(HL) Установка бита с номером b в ячейке памяти, адресуемой парой HL SET O,(HL) CB C6 SET 1,(HL) CB CE SET 2,(HL) CB D6 SET 3,(HL) CB DE SET 4,(HL) CB E6 SET 5,(HL) CB EE SET 6,(HL) CB F6 SET 7,(HL) CB FE SET b,r Установка бита с номером b в регистре г SET b,B CB C0+8*b SET b,C CBCl+8‘b SET b,D CB C2+8*b SET b,E CB C3+8‘b SET b,H CB C4+8‘b SET b,L CB C5+8*b SET b,A CB C7+8*b SLA (HL) Арифметический сдвиг байта в ячейке памяти, адресуемой регистровой парой HL, влево SLA (HL) CB 26 Z, N, H, C SLAr Арифметический сдвиг байта в регистре г влево SLA В CB 20 Z, N, H, C SLA C CB21 SLA D CB22 SLA E CB 23 SLA H CB 24 SLA L CB 25 SLA A CB 27 SRA (HL) Арифметическй сдвиг байта в ячейке памяти, адресуемой регистровой парой HL, вправо SRA (HL) CB2E Z, N, H, C SRA г Арифметический сдвиг байта в регистре г вправо SRA В CB 28 Z, N, H, C SRA C CB 29 SRA D CB 2A SRA E CB2B SRA H CB2C SRA L CB 2D SRA A CB2F SRL (HL) Логический сдвиг байта в ячейке памяти, адресуемой регистровой парой HL, вправо SRL (HL) CB3E Z, N, H, C 190
Система команд центрального процессора игровой приставки GAME BOY Мнемоника Краткое описание Запись на языке ассемблера Код команды Изменяемые флаги SRL г Логический сдвиг байта в регистре г вправо SRL В СВ 38 Z, N, Н, С SRL С СВ 39 SRL D СВ ЗА SRL Е СВ ЗВ SRL Н СВЗС SRL L СВ 3D SRL А CB3F STOP Выключение процессора и контроллера дисплея до нажатия кнопки на пульте STOP 10 SUB A,(HL) Вычитание содержимого ячейки, адрес которой хранится в регистровой паре HL, из аккумулятора A-A-(HL) SUB A,(HL) 96 Z, Н, С, N SUB A,d8 Вычитание содержимого 8-разрядного числа d8 из аккумулятора A = A-d8 SUB A,d8 D6d8 Z, Н, С, N SUB А,г Вычитание содержимого указанного регистра из аккумулятора А=А-г SUB A,В 90 Z, Н, С, N SUB A,C 91 SUB A,D 92 SUB A,E 93 SUB A,H 94 SUB A,L 95 SUB A,A 97 SWAP (HL) Обмен содержимого старшей и младшей половин байта в ячейке памяти, адресуемой регистровой парой HL SWAP (HL) СВ 36 Z, N, Н, С SWAP г Обмен содержимого старшей и младшей половин байта в регистре г SWAPS СВ 30 Z, N, Н, С SWAPC СВ 31 SWAPD СВ 32 SWAPE СВ 33 SWAPH СВ 34 SWAPL СВ 35 SWAP A СВ 37 XOR (HL) Логическое Исключающее ИЛИ содержимого аккумулятора и ячейки, адрес которой хранится в регистровой паре HL XOR (HL) АЕ Z, Н, С, N XORd8 Логическое Исключающее ИЛИ содержимого аккумулятора и непосредственных данных d8 XOR d8 ЕЕ d8 Z, Н, С, N XOR г Логическое Исключающее ИЛИ содержимого аккумулятора и указанного регистра XOR В А8 Z, Н, С, N XOR C А9 XOR D АА XOR E АВ XOR H АС XOR L AD XOR A AF СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 191
СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Система команд центрального процессора игровой приставки GAME BOY Условные обозначения: а - фиксированный адрес рестарта al 6 - 16-разрядный адрес a!6h - старший байт 16-разрядного адреса а!61 - младший байт 16-разрядного адреса b - номер бита в байте (0-7) d8 - непосредственный 8-разрядный операнд d!6 - непосредственный 16-разрядный операнд i8 - 8-разрядное смещение в диапазоне от -128 до 127 г - 8-разрядный внутренний регистр процессора г16 - 16-разрядный внутренний регистр или регистровая пара Примечания. 1. Некоторые команды, например LDI, могут записываться в тексте на языке ассемблера несколькими способами. Однако они преобразуются в один и тот же код независимо от выбранной мнемоники. 2. В командах работы с отдельными битами первый байт кода всегда равен свь, а второй зависит от операнда Ь, показывающего, какой бит задействован. 192
Система команд микропроцессора Z80, используемого в игровых приставках SEGA 1.3. Система команд микропроцессора Z80, используемого в игровых приставках SEGA Мнемоника Операнды Описание Изменяемые флаги LD г1,г2 rl - А, В, C, D, E, H, L r2-A, В, C, D, E, H, L, (HL), (IX+18), (IY+i8) Загрузка байто из регистра rl в г2 LDrl,d8 rl -А, В, C, D, E, H, L, (HL), (IX+18), (lY+iB) Загрузка байта d8 в rl LD(HL),s s-A,B,C,D, E,H,L Запись s в ячейку, адресуемую порой HL LD A,s s-(BQ (DE), (a 16) Загрузка байта из s в аккумулятор LDd,A d-(BQ (DE), (al 6) Запись байта из аккумулятора в d LDA,I Зогрузка байта из регистра 1 в аккумулятор Z, P/V, S, N, Н LDA,R Загрузка байта из регистра R в аккумулятор Z, P/V, S, N, Н LDI,A Запись байта из аккумулятора в регистр 1 Z, P/V, S, N, Н LDR,A Запись байта из аккумулятора в регистр R Z, P/V, S, N, Н LD rl6,dl6 rl6 - BC, DE, HL, SP, IX, IY Загрузить в регистровую пару rl 6 16-разрядное число d 16 LDrl6,(al6) rl6-BC, DE, HL, SP, IX, IY Загрузка в регистровую пару rl 6 16-разрядного числа, расположенного в памяти по адресу al 6 LD(al6),rl6 H6-BC, DE, HL, SP, IX, IY Запись 16-разряднога числа из регистровой пары rl 6 в память по адресу а 16 LD SP,rl6 rl6-HL, IX, IY Копирование содержимого регистра rl 6 в указатель стека PUSHrl6 r!6 - BC, DE, HL, AF, IX, IY Сохранение регистра г16 в стеке. Указатель стека уменьшается на 2 POPrl6 H6-BC, DE, HL,AFJX, IY Извлечение верхнего элемента стека в регистр rl 6. Указатель стека увеличивается на 2 EX DE,HL Обмен содержимого регистровых пар HL и DE EX(SP),rl6 rl6 - HL, IX, IY Обмен содержимого регистра г16 и вершины стека. Указатель стека остается прежним EXAF,AF Переключение регистров А и F на альтернативный набор Все EXX Переключение активного набора регистров (ВС, DE, HL) LDI Копирование байто из ячейки, адресуемой регистровой парой HL, в ячейку, адресуемую регистровой парой DE, увеличение HL и DE на 1 и уменьшение ВС на 1 P/V, N, Н LDIR Выполнение команды LDI, пако ВС не станет равно 0 P/V, N, Н LDD Копирование бойта из ячейки, адресуемой регистровой парой HL, в ячейку, адресуемую регистровой парой DE, уменьшение HL, DE и ВС на 1 P/V, N, Н LDDR Выполнение команды LDD, пока ВС не станет равно 0 P/V, N, Н CPI Сравнение содержимого ячейки, адресуемой регистровой порой HL, с аккумулятором, увеличение HL на 1 и уменьшение ВС на 1 Z, P/V, S, N, Н CPIR Повторение команды CPI, пока не будет найден байт, равный записанному в аккумуляторе, или ВС не станет равным 0 Z, P/V, S, N, Н CPD Сравнение содержимого ячейки, адресуемой регистровой парой HL, с аккумулятором и уменьшение HL и ВС на 1 Z,P/V,S, N, Н CPDR Повторение команды CPD, пока не будет найден байт, равный записанному в аккумуляторе, или ВС не станет равным 0 Z,P/V,S, N,H ADDA,s s-A, B,C, D,E, H, L, (HQ, d8, (IX+18), (IY+i8) Сложение A = A + s Все ADCA,s s-A, В, C, D, E, H, L, (HL), d8, (IX-H8), (IY+i8) Сложение с учетом переноса A = A + s + CY Все SUBs s-A, В, C, D, E,H, L, (HL), d8, (IX+i8), (IY+18) Вычитание А = A-s Все SBCA,s s-A, В, C, D, E, H,L,(HL), d8, (IX+i8), (IY+i8) Вычитание с учетом заема A = A-s-CY Все ANDs s-A, В, C, D, E, H,L,(HL), d8, (IX+i8), (IY+i8) Логическое И A = A&s Все ORs s-A, В, C, D, E, H, L, (HQ, d8, (IX+i8), (IY+i8) Логическое ИЛИ А = А | s Все XORs s-A, В, C, D, E, H, L, (HL), d8, (IX+i8), (IY+i8) Исключающее ИЛИ A=AXORs Все СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 193
Система команд микропроцессора Z80, используемого в игровых приставках SEGA СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Операнды Описание Изменяемые флаги CPs s-A, В, C, D, E, H, L, (HL), d8, (IX+18), (IY+18) Сравнение. Флаги устанавливаются в соответствии с результатом операции А - s, содержимое регистров не меняется Все ADD HL,rl6 rl6-BC, DE, HL, SP 16-разрядное сложение HL = HL + г16 С, N, Н ADD 1Х,г16 Г16-ВС, DE, IX, SP 16-разрядное сложение с индексным регистром IX = IX + г16 С, N, Н ADDIY,rl6 Г16-ВС, DE, IY, SP 16-разрядное сложение с индексным регистром IY=IY + rl6 С, N, Н ADC Hl,rl 6 rl6-BC, DE, HL, SP 16-разрядное сложение с учетом переноса Hl= HL+ rl 6 + CY Все SBCHL,rl6 rl6-BC, DE, HL, SP 16-разрядное вычитание с учетом заемо HL = Hl-rl6-CY Все DAA Коррекция результата (необходима при роботе с числами в двоично-десятичном коде) С, Z, P/V, S, Н CPI Инверсия числа в аккумуляторе N, Н NEG Преобразование числа в аккумуляторе в дополнительный код Все CCF Инверсия флота переноса С, N, Н SCF Установка флага переноса С, N, Н INCd d-A, B, C, D, E, H, L, (HL), (IX+18), (IY+18) Увеличение но 1 D = d + 1 Z, P/V, S, N, Н INC rl6 rl6-BC, DE, HL, SP, IX, IY Увеличение на 1 R16 = г16 + 1 DECd d - А, В, C, D, E, H, L, (HL), (IX+18), (IY+18) Уменьшение на 1 D = d-1 Z, P/V, S, N, Н DECrl6 Г16-ВС, DE, HL, SP, IX, IY Уменьшение но 1 R16 = г16 - 1 RICA Циклический сдвиг содержимого аккумулятора влево на один разряд С, N, Н RIA Циклический сдвиг содержимого аккумулятора влево на один разряд через флот переноса С, N, Н RRCA Циклический сдвиг содержимого аккумулятора вправо на один разряд С, N, Н RRA Циклический сдвиг содержимого аккумулятора вправо на один разряд через флаг переноса С, N, Н RLCs s-A, В, C, D, E, H, L, (HL), (IX+18), (IY+i8) Циклический сдвиг s влево на один разряд Все RLs s - А, В, C, D, E, H, L, (HL), (IX+18), (IY+18) Циклический сдвиг s влево но один разряд через флаг переноса Все RRCs s-A, B, C, D, E, H, L, (HL), (IX+18), (IY+18) Циклический сдвиг s вправо на один разряд Все RRs s-A, B, C, D, E, H, L, (HL), (IX+18), (IY+18) Циклический сдвиг s вправо но один разряд через флог переноса Все SLAs s-A, B, C, D, E, H, L, (HL), (IX+18), (IY+18) Арифметический сдвиг s влево на один розряд Все SRAs s - А, В, C, D, E, H, L, (HL), (IX+18), (IY+18) Арифметический сдвиг s впрово на один розряд Все SRLs s - А, В, C, D, E, H, L, (HL), (IX+18), (IY+18) Логический сдвиг s влево на один разряд Все RID Циклический перенос влево полубайтов ячейки помяти, адресуемой регистровой парой HL, через младший полубайт оккумуляторо Z, P/V, S, N, Н RRD Циклический перенос впрово полубайтов ячейки памяти, одресуемой регистровой парой HL, через младший полубайт аккумулятора Z, P/V, S, N, Н BIT b, d b-0-7 d - А, В, C, D, E, H, L, (HL), (IX+i8), (IY+18) Проверка состояния бита с номером b в 8-розрядном числе в d. Если бит равен 0, то флог Z равен 1, и нооборот Z, P/V, S, N, Н 194
Система команд микропроцессора Z80, используемого в игровых приставках SEGA Мнемоника Операнды Описание Изменяемые флаги SET b,d b-0-7 d-A, В, C, D, E, H, L, (HL), (IX+I8), (lY+iB) Установка бита с номером b в 8-разряднам числе в d RES b,d b-0-7 d-A, В,C, D,E, H, L,(HL), (IX+i8), (lY+iB) Сброс бита с номером b в 8-разряднам числе в d NOP Пустая операция HALT Остановка процессора. Рабата возобновляется после поступления запроса на прерывание DI Запрет обработки маскируемых прерываний El Разрешение обработки маскируемых прерываний IMn n-0,1,2 Установка режима обработки маскируемых прерываний CALLol6 \ Переход к подпрограмме. Адрес следующей команды сохраняется на вершине стека, указатель стека уменьшается на 2 CALLcc,al6 cc - NZ, Z, NC, С, PO, PE, P, M Вызов подпрограммы, если истинна условие сс RET Возврат из подпрограммы. Адрес берется с вершины стека, указатель стека увеличивается на 2 RETcc cc - NZ, Z, NC, С, PO, PE, P, M Возврат из подпрограммы, если истине условие сс RETI Возврат из подпрограммы обработки маскируемого прерывания. Адрес берется с вершины стека, указатель стека увеличивается на 2, разрешается обработка прерываний RETN Возврат из подпрограммы обработки немаскируемого прерывания. Адрес берется с вершины стека, указатель стека увеличивается на 2, разрешается обработка прерываний RSTp p-OOh, 08h, lOh, 18h, 20h, 28h,30h,38h Вызов подпрограммы, расположенной по фиксированному адресу р (программное прерывание). Адрес возврата сохраняется в стеке JPal6 Переход па адресу а 16 JP cc,a!6 cc - NZ, Z, NC, C, PO, PE, P, M Переход па адресу а 16, если условие сс истинно JRI8 Относительный переход. Новый адрес вычисляется как сумма значения из регистра PC и 8-разряднога смещения i8. Смещение рассматривается как число са знаком JRcc,i8 cc-NZ, Z, NC, C Относительный переход, если условие сс истинно JP(rl6) rl6- HL, IX, IY Переход по адресу, содержащемуся в регистровой паре rl 6 . DJNZiB Из числа в регистре В вычитается 1. Если при этом не получен 0, то осуществляется относительный переход па смещению i8, если же В = 0, выполняется следующая за DJNZ команда IN A,(n8) Ввод байта из парта с адресам п8 и запись era в аккумулятор IN r,(C) r-A,B,C,D,E, H,L Ввод байта из парта, адрес которого задан в регистровой паре ВС, и его запись в регистр г Z, P/V, S, N, Н INI Ввод байта из парта, адрес которого задан в регистровой паре ВС; запись введенного байта в ячейку, адресуемую регистровой парой HL, увеличение HL на 1 и уменьшение числа в регистре В на 1 Все INIR Выполнение команды INI, пока число в регистре В не станет равным 0 Все IND Ввод байта из парта, адрес котарага задан в регистровой паре ВС; запись введенного байта в ячейку, адресуемую регистровой парой HL, уменьшение HL на 1 и уменьшение числа в регистре В на 1 Все INDR Выполнение команды IND, пока число в регистре В не станет равным 0 Все OUT(n8),A Вывод байта из аккумулятора в порт с адресом п8 OUT(C), r r-A, В, C, D, E, H,L Вывод байта из регистра г в порт, адрес которого задан в регистровой паре ВС СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 195
Система команд микропроцессора Z80, используемого в игровых приставках SEGA СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Мнемоника Операнды Описание Изменяемые флаги OUTI Вывод байта из ячейки помяти, адресуемой регистровой парой HL, в порт, адрес которого задан в регистровой поре ВС, увеличение HL на 1 и уменьшение числа в регистре В на 1 Все OTIR Выполнение комонды OUTI, пока число в регистре В не стонет ровным 0 Все OUTD Вывод бойта из ячейки памяти, адресуемой регистровой парой HI, в парт, адрес которого задан в регистровой паре ВС, уменьшение HI на 1 и уменьшение числа в регистре В на 1 Все OTDR Выполнение комонды OUTD, пока число в регистре В не стонет равным 0 Все Условные обозначения: р - фиксированный адрес рестарта а!6 - 16-разрядный адрес Ь - номер бита в байте (0-7) d8 - непосредственный 8-разрядный операнд dl6 - непосредственный 16-разрядный операнд i8 - 8-разрядное смещение в диапазоне от -128 до 127 г - 8-разрядный внутренний регистр процессора г!6 - 16-разрядный внутренний регистр или регистровая пара п8 - 8-разрядный адрес порта ввода/вывода d - приемник данных s - источник данных Коды условий: NZ - не ноль (флаг Z = 0) Z - ноль (флаг Z = 1) NC - нет переноса (флаг С = 0) С - перенос (флаг С = 1) РО - нечетное число единиц/нет переполнения (флаг P/V = 0) РЕ - четное число единиц/переполнение (флаг P/V =1) Р - положительный результат (флаг S = 0) М - отрицательный результат (флаг S = 1) 196
Система команд центрального процессора М68000 1.4. Система команд центрального процессора М68000 игровой приставки SEGA MEGA DRIVE Команда Пример использования Размер операндов Изменяемые флаги Описание ABCD ABCD Dy, Dx ABCD -(Ay), - (Ax) Бойт х, z, с Сложение двух чисел в двоично-десятичном коде с учетом флота X. Операнды могут располагаться либо в регистрах донных, либо в памяти. Во втором случае указывается регистр адресо, хранящий адрес операнда ADD ADD <ea>, Dn ADD Dn,<ea> Байт, слово, двойное слово х, N, Z, V, С Сложение двух чисел в двоичном коде. Один из операндов должен находиться в регистре данных ADDA ADDA <ea>, An Слово, двойное слово - Сложение адресов. Один из операндов должен находиться в регистре адресо ADDI ADDI #dota, <ea> Байт, слово, двойное слово х, N, Z, V, С Сложение с константой ADDQ ADDQ #data, <ea> Байт, слово, двойное слава X, N, Z, V, С Быстрое сложение с константой. Константа data мажет быть числам в диапазоне от 1 до 8 ADDX ADDX <ea>, Dn ADDX Dn,<ea> Байт, слово, двойное слово X, N, Z, V, С Сложение чисел с учетом флота X. Один из операндов должен быть в регистре донных AND AND <ea>,Dn AND Dn,<ea> Байт, слово, двойное слова N, Z, V, С Логическое И. Один из операндов должен быть в регистре данных ANDI ANDI #data, <ea> Байт, слово, двойное слово N, Z, V, С Логическое И с константой ANDI to CCR ANDI #data, CCR Бойт X, N, Z, V, С Логическое И константы и содержимого регистра флагов CCR ASl ASl Dx, Dy ASL #data, Dy ASL <ea> Байт, слово, двойное слово X, N, Z, V, С Арифметический сдвиг числа в регистре но указанное количество разрядов влево. Если количество разрядов определяется константой, оно может быть числом от 1 до 8. Если количество разрядов задается в регистре, оно берется по модулю 64 (то есть находится в диапазоне 1-63) ASR ASR Dx, Dy ASR #data, Dy ASR <ea> Байт, слово, двойное слово X, N, Z, V, С Арифметический сдвиг числа в регистре на указанное количество разрядов вправо. Если количество разрядов определяется константой, оно может быть числом от 1 до 8. Если количество разрядов задается в регистре, оно берется по модулю 64 (то есть находится в диапазоне 1-63) Bcc Bcc <label> Бойт, слово Условный переход. Если выполняется заданное условие, то указанное в команде смещение, интерпретируемое кок число со знаком, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места. Возможные коды условий приведены после таблицы BCHG BCHG Dn,<ea> BCHG #data, <ea> Байт, двойное слово Z Проверка и инверсия указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флог сбрасывается. Разряд операнда инвертируется. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, он должен быть байтом. Операнд в регистре рассматривается как двойное слово BCLR BCLR Dn,<ea> BCLR #data, <ea> Байт, двойное слово Z Проверка и сброс указанного бита операнда. Если розряд равен 0, устанавливается флог Z, в ином случае этот флог сбрасывается. Разряд операнда сбрасывается. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, он должен быть байтом. Операнд СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 197
Система команд центрального процессора М68000 СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Команда Пример использования Размер операндов Изменяемые флаги Описание BRA BRA <label> Байт, слава Безусловный переход. Указанное в команде смещение, интерпретируемое как число со знакам, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места BSET BSET Dn,<ea> BSET #data, <ea> Байт, двойное слово Z Проверка и установка указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда устанавливается в 1. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, ан должен быть байтом. Операнд в регистре рассматривается как двойное слова BSR BSR <label> Байт, слова Переход к подпрограмме. Адрес возврата запоминается в стеке. Указанное в команде смещение, интерпретируемое как число са знаком, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места BTST BTST Dn, <ea> BTST #data, <ea> Байт, двойное слово Z Проверка указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда не изменяется. Номер проверяемого разряда указывается либо в регистре, либо непосредственна. Если операнд находится в памяти, ан должен быть байтом. Операнд в регистре рассматривается как двойное слова СНК CHK <ea>, Dn Слава N, Z, V, С Проверка попадания в интервал. Если число в регистре меньше 0 или больше первого операнда, возникает исключение CLR CLR <ea> Байт, слова, двойное слово N, Z, V, С Указанный операнд становится равен 0 СМР CMP <ea>, Dn Байт, слова, двойное слова N, Z, V, С Сравнение. Установка флагов в соответствии с результатам вычитания второго операнда из первого. Сами операнды не изменяются СМРА CMPA <ea>, An Слово, двойное слова N,Z,V,C Сравнение с операндам из регистра адреса CMPI CMPI #data, <ea> Байт, слова, двойное слово N, Z, V, С Сравнение с константой СМРМ CMPM (Ay)+, (Ax)+ Байт, слова, двойное слова N, Z, V, С Сравнение двух чисел из памяти DBcc DBcc Dn, <label> Слово Переход с декрементам. Если указанное в коде команды условие ложна, происходит декремент числа в регистре и переход по указанному адресу DIVS DIVS.W <ea>, Dn Слово, двойное слово N,Z,V,C Деление с учетам знака. Делится двойное слово на слова. В результате младшие 16 разрядов представляют собой частное, а старшие - остаток. При делении на 0 возникает исключение DIVU DIVU.W <ea>, Dn Слово, двойное слово N,Z,V,C Деление без учета знака. В остальном аналогична DIVS EOR EOR Dn, <ea> Байт, слова, двойное слово N,Z,V,C Исключающее ИЛИ EORI EORI #data, <ea> Байт, слова, двойное слово N,Z,V,C Исключающее ИЛИ с константой EORI to CCR EORI #data, CCR Байт X, N, Z, V, C Исключающее ИЛИ константы и младшего байта регистра состояния процессора EXG EXG Dx, Dy EXG Ax, Ay EXG Dx, Ay Двойное слово Обмен содержимого регистров EXT EXT.W Dn Слово,двойное N, Z, V, C Преобразование байта в слова или слава 198
Система команд центрального процессора М68000 Команда Пример использования Размер операндов Изменяемые флаги Описание JMP JMP <еа> Двойное слово Безусловный переход по указанному адресу JSR JSR <еа> Двойное слово Вызов подпрограммы по указанному адресу. Адрес возврата запоминается в стеке LEA LEA <еа>, An Двойное слово Вычисление исполнительного адреса <еа> и его запись в регистр адреса Ап LINK LINK An, #data Слово Регистр Ап сохраняется в стеке. Указатель стека копируется в регистр Ап. К содержимому указателя стека прибавляется константа #dota, рассматриваемая как 16-разрядное число со знаком LSL LSL Dx, Dy LSL #data, Dy LSL <ea> Бойт, слово, двойное слово X, N, Z, V, С Логический сдвиг влево на указанное число разрядов. Старшие разряды копируются в флаги X и С, в младшие разряды записываются нули LSR LSR Dx, Dy LSR #data, Dy LSR <ea> Байт, слово, двойное слово X, N, Z, V, С Логический сдвиг вправо на указанное число разрядов. Младшие разряды копируются в флаги X и С, в старшие разряды записываются нули MOVE MOVE <ea>, <ea> Байт, слово, двойное слова N, Z, V, С Пересылка донных MOVEA MOVEA <ea>, An Слово, двойное слово Пересылка данных в регистр адреса MOVE to CCR MOVE <ea>, CCR Слово X, N, Z, V, С Пересылка младшего байта операнда в регистр состояния процессоре MOVE from SR MOVE SR, <ea> Слово Пересылка данных из регистра состояния процессора. Копируется состояние всех 16 разрядов. Неиспользуемые разряды равны 0 MOVEM MOVEM <list>, <ea> MOVEM <ea>, <list> Слово, двойное слово Пересылка блока данных. Пересылается содержимое всех регистров, указанных в списке <list>, в память, или данные из памяти передаются в указанные регистры MOVER MOVER Dx, (d!6, Ay) MOVER (d 16, Ay), Dx Слово, двойное слова Побайтная передача данных. Данные из регистра Dn передаются в память - начиная со старшего байта и заканчивая младшим. Начальный адрес вычисляется кок сумма адреса из регистра Ап и 16-разрядного смещения d 16. После пересылки каждого байта адрес увеличивается на 2. Эта команда предназначена для обмена донными с 8-разрядными периферийными устройствами MOVEQ MOVEQ #data, Dn Двойное слово N, Z, V, С Быстрая зогрузка константы в регистр. Константа должна быть в диапазоне от -128 до 127. Она преобразуется в двойное слово путем расширения знакового разряда MULS MULS.W <ea>, Dn Слово N, Z, V, С Умножение с учетом знака. Операнды всегда 16-разрядные, а результат - 32-разрядный MULU MULU.W <ea>, Dn Слово N, Z, V, С Умножение без учета знака. Операнды всегда 16-разрядные, о результат - 32-разрядный NBCD NBCD <ea> Байт X, N, Z, V, С Изменение зноко двоично-десятичного числа с учетом флага расширения NEG NEG <ea> Байт, слово, двойное слово X, N, Z, V, С Изменение знака двоичного число N = 0-N NEGX NEGX <ea> Байт, слово, двойное слово X, N, Z, V, С Изменение знака числа с учетом флага расширения N-0-N-X NOP NOP Пустая операция NOT NOT <ea> Бойт, слово, двойное слово N, Z, V, С Логическая инверсия OR OR <ea>, Dn OR Dn, <ea> Байт, слово, двойное слово N, Z, V, С Логическое ИЛИ ORI ORI #data, <ea> Бойт, слово, двойное слово N, Z, V, С Логическое ИЛИ с константой ORItoCCR ' ORI #data, CCR Байт X, N, Z, V, С Логическое ИЛИ константы и младшего байта регистра состояния процессора PEA PEA<ea> Двойное слово Вычисление адреса операнда и сохранение его СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 199
Система команд центрального процессора М68000 СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ Команда Пример использования Размер операндов Изменяемые флаги Описание ROL ROLDx, Dy ROL #data, Dy ROL <ea> Байт, слово, двойное слово N, Z, V, С Вращение операнда влево на указанное число разрядов. При вращении влево старший разряд копируется в флаг Сив младший разряд ROR ROR Dx, Dy ROR #data, Dy ROR <ea> Байт, слово, двойное слово N,Z,V,C Вращение операнда вправо на указанное числа разрядов. При вращении вправо младший разряд, копируется в флаг Сив старший разряд ROXL ROXL Dx, Dy ROXL #data, Dy ROXL <ea> Байт, слово, двойное слово X, N, Z, V, С Вращение операнда влево на указанное число разрядов через флаг X. При вращении старший разряд копируется в флаги С и X, а флаг X - в младший разряд ROXR ROXR Dx, Dy ROXR #data, Dy ROXR <ea> Байт, слова, двойное слово X, N,Z,V,C Вращение операнда вправо на указанное число разрядов через флаг X. При вращении младший разряд копируется в флаги С и X, а флаг X - в старший разряд RTR RTR X, N, Z, V, C Возврат из подпрограммы с восстановлением регистра состояния. Сначала из стека извлекается 16-разрядное число, передаваемое в регистр состояния процессора, а затем - адрес возврата, по которому передается управление RTS RTS Возврат из подпрограммы. Адрес возврата извлекается из стека SBCD SBCD Dx, Dy SBCD -(Ax), -(Ay) Байт X, N, Z, V, C Вычитание в двоично-десятичном коде с учетам флага X Dx - Dx - Dy - X See Sec <ea> Байт Если указанное в команде условие истинно, по заданному адресу записывается FFh, если ложно - 0 SUB SUB <ea>, Dn SUB Dn, <ea> Байт, слава, двойное слова X, N, Z, V, C Вычитание двоичных чисел SUBA SUBA <ea>, An Слава,двойное слово Вычитание адресов SUBI SUBI #data, <ea> Байт, слово, двойное слово X, N, Z, V, C Вычитание константы SUBQ SUBQ #data, <ea> Байт, слова, двойное слово X, N,Z, V, C Быстрое вычитание константы. Константа мажет . быть числом от 1 до 8 SUBX SUBX Dx, Dy SUBX-(Ax),-(Ay) Байт, слово, двойное слово X,N,Z,V,C Вычитание двоичных чисел с учетом флага X SWAP SWAP Dn Слава N.Z,V,C Перестановка младшего и старшего слав в 32-разрядном регистре TAS TAS <ea> Байт N.Z,V,C Флаги N и Z устанавливаются в соответствии са значением операнда. Разряд D7 операнда становится равен 1 TRAP TRAP #data Генерация программного исключения с указанным номером TRAPV TRAPV Генерация исключения, если флаг V равен 1 TST TST <ea> Байт, слова, двойное слава N,Z,V,C Установка флагов N и Z в соответствии са значением операнда UNIX UNLKAn Содержимое регистра Ап копируется в указатель стека, после чего двойное слово с вершины стека извлекается в регистр Ап Условные обозначения: Dn, Dx, Dy - регистры данных Ап, Ах, Ау - регистры адреса <еа> - исполнительный адрес, вычисляемый с применением одного из методов адресации #data - данные, задаваемые в команде <116 - 16-разрядное смещение <list> - список регистров сс - код условия 200
Система команд центрального процессора М68000 Коды условий: СС - флаг С = О CS - флаг С = 1 EQ - равно F - ложь GE - больше или равно GT - больше HI - выше (больше без учета знака) LE - меньше или равно LO - ниже (меньше без учёта знака) LS - ниже или равно LT - меньше MI - минус NE - не равно PL - плюс Т - истина VC - флаг V - О VS - флаг V = 1 Коды условий задаются в названии команды. Например, в таблице есть команда условного перехода Вес - после подстановки условия получается реальная команда, скажем BNE - «переход, если не равно». Задание размера операнда. Некоторые из команд процессора могут работать с операндами различной длины. При записи на языке ассемблера длина операнда таких команд задается явно путем добавления к имени команды определенно- го суффикса: . В - для байтов; . W - для слов; . L - для двойных слов. Например: MOVE.В D1,D3 ; Пересылка байта. MOVE.W D1,D3 ; Пересылка слова. СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 201 321
Система команд процессора MIPS R3000 игровой приставки SONY PLAYSTATION СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 1.5. Система команд процессора MIPS R3000 игровой приставки SONY PLAYSTATION Команда Запись на языке ассемблера Описание ADD ADD rd, rs, rt Сложение rd = rs + rt ADDI ADDI rt, rs, imm Сложение с константой rt = rs + imm ADDIU ADDIU rt, rs, imm Сложение с константой без учета знака ADDU ADDU rd, rs, rt Сложение без учета знако rd = rs + rt AND AND rd, rs, rt Логическое И rd = rs & rt ANDI ANDI rt, rs, imm Логическое И с константой rt = rs & imm BEQ BEQ rt, rs, disp Переход, если rt = rs BGEZ BGEZ rt, disp Переход, если rt> 0 BGEZAL BGEZAL rt, disp Переход, если rt > 0 с запоминанием адреса возврата в регистре 31 BGTZ BGTZ rt, disp Переход, если rt > 0 BLEZ BLEZ rt, disp Переход, если rt < 0 BLTZ BLTZ rt, disp Переход, если rt < 0 BLTZAL BLTZAL rt, disp Переход, если rt < 0 с запоминанием адреса возврата в регистре 31 BNE BNE rs, rt, disp Переход, если rs не равно rt BREAK BREAK Генерация исключения «точка прерывания» CFC2. CFC2 rs, c2c Копирование данных из управляющего регистра с2с сопроцессора графических вычислений (GTE) в регистр rs центрального процессора COP2 COP2 <b25> Обращение к сопроцессору 2 (GTE). Код команды сопроцессора определяется 25-разрядным двоичным числом Ь25 CTC2 CTC2 rs, c2c Копирование данных из регистра rs в управляющий регистр с2с сопроцессора графических вычислений (GTE) DIV DIV rs, rt Деление rs на rt. Частное помещается в регистр LO, остаток - в регистр HI DIVU DIVU rs, rt Деление rs на rt без учета знака. Чостное помещается в регистр LO, остаток - в регистр HI J J oddr Переход по указанному адресу JAL JAL addr Переход по указанному адресу и сохранение адреса возврата в регистре 31 JALR JALR rd, rs Переход по адресу из регистра rs и сохранение адреса возврата в регистре rd. Если регистр rd не указан, используется регистр 31 JR JR rs Переход по адресу из регистра rs LB LB rt, disp(base) Зогрузка байта из ячейки памяти с адресом base+disp в регистр rt с расширением знакового бита LBU LBU rt, disp(base) Загрузка байта из ячейки памяти с адресом base+disp в регистр rt без росширения знакового бита LH LH rt, disp(base) Загрузка полуслова, расположенного по адресу base+disp, в регистр rt с расширением знакового бита LHU LHU rt, disp(base) Зогрузка полуслова, расположенного по адресу base+disp, в регистр rt с расширением знакового бита LUI LUI rt, imm Зогрузко константы в старшие 16 разрядов регистра rt LW LW rt, disp(base) Загрузко слава, расположенного па адресу base+disp, в регистр rt LWC2 LWC2 c2d, disp(base) Загрузка полуслова, расположенного по адресу base+disp, в регистр данных c2d сопроцессора графических вычислений (GTE) LWL LWL rt, disp(base) Загрузка слово, расположенного слева от адреса base+disp, в регистр rt без учета выравнивания LWR LWR rt, disp(base) Загрузка слова, расположенного справа от адреса base+disp, в регистр rt без учета выравнивания MFCO MFCO rt, cOr Копирование данных из регистра сОг сопроцессора управления системой в регистр rt процессора MFC2 MFC2 rt, c2d Копирование данных из регистра данных c2d сопроцессора графических вычислений в регистр rt процессора MFH1 MFHI rd Копирование данных из регистра HI в регистр rd MFLO MFLO rd Копирование данных из регистра LO в регистр rd MTCO MTCO rd, cOr Копирование данных из регистре rt процессора в регистр сОг сопроцессора управления системой MTC2 MTC2 rd, c2d Копирование данных из регистра rt процессора в регистр данных c2d сопроцессора графических вычислений MTHI MTHI rd Копирование данных из регистра rd в регистр HI MTLO MTLO rd Копирование данных из регистра rd в регистр LO MULT MULT rs, rt Умножение rs на rt, результат в регистрах HI и LO MULTU MULTU rs, rt Умножение rs на rt без учета знака, результат в регистрах Н1 и LO 202
Система команд процессора MIPS R3000 игровой приставки SONY PLAYSTATION Команда Запись на языке ассемблера Описание OR OR rd, rs, rt Логическое ИЛИ rd “ rs 1 rt ORI ORI rd, rs, imm Логическое ИЛИ с константой rd “ rs 1 imm RFE RFE Разрешение прерываний и восстановление привилегий приложения SB SB rt, dispjbase) Сохранение младшего байта из регистра rt в ячейке памяти с адресом base+disp SH SH rt, dispfbase) Сохранение полуслова (младшие 16 разрядов) из регистра rt в ячейке памяти с адресом base+disp SIL SIL rd,rt,sb Логический сдвиг влево регистра rt на sb разрядов, результат помещается в регистр rd SUV SLLV rd, rt, rs Логический сдвиг влево регистра rt на rs разрядов, результат помещается в регистр rd SIT STL rd, rs, rt Сравнение rs и rt. Результат в rd SLTI SLTI rt, rs, imm Сравнение с константой SLTIU SLTIU rt, rs, imm Сравнение с константой без учета знака SITU SLTIU rd, rt, rs Сравнение без учета знака SRA SRA rd, rt, sb Логический сдвиг влево регистра rt на sb разрядов, результат помещается в регистр rd SRAV SRAV rd, rt, rs Логический сдвиг влево регистра rt на rs разрядов, результат помещается в регистр rd SRL SRL rd, rt, sb Логический сдвиг влево регистра rt но sb разрядов, результат помещается в регистр rd SRLV SRLV rd, rt, rs Логический сдвиг влево регистра rt на rs разрядов, результат помещается в регистр rd SUB SUB rd,rt,rs Вычитание rd “ rt - rs SUBI SUBI rt, rs, imm Вычитание константы SUBIU SUBRJ rt, rs, imm Вычитание константы без учета знака SUBU SUBU rd, rt, rs Вычитание без учета знака SW SW rt, dispfbose) Сохранение слова из регистра rt в ячейке памяти с адресом base+disp SWC2 SWC2 c2d, dispjbose) Сохранение слова из регистра данных сопроцессора графических вычислений c2d в ячейке памяти с адресом base+disp SWL SWL rt, dispfbase) Сохранение слова из регистра rt в ячейках памяти, расположенных слева ат адреса base+disp, без учета выравнивания SWR SWR rt, dispfbose) Сохранение слово из регистра rt в ячейках памяти, расположенных справа от адреса base+disp, без учета выравнивания SYSCALL SYSCALL <Ь20> Вызов функции операционной системы. Номер функции определяется значением в 20-разрядном поле Ь20 XOR XOR rd, rs, rt Исключающее ИЛИ XORI XORI rs, rt, imm Исключающее ИЛИ с константой Условные обозначения: rd, га, rt - регистры центрального процессора imm - 16-разряд ная константа base - базовый адрес в памяти disp - 16-разряд ное смещение сОг - регистр сопроцессора управления системой с2с - регистр управления'сопроцессора графических вычислений c2d - регистр данных сопроцессора графических вычислений sb - счетчик разрядов в операции сдвига (от 1 до 32) Ь20, Ь25 - битовые поля, определяющие код операции сопроцессора СИСТЕМЫ КОМАНД МИКРОПРОЦЕССОРОВ, ИСПОЛЬЗУЕМЫХ В ИГРОВЫХ ПРИСТАВКАХ 203
ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК
Программа Sokoban для DENDY____ 1. Программа Sokoban для DENDY • 'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k’k'k-k'k'k'k'k'k'k-k'k'k'k'k'k'k'k'k'k’k’k’k’k-k’k’k’k’kit-k-k’k'k f ; * Игровая программа Sokoban для приставки DENDY * ; * Издательство «ДМК Пресс», 2001 * • ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ / ; *** Область с картами уровней *** .org $8000 ; Уровень 1. .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $0Е, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $02, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $11, $00, $00, $00, $00, $01, $11, $11 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $21, $00, $00, $00, $00, $01, $22, $21 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $0F, $00, $00, $00, $00, $01, $42, $21 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $02, $00, $00, $00, $01, $11, $22, $41 .byte $10, $00, $00, $00, $00, $00, $00, $00 .byte $05, $00, $00, $00, $01, $22, $42, $42 .byte $10, $00, $00, $00, $00, $00, $00, $00 .byte $36, $00, $00, $01, $11, $21, $21, $12 .byte $10, $00, $11, $11, $11, $00, $00, $00 • byte $0F, $00, $00, $01, $22,' $21, $21, $12 .byte $11, $11, $12, $23, $31, $00, $00, $00 .byte $05, $00, $00, $01, $24, $22, $42, $22 .byte $22, $22, $22, $23, $31, $00, $00, $00 .byte $15, $00, $00, $01, $11, $11, $21, $11 .byte $21, $51, $12, $23, $31, $00, $00, $00 .byte $14, $00, $00, $00, $00, $01, $22, $22 .byte $21, $11, $11, $11, $11, $00, $00, $00 .byte $00, $00, $00, $00, $00, $01, $11, $11 .byte $11, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 Уровень 2. ; Остальные уровни добавьте сами или используйте ; файл sokoban.dat с готовыми уровнями. * * * Титульный экран, меню и палитры. ; Титульный экран. .org $B200 screenl: .byte $FF, $FF, $FC, $FB, $F8, $FF, $FF, $FF .byte $FF, $FF, $FA, $FF, $FA, $FF, $FF, $FF .byte $FF, $FF, $FC, $FB, $FD, $FF, $FF, $FF .byte $FF, $FF, $FC, $FB, $FD, $FF, $FF, $FF .byte $FF, $FF, $FB, $FF, $FF, $FF, $FF, $FF ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 205
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК .byte $FF, $FF, $FB, $FF, $FB, $FF, $FF, $FF .byte $FF, $FF, $FB, $FF, $FB, $FF, $FF, $FF .byte $FF, $FF, $FB, $FF, $FB, $FF, $FF, $FF .byte $FF,. $FF, $FE, $FB, $FD, $FF, $FC, $FB .byte $FD, $FF, $FB, $FB, $F5, $FF, $FC, $FB .byte $FD, $FF, $FB, $FF, $FB, $FF, $FF, $FF .byte $FF, $FF, $FF, $FF, $FB, $FF, $FB, $FF .byte $FB, $FF, $FB, $FF, $FB, $FF, $FB, $FF .byte $FB, $FF, $FB, $FF, $FB, $FF, $FB, $FF .byte $FB, $FF, $FB, $FF, $FB, $FF, $FF, $FF .byte $FF, $FF, $FF, $FF, $FB, $FF, $FB, $FF .byte $FB, $FF, $FB, $FF, $FB, $FF, $FB, $FF .byte $FB, $FF, $FB, $FF, $FB, $FF, $FB, $FB .byte $FB, $FF, $FB, $FF, $FB, $FF, $FF, $FF .byte $FF, $FF, $F7 , $FB, $F6 , $FF, $FE, $FB .byte $F6, $FF, $F9, $FF, $F9, $FF, $FE, $FB .byte .byte ; Меню (надпись . org $F6, $FF, $FE, $F9 , $FF, $F9, PRESS START). $B2C0 $FB, $FF, $F6, $F9, $FF, $00 $F9, $FF menul: .byte .byte $9A, $9F, $9B, $9B, $9C, $9E, $9D, $00 $9D, $FF, $9D, $9E ; Палитры. . org $B300 pal_0: .byte $06, $0A, $0B, $14, $0C, $0A, $0B, $12 .byte $0E, . org $20, $0E, $0F, $10, $12, $0D, $0F $BFE0 pal_l: .byte $0D, $01, $3C, $22, $D0, $FF, $FF, $FF .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF pal_2: .byte $0D, $38, $15, $1C, $D0, $07, $06, $15 .byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF . *** Текст программы. spritemem = $200 playerxdata = $20 ppuconl = $61 playerx = $2FF playery = $2FC px = $310 РУ = $311 Ivlmatrix = $300 behbox = $500 Ivlptr = $0 boxcount = $10 boxptr = $11 boxleft = $12 tx = $20 ty = $21 curboxptr = $40 temp = $50 dirx = $45 diry = $46 bgwall = $60 bgground = $65 bggoal = $62 206
Программа Sokoban для DEND Y spbox = $63 spchar memlvlptr startflag reset: = $64 = $2 = $58 .org $C000 ; Адрес начала программы, sei cld Idx #$0 stx $2000 ; Выключение видеопроцессора. stx ppuconl stx $2001 Idx #$FF txs ; Установка указателя стека. Ida #7 ; Подготовка к очистке ОЗУ sta $1 ; по адресам 0 - $7FF. Ida #0 ldy #0 clrram: sta (0),y ; Цикл очистки ОЗУ. dey bne clrram dec $1 bpl clrram Ida #$20 ; Подготовка к очистке видеопамяти, sta $2006 ; Запись в регистры видеопроцессора Ida #0 ; адреса для доступа к видеопамяти, sta $2006 ldy #$10 Idx #0 clrvram: sta $2007 ; Цикл очистки видеопамяти, dex bne clrvram dey bne clrvram Ida #$3F ; Установка адреса Idx #$0 ; для копирования палитры sta $2006 ; в память видеопроцессора, stx $2006 ldy #$20 setpal: Ida pal_l,x ; Цикл копирования данных sta $2007 ; в ОЗУ палитры, inx dey bne setpal Ida *$0 ; Задание используемых символов sta bgwall ; для стен, Ida #$50 sta bgground ,- для пола, Ida #$A0 sta bggoal ; для мест контейнеров, Ida #$0 sta spchar ; для игрока, Ida *$40 sta spbox ; для контейнера. Ida #1 sta boxleft Ida *$90 ; Включение видеопроцессора. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 207
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК sta $2000 задание экранной страницы sta Ida sta ppuconl ; #0 startflag и разрешение формировать запрос NMI. j sr title ; Вывод титульного экрана. Ida #$80 Установка указателя sta lvlptr+1 ; на адрес $8000 (уровень 1). loop: jsr loadlevel ; Загрузка уровня. waitnmi: jmp waitnmi ; Ожидание кадрового импульса. vblank: pha txa pha tya pha t Сохранение регистров А, X и Y в стеке. Ida boxleft ; Если boxleft = 0, bne Play то уровень завершен. inc lvlptr+1 ; Изменение указателя на данные jsr loadlevel ; и загрузка нового уровня. play: Ida sta sta #0 $2005 $2005 Отключение скроллинга изображения. sta dirx Обнуление переменных, задающих sta Ida diry #2 направление движения. sta $4014 Программирование звукового процессора. Idx #1 Фиксация состояния кнопок stx dex stx $4016 $4016 на игровом пульте. Ida $4016 Кнопки А, Ви SELECT не используются, Ida Ida $4016 $4016 поэтому их состояние игнорируется. Ida and beq $4016 #1 notstart Проверка состояния кнопки START. Ida startflag ; Если нажата кнопка START, bne test2 ; повторная загрузка текущего уровня. Ida #$FF Если при этом переменная startflag sta startflag ; не равна 0, значит, уровень pla r только что был загружен pla ! и ничего делать не надо. Pla ! Если уровень перезагружается. dec bgwall ; стек очищается, dec bgground ; номера символов для рисования dec bggoal ; данного уровня восстанавливаются dec dec jmp spchar ; spbox loop и производится переход на загрузку уровня notstart: Ida #0 Разрешение перезагрузки уровня sta startflag ; при нажатии кнопки START. test2: Ida $4016 Проверка состояния кнопок and beq #1 notup перемещения игрока. Ida sta jmp #$FF diry trymove Передвижение вверх. 208
Программа Sokoban для DENDY notup: Ida $4016 notdown: notleft: and beq Ida sta jmp Ida and beq Ida sta jmp Ida and beq Ida sta jmp # 1 notdown # 1 diry trymove $4016 # 1 notleft #255 dirx trymove $4016 # 1 notright # 1 dirx trymove Передвижение вниз. Передвижение влево. Передвижение вправо. nomove: ; Проверка pla ; tay ; pla ; tax pla rti возможности перемещения. Ни одна кнопка не нажата. Восстановление регистров и возврат в цикл ожидания. trymove: Ida sta Ida sta sta sta Ida Isr Isr Isr sta clc adc sta Ida clc adc Isr Isr Isr sec sbc clc adc asl asl asl asl asl #6 memlvlptr+1 #0 memlvlptr temp+3 ; temp+4 playerx ; a a ; a px dirx ; temp+1 playery ; #1 a a ; a #6 diry ; a ; a a a a Установка указателя. Сохранение указателя. Загрузка координаты х игрока. Деление на 8 (размер спрайта) и сохранение. Прибавление перемещения по оси X и сохранение. Те же действия для оси Y. Деление на 8 (размер спрайта). Вычитание 6, поскольку поле расположено в центре экрана. Прибавление перемещения по оси Y. Умножение на 32 (ширина экрана). sta Ida memlvlptr ; #0 Сохранение в memlvlptr. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 209 21
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК a de memlvlptr+1 ; В случае переноса старший байт sta memlvlptr+1 ; указателя увеличивается на 1 sta temp+8 ; и сохраняется. Ida memlvlptr clc adc temp+1 ; Прибавление к указателю смещения sta temp+7 ; по оси X и сохранение. sta memlvlptr Idy #0 ; Загрузка байта, на который Ida (memlvlptr),y ; показывает указатель. emp #$50 ; Если это пол или место для контейнера beq move ; производится перемещение. emp #$A0 beq move emp #$FE ; Если это контейнер, beq boxmove ; можно ли его двигать? jmp nomove ; Если стена, положение не меняется. boxmove: j sr boxtest ; Движение с контейнером. jmp nomove move: j sr move ; Движение игрока. jmp nomove ; Проверка возможности перемещения контейнера и его движение. boxtest: Ida diry asl a asl a asl a asl a asl a sta temp+1 Ida memlvlptr pha clc adc dirx clc adc temp+1 sta memlvlptr sta temp+5 pla Isr a Isr a Isr a Isr a Isr a emp #7 bne notway Ida diry emp #1 bne nobig jmp bigstep notway: emp #0 bne nobigchange Ida diry emp #$FF bne nobigchange bigstep: Ida memlvlptr+1 eor #1 2Ю
Программа Sokoban для DENDY sta memlvlptr+1 nobig: Ida memlvlptr+1 sta temp+6 Ida (memlvlptr),y sta temp+3 cmp #$50 beq okmove ; Можно перемещаться. cmp #$A0 beq boxgoal ; Контейнер поставлен на место. rts boxgoal: dec boxleft okmove: Ida dirx ; Поиск спрайта перемещаемого контейнера asl а ; и изменение его координат. asl а asl а clc adc playerx sta temp+1 Ida diry asl а asl а asl а clc adc playery sta temp+2 ldy #0 trynext: Ida spritemem,у ; Проверка спрайтов. cmp temp+2 ; Сравнение координаты у beq tryx ; из памяти спрайтов iny ; с координатой у контейнера. iny iny iny bne trynext tryx: Ida spritemem+З ,у ; Координата у совпала. cmp temp+1 ; Сравним координату х beq found ; аналогичным образом. iny iny iny iny bne trynext found: sty curboxptr ; Спрайт найден. Ida curboxptr Isr а ; Деление на 4, чтобы узнать Isr а ; номер спрайта. tax Ida temp+7 sta memlvlptr Ida temp+8 sta memlvlptr+1 ldy #0 Ida behbox,x ; Что находится sta (memlvlptr),y ; под передвигаемым контейнером? cmp #$А0 bne notgoal ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 211
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК inc boxleft ; Контейнер сдвинули с места. notgoal: vblank2: Ida sta Ida sta Ida sta Ida sta Ida and sta sta Idy Idx Ida bpl Ida sta Ida clc adc sta Ida clc adc sta Ida clc adc sta Ida clc adc sta dey bne Ida ora sta sta rts temp+5 memlvlptr temp+6 memlvlptr+1 (memlvlptr),y behbox,x #$FE (memlvlptr) ,y ppuconl #$7F ppuconl $2000 #8 curboxptr $2002 vblank2 #$2 $4014 dirx playerx playerx diry playery playery spritemem,x diry spritemem,x spritemem+3, x dirx spritemem+3, x vblank2 ppuconl #$80 ppuconl $2000 ; Запоминание того, что находится ; под контейнером, ; передвижение контейнера. ,- Анимация и изменение координат. move: vblankl: Ida and sta sta Idy Ida bpl Ida sta Ida clc adc sta ppuconl #$7F ppuconl $2000 #8 $2002 vblankl #$2 $4014 dirx playerx playerx ; Перемещение игрока. 212
Программа Sokoban для DENDY Ida diry clc adc- sta dey bne Ida ora sta sta rts ; Подпрограмма loadlevel: inc inc inc inc inc Ida sta Ida and sta sta loadl: Ida bpl Ida sta Ida sta Ida Idx clc playery playery vblankl ppuconl #$80 ppuconl $2000 загрузки уровня bgwall bgground bggoal spchar spbox #0 $2001 ppuconl #$7F $2000 ppuconl $2002 loadl #$3F $2006 #$00 $2006 #0 #4 ; Переключение знакогенератора ; Выключение видеопроцессора. ; Задание адреса для доступа ; к ОЗУ палитры. newpal: newpal2: adc tay pha Ida sta pla dex bne pha Ida sta Ida sta pla Idx adc tay pha #$10 (Ivlptr),y $2007 newpal #$3F $2006 #$10 $2006 #8 #$10 ; Запись новой палитры. Ida sta pla dex bne (Ivlptr) ,y- $2007 newpal2 ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 213
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК load2: Ida $2002 bpl load2 Ida #6 sta ty sta memlvlptr+1 ldy #0 ; Очищение ОЗУ спрайтов sty tx sty boxptr sty boxcount sty memlvlptr resspr: tya Isr a Isr a tay Ida #$50 sta behbox,y tya asl a asl a tay Ida #$F2 sta spritemem,у iny Ida spbox sta spritemem,у iny Ida #1 sta spritemem,у iny iny bne resspr sty playery+2 ldy spchar sty playery+1 Ida #$20 ldy #$C0 sta $2006 Ida #0 sta $2006 Idx #$FF settoff: stx $2007 dey bne settoff Idx #1 loadmore: Ida (Ivlptr),y dex bmi notshift Isr a Isr a Isr a Isr a jmp done notshift: and #$F done: cmp #5 ; Это игрок? bne notplayer Ida ty 214
Программа Sokoban для DENDY asl a asl a asl a ; Сохранение координат игрока. sbc #0 sta playery Ida tx asl a asl a asl a sta playerx Ida #$50 pha Ida bgground jmp notfloor notplayer: cmp #6 ; Может, это контейнер? bne notbox2 inc boxcount tya ; Если да, для него создается спрайт pha Ida ty asl а asl а asl а sbc #0 pha Idy boxptг Ida #$А0 sta behbox,у pla sta spritemem,у iny iny iny Ida tx asl а asl а asl а sta spritemem,у iny sty boxptr Ida #1 sta temp+4 pla tay Ida #$А0 pha Ida bggoal jmp notfloor notbox2: cmp #4 bne notbox tya pha inc boxcount Ida ty asl a ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 215
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК asl a asl a sbc #0 Idy boxptr sta spritemem,у iny iny iny Ida tx asl a asl a asl a sta spritemem,у iny sty boxptr Ida #1 sta temp+4 . pla tay Ida #$50 pha Ida bgground jmp notfloor notbox: emp #0 ; Может, это пустой квадрат? Bne notempty Ida #$FF ; Да, отображение пустого квадрата pha ; (символа с кодом FFh) . jmp notfloor notempty: emp #1 ; Может, это стена? bne notwall Ida #$0 ; Да, отображение стены. pha Ida bgwall jmp notfloor notwall: emp #3 ; Это место для контейнера. bne notgoal Ida #$A0 pha Ida bggoal jmp notfloor notgoal: emp #2 ; Это пол? bne notfloor Ida #$50 pha Ida bgground notfloor: sta $2007 ; Запись байта в видеопамять. Ida temp+4 beq nochange pla Ida #$FE pha nochange: tya asl a bcc notpage2 Ida #7 sta memlvlptr+1 216
Программа Sokoban для DENDY notpage2: txa beq noadd tya asl a bcs cool adc #1 jmp add cool: clc adc #1 sec jmp add noadd: tya asl a add: tay pla sta (memlvlptr),y tya ror a tay Ida #0 sta temp+4 inc tx Ida #$20 cmp tx bne oldline Ida #$FF sta $2007 sta $2007 Ida #2 iny beq doneload sta tx inc ty oldline: txa bne dotheiny jmp loadmore dotheiny: Idx #1 iny beq doneloading jmp loadmore doneloading: Idx #$FF settoff2: stx $2007 dey bne settoff2 Ida lvlptr+1 sec sbc #$80 tay Idx noboxdata,у stx boxesleft UUU: Ida $2002 bpl uuu Ida #$18 sta $2001 Ida ppucontroll ora #$80 ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 217 521
Программа Sokoban для DENDY ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК sta ppucontroll sta $2000 rts title: Ida #0 sta $2001 Ida ppuconl and #$7F sta ppuconl sta $2000 Ida #$20 sta $2006 Ida #0 sta $2006 Idy #$C0 Idx #4 Ida #$FF black: sta $2007 dey bne black dex bne black Ida #$21 sta $2006 Idx #0 stx $2006 drawl: Ida $B200,x beq draw2 sta $2007 inx bne drawl draw2: Ida #$22 sta $2006 Ida #$A sta $2006 Idx #0 draw3: Ida $B2C0,x beq draw4 sta $2007 inx bne draw3 draw4: Ida #$18 sta $2001 Ida ppuconl and #$7f sta ppuconl sta $2000 waitkey: Idx #1 stx $4016 dex stx 4016 stx $2005 stx $2005 Ida $4016 Ida $4016 Ida $4016 ; Показ заставки ; и ожидание нажатия кнопки START. ; Заполнение экрана пробелами, ; код пробела - FFh. ; Копирование титульного экрана ; в видеопамять. ; Копирование в видеопамять меню. ; Ожидание нажатия на кнопку START 218
Программа Sokoban для DENDY Ida $4016 and #1 emp #1 beq startl jmp waitkey startl: Ida ppuconl ora #$80 sta ppuconl sta $2000 rts ; Векторы перехода. .org $FFFA .word vblank .word reset .word reset . end 2. Программа работы со звуковыми процессорами для игровой приставки SEGA MEGA DRIVE 2.1. Программа для основного процессора ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК * Программа, демонстрирующая работу с сопроцессором Z80 * и звуковыми процессорами приставки SEGA MEGA DRIVE ★ *___ -..... - . . -. . org $0 * Заголовок картриджа. dc.l $00FFFE00,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200,$200 dc.l $200,$200,$200,$200,$200,$200,$200 dc.l $200 dc.b 'SEGA GENESIS (C)SEGA 1996 MAY' dc.b 'SAMPLE SOUND PROGRAM dc.b 'SAMPLE SOUND PROGRAM dc.b 'GM 00000000-00',$a5,$fb dc.b 'JD ' ,$00,$00,$00,$00,$00,$02,$00,$00 dc.b $OO,$ff,$OO,$OO,$ff,$ff,$ff,$ff,' dc.b' ' dc.b' ' dc.b 'JUE * Процедура обработки исключения. Ничего не делает, rte 219
Программа для основного процессора игровой приставки SEGA MEGA DRIVE ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК * Начало программы. .START tst. 1 $al0008.1 bne. s SkipJoyDetect tst. w $al000c.l SkipJoyDetect: bne SkipSetup lea Table(pc),a5 movem. w (a5)+,d5-d7 movem.1 (a5)+,a0-a4 move.b -$10ff(al),d0 ; Проверка версии. andi.b #$0f,d0 beq. s WrongVersion move.1 #$53454741,$2f00(al) ; Код приставки (SEGA). WrongVersion: move.w (a4),d0 moveq #$00,dO movea.1 d0,a6 move аб,usp moveq #$17,dl ; Программирование регистров приставки FillLoop: move.b (a5)+,d5 move.w d5,(a4) add. w d7 ,d5 dbra dl,FillLoop move.1 (a5)+,(a4) move.w dO,(a3) move.w d7,(al) move.w d7,(a2) L0250: Btst bne. s moveq Filla: move.b dbra move.w move.w move.w L0262: move. 1 dbra move. 1 move.1 moveq FilcO: move.1 dbra move.1 moveq Fillcl: move. 1 dbra moveq Fillc2: move.b dO,(al) L0250 #$25,d2 (a5)+,(aO)+ d2,Filla dO,(a2) dO,(al) d7,(a2) dO,-(аб) d6,L0262 (a5)+,(a4) (a5)+,(a4) #$lf,d3 dO,(a3) d3,FilcO (a5)+,(a4) #$13,d4 dO,(a3) d4,Fillcl #$03,d5 (a5)+,$0011(a3) 220
Программа для основного процессора игровой приставки SEGA MEGA DRIVE dbra d5,Fillc2 move.w movem.1 move SkipSetup: d0,(а2). (аб),d0-d7/a0-a6 #$2700,sr bra. s Table: Continue ; Вся аппаратура проинициализирована de. w $8000, $3fff, $0100, $00а0, $0000, $00а1, $1100, $00al de. w $1200, $00с0, $0000, $00с0, $0004, $0414, $302с, $075c de. w $0000, $0000, $0000, $002с, $0001, $0000, $00ff, $f fOO de. w $0080, $4000, $0080, $af01, $d91f, $1127, $0021, $2600 dc.w $f977, $edb0, $ddel, $fdel, $ed47, $ed4f, $dlel, $fl08 dc.w $d9cl, $dlel, $flf9, $f3ed, $5636, $e9e9, $8104, dc.w $c000, $0000, $4000, $0010, $9fbf, $dfff * Загрузка программы в память сопроцессора. Continue: move.w #$100, $alll00 ; Остановка сопроцессора. move.w #$100,$а11200 ; Генерация сигнала сброса. lea Z80Driver,a0 ; Копирование программы. lea $a00000,al move.w #Z80DriverLen,d0 Z801oop: move.b (a0)+,(al)+ subq.w #l,d0 bne Z801oop move.w #$0,$alll00 ; Разрешение работы сопроцессора. * Начало воспроизведения звука. move.l #Sega_Sound,d0; Определение адреса move.l #Sega_Len,dl ; воспроизводимого фрагмента, bsr PlaySample Forever: nop ; Бесконечный цикл, во время пор ; выполнения которого bra Forever ; сопроцессор воспроизводит музыку. ★ ★ $8f01 ★ Подпрограмма устанавливает параметры, необходимые * сопроцессору для формирования звука ★ * Входные данные ★ . - * dO = адрес звуковых данных * dl = размер блока звуковых данных ★ * PlaySample: move.w #$100,$alll00 ; Остановка сопроцессора. lea $a00039,a0 ; Запись флага, разрешающего воспроизведение move.b #1,(aO)+ ; по адресу $39 в памяти Z80. move.b dO,(aO)+ ; Запись адреса блока звуковых данных lsr.1 move.b lsr.1 move.b #8,d0 dO,(aO)+ #8,d0 dO,(a0)+ ; в памяти центрального процессора. move.b lsr.1 dl,(aO)+ #8,dl ; Запись длины блока. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 221
ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК Программа для основного процессора игровой приставки SEGA MEGA DRIVE move.b dl,(aO)+ lsr.1 #8,dl move.b dl,(aO) move.w #$0,$alll00 ; Разрешение работы Z80. rts * Программа для процессора Z80 * Здесь эта программа приведена в виде кодов, * текст на ассемблере представлен ниже *....-...— .... Z80Driver: dc.b $сЗ,$46,$00,$00,$00,$00,$00,$00 dc.b $00, $00,$00,$00,$00,$00,$00, $00 dc.b $00,$00,$00,$00,$00,$00,$00,$00 dc.b $00,$00,$00,$00,$00,$00,$00,$00 dc.b $00,$00,$00,$00,$00,$00,$00,$00 dc.b $00,$00,$00,$00,$00,$00,$00,$00 dc.b $00, $0 0,$0 0,$00,$00,$00,$00,$00 dc.b $c9, $01,$00,$00,$00,$00,$00,$00 dc.b $00,$00,$00,$00,$00,$00,$f3,$ed dc.b $56,$31,$00,$20,$3a,$39,$00,$b7 dc.b $ca,$4c,$00,$21,$3a,$00,$11,$40 dc.b $00,$01,$06,$00,$ed,$b0,$3e,$00 dc.b $32 , $39,$00,$3e,$b4,$32,$02,$40 dc.b $3e,$c0,$32,$03,$40,$3e,$2b,$32 dc.b $00,$40,$3e,$80,$32,$01,$40,$3a dc.b $43,$0 0,$4f,$3a,$44,$00,$47 , $3e dc.b $06,$3d,$c2,$81,$00,$21,$00,$60 dc.b $3a,$41,$00,$07,$77,$3a,$42,$00 dc.b $77,$0f,$77,$0f,$77,$0f,$77,$0f dc.b $77,$0f,$77,$0f,$77,$0f,$77,$3a dc.b $40,$00,$6f,$3a,$41,$00,$f6,$80 dc.b $67,$3e,$2a,$32,$00,$40,$7e,$32 dc.b $01,$40,$21,$40,$00,$7e,$c6, $01 dc.b $77,$23,$7e,$ce,$00,$77,$23,$7e dc.b $ce,$00,$77,$3a,$39,$00,$b7,$c2 dc.b $4c,$00,$0b,$78,$bl,$c2,$7f,$00 dc.b $3a,$45,$00,$b7,$ca,$4c,$00,$3d dc.b $3a,$45,$00,$06,$ff,$0e,$ff,$c3 dc.b $7f,$00 Z80DriverEnd: Z80DriverLen equ Z80DriverEnd - Z80Driver Sega_Sound: Здесь располагаются звуковые данные, которые будут воспроизводиться. Пример блока звуковых данных можно найти в файле sound.asm Sega_Sound_End: Sega_Len equ . end Sega_Sound_End - Sega_Sound 222
Программа для сопроцессора Z80 игровой приставки SEGA MEGA DRIVE 2.2. Программа для сопроцессора 280 .org $0 Программа воспроизведения звука для сопроцессора Z80 игровой приставки SEGA MEGA DRIVE sound_driver: jp start_driver ; Точка запуска. .fill $35,0 ; Буфер. ret ; Точка входа в процедуру ; обработки прерывания. ; Переменные, которые инициализирует центральный ; процессор перед началом воспроизведения. start_ flag: .byte 0 ; Если 0, звук не воспроизводится. in_addr: ; Адрес начала звуковых данных. .byte 0,0,0 in_len . byte 0,0,0 ; Длина звуковых данных. ; Сюда процессор Z80 копирует параметры блока. addr: .byte 0,0,0 ; Адрес начала звуковых данных. len: .byte 0,0,0 ; Длина звуковых данных. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК Текст программы start_driver: di im 1 Id sp,$2000 ; Установка указателя стека. main_loop: Id a,(start_flag); Ожидание разрешения начать or a ; воспроизведение звука. 3P z,main_loop Id hl,in_addr ; Копирование данных блока, Id de,addr ; который будет воспроизводиться. Id be ,$6 Idir Id a, 0 Id (start_flag),a Id a, $b4 Инициализация звукового процессора Id ($4002),a Разрешение стереозвучания. Id a, $c0 Id ($4003) ,a Id a,$2b Разрешение работы ЦАП. Id ($4000) ,a Id a,$80 Id ($4001) ,a 223
Программа для сопроцессора Z80 игровой приставки SEGA MEGA DRIVE ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК Id a,(len) Загрузка в ВС длины блока аудиоданных. Id c, a Id a,(len+1) Id b, a sound_loop: Id a, $6 wait: deca jp nz,wait Id hl,$6000 Поразрядная запись Id a,(addr+1) адреса блока звуковых данных rlca в регистр, управляющий доступом Id (hl),a к памяти основного процессора. Id a,(addr+2) Id (hl),a rrca Id (hl),a rrca Id (hl),a rrca Id (hl),a rrca Id (hl),a rrca Id (hl),a rrca Id (hl),a rrca Id (hl),a Id a,(addr) Теперь страница памяти Id 1, a центрального процессора доступна для Z80 Id a,(addr+1) по адресу 800Oh. or $80 Id h, a Id a,$2a ; Запись байта в ЦАП. Id ($4000),a Id a,(hl) Id ($4001) ,a Id hl,addr ; Увеличение адреса. Id a,(hl) add a, 1 Id (hl),a inc hl Id a,(hl) adc a, 0 Id (hl),a inc hl Id a,(hl) r- adc a, 0 Id (hl),a Id a,(start_flag) ; Нужно ли воспроизводить or a ; звуковой фрагмент jp nz,main_loop ; перед завершением? dec be Id a,b or c 224
Программа для работы с графическим процессором приставки SONY PLAYSTATION jp nz,sound_loop ; Воспроизведение завершено? Id a,(len+2) or a ЭР z,main_loop ; Да. dec a Id a,(len+2) Id b,$ff Id c,$ff jp . end sound_loop ; Нет, следующий блок. 3. Программа для работы с графическим процессором приставки SONY PLA YSTATION Программа печати текста на экране Playstation с использованием возможностей графического процессора использует шрифт из файла font.bin PrintGPU_Dma создает список примитивов, передаваемый с использованием прямого доступа к памяти. PrintGPU ожидает готовности графического процессора и рисует без использования прямого доступа к памяти. Работает медленнее, но не требует памяти для создания списка примитивов. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК org $80010000 ; Инициализация аппаратуры. lui аО, $0800 ; Инициализация GPU, jal InitGPU ; команда 8. ori а0,а0,$0009 ; биты 0 и 1 = 01 - ширина экрана 320, ; бит 3 = 1- режим = PAL. la a0,back ; Рисование фона. jal SendList nop jal Loadfont ; Загрузка шрифта, nop ; Рисование с использованием прямого доступа к памяти. la a0,textl ; аО = указатель на строку. li al,$00200018 ; al : у«16|х (у=$2 0, х=$2 0) . li а2,$00808080 ; а2 : фон = 808080 = белый. jal PrintGPU_dma ; Создание списка примитивов, пор jal SendList ; Передача с использованием ПДП. or a0,zero,v0 ; Рисование без использования прямого доступа к памяти. la a0,text2 ; аО = указатель на строку. li al,$00600018 ; al : у«16|х (у=$2 0, х=$20) . li а2,$00208080 ; а2 : фон = 808080 = белый. -321 225
Программа для работы с графическим процессором приставки SONY PLAYSTATION ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК jal nop PrintGPU ; Рисование. self j self nop textl db "Here",$27,'s yar stuff printed.',$0a,$0d,'Next line db $0a,'Just a linefeed.',$00 text 2 db "And here",$27,'s some more text in yellow',$2c db $0d, $0a,'printed without DMA.' align 4 dw $0 ; Подпрограммы работы с GPU GPO equ $1810 GP1 equ $1814 DPCR equ $10f0 DICR equ $10 f 4 D2_MADR equ $10a0 D2_BCR equ $10a4 D2_CHCR equ $10a8 ; InitGPU - основная процедура инициализации ; Параметр a0 - режим экрана InitGPU lui fp,$lf80 or tO,zero,ra sw zero, GPl(fp) ; Сброс процессора (команда 0) . li tl, $05000000 jal WaitGPU nop sw tl, GPl(fp) li tl, $06ca0220 ; Размер по горизонтали (команда 6) . SW tl, GPl(fp) ; $|06|са0|220 = 336 точек. li tl, $0704b81e ; Размер по вертикали (команда 7) . SW tl, GPl(fp) ; Начало = $1е, конец = $12е = 272 точки. sw aO, GPl(fp) ; Установка режима. nop li tl, $el0006cf ; Задание параметров рисования. SW tl, GPO(fp) ; DFE = $1 (разрешено рисование в области экрана). ; DTD = $1 (включен режим смешивания цветов). ; TP = $1 (используется 8-разрядное кодирование цвета в текстурах). ; ABR = $0 (расчет полупрозрачности по формуле 0,5F + 0,5В). ; TY = $0 (координата у памяти текстур = 0 х 256 = 0). ; TX = $f (координата х памяти текстур = 15 х 64 = 960) . li tl, $е3000000 ; Установка верхнего левого угла SW tl, GPO(fp) ; области рисования. li tl, $e407429f ; Установка правого нижнего угла SW tl, GPO(fp) ; области рисования. ; X = bit $09 - $00 = $014f $29f. ; Y = bit $13 - $0a = $0110 $110. li tl, $e5000000 SW tl, GPO(fp) 226
Программа для работы с графическим процессором приставки SONY PLAYSTATION li SW tl, $03000000 ; Разрешение вывода изображения, tl, GPl(fp) or jr nop ra,zero,tO ra t ; SendList - ; Параметр: передача списка примитивов аО - адрес списка / SendList lui fp,$lf80 or li jal nop Iw SW ori SW t0, zero, ra t2, $04000002 WaitGPU t3, DPCR(fp) zero, DICR(fp) t3, t3, $0800 t3, DPCR(fp) SW t2, GPl(fp) SW SW li aO, D2_MADR(fp) zero, D2_BCR(fp) tl, $01000401 SW tl, D2_CHCR(fp) or jr nop ra, zero, tO ra ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК ; MemtoVRAM - передача графических данных в видеопамять ; in: aO - адрес данных ; al - координаты х, у (y « 16 1 X) ; a2 - высота и ширина w , h (h « 16 I w) ; a3 - количество копируемых слов MemtoVRAM or t4,zero,ra ; Сохранение регистра RA. jal WaitDone ; Ожидание освобождения видеопроцессора. nop or t5,zero,aO ; Сохранение стартового адреса данных. lui at,mvll SW al,mvll(at) ; Установка координат области отображения SW a2,mvl2(at) ; Установка размеров области отображения. lui aO,mvl ; Передача установок. jal SendList ori aO,aO,mvl sll tl,a3,$10 ; Установка количества блоков. ori tl,tl,$0001 ; Установка размера блока равным слову. li t2,$01000201 ; Контроллер ПДП передает данные ; из памяти в видеопамять. jal WaitDMA ; Ожидание освобождения контроллера. nop SW t5,D2_MADR(fp) ; Установка базового адреса. SW tl,D2_BCR(fp) SW t2,D2_CHCR(fp) ; Запуск ПДП or ra, zero, t4 jr ra 227
Программа для работы с графическим процессором приставки SONY PLAYSTATION ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК пор mvl dw $04ffffff dw $01000000 dw $a0000000 mvll dw $00000000 mv!2 dw $00000000 ; WaitGPU - ожидание готовности GPU к приему команд WaitGPU lui fp,$lf80 lw vl, GPl(fp) ; Загрузка регистра состояния GPU lui vO, $1000 ; Проверка разряда $lc. and vl, vl, vO beqz vl, WaitGPU ; Пока разряд равен 0, GPU занят. nop jr га nop ; Waitldle - ожидание, пока GPU простаивает Waitldle lui fp,$lf80 lui vl, $0400 widl lw vO, GPl(fp) nop and vO, vO, vl beqz vO, widl nop jr ra nop t ; WaitDone - ожидание освобождения контроллера ПДП и GPU I WaitDone lui fp, $lf80 wdl lw vO, D2_CHCR(fp) lui vl, $0100 and vO, vO, vl bne vO, zero, wdl nop wd2 lw vO, GPl(fp) lui vl, $0400 and vO, vO, vl beq vO, zero, WaitDone nop jr ra nop / ; WaitDMA - ожидание освобождения контроллера ПДП WaitDMA lui fp, $lf80 wdmalp lw vO, D2_CHCR(fp) lui vl, $0100 and vO, vO, vl 228
Программа для работы с графическим процессором приставки SONY PLAYSTATION bne vO, zero, wdmalp nop jr ra nop txtDMA equ $0000 txtRGB equ $0004 txtX equ $0008 txtY equ $000a txtU equ $000c tXtV equ $000d txtClut equ $000e ; PrintGPU_dma - печать строки с использованием контроллера ПДП ; Параметры: аО - указатель на печатаемую строку, ; al - координаты печати, ; а2 - цвет ; Результат: vO - указатель на список примитивов PrintGPU_dma SW al,cXY Сохранение координат. lui v0,$7400 Установка параметров. or t2 , a2 , vO li t3, 511«6 la t0,list2 ; tO = указатель на элемент связанного списка. lui v0,$00ff tl = указатель на следующий элемент для контроллера ПДП. ori v0,v0,$ffff and tl,tO,vO lui v0,$0300 or tl,tl,v0 addiu tl,tl,$0010 Ih t5,cY Ih t4, cX addiu t6,t5,$08 Ibu v0,$0000(a0) Получение символа. nop slti vl,v0,$0020 beq vl,zero,pgpuloop nop jr ra addiu vO,zero,-1 pgpuloop ; Поиск координат текстуры. andi vl,v0,$001f sll vl,vl,3 srl vO,vO,5 sll v0,v0,4 SW tl,txtDMA(tO) ; Установка указателя для контроллера ПДП SW t2,txtRGB(tO) sh t4,txtX(t0) ; Установка координат. sh t5,txtY(tO) sb vl,txtU(t0) ; Установка ширины и высоты. sb vO,txtV(tO) sh t3,txtClut(tO) ; Задание цветовой таблицы. addiu to,to,$10 ; Задание указателя на следующий элемент. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 229
Программа для работы с графическим процессором приставки SONY PLAYSTATION ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК addin tl,tl,$10 addiu vO,vO,$08 sw tl,txtDMA(tO) sw t2,txtRGB(tO) sh t4,txtX(tO) sh t6,txtY(tO) sb vl,txtU(10) sb vO,txtV(tO) addiu t4,t4,$08 addiu a0,a0,$01 ; Следующий символ. lbu v0,$0000(a0) sh t3,txtClut(tO) ; Цветовая таблица. pgpuchk slti vl,v0,$0020 ; Управляющий символ? bgtz vl,pgpucommand ; Переход к обработке команды nop addiu tO,tO,$10 ; Обновление указателей. j pgpuloop addiu tl,tl,$10 pgpudone li tl,$03ffffff ; Завершение списка. sw tl,txtDMA(tO) la v0,list ; Возврат адреса списка. jr ra nop pgpucommand beq vO ,zero,pgpudone ; Конец строки? ori beq vl,zero,$000a vO,vl,pgpuLF ; Новая строка = $0а. ori beq nop vl,zero,$000d vO,vl,pgpuCR ; Возврат каретки = $0d. pgpunxt addiu lbu a0,a0,$0001 vO,$0000(aO) ; Неизвестная команда? j nop pgpuchk ; Пропустить. pgpuLF addiu t6,t6,$0010 ; Обработка новой строки. j addiu pgpunxt t5,t5,$0010 ; Переход к следующему символу pgpuCR lw t4,cX ; Обработка возврата каретки. j nop pgpunxt ; Переход к следующему символу cXY cX dh $0 cY dh $0 ; PrintGPU - печать текста без использования контроллера ПДП ; Параметры: аО - указатель на строку, ; al - координаты строки, ; а2 - цвет PrintGPU or tO,zero,ra ; Сохранение адреса возврата li tl,$el00060f li t2,$04000000 ; Выключение контроллера ПДП jal WaitDone 230
Программа для работы с графическим процессором приставки SONY PLAYSTATION пор SW t2,GP1(fp) пор SW tl,GP0(fp) Указание страницы текстур. SW al,c2XY Сохранение координат. lui vO,$7400 or tl,a2,vO lui t2, 511«6 lh t4,c2Y lh t3,c2X addiu t5,t4,$08 lbu v0,$0000(a0) Получение символа. nop slti vl,v0,$0020 bne vl, zero, p2gpucoiranand nop p2gpuloop ; Поиск координат текстуры. andi vl,v0,$001f sll vl,vl,3 srl vO,vO,5 sll vO,vO,4 sll t9,v0,$8 or t9,t9,vl or t9,t9,t2 addiu v0,v0,$08 sll t6,vO,$8 or t6,t6,vl or t6,t6,t2 sll t8,t4,$10 or t8,t8,t3 jal WaitGPU nop sw tl,GP0(fp) sw t8,GP0(fp) sw t9,GP0(fp) sll t8,t5,$10 or t8,t8,t3 jal WaitGPU nop sw tl,GP0(fp) Пересылка'данных. sw t8,GP0(fp) sw t6,GP0(fp) addiu t3,t3,$08 p2gpunxt addiu a0,a0,$01 Переход к следующему символу. lbu v0,$0000(a0) nop slti vl,v0,$0020 Управляющий символ? bgtz vl ,p2gpucoiranand nop j p2gpuloop ; Переход к рисованию следующего символа nop p2gpudone or ra,zero,tO ; Возврат, если все напечатано. jr ra ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 231
Программа для работы с графическим процессором приставки SONY PLAYSTATION ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК nop p2gpucommand beq vO,zero,p2gpudone ; Конец строки? ori vl,zero,$000a beq vO,vl,p2gpuLF ; Обработка новой строки. ori vl,zero,$000d beq vO,vl,p2gpuCR ; Обработка возврата каретки. Nop ; Пропуск неизвестного символа j p2gpunxt p2gpuLF addiu t4,t4,$0010 ; Обработка перевода строки. j p2gpunxt ; Y = Y + $10. addiu t5,t5,$0010 p2gpuCR lw t3,c2X ; Обработка возврата каретки. j p2gpunxt ; X = start X. nop c2XY c2X dh $0 c2Y dh $0 ; Загрузка шрифта в видеопамять. Loadfont or sO,zero,ra la aO,img li al,$000003c0 li a2,$00400040 li a3,$00000800 jal MemtoVRAM nop la aO,clut li al,$01ff0000 li a2,$00010010 li a3,$00000008 jal MemtoVRAM nop or ra,zero,sO jr ra nop ; Область памяти для списка. back dw back2,back2>>8,back2>>16,$03 dw $02000000 dw $000003c0 dw $010000fe back2 dw $08ffffff dw $38300040 dw $00000000 dw $00250010 dw $00000150 dw $00250010 dw $01100000 dw $00800000 dw $01100150 232
Программа для работы с графическим процессором приставки SONY PLAYSTATION list db list2,list2>>8,list2>>16,$01 dw. $el00060f list2 dw $0 Рабочие данные. Таблица цветов и изображение шрифта clut dh $0000,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff dh $7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff img incbin font.bin ; Шрифт. ПРИМЕРЫ ПРОГРАММ ДЛЯ ИГРОВЫХ ПРИСТАВОК 321 233
ЛИТЕРАТУРА 1. Майоров В. Г., Гаврилов А. И. Практический курс программирования микропроцессорных систем. - М.: Машиностроение, 1989. 2. Морер У. Язык ассемблера для персонального компьютера ЭПЛ. - М.: Мир, 1987. 3. Мымрин М. П. Конструкция, применение, программирование и ремонт ПЭВМ «Агат». - М.: Маши- ностроение, 1990. 4. Роджерс Д. Алгоритмические основы машинной графики. - М.: Мир, 1987. 5. Фоли Дж., Вэн Дэм А. Основы интерактивной машинной графики. - М.: Мир, 1985. 6. Элфинг Г. Программирование на языке ассемблера для микроЭВМ. - М.: Радио и связь, 1987. 7. Werner Hilf, Anton NauschThe M68000 Family: Architecture, Addressing Modes and Instruction Set (Series in Solid-State Electronics). 8. Erin Farquhar, Philip Bunce The Mips Programmers Handbook - Morgan Kaufmann Publishers, 1993. 9. Журналы «Радио», «Радиолюбитель», «Радиолюбитель. Мой компьютер». САЙТЫ INTERNET Игровая приставка DENDY www.nintendo.com - официальный сайт фирмы-производителя. nesworld.parodius.com - общая информация о приставке, описания игр, эмуляторы. nesdev.parodius.com - техническая информация о приставке, описания микросхем, схемы, учебные матери- алы по программированию, примеры программ. www.6502.org - описание микропроцессора 6502 и много связанных с ним статей. Игровая приставка GAME BOY www.nintendo.com - официальный сайт фирмы-производителя. wwwzophar.net/gb.html - общая информация о приставке, описания игр, эмуляторы. wwwdevrs.com/gb/ - техническая информация о приставке, описания микросхем, схемы, учебные матери- алы по программированию, примеры программ. Игровая приставка SEGA MEGA DRIVE wwwsega.com - официальный сайт фирмы-производителя. wwwemureviewztnet.com/sega/ - общая информация о приставке, описания игр, эмуляторы, техническая информация о приставке, описания микросхем, учебные материалы по программированию. Игровая приставка SONY PLAYSTATION wwwsony.com - официальный сайт фирмы-производителя. wwwclassicgaming.com - общая информация о приставке, описания игр, эмуляторы. www.zophar.net/tech/psx.html - техническая информация о приставке, описания микросхем. www.mips.com - RISC-процессоры MIPS. Сайт фирмы-разработчика. www.bleem.org - эмулятор PLAYSTATION, позволяющий выполнять программы для приставки на IBM PC.
Серия «Ремонт и обслуживание» Выпуск 21 Королев Андрей Григорьевич Игровые приставки Главный редактор Захаров И. М. editor-in-chief@dmkpress.ru Научный редактор Кольцов И. Л. Выпускающий редактор Левицкая Т. В. Технический редактор Панчук Л. А. Верстка Дудатий А. М. Графика Шаклунов А. К. Дизайн обложки Панкусова Е. Н. ИД № 01903 от 30.05.2000 Подписано в печать 4.03.2002. Формат 60x88'/. Гарнитура «Петербург». Печать офсетная. Усл. печ. л. 29,4- Тираж 3000 экз. Зак. № 321 Издательство «ДМК Пресс», 105023, Москва, пл. Журавлева, 2/8. Электронные адреса: www.dmkpress.ru, info@dmk.ru Отпечатано в типографии №9, Волочаевская, 40.
В предлагаемой книге рассмотрены архитектура и ре- монт самых известных игровых консолей (видеоприставок) от гигантов игровой индустрии - NINTENDO, SEGA и SONY. Приведены подробные описания структуры и режимов работы основных микросхем, структурные и принципиаль- ные схемы, представлены рекомендации по обнаружению и устранению характерных неисправностей приставок. Для каждой модели описаны система команд процессора и программная архитектура. Издание предназначено для подготовленных радиолюби- телей и специалистов, занимающихся ремонтом аппарату- ры; может использоваться как справочник при разработке периферийных устройств и написании программного обес- печения для игровых консолей. На Web-сайте www.dmkpress.ru вы найдете дополнительный материал - примеры и исход- ный текст змулятора игровой приставки DENDY. Internet-магазин www.dmkpress.ru Книга — почтой Россия, 107014, Москва, а/я 468 тел./факс: 962-1703, 369-7528 e-mail: orderst&dmkpress.ru