mirror of
https://github.com/Tolik-Trek/Spectrum.EXE.git
synced 2026-11-07 09:29:54 +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
|