★ В музеї А · A2

Що всередині: Z80, ULA і магія 48 кілобайт

9 хв читання · Музей SNC · Опубліковано 2026-07-28

Під клиноподібним корпусом ZX Spectrum — лише кілька мікросхем: процесор Z80, 16 КБ ПЗП і 48 КБ ОЗП. Розбираємо, як ці частини ділять один адресний простір і чому пам'ять машини «не рівна».

Головна теза

Продуктивність Spectrum визначає не тактова частота, а те, як процесор і чип ULA ділять пам'ять: нижні 16 КБ ОЗП, де лежить екран, ULA притримує для себе, тож код у цій зоні виконується повільніше за код у «вільних» верхніх 32 КБ.

Не плутати

«48 кілобайт» — це обсяг ОЗП, а не всієї пам'яті. Процесор Z80 бачить 64 КБ адрес: 16 КБ ПЗП унизу плюс 48 КБ ОЗП. Не плутати обсяг ОЗП із адресним простором.

Кілька чипів, які треба «познайомити»

У попередньому матеріалі ми показали, що ZX Spectrum став дешевим завдяки радикальному спрощенню схеми. Тепер зазирнімо під кришку й подивімося, що з цього спрощення вийшло як інженерна конструкція. Активних дійових осіб небагато: процесор Zilog Z80A на частоті 3,5 МГц, 16 КБ постійної пам’яті (ПЗП) із мовою Sinclair BASIC, до 48 КБ оперативної пам’яті (ОЗП) — і замовний чип ULA, який робить усе, чого не робить процесор.

Головна теза цього тексту: швидкість Spectrum визначає не так тактова частота, як спосіб, у який Z80 і ULA ділять між собою пам’ять. Щоб зрозуміти чому, спершу треба побачити, як ці 64 кілобайти взагалі влаштовані.

64 кілобайти, які бачить процесор

Процесор Z80 адресує рівно 64 КБ пам’яті — це фізична межа його 16-бітної шини адрес. У 48-КБ Spectrum цей простір використано повністю й без жодного перемикання банків: нижні 16 КБ — це ПЗП, решта — ОЗП.

Розкладка проста. Адреси від 0 до 16383 (у шістнадцятковому — 00003FFF) займає ПЗП: там лежить інтерпретатор Sinclair BASIC та системні підпрограми, які запускаються одразу після ввімкнення. Далі, з адреси 16384 (4000) і до самого верху, іде 48 КБ ОЗП. Саме тут криється перша важлива деталь: «48 кілобайт» — це обсяг ОЗП, а не всієї пам’яті машини. 16 КБ ПЗП плюс 48 КБ ОЗП і дають ті самі 64 КБ адресного простору Z80.

Молодша, 16-КБ модель відрізнялася від старшої лише обсягом ОЗП — усе інше на платі було ідентичне. Тому й далі ми говоримо про 48-КБ версію: вона показує архітектуру в повному вигляді.

ULA: другий «процесор», якого не видно

Поруч із Z80 на платі стоїть чип, який не рахує й не виконує програм, але без якого Spectrum не працює, — ULA (Uncommitted Logic Array). Це замовна мікросхема, яку для Sinclair виготовляла британська Ferranti; її внутрішній устрій докладно розібрано у фаховій праці Кріса Сміта «The ZX Spectrum ULA».

Функціонально ULA — це «все інше» комп’ютера в одному кристалі. Вона формує відеосигнал для телевізора, опитує клавіатуру, керує введенням-виведенням на касетний магнітофон, звуковим бипером і кольором рамки екрана. Там, де в дорожчих машинах стояли б десятки окремих мікросхем, у Spectrum працює один чип — і саме тому машина коштувала стільки, скільки коштувала.

Спадковість схеми. Замовну ULA неможливо було «дістати на радіоринку». Тому пострадянські та українські клони, які збиралися без доступу до фірмового чипа, відтворювали його функції набором звичайних мікросхем дискретної логіки. Через це вони часто мали інакші, ніж в оригіналу, часові характеристики — і частина ігор, чутливих до точного таймінгу, на клонах поводилася не так, як задумували автори.

Чому пам’ять «свариться»: contended і uncontended

