Связь с нами
Почтовый ящик
 
Обновлённые темы форума
dmgemu - [13:00] 04.10.2024
Журнал Downgrade - [18:24] 25.09.2024
Косплей - [17:24] 23.06.2024
Где Фантом? - В сумерках - [19:04] 30.05.2024
Мой блюз «Three... Two... One!.. Let's Dance And Have Fun!» - [01:52] 15.05.2024
"Электротопчик" от Эдоса - [10:27] 17.03.2024
В ноябре закрыл свой детско-юношеский гештальт!!! - [17:46] 12.03.2024
Очень низкоуровневый эмулятор 6502 / NES - [16:52] 12.03.2024
[NES] Mighty Final Fight (J). - [12:48] 08.03.2024
Сайт всё? - [16:32] 01.01.2024
 
Статьи - Извлечение и использование ресурсов музыкального сопровождения из игр Sega MegaDrive
Пример извлечения и использования ресурсов музыкального сопровождения из игр Sega Genesis/MegaDrive 1/2
Немного теории
Для того чтобы уметь извлекать необходимые ресурсы из игр, написанных для приставки Sega MegaDrive 1/2, необходимо иметь представление об ее внутренней структуре. Я приведу упрощенную блок-схему и поясню каждый ее элемент:
Внутренняя структура Sega MegaDrive
Как видно из блок-схемы, у приставки 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.
 
 

 

Эму-Россия © 2001-2024