Концепт-рисунок компьютера Coolsystem
Концепт-рисунок компьютера Coolsystem

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

Coolsystem - идея компьютера, сочетающего в себе идеи о защищенной среде выполнения (причем в очень-очень специфичном варианте) и способного запускать готовый софт для восьмибитных персоналок 80-х годов. Также он может использоваться для изучения основ схемотехники, своего рода учебный компьютер.

Читая статью, помните, что я живой человек и что совсем недавно я тоже не знал, что такое SPI шина и прочие технические тонкости. К тому же я совсем не умею упорядочивать изложение. Что есть, то есть. Также будут полезны комментарии с вычиткой статьи. Я честно пытался перечитать то, что написал здесь, но всё равно многие ошибки будут обнаружены не мной, а читателями.

Насколько готово?

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

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

Какой микроконтроллер в основе?

В компьютере Coolsystem используются два чипа Atmel ATmega8, они работают совместно над общей микросхемой памяти. В качестве видео-чипа используется память со встроенным генератором видеосигнала VS23S010D. Почему именно этот чип-сет - долгая история. Сомнительная попытка объяснить это дается в разделе ниже про безопасный компьютер. Возможно, автору просто хочется странного.

Сколько стоят компоненты?

Пятивольтовые atmega8 можно найти почти бесплатно в больших количествах. Новые стоят примерно 330 рублей за штуку.

Самый дорогой компонент - это видеопамять VS23S010D со встроенным PAL кодером. Они производятся в Финляндии и за них приходится отдать 1600 р за штуку. Довольно специфичный чип.

Также понадобится SRAM память не менее 128 килослов по 8 бит. Это будет память для хранения программ эмулируемого компьютера. Цена на SRAM память довольно большая - примерно 600 рублей за чип. Можно было попробовать DRAM память, но с ней бывает очень тяжело обращаться - она требует последовательное чтение и постоянную регенерацию.

Печатная плата, клавиатура, корпус и крепежные детали - туда я еще не ходил. Думаю, это будет стоить сопоставимо с начинкой компьютера.

Но зачем?

Этот вопрос не принято задавать в мире компьютерного искусства (демосцены), где многое делается ради прикола. Проект по своей сути - эксперимент на уровне идеи.

Но, всё же, какой-то смысл в этом есть. Одно из возможных применений проекта Coolsystem - это восстановление поврежденных ретро-компьютеров. В целом, компьютеры 80-х годов чаще ломаются, потому что они состоят из старых компонентов. Это сильно отпугивает людей от ретро-восьмибитной экосистемы в принципе. Замена компонентной базы на новую должна исправить эту проблему.

Другие похожие проекты

Я не смогу назвать всех людей, пытающихся делать собственный восьмибитный компьютер ради прикола. Тысячи их. Ben Eater - сделал наиболее продвинутый компьютер на дискретной логике. Его YouTube канал. Артём Кашканов @radiolok творит самодельные компьютеры самых разных вариантов. Также можно заглянуть на [hackaday.io] - там часто появляются новые имена.

Конкретно эмуляция ретро-машины ZX Spectrum на ядре AVR - это тоже уже было. Проект называется AVRSpeccy. Мой вариант отличается от AVRSpeccy только появлением отдельного чипа для генерации видеосигнала и некоторыми другими мелочами. Я смог связаться с автором AVRSpeccy Василием Лисицином по электронной почте.

Занятная игрушка - UzeBox - игровая приставка, в основе которой - быстрый AVR, способный выводить видеосигнал через DMA порт.

Восьмибитный софт

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

Чтобы невозбранно получить всё, что накоплено человечеством в этой сфере, нужно всего лишь сделать так, чтобы Coolsystem могла притворяться ��аким-нибудь популярным ретро-компьютером. Выбор пал на ZX Spectrum и на Вектор 06Ц.

Почему именно эти два компьютера легче эмулировать?

Скучные технические подробности

Выбор компьютеров ZX Spectrum и Вектор 06ц обусловлен их особенностями хранения графической информации в памяти. Для наиболее быстрого вывода цветной картинки в проблематичный видео-чип (о нем позже) необходимо, чтобы пиксели были упакованы по восемь штук в байт. То есть, нужно чтобы был один бит на пиксель. А цветной вывод организуется либо атрибутом знакоместа, либо дополнительными битами, которые также упакованы в свои байты.

Компьютер ZX Spectrum реазизует принцип со знакоместами. А Вектор 06ц имеет очень похожую систему упаковки пикселей, но с несколькими плоскостями одновременно (буквально, мнонхромные картинки, каждая со своим компонентом цвета, хранятся в разных 'страницах памяти').

Так получилось, что эти упакованные байты очень легко загрузить в регистры и сериализовать их (превратить в поток битов). Такой подход позволит экономить ценные такты времени на нашем относительно медленном AVR ядре.

Сможет ли Coolsystem когда-нибудь эмулировать другие более сложные ретро-машины? В теории - да. Но это очень сложная задача, которую может решить только сообщество в том случае, если компьютер станет хоть немного популярен. Например, вполне легко добавить эмуляцию компьютера БК-0010. А вот Commodore 64 с его аппаратными спрайтами - уже почти нереально.

Выбор основного микроконтроллера, на котором будет строиться Coolsystem (ATmega8), серьезно повлиял на возможности системы. Не все эмуляторы можно реализовать, имея такое ограничение в тактовой частоте.

Особенности графического чипа

VS23S010D - относительно свежий чип памяти, технологии Static RAM, со встроенным генератором видеосигнала и сигналов цветности PAL/NTSC. Позиционируется как энергоэффективное решение для встраиваемых систем. Позволяет связать схему с телевизором, почти не требует обвязки.

Видео-данные должны быть в формате YUV (яркость и два компонента цвета). Поэтому чтобы вывести картинку, ее придется предварительно обработать.

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

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

Предыстория, как же так вышло

Задача стояла простая - связать самодельный компьютер, основанный на AVR микроконтроллере, с аналоговым телевизором.

Что-то вроде этого
Что-то вроде этого

Телевизор (или просмотровый монитор, если в нем нет тюнера) - это отличный способ вывода графической информации для самодельных компьютеров. Генерация видео-сигнала относительно простая. При желании, можно разобраться и с цветным сигналом системы PAL (я уже примерно представляю, что такое color burst и зачем он).

Но вот беда, AVR слишком медленный, он едва успевает за электронным лучем. Генерировать сигнал программно напрямую - не выйдет. Можно лишь выдавать компоненты сигнала, похожие на VGA, которые затем надо направить в PAL coder.

Готовые PAL кодеры не продаются. Можно в теории добыть PAL coder из приставки Денди/Famicom, но это не экономный способ.

Но потом мне попался проект насадки на Ардуино, добавляющий ему видеовыход. В основе использовался незнакомый мне до этого чип - VS23S010D.

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

Хитрость

Для начала надо решить, нужно ли нам отправлять данные в видеочип со скоростью луча? Ведь видеочип имеет собственную память и способен сам запоминать картинку. Если отправлять в видеочип только измененные участки картинки, можно существенно освободить ресурсы на что-то другое.

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

Ответ - нам надо попытаться отправить картинку с той скоростью, с которой она генерируется на реальном ZX Spectrum - это 7 мегагерц тактового сигнала, на каждый такт которого генерируется один пиксель.

В микроконтроллере atmega8 есть только обычный SPI который выдает один бит за один цикл. Видеочип требует минимум восемь бит на один пиксель (можно меньше, но тогда цвет будет странный). При максимальной скорости SPI Master 16 мегагерц мы получим поток 2 мега-пикселя - а это в несколько раз медленнее чем нам нужно.

SPI шина. Названия выводов будут другими, но смысл тот же
SPI шина. Названия выводов будут другими, но смысл тот же

Если бы в чипе atmega8 была возможность включить Dual SPI или даже Quad SPI, это бы немного улучшило ситуацию.

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

Но тогда не получится использовать механизм прерываний. Придется расходывать вычислительную мощность на вывод сигналов управления параллельной шиной.

Байты, попадающие в видеочип будут обладать очень низкой энтропией. Они буквально будут только двух типов - светлая точка и темная точка. Именно так работает ZX Spectrum. Лишь через каждые восемь пикселей цвет меняется на другой.

Из этого вытекает идея о микросхеме памяти, в которой будет храниться 'палитра' с готовыми байтами, а переключение между светлой и темной точкой будет по сигналу с того самого SPI, встроенного в atmega8. Бинго! Теперь процессор может запустить SPI копироваться, и в оставшееся время делать другие дела.

Чтобы легче считывать данные из основной памяти, надо сделать регистр хранения адреса в видеопамяти, специально для контроллера дисплея. Этим регистром будут микросхемы 74hc193 и 74hc574, расположенные на рисунке в левой нижней части.

А для того чтобы получить вкусный графический режим компьютера Вектор 06Ц - нужно превратить обычный SPI в Quad SPI с помощью дополнительных сдвиговых регистров 74hc165. Эти регистры можно будет заполнить через параллельный вход, а они уже сами будут выдавать биты, по одному биту за раз, в адресный вход палитры. Схему соединений нужно отработать, рисунок еще не готов.

Ученый отличается от проходимца тем, что ученый выполняет свои обещания. Когда на экране телевизора появится красочная картинка, генерируемая Coolsystem - это будет означать, что мой трюк с видеопамятью удался. Но чтобы этого достигнуть, понадобится еще много экспериментов.

Что такое безопасный компьютер?

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

Хочется странного

Безопасный компьютер - это такой компьютер, который полностью познаваем. Если вы знаете, как в точности работает ваш компьютер, и вы способны повлиять на его работу, то у вас появляется шанс организовать систему, абс��лютно имунную к кибер-угрозам. Это делает Coolsystem очень нишевым компьютером с высоким уровнем безопасности для специальных применений.

Можно ли смотреть YouTube на Coolsystem? - Нет. На нем в принципе нельзя запускать слишком сложные программы.

Сможет ли хакер похитить текстовый файл, который существует только на Coolsystem? - скорее всего, нет. По уровню безопасности этот компьютер сравним с бумажными книгами. Как и с любыми необычными вещами, вы можете проявить фантазию и придумать ему применение. Но не стоит ожидать от него сверхспособностей. Это всего лишь инструмент, весьма необычный.

Казалось бы, можно было просто поставить более современный микроконтроллер RP2350 - тогда машина получилась бы намного проще и сильно дешевле в производстве.

Но я по прежнему настаиваю на чипе AVR, потому что он более простой познаваемый. Цена за это решение высока. Ядра AVR считаются медленными, хоть там и работает выполнение инструкций за один такт, сама тактовая частота достаточно низкая - 16 МГц.

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

Я и сам постепенно начинаю осознавать проблемы выбора чипа и долго думал прежде чем ставить AVR.

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

Что такое учебный компьютер?

Это концепция из позднего СССР - программно-аппаратный комплекс для обучения информатике, который поставлялся в общеобразовательные школы.

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

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

Также есть распространенная практика выпускать компьютер в виде набора для сборки. Coolsystem может быть собран конечным потребителем и по необходимости модифицирован под особые нужды. А корпус компьютера может быть напечатан на 3d принтере. Это дает возможности по кастомизации внешнего вида устройства (выбор цвета, улучшения и проч.).

Я постараюсь сделать всё возможное, чтобы это был настоящий учебный компьютер, который не стыдно подарить кому-нибудь.

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

Оффлайн-встреча

Я буду рассказывать про Coolsystem на фестивале Undefined, который сам же и организую )

Какие-то неведомые силы заставляют автора каждые пол-года ехать через всю страну в город Рощино (Выборгский район, С. Петербург) и проводить/организовывать там компьютерный фестиваль на несколько дней подряд. Название фестиваля - Undefined DIY Fest - полностью соответствует специфике. Иногда удается пригласить интересных технарей с докладами, чтобы получилась полноценная конференция. Если вам интересно, подходит ли ваш доклад под тематику - да, подходит. ) Участие бесплатное, как для докладчиков, так и для зрителей. Всевозможные контакты для связи - здесь.

Комментарии (1)


  1. HardWrMan
    30.10.2025 18:25

    Можно в теории добыть PAL coder из приставки Денди/Famicom, но это не экономный способ.

    Нет, нельзя. PPU в этих системах формирует PAL/NTSC сразу нативно. Дискретные кодеры появились лишь в приставках 4го поколения (Sega Megadrive/Genesis, Super Nintendo Entertainment System) и более поздних приставках 5го поколения (Sony Playstation).