mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-06-15 00:51:36 +03:00
247 lines
5.3 KiB
Plaintext
247 lines
5.3 KiB
Plaintext
|
||
Формат упакованного триколора .888
|
||
|
||
Файлы данного формата будут генерироваться редактором 8col, на-
|
||
чиная с версии v0. Разумеется, поддержка всех старых форматов
|
||
останется, как на чтение, так и на запись.
|
||
|
||
Заголовок отсутствует!
|
||
Тело файла содержит данные о содержимом последовательно идущих
|
||
знакомест 8x8 (слева направо, сверху вниз, 32 знакоместа по го-
|
||
ризонтали и 24 по вертикали). Всего существует 8 цветов - по 2
|
||
градации на каждую цветовую составляющую: G, R, B.
|
||
|
||
В теле файла перемешаны 2 потока: битовый и байтовый, аналогично
|
||
формату hrust2.1 (см. AlCoNews#11). Битовый поток является упра-
|
||
вляющим, первый байт файла принадлежит ему.
|
||
|
||
Запись о каждом знакоместе состоит из полей:
|
||
3 бита - тип цветности (характеризует количество цветов)
|
||
[опционально] - использованные цвета в порядке увеличения часто-
|
||
ты (т.е. начиная с самых редких)
|
||
[опционально] сколько-то бит или, возможно, 24 байта - пиксе-
|
||
льные данные знакоместа в соответствии с его типом.
|
||
|
||
Типы цветности:
|
||
0 - 8-цветное знакоместо, в байтовом потоке лежит 24 байта дан-
|
||
ных,по 3 байта (в порядке R, G, B) на каждую пиксельную линию
|
||
знакоместа. (Байтовый поток, кроме как здесь, больше нигде не
|
||
используется.) Палитра отсутствует.
|
||
1 - используется последний использованый не 8-цветный тип цвет-
|
||
ности, палитра также берётся старая.
|
||
2 - одноцветное знакоместо. В палитре один элемент, указывающий
|
||
этот цвет. Элемент палитры занимает 3 бита: G, R, B. Пиксель-
|
||
ные данные отсутствуют.
|
||
3 - двухцветное знакоместо. В пиксельных данных лежат пиксели
|
||
слева направо, сверху вниз, по 1 биту на пиксель. 0 - наибо-
|
||
лее частый пиксель (последний элемент палитры), 1 - наиболее
|
||
редкий пиксель (первый элемент палитры).
|
||
4 - трёхцветное знакоместо. Цвета пикселей кодируются: 0, 10, 11
|
||
(в порядке убывания частоты, т.е. в порядке убывания номера в
|
||
палитре).
|
||
5 - четырёхцветное знакоместо. Цвета пикселей кодируются: 00,
|
||
01, 10, 11 (в порядке убывания частоты).
|
||
6 - пятицветное знакоместо. Цвета пикселей кодируются: 00, 01,
|
||
10, 110, 111 (в порядке убывания частоты).
|
||
7 - шестицветное знакоместо. Цвета пикселей кодируются: 00, 01,
|
||
100, 101, 110, 111 (в порядке убывания частоты).
|
||
|
||
Степень сжатия среднестатистической триколорины несколько силь-
|
||
нее, чем у hrust2.1, при этом скорость сжатия многократно выше.
|
||
|
||
Распаковщик:
|
||
|
||
;палитра не запоминается, если
|
||
;8 цветов ИЛИ используется старая палитра
|
||
|
||
;ЦВЕТА В ОБРАТНОМ ПОРЯДКЕ:начиная с редких
|
||
|
||
FROM=#D000
|
||
TO=#8000
|
||
ORG #6000
|
||
TCOL_S ;DS 6
|
||
GO
|
||
LD HL,FROM
|
||
LD C,128
|
||
EXX
|
||
LD HL,TO
|
||
LD DE,125
|
||
LD C,1
|
||
DEP EXX
|
||
CALL DEP3
|
||
CALL NZ,oldcl
|
||
JR NZ,COLQQ
|
||
LD B,8
|
||
COL80 LD E,(HL) ;R
|
||
INC HL
|
||
LD D,(HL) ;G
|
||
INC HL
|
||
;(DE)=%0GRB0grb
|
||
DUP 4
|
||
XOR A
|
||
RL D
|
||
RLA
|
||
RL E
|
||
RLA
|
||
RLC (HL)
|
||
RLA
|
||
ADD A,A
|
||
RL D
|
||
RLA
|
||
RL E
|
||
RLA
|
||
RLC (HL)
|
||
RLA
|
||
EXX
|
||
LD (HL),A
|
||
INC L
|
||
EXX
|
||
EDUP
|
||
ORG $-2
|
||
ADD HL,DE
|
||
EXX
|
||
INC HL
|
||
DJNZ COL80
|
||
COLQQ EXX
|
||
LD A,H
|
||
INC L,L,L,L
|
||
JP PE,$+6
|
||
SUB 4
|
||
LD H,A
|
||
RES 7,L
|
||
CP 'TO+96
|
||
JP C,DEP
|
||
CHL LD C,(HL)
|
||
INC HL
|
||
RL C
|
||
RET
|
||
|
||
oldcl LD D,'TCOL_S
|
||
DEC A
|
||
JR Z,COLOLD
|
||
LD LX,A
|
||
LD E,A
|
||
DEPTAB CALL DEP3
|
||
DEC E
|
||
LD (DE),A
|
||
JR NZ,DEPTAB
|
||
COLOLD LD A,LX
|
||
LD B,64
|
||
CP 4
|
||
JR NC,COL45O
|
||
DEC A
|
||
JR Z,COL1
|
||
DEC A
|
||
JR Z,COL2
|
||
;2=11
|
||
;1=10
|
||
;0=0
|
||
COL3
|
||
LD A,#80
|
||
CALL DEPCOL0
|
||
JR Z,COL3N1
|
||
SLA C
|
||
CALL Z,CHL
|
||
RLA
|
||
DEC A
|
||
COL3N1 CALL PUTCOL
|
||
DJNZ COL3
|
||
RET
|
||
;1=1
|
||
;0=0
|
||
COL2
|
||
LD A,#80
|
||
CALL DEPCOL0
|
||
CALL PUTCOL
|
||
DJNZ COL2
|
||
RET
|
||
COL45O
|
||
JR Z,COL4
|
||
RRA
|
||
JR C,COL5
|
||
;5=111
|
||
;4=110
|
||
;3=101
|
||
;2=100
|
||
;1=01
|
||
;0=00
|
||
COL6 LD A,#40
|
||
CALL DEPCOL0
|
||
CP 2
|
||
JR C,COL6N1
|
||
DEC A
|
||
SLA C
|
||
CALL Z,CHL
|
||
RLA
|
||
COL6N1 CALL PUTCOL
|
||
DJNZ COL6
|
||
RET
|
||
;4=111
|
||
;3=110
|
||
;2=10
|
||
;1=01
|
||
;0=00
|
||
COL5 LD A,#40
|
||
CALL DEPCOL0
|
||
CP 3
|
||
JR C,COL5N1
|
||
SLA C
|
||
CALL Z,CHL
|
||
RLA
|
||
SUB 3
|
||
COL5N1 CALL PUTCOL
|
||
DJNZ COL5
|
||
RET
|
||
;3=11
|
||
;2=10
|
||
;1=01
|
||
;0=00
|
||
COL4
|
||
LD A,#40
|
||
CALL DEPCOL0
|
||
CALL PUTCOL
|
||
DJNZ COL4
|
||
RET
|
||
COL1
|
||
LD A,(DE)
|
||
LD D,A
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
OR D
|
||
EXX
|
||
LD B,8
|
||
COL10 LD (HL),A
|
||
INC L
|
||
LD (HL),A
|
||
INC L
|
||
LD (HL),A
|
||
INC L
|
||
LD (HL),A
|
||
ADD HL,DE
|
||
DJNZ COL10
|
||
EXX
|
||
RET
|
||
|
||
PUTCOL LD E,A
|
||
LD A,(DE)
|
||
EXX
|
||
RLD
|
||
LD A,C
|
||
AND #2A
|
||
JR Z,$+3
|
||
INC L
|
||
RLC C
|
||
JR NC,$+3
|
||
ADD HL,DE
|
||
EXX
|
||
RET
|
||
DEP3
|
||
LD A,#20
|
||
DEPCOL0 SLA C
|
||
CALL Z,CHL
|
||
ADC A,A
|
||
JR NC,DEPCOL0
|
||
RET
|