Из газеты AlCoNews#13, Рязань, 01.11.2002 Автор: Alone Coder (Dima Bystrov) Формат упакованного триколора .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