Hobby Старый сайт: https://drilnet.github.io
Благодарность (флаги расположены в алфавитном порядке):
Успехов Вам!


  GITHUB       FreeBSD    
Мой сайт, моя записная книжка (наброски, заметки и т.д. и т.п.)!
Предоставляется как есть!



WIKI

Как устроен GRF-файл (в качестве примера взят файл TEST.GRF)

Развернуть/Свернуть

Примечание.
Этот материал не является полным руководством по распаковке GRF-файлов.

Addr  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
----  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
0000  ff f6 b6 ff 5b 00 9b 08 ad ad ad f6 08 00 00 00  |....[...........|

0010  c3 b7 ee fb ff ed 6e db bb 6c ff 7e ff 6e ee f6  |......n..l.~.n..|
0020  ff df fe db 77 dd 7e 76 77 fd dd b6 f7 b7 cd b7  |....w.~vw.......|

....  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..  ..................
....  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..  ..................
....  .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..  ..................

5f40  fd bf fe ff db fe 7e db ec ff fe dd db 7e db fb  |......~......~..|
5f50  6c bb bb ee b3 99 6c 74 64 f0 ec ec f2 d9 d1 e4  |l.....ltd.......|
5f60  b2 b1 cd b3 6c bb ec ec 93 cc cd 27 d9 91 4d 33  |....l......'..M3|
5f70  26 99 64 26 32 24 89 22 01 13 49 20 24 08 04 00  |&.d&2$."..I $...|
5f80  04 09 00 81 80 14 00 81 20 13 00 00 ff ff df ff  |........ .......|
5f90  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  |................|
5fa0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  |................|
5fb0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  |................|
5fc0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  |................|
5fd0  ff ff ff ff ff ff fe ff ff ff ff ff ff ff ff ff  |................|
5fe0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  |................|
5ff0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  |................|

С адреса 0000-000f (16 байт) - Цвета GRF-файла.
С адреса 0010-5fff - GRF-данные (изображение) с мусором в конце.

Распаковка закончится, если распаковщик найдёт нулевой байт.
Распаковка начинается после пропуска 16 байт цветов.

Структура GRF:

┌─────────────────┐ ┌──────────────┐ ┌────────┐ ┌──────────────┐
│ Цвета (16 байт) │ │ Информ. байт │ │ Данные │ │ Информ. байт │ =>
└─────────────────┘ └──────────────┘ └────────┘ └──────────────┘
   ┌────────┐     ┌──────────────┐ ┌───────────────┐
=> │ Данные │ ... │ Нулевой байт │ │ Мусор в конце │
   └────────┘     └──────────────┘ └───────────────┘

Примечание.
Информ. байт - Информационный байт.

Информационный байт GRF-файла отличается от информационного байта SPR-файла.

Информационный байт GRF-файла.

Если 7 бит 0 - Повтор повторяющегося байта.
Если 7 бит 1 - Пересылка неповторяющихся байт.
Остальные биты (6, 5, 4, 3, 2, 1, 0) - сколько раз повторить байт или сколько
переписать неповторяющихся байт.

Информационный байт SPR-файла.

Если 7 бит 0 - Пересылка неповторяющихся байт.
Если 7 бит 1 - Повтор повторяющегося байта.
Остальные биты (6, 5, 4, 3, 2, 1, 0) - сколько раз повторить байт или сколько
переписать неповторяющихся байт.

Примечание.
GRF-файл не может быть больше 32 кб.
Это связано с алгоритмом, и архитектурой Вектор'а-06Ц (UKR).
С SPR-файлом дело обстоит чуть иначе.


Автор GRF-распаковщика: Нет информации

Биты они как искусство - вечны!
В первые это услышал от Рыкова В. в 90-х годах XX века.
Здорово!

Как устроен SPR-файл

RLE кодирование в Русской Вики
RLE кодирование в Украинской Вики

Ukraine (Украина). (C) Демидов С.В.