© М. Тамаринов, г. Соликамск.
Хочу предложить вашему вниманию две процедуры. Первая - компрессор символьной информации. Он был написан мной специально для компрессии игрового поля. Его достоинства:
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)