|
Статьи - Извлечение и использование ресурсов музыкального сопровождения из игр Sega MegaDrive |
|
|
Пример извлечения и использования ресурсов музыкального сопровождения из игр Sega Genesis/MegaDrive 1/2 |
Немного теории |
Для того чтобы уметь извлекать необходимые ресурсы из игр, написанных для приставки Sega MegaDrive 1/2, необходимо иметь представление об ее внутренней структуре. Я приведу упрощенную блок-схему и поясню каждый ее элемент: |
|
Как видно из блок-схемы, у приставки 2 автономных процессора, каждый имеет свои ресурсы и магистрали адреса, данных и управления. “IO Chip” является на самом деле комплексом устройств ввода-вывода, так же выполняет функцию моста для передачи данных между процессорами. “Control Chip” является арбитром шин. Он координирует работу двух автономных систем и может быть запрограммирован - для этого с ШД каждого процессора заведено несколько сигналов (на самом деле туда заведено только D8 от М68К и D0 от Z80, это используется для организации доступа М68К к ресурсам Z80 и для переключения банка ресурсов М68К для Z80). М68К всегда главный и может в любой момент остановить или сбросить Z80. Z80 используется для организации звукового сопровождения. VDP – видеопроцессор, формирует итоговую картинку на основе данных, которые ему дает программа М68К. Имеет свое ОЗУ на 64кБ. Еще он содержит внутри себя PSG генератор, выход которого примешивается к выходу YM2612. YM2612 – 6ти канальный FM синтезатор.
М68К может обращаться к адресному пространству в 16 мегабайт. Причем, у него нет разделения ресурсов на порты и память – они делят общее адресное пространство. Надо запомнить, что картридж занимает младшие 4 мегабайта адресного пространства: $000000…$3FFFFF, системное ОЗУ занимает старшие 64 килобайта пространства: $FF0000…$FFFFFF. Ресурсы Z80 занимают 32кБ по адресам $A00000…$A07FFF, из которых используется всего 8кБ под ОЗУ Z80 ($A00000…$A01FFF), регистры YM2612 ($A04000…$A04003) и PSG ($A07F11). Подробнее о программировании и взаимодействии узлов приставки можно прочесть в [1]. Z80 так же может обращаться к ресурсам М68К. Но так как его возможности ограничены, то все адресное пространство М68К поделено на участки в 32КБ каждый. Z80 в одно и то же время может обращаться к одному такому участку, используя свой адресный диапазон: $8000…$FFFF. Для переключения банков используется специальный регистр, находящийся в адресном пространстве Z80 по адресу $6000. 16 мегабайт адреса формируется 24-мя адресными битами, а у Z80 свободно всего 15 (32КБ), поэтому оставшиеся 9 старших бит и будут означать номер используемого банка М68К. Чтобы выбрать требуемый банк, необходимо его 9-ти битный номер побитно, начиная с младшего, через бит D0 записать в регистр $6000. Т.е. необходимо совершить 9 записей. Подробнее можно узнать в [1]. |
Я забегу немного вперед и приведу несколько типов методов организации звукового сопровождения. Эту классификацию я составил, основываясь на опыте изучения разных игр.
Тип 1 – Все звуки и музыку играет сам М68К. Z80 выключен и не используется. В этом случае музыкальное сопровождение не отличается качеством, т.к. М68К в основном занят игровым процессом и формированием изображения. Впрочем, графика у таких игр тоже не на высоте.
Тип 2 – Z80 используется для формирования оцифрованных звуков, мелодию играет М68К. Такие игры используют сложные оцифрованные звуковые эффекты, причем программа-драйвер для Z80 размером не более 2х десятков байт. Примеры: Minnesota Fats, Captain Lang (High Seas Havoc).
Тип 3 – Z80 автономно играет мелодию, оцифровки воспроизводит М68К, останавливая Z80. Как правило, такой тип метода подразделяется на 2: мелодия полностью помещается в ОЗУ Z80 вместе с драйвером либо мелодия находится в одном из банков ресурсов М68К и Z80 ее “подгружает” по мере исполнения. Примеры: Rock’n’Roll Racing.
Тип 4 – Z80 автономно играет мелодию и простейшие оцифрованные эффекты. Как правило, это обычная ударная партия. Мелодия и оцифровки находятся в банке ресурсов М68К. Пример: Battle Toad’s.
Тип 5 – Z80 автономно играет мелодию и сложные оцифрованные эффекты. Как правило, это просто микширование ударной партии и оцифрованных звуковых эффектов. Примеры: Dune: The Battle For Arrakis, Cannon Fodder.
Тип 6 – Программа-драйвер для Z80 является сложным самомодифицирующимся кодом, который воспроизводит сложную мелодию, сопровождаемую сложными цифровыми эффектами. Это уникальный случай, который я зафиксировал, такие программы занимают почти 90% из выделенных 8кБ и способны переключать банки ресурсов М68К на лету, т.к. только оцифрованные эффекты занимают килобайты объема. Яркий пример – игры от Sega Technical Institute: Comix Zone и The Oozy. Еще я встречал подобный код, но немного попроще, у игр от Virgin Games (Aladdin, Cool Spot, Cool Spot goes to Hollywood, Street Racer и т.д.). |
В любом случае М68К является инициатором и задает начальное состояние Z80. |
|
|
|
|