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

    Как собрать Apple 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




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


    ПК состоит из нескольких узлов. 


    (Сайт источник)

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




    Собственно это и есть тот самый терминал Стива для ARPANET. На его входе семибитная шина, по которой поступают данные для вывода на экран телевизора. 

    В нём нет схем для прямого доступа к видеопамяти (ПДП), а используется циклическое обновление памяти в 1024 ячейки по 7 бит (причём, 64 ячейки не используются). Из-за отсутствия ПДП этот терминал работает как печатная машинка — подали символ на вход, он его отобразил на экране, переместил курсор для следующего символа, и никакой графики. Из-за постоянного обновления этой памяти, работа терминала довольно медленная. Все символы выводятся последовательно, нельзя просто так вернуться назад, и исправить неверно введённый символ. Для правки нужно ввести команду Монитора, которая изменит содержимое той ячейки памяти, где была допущена ошибка, а затем с помощью другой команды вывести на экран значение байта из изменённой ячейки памяти.

    Если же в нашей программе мы хотим очистить экран, нам нужно 24 раза перевести каретку на новую строку. Кстати, при нажатии на Return (современное обозначение — Enter), запускается генератор, который до конца строки печатает символ Пробел.

    Графического режима нет, а набор символов ограничивается стандартным набором ASCII кодов, со значениями от 1 до 127 (на экране отображаются только символы из интервала 32-126, некоторые другие используются в качестве управляющих, например 13 — перевод строки), поэтому и шина семибитная, а по старшему разряду всегда установлена единица.

    Макеты всех отображаемых символов записаны в постоянном запоминающем устройстве (ПЗУ). После поступления символа на терминальный вход, он сначала записывается в небольшую память (аналог современной видео памяти), и далее через систему счётчиков выбираются адреса в ПЗУ знакогенератора, содержащие макет выводимого символа, и через регистры сдвига эти данные, смешиваясь с сформированными видео синхроимпульсами поступают на вход монитора (или низкочастотный вход телевизора).

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

    Так же надо отметить, что из-за ошибок в схеме формирования изображения, его нельзя корректно отобразить на большинстве современных цифровых телевизоров или мониторов, аналоговые телевизоры эти ошибки прощают. В конце статьи трёхминутное видео с моими мучениями на таком мониторе.

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



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

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




    Опросом клавиатуры и передачей введённого символа на шину данных занимается контроллер ввода-вывода (PIA) 6520. Вместо него я установил 6821. И он прекрасно работает.

    Работа с внешними устройствами происходит как с ячейками памяти. Каждому устройству соответствует своя область памяти. Включением ввода-вывода с конкретного устройства занимается дешифратор портов. Его входные линии подключены к адресным линиям микропроцессора, поэтому при установке нужного адреса, к шине данных подключается нужное нам устройство. Что, и как с ним можно делать, определяет программа, и само устройство.
    Так как в этом ПК не реализованы прерывания, обработкой всего потока данных (ввод с клавиатуры, вывод символов, обмен данными с внешними устройствами и тд) занимается центральный процессор.

    Для подключения внешнего устройства, на основной плате есть один разъём. Единственным, известным мне, устройством, созданным для этого ПК в 70е годы, является интерфейсная плата для работы с внешним хранилищем данных — магнитофоном.



    Блок питания




    Тут всё просто. Для питания компьютера нужны четыре напряжения. +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 байта остались свободными). 



    Чтобы прочесть содержимое этой памяти, я собрал на макетной плате устройство на базе Arduino. 

    Контроллер последовательно перебирал адреса этих ПЗУ-шек, сливал 4х битные данные в 8-битные и в шестнадцатеричном виде выводил в монитор коммуникационного канала на компьютер. Проверив содержимое ПЗУ, я не нашёл в нём ошибок. 

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

    Другого компьютера на базе 6502 у меня нет, поэтому я установил его на макетку, подал на него питание от Ардуинки, тактовые импульсы генератора на 1мГц (от будущего ПК Специалист), на шине данных установил перемычками на +5В или на массу команду NOP, и ждал, что он выполняя пустое действие будет увеличивать значение счётчика адресов. Но этого не происходило. Ничего вообще не происходило. Похоже камень теперь точно камень. Заказал другой, как и положено производства MOS. Пока он ехал, я успел съездить в отпуск и искупаться в море.



    Тестирование процессора 6502. Да, можно было получить 1мГц с таймеров Меги, да, можно было и вовсе обойтись без неё, всё это я умею, но тогда хотелось поступить именно так.

    После установки нового процессора, включение — привет, собачки — RESET — CS — привет командная строка! Процессорный блок заработал, не прошло и полугода! 

    Следующая проблема — у меня не чем было вводить в него команды и код, не было клавиатуры.

    Клавиатура


    Клавиатура этого ПК представляет собой сетку из проводников, в узлах которой установлены кнопки. Это дело подключено к декодеру нажатых клавиш, который на выходе выдаёт по семибитной линии ASCII код нажатой клавиши, и по отдельной линии кратковременный стробирующий импульс. Как этот импульс прошёл на шину управления, процессор начинает обработку введённого символа.


     
    Достать такую клавиатуру в общем то дело пока ещё решаемое, но это как правило число с двумя нулями, и не в отечественных рублях. Потому я начал думать, как бы подключить к компьютеру имеющуюся у меня PS/2 клавиатуру. 

    Ничего интереснее, чем Arduino Nano, в голову не пришло. За вечер спаял навесным монтажом переходник между PS/2 и ASCII портом и написал под него прошивку. Так как в Apple 1 нет клавиш PgUp и PgDown, я использовал их как кнопки RESET и CLEAR SCREEN. С этого дня не пришлось врукопашную замыкать на плате ножки пинцетом, что очень порадовало.

    Набираемые символы лихо печатались на экране, и даже работала тестовая программа из документации к этому компьютеру. Всё что она делает — выводит на экран в цикле все символы, отображаемые на этом компьютере.


    Вид сверху


    Вид снизу

    С клавиатурой приключилась забавная история. Изначально клавиша 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
    Поделиться публикацией
    Комментарии 36
      0
      Как это мило и романтично — сидеть и самому паять платы…
        +1
        Да, это я умею, люблю, практикую… habr.com/post/247211
          0
          Мммм… моим первым компьютером был году в 88 или в том же 89 — чемоданчик Osborne -первый в мире ноутбук. Не то чтобы моим, отец одноклассника принес с работы, его списали из химического института из-за неработающего дисковода записи. Мы с трудом поднимали его на стол, раскрывали, внутри был маленький экранчик, 23 на 40 символов кажется, был бейсик, стрелялка инвайдерс и шахматы. И все это казалось каким-то волшебством. Но платы я не паял, не умел.
          0
          Лучше уж все с нуля — трассировать на бумаге, потом сверлить плату, потом рисовать на плате, потом травить, потом мыть, потом лудить, потом паять.
          Фу, устал писать. Ну их нафиг эти платы.
          +1

          Возможно, Вам будет интересно — англоязычная девушка подробно описывает процедуру сборки на макетках и отладки самодельного компьютера на 6502 (видеовыход сделан на атмеге) — http://quinndunki.com/blondihacks/?page_id=1761

            0
            да, я видел эту страничку. на форуме arduino.cc есть проект эмулятора Apple1 на одной только Arduino Mega. forum.arduino.cc/index.php?topic=291681.0
            я чуть модифицировал код, реализовал передачу символов в эмулятор через UART, запускал на нём программки под А1, и даже бейсик Возняка на ней работал.
            –12
            не жалко трёх лет жизни на это?
              +1
              ни сколько. тем более, что все работы выполнялись в свободное от всего остального время. при наличии компонентов, на сборку и отладку, я думаю, уйдет не больше 2х-3х дней
              +1
              Супер!
              А что там за нераспаянные детали в верхнем левом углу?
              По поводу странной архитектуры видеоконтроллера. Я где-то читал, что Воз сделал свой терминал вдохновившись серией статей Дона Ланкастера: TV Typewriter. Тогда эта тема стала модной и многие увлекались сборкой такой электронной самоделки. В этом девайсе, символы с клавиатуры последовательно добавлялись в видеопамять. Воз, в общем-то, прикрутил к нему процессор MOS6502 и так получился Apple I.
                +1
                всё верно пишите. вот тут тоже есть упоминание про использование Возом терминала Ланкастера www.sbprojects.net/projects/apple1/terminal.php
                но в оригинале размер экранной области был меньше, и не был реализован скороллинг, кроме того, у Воза на него ушло меньше микросхем.
                про сам терминал Ланкастера можно почитать тут www.swtpc.com/mholley/RadioElectronics/TV_Typewriter.htm
                  0
                  а нераспаянные элементы и одна не установленная микросхема 7400 нужны для работы процессора 6500 (вместо 6502)
                  +7
                  «Первая версия его ПК была собрана на медленной статической памяти.» — может более дорогой а не более медленной? На статической быстрой памяти были собраны процессорные кэши первых PC, она не требует периодического обновления заряда конденсаторов как в динамической.
                    +2
                    К155 серия это уж совсем жутко. Есть К555 и КР1533 (потребление в 3-5 раз меньше).
                      0
                      Первая версия его ПК была собрана на медленной статической памяти.


                      Это как? Триггеры памяти тех лет были медленнее триггеров обычных цифровых микросхем? :) Или имеется в виду, что он взял статическую память с низким быстродействием? Такое возможно, если взять ТТЛ/ЭСЛ-процессор и КМОП память тех лет. Но обычно берут семейство одного типа, иначе с сопряжением намучаетесь…
                        0
                        Да, я хотел сказать именно второе. DRAM конечно же медленнее, но у неё было преимущество — на 4кБ нужно было только 8 микросхем, против 32х на SRAM.
                        0
                        Время неумолимо.
                        Сейчас ардуинка самая дешевая более чем в тысячу раз производительнее первого яблока.
                          +1
                          Ну, в тысячу-то вряд ли. Число операций на такт вроде сравнимо (вики указывает 0.43 для 6502, AVR, ЕМНИП — от 1 до 4 тактов в зависимости от операции). Так что должна быть разница примерно пропорциональная тактовой частоте (~16 раз). Вот число операций за доллар, за ватт и за крадратный сантиметр — тут да…

                          PS. Что-то я обсчитался… Не 16, а 4 раза разница должна быть (в 16 раз выше частота, но и в 4 раза больше тактов уходит на инструкцию, если считать, что среднее для AVR — в районе 2)…
                            +1
                            В любом случае nano в качестве переходника клавиатуры здесь все равно что «Нимиц» в роли шлюпки у чайного клиппера
                          0
                          Первая версия его ПК была собрана на медленной статической памяти. Позже он заменил её на динамическую, что уменьшило количество микросхем на плате, и положительно сказалось на скорости работы.

                          ?! это как так? вроде статика на триггерах, дороже динамики и шустрее ну и обвязки требует меньше. динамику же надо рефрешить + обращение через строка/столбец.

                            0
                            всё верно пишете. я дал пояснения чуть выше
                              0

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

                            0
                            Для питания компьютера нужны четыре напряжения. +5В, -5В, +12В и -12В.

                            Именно четыре? Не два: +5 и +12?
                              0
                              именно 4 напряжения. +5В (3А), остальные по 0.5А. об этом можно прочесть в документации, да и на фото видно 4 стабилизатора
                              apple1.chez.com/Apple1project/Docs/pdf/AppleI_Manual.pdf
                                0
                                Ранние компьютеры все требуют именно эти четыре и от ATX блока питания не запускаются.

                                Интересно когда -5В и -12В реально перестали использоваться (понятно что с появлением ATX их и де-юре отменили, а вот де-факто… наверное раньше случилось).
                                  0
                                  Вообще-то у ATX -12V еще в расспиновке.

                                  Еще там +3,3V, +5V, +12V.

                                  А да, -5V пропал. Но вообще-то он и был нужен потому что у 8080 на pin 11 -5V подавать надо.
                                    0
                                    Реально для z80 нужно только 5 Вольт. Поэтому множество компьютеров с самого начала 80х годов были только с +5В.
                                      0
                                      Вообще-то неверно — не путайте процессор и компьютер.

                                      Apple 2 — процессор 6502 (только +5V), 4 питания (±5V, ±12V), БП внутри корпуса, но отделен от матплаты.
                                      Commodore C64 — процессор z80 (только +5V), 2 питания (+5V, +9V) из БП (внешний адаптер).
                                      ZX Spectrum — процессор z80 (только +5V), запитан от внешный +9V-ный адаптер, но не поверите — на плате находиться преобразователь напряжения, который из этих +5V создает 3 дополнительные питания (-5V, ±12V).
                                        0
                                        Commodore C64 — процессор z80

                                        Щито? Ошиблись вы. MOS 6510 там.
                                          0
                                          Может от C128 имел в виду?
                                            0
                                            Да, но там ссылка указана. А по ссылке — схема. А в схеме — 6510. Ошибся просто человек.
                                            +1
                                            И правда ошибся.

                                            Примите извинения пожалуйста. Еще стыднее потому что C64 (к сожалению нерабочий) у меня под столом валяется.
                                    +1
                                    при нажатии на Return (современное обозначение — Enter)

                                    На Маках, кстати, клавиша до сих пор подписана как return.
                                      0
                                      «Для питания компьютера нужны четыре напряжения. +5В, -5В, +12В и -12В.»
                                      Эта фраза только меня одного смутила?
                                        0
                                        А что именно смутило?
                                          +2
                                          (+) 12 относительно Gnd
                                          (-) 12 относительно Gnd, т.е. здесь общая шина в качестве положительного полюса.
                                          Это называется двухполярное питание
                                            0
                                            Не понимаю почему удивляетесь. У старых процессоров вообще были несколько напряжений питания (у 8080 три — +5V, -5V, +12V и масса).

                                            Да и обвязка была не та — я собственник компьютера Apple 2 — сюда из БП тоже идут 4 напряжения питания (±5V, ±12V) и кроме к слотов расширения где все 4 подведены (периферия же, питать надо), на плате к -12V подключена только одна ИС — кодер клавиатуры. А к +12V — лишь ОДИН светодиод, а -5V вообще не используется. Зато оригинальные дисководы Apple работают без внешнего источника питания.

                                            Хорошо, что не застали настоящие представители P-MOS и N-MOS ИС первого поколения, у которых были не только несколько различных напряжения питания, но и была последовательность включения, а то все горело…

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое