Симулятор компьютера Altair 8800 на Arduino


Персональный компьютер Altair 8800, появившийся в 1975 году, стал по-настоящему знаковой машиной и смог доказать всему миру – за устройствами на микропроцессорах будущее.

В сравнении со своим предшественником, первым «микрочиповым» компьютером Micral, Altair оказался чрезвычайно успешным на рынке продуктом. Его создатель, Эд Робертс, предполагал, что ему удастся продать всего пару-тройку сотен машин, да и то только энтузиастам. Однако в первый же месяц было реализовано несколько тысяч компьютеров.

Внешний вид персонального компьютера Altair 8800Altair 8800 по праву считается первой искрой, из которой разгорелся пожар микрокомпьютерной революции. Компьютерная шина, разработанная для Altair, де-факто задала стандарт целой отрасли. А Altair BASIC, первый язык программирования для этой машины, был разработан небезызвестной компанией Micro-Soft (тогда ее название еще писалось через дефис).

Более подробно про данный компьютер вы можете прочитать в статье на Хабре или в Википедии. А мы в данной статье рассмотрим создание симулятора компьютера Altair 8800 на основе платы Arduino Mega (также можно использовать плату Arduino Due).

Внешний вид симулятора компьютера Altair 8800 на основе платы Arduino

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Mega 2560 (купить на AliExpress) или Arduino Due (купить на AliExpress).
  2. Светодиод – 36 шт. (купить на AliExpress).
  3. NPN транзистор общего назначения – 36 шт.
  4. Резистор 10 кОм – 36 шт. (купить на AliExpress).
  5. Резистор 150 Ом – 36 шт. (купить на AliExpress).
  6. Переключатель (Mini toggle switch SPDT On-On) – 16 положений переключения (SW15-0) и переключатель питания (17 шт.).
  7. Переключатель с самовозвратом (переключатель без фиксации положения, Momentary switch SPDT (On)-Off-(On)) для переключения функций (RUN/STOP/EXAMINE...) – 8 шт.
  8. Металлический лист для передней панели.
  9. SparkFun Bluetooth Modem (опционально). Если его подключить к контактам TX/RX платы Arduino, то нашим симулятором можно будет управлять с любого устройства, поддерживающего технологию Bluetooth (компьютер, смартфон и т.п.). В данном случае Bluetooth модем будет выступать в роли последовательного терминала для нашего симулятора.
  10. Слот для карт microSD и microSD карта (опционально). Нужна только для эмуляции диска компьютера, напрямую не участвует в работе симулятора.

Программное обеспечение

  1. Arduino IDE.
  2. Библиотека Arduino DueFlashStorage. Плата Arduino Due не имеет собственной энергонезависимой памяти EEPROM, но с помощью данной библиотеки можно сохранять данные на флэш память на чипе. Содержимое данной памяти стирается при загрузке новой программы в Arduino Due.
  3. Библиотека Arduino Due soft_uart – аналог библиотеки SoftwareSerial. Позволяет сконфигурировать последовательный порт на любых цифровых контактах платы Arduino. Файлы из этой библиотеки включены в исходники программы симулятора, поэтому достаточно произвести лишь небольшие изменения чтобы интегрировать ее в симулятор.

Общие принципы создания проекта

Если вы хотите упростить сборку данного проекта, то можете посмотреть набор Chris Davis' Altair-Duino, в котором есть все необходимые компоненты, печатная плата, корпус и запрограммированная плата Arduino Due.

Также автор проекта (ссылка на оригинал приведена в конце статьи) выражает признательность всем энтузиастам, которые помогали ему в развитии данного проекта:

Долгое время автор проекта думал о том, что как здорово было бы иметь компьютер Altair 8800, с которым можно было бы поиграть. Но работающие винтажные альтаиры редки и, следовательно, очень дороги, цена на них может доходить до 1500-2500 долларов, если их вообще можно достать. Есть некоторые другие варианты, доступные на сайте altairclone.com, но это все равно обойдется в сумму около 600 долларов, что все равно достаточно дорого. К счастью, Майк Дуглас, создатель клона Altair, предоставил сообществу все старые документы и программное обеспечение, которые он разыскал и использовал при создании клона. Благодаря работе Майка в открытом доступе имеется огромное количество информации о внутренней работе компьютера Altair и его наиболее популярных периферийных устройствах.

