Если вы хотите написать это самостоятельно, вам нужно:
Эмулятор процессора Zilog Z80A
это не так просто сделать, но есть несколько бесплатных исходников для C / C ++. Я пользуюсь своим.
3-канальный эмулятор чипа AY 8910/8912 PSG
это намного проще, чем процессор. это всего лишь генератор тонов, но документация для него не очень хороша, поэтому вам нужно много экспериментировать.
1-битная цифровая эмуляция динамика
*. AY-файлы не всегда используют AY-чип для вывода звука. Некоторые игры сочетают в себе AY и встроенный динамик. Сейчас я не уверен, есть ли у AY поддержка для covox или нет ... Но если да, то вам нужно включить также 8/16-битный моно / стерео covox, как правило, на какой-то чип i8255.
эмуляция клавиатуры
поддержка переменной архитектуры HW
*. AY-файлы хранят музыку для большего количества архитектур ... есть различия между Sharp, Amstard CPC, ZX48, ZX128, клонами ... Некоторые имеют разные частоты кристаллов, некоторые имеют разное микширование каналов для репродукторов, а также IO адреса могут отличаться, не говоря уже о проблемах с подкачкой памяти.
Вывод звука
Это зависит от целевой платформы, и поскольку я не использую XNA, я не буду касаться этой темы (так как на нее уже ответили / приняли)
AY-плеер выглядит так:
- первая загрузка заголовка AY
- определить целевую платформу и настроить эмулятор в соответствии с ней
- загрузка двоичного файла AY в целевые зоны памяти
- установить регистры и запустить эмуляцию
Так что, если вы хотите закодировать AY-плеер, вы в конечном итоге напишите эмулятор Z80, поскольку * .AY файлы - это программы, а не записи звука. Поскольку во многих файлах AY используется громкоговоритель, вам необходимо правильно эмулировать модель конкуренции, в противном случае могут возникнуть проблемы с синхронизацией, которые можно услышать, особенно на громкоговорителе ...
Для улучшения качества вы можете применять КИХ-фильтры для имитации ШИМ -подобного управления динамиком, которое используют многие эффекты.