© М. Тамаринов, г. Соликамск.
Хочу предложить вашему вниманию две процедуры. Первая - компрессор символьной информации. Он был написан мной специально для компрессии игрового поля. Его достоинства:
1. Не важно сколько раз повторяется байт.
2. Компрессия на выходе будет либо меньше, чем нескомпрессированные данные (если есть что сжимать), либо равна (если сжимать нечего), но никак не больше.
Его недостатки:
1. В данных для компрессии не должны встречаться байты #FE и #FF (254, 255). Поэтому компрессор годен для сжатия символьной информации. Компрессор:
SMARTCOMP
SINGLE FILL
OVFLOW
|
LD |
IX,(BUFF) |
|
LD |
HL,(DEST) |
|
LD |
D,1 |
|
LD |
A, (IX) |
|
CP |
#FF |
|
JR |
Z, END |
|
CP |
(IX+1) |
|
JR |
NZ,FORM |
|
LD |
A,0 |
|
CP |
#FF |
|
JR |
NC,OVELOW |
|
INC |
D |
|
INC |
IX |
|
JR |
LOOP |
|
LD |
A, D |
|
CP |
3 |
|
JR |
C,SINGLE |
|
LD |
(HL),#FE |
|
INC |
HL |
|
LD |
(HL),D |
|
INC |
HL |
|
LD |
A, (IX) |
|
LD |
(HL),A |
|
INC |
HL |
|
LD |
D,0 |
|
JR |
PASS |
|
LD |
A, (IX) |
|
LD |
(HL),A |
|
INC |
HL |
|
DEC |
D |
|
JR |
NZ, FULL |
|
JR |
PASS |
|
LD |
(HL),#FE |
|
INC |
HL |
|
LD |
(HL),D |
|
INC |
HL |
|
LD |
A, (IX) |
|
LD |
(HL),A |
|
INC |
HL |
|
INC |
IX |
|
LD |
D,0 |
|
JR |
LOOP |
|
LD |
(HL),#FF |
|
LD |
B, H |
|
LD |
C, L |
|
RET |
|
BUFF - адрес, с которого начинаются данные для компрессора. DEST - адрес, куда нужно поместить сжатые данные. Декомпрессор:
LD IX,(DEST)