В какой-то момент автор проекта просматривал спецификации платы Arduino Mega 2560 и начал задаваться вопросом, хватит ли у нее контактов ввода-вывода, чтобы просто подключить светодиоды и переключатели с передней панели Altair и написать собственное программное обеспечение для эмулятора. Как оказалось, плата Arduino Mega имеет точно необходимое количество контактов ввода-вывода для данной задачи. Так что автору проекта пришлось “поневоле” создать свой собственный клон Альтаира.

Внешний вид собранной конструкции симулятора компьютера Altair 8800Использование платы Arduino Mega для управления симулятором работало нормально и проект был простым в настройке, но эмуляция выполнялась со скоростью всего около 25% от скорости Altair, и Arduino Mega может обеспечить только 6 КБ эмулируемой оперативной памяти (хотя в те времена это было бы много). Емкость постоянного хранилища (для сохранения программ/данных, созданных в симуляторе) также ограничена, поскольку EEPROM Arduino Mega вмещает всего 4 КБ.

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

Используя Arduino Due, у автора проекта теперь есть симулятор Altair 8800, который работает примерно с оригинальной скоростью Альтаира, обеспечивает 64 КБ эмулируемой оперативной памяти, включает в себя множество программного обеспечения Altair и при этом может еще предоставлять 32 КБ полупостоянного хранилища для загрузки и сохранения программ и данных в эмуляторе.

Цель автора проекта состояла в том, чтобы максимально приблизиться к "реальному" ощущению Altair 8800 при работе с симулятором. Для него было важно, чтобы подсветка передней панели максимально отражала реальное поведение Альтаира. Одним из критериев для этого было то, что должна была иметься возможность играть в игру "Убить бит" на передней панели. Выглядело это следующим образом:

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

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

Другим исторически важным расширением для Altair была графическая плата Cromemco Dazzler. Используя программное или аппаратное расширение, наш симулятор сможет также эмулировать эту графическую плату:

Эмулирование графической платы Cromemco Dazzler (часть 1) Эмулирование графической платы Cromemco Dazzler (часть 2)

Также доступно еще одно расширение, которое позволяет нашему симулятору эмулировать графическую карту VDM-1 от компании Processor Technology:

Эмулирование графической карты VDM-1 от компании Processor Technology

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

Основные моменты при создании симулятора

