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


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



WIKI

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

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

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

Addr  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
----  -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
0000  00 01 02 03 0d 1e 49 54 6f 92 9c a5 b7 d2 db f7  |......ITo.......|

0010  00 00 00 ff 00 ff 00 87 10 82 19 12 02 13 82 19  |................|
0020  1d 0d 19 1d 05 06 82 16 1a 1b 01 0d 06 02 07 01  |................|

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

4d80  82 10 00 10 00 40 70 50 20 10 30 80 00 10 0d 20  |.....@pP .0.... |
4d90  82 10 00 02 20 83 30 40 50 b0 70 05 f0 96 c0 83  |.... .0@P.p.....|
4da0  a0 01 20 82 00 82 40 01 00 ff 00 ff 00 84        |.. ...@.......  |

                                                00 00  |              ..|
4db0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
4dc0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
4dd0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
4de0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
4df0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|

С адреса 0000-000f (16 байт) - Цвета SPR-файла.
С адреса 0010-4dad           - SPR-данные (изображение).
С адреса 4dae-4dff           - Нулевые байты, они не нужны (их нужно пропустить).

Распаковка (распаковка начинается с конца):

                                7   6   5   4   3   2   1   0
                              ┌───┬───┬───┬───┬───┬───┬───┬───┐
Шаг 1. Адрес 4dad, байт 84H = │ 1 │ 0 │ 0 │ 0 │ 0 │ 1 │ 0 │ 0 │ <= Информационный байт.
                              └───┴───┴───┴───┴───┴───┴───┴───┘
                                |
    Старший бит установлен в единицу, значит байт 00H по адресу 4dac
    нужно записать в экранную область Вектор'a-06Ц 4-ре раза
    (берутся 7 бит: 0000100 = 4 раза).

                                7   6   5   4   3   2   1   0
                              ┌───┬───┬───┬───┬───┬───┬───┬───┐
Шаг 2. Адрес 4dab, байт FFH = │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ <= Информационный байт.
                              └───┴───┴───┴───┴───┴───┴───┴───┘
                                |
    Старший бит установлен в единицу, значит байт 00H по адресу 4daa
    нужно записать в экранную область Вектор'а-06Ц 127 раз
    (берутся 7 бит: 1111111 = 127 раз).

                                7   6   5   4   3   2   1   0
                              ┌───┬───┬───┬───┬───┬───┬───┬───┐
Шаг 3. Адрес 4da9, байт FFH = │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ <= Информационный байт.
                              └───┴───┴───┴───┴───┴───┴───┴───┘
                                |
    Старший бит установлен в единицу, значит байт 00H по адресу 4da8
    нужно записать в экранную область Вектор'а-06Ц 127 раз
    (берутся 7 бит: 1111111 = 127 раз).

                                7   6   5   4   3   2   1   0
                              ┌───┬───┬───┬───┬───┬───┬───┬───┐
Шаг 4. Адрес 4da7, байт 01H = │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 1 │ <= Информационный байт.
                              └───┴───┴───┴───┴───┴───┴───┴───┘
                                |
    Старший бит установлен в ноль, значит байт 40H по адреса 4da6
    нужно переписать в экранную область Вектор'а-06Ц - переписать
    только один байт (берутся 7 бит: 0000001 = переписать 1 байт).
    ...
    ...
    ...
И так далее, пока не будет заполнена вся экранная область (адреса 8000-FFFF,
32768 байт) Вектор'а-О6Ц. Бит 7 информационного байта указывает есть ли
повторяющиеся байты, бит 7 установлен в 1 - есть, бит 7 установлен в 0 - нет.

Структура SPR:

┌─────────────────┐ ┌────────┐ ┌─────────────────────┐
│ Цвета (16 байт) │ │ Данные │ │ Информационный байт │ =>
└─────────────────┘ └────────┘ └─────────────────────┘

  ┌────────┐ ┌─────────────────────┐     ┌───────────────┐
=>│ Данные │ │ Информационный байт │ ... │ Нулевые байты │
  └────────┘ └─────────────────────┘     └───────────────┘


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

Примечание.
Ассемблер - красивый компактный язык программирования.

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

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

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