-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Лицензия: GNU GPL V3.
Как устроен 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 - нет.
Структура:
------------------- ---------- -----------------------
| Цвета (16 байт) | | Данные | | Информационный байт | =>
------------------- ---------- -----------------------
---------- ----------------------- -----------------
=> | Данные | | Информационный байт | ... | Нулевые байты |
---------- ----------------------- -----------------
Cобственно сам TEST1.SPR:
Распаковщик (ассемблер):
;
; Распаковщик графики формата SPR (для процессора КР580ВМ80А, Intel 8080).
; В "HL" - конечный адрес SPR-файла в памяти.
;
PUBLIC DSPR ; ---
; ;
DSPR: ; Логическое "И"
DCX H ; ; Команды: ANA, ANI
MOV A,M ; -> Пропустить нули. ;
ORA A ; ; 0 0 | 0
JZ DSPR ; ; 0 1 | 0
; ; 1 0 | 0
LXI D,0FFFFH ; Экран с 8000H по FFFFH. ; 1 1 | 1
GOTO1: ;
MOV A,D ; Логическое "ИЛИ"
CPI 080H ; Команды: ORA, ORI
RC ; Распаковка закончена, выйти из п/п. ;
; ; 0 0 | 0
MOV A,M ; 0 1 | 1
ANA A ; 1 0 | 1
JM GOTO3 ; Перейти (повтор байта). ; 1 1 | 1
; ;
MOV B,A ; В регистре "B" сколько байт переслать. ; Исключающее "ИЛИ"
DCX H ; Команды: XRA, XRI
: ;
; Неповторяющиеся байты. ; 0 0 | 0
; Пересылка байт. ; 0 1 | 1
GOTO2: ; 1 0 | 1
MOV A,M ; 1 1 | 0
STAX D ;
DCX D ; ---
DCX H
DCR B ; В "B" сколько байт осталось. ; ---
JNZ GOTO2 ;
JMP GOTO1 ; Бит 7 - признак отрицательного результата.
; ; S = 0 - команда JP.
; Повторяющиеся байты. ; S = 1 - команда JM.
; Повтор байта. ;
GOTO3: ; ---
ANI 07FH
MOV B,A ; В регистре "B" сколько раз повторить байт.
DCX H
MOV A,M ; Взять байт из памяти, адрес в "HL".
GOTO4:
STAX D ; Записать в экранную область. ; ---
DCX D ;
DCR B ; В "B" сколько повторов осталось. ; Бит 6 - признак нулевого результата.
JNZ GOTO4 ; Команды JZ и JNZ.
; ;
DCX H ; ---
JMP GOTO1
END
Примечание.
Ассемблер - красивый компактный язык программирования.
Ассемблер в Русской Вики
Ассемблер в Украинской Вики
Рекомендуется посмотреть ещё вот это: Как устроен GRF файл
И это: RLE кодирование/декодирование своими руками (VRLE8, VRLE16)
Дополнительно посмотрите ещё это:
RLE кодирование в Русской Вики,
RLE кодирование в Украинской Вики
Удачного творчества!
Ukraine (Украина). (C) Демидов С.В.
Дополнительные ссылки:
- Вектор-06Ц в ПЛИС: https://github.com/svofski/vector06cc
- Картотека ПО для Вектор-06Ц: http://sensi.org/scalar
- Блог московского "макрушника" здесь: http://macrobloger.com/vector-06c
- TIMSoft (Вектор-06Ц):
http://www.vector06c.fdd5-25.net/index.html
- Перестал существовать (жаль)! - CP/M для Windows: http://www.sydneysmith.com/wordpress/cpm-programs/
- Утилита для работы с образами CP/M дисков: http://era-cg.su/steinblume/index.php?name=about&lang=ru
- Различные сообщества (ZX Spectrum (UKR), Вектор-06Ц (UKR), Специалист и др.) живут здесь
- Информация по BDOS OC CP/M: http://marinovsoft.narod.ru/korvet/bdos_doc.pdf
Все репозитории автора:
Репозиторий: Blender 3D. Модель игральной кости (dice)
Репозиторий: Blender 3D. Модель мотора (motor)
Репозиторий: Blender 3D. Государственная символика Украины (Флаг, Герб)
Репозиторий: Blender 3D. Disabled Person (анимированная иконка)
Репозиторий: Blender 3D. Флоппи-диск 3.5" (Вектор-06Ц)
Репозиторий: Blender 3D. Логотип VRLE8 и Логотип VRLE16
Репозиторий: Blender 3D. Микросхема TEA2025B в 3D, плюс модель печатной платы
Репозиторий: Скрипт, который подписывает цифровые фотографии
Репозиторий: Вектор-06Ц. Ожившее кино
Репозиторий: Вектор-06Ц. Конвертер графических файлов SPR в BMP
Репозиторий: Вектор-06Ц. Конвертер графических файлов GRF в BMP
Репозиторий: Скрипт, который показывает все цвета Вектор'а-06Ц
Репозиторий: RLE кодирование/декодирование своими руками (VRLE8, VRLE16)
Репозиторий: Игра Пятнашки (Puzzle 15, Game 15), игра написана на JavaScript
Репозиторий: Мой сайт (репозиторий моего сайта)
Репозиторий: Электроника (всё в одном репозитории)
• Усилитель звука на микросхеме
TEA2025B
• Биполярный транзистор в ключевом режиме (формулы, расчёты)
• Ящик для экспонирования фоторезиста
• Калькулятор ближайшее стандартное сопротивление (HTML + JS)
• Делитель напряжения на двух резисторах (формулы, расчёты, калькулятор на HTML + JS)
• Стабилизированный блок питания +5В/1А, -5В/0.3A, +12В/0.5А, -12В/0.5А
• Стабилизированный блок питания +9В/0.5А для TEA2025B
• Ремонт компьютерных колонок Genius SP-G06
Репозиторий: Интеллект. Искусственный интеллект