ACNews #13
31 октября 2002

Guide - Формат упакованного триколора .888.

     ▄▄▄▄ ▄  ▄ ▄▄▄ ▄▄▄  ▄▄▄▄
■▄░  ▓ ▄▄ ▓  ▓  ▓  ▓  ▒ ▓▄▄  ▄░ ■▄░ ■▄░ ■▄░ ■▄░ ■▄░ ■▄░ ■▄░ ■▄░
  ■▀ ░▄▄▓ ░▄▄░ ▄░▄ ░▄▄░ ░▄▄▄  ■▀░ ■▀░ ■▀░ ■▀░ ■▀░ ■▀░ ■▀░ ■▀░ ■▀

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




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Coding - В дaннoй стaтьe рaзгoвoр o кoдингe пoвeду кaк ни стрaннo я.
Поиск - поиск игр, программ.
Юмор - рекламные объявления от "МоМар"-а.

В этот день...   22 сентября