Игровая система GameBoy Игровая система 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-контактный разъем, через который подсоединяется картридж с программным обеспечением. В картридже располагается ПЗУ с программой, микросхема контроллера страниц памяти и иногда дополнительное ОЗУ. Клавиатура системы представляет собой матрицу нормально разомкнутых контактов.
Ha отдельной плате помещается матрица ЖКИ, служащая экраном системы, и схемы для управления ею. На эту плату поступают сигналы, сформированные видеопроцессором, с помощью которых схемы управления создают изображение на экране. Размер экрана системы 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. Как видно из рис. 2.2, процессор содержит вычислительный блок с набором регистров общего назначения (АЛУ), внутреннее ОЗУ и внутреннее ПЗУ объемом по 256 байт, дешифратор адреса и схему выборки памяти. Дешифратор вырабатывает сигналы, которые разрешают различным модулям занимать шины процессора для обмена информацией. Внутренней памятью процессора управляет схема выбора блока памяти.
Рис. 2.2. Структурная схема центрального процессора игровой системы GAME BOY В следующих разделах подробно рассматриваются программная архитектура процессора, внутренние регистры, способы адресации, система команд и система прерываний; указываются отличия процессора GAME BOY от оригинального Z80. Более полную информацию по архитектуре процессора и программированию на языке ассемблера Z80 можно найти в печатных изданиях и на сайтах Internet, перечисленных в конце книги. Регистры процессора Центральный процессор игровой системы GAME BOY содержит восемь 8-разрядных регистров и два 16-разрядных. Все регистры имеют уникальные имена и различаются по назначению. Ниже подробно описано назначение отдельных регистров. Аккумулятор А. Этот регистр наиболее часто используется в процессоре. С его помощью производится обмен данными с памятью и портами ввода/вывода, а также выполнение любой арифметической или логической операции. Регистры общего назначения В, С, D, Е, Н, L. Шесть 8-разрядных регистров процессора могут применяться для хранения промежуточных данных. Чтобы обработать 16-разрядные значения, эти регистры допустимо объединить в регистровые пары: ВС, DE, HL. Регистр состояния процессора F. Каждый бит данного регистра является флагом и изменяет свое значение в зависимости от результата выполненной команды. Структура регистра состояния центрального процессора GAME BOY приведена на рис. 2.3.
Рис. 2.3. Структура регистра состояния центрального процессора игровой системы GAME BOY В регистре состояния используются только четыре разряда из восьми. Младшие четыре разряда всегда равны 0. Назначение старших разрядов приводится ниже. Флаг С является флагом переноса, который применяется при выполнении операций сложения и вычитания. Разряд С регистра состояния процессора устанавливается в 1, когда результат сложения больше 255 (0FFh) или если результат операции вычитания меньше 0. Флаг N - флаг вычитания; устанавливается в 1, если последней выполненной процессором арифметической операцией была команда вычитания (SUB или SBC). Используется при работе с числами в двоично-десятичном коде. Флаг Н - флаг вспомогательного переноса; устанавливается в 1, если при выполнении арифметической операции произошел перенос из D3 в D4. Применяется внутренними схемами процессора при работе с числами в двоично-десятичном коде. Флаг Z - флаг нулевого результата; устанавливается в 1, если результат выполнения операции равен 0. Указатель стека SP. Этот 16-разрядный регистр указывает на первую свободную ячейку стека. В процессоре игровой системы GAME BOY стек может располагаться в любом месте памяти системы, хотя обычно его размещают в верхних адресах ОЗУ. Стек растет вниз, то есть от адреса, содержащегося в регистре SP, к адресу 0000h. Счетчик команд PC. Это еще один 16-разрядный регистр процессора. Его назначение - указывать адрес команды, которая должна быть выполнена. Команды перехода позволяют изменить содержимое данного регистра и задать необходимую последовательность выполнения команд, находящихся в памяти. Способы адресации Чтобы процессор работал правильно, в коде команды требуется указать местоположение необходимых для работы данных. Это делается с помощью различных методов адресации. Методы адресации для центрального процессора игровой системы GAME BOY подробно рассмотрены ниже. Регистровая адресация. Операнды находятся в регистрах центрального процессора. Названия используемых регистров указываются непосредственно в команде. Например: INC А ; А = А + 1. ADD HL, DE ; HL = HL + DE. Неявная адресация. Расположение операндов для команд строго фиксировано, дополнительных указаний не требуется. Например: RLA ; Сдвиг содержимого ; аккумулятора влево. Непосредственная адресация. 8-разрядный операнд хранится в памяти сразу за кодом команды, то есть по адресу РС+1. Например: LD А, 16 ; А = 16. ; Код команды ЗЕ 10. Косвенная адресация. В команде указывается адрес операнда в памяти. Например: LD А, (#ЗЕ00) ; Загрузка в А значения ; из ячейки памяти ; с адресом 3E00h. Регистровая косвенная адресация. Адрес операнда содержится в одной из регистровых пар процессора. Например: 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, СPL; * команды работы с отдельными разрядами: 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, EI, CCF, SCF; * команды работы со стеком: PUSH, POP. Полная информация о системе команд центрального процессора игровой системы GAME BOY приведена в приложении 1. Система прерываний Центральный процессор игровой системы GAME BOY обрабатывает несколько сигналов прерываний, которые поступают от различных устройств При этом выполнение программы приостанавливается, и вызывается программа обслуживания прерывания, расположенная по определенному адресу. Адреса, по которым передается управление, задаются аппаратно; их модификация запрещена. Далее рассмотрены возможные типы прерываний и процедуры их обработки. Сброс микропроцессора. Это прерывание происходит при включении питания системы, а также при поступлении сигнала низкого логического уровня по линии RESET. Центральный процессор в таком случае обнуляет регистры, подсоединяет встроенное ПЗУ системы и начинает выполнение программы с адреса 000h. Прерывание по сигналу кадровой синхронизации. Каждый раз, когда видеопроцессор завершает формирование очередного кадра, выдается запрос на обслуживание данного прерывания, а управление передается на адрес 0040. Запрос генерируется видеопроцессором с частотой 59,7 Гц (в приставке GAME BOY) или 61,1 Гц (в приставке SUPER GAME BOY). Во время кадрового синхроимпульса видеопроцессор не обращается к видеопамяти, освобождая доступ к ней для центрального процессора, поэтому процедура обработки данного прерывания часто изменяет информацию в видеопамяти и, следовательно, изображение на экране. Прерывание от видеопроцессора. Видеопроцессор вырабатывает запрос на обслуживание данного прерывания, если происходит одно из событий, указанных программистом. Как правило, генерацию запроса прерывания используют при формировании строки экрана с заданным номером. Программа обслуживания запроса должна начинаться с адреса 0048h. Более подробно данное прерывание будет рассмотрено при описании видеопроцессора. Прерывание при переполнении таймера. Прерывание происходит каждый раз, когда внутренний счетчик таймера переполняется (содержимое регистра TIMА изменяется с FFh на 00h). При этом управление передается на адрес 0050h. Более детально этот запрос прерывания рассматривается при описании таймера. Прерывание контроллера последовательного интерфейса. Данный запрос на обслуживание прерывания генерируется контроллером последовательного интерфейса каждый раз, когда завершается передача байта. Адрес начала процедуры обработки - 0058h. Прерывание порта клавиатуры. Запрос на прерывание выдается внутренними схемами каждый раз, когда на какой-либо из входных линий порта клавиатуры появляется низкий логический уровень. Точка входа в программу, обслуживающую этот запрос, должна находиться по адресу 0060h. Программные прерывания. Такие прерывания происходят при выполнении процессором команды рестарта из диапазона RST 00h - RST 38h: вызывается процедура, расположенная по одному из восьми фиксированных адресов. В программах названные команды удобны для вызова многократно используемых процедур, поскольку занимают меньше места и выполняются быстрее, чем стандартная команда вызова подпрограммы CALL. Чтобы корректно работать с прерываниями, следует изучить программную архитектуру контроллера прерываний, который получает запросы от остальных блоков и формирует адрес перехода, передаваемый ядру процессора. С точки зрения программирования обслуживание запросов на прерывание зависит от состояния внутреннего флага процессора IME и данных, записанных в регистр управления контроллера прерываний IE (FFFFh). В регистре состояния контроллера прерываний IF (FF0Fh) отображаются сигналы на линиях запроса прерывания. Внутренний флаг процессора IME сбрасывается командой DI, а устанавливается командой EI. В регистр управления контроллером прерываний IE записывается число, разрешающее контроллеру обслуживать соответствующий запрос. В результате процедура обработки запроса на прерывание в игровой приставке GAME BOY выглядит следующим образом. 1. При поступлении запроса на прерывание от какого-либо устройства в регистре IF соответствующий разряд становится равным 1. 2, Если установлен флаг IME центрального процессора, а соответствующий разряд регистра управления контроллером прерываний IE равен 0 то обработка запроса на прерывание продолжается, в противном случае никаких действий не производится. 3. Сбрасывается флаг IME, и запрещается прием новых запросов на прерывание. 4.Состояние счетчика команд (PC) сохраняется в стеке. 5. Управление передается на стартовый адрес процедуры обслуживания соответствующего прерывания. В начале процедуры обработки прерывания необходимо сохранить в стеке все данные регистров процессора, которые могут быть изменены. В конце процедуры информация, хранившаяся в регистрах, восстанавливается. Возврат из процедуры обработки прерывания осуществляется командой RETI или RET, Команда RETI устанавливает флаг IME, разрешая продолжение обработки запросов на прерывание, и передает управление по адресу, сохраненному в стеке. Если вы пользуетесь командой RET, установите флаг IME с помощью команды EI. Как отмечалось выше, во время выполнения процедуры обслуживания прерывания запросы на прерывание от других устройств игнорируются. Однако можно реализовать и вложенную обработку запросов, управляя флагом IME и регистрами контроллера прерываний внутри процедуры обработки. Рассмотрим более подробно структуру регистров контроллера прерываний игровой системы GAME BOY. Флаг IME Внутренний флаг центрального процессора, который устанавливается командой EI, а сбрасывается командой DI. Процессор будет обслуживать поступившие запросы на прерывание, только если этот флаг равен 1. Регистр состояния контроллера прерываний IF Адрес: FF0Fh. Тип: чтение/запись. Назначение разрядов. Отдельные разряды регистра устанавливаются в 1 при поступлении запроса на прерывание от соответствующего устройства — независимо от состояния флага IME и регистра IE. D7 - D5 - не используются. D4 - поступило прерывание от порта клавиатуры. D3 — поступило прерывание от контроллера последовательного интерфейса. D2 - поступило прерывание от таймера. D1 - поступило прерывание от видеопроцессора. D0 - поступило прерывание, по сигналу кадровой синхронизации. Регистр управления контроллером прерываний IE Адрес: FFFFh. Тип: чтение/запись. Назначение разрядов. Отдельные разряды этого регистра разрешают контроллеру прерываний обрабатывать запросы от устройств. Если соответствующий разряд установлен в 1, то при поступлении запроса контроллер формирует сигнал прерывания для центрального процессора. Если разряд равен 0, запрос на прерывание игнорируется. D7 - D5 - не используются. D4 — разрешено прерывание от порта клавиатуры. D3 - разрешено прерывание от контроллера последовательного интерфейса. D2 - разрешено прерывание от таймера. D1 - разрешено прерывание от видеопроцессора. D0 - разрешено прерывание по сигналу кадровой синхронизации. Специальные режимы работы процессора Существует два специальных режима работы центрального процессора игровой системы GAME BOY, связанных с особенностями выполнения команд HALT и STOP. Как правило, они используются с целью уменьшения энергопотребления системы и соответствующего увеличения срока службы батарей. Режим остановки процессора. Если выполняется команда STOP, центральный процессор и видеопроцессор останавливаются и экран выключается. Выход из этого режима осуществляется нажатием какой-либо клавиши. Выполнение программы продолжается с команды, следующей за STOP. Данный режим удобен, если программа ожидает нажатия клавиши в течение долгого времени (более 5 мин). Благодаря переходу в режим остановки процессора заряд батарей сохраняется дольше. Обратите внимание на две важные особенности: 1. Перед остановкой процессора необходимо выключить звуковое сопровождение, записав 0 в разряд D7 регистра NR52 (FF26h). 2. Реакция игровой системы на нажатие клавиш в режиме остановки зависит от содержимого регистра Р1 (FF00h). Возможны следующие варианты: 00h-работа продолжается при нажатии любой клавиши; 10h - работа продолжается только после нажатия клавиш А, В, SELECT или START; 20h - работа продолжается только после нажатия клавиш крестовины; 30h - приставка не реагирует на нажатие клавиш. Режим пониженного энергопотребления. Если процессор исполняет команду HALT, его дальнейшие действия определяются состоянием флага IME. Когда флаг установлен (прерывания разрешены), работа процессора останавливается, пока не будет получен запрос на прерывание; в противном случае команда HALT игнорируется. В аппаратном обеспечении существует ошибка, которую следует учитывать при использовании команды HALT. Когда процессор читает байт, следующий за командой HALT, приращения содержимого счетчика команд PC не происходит, поэтому такой байт считывается процессором дважды. Проиллюстрируем сказанное на примерах. Команда, занимающая в памяти один байт и расположенная после команды HALT, исполняется два раза. После выполнения приведенного ниже фрагмента содержимое аккумулятора будет увеличено на 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 И наконец, исполнение двух расположенных друг за другом команд HALT остановит процессор. Чтобы избежать подобных проблем, за командой HALT необходимо располагать команду NOP. В заключение рассмотрим пример использования команды HALT для снижения энергопотребления системы. Построение основного цикла программы так, как показано ниже, увеличит срок службы батарей на 5-50%. ; Основной цикл игры. Main: HALT ; Останов процессора NOP ; для экономии заряда! ; батарей. LD A,(VblkFlag) ; Произошло ; прерывание OR A ; по кадровому ; синхроимпульсу? JR Z,Main ; Нет, ожидание ; продолжается. XOR A ; Да, флаг ; сбрасывается. LD (VblkFlag),A CALL Controls ; Проверка состояния ; клавиш. CALL Game ; Выполнение ; необходимых ; для игры действий. JR Main ; Процедура обработки прерывания ; по сигналу кадровой синхронизации. Vblank: PUSH AF ; Сохранение ; регистров. PUSH ВС PUSH DE PUSH HL CALL SpriteDMA ; Изменение ; информации ; о спрайтах. LD A,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 ячейкам памяти с адресами 0000h - FFFFh. В едином адресном пространстве располагаются внутреннее ПЗУ и ОЗУ системы, регистры ввода/вывода, память видеопроцессора и память подключенного картриджа. Распределение адресного пространства игровой системы GAME BOY показано на рис. 2.4. Рассмотрим более подробно назначение основных областей памяти. Адреса 0000h - 00FFh: здесь располагается область встроенного ПЗУ системы с программой начального запуска, предназначенной для считывания информации из картриджа, сравнения ее с записанным образцом и передачи управления в ПЗУ картриджа по адресу 0100h. После передачи управления внутреннее ПЗУ отключается, и при обращении по этим адресам становится доступным ПЗУ картриджа. Стартовая программа, содержащаяся в ПЗУ системы, выполняет следующие действия: 1. Считывает данные, записанные в картридже по адресам 0104h- 0l33h, и передает их в видеопамять. В результате такой операции в верхней части экрана появляется логотип NINTENDO. 2. Выведенное изображение плавно перемещается в центр экрана и сопровождается воспроизведением двух музыкальных нот. 3. Данные, записанные по адресам 0104h - 0l33h, сравниваются с образцом, хранящимся во встроенном ПЗУ. При обнаружении различий игровая приставка прекращает работу.
Рис. 2.4. Распределение адресного пространства игровой системы GAME BOY 4.Байты, расположенные по адресам 0134h- 014Dh, последовательно суммируются, и к полученному результату прибавляется 25. 5. Приставка прекращает работу, если результат предыдущей операции отличается от 0. б.. Управление передается по адресу 0100h, и внутреннее ПЗУ отключается. Адреса 0000h - 3FFFh: непереключаемый банк ПЗУ картриджа. Присутствует в любом картридже независимо от модели. По этим адресам всегда будут расположены первые 16 Кб ПЗУ картриджа независимо от его объема. Адреса 4000h - 7FFFh: переключаемый банк постоянной памяти картриджа. Микросхема контроллера страниц памяти, установленная в картридже, подсоединяет по этим адресам произвольный 16-килобайтный блок ПЗУ, номер которого задается программным путем. Адреса 8000h - 9FFFh: память видеопроцессора. Более подробно структура данной области памяти и особенности ее использования рассматриваются в разделе, посвященном архитектуре видеопроцессора. Адреса A000h - BFFFh: переключаемый банк ОЗУ картриджа. В некоторых картриджах оперативная память может отсутствовать. Адреса С000h - DFFFh: встроенное ОЗУ системы, применяемое для хранения данных во время работы программы. Адреса E000h - FDFFh: чтение или запись по этим адресам приведет к выбору встроенного ОЗУ, расположенного в диапазоне C000h - DDFFh. Таким образом, обращение к памяти по адресу Е000h аналогично обращению к памяти по адресу C000h, E001h - C001lh и т.д. Адреса FE00h - FE9Fh: память спрайтов. Подробно рассматривается при описании видеопроцессора. Адреса FEA0 - FEFFh: не используются. Адреса FF00h - FF4Ch: порты ввода/вывода. Адреса FF4Dh - FF7Fh: не используются. Адреса FF80h - FFFEh: внутреннее ОЗУ центрального процессора. Обычно применяется для хранения стека. Адрес FFFFh: регистр управления контроллером прерываний. Дадее >>