Как собрать Apple 1 и написать для него игру

в 16:28, , рубрики: 6502, diy или сделай сам, Игры и игровые приставки, Компьютерное железо

Как собрать Apple 1 и написать для него игру

Как собрать Apple 1 и написать для него игру - 1

Прошло 40 лет с момента выхода в свет компьютера Apple 1. Сегодня его возможности не дотягивают даже до простых микропроцессорных устройств или микроконтроллеров. Но в 1976-ом году эта новинка наделала много шума, говорилось даже о революции в мире ЭВМ. Предлагаю читателю вместе со мной собрать Apple 1, чтобы узнать, что же интересного в нём было, и написать какую нибудь программу.
Сразу скажу, собирал я его не за один раз. На поиск компонентов, сборку и отладку в свободное время, ушло три года, примерно столько же потом на отладку, и чтобы наконец собраться и написать эту статью.
 

Характеристики Apple 1

Тип: Персональный компьютер
Годы выпуска: июль 1976 — март 1977
Процессор: MOS 6502
Тактовая частота: 1мГц
Память: ПЗУ 256 Байт, ОЗУ 4кБ, расширяемые до 8 кБ
Видео: 40х24 символов
Изготовлено: около 200 штук

Немного истории.

Создателем Apple 1 является Стивен Возняк. Собственно на момент создания он ещё не назывался Apple 1. Да и самой компании Apple ещё не было. 
Стив увлекался проектированием радиоэлектронных устройств с раннего возраста. Первой его вычислительной машиной была «крем-сода», спроектированная на интегральных микросхемах без использования центрального процессора, и способная выполнять несложные математические действия. К сожалению я не смог найти ни фото, ни каких то описаний этого компьютера, только довольно скупые сведения от самого Стива, описанные в его книге. Судьба «крем-соды» тоже печальна — он сгорел, и попыток восстановить его не было. Позже, когда Стив работал над калькуляторами в НР, его знакомый, Аллен Баум, пригласил на встречу Клуба любителей компьютеров в Пало-Альто, Калифорния. Стиву сообщили, что эта встреча посвящена терминалами и видео технике. На тот момент он уже создал собственный терминал для работы в ARPANET, и имел представление о терминальной технике, только поэтому он и согласился пойти. Стив был скромным парнем, и знай он что речь будет про компьютеры, по его словам, он бы не пошёл туда.
На встрече он чувствовал себя не в своей тарелке, так как присутствующие обсуждали какие то непонятные микропроцессоры и компьютер Altair 8800. 
После встречи ему дали листок с описанием микропроцессора i8080A. Он решил изучить его на досуге, и понял, что это именно то, что он делал в своем первом ПК «крем-сода», и как можно было бы его сделать проще. В тот же день у него родилась архитектура будущего Apple 1. Но до сборки дело дошло только через несколько месяцев, которые ушли на изучение спецификаций новых микросхем и поиск комплектующих. Дело в том, что в 70е годы микропроцессоры и память были очень дороги и дефицитны. Проблема с процессором решилась, когда компания MOS Technology выпустила бюджетный процессор 6500, а в скором времени и 6502, аналог 6500, но обладающий большими возможностями, и стоившем всего 25$. Именно легендарный 6502 первым попал в руки Стива. 
Следующая проблема того времени заключалась в подготовке компьютера к запуску. В те годы загрузочная программа, как правило, вводилась в компьютеры вручную либо с магнитофонной ленты, это занимало до получаса, и только после этого можно было что то на них делать. Видео запуска Бейсика и игровой программы, написанной на нём, на Altair 8800 доступно по второй ссылке в конце статьи. Стив решил эту проблему установкой в свой ПК микросхем постоянной памяти (ПЗУ), с записанной в них управляющей программой, которую он назвал «Монитор». Название отражало назначение — большую часть времени она мониторила нажатие клавиш и передавала их на терминал, а так же позволяла отображать значения в ячейках памяти и запускать программу с определенного места. Монитор Возняка уместился в 253 байта.
Но для запуска компьютера ему всё ещё не хватало оперативной памяти. Первая версия его ПК была собрана на медленной статической памяти. Позже он заменил её на динамическую, что уменьшило количество микросхем на плате, и положительно сказалось на скорости работы.
Стив показал свой ПК публике, а его друг, Стив Джобс, который помогал носить монитор до клуба, предложил начать производить печатные платы для этого ПК, и организовать собственную компанию, которую назвали Apple. 
Об этом и многом другом можно детальнее почитать в книге iWoz.

Основная плата Apple 1

Как собрать Apple 1 и написать для него игру - 2

Архитектура ПК.

ПК состоит из нескольких узлов. 
Как собрать Apple 1 и написать для него игру - 3
(Сайт источник)

Блок формирования и вывода изображения (терминал). 

Как собрать Apple 1 и написать для него игру - 4
Собственно это и есть тот самый терминал Стива для ARPANET. На его входе семибитная шина, по которой поступают данные для вывода на экран телевизора. 
В нём нет схем для прямого доступа к видеопамяти (ПДП), а используется циклическое обновление памяти в 1024 ячейки по 7 бит (причём, 64 ячейки не используются). Из-за отсутствия ПДП этот терминал работает как печатная машинка — подали символ на вход, он его отобразил на экране, переместил курсор для следующего символа, и никакой графики. Из-за постоянного обновления этой памяти, работа терминала довольно медленная. Все символы выводятся последовательно, нельзя просто так вернуться назад, и исправить неверно введённый символ. Для правки нужно ввести команду Монитора, которая изменит содержимое той ячейки памяти, где была допущена ошибка, а затем с помощью другой команды вывести на экран значение байта из изменённой ячейки памяти.
Если же в нашей программе мы хотим очистить экран, нам нужно 24 раза перевести каретку на новую строку. Кстати, при нажатии на Return (современное обозначение — Enter), запускается генератор, который до конца строки печатает символ Пробел.
Графического режима нет, а набор символов ограничивается стандартным набором ASCII кодов, со значениями от 1 до 127 (на экране отображаются только символы из интервала 32-126, некоторые другие используются в качестве управляющих, например 13 — перевод строки), поэтому и шина семибитная, а по старшему разряду всегда установлена единица.
Макеты всех отображаемых символов записаны в постоянном запоминающем устройстве (ПЗУ). После поступления символа на терминальный вход, он сначала записывается в небольшую память (аналог современной видео памяти), и далее через систему счётчиков выбираются адреса в ПЗУ знакогенератора, содержащие макет выводимого символа, и через регистры сдвига эти данные, смешиваясь с сформированными видео синхроимпульсами поступают на вход монитора (или низкочастотный вход телевизора).
Для регулировки яркости изображения, на плате есть подстроечный резистор. Я заменил его простым делителем пополам.
Так же надо отметить, что из-за ошибок в схеме формирования изображения, его нельзя корректно отобразить на большинстве современных цифровых телевизоров или мониторов, аналоговые телевизоры эти ошибки прощают. В конце статьи трёхминутное видео с моими мучениями на таком мониторе.

Микропроцессорный блок

Как собрать Apple 1 и написать для него игру - 5
Содержит микропроцессор 6502, ПЗУ, порт ввода-вывода (PIA), буферные усилители, дешифратор адресов устройств, оперативную память и немного микросхем мелкой логики.

Блок ввода-вывода и работа с внешними устройствами.

Как собрать Apple 1 и написать для него игру - 6
Опросом клавиатуры и передачей введённого символа на шину данных занимается контроллер ввода-вывода (PIA) 6520. Вместо него я установил 6821. И он прекрасно работает.
Работа с внешними устройствами происходит как с ячейками памяти. Каждому устройству соответствует своя область памяти. Включением ввода-вывода с конкретного устройства занимается дешифратор портов. Его входные линии подключены к адресным линиям микропроцессора, поэтому при установке нужного адреса, к шине данных подключается нужное нам устройство. Что, и как с ним можно делать, определяет программа, и само устройство.
Так как в этом ПК не реализованы прерывания, обработкой всего потока данных (ввод с клавиатуры, вывод символов, обмен данными с внешними устройствами и тд) занимается центральный процессор.
Для подключения внешнего устройства, на основной плате есть один разъём. Единственным, известным мне, устройством, созданным для этого ПК в 70е годы, является интерфейсная плата для работы с внешним хранилищем данных — магнитофоном.
Как собрать Apple 1 и написать для него игру - 7

Блок питания

Как собрать Apple 1 и написать для него игру - 8
Тут всё просто. Для питания компьютера нужны четыре напряжения. +5В, -5В, +12В и -12В. Блок питания изготавливался покупателем самостоятельно. Для этого нужно было отдельно приобрести два понижающих трансформатора, и подключить их к основной плате, на которой уже находились выпрямители и стабилизаторы. На радиаторе находится стабилизатор на +5В, и он ощутимо греется, поэтому многие пользователи устанавливали на него вентилятор, я не стал изобретать велосипед, и поступил так же.
Можно конечно было поставить современный импульсный блок питания, но хотелось тёплого лампового урчания в 50Герц.

Поиск компонентов, сборка и наладка.

Как я писал выше, на поиск компонентов ушло почти 3 года, правда с перерывами. Первой была куплена печатная плата, пролежав примерно год на полке, она начала постепенно обрастать компонентами. Сначала я припаял панельки для микросхем и разъёмы для подключения питания и монитора. Затем все пассивные элементы — резисторы, конденсаторы и диоды. Правда раздобыть оригинальные конденсаторы Sprague не удалось сразу, и вместо них первые пол года стояли обычные современные электролиты.
Большую часть микросхем удалось сразу приобрести, более того, у большей их части есть советские аналоги 155-ой серии. Побегать пришлось за такими микросхемками:
Видео ПЗУ — в нём должна быть записана определённая прошивка, иначе адекватной картинки не будет.
2504V — семь регистров, в которых хранится изображение, выводимое на экран.
2519B — счётчик, используемый для построения изображения, у которого не нашлось аналогов.
8T97 — буферы шины данных, предотвращающие перегрузку шины данных микропроцессора, в прочем им позже нашлась советская замена — К155ЛП11.
ПЗУ с управляющей программой «Монитор».
После того, как все компоненты были найдены, впаяны, или установлены в основную плату, началась сама интересная часть — отладка.
Первое включение — щелчок тумблером питания, 5 секунд, выключение — дыма нет, пробки в квартире целы, ничего не загорелось — порядок. Включаю, смотрю картинку — на экране мусор из случайных символов. Нажимаю RESET и за ней CLEAR SCREEN (да да, есть и такая кнопка — пользователи тогда были не избалованы модными штучками, а проектировщики считали, пусть пользователь очищает экран, когда ему надо), ничего не происходит — тот же случайный мусор. 
Ко всему прочему, уже начинает подпекать стабилизатор на +5В, по комнате пошёл тёплый ламповый аромат свежесгоревшего толи лака, толи краски с этого стабилизатора. Выключаю, жду 5 минут, до полного охлаждения, и такими короткими сериями пытаюсь отлаживать далее на всём протяжении отладки, поэтому этот факт далее не указан.
Если бы всё работало, то после включения компьютера, на экране должна была появиться приветственная заставка в виде чередующихся, мигающих символов "@_" во вcё рабочее пространство монитора, а после нажатия RESET и CS экран должен очиститься, и остаться только курсор для ввода команды управляющей программе «Монитор».
Визуальный осмотр и прозвонка цепей формирования изображения и питания ничего не дала. И вот после нескольких дней мучений, я обнаружил, что продавец отправил мне не те аналоги микросхем видеопамяти. У меня стояли 1403А, хотя аналогами являются 1404А. Я вытащил эти регистры из панелек, и на экране ничего не изменилось. Продавец свою ошибку признал, и попросил отправить эти регистры ему назад, но так как они стоили не дорого, я не стал с этим возиться. Оригинальные регистры мне обошлись уже около 80$. Ждать их пришлось три недели. 
После замены регистров наконец появились долгожданные мигающие собачки (или яблоки, кому как больше по душе), значит видеопамять и вместе с ней весь видеоблок заработал.
Нажимаю RESET, CS, экран очищается, но курсор не появляется. Значит не работает микропроцессорный блок. Тут источников проблем не много — либо процессор, либо ПЗУ, либо мелкая логика в их обвязке.
Первым компонентом, попавшим под следствие стало ПЗУ с «Монитором», так как одна из микросхем ощутимо грелась.
Немного отвлекусь, скажу, что управляющая программка записана в двух микросхемах памяти, каждая из которых имеет 255 ячеек памяти, а каждая микросхема имеет на выходе только 4 бита. Для управления восьмибитным процессором Возняк поставил 2 такие микросхемы параллельно, получил на выходе нужные 8 бит данных. И вся его управляющая программа уместилась в 253 байта (2 байта остались свободными). 
Как собрать Apple 1 и написать для него игру - 9

Чтобы прочесть содержимое этой памяти, я собрал на макетной плате устройство на базе Arduino. 
Контроллер последовательно перебирал адреса этих ПЗУ-шек, сливал 4х битные данные в 8-битные и в шестнадцатеричном виде выводил в монитор коммуникационного канала на компьютер. Проверив содержимое ПЗУ, я не нашёл в нём ошибок. 
Замена мелкой логики так же не дала результатов, поэтому подозрения пали на почтенность лет основного процессора, и его выход на пенсию. 
Другого компьютера на базе 6502 у меня нет, поэтому я установил его на макетку, подал на него питание от Ардуинки, тактовые импульсы генератора на 1мГц (от будущего ПК Специалист), на шине данных установил перемычками на +5В или на массу команду NOP, и ждал, что он выполняя пустое действие будет увеличивать значение счётчика адресов. Но этого не происходило. Ничего вообще не происходило. Похоже камень теперь точно камень. Заказал другой, как и положено производства MOS. Пока он ехал, я успел съездить в отпуск и искупаться в море.
Как собрать Apple 1 и написать для него игру - 10
Тестирование процессора 6502. Да, можно было получить 1мГц с таймеров Меги, да, можно было и вовсе обойтись без неё, всё это я умею, но тогда хотелось поступить именно так.
После установки нового процессора, включение — привет собачки — RESET — CS — привет командная строка! Процессорный блок заработал, не прошло и полугода! 
Следующая проблема — у меня не чем было вводить в него команды и код, не было клавиатуры.

Клавиатура

Клавиатура этого ПК представляет собой сетку из проводников, в узлах которой установлены кнопки. Это дело подключено к декодеру нажатых клавиш, который на выходе выдаёт по семибитной линии ASCII код нажатой клавиши, и по отдельной линии кратковременный стробирующий импульс. Как этот импульс прошёл на шину управления, процессор начинает обработку введённого символа.
Как собрать Apple 1 и написать для него игру - 11
 
Достать такую клавиатуру в общем то дело пока ещё решаемое, но это как правило число с двумя нулями, и не в отечественных рублях. Потому я начал думать, как бы подключить к компьютеру имеющуюся у меня PS/2 клавиатуру. 
Ничего интереснее, чем Arduino Nano, в голову не пришло. За вечер спаял навесным монтажом переходник между PS/2 и ASCII портом и написал под него прошивку. Так как в Apple 1 нет клавиш PgUp и PgDown, я использовал их как кнопки RESET и CLEAR SCREEN. С этого дня не пришлось врукопашную замыкать на плате ножки пинцетом, что очень порадовало.
Набираемые символы лихо печатались на экране, и даже работала тестовая программа из документации к этому компьютеру. Всё что она делает — выводит на экран в цикле все символы, отображаемые на этом компьютере.
Как собрать Apple 1 и написать для него игру - 12
Вид сверху

Как собрать Apple 1 и написать для него игру - 13
Вид снизу

С клавиатурой приключилась забавная история. Изначально клавиша Return заработала только на половину — она корректно вводила команды в память, и давала указания на их исполнение, но перевод на новую строку не происходил. В общем то из-за особенностей работы терминала это проблем больших не создавало. Но я решил это дело наладить. Начал с изучения принципиальной схемы ПК, большую помощь в этом оказал пользователь Mdesk, с zx-pk.ru. Когда же я изучил схему, у меня ни осталось ни единого вопроса в работе аппаратного узла перевода каретки, я сел за тестер и осциллограф. Прозвонка проводников ничего не дала — все целые. Тогда в ход пошёл осциллограф. Я прозвонил входные сигналы с PIA — они были в норме, сигнал где то терялся на 7451N, я пробовал менять её на 7450, и советские аналоги (155ЛР1 и 155ЛР11), эффекта это не дало. Распутывая цепи дальше, я добрался до одновибратора 74123, нужно было проверить генерируемые им задержки. Но мой переходник физически закрывает его, что делает прозвонку неудобной.
Тогда я написал тестовую программку
280: A9 8D 20 EF FF A9 31 20 EF FF 4C 80 02
Всё что она делает, это выводит на экран последовательность Return-1-Return-1 (единицы со скроллингом вниз).
Запустил её, единицы, как и ожидалось, поехали в строку. Тогда я вынул переходник из панельки, единицы тут же побежали вниз. Значит причина в переходнике. После этого раскрутил проблему быстро. Кнопки PgUp и PgDown я использую как сброс и очистку экрана. Очистка экрана (CLR) висела на одной из ног Ардуины, на момент очистки я подавал туда единицу, после отпускания сбрасывал в 0. И этот самый 0 тушил всю линию CLR, а по сути ей пользуется ещё и блок перевода строк. Решение простое — поставил между Ардуинкой и CLR диод, и всё заработало!
Так как набирать врукопашную килобайтные программы было бы утомительным и не всегда точным занятием, то я придумал подключить к этой же Ардуинке SD-карточку, с которой можно было бы выполнять ввод программ. Работает это так — я закидываю в корень файл с именем dump.hex, и при нажатии клавиши TAB, контроллер считывает содержимое файла и нажимает соответствующие клавиши. 

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

Для Apple 1 не написано много программ, я связываю это со скорым появлением более продвинутого компьютера — Apple 2. И всё же для него есть несколько игр и системных программ. На 30ти летие Apple 1, энтузиасты даже написали довольно большую демку (ссылка внизу). 
Всё это я запустил и посмотрел, но захотелось написать что то своё. Я решил написать для него игру 2048. На написание алгоритма, кодирование (до этого под 6502 не доводилось писать) и отладку ушло 2 вечера. Размер полученной программы составил 1679 байт. Запустить её можно как на оригинальном железе, так и в эмуляторах.

Программа

280: 4C F8 08 20 20 20 20 20
288:20 20 32 20 20 20 34 20
290:20 20 38 20 20 31 36 20
298:20 33 32 20 20 36 34 20
2A0:31 32 38 20 32 35 36 20
2A8:35 31 32 31 30 32 34 32
2B0:30 34 38 01 00 00 00 00
2B8:00 00 00 00 00 00 00 00
2C0:00 00 00 2B 2D 2D 2D 2D
2C8:2D 2D 2B 2D 2D 2D 2D 2D
2D0:2D 2B 2D 2D 2D 2D 2D 2D
2D8:2B 2D 2D 2D 2D 2D 2D 2B
2E0:8D 00 A2 00 A9 8D E8 20
2E8:EF FF E0 24 F0 03 4C E6
2F0:02 60 A9 2B 20 EF FF A9
2F8:20 20 EF FF 60 A9 8D 20
300:EF FF 60 0A 2A A8 A9 00
308:79 83 02 20 EF FF C8 A9
310:00 79 83 02 20 EF FF C8
318:A9 00 79 83 02 20 EF FF
320:C8 A9 00 79 83 02 20 EF
328:FF A9 20 20 EF FF 20 F2
330:02 60 20 FD 02 A2 00 BD
338:C3 02 20 EF FF E8 E0 1E
340:F0 03 4C 37 03 60 20 32
348:03 20 F2 02 AD B3 02 20
350:03 03 AD B4 02 20 03 03
358:AD B5 02 20 03 03 AD B6
360:02 20 03 03 20 32 03 20
368:F2 02 AD B7 02 20 03 03
370:AD B8 02 20 03 03 AD B9
378:02 20 03 03 AD BA 02 20
380:03 03 20 32 03 20 F2 02
388:AD BB 02 20 03 03 AD BC
390:02 20 03 03 AD BD 02 20
398:03 03 AD BE 02 20 03 03
3A0:20 32 03 20 F2 02 AD BF
3A8:02 20 03 03 AD C0 02 20
3B0:03 03 AD C1 02 20 03 03
3B8:AD C2 02 20 03 03 20 32
3C0:03 60 32 30 34 38 8D 8D
3C8:57 2D 55 50 8D 41 2D 4C
3D0:45 46 54 8D 44 2D 52 49
3D8:47 48 54 8D 53 2D 44 4F
3E0:57 4E 8D 8D 43 4F 44 45
3E8:3A 20 44 45 4E 49 53 20
3F0:50 41 52 59 53 48 45 56
3F8:8D 8D 50 52 45 53 53 20
400:41 4E 59 20 4B 45 59 A2
408:00 BD C2 03 20 EF FF E8
410:E0 45 F0 03 4C 09 04 AD
418:11 D0 10 FB AD 10 D0 8D
420:E1 02 60 47 41 4D 45 20
428:4F 56 45 52 59 4F 55 20
430:57 49 4E 20 E2 02 A2 00
438:BD 23 04 20 EF FF E8 E0
440:09 F0 03 4C 38 04 A2 34
448:BD C2 03 20 EF FF E8 E0
450:43 F0 03 4C 48 04 AD 11
458:D0 10 FB AD 10 D0 4C F8
460:08 A0 00 AD E1 02 29 0F
468:AA C8 C0 11 F0 C5 BD B3
470:02 C9 00 F0 0A E8 E0 10
478:D0 EF A2 00 4C 69 04 A9
480:01 9D B3 02 8E E1 02 60
488:A2 00 A9 00 9D B3 02 E8
490:E0 10 D0 F8 A9 01 8D B3
498:02 60 00 00 00 00 00 00
4A0:AE 9F 04 BD 9A 04 C9 00
4A8:D0 14 AE 9E 04 BD 9A 04
4B0:AE 9F 04 9D 9A 04 A9 00
4B8:AE 9E 04 9D 9A 04 60 A9
4C0:03 8D 9F 04 A9 02 8D 9E
4C8:04 20 A0 04 A9 02 8D 9F
4D0:04 A9 01 8D 9E 04 20 A0
4D8:04 A9 01 8D 9F 04 A9 00
4E0:8D 9E 04 20 A0 04 A9 03
4E8:8D 9F 04 A9 02 8D 9E 04
4F0:20 A0 04 A9 02 8D 9F 04
4F8:A9 01 8D 9E 04 20 A0 04
500:A9 03 8D 9F 04 A9 02 8D
508:9E 04 20 A0 04 60 20 E2
510:02 A2 00 BD 2C 04 20 EF
518:FF E8 E0 07 F0 03 4C 13
520:05 A2 34 BD C2 03 20 EF
528:FF E8 E0 43 F0 03 4C 23
530:05 AD 11 D0 10 FB AD 10
538:D0 4C F8 08 AE 9E 04 BD
540:9A 04 C9 00 F0 1D AE 9F
548:04 DD 9A 04 D0 15 A8 C8
550:98 AE 9F 04 9D 9A 04 C9
558:0B F0 B3 A9 00 AE 9E 04
560:9D 9A 04 60 A9 02 8D 9E
568:04 A9 03 8D 9F 04 20 3C
570:05 A9 01 8D 9E 04 A9 02
578:8D 9F 04 20 3C 05 A9 00
580:8D 9E 04 A9 01 8D 9F 04
588:20 3C 05 60 20 BF 04 20
590:64 05 20 BF 04 60 AD B3
598:02 8D 9D 04 AD B7 02 8D
5A0:9C 04 AD BB 02 8D 9B 04
5A8:AD BF 02 8D 9A 04 20 8C
5B0:05 AD 9A 04 8D BF 02 AD
5B8:9B 04 8D BB 02 AD 9C 04
5C0:8D B7 02 AD 9D 04 8D B3
5C8:02 AD B4 02 8D 9D 04 AD
5D0:B8 02 8D 9C 04 AD BC 02
5D8:8D 9B 04 AD C0 02 8D 9A
5E0:04 20 8C 05 AD 9A 04 8D
5E8:C0 02 AD 9B 04 8D BC 02
5F0:AD 9C 04 8D B8 02 AD 9D
5F8:04 8D B4 02 AD B5 02 8D
600:9D 04 AD B9 02 8D 9C 04
608:AD BD 02 8D 9B 04 AD C1
610:02 8D 9A 04 20 8C 05 AD
618:9A 04 8D C1 02 AD 9B 04
620:8D BD 02 AD 9C 04 8D B9
628:02 AD 9D 04 8D B5 02 AD
630:B6 02 8D 9D 04 AD BA 02
638:8D 9C 04 AD BE 02 8D 9B
640:04 AD C2 02 8D 9A 04 20
648:8C 05 AD 9A 04 8D C2 02
650:AD 9B 04 8D BE 02 AD 9C
658:04 8D BA 02 AD 9D 04 8D
660:B6 02 60 AD B3 02 8D 9A
668:04 AD B7 02 8D 9B 04 AD
670:BB 02 8D 9C 04 AD BF 02
678:8D 9D 04 20 8C 05 AD 9D
680:04 8D BF 02 AD 9C 04 8D
688:BB 02 AD 9B 04 8D B7 02
690:AD 9A 04 8D B3 02 AD B4
698:02 8D 9A 04 AD B8 02 8D
6A0:9B 04 AD BC 02 8D 9C 04
6A8:AD C0 02 8D 9D 04 20 8C
6B0:05 AD 9D 04 8D C0 02 AD
6B8:9C 04 8D BC 02 AD 9B 04
6C0:8D B8 02 AD 9A 04 8D B4
6C8:02 AD B5 02 8D 9A 04 AD
6D0:B9 02 8D 9B 04 AD BD 02
6D8:8D 9C 04 AD C1 02 8D 9D
6E0:04 20 8C 05 AD 9D 04 8D
6E8:C1 02 AD 9C 04 8D BD 02
6F0:AD 9B 04 8D B9 02 AD 9A
6F8:04 8D B5 02 AD B6 02 8D
700:9A 04 AD BA 02 8D 9B 04
708:AD BE 02 8D 9C 04 AD C2
710:02 8D 9D 04 20 8C 05 AD
718:9D 04 8D C2 02 AD 9C 04
720:8D BE 02 AD 9B 04 8D BA
728:02 AD 9A 04 8D B6 02 60
730:AD B6 02 8D 9A 04 AD B5
738:02 8D 9B 04 AD B4 02 8D
740:9C 04 AD B3 02 8D 9D 04
748:20 8C 05 AD 9D 04 8D B3
750:02 AD 9C 04 8D B4 02 AD
758:9B 04 8D B5 02 AD 9A 04
760:8D B6 02 AD BA 02 8D 9A
768:04 AD B9 02 8D 9B 04 AD
770:B8 02 8D 9C 04 AD B7 02
778:8D 9D 04 20 8C 05 AD 9D
780:04 8D B7 02 AD 9C 04 8D
788:B8 02 AD 9B 04 8D B9 02
790:AD 9A 04 8D BA 02 AD BE
798:02 8D 9A 04 AD BD 02 8D
7A0:9B 04 AD BC 02 8D 9C 04
7A8:AD BB 02 8D 9D 04 20 8C
7B0:05 AD 9D 04 8D BB 02 AD
7B8:9C 04 8D BC 02 AD 9B 04
7C0:8D BD 02 AD 9A 04 8D BE
7C8:02 AD C2 02 8D 9A 04 AD
7D0:C1 02 8D 9B 04 AD C0 02
7D8:8D 9C 04 AD BF 02 8D 9D
7E0:04 20 8C 05 AD 9D 04 8D
7E8:BF 02 AD 9C 04 8D C0 02
7F0:AD 9B 04 8D C1 02 AD 9A
7F8:04 8D C2 02 60 AD B6 02
800:8D 9D 04 AD B5 02 8D 9C
808:04 AD B4 02 8D 9B 04 AD
810:B3 02 8D 9A 04 20 8C 05
818:AD 9A 04 8D B3 02 AD 9B
820:04 8D B4 02 AD 9C 04 8D
828:B5 02 AD 9D 04 8D B6 02
830:AD BA 02 8D 9D 04 AD B9
838:02 8D 9C 04 AD B8 02 8D
840:9B 04 AD B7 02 8D 9A 04
848:20 8C 05 AD 9A 04 8D B7
850:02 AD 9B 04 8D B8 02 AD
858:9C 04 8D B9 02 AD 9D 04
860:8D BA 02 AD BE 02 8D 9D
868:04 AD BD 02 8D 9C 04 AD
870:BC 02 8D 9B 04 AD BB 02
878:8D 9A 04 20 8C 05 AD 9A
880:04 8D BB 02 AD 9B 04 8D
888:BC 02 AD 9C 04 8D BD 02
890:AD 9D 04 8D BE 02 AD C2
898:02 8D 9D 04 AD C1 02 8D
8A0:9C 04 AD C0 02 8D 9B 04
8A8:AD BF 02 8D 9A 04 20 8C
8B0:05 AD 9A 04 8D BF 02 AD
8B8:9B 04 8D C0 02 AD 9C 04
8C0:8D C1 02 AD 9D 04 8D C2
8C8:02 60 AD 11 D0 10 FB AD
8D0:10 D0 8D E1 02 C9 D7 D0
8D8:04 20 96 05 60 C9 D3 D0
8E0:04 20 63 06 60 C9 C1 D0
8E8:04 20 30 07 60 C9 C4 D0
8F0:04 20 FD 07 60 4C CA 08
8F8:20 88 04 20 E2 02 20 07
900:04 20 E2 02 20 61 04 20
908:46 03 20 CA 08 4C 01 09

Видео работы на youtube.

Что дальше?

В первую очередь корпус, хочется сделать его красивым.
Переходник для клавиатуры и SD-карты. Нужно избавляться от навесного монтажа, я планирую разработать и заказать в Китае печатную плату под него.
Работа с несколькими файлами. Планирую написать для Ардуинки файловый менеджер, который позволит выбирать файл с карты и запускать его.
Я так же приобрёл коннектор для плат расширений. Хочу спаять для него аудиоплату на К580ВИ53 (просто потому что дома валяется именно этот таймер) и нарисовать небольшую демку со звуком.
Об этом всём, вероятно, будет следующая статья.
 

Заключение. 

Сказать что я получил большое удовольствие от сборки, отладки и написания программы для Apple 1, это почти ничего не сказать. 
Большое спасибо пользователю Mdesk, и всем ребятам с zx-pk.ru за помощь в разъяснении тонкостей архитектуры, и за полезные советы в наладке этого ПК.
Ну и самая большая благодарность Стиву Возняку за этот замечательный персональный компьютер!!!

Полезные ссылки

Apple 1 на wiki
Загрузка Бейсика на Altair 8800
Apple 1 и современный монитор (три с половиной минуты боли и страданий)
30 лет Apple 1 (демо)
Онлайн эмулятор Apple 1
Онлайн ассемблер/дизассемблер/отладчик 6502

Русскоязычные сайты, посвящённые Apple 1:
mdesk.ru
zx-pk.ru

Автор: ParyshevD

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js