2.2.4. Видеопроцессор Видеопроцессор игровой системы GAME BOY вырабатывает управляющие сигналы для схем, которые формируют изображение на экране ЖКИ. Он располагается на одном кристалле с центральным процессором и соединен с микросхемой видеопамяти объемом 8 Кб отдельными шинами данных, адреса и управления. Видеопамять входит в адресное пространство центрального процессора и доступна для записи и чтения обычным образом. Видеопроцессор игровой приставки ориентирован на блочную графику с использованием спрайтов. Изображение строится из заранее заданных , блоков размером 8x8 точек. Разрешение выводимой на экран картинки составляет 160x144 точки (20x18 символов). Однако общий размер хранящегося в видеопамяти рисунка составляет 256x2561 точек. Какой именно фрагмент видеопамяти будет отображен на экране, определяется программным путем. Распределение видеопамяти и процесс формирования изображения на экране приставки GAME] BOY более подробно описываются ниже. Карта видеопамяти Видеопамять системы GAME BOY имеет размер 8 Кб и располагается в адресном пространстве центрального процессора в диапазоне 8000h - 9FFFh. Эту область памяти занимают два частично перекрывающихся знакогенератора и две экранные страницы. Здесь также хранятся битовые образы выводимых символов (под символом подразумевается участок изображения размером 8x8 точек). Первый знакогенератор размещается по адресам 8000h - 8FFFh, второй - по адресам 8800h - 97FFh. В них содержатся символы для изображения фона и образы спрайтов. Назначение знакогенератора определяется программным путем при установке соответствующего флага в регистре управления видеопроцессором. Распределение адресного пространства видеопамяти игровой системы GAME BOY показано на рис. 2.5. Как видно из приведенной карты памяти, две страницы частично перекрываются, следовательно, часть символов будет одинаковой для обоих знакогенераторов. В диапазоне 8000h - 87FFh хранятся 128 битовых образов первого знакогенератора для его символов с кодами 00h - 7Fh, в диапазоне 9000h - 97FFh расположены образы символов с кодами 00h - 7Fh второго знакогенератора. Область памяти с адреса 8800h по адрес 8FFFh используется знакогенераторами совместно, поэтому образы символов с кодами 80h - FFh, содержащиеся здесь, будут одинаковыми для обоих знакогенераторов. Любой символ занимает в памяти знакогенератора 16 байт. Видеопроцессор совмещает два битовых образа каждой строки и получает изображение с четырьмя градациями яркости. Процесс получения изображения поясняется на рис. 2.6. Первым этапом, необходимым для вывода изображения на экран игровой системы, является создание одного или нескольких знакогенераторов, на основе которых будет формироваться фоновое изображение и спрайты. Знакогенераторы записываются в ПЗУ картриджа и во время работы программы по мере необходимости копируются в видеопамять. Экранные страницы игровой системы GAME BOY начинаются с адресов 9800h и 9C00h и располагаются в видеопамяти по адресам 9800h - 9FFFh. Структура экранной страницы игровой системы GAME BOY приведена на рис. 2.7. Как уже отмечалось, размер экранной страницы составляет 32x32 символа. Однако на экране отображается только фрагмент картинки - 20x18 символов. Местоположение выводимого фрагмента задается путем записи координат его верхнего левого угла в регистры видеопроцессора SCY (FF42h) и SCX (FF43h). Одна экранная страница служит для хранения фонового рисунка, другая содержит изображение, называемое окном. Окно обычно используется для показа информационной панели состояния игры внизу экрана. Оно выводится поверх фона, а его местоположение задается путем записи координат верхнего левого угла в регистры видеопроцессора WY (FF4Ah) И WX (FF4Bh).
Рис. 2.5. Распределение адресного пространства видеопроцессора игровой системы GAME BOY
Рис. 2.7. Структура экранной страницы игровой системы GAME BOY
Рис. 2.6. Формирование цветного изображения в видеопроцессоре игровой системы GAME BOY Возможности видеопроцессора В этом разделе рассматриваются встроенные графические функции видеопроцессора GAME BOY, способы формирования изображения и особенности создания программного обеспечения. Видеопроцессор игровой системы GAME BOY предназначен для работы с блочной графикой, основанной на спрайтах. Термин «блочная графика» означает, что изображение на экране формируется из заранее нарисованных блоков. Видеопроцессор способен использовать 40 независимых друг от друга спрайтов размером 8x8 или 8x16 точек. Размер всех отображаемых на экране спрайтов одинаков и задается программным путем. С помощью манипуляций с регистрами видеопроцессора допустимо плавно перемещать картинку и реализовывать нестандартные графические режимы, которые значительно расширяют возможности игровой системы. Спрайты. Изображения спрайтов хранятся в одном из знакогенераторов, определяемом программным путем. Изображения спрайтов размером 8x16 символов занимают два последовательно расположенных символьных образа, при этом номер первого символа всегда четный. В связи с использованием спрайтов видеопроцессор системы налагает одно важное ограничение: на одной строке экрана может находиться не более десяти спрайтов одновременно. Память спрайтов. Память спрайтов игровой системы GAME BOY представляет собой отдельную область в общем адресном пространстве центрального процессора. Этот блок памяти находится в диапазоне адресов FE00h - FE9Fh и содержит всю необходимую информацию о расположении каждого спрайта на экране и режиме его отображения. На каждый из 40 спрайтов в памяти отведено по четыре байта. В этих байтах, называемых описанием спрайта, имеется следующая информация: 1. Координата верхнего левого угла спрайта по вертикали. Если это значение равно 0 или больше 160 (144 + 16), то спрайт на экране не отображается. 2. Координата верхнего левого угла спрайта по горизонтали. Если это значение равно 0 или больше 168 (160 + 8), то спрайт на экране не отображается. 3. Номер символа знакогенератора, хранящего изображение спрайта. При использовании спрайтов размером 8x16 точек номера используемых символов могут быть только четными. Если же в таблице спрайтов указан нечетный символ (например, 3), он будет уменьшен на 1 (то есть станет символом 2). 4.Атрибуты спрайта (применяются старшие четыре разряда): D7 - приоритет спрайта: 0 - спрайт выводится поверх изображения фона и окна; 1 - спрайт скрыт за изображением фона и окна. Он виден только в том случае, если скрывающие его части фона и окна имеют цвет с кодом 0, который интерпретируется видеопроцессором как прозрачный. D6 - отражение спрайта относительно вертикальной оси: 0 - выводится обычное изображение; 1 - выводится зеркальное отражение. D5 - отражение спрайта относительно горизонтальной оси: 0 - выводится обычное изображение; 1 - выводится зеркальное отражение. D4 - номер палитры спрайта (OBJ0PAL или OBJ1PAL): 0 - палитра OBJ0PAL; 1 - палитра OBJ1PAL. Размещая спрайт, важно помнить, что его положение на экране не совпадает со значениями, хранящимися в первом и втором байтах описания. Координаты спрайта на экране можно вычислить по приведенным формулам: Экранная координата у = координата у (байт 1) - 16; Экранная координата х = координата х (байт 2) - 8. Следовательно, чтобы спрайт находился в левом верхнем углу экрана и был полностью видим, его координаты нужно установить таким образом: у = 16; х = 8. Информацию в память спрайтов разрешается записать непосредственным обращением по требуемому адресу или при помощи контроллера ПДП. На экране спрайты всегда отображаются в соответствии со своим приоритетом. Если вывести в одно и то же место экрана два спрайта, то верхним окажется спрайт с меньшим номером. Номер спрайта определяется положением его описания в памяти спрайтов. Таким образом, информация о спрайте О занимает адреса FE00h - FE03h, а информация о спрайте 1 - адреса FE04h - FE07h и т.д. При написании программы важно учитывать особенность игровой системы GAME BOY: из-за аппаратной ошибки, допущенной при проектировании видеопроцессора, нельзя выполнять команды LDI (HL) , A; LDD (HL) , A; LDI А, (HL) и LDDA, (HL), если в регистровой паре HL содержится число из диапазона FE00h - FEFFh, поскольку это приводит к изменению содержимого памяти спрайтов. Формирование изображения на экране Видеопроцессор во время работы совмещает фоновое изображение, спрайты и окно, после чего выводит полученный результат на экран ЖКИ игровой системы. Перед началом формирования изображения в памяти должны находиться два знакогенератора, изображения фона и окна и информация о спрайтах. Следует также помнить, что цвет с двумя младшими битами 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. Когда видеопроцессор находится в таком режиме, вырабатывается кадровый синхроимпульс. Центральный процессор может свободно
Рис. 2.8. Формирование изображения на экране игровой системы GAME BOY обращаться к видеопамяти и к памяти спрайтов. Длительность кадрового синхроимпульса в игровой приставке GAME BOY составляет 1,09 мс. Режим 2. Видеопроцессор обращается к памяти спрайтов. Доступ к памяти спрайтов для центрального процессора в течение этого периода запрещен. Длительность работы процессора в данном режиме равна 19,31 мкс. Режим 3. В режиме 3 происходит чтение данных из видеопамяти. Доступ к видеопамяти для центрального процессора запрещен. Продолжительность функционирования видеопроцессора в таком режиме зависит от числа спрайтов в текущей строке и находится в пределах 41,37-70,69 мкс. Работу видеопроцессора игровой системы GAME BOY поясняет временная диаграмма, приведенная на рис. 2.9. Формирование строки изображения начинается с обращения видеопроцессора к памяти спрайтов (режим 2), занимающего 80 тактов работы процессора. Затем видеопроцессор переходит в режим 3 и считывает данные из видеопамяти. После получения строки изображения он генерирует строчный синхроимпульс. Таким образом, видеопроцессор последовательно переключается между режимами 0, 2 и 3.
Рис. 2.9. Временная диаграмма работы видеопроцессора игровой системы GAME BOY Вывод полной строки изображения в игровой системе GAME BOY происходит за 109 мкс (456 тактов процессора). После завершающей строки видеопроцессор переключается в режим 1 и генерирует кадровый синхроимпульс. В этом режиме видеопроцессор находится 1,09 мс (4560 тактов процессора), после чего начинает формирование нового кадра. Полный цикл отображения кадра в системе GAME BOY происходит за 70224 такта центрального процессора. Контроллер прямого доступа к памяти Контроллер прямого доступа к памяти (ПДП) игровой системы GAME BOY осуществляет быструю передачу блока информации из ПЗУ или ОЗУ в память спрайтов. Наиболее часто эта функция требуется во время кадрового синхроимпульса для обновления информации о положении спрайтов на экране. Процесс пересылки данных занимает 160 мкс. Чтобы включить режим прямого доступа к памяти, необходимо записать старший байт адреса начала пересылаемого блока в регистр DMA (FF46h); младший байт всегда равен 0. При использовании ПДП следует помнить о двух особенностях аппаратуры игровой системы GAME BOY. Во-первых, память спрайтов недоступна во время формирования видеопроцессором изображения на экране, поэтому пересылку данных посредством прямого доступа к памяти нужно производить, когда видеопроцессор генерирует кадровый синхроимпульс. Как правило, вызов процедуры, работающей с контроллером ПДП, осуществляют во время обслуживания соответствующего запроса на прерывание. Во-вторых, при работе контроллера ПДП центральный процессор системы может задействовать только свою внутреннюю память, расположенную по адресам FF80h - FFFEh. Поэтому программа должна переместить фрагмент, взаимодействующий с контроллером ПДП к памяти, в верхнюю область ОЗУ, находящуюся в диапазоне адресов FF00h -FFFCH. Рассмотрим пример программы, использующей прямой доступ к памяти для изменения информации о спрайтах. ; Сюда будет передано управление ; при поступлении запроса на обработку ; прерывания по кадровому синхроимпульсу. ORG $0040 JP $FF80 ; С этого места начинается ; выполнение программы. ORG $0100 NOP JP Start ; Здесь располагается служебная ; информация о картридже. Start: DI LD HL, $FF80 ; Код процедуры LD DE, Vblk ; обработки ; прерывания ; перемещается LD В,20h ; из ПЗУ картриджа ; во внутреннюю Loop: LD A, (DE) ; память процессора, LDI (HL), А ; начиная с адреса ; FF80h. INC DE DEC В JR NZ, Loop EI ; Здесь располагается остальной код игры. ; Процедура обработки запроса ; на прерывание. 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 портов ввода/вывода посредством записи туда значений, определяющих требуемые параметры изображения и режимы работы. Информация о текущем режиме считывается из регистра состояния. В адресном пространстве игровой системы GAME BOY регистры видеопроцессора располагаются в диапазоне FF40h - FF4Bh. Регистр управления видеопроцессором LCDC Адрес: FFA0h. Тип: запись/чтение. Назначение разрядов: D7 - разрешение работы видеопроцессора: 0 - видеопроцессор выключен, изображение на экране отсутствует. Для обеспечения корректной работы выключение видеопроцессора (перевод разряда из 1 в 0) должно осуществляться в течение периода, пока длится кадровый синхроимпульс; 1 - видеопроцессор включен. D6 - выбор экранной страницы, хранящей изображение окна: 0 - 9800h - 9BFFh; 1 - 9C00h - 9FFFh. D5 - разрешение вывода окна на экран: 0 - не выводится; 1 - выводится. D4 - выбор знакогенератора для хранения элементов фона и окна: 0 - знакогенератор расположен по адресам 8800h - 97FFh; 1 - знакогенератор расположен по адресам 8000h - 8FFFh (здесь же содержатся изображения спрайтов). D3 - выбор экранной страницы для хранения фона: 0 - 9800h - 9BFFh; 1 - 9C00h- 9FFFh. D2 - задание размера спрайтов: 0 - 8x8; 1 - 8x16. D1 - разрешение вывода спрайтов на экран: 0 - не выводятся; 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. Если при этом разряд D6 регистра STAT также установлен в 1, видеопроцессор генерирует запрос на прерывание. Регистр контроллера прямого доступа к памяти DMA Адрес: FF46h. Тип: запись. Назначение разрядов. В регистр помещается 8-разрядное значение, определяющее адрес страницы в основной памяти. Контроллер ПДП скопирует содержимое выбранной страницы основной памяти в память спрайтов. Например, после записи в регистр FF46h значения 13h в память спрайтов видеопроцессора переписывается содержимое основной памяти игровой системы, расположенное по адресам 1300h - 139Fh. Регистр палитры фона BGP Адрес: FF47h. Тип: запись/чтение. Назначение разрядов. Когда видеопроцессор совмещает два битовых образа строки символа из знакогенератора, каждая точка на экране кодируется комбинацией из двух битов: 00, 01, 10 или 11. Однако это значение является не кодом выводимого цвета, а индексом определенной палитры. Из регистра палитры выбираются два бита, соответствующие коду точки, которые и являются цветом, отображаемым на экране. Содержимое регистра влияет на изображение фона и окна. D7, D6 - цвет точки с кодом 11; D5, D4 - цвет точки с кодом 10; D3, D2 - цвет точки с кодом 01; D1, D0 - цвет точки с кодом 00. Регистр палитры спрайтов 1 ОВР0 Адрес: 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 формирует звуковое сопровождение, освобождая тем самым время центрального процессора для других задач. В этом разделе приводится краткое описание архитектуры звукового процессора и его регистров. Методы воспроизведения музыки и спецэффектт с его помощью представляют собой отдельную область и здесь рассматриваться не будут. Информацию по данной теме можно найти на сайтах Internet. Структурная схема звукового процессора игровой системы GAME BOY показана на рис. 2.10. Как видно из структурной схемы, аудиопроцессор представляет собой четыре независимых генератора сигналов, выходы которых соединены через аналоговые коммутаторы. Выходные сигналы коммутаторов сгруппированы в две шины: правого и левого каналов. Далее два сигнала поступают на электронные регуляторы громкости, а затем с выходов звукового процессора передаются на внешний усилитель. Отдельный блок, состоящий из регистров NR50 -NR52, предназначен для управления внутренними цепями звукового процессора. Путем записи определенных значений в эти регистры осуществляется включение и выключение генераторов, коммутация выходных сигналов и регулировка громкости. Помимо общих регистров звукового процессора в каждом генераторе есть собственные регистры управления. Понять их назначение поможет структурная схема, приведенная на рис. 2.11. В качестве примера рассматривается структурная схема второго звукового генератора. Схемы других генераторов несколько отличаются, но принцип работы остается прежним. Основой генератора является программируемый счетчик-делитель частоты. На его вход поступает опорная частота звукового процессора, деленная на четыре. С выхода программируемого делителя снимается сигнал, частота которого (fd) определяется значением, записанным в регистры NR23, NR24. Затем выходной сигнал через схему регулировки длительности импульсов поступает на вход цифро-аналогового преобразователя (ЦАП), формирующего выходной сигнал генератора. На другие входы ЦАП приходят сигналы от счетчика огибающей, которые определяют амплитуду выходного сигнала. Счетчик огибающей соединен с регистром NR22, который позволяет программировать форму огибающей выходного сигнала звукового генератора. Генерация звукового сигнала начинается после установки соответствующего разряда в регистре NR24. После окончания формирования сигнала устанавливается внутренний триггер генератора, что приводит к прекращению работы программируемого счетчика-делителя частоты. Разряды регистра регулировки NR21, управляющие длительностью звучания, соединены со схемой регулировки длительности импульсов, которая контролирует поступление сигнала на вход ЦАП. По истечении заданного периода времени счетчик обнуляется и формирование звука прекращается. Регистры звукового процессора С точки зрения программирования звуковой процессор игровой системы GAME BOY представляет собой 21 регистр ввода/вывода, расположенный поадресам FF10h - FF26h, и область данных, определяющих форму выходного сигнала, которая находится в диапазоне FF30h - FF3Fh. Ниже приводится подробное описание регистров аудиопроцессора. Все регистры имеют однотипное обозначение, состоящее из двух букв (NR) и двух цифр. Первая цифра - номер звукового генератора, к которому относится данный регистр. Если это цифра 5, то регистр является управляющим для всего звукового процессора. Вторая цифра - порядковый номер регистра. Таким образом, регистр NR22 -это регистр 2 второго звукового генератора. Сведения обо всех регистрах аудиопроцессора игровой системы GAME BOY и назначении отдельных разрядов каждого регистра приведены ниже. Регистр управления изменением частоты канала 1 (NR10) Адрес: FF10h. Тип: чтение/запись. Назначение разрядов: D7 - не используется. D6 - D4 - служат для хранения кода, определяющего время, через которое происходит модификация частоты: 000 - частота остается постоянной; 001 - 111 - частота изменяется через (7,8 х Т) мс, где Т - десятичное значение, которое соответствует двоичному коду, записанному в данных разрядах. D3 - задание направления изменения частоты: 0 — увеличение; 1 - уменьшение.
РИС. 2.11. СТРУКТУРНАЯ СХЕМА ОТДЕЛЬНОГО КАНАЛА ЗВУКОВОГО ПРОЦЕССОРА ИГРОВОЙ СИСТЕМЫ GAME BOY D2 - D0 - регулировка скорости изменения частоты n = 0-7. Новая частота рассчитывается по формуле:
Частота f0 (начальное значение частоты сигнала) задается содержимым регистров NR13, NR14. Регистр регулировки сигнала канала 1 (NR11) Адрес: FF11h. Тип: чтение/запись. Назначение разрядов: D7, D6 - код, задающий длительность импульсов. Зависимость длительности импульсов от кода, записываемого в регистр, поясняется на рис. 2.12. D5 - D0 - код, указывающий длительность звучания. Длительность звучания определяет время работы генератора аудиосигнала. Время (в секундах) рассчитывается по следующей формуле: t = (64 - t1) х (1 / 256), где t1 - десятичное значение кода, записанного в данных разрядах. Регистр управления огибающей канала 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. Тип: чтение/запись. Назначение разрядов: В регистр записываются младшие восемь разрядов 11-разрядного значения кода начальной частоты сигнала аудиоканала 1. Регистр управления канала 1 (NR14) Адрес: FF14h. Тип: чтение/запись. Назначение разрядов: D7 - при записи 1 в этот разряд происходит перезапуск звукового генератора канала 1 с начальными значениями параметров сигнала. D6 - циклическая/последовательная работа: 0 - звук генерируется постоянно, независимо от значения в разрядах D5 - D0 регистра NR11; 1 - звук генерируется в течение времени, которое определяется значением, записанным в разрядах D5 - D0 регистра NR11, после чего канал выключается (сбрасывается разряд D0 в регистре NR52). D5 - D3 - не используются. D2 - D0 - три старших разряда 11-разрядного значения кода начальной частоты сигнала аудиоканала 1. Частота (в герцах) рассчитывается по следующей формуле: F = 131072 / (2048 - f), где f - десятичное число, эквивалентное 11-разрядному коду из регистров NR13 и NR14. Регистр регулировки сигнала канала 2 (NR21) Адрес: FF16h. Tип: чтение/запись. Назначение разрядов: D7, D6 - код длительности импульсов. Понятие длительности импульсов поясняется на рис. 2.12. D5 - D0 - код, задающий длительность звучания. Длительность звучания определяет время работы генератора звукового сигнала. Время (в секундах) рассчитывается по следующей формуле: t= (64 - t1) x (1/256), где t1 - десятичное значение кода, записанного в данных разрядах. Регистр управления огибающей канала 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 - три старших разряда 11-разрядного значения начальной частоты сигнала звукового канала 1. Частота (в герцах) рассчитывается по следующей формуле: F - 131072 / (2048 - f), где f - десятичное число, эквивалентное 11 -разрядному коду из регистров NR23 и NR24. Регистр выключения канала 3 (NR30) Адрес: FF1Ah. Тип: чтение/запись. Назначение разрядов: D7 - работа генератора канала 3: 0 - генератор выключен; 1 - генератор работает. D6 - D0 - не используются. Регистр длительности звучания канала 3 (NR31) Адрес: FF1Bh. Тип: чтение/запись. Назначение разрядов. В этот регистр записывается 8-разрядное число, определяющее время работы t1 генератора канала 3. Время (в секундах) рассчитывается по формуле: t = (256 - t1) / 2, где t1 - десятичное число, эквивалентное коду, который записан в регистре. Регистр управления громкостью канала 3 (NR32) Адрес: FF1Ch. Тип: чтение/запись. Назначение разрядов: D7 - не используется. D6, D5 - громкость канала 3: 00 - звук не выводится; 01 - громкость определяется значением, считанным из ОЗУ паттерна. ОЗУ паттерна расположено по адресам FF30h - FF3Fh и описано далее в этом разделе; 10 - громкость определяется значением, считанным из ОЗУ паттерна и разделенным на 2; 11 - громкость определяется значением, считанным из ОЗУ паттерна и разделенным на 4. Регистр управления частотой канала 3 (NR33) Адрес: FF1Dh. Tип: чтение/запись. Назначение разрядов. В регистр записываются младшие восемь разрядов 11-разрядного значения начальной частоты сигнала аудиоканала 3. Регистр управления канала 3 (NR34) Адрес: FF1Eh. Тип: чтение/запись. Назначение разрядов: D7 - при записи в этот разряд 1 происходит перезапуск звукового генератора канала 3 с начальными значениями параметров сигнала. D6 - циклическая/последовательная работа: 0 - звук генерируется постоянно, независимо от значения в регистре NR31; 1 - звук генерируется в течение времени, которое определяется значением, записанным в регистре NR31, после чего канал выключается (сбрасывается разряд D2 в регистре NR52). D5 - D3 - не используются. D2 - D0 - три старших разряда 11-разрядного значения начальной частоты сигнала аудиоканала 3. Частота (в герцах) рассчитывается по следующей формуле: F = 131072 / (2048 - f). где f - десятичное число, эквивалентное 11-разрядному коду из регистров NR33 и NR34. Регистр управления длительностью сигнала канала 4 (NR41) Адрес: FF20h. Тип: чтение/запись. Назначение разрядов: D7, D6 - не используются. D5 - D0 - код длительности звучания tx = 0-63. Длительность звучания определяет время работы генератора звукового сигнала. Время (в секундах) вычисляется по следующей формуле: t = (64 -tx) x (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; 0011 - Х/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; 011 -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. Тип: чтение/запись. Назначение разрядов: D7 - если этот разряд установлен в 1, сигнал с входа внешнего аудиосигнала V IN поступает на выход S02 звукового процессора. D6 - D4 - установка громкости сигнала на вы ходе S02:
000 - минимум; 111 - максимум. D3 - если этот разряд установлен в 1, сигнал с входа внешнего аудиосигнала V IN поступает на выход S01 звукового процессора. D2 - D0 - громкость сигнала на выходе S01: 000 - минимум; 111 - максимум.