3.2.5. Звуковой процессор Звуковой процессор приставки SEGA MEGA DRIVE служит для формирования звукового сопровождения игры, освобождая тем самым ресурсы центрального процессора для других задач. Ниже приводится краткое описание архитектуры звукового процессора и его регистров. Методы воспроизведения музыки и спецэффектов с помощью звукового процессора игровой приставки представляют собой отдельную тему и в данной публикации не рассматриваются. Для читателей, которые интересуются этими вопросами, в конце книги приведены ссылки на сайты Internet, содержащие необходимые материалы. Как видно из общей структурной схемы игровой приставки SEGA MEGA DRIVE, воспроизведением звука в ней занимается отдельный мини-компьютер, состоящий из микропроцессора Z80 (сопроцессор), ОЗУ объемом 8 Кб, программируемого звукового генератора и синтезатора. Поэтому мы посвятим отдельные разделы сопроцессору (центральному процессору), распределению адресного пространства, музыкальному синтезатору и программируемому звуковому генератору. Архитектура сопроцессора игровой приставки В качестве сопроцессора в приставке SEGA MEGA DRIVE применяется стандартный микропроцессор
Рис. 3.12. Структурная схема микропроцессора Z80 Z80, работающий на тактовой частоте 4 МГц. На сегодняшний день он является наиболее распространенным 8-разрядным процессором и отличается высокой производительностью, развитой системой команд и простотой использования. Структурная схема микропроцессора Z80 приведена на рис. 3.12. Как видно из рис. 3.12, микропроцессор состоит из арифметико-логического устройства, блока управления шиной данных, блока регистров, блока управления шиной адреса и устройства управления с дешифратором команд. Все блоки микропроцессора связаны внутренней шиной данных. Для обращения микропроцессора к памяти предназначена 16-разрядная шина адреса. Таким образом, сопроцессор игровой приставки может непосредственно обращаться к 64 Кб памяти с адресами от 0000h до FFFFh. Обмен информацией осуществляется через 8-разрядную шину данных. Регистры сопроцессора Сопроцессор игровой приставки SEGA MEGA DRIVE имеет 22 внутренних регистра, из них 18 регистров 8-разрядные, а 4 - 16-разрядные. При этом некоторые 8-разрядные регистры способны объединяться в регистровые пары, что позволяет производить операции с 16-разрядными числами. Аккумулятор является наиболее часто задействуемым регистром процессора. Он предназначен для обмена данными с памятью и портами ввода/вывода, а также для выполнения любой арифметической или логической операции. В программах, написанных на языке ассемблера, этот 8-разрядный регистр обозначается буквой «А». Регистры общего назначения. Для хранения промежуточных данных разрешается использовать шесть 8-разрядных регистров процессора, обозначаемых буквами «В», «С», «D», «Е», «Н» и «L». Для обработки 16-разрядных значений эти регистры могут объединяться в три регистровые пары -ВС, DE, HL. Регистр состояния процессора F. Каждый бит этого регистра является флагом и изменяет свое значение в зависимости от результата выполненной команды. Из восьми разрядов регистра состояния используются только шесть, их назначение описано ниже. Значение разрядов D5 и D3 регистра состояния совпадает с разрядами D5 и D3 в результате последней выполненной арифметической или логической команды микропроцессора. D7 (S) — флаг вычитания. Установлен в 1, если последней выполненной арифметической операцией была команда вычитания, и сброшен, если последней была команда сложения. Используется при работе с двоично-десятичными числами. D6 (Z) - флаг нулевого результата; устанавливается в 1, если результат выполнения операции равен 0. D4 (Н) - флаг вспомогательного переноса; устанавливается в 1, если при выполнении арифметической операции произошел перенос из разряда D3 в разряд D4. Применяется внутренними схемами процессора при работе с числами в двоично-десятичном коде. D2 (P/V) - флаг четности/переполнения. В логических операциях устанавливается в 1, если в результате получено четное число установленных в 1 разрядов (не путать с четным числом!). В арифметических операциях показывает переполнение, то есть индицирует перенос в самый старший разряд результата (обычно D7). D1 (N) - флаг отрицательного результата. Совпадает с самым старшим разрядом (D7 или D15) результата выполненной команды. D0 (С) - флаг переноса. Разряд С регистра состояния процессора становится равным 1, если результат сложения больше 255 (0FFh) или если результат вычитания меньше 0. Другими словами, этот флаг совпадает с переносом из самого старшего разряда результата. Обратите внимание: процессор Z80 имеет два набора 8-разрядных регистров. Набор, с которым процессор работает в данный момент, называется активным. Другой набор регистров при этом недоступен для программы, но все записанные в него значения сохраняются. Программа может переключать наборы регистров с помощью специальных команд. Регистр вектора прерываний I. Регистр используется при обслуживании запроса на прерывание. Более подробную информацию об этом регистре можно найти в литературе, посвященной микропроцессору Z80. Регистр регенерации памяти. Регистр предназначен для регенерации динамического ОЗУ. Каждый раз, когда микропроцессор извлекает из памяти код очередной команды, семь младших разрядов данного регистра автоматически увеличиваются на 1; старший разряд регистра не меняется. Индексные регистры. Особенностью процессора Z80 является наличие индексного метода адресации, когда в команде указывается не непосредственный адрес данных в памяти, а 8-разрядное смещение в пределах от -128 до 127 относительно базового адреса, хранящегося в 16-разрядном индексном регистре IX или IV. Указатель стека. Данный 16-разрядный регистр задает первую свободную ячейку в стеке. В процессоре Z80 стек может располагаться в любом месте памяти системы, хотя обычно его размещают в верхних адресах ОЗУ. Стек растет вниз, то есть от адреса, содержащегося в регистре SP, к адресу 0000h. Счетчик команд. Это еще один 16-разрядный. регистр процессора. Его назначение - указывать адрес команды, которая должна быть выполнена. Команды перехода позволяют изменить содержимое регистра и определить нужную последовательность выполнения команд, находящихся в памяти. Способы адресации В коде команды следует указать местоположение необходимых для работы процессора данных при помощи различных методов адресации. Ниже подробно рассмотрены методы адресации микропроцессора Z80. Регистровая адресация. Операнды находятся в регистрах центрального процессора. Названия используемых регистров задаются непосредственно в команде. Неявная адресация. Расположение операндов для команд строго фиксировано, дополнительных указаний не требуется. Непосредственная адресация. 8-разрядный операнд хранится в памяти сразу за кодом команды, то есть по адресу РС+1. Косвенная адресация. В команде определяется адрес расположения операнда в памяти. Регистровая косвенная адресация. Адрес операнда содержится в одной из регистровых пар процессора. Индексная адресация. В команде вместо адреса указывается 8-разрядное смещение в диапазоне от -128 до 127 относительно базового адреса, хранящегося в индексном регистре IX или IV. Побитовая адресация. В код команды помещается непосредственный разряд операнда, с которым и производится необходимое действие. Данный метод используют три команды: BIT, SET и RES. Относительная адресация. Этот метод предназначен для команд перехода. Во втором байте команды задается 8-разрядное смещение в диапазоне от -128 до 127, которое прибавляется к текущему значению счетчика команд для получения адреса следующей выполняемой команды. Система команд Сопроцессор игровой приставки SEGA MEGA DRIVE (микропроцессор 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, EI, IM, CCF, SCF; * команды работы со стеком: PUSH, POP. Полная информация о системе команд микропроцессора Z80, используемого в игровой приставке SEGA MEGA DRIVE, приведена в приложении 1. Распределение адресного пространства Распределение адресного пространства сопроцессора показано на рис. 3.13. Адресное пространство сопроцессора игровой приставки является частью адресного пространства центрального процессора. Таким образом, центральный процессор может приостановить работу сопроцессора и свободно обращаться к любым ячейкам памяти и регистрам, находящимся в адресном пространстве сопроцессора. Соответствие адресов центрального процессора и сопроцессора очень простое: адресу 0000h сопроцессора сопоставлен адрес А00000h центрального процессора, адресу 000lh - A0000lh и так далее до адреса FFFFh, которому сопоставлен адрес А0 FFFFh. Рассмотрим назначение основных блоков адресного пространства сопроцессора. В диапазоне 0000h - 1FFFh располагается ОЗУ сопроцессора объемом 8 Кб. Здесь хранятся собственные данные
Рис. 3.13. Адресное пространство сопроцессора игровой приставки SEGA MEGA DRIVE сопроцессора, а также программа, которая загружается в память центральным процессором приставки для ее последующего выполнения сопроцессором. По адресам 4000h - 4003h находятся четыре регистра, через которые программа управляет музыкальным синтезатором игровой приставки. Более подробно назначение этих регистров описано ниже. По адресу 6000h находится регистр переключения страниц памяти. Сопроцессор Z80 может обращаться ко всему адресному пространству центрального процессора, используя механизм переключения банков памяти. Для этого вся память центрального процессора разбивается на блоки по 32 Кб, один из которых становится доступным сопроцессору при обращении по адресам 8000h - FFFFh. Для обращения к какой-либо ячейке адресного пространства центрального процессора необходимо сгенерировать 24-разрядный адрес. Младшие 15 разрядов формирует сопроцессор на шине адреса, старшие девять берутся из регистра переключения страниц памяти. Чтобы задать эти девять разрядов, определяющие подсоединенный банк, сопроцессору необходимо девять раз выполнить запись в регистр переключения страниц памяти. При записи значение имеет только младший разряд DO, где последовательно передаются девять старших разрядов адреса, с А15 до А23. Например, при обращении по адресам 8000h - FFFFh сопроцессору будет доступна страница памяти основного процессора, расположенная в диапазоне 038000h - 03FFFFh, если три раза записать в регистр переключения страниц памяти число, у которого разряд D0 равен 1, а затем еще шесть раз — число, у которого разряд D0 равен 0. Этого можно добиться, выполнив следующую программу:
LD HL,6000h ; Задание адреса ; регистра. LD А, 1 ; D0 = 1. LD (HL),А ; А15 = 1. LD (HL) , A ; A16 = 1. LD (HL),A ; A17 = 1. LD A,0 ; D0 = 0. LD (HL) ,A ; A18 = 0. LD (HL) ,A ; A19 = 0. LD (HL) ,A ; A20 = 0. LD (HL) ,A ; A21 = 0. LD (HL) ,A ; A22 = 0. LD (HL),A ; A23 = 0. Через регистр с адресом 7f11h сопроцессор управляет программируемым звуковым генератором приставки. Использование этого регистра рассматривается в соответствующем разделе. Последние 32 Кб памяти сопроцессора занимает переключаемый банк, через который сопроцессор обращается к адресному пространству центрального процессора игровой приставки, как было описано выше. Музыкальный синтезатор В приставке SEGA MEGA DRIVE применяется микросхема музыкального синтезатора Yamaha 2612. Она является усовершенствованным вариантом микросхемы Yamaha 2151, используемой в игровых автоматах SEGA и в некоторых электронных музыкальных инструментах. Основные параметры микросхемы Yamaha 2612 следующие: * шесть независимых каналов звукового сопровождения; * 8-разрядный цифровой аудиоканал, замещающий один из аналоговых каналов; * стереофонический выход сигнала звукового сопровождения; * низкочастотный генератор, предназначенный для формирования различных эффектов; * два таймера. Рассмотрим более подробно назначение отдельных модулей музыкального синтезатора. Для каждого из шести каналов звукового сопровождения задается опорная частота сигнала и указываются параметры, определяющие процесс преобразования опорной частоты в сложный выходной аудиосигнал. Процесс преобразования зависит от четырех параметров, называемых операторами, которые определяют модуляцию опорной частоты, изменение огибающей и другие характеристики звука. Эти четыре оператора затем объединяются в алгоритмы, которые и задают форму выходного сигнала. Шесть аудиоканалов разделены на две группы: в первую входят каналы 0-3, а во вторую -каналы 4-6. Цифровой канал звукового сопровождения представляет собой 8-разрядный ЦАП, преобразующий данные в напряжение на выходе; наиболее часто он применяется для воспроизведения речи. Если программа использует данный канал, то он будет подключен вместо аналогового с номером 6. Выходной сигнал любого аудиоканала разрешается подать на выход левого или правого канала или на оба выхода вместе, что позволяет добиться стереофонического звучания. Следует отметить, что стереофонический сигнал снимается только с разъема для наушников. На линейный выход звукового сигнала и на вход модулятора поступает монофонический аудиосигнал. Низкочастотный генератор дает возможность плавно изменять амплитуду или частоту выходного сигнала какого-либо каната для получения различных эффектов. Путем записи информации во внутренние регистры микросхемы музыкального синтезатора для каждого канала допустимо задать степень влияния сигнала низкочастотного генератора на выходной звуковой сигнал. Синхронизировать программу с произвольными временными интервалами позволяют два таймера. Однако существует ограничение: по истечении заданного промежутка времени они не генерируют запрос на прерывание, поэтому, чтобы удостовериться в окончании заданного периода, программе нужно выполнять непрерывный опрос регистров таймера. В адресном пространстве сопроцессора микросхема музыкального синтезатора занимает адреса 4000h, 4001h, 4002hH4003h. Кратко опишем назначение этих регистров. Музыкальный синтезатор игровой приставки SEGA MEGA DRIVE имеет более 150 внутренних регистров. Для доступа к какому-либо регистру требуется сначала записать его номер по адресу 400Oh для каналов 0-3 или по адресу 4002h для каналов 4-6. Потом необходимые данные помещаются по адресу 4001h для каналов 0-3 или по адресу 4003h для канатов 4-6. Прежде чем выполнять запись, надо прочитать слово состояния микросхемы синтезатора и проверить состояние разряда D7. Если разряд установлен в 1, то микросхема занята и не может принимать данные. Слово состояния располагается по адресу 4000h. Большое количество внутренних регистров микросхемы музыкального синтезатора не позволяет рассмотреть их в рамках данной книги. Программируемый звуковой генератор Программируемый звуковой генератор является второй микросхемой, которая используется в игровой приставке SEGA MEGA DRIVE для формирования звукового сопровождения. Генератор позволяет получать аудиосигналы с заданной частотой по трем независимым каналам, а по одному каналу подавать сигнал шума. Основой каждого канала является программируемый делитель частоты. На вход делителя приходит опорная частота, а с выхода снимается сигнал, частота которого зависит от значения, записанного в регистры микросхемы. Далее выходной сигнал через регулятор громкости поступает на вход оконечного усилителя, формирующего выходной сигнал аудиоканала. В адресном пространстве сопроцессора игровой приставки данная микросхема занимает один адрес (7F11h) и один порт ввода/вывода с адресом 7Fh. Принципы ее работы очень похожи на микросхему музыкального синтезатора. В порт ввода/вывода помещается 8-разрядное значение, содержащее код нужного внутреннего регистра микросхемы и записываемую туда информацию. Затем в тот же самый порт можно занести дополнительные данные, которые будут переданы в регистр. Всего в микросхеме звукового генератора есть восемь внутренних регистров - по два регистра для каждого аудиоканала. Для обращения к ним в порт ввода/вывода с адресом 7Fh должен быть записан байт со следующим назначением разрядов: 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-разрядное значение, определяющее частоту сигнала, не требуется. Вместо этого записывается байт, у которого в разрядах D7 -D4 имеется код 1110; назначение остальных разрядов следующее: D3 - разряд не используется и должен быть равен 0. D2 - определение типа генерируемого шума: 0 - периодический (подобно низкочастотному генератору); 1 - белый шум. D1, D0 - установка опорной частоты генератора сигнала шума: 00 — частота внешнего генератора, деленная на 2; 01 - частота внешнего генератора, деленная на 4; 10 - частота внешнего генератора, деленная на 8; 11 - выходная частота канала 3. Под частотой внешнего генератора здесь понимается частота сигнала на входе тактовых импульсов микросхемы генератора звуковых сигналов. И музыкальный синтезатор, и программируемый звуковой генератор являются микросхемами общего применения, поэтому их описание можно найти в сети Internet. Полный текст программы для работы со звуковыми процессорами игровой приставки SEGA MEGA DRIVE приведен в приложении 2 и полезен при знакомстве с основными особенностями написания программного обеспечения для этой игровой системы. Взаимодействие центрального процессора и сопроцессора Как уже отмечалось, адресное пространство сопроцессора игровой приставки SEGA MEGA DRIVE является частью адресного пространства центрального процессора. Это позволяет центральному процессору обращаться как к ОЗУ сопроцессора, записывая туда программу, так и к регистрам музыкального синтезатора и программируемого звукового генератора. Центральный процессор игровой приставки SEGA также осуществляет управление сопроцессором с помощью двух регистров с адресами A11100h и A11200h. Регистр захвата шин сопроцессора Адрес: A11100h. Тип: запись/чтение. Назначение разрядов. Запись. Для того чтобы послать сопроцессору запрос на захват шин, центральный процессор должен записать в регистр 16-разрядное слово, где разряд D8 равен 1. Чтение. Если в 16-разрядном слове, прочитанном из регистра, разряд D8 установлен в 1, сопроцессор игровой приставки использует собственную память и центральный процессор не вправе к пей обращаться. Если же разряд D8 сброшен, значит, сопроцессор освободил шины и центральный процессор может работать с его памятью. Регистр сигнала сброса сопроцессора Адрес: A11200h. Тип: запись. Назначение разрядов. Если записать в регистр число FFh, то сопроцессору игровой приставки будет послан сигнал сброса, после чего он начнет выполнение программы, расположенной в ОЗУ с адреса 0000h. Итак, основные принципы построения программ, которые формируют звуковое сопровождение при помощи функций, предоставляемых сопроцессором игровой приставки SEGA MEGA DRIVE, можно сформулировать следующим образом: * основная программа должна быть написана для процессора М68000, а фрагменты, отвечающие за воспроизведение звукового сопровождения, — для процессора Z80; * центральный процессор посылает запрос на захват шин сопроцессора, поместив код 0100h в регистр A11100Oh; * центральный процессор копирует программу, отвечающую за воспроизведение звука, из своей памяти в ОЗУ сопроцессора после того, как разряд D8 в слове, считанном из регистра A11100h, будет установлен в 0; * сопроцессор начнет выполнение имеющейся в ОЗУ программы с адреса 0000h после записи числа FFh в регистр A11200h и 0000h в регистр A11100h. Приведенная в приложении 2 программа поможет понять основные принципы работы со звуковым процессором игровой приставки SEGA MEGA DRIVE. 3.2.6. Структура картриджа В приставке SEGA MEGA DRIVE структура картриджа проще, чем в других игровых системах, поскольку здесь не применяются специализированные контроллеры страниц памяти. Часто внутри картриджа располагается только одна или две микросхемы ПЗУ. Обязательной частью любого картриджа является микросхема ПЗУ, содержащая коды программы. В некоторых картриджах также имеется внутреннее ОЗУ, расширяющее память ИГРОВОЙ приставки. Иногда микросхема ОЗУ получает питание от литиевой батарейки, которая размещается внутри картриджа, и применяется для сохранения игровой ситуации на время выключения устройства. ПЗУ с программным обеспечением занимает адресное пространство центрального процессора в диапазоне 000000H - 3FFFFFH. Если объем ПЗУ превышает 4 Мб, требуется установка простейшего дешифратора адреса из микросхем серии SN74, главной задачей которого является переключение страниц ПЗУ, используемых центральным процессором. Если в картридже есть ОЗУ, оно доступно для центрального процессора в пределах общего адресного пространства. Адреса подключения ОЗУ не являются стандартными и определяются фирмой-изготовителем устройства. В начальных адресах ПЗУ содержится несколько структур данных, расположение которых строго фиксировано. Ниже эти блоки, а также информация, которая должна в них храниться, рассмотрены детально. Точка входа при сбросе. По адресу 000000H записывается значение, которое при перезапуске системы будет скопировано в указатель системного стека центрального процессора, а по адресу 000004H-адрес, с которого начнется выполнение программы. При перезапуске системы данный адрес копируется в счетчик команд. Точки входа процедур обработки исключений. В области 000008H - 0000FFH размещаются адреса передачи управления в случае возникновения различных исключительных ситуаций. При анализе программного обеспечения наибольший интерес представляют адреса 000070H и 000076H -это адреса начала процедур обработки запросов на прерывание по строчному и по кадровому синхроимпульсу соответственно. Следом располагается блок описания картриджа. Он обязательно должен присутствовать, причем должен быть правильно заполненным. Ошибка здесь может привести к отказу картриджа на некоторых моделях приставок. Блок занимает адреса 00010Oh-00 O1FFh. Ниже подробно рассматривается назначение отдельных байтов. 000100h - OOO11Fh. Здесь содержится надпись, информирующая об авторских правах на игровую систему: SEGA MEGA DRIVE (С) SEGA 1988.JUL 000120h - 00014Fh. Название игры для приставки версии DOMESTIC, записанное заглавными английскими буквами в кодировке ASCII. Свободные ячейки заполняются кодом 20H. 000150H - 00 017FH. Название игры для приставки версии OVERSEAS, записанное заглавными английскими буквами в кодировке ASCII. Свободные ячейки заполняются кодом 20H. Обычно это поле идентично предыдущему. 000180H-00018DH. Строка в коде ASCII следующего формата: GM ХХХХХХХ-ХХ, где ХХХХХХХ-XX - это код, определяющий тип картриджа, код производителя программы и номер версии. 00018EH, 00018FH. Контрольная сумма программы, записанной в ПЗУ картриджа. 000190H - 0 0 019FH. Код доступных программе устройств ввода/вывода - текстовая строка, каждый символ которой определяет тип периферийного устройства: джойстик для SEGA MASTER SYSTEM - D; джойстик для SEGA MEGA DRIVE - J; клавиатура - К; контроллер последовательного интерфейса - R; принтер — Р; контроллер дисковода - F; привод CD-ROM - С. 0001A0H - 0 001A7H. Два двойных слова, определяющие, по каким адресам располагается ПЗУ картриджа. Первое из этих слов всегда равно 000000OH, а второе соответствует адресу последней ячейки ПЗУ. 0001A8H - 0001AFH. Размер используемого ОЗУ. По этим адресам всегда записываются два двойных слова: FFOOOOH и FFFFFFH. 0001B0H - 0001BBH. Строка кодов, определяющая параметры установленного в картридже ОЗУ. Если ОЗУ не установлено, эта область памяти заполняется кодом 20H. Рассмотрим значения адресов подробнее: 0001B0H - ASCII-код буквы «R»; 0001B1H - ASCII-код буквы «А»; 0001B2H - параметры установленного ОЗУ: D7 — разряд не используется и равен 1. D6 - разряд установлен в 1, если информация в ОЗУ сохраняется после отключения питания. D5 - разряд не используется и равен 1. D4, D3 - способ доступа к ОЗУ: 00 - ОЗУ доступно при обращении по четным и нечетным адресам; 01 - код не используется; 10 - ОЗУ доступно только по нечетным адресам; 11 - ОЗУ доступно только по четным адресам. D2 - D0 - разряды не используются и равны 0. 0001B3H - байт, содержащий код 20h. 0001B4H - двойное слово, адрес начала области ОЗУ картриджа в адресном пространстве центрального процессора. 0001B8H - двойное слово, адрес области конца ОЗУ картриджа в адресном пространстве центрального процессора. 0001BCH - 0001C7H. Строка, определяющая параметры установленного модема. Если модем для работы картриджа не требуется, эта область памяти заполняется кодом 20H. 0001C8H - 0001EFH. Данная область памяти не используется и заполняется кодом 20H. 0001F0H. Код страны, для которой разработан картридж: U - США, J - Япония, Е - Европа. 0001F1H - 0001FFH. Эта область памяти не используется и заполняется кодом 20H. Чтобы понять принципы организации области данных, расположенной в начале ПЗУ картриджа, приведем пример ее описания на языке ассемблера. Помните, что количество пробелов в текстовых строках является значимой величиной. dc.b "SEGA GENESIS (C)SEGA 1996 MAY dC.b "SAMPLE SOUND PROGRAM dc.b "SAMPLE SOUND PROGRAM de.b "GM 00000000-00" dc.b $a5,$fb dc.b "JD " dc.b $00,$00,$00,$00,$00,$02,$00,$00 dc.b $00,$ff,$00,$00,$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, или через разъем картриджа, то оно связывается непосредственно с шинами центрального процессора и получает от него сигналы адреса, данных и управления. С точки зрения программирования в этом случае в адресном пространстве центрального процессора появляются новые области памяти и новые порты ввода/вывода. Поскольку подобное изменение конфигурации зависит от конкретного устройства, мы не будем детально описывать данный метод. Рассмотрим назначение двух портов ввода/вывода, которые не связаны напрямую с системой ввода/вывода игровой приставки, но метут применяться программами при соединении с различными устройствами, а также при определении конфигурации приставки. Регистр номера версии Адрес: A10000H. Тип: чтение. Назначение разрядов. В данном регистре содержится информация об аппаратной части игровой приставки, которую невозможно определить программным путем. D7 - модель игровой приставки: 0 - Domestic; 1 - Overseas. D6 - стандарт видеосигнала и тактовая частота центрального процессора: 0 - NTSC, частота процессора 7,67 МГц; 1 - PAL, частота процессора 7,60 МГц. D5 - наличие контроллера дисковода: 0 - контроллер подключен; 1 - конт|юллер отсутствует. D4 -разряд не используется. D3 - D0 - код версии схемы игровой приставки. Регистр режима работы ОЗУ Адрес: A11000H. Тип: запись. Назначение разрядов. .Игровая приставка SEGA MEGA DRIVE может работать с внешними устройствами, использующими микросхемы динамической памяти, которые требуют постоянной регенерации. При этом внутренние схемы приставки будут формировать управляющие сигналы для динамического ОЗУ. Чтобы игровая приставка перешла в режим работы с динамическим ОЗУ, в этот регистр необходимо записать слово, у которого разряд D8 будет равен 1; в противном случае схема управления динамическим ОЗУ отключится, и импульс регенерации посылаться не будет. В случае устройств ввода/вывода, подсоединяемых к приставке через 9-контактные разъемы, обмен информацией идет через контроллер, стандартный для всех моделей игровой приставки. Контроллер ввода/вывода 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. Тип: запись/чтение. Назначение разрядов. Разряд D7 регистра не используется, а разряды D6 - D0 применяются для обмена данными через порт 1 в режиме параллельного интерфейса. Записанные данные будут переданы на соответствующие выходные шины, если они работают в режиме вывода. При чтении из этого регистра процессор получает информацию с шин порта, функционирующих в режиме ввода. Регистр данных порта 2 Адрес: A10004H. Тип: запись/чтение. Назначение разрядов. Регистр аналогичен регистру данных порта 1. Регистр данных порта 3 Адрес: A10006H. Тип: запись/чтение. Назначение разрядов. . Регистр аналогичен регистру данных порта 1. Регистр управления параллельным интерфейсом порта 1 Адрес: A10008H. Тип: запись. Назначение разрядов: D7 - разрешение генерации запроса на прерывание: 0 - запрос на прерывание не формируется; 1 - запрос на прерывание посылается при изменении состояния линии ТН (D6). D6 - D0 - определение режима работы шин порта ввода/вывода. При установке разряда в 0 соответствующая линия порта используется для ввода информации, а если разряд равен 1 - для вывода. Например, чтобы использовать шины D3 - D0 порта 1 для ввода информации, а остальные шины - для вывода, необходимо записать в этот регистр число 0FH. Регистр управления параллельным интерфейсом порта 2 Адрес: А1000AH. Тип: запись. Назначение разрядов. Регистр аналогичен регистру управления параллельным интерфейсом порта 1. Регистр управления параллельным интерфейсом порта 3 Адрес: А1000CH. Тип: запись. Назначение разрядов. Регистр аналогичен регистру управления параллельным интерфейсом порта 1. Регистр передатчика последовательного интерфейса порта 1 Адрес: A1000EH. Тип: запись. Назначение разрядов. В регистр записывается 8-разрядное значение, которое будет передано через последовательный интерфейс порта 1.
Рис. 3.14. Архитектура порта подключения внешних устройств игровой приставки SEGA MEGA DRIVE Регистр приемника последовательного интерфейса порта 1 Адрес: A10010h. Тип: чтение. Назначение разрядов. В регистре хранится 8-разрядное значение, принятое через последовательный интерфейс порта 1. Далее >>