Spectrum.EXE/Docs/FORMATS/info_guide/888
Anatoliy Belyanskiy bd2abb6229 Initial commit
2023-06-15 02:20:40 +10:00

247 lines
5.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Формат упакованного триколора .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