К особенностям рассматриваемого здесь симулятора компьютера Altair 8800 можно отнести следующие:

  • точно воспроизводит поведение элементов передней панели Altair;
  • работает примерно с той же скоростью, что и оригинальный Altair 8800 (при использовании Arduino Due), или с 25% первоначальной скоростью при использовании Arduino Mega;
  • эмулируемый размер оперативной памяти составляет 64 КБ (Due) или 6 КБ (Mega);
  • ряд программ Altair включены и могут быть легко загружены в эмулятор, в том числе Pong, Altair 4K BASIC (первый продукт Microsoft), Altair extended BASIC, MITS Programming System II (только в настоящее время), Altair Time Sharing BASIC (позволяет нескольким пользователям использовать BASIC одновременно);
  • примеры программ BASIC и Assembler включены в программное обеспечение эмулятора и могут быть легко загружены в BASIC/Assembler;
  • эмулирует одну плату 88-SIO, 88-2SIO и 88-ACR (интерфейс аудиокассетного магнитофона). Каждое моделируемое последовательное устройство может быть подключено к последовательному интерфейсу Arduino. По умолчанию два наиболее распространенных (порт 88-SIO и порт 88-2SIO 1) подключены к основному последовательному порту Arduino со скоростью 115200 бод 8n1, доступ к которому осуществляется через USB-кабель. Автор рекомендует подключить контакты последовательного порта модуля Bluetooth к последовательным выводам RX/TX платы Arduino. Таким образом, любое устройство с поддержкой Bluetooth может служить терминалом для Altair;
  • на Arduino Due одновременно можно использовать как основной последовательный интерфейс (USB), так и интерфейс Serial1 (контакты 18/19);
  • данные, отправляемые на каждое последовательное устройство (включая ленту ACR), могут быть записаны и воспроизведены в виде до 256 файлов, которые хранятся в локальном хранилище Arduino (EEPROM или FLASH);
  • интерфейс кассеты поддерживает использование команд CSAVE/CLOAD в расширенном BASIC (поддержка осуществляется автоматически без необходимости взаимодействия с пользователем). Отлично подходит для разработки ваших собственных BASIC программ!
  • эмулирует графическую плату Cromemco Dazzler (требуется дополнительное оборудование / программное обеспечение, см. здесь – https://www.hackster.io/david-hansel/dazzler-display-for-altair-simulator-3febc6);
  • эмулирует плату видеотерминала VDM1 с технологией процессора (требуется некоторое дополнительное оборудование/программное обеспечение, см. здесь);
  • эмулирует до 16 дисков 88-DCDD (4 в конфигурации по умолчанию). Эмуляция дисковода необязательна, но требует подключения SD-карты к заголовку SPI Arduino. Поддерживается только при использовании Arduino Due;
  • эмулирует контроллер жесткого диска 88-HDSK с подключением до 4 жестких дисков (1 в конфигурации по умолчанию) и 4 пластинами на устройство;
  • эмулирует плату 88-RTC-VI с тактовой частотой реального времени и векторной обработкой прерываний. Это позволяет запускать Altair Time Sharing Basic;
  • 256-байтовые страницы памяти могут быть сохранены в постоянное хранилище и загружены обратно в память. Это обеспечивает простой способ сохранения программ, введенных с помощью переключателей на передней панели;
  • большинство настроек можно легко изменить с помощью встроенного редактора конфигурации.

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

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

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

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

Инструкции по сборке симулятора

Одна из целей автора проекта состояла в том, чтобы использовать как можно меньше вспомогательных схем. Как Arduino Mega, так и Arduino Due имеют достаточно контактов ввода-вывода для прямого подключения всех элементов передней панели. Единственная необходимая дополнительная схема – это транзисторы и резисторы для управления 36 светодиодами (если бы светодиоды были подключены непосредственно к выходным выводам Aruino и их слишком много одновременно включилось, то общий ток превысил бы предельно допустимый ток для платы Arduino).

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

Скачать эти схемы можно по следующим ссылкам:

Чтобы создать переднюю панель, автор проекта начал с высококачественного сканирования передней панели Altair (можно найти по адресу http://www.vintage-computer.com/images/altairfrontpanelscan.jpg) и напечатал его в копировальной мастерской на карточках. Для поддержки светодиодов (чтобы фактически удерживать переключатели и светодиоды на месте) он использовал лист металла 22 калибра. Он использовал обычную дрель, чтобы создать отверстия для светодиодов и переключателей. Схемы управления светодиодами припаяны к кускам макетной платы stripboard, которые припаяны непосредственно к светодиодам, которые, в свою очередь, удерживаются на месте металлическим листом.

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

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

Внешний вид внутренней конструкции симулятора Altair

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

Перед загрузкой скетча в плату Arduino Due обязательно переключите настройку оптимизации компилятора Arduino на "производительность". По умолчанию для него установлено значение "size" (не уверен, почему, поскольку плата Arduino Due имеет флэш-память 512 Кб). Для этого загрузите файл

в текстовый редактор и измените любое вхождение "-Os" на "-O3". Вы можете пропустить этот шаг, но тогда симулятор будет работать значительно медленнее.

Программное обеспечение симулятора также может работать на простой плате Arduino (Mega или Due) без подключения каких-либо элементов управления на передней панели. Это позволяет запускать достаточно много включенных программ (те, которые в основном используют последовательный терминал, а не элементы передней панели). Для этого отредактируйте исходный файл config.h и установите #define STANDALONE 1 (вместо 0). Обратитесь к разделу "Возможности отладки" ("Debugging capabilities") в документации, чтобы узнать, как управлять элементами виртуальной передней панели при этой настройке. Имейте в виду, однако, что это не предполагаемое использование симулятора. Автор проекта предлагает использовать полностью программные эмуляторы на базе ПК, если вы не хотите создавать аппаратное обеспечение передней панели. Исходный файл config.h содержит ряд переключателей, которые включают/исключают функциональность симулятора. Настройки по умолчанию работают хорошо, но если вы хотите настроить симулятор, то с этого и нужно начать.

Благодарности за помощь в работу над проектом

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

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

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

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

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

Автором проекта также были использованы образы дисков и жестких дисков (включенные в подкаталог "диски" исходного архива) с сайта altairclone.com, а также с сайта https://deramp.com/ (личный веб-сайт Майка Дугласа). К ним относятся CP/M, различные версии disk BASIC, Altair DOS (включая Fortran) и многое другое. Опять же, Майк проделал потрясающую работу, найдя все это программное обеспечение, а затем создав функционирующие образы дисков, которые могут быть использованы сообществом Altair. Автор проекта использовал только часть программного обеспечения, так что вы, возможно, захотите использовать дополнительные материалы с сайтов altairclone.com и deramp.com.

Исходный код программы (скетча)

Все исходные файлы программ для этого амбициозного проекта симулятора компьютера Altair 8800 можно скачать по ссылке – https://github.com/dhansel/Altair8800.

Источник статьи

(Проголосуй первым!)
Загрузка...
877 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *