Эмулятор дисковода для Atari на Arduino

alk0v 16 октября в 22:02 9,9k
Приветствую. Делюсь опытом изготовления эмулятора дисковода для Atari на базе Arduino Nano. Под катом инструкция по сборке, схема, прошивки и демонстрация работы.




В нашем музее (подробности в профиле) есть несколько компьютеров Atari, для которых хотелось сделать что-то, позволяющее быстро загружать программы. Оригинальные 410-е магнитофоны для этого не очень подходят, да и, если бы у нас был оригинальный дисковод, это тоже создало бы трудности. У Atari для загрузки программ в память используется собственный последовательный интерфейс — Atari SIO, разработанный Джо Декуром в 1979 году. Что примечательно, Джо также участвовал в разработке стандартов модемной связи, USB и Bluetooth. И аналоговый магнитофон и цифровой дисковод передавали данные в компьютер Atari по одной и той же последовательной шине, пропускная способность которой могла достигать 120 кбит/с. Так как протокол последовательный, данные можно загружать прямо с компьютера через USB-UART адаптер и программу AspeQt, позволяющую эмулировать периферию Atari. Но хотелось чего-то компактного и автономного. Заказывать и паять плату для SIO2SD — эмулятора с SD картой не хотелось, но в процессе поисков попался проект SIO2Arduino, на базе которого я и собрал свое устройство.

Эмулятор можно собрать в нескольких вариантах, мне хотелось девайс с экраном, на котором можно выбрать образ нужной дискеты.

Первый прототип был собран за пару часов, кабель снял с нерабочего магнитофона Atari XC12, если бы его не было, пришлось бы повозиться с разъемом.



Прототип был проверен на Atari 800XL, заработал сразу, без доработок и настроек.



Можно было переходить ко второй фазе — полноценному прибору.
Вместо большой Arduino UNO решил собрать все на базе Arduino Nano. Все было смонтировано на монтажную плату и распаяно старым добрым МГТФ.

Вид со стороны Arduino



Вид со стороны экрана



По размерам хорошо подошел корпус Kradex Z119 На переднюю панель вывел экран, кнопку переключения образов дисков и светодиод, который висит на ноге TX и показывает процесс загрузки.

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



При прошивке готового устройства нужно не забыть поменять в Arduino IDE плату с Uno на Nano, оказывается они немного не совместимы и IDE не видела Nano, пока не изменил настройки. Весь проект для Arduino IDE с настройками под экран и кнопку доступен по ссылке

В собранном виде получился вот такой прибор:




Питание от кабеля micro-usb, карта памяти форматируется в FAT32, в корень скопировал образы дисков в формате ATR и XEX, большой архив с образами лежит на archive.org

Для Atari 800XL порядок работы следующий:

  • Включаем SIO2Arduino
  • Кнопкой выбираем нужный образ дискеты
  • Включаем Atari

Загрузка начинается автоматически после включения или сброса, о чем свидетельствует бодро моргающий светодиод на линии TX. Игра A-Zone, образ которой занимает 92 кБ, грузится около 30 сек. Самые большие образы в архиве занимают 130 кБ.

Результат на экране:



Благодарю за внимание
Проголосовать:
+37
Сохранить:
Лучшее на Habrahabr

 «Угнать за 60 секунд» на примере одного каршеринга

из песочницы
Valya-rollerсегодня в 11:34
24

Intel устранила найденную экспертами Positive Technologies уязвимость в подсистеме Management Engine

ptsecurityвчера в 18:51
21

Обзор программы Heisenbug 2017 Moscow: сколько нужно тестировщиков, чтобы запустить тесты на атомной электростанции?

olegchirвчера в 17:14
1

Новая многообещающая методология разработки, которую уже назвали «убийцей Agile»*

botyaslonimсегодня в 14:30
7

Выпуск Rust 1.22 (и 1.22.1)

перевод
ozkriffсегодня в 06:19
4

Данные из Google Таблиц на вашем сайте

tutorial
dkomarovskiyсегодня в 11:09
9

Трёхмерная графика с нуля. Часть 2: растеризация

перевод
PatientZeroсегодня в 11:38
2

Развитие стратегий устойчивости

перевод
AloneCoderсегодня в 13:11
0

Черная пятница айтишника, или Сказ о потере данных

JetHabrсегодня в 15:02
3

HPE ProLiant for Microsoft Azure Stack: частичка облака Azure под вашим полным контролем

Tiggerсегодня в 07:40
2