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

Z-Frame: Три подхода к видео - ZX Spectrum, C64 и MSX

Отдельный разбор организации видеовывода на примерах ZX Spectrum, Commodore 64 и MSX

PC 27.08.2026
BC $10CA
HL Z-Frame · architecture · Z80 · FPGA · SRAM · STM32

Три подхода к видео - ZX Spectrum, C64 и MSX

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

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

ZX Spectrum: общая память, но видео встаёт в очередь

За вывод отвечает ULA (Uncommitted Logic Array - заказная специализированная логическая матрица). Своей видеопамяти у неё нет, а экран - это просто кусок обычной RAM, первые ~6.9КБ в банке 0x4000 (битовая карта плюс атрибуты цвета). ULA независимо от процессора вычитывает этот регион и выводит на экран.

Но, в отличие от C64 (ниже), ULA - не хозяин шины: она не захватывает её и не останавливает процессор напрямую. Конкуренция за общий банк памяти разрешается мягче - через contention: во время активной части кадра приоритет на нижние 16КБ у ULA, и если процессор обратится к этой памяти в "занятый" момент, его притормаживают вставкой тактов ожидания (отдельный управляющий сигнал Z80), пока ULA не закончит своё чтение. Видео не правит шиной, а лишь создаёт "помеху" процессору.

Отсюда, кстати, известная особенность ZX Spectrum: contention затрагивает только нижние 16КБ (где экран), а верхние 32КБ - "чистые". Код, критичный к таймингам, располагали в верхней памяти - там процессор с ULA не " конфликтует".

Стоит отметить: ULA - это вообще не "видеопроцессор" в духе VDP или VIC-II. Спрайтов, аппаратного скролла и регистров у неё нет. Помимо картинки она ещё читает клавиатуру, ведёт бипер и кассету, генерирует прерывание кадра. По функциям она беднее и проще, а ту сейчас важна именно её модель доступа к памяти.

C64: видеочип - полноправный хозяин шины

В C64 за картинку отвечает VIC-II. Общается с ним процессор (6502) через память: у 6502 нет отдельного пространства портов, весь ввод-вывод отображён в обычные адреса (memory-mapped I/O), и регистры VIC-II видны как ячейки памяти.

Но главное - VIC-II сам активно читает общую с процессором память (экран, знакогенератор, спрайты) и ради этого вытесняет процессор с шины: на так называемых badline-строках (каждые 8 пикселей по вертикали) он "отбирает" шину у 6502 и притормаживает его. И именно VIC-II задаёт тактирование, а процессор работает с ним в противофазе. То есть в C64 видеочип - активный и приоритетный хозяин шины, делящий память с процессором и вытесняющий его.

MSX: своя память, общение через порты

Видеопроцессор (VDP) - отдельный чип со своей собственной видеопамятью (VRAM), отдельной от основной памяти системы. Процессор (Z80 - MSX тоже был основан на нём) не пускает видеочип в общую память и не делит с ним шину - вместо этого он сам шлёт данные в VDP через порты. У Z80, в отличие от 6502, порты - это отдельное адресное пространство, обращения к которому идут инструкциями IN/OUT. Условно OUT (VDP_PORT), A - и байт ушёл в видеопроцессор, а тот сам разложил его в своей VRAM.

Видео здесь полностью развязано с процессором по памяти: у каждого своя, они не конкурируют за шину, и видеочип не отбирает у CPU такты. Процессор остаётся единственным ведущим.

В итоге

ZX Spectrum - вторгается пассивно: память общая, видео - не мастер на шине, но притормаживает CPU через циклы ожидания.

C64 - вторгается активно: память общая, видеочип - полноправный мастер, вытесняет CPU (badline-стиль).

MSX - своя память, портовое общение, CPU единолично ведущий.

Для Z-Frame я выбрал путь MSX. Вся моя архитектура строится на том, что шиной единолично распоряжается FPGA (арбитр-коммутатор), а устройства к ней не лезут наперегонки. Модели ZX Spectrum и тем более C64, где видео либо тормозит процессор, либо вовсе становится вторым мастером в общей памяти, напрямую конфликтовали бы с этой идеей. "Стиль" MSX подходит лучше всего - видеоподсистема получает свою память и ни за что другое не конкурирует.

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

FFFF  76        HALT