Введение: Самое ценное изображение
В эпоху 8-битных компьютеров экран был не просто средством вывода информации — это было произведение инженерного искусства. Магия ZX Spectrum заключалась в том, как он из скромных 6912 байт памяти создавал узнаваемые, наполненные цветом и характером изображения. Сохранить это изображение — значит сохранить кульминационный момент игрового подвига или результат часов творческой работы в графическом редакторе.Формат .SCR (Screen или Screenshot) — это, по сути, прямой дамп видеопамяти ZX Spectrum. Он появился как естественное решение для сохранения экранных изображений и стал стандартом де-факто, пережив десятилетия благодаря своей абсолютной простоте и прозрачности.
Если TZX — это сложная аудиозапись, а Z80 — полный слепок системы, то SCR — это моментальный снимок экрана в его самом чистом виде.
Анатомия формата: 6912 байт ностальгии
Гениальность формата SCR в его отсутствии формата как такового. Файл .SCR не имеет заголовка, сигнатуры или метаданных. Это просто необработанная копия видеопамяти ZX Spectrum, записанная подряд в одном файле.
Структура памяти экрана ZX Spectrum
Чтобы понять .SCR, нужно понять организацию видеопамяти. Она разделена на три четкие области, которые в файле .SCR следуют строго друг за другом:| Область | Размер | Адреса в памяти Spectrum | Содержимое |
|---|---|---|---|
| Битмап (Bitmap) | 6144 байта (6 КБ) | 0x4000 — 0x57FF | Чёрно-белая информация о пикселях |
| Атрибуты цвета (Attributes) | 768 байт | 0x5800 — 0x5AFF | Цветовая информация для знакомест 8×8 пикселей |
| Бесполезные байты (Unused) | 768 байт | 0x5B00 — 0x5CFF | Не используется для отображения (часто содержит мусор) |
Итого: 6144 + 768 + 768 = 7680 байт. Именно такого размера должен быть правильный, полный файл .SCR.
Однако многие утилиты и архивы (включая World of Spectrum) часто хранят усечённую версию размером 6912 байт (6144 + 768), игнорируя неиспользуемую область. Оба варианта считаются корректными, но полная 7680-байтная версия является технически более точной.
Детализация: Как устроен битмап
Битмап (6144 байт) организован не интуитивно, что является фирменной особенностью Spectrum. Пиксельная информация хранится построчно, но строки идут в «зеброобразном» порядке.- Экран делится на 24 строки по 8 пикселей в высоту (24 × 8 = 192 пикселя).
- В каждой такой строке хранятся 32 байта (32 × 8 = 256 пикселей в ширину).
- Порядок строк в памяти: 0, 8, 16, 1, 9, 17, 2, 10, 18... и так далее.
Детализация: Система атрибутов цвета
Область атрибутов (768 байт) определяет цвет для каждого знакоместа 8×8 пикселей.Каждый байт атрибута имеет следующую структуру:
Код:
7 6 5 4 3 2 1 0 (биты)
| | | | | | | |
| | | | | | | +-- Бит 0: Яркость (0=нормальная, 1=яркая)
| | | | | | +---- Бит 1: Красный (R)
| | | | | +------ Бит 2: Зелёный (G)
| | | | +-------- Бит 3: Синий (B)
| | | +---------- Бит 4: Флаг мигания (0=нет, 1=да)
| | +------------ Бит 5: Красный фона (R)
| +-------------- Бит 6: Зелёный фона (G)
+---------------- Бит 7: Синий фона (B)
- Биты 1-3: Цвет чернил (красный, зелёный, синий). Комбинации дают 7 цветов + прозрачный (000).
- Биты 5-7: Цвет бумаги (фона). Аналогично 7 цветов + чёрный (000).
- Бит 0: Увеличивает яркость выбранного цвета чернил и фона.
- Бит 4: Если установлен, цвета чернил и фона меняются местами с частотой ~1.5 Гц.
Сравнение SCR с другими графическими форматами
| Формат | Назначение | Размер | Особенности |
|---|---|---|---|
| .SCR | Дамп видеопамяти | 6912/7680 байт | Абсолютно точное сохранение экрана, включая атрибуты и мусор. Не требует декодера. |
| .RAW / .PIX | Растровое изображение | ~16 КБ | Часто содержит распакованный, линейный растровый образ экрана (256×192×1 бит). Проще для отображения на современных системах, но теряет оригинальную структуру памяти. |
| .PNG / .GIF | Современный растровый формат | Зависит от сжатия | Используется современными эмуляторами для скриншотов. Содержит уже обработанное, «очищенное» изображение, часто с эмуляцией цветовых конфликтов. Не является историческим форматом. |
Ключевое преимущество .SCR: Это не интерпретация, а первичный источник. Любое другое представление экрана Spectrum (PNG, GIF) является производным от .SCR или эмуляции.
Практическое применение: От 1980-х до наших дней
Историческое использование:
- Графические редакторы: Программы like Artist, Paintbox, OCP Art Studio позволяли сохранять работы прямо в .SCR.
- Демосцена и пиксель-арт: Художники создавали сложные изображения, используя ограничения атрибутов как творческий вызов.
- Игровые скриншоты: Сохранение рекордов, финальных заставок.
Современное применение:
- Заставки (Loading screens): Многие игры при загрузке с кассеты показывали статичную картинку. Эти заставки широко архивируются в .SCR.
- Ресурсы для разработки: Современные ретро-разработчики используют .SCR-файлы как готовые графические ресурсы для новых игр.
- Кросс-платформенный просмотр: Существуют просмотрщики .SCR для Windows, macOS, Linux и даже мобильных платформ.
- Конвертация и обработка: Инструменты позволяют конвертировать .SCR в PNG, редактировать атрибуты, применять фильтры для сглаживания цветовых конфликтов.
Пример кода на C для отображения .SCR (упрощённый):
C:
// Загружаем файл .SCR в буфер scr_data
unsigned char scr_data[6912];
FILE *f = fopen("screen.scr", "rb");
if (f == NULL) {
// Обработка ошибки открытия файла
return 1;
}
size_t bytes_read = fread(scr_data, 1, 6912, f);
if (bytes_read != 6912) {
// Обработка ошибки чтения (файл меньше 6912 байт)
fclose(f);
return 1;
}
fclose(f);
// Отображаем битмап
for (int y = 0; y < 192; y++) {
for (int x = 0; x < 32; x++) { // x в байтах (0-31)
// *** ИСПРАВЛЕНО: Расчет адреса пиксельного байта по формуле оппонента ***
unsigned char pixel_byte = scr_data[ ((y & 0xC0) << 5) | ((y & 0x07) << 8) | ((y & 0x38) << 2) | x ];
// Адрес атрибута (рассчитывается линейно, как у вас и было)
int attr_y = y / 8;
unsigned char attr = scr_data[6144 + (attr_y * 32) + x];
// Здесь должен быть код для рисования 8 пикселей из pixel_byte
// с использованием цвета из attr...
}
}
SCR в культуре и архивации
World of Spectrum и другие архивы хранят тысячи файлов .SCR:- Заставки к играм — отдельными файлами.
- Графические работы демосцены и художников.
- Промо-материалы и титры игр.
Заключение: Вечная простота
Формат .SCR — это, возможно, самый чистый и долговечный формат из всего наследия ZX Spectrum. В его простоте — сила. Он не зависит от версий, сложных заголовков или алгоритмов сжатия. 6912 байт, и ничего лишнего.Он продолжает жить, потому что решает свою задачу идеально: сохраняет магию экрана Spectrum в её самой аутентичной форме. Каждый .SCR-файл — это не просто картинка, а кусочек работающей машины, цифровая голограмма, которая в любой момент может быть оживлена эмулятором или даже записана обратно в память настоящего «Спектрума».
Как фотография сохраняет момент реального мира, так и .SCR сохраняет момент мира виртуального — со всеми его артефактами, конфликтами и неповторимым шармом.
Статья составлена на основе технической документации с World of Spectrum (worldofspectrum.net), анализа исходного кода эмуляторов и спецификаций формата.