COMPRESSION code block
Working with Hrum v3.5i
The purpose of this writing - to give the most complete
information on program hrum 3.5i - wrapper code blocks.
Some characteristics HRUM 3.5i
Maximum length of file that can be
be packed and unpacked in the future:
49,033 bytes
Full length decompressor: 150 bytes
The length of the decompressor: 119 bytes
Compression speed: 1 kb / s
Decompression speed: 33 kb / s
Ability to work with
IM 2 interrupt enabled: yes
Compression ratio: nemeryanaya
Now you can download and run the huge files (Spectrum
standards, of course) - up to 49,033 bytes, even
from BASIC ...
Setting / Options:
Change Drive - Select the drive. Keys
A, B, C, D + ENTER; ENTER -
Change of diskettes. EDIT-cancellation.
Optimization - rudiments. In versions 1.x and
2.x increases
compression at 1 - 1.5%
In version 3.x recognized netse
expediency, as degree
compression increased the total to
0.01%. Installation of "+"
instead of "-" will help sekono
mit on the loose files of about
3 - 30 bytes.
Compression - Compression of a file. Owners
Tsam SPECTRUM 48 should not be
changing discs in packaging
Files whose length
more than 25600 bytes.
Upon completion of packaging conclusions
converge the length of the packed
file compression ratio.
Requesting a file name:
"A :________"
Changing the "A:" to "B:", UNE
Example, the file will be written on
drive "B".
File address - Starting address of the packed
corrupted file.
Decompres to - Address, pointing to
will be made unpack
ka. - means that
address is taken from the catalog.
Decompressor - This address will be considered
reliance 119-byte block
provides unpacking.
It is important that this block is not
overlapped address:
1) stack at the moment
2) the compressed data
3) have not yet unpacked
data.
Int. on exit - Interrupt output.
Auto - Start - Address auto.
New SP - New stack pointer
output.
About compressor - Information.
Exit to TR-DOS - Exit.
The simplest example is the use of
Game DIZZY3
On the disc consists of 3 files:
DIZZY3.B - boot in BASIC.
dizzy31.C start: 40,000, length: 4054
- Packed screensaver.
dizzy32.C start: 24,576, length: 40,959
- The main unit.
File DIZZY3.B:
<R.U.=RANDOMIZE USR>
10 CLEAR 24575
20 R.U.15619: REM: LOAD "dizzy31" CODE
30 R.U.40000
40 R.U.15619: REM: LOAD "dizzy32" CODE
1950 REM: POKE 63001,0
60 R.U. 24832
Pack file
dizzy32.C start: 24,576, length: 40,959
Before packing the file set:
File address: (equivalent to 24,576)
At this address, load the packed
file and start to unpack.
Decompress to: (equivalent to 24,576)
That happens here unpacking file
Decompressor: 23433 (extractor length
119 b. will be located in the buffer principle
tera).
Int.on exit: EI (at the outlet of depakera
interrupts are enabled)
Auto start: 24832 (after unpacking Loss
zoydet go to this address).
The resulting file is called dizzy32c.C
Refactor boot:
10 CLEAR 24575
20 R.U.15619: REM: LOAD "dizzy31" CODE
30 R.U.40000
40 R.U.15619: REM: LOAD "dizzy32s" CODE
1950 REM: POKE 63001,0
60 R.U. 24576; unpacking and running.
It is quite possible you will want to establish immortality.
In this case, the package file (unlike earlier) should be set:
Auto start: NO
A string of Basic edit (add):
45 R.U. 24576; unboxing
50 POKE 63001,0; immortality
60 R.U. 24832; launch
Another example
Suppose you make a game adaptation
trdos and to download the file address 23296 and by the end of
memory, and then run the game with a certain address. Without
ceremony so get a long file under the address you do not
succeed. In one Log zxformat proposed cut
file into pieces, one of the pieces loaded into
screen area, to throw on the right
place ... Forget about this nightmare!
Hrum not only can pack files
up to 49,033 bytes, it will also help
upload files here so long (in packaged form - you can at least
get out of BASIC), unpack it, change the status
Interrupt (EI / DI), SP, and also go to
desired address:
In this case:
File address: 24576
Decompress to: 23296
Decompressor: 16,384
Int.on exit: EI or DI
Auto start: where to go.
New SP on exit: what is necessary.
Goods in the file address 24576
and run with the same address. EVERYTHING!
How does the unpacker
After starting the program throws
extractor in a particular area and runs this extractor. Next
packaged unit is thrown into an area where will be unpacking
(in the upper address). Then she is unpacking.
Features of a decompressor with
IM2 regime included:
Let ADR - Address Start decompressor.
So ...
1. Turn on IM 2
2. Do: EI 'CALL ADR +1
everything.
ISR must use its stack, type:
myim2
LD (oldsp), SP
LD SP, mysp
PUSH ...
........
POP ...
oldsp EQU $ +1
LD SP, 0
EI
RET
In conclusion: use
Hrum'om much more pleasant and understandable than
read this one the best text.
Dmitry Pyankov