Как это ни странно, даже сейчас, спустя столько десятилетий, есть множество людей, которым интересен ZX-Spectrum. И дело не ограничивается программными эмуляторами, нет. У этих людей есть вполне себе настоящие, “железные” спектрумы. Подавляющее большинство этих компьютеров оснащено дисководами, но есть и экземпляры только с магнитофонным входом. Такой компьютер можно загрузить, например, с аудиоплейера. Но при таком способе загрузки неудобно переходить между блоками данных внутри аудиофайла, например, если игра требует загрузки уровней. Да и места аудиофайлы занимают порядочно… Есть, конечно, ещё разные программы для смартфонов, воспроизводящие форматы файлов данных для спектрума tap и tzx. Но можно для этих же целей собрать аппаратный эмулятор магнитофона, описанный в этой статье.
Описываемый эмулятор собирается на базе микроконтроллера atmega16 и способен воспроизводить tap-файлы, лежащие на SD-карте. Записывать на SD-карту файлы он не умеет (да мне это и не требовалось).
Внешний вид эмулятора магнитофона в моём исполнении.
Схема эмулятора представлена на рисунке ниже.
В схеме использован дисплей 1602, микроконтроллер atmega16 и динамическое ОЗУ MB81C4256. Зачем нужно ОЗУ в таком эмуляторе, ведь можно последовательно считывать два блока (один читаем, другой выводим) с карты памяти? Да, можно. Но применение большого ОЗУ упрощает программу – все выводимые данные целиком находятся в ОЗУ, и достаточно просто последовательно их читать и выводить. Кроме того, наличие ОЗУ позволяет разогнать скорость вывода сигнала практически до максимальной для ZX-Spectrum. Это, правда, потребует существенной модификации программы загрузки в ПЗУ спектрума. В данном эмуляторе максимальная скорость вывода данных в четыре раза больше, чем стандартная скорость загрузки спектрума. То есть, требуется модифицированное ПЗУ. Прошивки такого модифицированного ПЗУ представлены в архиве.
Формат tap-файла очень прост: 2 байта – размер блока, за которыми следуют данные блока. И так до исчерпания всех блоков.
Магнитофонный сигнал с ZX-Spectrum представляет собой частотно-модулированный сигнал, при этом самой высокой частотой закодированы ноль и синхросигнал (частота синхросигнала чуть выше, чем у ноля). Частотой в 2 раза ниже частоты ноля закодирована единица. Частотой в 2.5 раза ниже частоты ноля закодирован пилот-тон (звуки пи-и-и-и-и в начале загрузки). На рисунке показан формат сигнала в тактах процессора Z80 (частота в ZX-Spectrum 3.5 МГц, если кто забыл). Сначала идёт длительный (несколько секунд) пилот-тон, затем следует синхросигнал, а после него уже выдаются данные.
Формат магнитофонного сигнала ZX-Spectrum.
Собственно, ничего сложного тут вовсе нет. Если такой сигнал выдать с микроконтроллера, то спектрум его с радостью примет и загрузится. Для генерации сигнала в программе использован обычный таймер, переключающий выход магнитофона через заданные промежутки времени.
Вот видео работы эмулятора магнитофона:
А вот работа на скорости 4x:
В архиве прошивка, исходники прошивок, печатная плата, схема, прошивка ПЗУ ZX-Spectrum для скоростей 4x и 2x, программа конвертации TAP в WAV и программа обратной конвертации из WAV в TAP.
Автор: da-nie