Теперь приступлю к рассмотре-
нию ускоренного DECRUNCHERа к
DSQ. Для его использования Вам
необходимо запаковать в DSQ
необходимый файл и записать за-
пакованный файл на диск без
DECRUNCHERа, ответив NO на воп-
рос "INCLUDE DECRUNCHER (Y/N)?".
Там Вам зададут еще несколько
вопросов, ответы на которые не
имеют никакого значения (глюк
DSQ).
Тут необходимо оговорить один
момент, который может привести к
фатальным последствиям: старто-
вый адрес запакованного файла
(ORG в нижеприведенной програм-
ме) должен быть на несколько
байтов ниже, чем адрес, в кото-
рый будет распаковываться исход-
ный файл.
В DECRUNCHER (первые три
строки) необходимо подставить
следующие значения:
- В первую строку (DATLEN) за-
писать длину запакованного фай-
ла, который Вам сохранил DSQ.
- Во вторую (STRFIL) - старто-
вый адрес первоначального файла,
т.е. адрес, в который необходимо
распаковть файл.
- В третью строку (ENDFIL) нуж-
но вписать адрес последнего бай-
та исходного файла, который рас-
читывается путем сложения стар-
тового адреса и длины, минус 1.
Также, при необходимости,
вместо последней команды RET
можно поставить JP #xxxx для
автозапуска после распаковки.
К примеру, для распаковки эк-
ранного файла, запакованного DSQ
в 2048 байт, в первую строку
нужно поставить 2048, во вто-
рую - 16384, а в третью строку -
16384+6912-1=#5AFF(23295).
А вот, собственно, и текст
самого DECRUNCHERа:
DATLEN EQU 2048
STRFIL EQU 16384
ENDFIL EQU 23295
ORG xx-nn ; (!!!)
START LD DE,16384
LD HL,DECR
PUSH DE
LD BC,FL2-FL1
LDIR
LD DE,START
LD HL,DATA
LD BC,DATLEN
RET
DECR
FL1 LDIR
LD BC,264
EX DE,HL
DEC HL
EXX
PUSH HL
LD DE,ENDFIL
DR5 LD HL,1
EXX
DJNZ DR20
LD B,C
LD E,(HL)
DEC HL
DR20 RL E
EXX
JR NC,DR1
LD B,L
INC L
EXX
DJNZ DR21
LD B,C
LD E,(HL)
DEC HL
DR21 RL E
EXX
JR C,DR6
INC B
LD L,4
EXX
DJNZ DR22
LD B,C
LD E,(HL)
DEC HL
DR22 RL E
EXX
JR C,DR6
EXX
DJNZ DR23
LD B,C
LD E,(HL)
DEC HL
DR23 RL E
EXX
JR NC,DR7
LD B,L
XOR A
DR24 EXX
DJNZ DR25
LD B,C
LD E,(HL)
DEC HL
DR25 RL E
EXX
RLA
DJNZ DR24
ADD A,8
LD L,A
CP 23
JR C,DR8
LD B,5
XOR A
DR35 EXX
DJNZ DR34
LD B,C
LD E,(HL)
DEC HL
DR34 RL E
EXX
RLA
DJNZ DR35
ADD A,14
LD L,A
DR1 LD B,8
XOR A
DR26 EXX
DJNZ DR27
LD B,C
LD E,(HL)
DEC HL
DR27 RL E
EXX
RLA
DJNZ DR26
LD (DE),A
DEC DE
DEC L
JR NZ,DR1
JR DR9
HEDGE JR DR5
DR7 LD L,23
DR2 LD B,8
DR6 XOR A
LD C,A
DR29 EXX
DJNZ DR28
LD B,C
LD E,(HL)
DEC HL
DR28 RL E
EXX
RL C
RLA
DJNZ DR29
LD B,A
LD A,C
ADD HL,BC
INC A
JR Z,DR2
DR8 PUSH HL
LD HL,33
EXX
DJNZ DR30
LD B,C
LD E,(HL)
DEC HL
DR30 RL E
EXX
JR C,DR10
LD B,9
ADD HL,DE
EXX
DJNZ DR31
LD B,C
LD E,(HL)
DEC HL
DR31 RL E
EXX
JR NC,DR11
LD B,5
LD L,E
LD H,D
INC HL
JR DR11
DR10 LD B,11
LD H,2
ADD HL,DE
DR11 XOR A
LD C,A
DR32 EXX
DJNZ DR33
LD B,C
LD E,(HL)
DEC HL
DR33 RL E
EXX
RL C
RLA
DJNZ DR32
LD B,A
LD A,C
ADD HL,BC
POP BC
LDDR
DR9 LD HL,STRFIL-1
SBC HL,DE
JR C,HEDGE
POP HL
EXX
RET
FL2
DATA INSERT "NAMEDATA"
NAMEDATA - имя запакованного
в DSQ файла, записанного без
DECRUNCHERа.
* * *