Обновление : практическая реализация этого сделана в проекте Tapuino, выполненном Питером Эдвардсом. Проверьте это, все с открытым исходным кодом: https://github.com/sweetlilmre/tapuino
Я работаю над проектом, в котором я использую Arduino для потоковой передачи файлов данных ленты TAP с моего компьютера на C64. Программная сторона проекта идет хорошо, но я все еще новичок в электронике, и я не люблю жарить мой Commodore. Так что на самом деле мне нужна помощь по аппаратному интерфейсу.
Ленты C64 используют ШИМ-модуляцию для сохранения программы на кассете, а при считывании данных триггер opamp + schmitt преобразует аудиосигнал в прямоугольные волны. Каждый переход с высокого на низкий уровень запускает прерывание в машине, а расстояние между двумя прерываниями (которое является длиной импульса) представляет атомную часть потока.
Распиновка порта кассеты выглядит следующим образом (верхняя и нижняя сторона имеют одинаковые контакты дважды):
А-1 , земля, земля
B-2 , + 5 В, 5 В постоянного тока
C-3 , MOTOR, управление двигателем, ок. 6 Вольт питания двигателя
D-4 , READ, ввод данных, чтение данных из набора данных
E-5 , ЗАПИСЬ, Вывод данных, запись данных в набор данных
F-6 , SENSE, обнаружение, если нажата одна из клавиш PLAY, RECORD, F.FWD или REW
Моя текущая идея заключается в следующем:
На основе Синей книги сопряжения C64 (начиная со стр. 29) аппарат использует уровень TTL на порте READ и WRITE, поэтому я предполагаю, что могу напрямую подключить вывод PWM от Arduino к выводу READ.
Мне также нужно взаимодействовать с контактом SENSE. Я думаю, что я могу напрямую подключить это также к одному из цифровых ПИН-кодов и написать цифровое НИЗКОЕ значение, когда мне нужно будет сигнализировать о состоянии нажатой кнопки. Это верно?
Позже я хочу обнаружить наличие сигнала + 6V на выводе MOTOR. Некоторые загрузчики останавливают набор данных в середине процесса загрузки, поэтому я должен обнаружить это, чтобы правильно эмулировать ленту. Должен ли я использовать какой-то резистор для ограничения тока или я могу подключить его напрямую? Может быть, я должен использовать реле там?