Как устроен 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 байт) │ │ Данные │ │ Информационный байт │ =>
└─────────────────┘ └────────┘ └─────────────────────┘
┌────────┐ ┌─────────────────────┐ ┌───────────────┐
=>│ Данные │ │ Информационный байт │ ... │ Нулевые байты │
└────────┘ └─────────────────────┘ └───────────────┘
|
Ukraine
(Украина). (C) Демидов С.В.
|
|