Описание формата файла снапшота RSS (редакция 15)

2003.02.01 00:00

Формат файла снапшота RSS использовался в Emu80 версий до 3.xx включительно. Также применяется в некоторых эмуляторах других авторов


     Формат файла снапшота (.RSS) для использования в эмуляторах ПК на
                      базе процессора 8080 (580ВМ80)
                               Редакция 15.
                               
Координатор редакций форматов -- автор, Виктор Пыхонин.

На данный момент этот формат поддерживается в эмуляторах:
- EMU80, Виктор Пыхонин, pyva@uic.nnov.ru, pyk@mail.ru
- PK86, Александр Демин, barsuk@pccenter.ru
- Emulator3000, Евгений Троицкий, eugene_programmer@nm.ru
- Эмулятор Львов ПК-01, Антон Игнатичев, antonign@mail.ru

Предлагаемый формат разработан для упрощения обмена данными между
различными эмуляторами. Он является расширяемым, поэтому данное описание
будет в дальнейшем подвергаться дополнению.

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

Принимаются следующие предложения по дальнейшему развитию формата:
  - Форматы заголовков для других ПК
  - Нумерация отсутствующих на данный момент в этом документе версий
    Монитора
  - Дополнительные поля в существующих заголовках
  - Дополнительная информация, хранимая в файле (доп. заголовки, блоки
    данных и т.п.)
  - Предложения по другим методам компрессии

По вопросам регистрации сигнатур и предложений по формату обращаться к
автору - Виктору Пыхонину (pyk@emu80.org, pyk@mail.ru).

===========================================================================

Структура файла:
~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      18 (?)  Заголовок процессора
0012      ?       Заголовок ПК
????      ?       Заголовок эмулятора
????      1       Количество блоков данных
????      ?       Блок данных 1
..........................................
????      ?       Блок данных n
  Опциональные данные
????      ?       Расширенный блок данных 1
..........................................
????      ?       Расширенный блок данных n
  Опциональные данные, которые могут быть описаны в последующих
  редакциях формата
????      ?       Дополнительные данные

Длина заголовков может варьироваться (см. ниже).


Заголовок процессора:
~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      4       'RKSS' - сигнатура (RK SnapShot)
0004      1       Модель компьютера
0005      2       PC
0007      2       BC
0009      2       DE
000B      2       HL
000D      2       AF
000F      2       SP
0011      1       Interrupt flag (0-off, не 0 - on)

Модель компьютера:
  00 - РК-86
  01 - Микроша
  02 - Партнер
  03 - Апогей
  04 - Специалист
  05 - Орион
  06 - Микро-80
  07 - ЮТ-88
  08 - Специалист-MX
  09 - Львов ПК-01
  ............


Заголовок ПК зависит от модели компьютера. Он содержит
обязательную часть и некоторые опциональные параметры, наличие
которых, а также их количество определяется полем размера заголовка.
В случае, если некоторые из параметров не используются, в них
должны быть занесены значения по умолчанию, приведенные ниже в
скобках.


Заголовок ПК для "Радио-86РК":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
0003      2       Начало экранной области (76D0H)
0005      2       Длина экранной области (2340)
0007      1       Количество строк (30)
0008      1       Количество столбцов (78)
0009      1       4 младших бита порта C ППА (0)
000A      1       Текущая позиция X курсора
000B      1       Текущая позиция Y курсора
   Опциональные параметры
000C      4       4 регистра контроллера ЭЛТ ВГ75 (4DH 1DH 99H 93H)
0010      1       Регистр режима контроллера ПДП ВТ57 (0A4H)
0011      2       Регистр начала экранной области ВТ57 (76D0H)
0013      2       Регистр размера экранной области ВТ75 (2339)
0015      1       Последняя команда ВГ75 (27H)
0017      2       Делитель канала 0 таймера ВИ53 (1-нет звука) (1)
0019      2       Делитель канала 1 таймера ВИ53 (1)
001B      2       Делитель канала 2 таймера ВИ53 (1)
001D      2       Тек. знач. счетчика канала 2 таймера ВИ53 (0)
001F      2       Тек. знач. счетчика канала 0 таймера ВИ53 (0)
0021      2       Тек. знач. счетчика канала 1 таймера ВИ53 (0)
0023      1       Режим счетчика канала 0 таймера ВИ53 (26H)
0024      1       Режим счетчика канала 1 таймера ВИ53 (66H)
0025      1       Режим счетчика канала 2 таймера ВИ53 (90H)
0026      1       Признак загрузки счетчика канала 0 таймера ВИ53 (0)
0027      1       Признак загрузки счетчика канала 1 таймера ВИ53 (0)
0028      1       Признак загрузки счетчика канала 2 таймера ВИ53 (0)

Версия Монитора:
  01 - 32К
  02 - 16К
  03 - расширенный (размером 4К)
  .......
  00 - по умолчанию (32К) или содержится в одном из блоков данных


Заголовок ПК  для "Партнера":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
0003      2       Начало экранной области (76D0)
0005      2       Длина экранной области (2340)
0007      1       Количество строк (30)
0008      1       Количество столбцов (78)
0009      1       4 младших бита порта C ППА (0AH)
000A      1       Текущая позиция X курсора
000B      1       Текущая позиция Y курсора
   Опциональные параметры
000C      4       4 регистра контроллера ЭЛТ ВГ75 (4DH 1DH 99H 0D9H)
0010      1       Регистр режима контроллера ПДП ВТ57 (0A4H)
0011      2       Регистр начала экранной области ВТ57 (76D0H)
0013      2       Регистр размера экранной области ВТ75 (2339)
0015      1       Последняя команда ВГ75 (2BH)

Версия Монитора:
  01 - V.3.
  02 - V.2.
  .......
  00 - по умолчанию (V.3.) или содержится в одном из блоков данных


Заголовок ПК для "Микроши":
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
0003      2       Начало экранной области (76D0H)
0005      2       Длина экранной области (2340)
0007      1       Количество строк (30)
0008      1       Количество столбцов (78)
0009      1       4 младших бита порта C ППА (0)
000A      1       Текущая позиция X курсора
000B      1       Текущая позиция Y курсора
   Опциональные параметры
000C      4       4 регистра контроллера ЭЛТ ВГ75 (4DH 1DH 99H 93H)
0010      1       Регистр режима контроллера ПДП ВТ57 (0A4H)
0011      2       Делитель канала 2 таймера ВИ53 (1-нет звука) (1)
0013      2       Регистр начала экранной области ВТ57 (76D0H)
0015      2       Регистр размера экранной области ВТ75 (2339)
0017      1       Последняя команда ВГ75 (27H)
0018      1       Регистр B второго ППА (0)
0019      2       Делитель канала 0 таймера ВИ53 (1)
001B      2       Делитель канала 1 таймера ВИ53 (1)
001D      2       Тек. знач. счетчика канала 2 таймера ВИ53 (0)
001F      2       Тек. знач. счетчика канала 0 таймера ВИ53 (0)
0021      2       Тек. знач. счетчика канала 1 таймера ВИ53 (0)
0023      1       Режим счетчика канала 0 таймера ВИ53 (36H)
0024      1       Режим счетчика канала 1 таймера ВИ53 (76H)
0025      1       Режим счетчика канала 2 таймера ВИ53 (0B6H)
0026      1       Признак загрузки счетчика канала 0 таймера ВИ53 (0)
0027      1       Признак загрузки счетчика канала 1 таймера ВИ53 (0)
0028      1       Признак загрузки счетчика канала 2 таймера ВИ53 (0)

Версия Монитора:
  01 - Оригинальная версия
  .......
  00 - по умолчанию или содержится в одном из блоков данных


