Возвращение к проектам — Постройка реплики Apple //e. Первая фаза.
Я долгое время не мог уделять время своему хобби из-за личных обстоятельств и перемен в жизни, но очень хотел к нему вернуться. Теперь, когда у меня наконец появилось свободное время, я решил собрать реплику Apple //e на базе существующего проекта NanoApple2 в качестве разминки перед возвращением к серьезной разработке.
Я не хочу просто собрать на столе прототип из проводов. Я хочу создать полностью рабочую реплику Apple IIe для своей коллекции. Мозгом системы выступает FPGA Sipeed Tang Nano 20K, выполняющая аппаратную симуляцию, в паре с Sipeed M0S Dock, который работает как системный супервизор для SD-карты и хостинга USB.
Вместо кучи проводов и модулей я спроектирую единую печатную плату на заказ, которая сочетает в себе историческую достоверность с современными удобствами. Вот краткий обзор того, что будет под капотом:
-
Клавиатура: Кастомная матрица на 64 клавиши под управлением контроллера ATmega32U4. Я буду использовать линейные переключатели Gateron Milky Yellow Pro для имитации тактильных ощущений винтажных клавиатур, а сверху установлю кастомные кейкапы профиля DSA с сублимационной печатью.
-
Маршрутизация USB: Пассивный хаб USB 2.0, интегрированный прямо на плату. Он будет обслуживать внутреннюю клавиатуру, предоставляя при этом два порта USB-A на задней панели для кастомных внешних джойстиков.
-
Аудио: Аудиоусилитель PAM8302, раскачивающий внутренний динамик и задний разъем для наушников, с управлением через колесико громкости.
-
Корпус: Напечатанный на 3D-принтере, с светодиодом питания и красными светодиодами активности дисковода.
Чтобы не усложнять проект, я составил поэтапный план, позволяющий проверить все базовые технологии на столе с использованием готовых модулей до заказа кастомной платы.
Первая фаза была полностью посвящена проверке работы основного мозга на FPGA. Я справился с этим, но заставить Tang Nano 20K и M0S Dock общаться друг с другом оказалось непросто. Цель была запустить ядро Apple II на FPGA, использовать M0S Dock для подключения USB-клавиатуры и загрузиться с SD-карты. Я трижды проверил проводку, убедился, что SD-карта отформатирована в FAT32, и менял клавиатуры. Ничего не помогало. M0S Dock попросту отказывался инициализировать USB-порт, оставляя клавиатуру полностью мертвой.
Моя основная рабочая станция работает на Linux Mint. Поскольку я делал всё через виртуалку Linux с пробросом USB для прошивки, я начал подозревать, что мой тулчейн теряет пакеты. Я решил полностью исключить эту переменную. Зашел на eBay и купил б/у ноутбук на Win 10 за 130 австралийских долларов с доставкой (i5, 8 ГБ RAM, 128 ГБ SSD). Я подумал, что иметь отдельную «железную» машину на Windows всё равно полезно для подобных ситуаций, да и софт для моего плоттера Cricut будет работать намного стабильнее. Я скачал официальную программу BL Dev Cube, рекомендованную в репозитории NanoApple2, и попытался прошить ей M0S Dock. Ничего не изменилось.
Когда официальный софт не сработал, я перешел к перебору. Я пытался прошивать разные файлы один за другим (например, загрузчик плюс прошивка компаньона). Перепробовал кучу комбинаций. Ни одна не сработала. И тут мне пришла в голову мысль: возможно, последний релиз в репозитории просто сломан для этой конкретной связки железа.
Я начал листать вниз, просматривая старые релизы на странице проекта на GitHub. Я заметил, что к одному из предыдущих релизов было прикреплено гораздо больше файлов. Внимательно изучив список, я кое-что заметил — вместо файла fpga_companion_nano20k.bin, с которым я мучился, там был файл с названием fpga_companion_m0sdock.bin. Я подумал: «А давай-ка попробуем и его».
Я прошил этот bin-файл и подал питание на Tang Nano. И сразу же заметил кое-что новое. Светодиод на Tang Nano, который до этого никогда не горел, вдруг начал менять цветам. А вот это уже что-то новенькое! Я нажал F12 на подключенной USB-клавиатуре, и на экране появилось OSD-меню. У меня получилось.
Я погулял по меню, смонтировал образ жесткого диска «Total Replay» и запустил «Karateka». Я просто сидел и наслаждался первыми экранами игры. Звука по HDMI еще не было, но это совершенно нормально, так как позже я всё равно соберу правильную аудиоцепь с выделенным усилителем. Я выключил стенд и пошел спать довольный, зная, что базовая логика реально работает, и я могу переходить к следующей фазе.
Поскольку официальные инструкции несколько расплывчаты, вот точная последовательность действий, чтобы заставить это железо работать вместе:
-
Подготовка SD-карты: Вы должны использовать карту MicroSD на 32 ГБ, отформатированную строго в FAT32.
-
Конвертация файлов: Скачайте коллекцию «Total Replay», в которую включено большинство известных игр. Если они в формате
.2MG, вам придется отрезать от них 64-байтные заголовки, чтобы превратить их в сырые файлы.HDV, прежде чем ядро сможет их прочитать. Скопируйте получившиеся файлы.HDVна SD-карту. -
Прошивка правильной версии: Не используйте последний релиз компаньона, если вы используете M0S Dock. Прокрутите вниз до старых релизов на FPGA-Companion GitHub и скачайте
fpga_companion_m0sdock.bin. Прошейте именно этот файл. -
Загрузка: Вставьте SD-карту, подключите клавиатуру к M0S Dock через адаптер USB-C OTG и подайте питание на Tang Nano 20K. Нажмите F12, чтобы вызвать OSD-меню и смонтируйте образ жесткого диска Total Replay перед тем как сделать Cold Reset. Готово!
Дальше по плану вторая фаза: Прототипирование матрицы клавиатуры. Задача здесь — собрать небольшую тестовую матрицу на макетной плате, используя отладочную плату ATmega32U4 с microUSB, несколько кнопок и стандартные диоды 1N4148. Мне нужно будет написать и настроить кастомную прошивку, чтобы привязать эти переключатели напрямую к клавишами Apple II, доказав, что M0S Dock распознает кастомный ввод, прежде чем браться за разводку печатной платы.
Я в предвкушении и немного побаиваюсь части с программированием, так как давненько этим не занимался. Сегодня я также заказываю модуль аудиоусилителя PAM8302, чтобы он был готов к моменту, когда я закончу с проверкой концепции клавиатуры.
