Введение: Не состояние, а процесс
Все форматы, которые мы рассматривали ранее — .TZX, .SNA, .Z80, .TRD — так или иначе сохраняют данные или состояние системы в определённый момент времени. .RZX радикально отличается. Он не отвечает на вопрос «что?», а отвечает на вопрос «как?».Формат .RZX (Recording ZX) — это формат записи действий пользователя. По сути, это макрокоманда, киносъёмка игрового процесса или скрипт с точной привязкой ко времени. Он фиксирует каждое нажатие клавиши, движение джойстика и даже момент сброса (RESET) с точностью до такта процессора, позволяя впоследствии абсолютно точно воспроизвести весь сеанс работы с эмулятором.
Его создание было продиктовано двумя основными потребностями сообщества:
- Верификация и тестирование эмуляторов: Можно ли считать эмулятор идеальным, если он не может в точности повторить запись игры, сделанную на другом эмуляторе или реальном железе?
- Сохранение и обмен игровыми прохождениями (longplays): Как доказать, что вы прошли игру без читов, и поделиться своим мастерством?
История создания: Рождение стандарта
Формат .RZX был разработан в 2001 году группой энтузиастов во главе с Гарри О'Доннелом (Harry O'Donnell). Работа велась в тесном сотрудничестве с разработчиками ведущих эмуляторов того времени: Fuse, Spectaculator, Z80 и других.Философия создания: Создать открытый, хорошо документированный формат, который стал бы единым стандартом для всех эмуляторов, прекратив «войну форматов» в этой нише. И это удалось — .RZX поддерживается всеми основными эмуляторами и по сей день.
Исходный код эталонного кодека и спецификации были опубликованы на сайте www.rzxarchive.co.uk, который стал центральным архивом для таких записей.
Архитектура формата: Контейнер с блоками
.RZX — это формат-контейнер, состоящий из последовательности блоков данных, очень похожий по идеологии на .TZX. Каждый блок имеет свой идентификатор и длину.Структура заголовка RZX (блок 0x54 'RZXH')
Файл всегда начинается с сигнатуры и основного заголовка.| Смещение | Длина | Значение / Описание |
|---|---|---|
0x00 | 4 байта | Сигнатура: ASCII-символы "RZX!". |
0x04 | 1 байт | Мажорная версия формата (например, 0x01). |
0x05 | 1 байт | Минорная версия формата (например, 0x20 для версии 1.20). |
0x06 | 4 байта | CRC32 заголовка. Для контроля целостности. |
0x0A | 2 байта | Длина этого блока заголовка (обычно 0x00 0x1C = 28 байт). |
0x0C | 4 байта | Количество кадров записи (frames). Основная единица времени в RZX (обычно 50 Гц = 1/50 сек). |
0x10 | 4 байта | Создатель записи. Код программы-рекодера (например, 0x00 0x00 0x00 0x01 для Fuse). |
0x14 | 1 байт | Флаги записи (например, строгий режим, наличие snapshots). |
0x15 | 23 байта | Резерв для будущего использования. |
Ключевые типы блоков данных в RZX-файле
После заголовка идут различные блоки, описывающие сценарий записи.| ID (Hex) | Имя блока | Назначение |
|---|---|---|
| 0x80 | SNAPSHOT | Встраиваемый снапшот. Содержит полный снимок состояния системы (обычно в формате .Z80 или .SNA), с которого начинается воспроизведение. Критически важен! |
| 0x81 | INPUT RECORDING | Самая важная часть — запись ввода. Содержит упакованные данные о всех действиях пользователя за определённый интервал времени. |
| 0x82 | SECURITY SIGNATURE | Цифровая подпись. Используется для верификации, что запись не была изменена после создания (для speedrun). |
| 0x83 | CREATOR INFO | Информация о создателе. Может содержать имя автора, комментарии, эмулятор, версию. |
| 0x84 | LEGACY SNAPSHOT | Устаревший снапшот. Для совместимости со старыми версиями. |
Детализация блока INPUT RECORDING (0x81)
Это сердце файла. Он содержит поток так называемых «изменений» (mutations). Каждая мутация — это событие, произошедшее в определённый момент времени (привязанное к конкретному такту эмуляции).Структура потока ввода:
- Заголовок блока: ID (0x81) + длина блока.
- Последовательность кадров (frames): Время разбито на интервалы (по умолчанию 1/50 или 1/60 секунды, в зависимости от видеорежима).
- Внутри каждого кадра — список событий, каждое из которых содержит:
- Смещение в тактах от начала кадра, когда произошло событие.
- Тип события (например: 0x01 — нажатие клавиши, 0x02 — отпускание клавиши, 0x04 — сброс (RESET), 0x10 — чтение из порта Kempston джойстика и т.д.).
- Данные события (например, код нажатой клавиши в матрице Spectrum).
Как работает запись и воспроизведение: Магия детерминизма
Процесс записи:
- Эмулятор в режиме записи (Record) начинает с сохранения снапшота текущего состояния.
- Далее он перехватывает все низкоуровневые события ввода с точной фиксацией момента (номера такта Z80), когда они произошли.
- Эти события упаковываются и периодически записываются в файл .RZX вместе с информацией о количестве прошедших тактов.
- В конце создаётся итоговый файл, содержащий начальный снапшот и всю ленту событий.
Процесс воспроизведения:
- Эмулятор в режиме воспроизведения (Playback) загружает начальный снапшот из файла .RZX, приводя систему в точное исходное состояние.
- Затем он начинает пошаговую эмуляцию, строго следуя временной шкале из файла.
- В моменты времени, указанные в записи, эмулятор применяет события ввода (нажимает и отпускает виртуальные клавиши) вместо того, чтобы опрашивать реальную клавиатуру пользователя.
- Если эмуляция идеальна, то через N тактов состояние эмулируемой машины будет бит в бит совпадать с состоянием машины, на которой велась запись.
Культурное значение: Спидраннинг и архив мастерства
Формат .RZX вышел за рамки чисто технического инструмента и породил целую субкультуру.1. RZX как стандарт для спидраннинга на ZX Spectrum
Сообщество спидраннеров (скоростного прохождения) Spectrum быстро приняло .RZX в качестве золотого стандарта доказательства. Чтобы заявить о рекорде, необходимо предоставить .RZX-файл, который любой может проверить на своём эмуляторе.- Прозрачность: Любой может убедиться, что не использовались читы, сохранения или модификации игры.
- Воспроизводимость: Рекорд можно «пересмотреть» как кино, изучая тактику.
- Архив рекордов: Существуют сайты (например, тот же rzxarchive.co.uk), где хранятся записи лучших прохождений десятков игр.
2. Сохранение исторических артефактов
В .RZX записаны не только рекорды, но и:- Первые прохождения сложных игр.
- Демонстрации скрытого контента (например, как увидеть «пасхальное яйцо»).
- Записи с оригинального железа, сделанные через специальные адаптеры (важно для верификации эмуляции).
3. Инструмент реверс-инжиниринга
Изучая .RZX сложного игрового момента, разработчики эмуляторов могут понять, какое именно неэмулируемое поведение «ломает» воспроизведение, и исправить ошибку.
Работа с RZX: Практическое руководство
Создание записи (на примере эмулятора Fuse):
- Загрузите игру (например, с .TZX-файла).
- В меню выберите Media > Recording > Record....
- Укажите имя .RZX-файла. Эмулятор автоматически создаст снапшот и начнёт запись.
- Играйте. Все ваши действия записываются.
- Для остановки выберите Media > Recording > Stop.
Воспроизведение записи:
- В меню Fuse выберите Media > Recording > Play....
- Укажите .RZX-файл.
- Эмулятор загрузит начальное состояние и начнёт автоматическое проигрывание. Вы увидите «призрака», играющего за вас.
Конвертация и анализ:
Существуют утилиты командной строки из пакета rzxtools, позволяющие:- rzxinfo — вывести подробную информацию о файле.
- rzxdump — преобразовать запись в текстовый формат (последовательность событий).
- rzx2wav — преобразовать .RZX (вместе с привязанным снапшотом) обратно в .WAV-файл, как если бы игра шла с кассеты (для загрузки на реальный Spectrum).
Сравнение с аналогами и уникальность
| Формат / Подход | Принцип работы | Преимущества | Недостатки |
|---|---|---|---|
| .RZX | Запись низкоуровневых событий ввода + начальный снапшот. | Абсолютная точность, независимость от эмулятора, малый размер файла, идеален для тестирования и спидранна. | Бесполезен без точного эмулятора; не содержит видео. |
| Видеозапись (AVI, MP4) | Запись итогового видеосигнала. | Универсальная воспроизводимость на любом плеере. | Огромный размер, невозможно проверить на честность, зависит от скорости записи. |
| Скринкаст + снапшот | Видео + приложенный файл состояния. | Можно увидеть процесс и загрузить сохранение. | Нет гарантии, что видео и снапшот синхронны; размер. |
| Инпут-реплей в современных эмуляторах | Аналогичен RZX, но в проприетарном формате эмулятора. | Часто удобнее в использовании. | Непереносимость между разными эмуляторами. |
Заключение: Больше чем файл — философия точности
Формат .RZX — это воплощение стремления сообщества ретрокомпьютинга к совершенству, прозрачности и сохранению. Он решает фундаментальную проблему: как объективно доказать, что что-то было сделано внутри виртуальной машины.Он стоит на трёх китах:
- Детерминизм: Верит в то, что при идентичных начальных условиях и идентичных входных данных цифровая система даст идентичный результат.
- Верификация: Предоставляет инструмент для беспристрастной проверки этого результата.
- Наследие: Позволяет сохранять не просто данные, а сам процесс — мастерство игрока, хак программиста, глюк железа — в виде, который можно воспроизвести через десятилетия.
Статья составлена на основе официальной спецификации формата RZX версии 1.20, документации эмулятора Fuse и материалов архива rzxarchive.co.uk.