Симулятор Arduino Altair 8800
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 36 | ||||
| × | 36 | ||||
| × | 36 | ||||
| × | 36 | ||||
| × | 17 | ||||
| × | 8 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
Если вы хотите создать это, но вам не нравится идея начинать полностью с нуля, ознакомьтесь с Комплект Криса Дэвиса "Альтаир-Дуино" который приходит с всеми компонентами, печатной платой, корпусом и предварительно запрограммированной Arduino Due!
Вот несколько изображений других авторов, которые создали этот проект и сделали его своим:
- Алан Лоутер нашел красивый металлический корпус для своей версии и подключил Raspberry Pi для ввода / вывода и синтеза речи.
- Мартин Цумр сделал действительно красивую коробку из дерева.
- Крис Дэвис ( kb0wwp ) сделал Печатная плата и красивый чехол.
- Джастин Дэвис сделал Щит Альтаира для Arduino Due.
Если кто-нибудь еще захочет поделиться своим творением, дайте мне знать, и я опубликую его здесь. Я бы хотел увидеть множество вариантов, которые придумывают люди!
Долгое время я думал, что было бы здорово поиграть с компьютером Altair 8800. Но рабочие винтажные Альтаеры - редкость и, следовательно, дорогие:они легко могут стоить от 1500 до 2500 долларов, если они вообще есть. Есть и другие варианты, такие как altairclone.com, но они все еще стоят 600 долларов, что для меня слишком много, чтобы тратить их на компьютер, который, хотя и очень крутой, будет иметь ограниченное применение. К счастью, Майк Дуглас, создатель клона Альтаира, предоставил сообществу все старые документы и программное обеспечение, которые он выследил и использовал при создании клона. Благодаря работе Майка, мы получили огромное количество информации о внутреннем устройстве Altair и его наиболее популярных периферийных устройствах.
В какой-то момент я взглянул на спецификации Arduino Mega 2560 и начал задаваться вопросом, хватит ли на нем контактов ввода-вывода, чтобы просто подключить светодиоды и переключатели с передней панели Altair и написать свое собственное программное обеспечение эмулятора. Оказывается, Arduino Mega имеет точно нужное количество контактов ввода / вывода. Так что мне просто нужно было создать своего собственного клона Альтаира.
Использование Arduino Mega для управления симулятором работало нормально, и его было просто настроить, но эмуляция работает только на 25% от скорости Altair и может обеспечить только 6 КБ эмулируемой ОЗУ (хотя в те времена это было бы много. ). Емкость постоянной памяти (для сохранения программ / данных, созданных в симуляторе) также ограничена, поскольку EEPROM Mega содержит только 4 КБ.
Arduino Due имеет достаточно памяти для поддержки 64 КБ эмулируемой оперативной памяти и работает намного быстрее, чем Mega. Кроме того, Due может сохранять данные во флэш-память во время выполнения. Это позволяет использовать любую часть флэш-памяти 512 КБ, не используемую самим симулятором, для постоянного хранения.
Использование Due Теперь у меня есть симулятор Altair 8800, который работает примерно с исходной скоростью, обеспечивает 64 КБ эмулируемой ОЗУ, включает в себя множество программного обеспечения Altair и по-прежнему может предоставить 32 КБ полупостоянного хранилища для загрузки и сохранения программ и данных в эмуляторе.
Моей целью в этом проекте было максимально приблизиться к ощущениям «настоящего» Altair 8800 при работе с симулятором. Это включает в себя то, что подсветка передней панели должна максимально отражать реальное поведение. Одним из критериев для этого было то, что должна быть возможность играть в игру «Kill-the-Bit» на передней панели - и это:
Оказывается, симуляция достаточно верна оригиналу, и даже музыкальная демонстрация Altair 8800 работает. Обратите внимание, что это зависит от AM-радио, улавливающего электромагнитные помехи, создаваемые схемами Альтаира!
В свое время компания Processor Technology выпустила небольшую плату расширения для Altair (всего несколько конденсаторов и резисторов) с сопутствующим программным обеспечением, которое превратило Altair в респектабельную музыкальную систему (для того времени). Такие же дополнения могут быть внесены в Симулятор (см. Документацию), что позволяет проигрывать мелодии, созданные для музыкальной системы того времени. Вот пример:
Еще одним исторически важным дополнением к Altair была графическая плата Cromemco Dazzler. Используя программное или аппаратное расширение, Simulator также может эмулировать эту плату:
Еще одно программно-аппаратное расширение позволяет симулятору эмулировать графическую карту Processor Technology VDM-1:
Конечно, в конце концов, у меня нет оригинального Altair, поэтому вся информация о том, как он работает, должна была быть взята из документов и видео (см. Благодарности ниже). Могут быть некоторые незначительные различия, но в целом я думаю, что он довольно хорошо воспроизводит исходное поведение. Одно известное (и преднамеренное) отличие - это индикатор состояния HLDA:на оригинале он сигнализирует, что ЦП подтвердил остановку внешним устройством. Эта функция никогда не используется в симуляторе, поэтому здесь она сигнализирует, что файл (серийный / магнитный захват / воспроизведение) в настоящее время открыт.
Основные моменты
- Точно воспроизводит поведение элементов передней панели Altair.
- Работает примерно с той же скоростью, что и оригинальный Altair 8800 (при использовании Arduino Due), или 25% исходной скорости при использовании Arduino Mega.
- Размер эмулируемой ОЗУ составляет 64 КБ (срок) или 6 КБ (мегабайт).
- В эмулятор включен ряд программ 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. Таким образом, любое устройство с поддержкой Bluetooth может служить терминалом для Altair.
- На Arduino Due можно одновременно использовать как основной последовательный интерфейс (USB), так и интерфейс Serial1 (контакты 18/19).
- Данные, отправленные на каждое последовательное устройство (включая ленту ACR), могут быть захвачены и воспроизведены в 256 файлах, которые хранятся в локальном хранилище Arduino (EEPROM или FLASH).
- Кассетный интерфейс поддерживает использование команд CSAVE / CLOAD в расширенном BASIC (поддержка осуществляется автоматически, взаимодействие с пользователем не требуется). Отлично подходит для разработки ваших собственных программ на BASIC!
- Эмулирует графическую плату Cromemco Dazzler (требуется дополнительное оборудование / программное обеспечение, см. здесь).
- Эмулирует плату видеотерминала VDM1 с процессорной технологией (требуется дополнительное оборудование / программное обеспечение, см. здесь).
- Эмулирует до 16 дисков 88-DCDD (4 в конфигурации по умолчанию). Эмуляция дискового накопителя не является обязательной, но требует подключения SD-карты к заголовку SPI Arduino. Поддерживается только при использовании Arduino Due.
- Эмулирует контроллер жестких дисков 88-HDSK с подключенными до 4 жестких дисков (1 в конфигурации по умолчанию) и 4 пластинами на каждый.
- Эмулирует плату 88-RTC-VI с часами реального времени и обработкой векторных прерываний. Это позволяет использовать Altair Time Sharing Basic.
- 256-байтовые страницы памяти можно сохранять в постоянное хранилище и загружать обратно в память. Это обеспечивает простой способ сохранения программ, введенных с помощью переключателей на передней панели.
- Многие настройки можно легко изменить с помощью встроенного редактора конфигурации.
При использовании Due имейте в виду, что все, что было захвачено или сохранено в симуляторе, будет стерто, если вы загрузите новую версию эскиза в Due. Это связано с тем, что сохраненные данные хранятся во флэш-памяти, которая стирается при загрузке нового скетча (у Due нет EEPROM для постоянного хранения). Если SD-карта подключена к Due, сохраненные данные хранятся на SD-карте. В этом случае данные не потеряются при загрузке нового скетча.
Документация
Поскольку симулятор работает точно так же, как Altair 8800, оригинальная документация Altair (которую легко найти в Google) предоставит всю информацию, необходимую для управления переключателями на передней панели.
Тем не менее, симулятор включает в себя ряд дополнительных функций и встроенное программное обеспечение для Altair, которые доступны через переключатели AUX1 / AUX2 на передней панели (они были включены, но не использовались на оригинальном Altair). Эта функциональность объясняется в отдельном документе, который я написал при разработке программного обеспечения для симулятора. Документ состоит из многих страниц, и информация, содержащаяся в нем, перегрузит эту страницу, поэтому, пожалуйста, обратитесь к файлу Documentation.pdf в исходном репозитории.
Инструкции по сборке
Одна из целей состояла в том, чтобы использовать как можно меньше схем поддержки. И Arduino Mega, и Due имеют достаточно контактов ввода-вывода для прямого подключения всех элементов передней панели. Единственная необходимая дополнительная схема - это транзисторы и резисторы для управления 36 светодиодами (если бы светодиоды были подключены непосредственно к выходным контактам Aruino и слишком много включалось одновременно, общий ток превысил бы ограничения Arduino).
Создание полных схем для этого проекта было бы утомительным, повторяющимся (36 идентичных схем светодиодных драйверов, проводка для 32 переключателей) и не очень полезно. Таким образом, документ схемы вместо этого содержит подробные таблицы о том, какие элементы подключаются к каким контактам Arduino, и схемы для отдельных подсхем (например, драйверов светодиодов). Я также добавил файл Fritzing, чтобы показать расположение компонентов драйвера светодиода на плате.
Чтобы создать переднюю панель, я начал с высококачественного сканирования передней панели Altair (можно найти здесь, на сайте www.vintage-computer.com) и распечатал его в копировальном магазине на картоне. В качестве основы (чтобы удерживать переключатели и светодиоды на месте) я использовал лист металла 22 калибра, используя обычную дрель, чтобы проделать отверстия для светодиодов и переключателей. Цепи драйверов светодиодов припаяны к кускам монтажной платы, которые припаяны непосредственно к светодиодам, которые, в свою очередь, удерживаются на месте металлическим листом.
Передняя панель удерживается на месте и в вертикальном положении с помощью простого деревянного ящика. Коробка не такая глубокая, как у оригинального Altair (потому что она должна удерживать только переднюю панель и Arduino).
Чтобы подключить переключатель включения / выключения на передней панели, я просто добавил к коробке розетку (такую же, как на самой Arduino), подключил ее к переключателю на передней панели, а оттуда - к вилке питания, которая подключается к Arduino.
При использовании Arduino Due можно включить эмуляцию до 16 дисководов 88-DCDD, подключив SD-карту к порту SPI Due. На последней странице документа «Схема» подробно показана необходимая проводка.
Перед загрузкой скетча в Arduino Due обязательно переключите настройку оптимизации компилятора Arduino на «производительность». По умолчанию он установлен на «размер» (не уверен, почему, поскольку у Due 512 КБ флэш-памяти). Для этого загрузите файл
c:\ Users \ [пользователь] \ 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, мне приходилось полагаться на информацию из Интернета. Обучающие видео по Altair 8800, созданные Майком Дугласом (deramp5113) с altairclone.com, очень помогли, и их очень интересно смотреть. Помимо создания видеороликов, Майк собрал множество руководств по аппаратному и программному обеспечению, связанных с Altair, и разместил их на своем сайте.
(Обратите внимание, что видеоролики Майка очень полезны, чтобы получить представление о том, что делать с симулятором после его сборки)
Инструмент Мартина Эберхарда ADEXER оказался бесценным для низкоуровневой отладки поддержки жесткого диска. Он также написал два загрузчика, используемых в симуляторе:загрузчик с комбинированным диском (CDBL) для загрузки дисков и мини-дисков, а также загрузчик с жесткого диска (HDBL), который короче и стабильнее оригинала.>
Хотя я сам написал весь код, включая эмуляцию процессора, я черпал вдохновение из проекта базовой модели i8080, когда дело дошло до эффективного вычисления полупереноса и инструкции DAA.
Симулятор включает в себя оригинальное программное обеспечение для Altair 8800. Еще одно большое спасибо Майку Дугласу, который провел бесчисленные часы, выслеживая, собирая и заставляя это программное обеспечение работать, а затем разместил все это на своем веб-сайте altairclone.com:
- Altair 4K BASIC (MITS 1975)
- Altair Extended ROM Basic (MITS 1975)
- Altair Time Sharing Basic (MITS 1977)
- Игра Kill-the-Bit (Дин МакДэниел, 1975 г.)
- Игра в понг с использованием передней панели (Майк Дуглас)
- Музыка "Дейзи, Дейзи ..." (Стив Домпье, 1975 г.)
- Музыкальная система (процессорная технология 1977 г.)
- Система программирования MITS II (MITS 1976)
- Монитор под ключ Altair (MITS 1977)
- Диагностика ЦП i8080 (Microcosm Associates, 1980).
- Программа-тренажер для процессора i8080 (Фрэнк Д. Крингл, 1994 г., Ян Бартоломью, 2009 г.)
Образы дисков и жестких дисков (находящиеся в подкаталоге disks исходного архива) также были взяты с altairclone.com и deramp.com (личный веб-сайт Майка Дугласа). К ним относятся CP / M, различные версии дискового BASIC, Altair DOS (включая Fortran) и многое другое. Опять же, Майк проделал потрясающую работу, обнаружив все это программное обеспечение, а затем создал работающие образы дисков, которые могут использоваться сообществом Altair. Я использовал только избранные программы, так что вы можете перейти на altairclone.com или deramp.com и проверить еще кое-что.
Дискуссионный форум
Крис Дэвис из Altairduino.com создал группу Google для обсуждения вопросов, связанных с Альтаир-Дуино:
https://groups.google.com/forum/#!forum/altair-duino
Не стесняйтесь посещать и участвовать в обсуждении!
Код
Код симулятора Arduino Altair 8800
https://github.com/dhansel/Altair8800Схема
Вместо предоставления полной схемы (очень повторяющейся) в этом документе описывается, какие контакты для подключения к каким элементам передней панели, и представлены схемы для подсхем (например, схем драйверов светодиодов). Попытка показать компоновку монтажной платы, к которой подключены светодиоды. к. Там немного людно, но должно быть достаточно, чтобы увидеть, как все взаимосвязано. Важно, чтобы компоненты каждого светодиода занимали не более 5 мест на плате. Таким образом светодиоды могут быть расположены достаточно близко друг к другу, чтобы передняя панель имела исходный размер. ledstrip_4OVCpRyKQS.fzzПроизводственный процесс