Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Набор для симулятора Altair 8800 на базе Arduino — сборка и программирование ретро-компьютера

Компоненты и материалы

Компонент Количество Примечание
Arduino Mega 2560 1 Или Arduino Due (необходима только одна плата)
Arduino Due 1 Или Arduino Mega (необходима только одна плата)
Светодиоды (обычные) 36 Для индикаторов передней панели
Транзисторы NPN общего назначения 36 Для драйверов светодиодов
Резисторы 10 кОм 36 Базовые резисторы для транзисторов
Резисторы 150 Ом 36 Ограничительные резисторы для светодиодов
Мини-переключатели SPDT On-On 17 16 для адресных переключателей (SW15-0) + 1 для питания
Моментарные переключатели SPDT (On)-Off-(On) 8 Для функциональных клавиш (RUN/STOP/EXAMINE и др.)
Лист металла для задней панели 1 Для крепления переключателей и светодиодов
Bluetooth-модем SparkFun BlueSMiRF Silver 1 (опционально) Позволяет использовать любой Bluetooth-устройство как последовательный терминал
microSD-карта с адаптером 1 (опционально) Только для эмуляции дисковода (необходима для Arduino Due)

Программное обеспечение и онлайн-сервисы

О проекте

Давно хотел иметь компьютер Altair 8800 для экспериментов. Но работающие старинные Altair редки и дороги ($1500–2500). Существуют альтернативы (например, altairclone.com), но они стоят около $600 — слишком много для компьютера ограниченного применения. К счастью, Майк Дуглас, создатель Altair Clone, опубликовал все найденные им документы и ПО, что дало огромное количество информации об устройстве Altair и его периферии.

Изучая спецификации Arduino Mega 2560, я задумался: хватит ли его ножек ввода-вывода для прямого подключения светодиодов и переключателей передней панели Altair и написания собственного эмулятора? Оказалось, что у Arduino Mega в точности нужное количество ножек. Так родился этот проект.

Набор для симулятора Altair 8800 на базе Arduino — сборка и программирование ретро-компьютера

Использование Arduino Mega работало нормально и было простым в настройке, но эмуляция шла лишь на ~25% скорости оригинала и обеспечивала всего 6 КБ эмулируемой ОЗУ (хотя в то время это было много). Постоянное хранилище (EEPROM) ограничено 4 КБ.

Arduino Due обладает достаточной памятью для полных 64 КБ эмулируемой ОЗУ и работает значительно быстрее. Кроме того, Due может сохранять данные во флеш-памяти во время работы. Это позволяет использовать любую незанятую симулятором часть 512 КБ флеш-памяти для постоянного хранилища.

С Arduino Due у меня получился симулятор Altair 8800, работающий на скорости оригинала, с 64 КБ ОЗУ, включающим множество ПО для Altair и предоставляющим 32 КБ полупостоянного хранилища для загрузки/сохранения программ и данных.

Цель — максимально приблизить ощущение работы с настоящим Altair 8800. Это включает точное поведение индикаторов передней панели. Один из критериев — возможность играть в игру «Kill-the-Bit» (Убей бит) на передней панели — и это работает:

Симуляция достаточно точна, чтобы даже работала демо-музыка Altair 8800. Обратите внимание: это основан на приёме электромагнитных помех от схемы Altair обычным AM-радиоприёмником!

В своё время компания Processor Technology выпускала небольшую плату-расширение (всего несколько конденсаторов и резисторов) с ПО, превращающим Altair в уважаемую музыкальную систему (на тот момент). Те же дополнения можно сделать и в симуляторе (см. документацию), что позволяет воспроизводить мелодии, созданные для той музыкальной системы. Пример:

Ещё одним исторически важным расширением была графическая плата Cromemco Dazzler. С помощью программного или аппаратного расширения симулятор также может эмулировать эту плату:

Набор для симулятора Altair 8800 на базе Arduino — сборка и программирование ретро-компьютера
Набор для симулятора Altair 8800 на базе Arduino — сборка и программирование ретро-компьютера

Другое расширение (программное/аппаратное) позволяет эмулировать видеокарту Processor Technology VDM-1:

Набор для симулятора Altair 8800 на базе Arduino — сборка и программирование ретро-компьютера

Конечно, у меня нет оригинального Altair, поэтому вся информация взята из документов и видео (см. благодарности). Могут быть незначительные отличия, но в целом поведение воспроизводится хорошо. Один известный (и намеренный) отличия — индикатор HLDA: на оригинале он сигнализирует, что CPU подтвердил остановку внешним устройством. Эта функциональность не используется в симуляторе, поэтому здесь он показывает, что файл (последовательный/запись/воспроизведение на ленте) сейчас открыт.

Основные возможности

Важно при использовании Due: все данные, захваченные или сохранённые в симуляторе, стираются при загрузке новой версии скетча, так как они хранятся во флеш-памяти, которая очищается при прошивке (у Due нет EEPROM). Если подключена SD-карта, данные сохраняются на неё и не теряются при перепрошивке.

Документация

Поскольку симулятор работает так же, как Altair 8800, оригинальная документация Altair (легко находится в Google) даёт всю информацию для работы с переключателями передней панели.

Однако симулятор включает дополнительные функции и встроенное ПО, доступные через переключатели AUX1/AUX2 на передней панели (они были на оригинале, но не использовались). Эта функциональность описана в отдельном документе, написанном в процессе разработки. Документ объёмный, поэтому смотрите файл Documentation.pdf в репозитории исходного кода.

Инструкции по сборке

