ivagor, отлично, спасибо!
- - - Добавлено - - -
Всё получилось! Удалось развернуть передний план картинки:
Вот код, если кому-то будет интересно:
Код:
; Декодер формата графических файлов *.4C
; (C) 2018 Соловьев Д.Н. /Санкт-Петербург/
; Версия: 1.0
; Создано: 12.02.2018
; Изменено: 12.02.2018
;LdByte:EQU 0F836h
SvByte:EQU 0F839h
Show4C:
; Вывод изображения на экран
; I: [BC]-адрес ЛВУ, [D]-ширина, [E]-высота
; [HL]-а/н буфера
MOV A,M
ANA A
;<Z>=1 - без сжатия, <Z>=0 - сжатие
INX H
MOV A,M
RRC
; <C>=0 - FG+BG, <C>=1 - FG
INX H
MOV E,M ; [E]=высота
INX H
MOV D,M ; [D]=ширина
INX H
; вывод FG
PUSH D
PUSH B
PUSH PSW
;CZ PLAIN_FG
CNZ UNPACK4C_FG
POP PSW
POP B
POP D
RET; JC OK_RET; только FG
; вывод BG
;JNZ UNPACK_BG
;PLAIN_BG:
;RET
UNPACK4C_FG:
; Распаковка экранных данных в формате 4C
; I: [BC]-адрес ЛВУ, [D]-ширина, [E]-высота
; [HL]-а/н буфера
; O: [HL]-а/к буфера +1
PUSH B
SHLD M_Unpk4cFG
POP H
MOV A,E
STA M_Unpk4cFg1E
STA M_Unpk4cFg2E
MOV A,L
STA M_Unpk4cFg1L
STA M_Unpk4cFg2L
CALL Unpk4cFG
LHLD M_Unpk4cFG
RET
Unpk4cFG:
;CALL GetBYTE
PUSH H
LHLD M_Unpk4cFG
MOV A,M
INX H
SHLD M_Unpk4cFG
POP H
RLC
ANA A; <C>=0
RAR
MOV C,A
JNC Unpk4cFgSame
; серия разных
Unpk4cFgDiff2:
;CALL GetBYTE
PUSH H
M_Unpk4cFG:EQU $+1
LXI H,0
MOV A,M
INX H
SHLD M_Unpk4cFG
POP H
MOV M,A
; Получить адрес следующего байта экрана
INR L
DCR E
JNZ Unpk4cFgDiff3
M_Unpk4cFg1E:EQU $+1
MVI E,0
M_Unpk4cFg1L:EQU $+1
MVI L,0
INR H
DCR D
RZ; конец экрана
Unpk4cFgDiff3:
DCR C
JNZ Unpk4cFgDiff2
JMP Unpk4cFG
Unpk4cFgSame:
; серия одинаковых
;CALL GetBYTE
PUSH H
LHLD M_Unpk4cFG
MOV A,M
INX H
SHLD M_Unpk4cFG
POP H
Unpk4cFgSame2:
MOV M,A
; Получить адрес следующего байта экрана
INR L
DCR E
JNZ Unpk4cFgSame3
M_Unpk4cFg2E:EQU $+1
MVI E,0
M_Unpk4cFg2L:EQU $+1
MVI L,0
INR H
DCR D
RZ; конец экрана
Unpk4cFgSame3:
DCR C
JNZ Unpk4cFgSame2
JMP Unpk4cFG
END
- - - Добавлено - - -
add...
Все, встречающиеся мне картинки в *.4C (в т.ч. продукты сохранения граф. редактора) - в сжатом формате. У меня возникает вопрос, а существуют ли в природе несжатые варианты? И для чего оно такое может быть нужно?
По скорости вывода ощутимой разницы не будет. Хранить несжатую графику нерационально. В чём профит?