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
