Эмулятор Магнитофона Для Zx-Spectrum

Как ни странно, даже сейчас, спустя столько десятилетий, есть немало людей, интересующихся ZX-Spectrum. И дело не ограничивается программными эмуляторами, нет. У этих людей вполне настоящие, «железные» Спектры.

Подавляющее большинство этих компьютеров оснащены дисководами, но есть и модели, имеющие только ленточный вход. Такой компьютер можно загрузить, например, с аудиоплеера.

Но при таком способе загрузки неудобно перемещаться между блоками данных внутри аудиофайла, например, если игра требует загрузки уровней.

Да и аудиофайлы занимают изрядное место.

Есть, конечно, и другие программы для смартфонов, воспроизводящие форматы файлов данных для Спектрумового тапа и tzx. Но для тех же целей можно собрать аппаратный эмулятор магнитофона, описанный в этой статье.

Описываемый эмулятор собран на базе микроконтроллера atmega16 и способен воспроизводить тап-файлы, расположенные на SD-карте.

Не умеет записывать файлы на SD-карту (да мне это и не понадобилось).



Эмулятор магнитофона для ZX-Spectrum

Внешний вид эмулятора магнитофона в моей разработке.

Схема эмулятора показана на рисунке ниже.



Эмулятор магнитофона для ZX-Spectrum

Схема эмулятора магнитофона.

В схеме используется дисплей 1602, микроконтроллер Atmega16 и динамическое ОЗУ MB81C4256. Зачем в таком эмуляторе оперативная память, ведь с карты памяти можно последовательно прочитать два блока (один читается, другой выводится)? Да, ты можешь.

Но использование большой оперативной памяти упрощает программу — все выходные данные полностью находятся в оперативной памяти, и их достаточно просто последовательно читать и выводить.

Кроме того, наличие оперативной памяти позволяет ускорить скорость вывода сигнала практически до максимальной для ZX-Spectrum. Однако это потребует существенной модификации программы загрузки в ПЗУ Спектрума.

В этом эмуляторе максимальная скорость вывода данных в четыре раза превышает стандартную скорость загрузки Спектрума.

То есть требуется модифицированное ПЗУ.

Прошивка такого модифицированного ПЗУ представлена в архиве.

Формат файла Tap очень прост: 2 байта — размер блока, за которым следуют данные блока.

И так до тех пор, пока не будут исчерпаны все блоки.

Ленточный сигнал от ZX-Spectrum представляет собой частотно-модулированный сигнал, при этом самая высокая частота кодируется нулем и сигналом синхронизации (частота сигнала синхронизации немного выше, чем частота нуля).

Единица кодируется на частоте в 2 раза меньшей нулевой частоты.

Пилот-тон кодируется частотой в 2,5 раза ниже нулевой частоты (звучит пи-и-и-и-и в начале загрузки).

На рисунке показан формат сигнала в тактах процессора Z80 (частота в ZX-Spectrum 3,5 МГц, если кто забыл).

Сначала звучит длинный (несколько секунд) пилот-сигнал, затем следует сигнал синхронизации, и после него выводятся данные.



Эмулятор магнитофона для ZX-Spectrum

Формат сигнала ленты ZX-Spectrum. На самом деле, здесь вообще нет ничего сложного.

Если такой сигнал поступит от микроконтроллера, то Спектрум его с радостью примет и загрузится.

Для формирования сигнала программа использует обычный таймер, переключающий выход магнитофона через заданные промежутки времени.

Вот видео работы эмулятора магнитолы: Вот как это работает на скорости 4x: В архив прошивка, исходники прошивки, печатная плата, принципиальная схема, прошивка ZX-Spectrum ROM для 4x и 2x скоростей, программа преобразования TAP в WAV и программа обратного преобразования из WAV в TAP. Обновлять: Программа и плата на github. Теги: #ZX Spectrum #эмулятор магнитофона #C++ #Программирование микроконтроллеров

Вместе с данным постом часто просматривают: