< Z-FRAME SEG 0001 · 13.07.2026
; ──────────────────────────────────────────── ; Z-FRAME · DEVLOG ENTRY 0001 ; ──────────────────────────────────────────── 0000 31 FF 7F LD SP, 7FFFh ; init 0003 21 01 00 LD HL, ENTRY ; this post 0006 CD 20 00 CALL RENDER

Z-Frame: Компьютер с нуля

Первая запись. О том, почему Z80 в 2026 году...

PC 13.07.2026
BC $1F5E
HL z80 · fpga · z-frame

Вступление

Общий замысел появился лет 8 назад. А проект начал продумываться в марте 2026. Что это? Компьютер со своей архитектурой, своей операционной системой и всем прилагающимся.

Все компоненты для прототипирования
Все компоненты для прототипирования

Зачем

Во-первых, появилась мысль "хочется поизучать ПЛИС". Но просто так любая задача "в вакууме" - не самое интересное занятие. Следующая мысль - "хочется сделать свой компьютер, а не клон ZX Spectrum". И в какой-то момент это всё объединилось в конкретную, пусть и не самую простую задачу - собственно, этот самый Z-Frame. А по ходу продумывания архитектуры и мыслей "что должно получиться на выходе?" это всё сформировалось во вполне конкретную архитектуру, которая сама по себе органично повторила многие решения, существующие в современных "обычных" компьютерах, к которым "инженерная мысль" приходила в разное время от множества ограничений и наслаивающихся решений прошлых лет.

Z-Frame

Z - от Zilog Z80, процессора, появившегося в 1976 году и использовавшегося очень много где. Например, известнейший ZX Spectrum (и многочисленные его клоны, типа "Ленинграда", "Дельта-С" и подобные), компьютеры Yamaha MSX, как второй процессор (первый/основной - Motorola 68000) в Sega Mega Drive (она же - Genesis), управлявший звуком, и даже в телефонах с АОН (например, "Русь").

А Frame - от mainframe, больших машин, занимавших целые залы. Из современных можно привести в пример мейнфреймы IBM серии z (например, IBM z17), а "z" тут - просто совпадение, само собой.

Z80 + mainframe. Так и получился Z-Frame.

Архитектура

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

Процессор - Z80. Почему именно Z80? Он мне хорошо знаком по тому же клону ZX Spectrum - "Дельта-С48", с которого и начал вход в "IT" в 1997 году.

Zilog Z80 Z84C0006PSC
Процессор Zilog Z80 Z84C0006PSC

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

Минусы - процессор старый, работает от 5В (практически все современные микросхемы работают от 3.3В, а 5В-микросхемы нельзя напрямую соединять с 3.3-вольтовыми почти всегда: или сгорит 3.3В-микросхема, или не "поймёт" 5В-микросхема), у него нет защиты памяти - то есть любая программа может случайно или намеренно затереть чужие данные (это одна из тех проблем, которую я как раз и хочу решить средствами ПЛИС) и прочих "дополнений", которые появились уже позже.

А уже эта "защита памяти" вылилась во все остальные "дополнительные функции" при проектировании своей архитектуры.

Ему нужна оперативная память, откуда он будет брать инструкции и данные, и куда будет "складывать" результаты работы этих самых инструкций. Сейчас, в наше время, для такого не самого современного процессора, с этим проще, поэтому будет 512КБ SRAM-памяти (static random-access memory). Что в 8 раз (512 / 64 = 8) больше, чем позволяет адресовать процессор напрямую. "Напрямую" здесь означает, что у Z80 адресная шина имеет 16 выводов, то есть, 16 бит = 2^16 (2 в 16-й степени) = 65536 байт = 64КБ. Это 65536 адресов ("ячеек") памяти.

AS6C4008-55PCN
Alliance AS6C4008-55PCN, (512K x 8, 55ns,), память SRAM 512K x 8

Память добавили. Но в эту память надо загрузить программу и данные, с которыми эта программа должна что-то делать (в идеале). Та же "Дельта-С48" (ну или ZX Spectrum вообще), как и многие компьютеры того времени (80-90-е) грузили программы с магнитофонной ленты. Сейчас это, конечно, будет несколько неудобно. Поэтому лучше воспользоваться современными технологиями и, раз уж архитектура полностью своя, то я волен изобретать что угодно. Поэтому за такие (и не только) дела будет отвечать микроконтроллер. У меня это будет STM32F407.

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

Дальше наступает момент конфликта. О деталях которого и путях его разрешения будет, опять же, в следующих записях. А пока стоит сказать, что если процессор и тот же "загрузчик программ" - STM32F407 будут "лезть" к одной и той же памяти одновременно, то возникнет "конфликт шины" (bus contention).

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

Если упростить до минимума, то любой процессор (когда на него подано питание и тактовая частота) бесконечно пробует обратиться к памяти, прочитать инструкцию (и следом данные, если необходимо) из неё и выполнить. Но в этот же момент мы можем решить что-то в эту память записать. Новую программу, например. То есть, конфликт нужно как-то разрешить - разнести во времени "загрузку в память программы/данных" и "исполнение процессором этой программы". Поэтому здесь появляется "арбитр шины" (bus arbiter). Устройство, которое распределяет ("раздаёт") эту шину между процессором и "загрузчиком" определённым образом и по определённым условиям.

В тех же ZX Spectrum был один "главный" - это сам процессор, который владел почти единолично памятью (видеовывод пока не берём в расчёт), сам же и отвечал за загрузку данных в эту память, сам же и исполнял.

У меня же будет несколько сложнее. Поэтому тут разделение должно быть явным, строго распределённым. Для арбитра в таком случае идеально подойдёт ПЛИС (FPGA) - работает намного быстрее процессора, с фиксированными таймингами (почти всё строго распределено во времени), полностью конфигурируема и с очень коротким временем (то есть, быстро) реакции на "события" от процессора, например, "запрос на чтение из памяти для новой инструкции", "запрос на запись в память" и так далее. Из всего, что хотелось получить от арбитра, получился "аппаратный надзиратель" для процессора, который создавался во времена, когда ничего из описанного выше не умел сам - что органично дополнило "зачем" для меня самого.

Altera Cyclone IV EP4CE10E22C8N
ПЛИС Altera Cyclone IV EP4CE10E22C8N

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

Теперь - ввод-вывод. SD-карта как источник программ. Но так же нужно будет понять, что процессор всё-таки что-то делает, а не просто стоит на плате. Он должен уметь хотя бы текст показывать как-то. Сам по себе он, конечно, не сможет показать ничего. Но он может отправить текст (сообщение) куда-то наружу. За что будет отвечать тот же самый микроконтроллер (STM32F407), к которому уже можно подключиться "извне" и который будет перенаправлять эти сообщения от процессора. Самый простой способ - это UART/USART. Если грубо и что точно знают или хотя бы о чём слышали многие - COM-порт. Электрически, конечно, это будет не совсем он, но функционально - то же самое. Также через этот порт можно и самому будет что-то отправить в компьютер.

STM32 STM32F407VGT6
Микроконтроллер STM32F407VGT6

Подытог

На фото - сам Zilog Z80, отладочная плата STM32F407-Discovery, минимальная отладочная плата с ПЛИС (FPGA), микросхема оперативной памяти и несколько "промежуточных" микросхем, которые сами по себе не относятся к "вычислениям", а нужны только для сопряжения старого процессора с современными микросхемами.

А все принципы, по которым будет строиться вся эта "система-как-компьютер" - точно такие же, по которым построены любые современные что x86-совместимые компьютеры, что Mac'и.

Что дальше

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

FFFF  76        HALT