Hi,

Does anyone have any information regarding the encoding and decoding of screen 5 pictures in CMP format? CMP is the format that DD-GRAPH/AGE uses for compressed screen 5 pictures and is seems to be very efficient. But I've never seen any document or article about how CMP works.

I've got this snippet of code. Don't know where it's from, who wrote it, or if it actually works. (It's been on my harddrive since 1994 if my clock chip was set correctly). I'm more interested in the theory behind CMP so I can write my own encoder/decoder.

Note: Comments are a mix of dutch/english
=============
; UNCRUNCH ROUTINE T&E SOFT
;
; IN: HL= RAMADRES CRUNCH DATA
; DE= COORDINATEN IN VRAM
; A = VRAM PAGE (0,1,2,3)
;
CMPER:: JP USTART
;
UVARIA: DB 0 ;&H4EC0 ;&HE000 ; 1 BYTE
UTABEL: DB 0,0,0,0,0,0,0,0 ;&H4EC1 ;&HE001 ; 8 BYTES
UTABE2: DW 0,0,0,0,0,0,0,0,0,0 ;&H4EC9 ;&HE009 ; MAX. 256 B
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0
;
USKIP EQU 0FEH
UVDP EQU 98H
;
UROUT1: XOR A
SLA B
JR NC,X1
LD A,(HL)
INC HL
X1: DEC C
RET NZ
PUSH AF
LD A,(DE)
LD B,A
LD A,E
CP UTABE2 MOD 256
JR NZ,X2
DEFB USKIP ; PUSH AF won't be executed now !
ROUTIN: PUSH AF
LD C,(HL)
INC HL
LD DE,UTABEL
LD B,8
X4: XOR A
SLA C
JR NC,X3
LD A,(HL)
INC HL
X3: LD (DE),A
INC DE
DJNZ X4
LD DE,UTABEL
LD A,(DE)
LD B,A
X2: INC DE
LD C,8
POP AF
RET


USTART: LD    B,A
       SRL   A
       LD    (UVARIA),A
       LD    A,D
       LD    D,E
       LD    E,A
       XOR   A
       SRL   D
       RRA
       ADD   A,E
       LD    E,A
       JR    NC,X5
       INC   D
X5:     BIT   0,B
       JR    Z,X6
       SET   7,D
X6:     PUSH  DE
       LD    B,(HL)
       INC   HL
       LD    C,(HL)
       INC   HL
       LD    A,(HL)
       INC   HL
       EX    AF,AF
       PUSH  BC
       CALL  ROUTIN
       EXX
       POP   BC
       POP   HL
       DEFB  USKIP           ; EX AF,AF won't be executed now
X8:     EX    AF,AF
       PUSH  BC
       LD    A,(UVARIA)
       CALL  USETWR
       LD    DE,UTABE2
X7:     EXX
       CALL  UROUT1
       EXX
       LD    (DE),A
       INC   DE
       OUT   (C),A
       DJNZ  X7
       EI
       LD    C,128
       ADD   HL,BC
       POP   BC
       DEC   C
       RET   Z
       EX    AF,AF
       DEC   A
       JP    NZ,X8
X9:     PUSH  BC
       LD    A,(UVARIA)
       CALL  USETWR
       LD    DE,UTABE2
       EX    DE,HL
X10:    EXX
       CALL  UROUT1
       EXX
       XOR   (HL)
       LD    (HL),A
       INC   HL
       OUT   (C),A
       DJNZ  X10
       EI
       EX    DE,HL
       LD    C,128
       ADD   HL,BC
       POP   BC
       DEC   C
       JP    NZ,X9
       LD    B,E
       LD    B,C
       LD    D,E
       RET
;
USETWR: DI
       PUSH  BC
       PUSH  HL
       LD    C,H
       RL    C
       RLA
       RL    C
       RLA
       OUT   (UVDP+1),A
       LD    A,8EH
       OUT   (UVDP+1),A
       LD    C,UVDP+1
       OUT   (C),L
       RES   7,H
       SET   6,H
       OUT   (C),H
       POP   HL
       POP   BC
       LD    C,UVDP
       RET
EINDE:  NOP
;       EINDE UNCRUNCH ROUTINE
       END

_______________________________________________
MSX mailing list ([EMAIL PROTECTED])
Info page: http://lists.stack.nl/mailman/listinfo/msx

Reply via email to