Заголовок ПК для "Апогея":
~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
0003      2       Начало экранной области (0E1D0H)
0005      2       Длина экранной области (2340)
0007      1       Количество строк (30)
0008      1       Количество столбцов (78)
0009      1       4 младших бита порта C ППА (0)
000A      1       Текущая позиция X курсора
000B      1       Текущая позиция Y курсора
   Опциональные параметры
000C      4       4 регистра контроллера ЭЛТ ВГ75 (4DH 1DH 99H D3H)
0010      1       Регистр режима контроллера ПДП ВТ57 (0A4H)
0011      2       Делитель канала 0 таймера ВИ53 (1-нет звука) (1)
0013      2       Делитель канала 0 таймера ВИ53 (1-нет звука) (1)
0015      2       Делитель канала 0 таймера ВИ53 (1-нет звука) (1)
0017      2       Регистр начала экранной области ВТ57 (0E1D0H)
0019      2       Регистр размера экранной области ВТ75 (2339)
001B      1       Последняя команда ВГ75 (27H)
001D      2       Тек. знач. счетчика канала 2 таймера ВИ53 (0)
001F      2       Тек. знач. счетчика канала 0 таймера ВИ53 (0)
0021      2       Тек. знач. счетчика канала 1 таймера ВИ53 (0)
0023      1       Режим счетчика канала 0 таймера ВИ53 (36H)
0024      1       Режим счетчика канала 1 таймера ВИ53 (76H)
0025      1       Режим счетчика канала 2 таймера ВИ53 (0B6H)
0026      1       Признак загрузки счетчика канала 0 таймера ВИ53 (0)
0027      1       Признак загрузки счетчика канала 1 таймера ВИ53 (0)
0028      1       Признак загрузки счетчика канала 2 таймера ВИ53 (0)

Версия Монитора:
  01 - Оригинальная версия
  .......
  00 - по умолчанию или содержится в одном из блоков данных


Заголовок ПК для "Специалист":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
0003      1       4 старших бита порта C ППА (0)
   Опциональные параметры
0004      x       Блок цвета

Версия Монитора:
  01 - Монитор-2 (4K)
  02 - Монитор-1
  03 - Оконный Монитор
  04 - Монитор ПК "Лик"
  .......
  00 - по умолчанию или содержится в одном из блоков данных

Блок цвета:
~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      1       Тип блока
0001      2       Длина блока (вместе с полями типа и длины)
0003      x       Блок

Тип блока:
  0 - нет информации о цвете (длина блока = 3)
  1 - режим 5 цветов (длина блока = 3072+3=3075)
  2 - зарезервировано для режима 9 цветов

Кодирование: В одном байте блока содержится информация о цвете четырех
байт видеопамяти. Младшие пары битов в этом блоке соответствуют младшим
байтам в видеопамяти и соответствуют битам 6 и 7 порта C ППА.


Заголовок ПК для "Орион":
~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
0003      1       4 младших бита порта C ППА (0)
0004      1       Регистр режима цветности (0)
0005      1       Текущая страница памяти (0)
0006      1       Текущая экранная область (0)
0007      1       Количество дополнительных блоков данных
   Опциональные параметры на данный момеент отсутствуют

Версия Монитора:
  01 - Монитор-1
  02 - Монитор-2
  03 - Монитор-3 (Петербург)
  .......
  00 - по умолчанию или содержится в одном из блоков данных


Заголовок ПК для "Микро-80":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
   Опциональные параметры в текущей версии отсутствуют

Версия Монитора:
  01 - Оригинальая версия
  .......
  00 - по умолчанию или содержится в одном из блоков данных


Заголовок ПК для "ЮТ-88":
~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия Монитора
   Опциональные параметры в текущей версии отсутствуют

Версия Монитора:
  01 - Оригинальая версия
  .......
  00 - по умолчанию или содержится в одном из блоков данных


Заголовок ПК для "Львов ПК-01":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      2       Длина вторичного заголовка
0002      1       Версия ПЗУ (0 - оригинальное ПЗУ)
0003      1       Содержимое порта C0
0004      1       Содержимое порта C1
0005      1       Содержимое порта C2
0006      1       Содержимое порта C3
0007      1       Содержимое порта D0
0008      1       Содержимое порта D1
0009      1       Содержимое порта D2
000A      1       Содержимое порта D3

   Опциональные параметры в текущей версии отсутствуют

Версия ПЗУ:
  00 - по умолчанию


Заголовок эмулятора:
~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      4       Сигнатура эмулятора
0000      2       Размер заголовка эмулятора
0002      ?       Специфические для эмулятора данные (тек. режим)

Применяемые сигнатуры:
  NULL - пустой заголовок (размер=6, данные отсутствуют)
  EM80 - эмулятор EMU80
  PK86 - эмулятор PK86
  LVOV - эмулятор Львов ПК-01
  ........


Блок данных:
~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      1       Тип компрессии (0-нет, 1-с компрессией)
0001      2       Размер блока (с этим заголовком)
0003      2       Начальный адрес блока
0005      2       Размер несжатых данных
0007      ?       Данные

Расширенный блок данных ("Орион"):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Смещение  Длина   Назначение
---------------------------------------------------
0000      1       Номер страницы памяти
0001      x       Блок данных

Способ компрессии:

Если подряд идут более 3 одинаковых байтов, то они кодируются
следующим образом: 0CBH <повторяющийся байт> <счетчик повторов>. Длина
счетчика повторов - 1 байт. Если подряд идут более 256 байт, то они
разбиваются на несколько CB-последовательностей. Байт CB кодируется как
CB CB 01. Выбор байта CB обусловлен статистическими данными: он реже всего
встречается в программах. Другие значения в поле типа компрессии (например
2) могут означать в будущем другие типы компрессии (например LZW).

===========================================================================

История:
~~~~~~~~
Редакция 15:
  - Изменен адрес e-mail одного из авторов - Виктора Пыхонина

Редакция 14:
  - Исправлено большое количество ошибок предыдущей версии
  - Добавлена информация по ПК "Львов"
  - Уточнена контактная информация

Редакция 13:
  - Значительно расширена информация о состоянии таймера ВИ53 на всех ПЭВМ
  - Введены заголовки ПК "Микро-80" и "ЮТ-88"

Редакция 12:
  - Введена информация о регистре B второго ППА на "Микроше"
  - Введена информация о делителях каналов 0 и 1 таймера ВИ53 на "Микроше"

Редакция 11:
  - Введена информация о состоянии таймера ВИ53 в "Радио-86РК"

Редакция 10:
  - Введены дополнительные типы Мониторов для ПК "Радио-86РК",
    "Партнер", "Специалист", "Орион"

Редакция 9:
  - Введено описание заголовка ПК "Орион"
  - Введены расширенные блоки данных

Редакция 8:
  - Введена информация о последней команде ВГ75

Редакция 7:
  - Введена информация о начале экранной области и ее длине согласно
    контроллера ПДП ВТ57 для ПК "Радио-86РК", "Партнер", "Микроша" и
    "Апогей"

Редакция 6:
  - Введена информация о делителях каналов ВИ53 для ПК "Апогей"

Редакция 5:
  - Введена информация о цвете для ПК "Специалист"

Редакция 4:
  - Изменения в структуре документа

Редакция 3:
  - Исправлена неточность в номерах версий Монитора для РК-16 и РК-32

Редакция 2:
  - Восстановлена пропущенная строка: начальный адрес блока
  - Описан заголовок ПК для "Специалиста"

Редакция 1:
  - Оригинальная версия

===========================================================================

   Виктор Пыхонин
   01.02.2003                                       pyk@emu80.org

   Александр Демин                                  barsuk@pccenter.ru
   04.04.99