Цель — минимизировать вспомогательную схемотехнику. И Arduino Mega, и Due имеют достаточно ножек для прямого подключения всех элементов передней панели. Дополнительная схема нужна только для драйверов 36 светодиодов (транзисторы + резисторы), иначе суммарный ток превысит допуски Arduino.

Полные схемы были бы утомительны и повторяющимися (36 одинаковых драйверов, проводка 32 переключателей). Вместо этого документ со схемами содержит подробные таблицы соответствия элементов пинам Arduino и схемы отдельных подсхем (например, драйверов светодиодов). Добавлен файл Fritzing, показывающий раскладку компонентов драйверов на монтажной плате.

Передняя панель сделана из качественного скана оригинальной панели Altair (найден на www.vintage-computer.com), распечатанного в копицентре на картоне. Для основы (чтобы держать переключатели и светодиоды) использован лист металла толщиной 22 gauge (ок. 0.6 мм), отверстия сверлены обычной дрелью. Драйверы светодиодов паяны на куски монтажной платы, которые припаяны прямо к светодиодам, закреплённым металлическим листом.

Передняя панель закреплена и держится вертикально простым деревянным ящиком. Ящик менее глубокий, чем у оригинального Altair (нужно разместить только панель и Arduino).

Набор для симулятора Altair 8800 на базе Arduino — сборка и программирование ретро-компьютера

Для подключения выключателя питания на передней панели я добавил гнездо питания (такое же, как на Arduino) к коробу, соединил его с выключателем панели, а оттуда — штекер, вставляемый в Arduino.

При использовании Arduino Due эмуляция до 16 дисководов 88-DCDD включается подключением SD-карты к SPI-порту Due. Последняя страница документа со схемами показывает необходимую проводку подробно.

Перед загрузкой скетча в Arduino Due обязательно переключите оптимизацию компилятора на «performance» (быстродействие). По умолчанию стоит «size» (размер), что замедляет симулятор. Для этого отредактируйте файл:

c:\Users\[user]\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.9\platform.txt

Замените все вхождения -Os на -O3. Этот шаг можно пропустить, но симулятор будет работать значительно медленнее.

ПО симулятора может работать и на «голом» Arduino (Mega или Due) без подключённых элементов передней панели. Это позволяет запускать многие встроенные программы (те, что используют בעיקר последовательный терминал, а не элементы панели). Для этого в файле config.h установите #define STANDALONE 1 (вместо 0). См. раздел «Отладочные возможности» в документации, как управлять виртуальными элементами панели в таком режиме. Но это не основной сценарий использования. Если не хотите собирать железо, лучше использовать полноценные программные эмуляторы на ПК. Файл config.h содержит множество переключателей для включения/исключения функций симулятора. Настройки по умолчанию работают хорошо, но если хотите настроить — начинайте отсюда.

Благодарности

Так как у меня нет Altair, я полагался на информацию из интернета. Инструкционные видео Майка Дугласа (deramp5113) с altairclone.com были огромной помощью и очень интересны. Кроме видео, Майк собрал множество руководств по железу и ПО Altair и выложил их на своём сайте.

(Видео Майка очень полезны, чтобы понять, чем заняться с симулятором после сборки.)

Инструмент ADEXER Мартина Эберхард был незаменим для низкоуровневой отладки поддержки жёстких дисков. Он также написал два загрузчика, используемых в симуляторе: комбинированный загрузчик дисков (CDBL) для загрузки с дисков и мини-дисков, а также загрузчик жёсткого диска (HDBL), который короче и стабильнее оригинала.

Хотя весь код, включая эмуляцию CPU, написан мной, я черпал вдохновение в проекте i8080 core model при реализации вычисления полупереноса и инструкции DAA.

Симулятор включает оригинальное ПО для Altair 8800. Огромная благодарность Майку Дугласу, который потратил бесчисленные часы на поиск, сборку и запуск этого ПО, а затем сделал его доступным на altairclone.com:

Образы дисков и жёстких дисков (в подпапке «disks» архива исходников) также взяты с altairclone.com и deramp.com (личный сайт Майка Дугласа). В них есть CP/M, разные версии дисковых BASIC, Altair DOS (включая Fortran) и многое другое. Майк сделал невероятную работу по поиску всего этого ПО и созданию рабочих образов дисков для сообщества Altair. Я использовал только часть — загляните на altairclone.com или deramp.com за остальным.

Форум обсуждения

Крис Дэвис с Altairduino.com создал группу Google для обсуждения вопросов, связанных с Altair-Duino:

https://groups.google.com/forum/#!forum/altair-duino

Присоединяйтесь и участвуйте в обсуждении!

Исходный код

Код симулятора Arduino Altair 8800
https://github.com/dhansel/Altair8800

Схемы

Вместо полных схем (очень повторяющихся) документ описывает, какие пины подключать к каким элементам передней панели, и даёт схемы подсхем (например, драйверов светодиодов).

Попытка показать раскладку монтажной платы для подключения светодиодов. Немного перегружено, но достаточно, чтобы увидеть связи. Важно: компоненты для каждого светодиода занимают не более 5 отверстий на плате, чтобы светодиоды можно было разместить достаточно близко для оригинального размера панели.

ledstrip_4OVCpRyKQS.fzz

Производственный процесс

  1. Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
  2. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  3. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  4. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  5. Создание пользовательских LED-часов с будильником — видно с 12 метров
  6. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  7. Оптимизированные решения питания для проектов на Arduino
  8. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  9. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  10. Своё рулевое управление (джойстик) для игр на Arduino