Собираем 8-битный компьютер: как уменьшить количество микросхем до шести

Автор оригинала: Matt Sarnoff
  • Перевод

Сочетание старого трюка с кодированием цветов в NTSC и современного железа позволяет собрать на удивление работоспособную машину

В 8-битных системах есть что-то перманентно притягательное: вы можете собрать автономную систему, достаточно мощную, чтобы поддерживать адекватное взаимодействие с пользователем, но достаточно простую, чтобы собрать и запрограммировать её самостоятельно. Большинство современных 8-битных машин, созданных любителями, завязаны на классических процессорах, которые жили в золотой век домашних компьютеров 1980-х годов, когда в качестве дисплеев использовали миллионы телевизоров. Вначале была идея собрать свою машину на базе процессора Motorola 6809 из той же эпохи. Я пытался использовать как можно меньше микросхем, но несмотря на мои старания, мне всё ещё нужно было 13 дополнительных микросхем для работы с ОЗУ и последовательной передачи данных. Тогда я задумался: а что, если я использую более современный 8-битный процессор? Насколько сильно при этом я смогу снизить количество необходимых мне микросхем?


В результате я собрал на нём машину, которая получила название Amethyst. Как любой домашний компьютер, он имеет встроенную клавиатуру и может выдавать аудио и видео. Он также имеет встроенный язык программирования высокого уровня, чтобы пользователи могли писать на нем собственные программы. Мне удалось сократить количество микросхем до шести: ATMEGA1284P CPU, USB-интерфейс и четыре простые интегральные схемы.

ATMEGA1284P (или 1284P) 2008 года выпуска имеет 128 килобайт флеш-памяти и 16 килобайт ОЗУ. Он может работать с частотой до 20 мегагерц. У него на борту есть встроенные контроллеры последовательного интерфейса и 32 цифровых входа / выхода.



Благодаря встроенной памяти и последовательным интерфейсам пропала необходимость в использовании многих вспомогательных чипов. Я мог напрямую генерировать аудио, прерывая и подавая сигнал на ввод / вывод с разной частотой. Таким образом я научился выдавать тон, который, правда, обладал характерной резкостью прямоугольной волны. Но как насчёт генерации аналогового видеосигнала? Неужели для этого потребуется специальное оборудование?

Стандартный трюк


В конце 2018 года я увидел трюк, который Стив Возняк использовал в 1970-х годах, чтобы реализовать в Apple II поддержку цветной графики. В США этот трюк применялся для цветного телевещания в системе NTSC ещё в 1950-х годах.

Изначально американское телевидение было только чёрно-белым и использовало довольно простой стандарт NTSC (разработанный Национальным комитетом по телевизионным системам). Для формирования изображения на экране электронный луч прорисовывал точки на его поверхности, ряд за рядом. Амплитуда принимаемого видеосигнала определяла яркость луча в любом заданном месте вдоль ряда. Затем в 1953 году NTSC был модернизирован для поддержки цветного телевидения, с сохранением совместимости с существующими чёрно-белыми телевизорами.

Инженеры решили представить информацию о цвете в виде высокочастотного синусоидального сигнала. Для этого поднесущая разделялась на два компонента с фазовым сдвигом 90°, каждая из которых подвергалась модуляции. В результате получался сигнал, модулированный и по амплитуде, и по фазе. Амплитуда сигнала определяла насколько насыщенным должен быть цвет. Этот высокочастотный сигнал цветности затем добавлялся к низкочастотному сигналу яркости для создания так называемого композитного видеосигнала. Такой метод до сих пор применяется для многих телевизоров и более дешевых дисплеев.



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


Чёрно-белый телевизор воспринимает сигнал цветности как шум и игнорирует его. Но цветной телевизор может отделить сигнал цветности от сигнала яркости с помощью фильтрующих контуров.

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

Сначала я подумал, что нужно очень быстро переключать пин ввода / вывода, чтобы напрямую генерировать видеосигнал. Однако вскоре я понял, что с моим 1284P, работающим на тактовой частоте 14,318 МГц, я не смог бы переключать его достаточно быстро, чтобы отобразить более четырех цветов. Дело в том, что его встроенным последовательным интерфейсам потребовалось бы два тактовых цикла для отправки одного бита, что ограничило бы мою тактовую частоту до 7.159 МГц. Apple II для подключения своей внешней микросхемы к видеовыходу использовал быстрый прямой доступ к памяти, в то время как его ЦП был занят внутренней обработкой. Но, поскольку оперативная память моего компьютера интегрирована в микросхему, я не мог использовать этот подход.

Поэтому я заглянул в свои ящики и вытащил четыре микросхемы серии 7400 — два мультиплексора и два параллельно-последовательных сдвиговых регистра. Я смог параллельно установить восемь выводов 1284P и отправлять с них данные одновременно в мультиплексоры и регистры сдвига, которые преобразуют их в высокоскоростной последовательный поток битов. Таким образом, я научился генерировать биты достаточно быстро, чтобы отображать на экране около 215 различных цветов. Однако мне пришлось заплатить за это своей вычислительной мощностью: обработка видеосигнала постоянно съедает 75% ресурсов процессора.



Компактный компьютер


Amethyst — это одноплатный компьютер. Он собран всего из шести интегральных микросхем — процессор, USB-интерфейс и четыре микросхемы серии 7400, которые служат для создания 215-цветного изображения. Клавишные переключатели припаяны непосредственно к плате, которая также поддерживает аудио и четыре последовательных соединения ввода / вывода для периферийных устройств, таких как игровые контроллеры и устройства хранения данных. Писать программы и запускать их можно благодаря встроенной виртуальной машине Forth.

Мне нужна была легковесная среда программирования для пользователей, что и заставило меня выбрать Forth вместо традиционного Basic. Forth — это старый язык программирования для встраиваемых систем, он поддерживает интерактивность и способен эффективно компилировать код. С ним вы можете сделать достаточно много, используя минимальное количество ресурсов. Поскольку 1284P не позволяет выполнять скомпилированный машинный код непосредственно из его ОЗУ, пользовательский код вместо этого компилируется в промежуточный байт-код. Этот байт-код затем подаётся в качестве входных данных на виртуальную машину, запущенную из флэш-памяти 1284P. Код виртуальной машины был написан на ассемблере и оптимизирован вручную, чтобы сделать его максимально быстрым.

Как инженер, работающий в компании, которая производит лазерные 3D-принтеры, я имею доступ к передовым станкам для лазерной резки. Так что я легко спроектировал и изготовил деревянный корпус (подсмотрел отделку под дерево у Atari 2600). Механические переключатели клавиатуры были припаяны непосредственно к одиночной печатной плате Amethyst. У этой клавиатуры есть одна любопытная особенность — отсутствие привычного всем большого пробела. Вместо него — просто кнопка, скромно расположившаяся над клавишей Enter.

Полная схема, PCB-файлы печатной платы и исходный код доступны в моем репозитории на GitHub. Так что вы можете создать свой собственный Amethyst или даже улучшить мой проект. А вдруг вы сможете придумать, как сэкономить ещё парочку микросхем?

VDSina.ru — хостинг серверов
Серверы в Москве и Амстердаме от 11 рублей в день

Комментарии 14

    +6
    Автор мог бы выбрать микросхему FPGA и таким образом сократить число микросхем до одной (не считая регуляторов напряжения).
      +2
      Любая синезубая клавиатура + ESP32, из его i2s (он там немного параллельный) можно даже VGA сделать с 256 цветами RGB332, ну или также либо композитный, либо вообще вещать модулированный видео сигнал (гармониками) прямо в телевизор, чтобы уж совсем без проводов, тогда даже резисторов на ЦАП не надо, хватит куска провода для антенны. Ну а у самого процессора дури хватит не то что любой 8ми битный МК эмулировать, но и на х86 (286/386) замахнуться можно.
        +1
        Тогда уже проще сразу взять Малинку, либо Апельсинку и получить готовый HDMI. Такие проекты делаются не для того, что бы сделать реально юзабельный компьютер, а для фана.
          +1
          проще, но не за 2$ получится, и никакого фана, а так хоть какой-то челлендж из серии «впихнуть невпихуемое».
          а вот с китайской документацией и закрытыми радиоблобами подцепить bluetooth клавиатуру, а то и lowspeed usb хоста на gpio изобразить (V-USB) под клавиатуру, завести i2s на выход видео, или через wifi по rstp на умный телевизор картинку сразу отдавать, и ещё эмулятор какого-нибудь спектрума/atari потом напильником дорабатывать — совсем другое дело.
      –1

      Сильно не нравиться, когда в проекте схема только в виде файла проекта. А в PDF схему положить можно?

        0
        К сожалению, автор только в таком виде предоставил информацию.
        +3
        FORTH — это пять!

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

        Деревянный корпус — еще плюс 100 к карме чувака :)
          +2
          Forth! Аж захотелось пощупать этот компьютер.
            +1
            Оооо, FORTH, первая любовь! В первый раз жалею, что плюсануть карму можно только единожды, и в данном случае не автору проекта… Гитхаб-репу однозначно в закладки. Нет, не так. Репу скачать себе обязательно!
              0
              Вот еще похожий проект, реализация совместимого с ZX Spectrum 128K компьютера на базе ATMega128.
                +2
                На самом деле таких проектов гораздо больше, и он не самый маленький или совершенный.
                Игровая видеоконсоль на AVR AVGA
                VGA output using a 36-pin STM32
                Space Invaders for STM32
                А вот тут «Компьютеры на базе AVR-микроконтроллеров» большой обзор самоделок созданных на базе AVR, среди которых хотел бы отметить «PMD-85» и «AVR ZX Spectrum 2.0» действительно потрясающий проект нашего соотечественника — Василия Лисицына — полностью функциональный «клон» компьютера ZX-Spectrum!
                Спецификации AVR ZX Spectrum 2.0
                • Разрешение экрана: 256 х 192 точки
                • Матрица знакомест экрана: 32 х 24
                • Количество цветов на знакоместо: 2
                • Число цветов экранной области: 8
                • Число цветов бордюра: 8
                • Число градаций яркости для каждого цвета: 2
                • Эквивалентная частота ЦП: 2,333 МГц
                • Порты ввода/вывода: 0xFE, 0x7FFD, 0x7FFD, 0xBFFD
                • Клавиатурный интерфейс: PS/2
                • Число задействованных клавиш: 82
                • Число каналов звукового сопровождения: 4
                • Перечень каналов звукового сопровождения: левый AY8910, правый AY8910, средний AY8910, бипер
                • Видеовыходы: ЧБ выход, RGB выход, отдельный выход синхронизации
                • Поддержка загрузки/выгрузки «на ленту»: имеется
                • Дополнительные устройства ввода/вывода: micro-SD карта
                • Поддерживаемые модели ZX Spectrum: Pentagon 128 K, ZX Spectrum 128 K, ZX Spectrum 48 K, ZX Spectrum +2, ZX Spectrum +3, ZX Spectrum 48 K ` 2006, OPEN SE BASIC 128 K, OPEN SE BASIC 48 K
                • Дополнительная операционная система: SD DOS
                • Файловая система: FAT32
                • Разъём шины ввода/вывода: имеется
                • Конструкция: двухсторонняя печатная плата 140 х 22 мм, установка внутри клавиатуры или в отдельный корпус
                • Питание устройства: соединитель mini-USB «F», напряжение +5 В


                Конфигурация AVR ZX Spectrum 2.0
                плата AVR ZX-Spectrum 2.0 с установленным эмулятором AY8910(12), кстати тоже на ATMega
                Плата AVR ZX-Spectrum 2.0 с установленным эмулятором AY8910(12), кстати тоже на ATMega

                Плата в базовой конфигурации имеет на борту 3 микроконтроллера и микросхему динамической памяти аж на 512 кб:

                • Центральный процессор (ATMega128)
                • Видеопроцессор (опять ATMega128)
                • Контроллер клавиатуры (ATTiny2313)

                Это позволяет «в теории» реализовать компьютер с таким объемом памяти. Помимо этого на плате есть некоторое количество микросхем мелкой логики.

                Уже сейчас помимо «спектрума» плата может функционировать, как Robotron 1715. То есть на этой базе можно реализовывать и другие компьютеры!

                Плюс в статье для (любителей ФОРТа) рассматривается FIGnition
                "«одноплатник», работающий под управлением ФОРТ-машины. Устройство способно управляться с экраном размером 25x24 символов, 16 пользовательскими символами, ну или графикой размером 160x160 точек.Стоит отметить, что устройство может работать как с PAL-телевизорами, так и с NTSC — зависит от загруженной прошивки микроконтроллера ATMega168.
                Особый интерес вызывает способ ввода данных. Обычно с AVR-устройствами часто интегрируют поддержку PS/2 клавиатуры, коих в избытке (пока что). Автор подготовился к вселенской катастрофе и организовал ввод с помощью восьми кнопок… Перебор значений на них организован по образу и подобию набора SMS в кнопочных мобильных телефонах.
                Безусловно, такое устройство будет интересно в первую очередь поклонникам языка FORTH.
                Сам автор предлагает приобрести комплект для сборки, хотя схема открыта, и в принципе желающие могут собрать подобное устройство самостоятельно."


                Ну и конечно «Самый медленный Linux компьютер в мире» на AVR

                Но не AVR-ом единым жив человек
                Вот «Ретро-компьютер (BASIC) на STM32»
                или «Spectrum-48 против пачки сигарет, каша из топора или что может STM32F103C8T6+video(update)»

                и на ESP8266
                «Аппаратный эмулятор Радио-86РК на ESP8266» на ZX-PK.RU
                Или на Хабре «Радио-86РК на ESP-01S»
                  0
                  Поток нулей, отправленный компьютером на телевизор будет воспринят как постоянное низкочастотное аналоговое напряжение, то есть, чёрный цвет. Поток единиц будет рассматриваться как постоянное высокочастотное напряжение, то есть белый цвет.

                  Всё совсем не так:


                  A stream of 0s sent by a computer to a television as the CRT scanned along a row would be interpreted by the TV as a constant low-analog voltage, representing black. All the 1s would be seen as a constant high voltage, producing pure white.
                    0
                    А это интересно
                    Собираем 8-битный компьютер: как уменьшить количество микросхем до шести

                    А в оригинале
                    Build This 8-Bit Home Computer With Just 5 Chips


                    Это точно перевод?
                      0
                      Автор изменил статью уже после её публикации здесь. В «подвале» оригинала написано:
                      This article appears in the April 2020 print issue as “8 Bits, 6 Chips.”

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

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