-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Лицензия: GNU GPL V3.
Как устроен 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-данные (изображение) с мусором в конце.
Конец GRF-данных, без мусора в конце, не известен!
Распаковка закончится, если распаковщик найдёт нулевой байт.
Распаковка начинается после пропуска 16 байт цветов.
Структура:
------------------- ---------------- ---------- ----------------
| Цвета (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-файлом дело обстоит чуть иначе.
Oops!
XX век, 90-е годы.
Распаковщик (ассемблер):
;
; Распаковщик графики формата GRF (для процессора КР580ВМ80А, Intel 8080).
; В "HL" - начальный адрес GRF-данных в памяти.
;
PUBLIC DEPACK ; ---
;
DEPACK: ; Логическое "И"
LXI D,08000H ; Команды: ANA, ANI
LXI H,DATA+010H ; Начальный адрес GRF-данных. ;
; ; 0 0 | 0
LOOP1: ; 0 1 | 0
MOV A,M ; 1 0 | 0
ANA A ; 1 1 | 1
JZ EXIT ; Распаковка закончена. ;
JP FILL ; Логическое "ИЛИ"
; ; Команды: ORA, ORI
ANI 07FH ;
MOV C,A ; В регистре "C" сколько байт переслать. ; 0 0 | 0
INX H ; 0 1 | 1
; ; 1 0 | 1
; Неповторяющиеся байты. ; 1 1 | 1
; Пересылка байт. ;
LOOP2: ; Исключающее "ИЛИ"
MOV A,M ; Команды: XRA, XRI
STAX D ; Записать байт в экранную область. ;
INX H ; 0 0 | 0
INX D ; 0 1 | 1
DCR C ; В "C" сколько байт осталось. ; 1 0 | 1
JNZ LOOP2 ; 1 1 | 0
JMP LOOP1 ;
; ; ---
; Повторяющиеся байты.
; Повтор байта.
FILL:
MOV C,A ; В регистре "C" сколько раз повторить байт.
INX H
MOV A,M ; Взять байт из памяти, адрес в "HL". ; ---
;
LOOP3: ; Бит 7 - признак отрицательного результата.
STAX D ; Записать в экранную область. ; S = 0 - команда JP.
INX D ; S = 1 - команда JM.
DCR C ; В "C" сколько повторов осталось. ;
JNZ LOOP3 ; ---
; ; ---
INX H ;
JMP LOOP1 ; Бит 6 - признак нулевого результата.
; ; Команды JZ и JNZ.
EXIT: RET ;
; ---
Ассемблер в Русской Вики
Ассемблер в Украинской Вики
Биты они как искусство - вечны!
В первые это услышал от Рыкова В. в 90-х годах XX века.
Здорово!
Посмотрите ещё это: Как устроен SPR файл
И это: 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
Репозиторий: Интеллект. Искусственный интеллект