Автор: R. Swailes
Год: 1984
Издатели: Your Computer
Языки:
Английский
Формат:
TZX лента
Требования:
ZX Spectrum 48K
Ссылки:
Страница на ZXArt
Страница на World Of Spectrum
Страница на Spectrum Computing
Скриншоты:
Год: 1984
Издатели: Your Computer
Языки:
Формат:
Требования:
Ссылки:
Скриншоты:
Screen Compactor
R. Swailes presents a memory saving program
for the Spectrum which is designed to help
adventure writers to draw pictures more efficiently.
The original purpose of this compactor program was to
enable adventure game writers to draw pictures quickly
without wasting too much memory. Some adventure games draw
pictures for each location but take a long time about it.
This program is a compromise between slow pictures and
minimum waste of memory and instant pictures but with con-
siderable waste of memory.
The average saving of memory is about 40 per cent, though
for simple line drawings it will be much higher. For very
detailed pictures completely filling the screen there will
be a minimal saving.
Begins at pixel one
The Spectrum screen $ save begins at pixel one and saves
its value - 1=On 0=Off. The first eight pixels, for example
0,0,1,1,1,1,0,0 are represented by binary 00111100 or 60
decimal. At the first screen location in memory (16384), if
Peeked, would be seen the value 60. The save continues
through all locations saving the pixel values in blocks of
eight. There are 49152 pixels - 49152/8 = 6144 bytes or 6K
of memory.
The compactor program relies on the fact that most pic-
tures have more background than picture. Where background =
eight pixels off Bin 00000000 = decimal 0.
Even if saving a page of alpha numerics economies can be
made because the top line of any 8 by 8 character is always
blank, and since the screen scan does the top row of the
first eight lines together - chapter 24 display file -
these can be compressed. The bottom lines of each character
are usually also blank - except lower case letters with
tails - and similar savings can be made here.
The machine code save "picture to code" looks at the
first screen location (16384) to see if any of the eight
pixels are on - giving a value greater than zero. If so it
saves the value as normal. Should it be zero - after sto-
ring the 0 - it checks the next location to see if that is
also zero and continues until a lit pixel is found. The
program then saves the number of consecutive zeros. For
example.
Screen$ Code:
64, 2, 0 0 0 0 0 0 0 0 0 12, 19 = 13 bytes
Compacted Data:
64, 2, _0,_9,_0_, 12, 19 = 7 bytes
0 indicates start of a loop of zeros.
9,0 Length of loop (low order byte first)
0x256 + 9 = 9 Loop=9)
Thus 0, 0, 24 24x256 + 0 = 6144 bytes = 6K
is a screen full of zeros in 3 bytes. To convert the code
back to a picture the reverse applies.
Type in listing 1 and Run, then type in Data 1. If all
goes well then save to tape the machine code for picture
saving.
Amend listing 1 with listing 2 and Run, then type in
Data 2. This will also save to tape if it is correct. This
is the machine code for picture printing.
Clear the machine
Clear the machine and type in the Demonstration Program
and Run. It will load up the Data 1 and Data 2 Code from
tape. It then expects a Screen $ to load in.
* If you haven't a Screen $ handy on tape then delete line
90 and insert 90 List 120. Following the program and your
Screen $ - or listing - will be saved in code - in memory.
The length of the code and saving can be seen. Press any
key and the Screen $ instantly reappears.
A list of Pokes - table 1 - is supplied in case you don't
want to save a whole screen. Just amend the started data in
listings 1 and 2 and this will enable you to save either
the Top 1/2, Top 2/3, the whole screen or the whole and
Attribute File.
You can draw and save several pictures one after the
other; just Poke 23728-9 as lines 50, 60, 70 in the main
program - with the position in memory where the picture
code is to be stored. Save the picture with Rand USR 25000
and then Peek 23728-9 - line 120 in the main program - to
find the length of the picture code in memory and work out
the next picture code start position and repeat.
For all Spectrums
To recall any picture Poke 23728-9 - lines 150,160 in the
main program - where V=start position of picture code in
memory then Rand USR 25130.
The program was written for all Spectrums, and the
machine code is fully relocatable. For 48K machines instead
of typing in numbers 25 etc. type in 35xxx or 45xxx.
Your picture code can be saved to tape once stored in
memory. See chapter 20, Spectrum manual.
R. Swailes presents a memory saving program
for the Spectrum which is designed to help
adventure writers to draw pictures more efficiently.
The original purpose of this compactor program was to
enable adventure game writers to draw pictures quickly
without wasting too much memory. Some adventure games draw
pictures for each location but take a long time about it.
This program is a compromise between slow pictures and
minimum waste of memory and instant pictures but with con-
siderable waste of memory.
The average saving of memory is about 40 per cent, though
for simple line drawings it will be much higher. For very
detailed pictures completely filling the screen there will
be a minimal saving.
Begins at pixel one
The Spectrum screen $ save begins at pixel one and saves
its value - 1=On 0=Off. The first eight pixels, for example
0,0,1,1,1,1,0,0 are represented by binary 00111100 or 60
decimal. At the first screen location in memory (16384), if
Peeked, would be seen the value 60. The save continues
through all locations saving the pixel values in blocks of
eight. There are 49152 pixels - 49152/8 = 6144 bytes or 6K
of memory.
The compactor program relies on the fact that most pic-
tures have more background than picture. Where background =
eight pixels off Bin 00000000 = decimal 0.
Even if saving a page of alpha numerics economies can be
made because the top line of any 8 by 8 character is always
blank, and since the screen scan does the top row of the
first eight lines together - chapter 24 display file -
these can be compressed. The bottom lines of each character
are usually also blank - except lower case letters with
tails - and similar savings can be made here.
The machine code save "picture to code" looks at the
first screen location (16384) to see if any of the eight
pixels are on - giving a value greater than zero. If so it
saves the value as normal. Should it be zero - after sto-
ring the 0 - it checks the next location to see if that is
also zero and continues until a lit pixel is found. The
program then saves the number of consecutive zeros. For
example.
Screen$ Code:
64, 2, 0 0 0 0 0 0 0 0 0 12, 19 = 13 bytes
Compacted Data:
64, 2, _0,_9,_0_, 12, 19 = 7 bytes
0 indicates start of a loop of zeros.
9,0 Length of loop (low order byte first)
0x256 + 9 = 9 Loop=9)
Thus 0, 0, 24 24x256 + 0 = 6144 bytes = 6K
is a screen full of zeros in 3 bytes. To convert the code
back to a picture the reverse applies.
Type in listing 1 and Run, then type in Data 1. If all
goes well then save to tape the machine code for picture
saving.
Amend listing 1 with listing 2 and Run, then type in
Data 2. This will also save to tape if it is correct. This
is the machine code for picture printing.
Clear the machine
Clear the machine and type in the Demonstration Program
and Run. It will load up the Data 1 and Data 2 Code from
tape. It then expects a Screen $ to load in.
* If you haven't a Screen $ handy on tape then delete line
90 and insert 90 List 120. Following the program and your
Screen $ - or listing - will be saved in code - in memory.
The length of the code and saving can be seen. Press any
key and the Screen $ instantly reappears.
A list of Pokes - table 1 - is supplied in case you don't
want to save a whole screen. Just amend the started data in
listings 1 and 2 and this will enable you to save either
the Top 1/2, Top 2/3, the whole screen or the whole and
Attribute File.
You can draw and save several pictures one after the
other; just Poke 23728-9 as lines 50, 60, 70 in the main
program - with the position in memory where the picture
code is to be stored. Save the picture with Rand USR 25000
and then Peek 23728-9 - line 120 in the main program - to
find the length of the picture code in memory and work out
the next picture code start position and repeat.
For all Spectrums
To recall any picture Poke 23728-9 - lines 150,160 in the
main program - where V=start position of picture code in
memory then Rand USR 25130.
The program was written for all Spectrums, and the
machine code is fully relocatable. For 48K machines instead
of typing in numbers 25 etc. type in 35xxx or 45xxx.
Your picture code can be saved to tape once stored in
memory. See chapter 20, Spectrum manual.