Тепер — головне. Щоб намалювати картинку на екрані, ULA мусить 50 разів на секунду вичитувати вміст екранної пам’яті. А екранна пам’ять лежить у ОЗП — тобто в тому самому масиві, з яким одночасно хоче працювати процесор. Двоє пристроїв не можуть читати одну мікросхему пам’яті в один і той самий момент, тож конструктори віддали пріоритет ULA: коли їй треба звернутися до пам’яті, щоб намалювати рядок екрана, процесор чекає.

Але чекає він не завжди. Ця «черга» стосується лише нижніх 16 КБ ОЗП — адрес від 4000 до 7FFF, де й розташований екран. Саме цю зону називають contended («пам’ять із суперництвом»): доступ до неї ULA притримує. Верхні 32 КБ (з адреси 8000 і вище) — uncontended: до них ULA не звертається, тож процесор працює там на повній швидкості без затримок.

Ефект помітний лише тоді, коли ULA справді малює зображення. Поки промінь іде по рамці або телевізор перебуває у зворотному ході, ULA до пам’яті не звертається — і затримок немає. На практиці це означало дивну для новачка річ: той самий код виконувався швидше, якщо його розмістити у верхніх 32 КБ, і повільніше — у нижніх 16 КБ. Досвідчені програмісти навчилися тримати критичні до швидкості підпрограми подалі від екранної зони.

Екран, зашитий у пам’ять

Варто окремо глянути, як саме влаштована та «дорога» нижня ОЗП. Зображення на Spectrum — це 256×192 точки. Дані про них лежать у пам’яті двома окремими блоками, одразу з початку ОЗП.

Перший блок — екранний файл (display file): адреси 16384–22527, рівно 6144 байти. Тут зберігається, яка точка засвічена, а яка ні — але без кольору. Колір лежить у другому блоці — файлі атрибутів: адреси 22528–23295, ще 768 байтів. Разом — 6912 байтів на всю картинку.

Причина такого поділу — знову економія пам’яті. Колір задається не для кожної точки, а для цілого блоку 8×8 точок: на кожен такий блок припадає один байт атрибута, що кодує колір «чорнила» (INK), колір «паперу» (PAPER), підвищену яскравість (BRIGHT) і мерехтіння (FLASH). Уся палітра — 15 кольорів: сім насичених у двох рівнях яскравості плюс чорний. Це вісім разів менше даних, ніж якби колір зберігали для кожної точки, — але й ціна відома: у межах одного блоку 8×8 не можна мати більше двох кольорів. Саме звідси характерне «злипання» кольору на краях спрайтів (attribute clash), яке стало візуальним почерком платформи. Це окрема велика тема — їй ми присвятимо наступний матеріал блоку.

Магія 48 кілобайт

Складімо все докупи. Spectrum — це не «слабкий процесор», а ретельно збалансована конструкція, у якій один чип ULA бере на себе відео та ввід-вивід, а вся пам’ять втиснута в 64 КБ адрес без жодного банкінгу. 48 кілобайтів ОЗП тут — не просто цифра з реклами: це рівно стільки, щоб умістити екран, системні змінні, інтерпретатор-у-роботі й, головне, саму програму користувача з достатнім запасом для ігор та серйозних застосунків свого часу.

За це доводилося платити нерівномірністю: нижня частина пам’яті повільніша, кольору мало, таймінг прив’язаний до променя телевізора. Але для машини за £175 таке рівняння було чесним. І, що важливо для музею, ця архітектура стала еталоном, який потім відтворювали десятки клонів — уже без фірмової ULA, дискретною логікою, з усіма похибками такого копіювання. Про це — у матеріалах блоку про клони.

Експонат музею

У постійній експозиції музею — базова 48-КБ модель ZX Spectrum. Це та сама машина, вузли якої ми щойно розібрали: під кришкою на платі сусідять процесор Z80, мікросхеми оперативної пам’яті та єдиний чип ULA, що заступає собою десятки окремих деталей. На екскурсії ми показуємо, як ці кілька чипів разом складають повноцінний домашній комп’ютер.

Джерела

  1. ZX Spectrum — Wikipedia (англ.) en.wikipedia.org
  2. Contended memory — Wikipedia (англ.) en.wikipedia.org
  3. Sinclair ZX Spectrum 48K — Centre for Computing History computinghistory.org.uk
  4. Chris Smith. The ZX Spectrum ULA: How to Design a Microcomputer (2010) books.google.com