Programming - support operations in deriving spraytav area of the display memory.
Auxiliary operations
the derivation of the sprite
in the area of the display memory
(C) Spencer Winset / Diamond group / Moscow
Preface
As you read the title of this article, I ask myself: My God,
what else can come up with such and such sort of in an area
where no lay a horse in 1982. Not even persuade me to tell
you about the device address space on the Spectrum - this
so we all know that space is not completely solid, ie
it is not continuous, but rather because we sometimes think ...
We approached the subject of conversation - the calculation
of the screen address the underlying line. There are about five
conventional methods, that make appalled spektrumistov their
time of execution of the problem. Next, give them as
performance:
1.Podborka at random. There's nothing funny - when you sit in
STS'e,
nothing more quickly you can imagine.
2.Raschet on a calculator or in BASIC for uncomplicated formula
16384 +2048 * i +32 * j +256 * k + x where i = [0-2]
number-thirds of the screen; j = [0-7] line number of
characters; k = [0-7] line number in the symbol; x = [0-31]
number of characters per line. This is for those who like a
little longer, but one time and accurately. ;)
3.Krutaya protsedurka for those who only studies of the logs
optical commands over the battery and their impact on the
flags.
Total cycles: for every "normal" line = 27 cycles
and on every eighth = 60 cycles.
LOGDW_HL INC H
LD A, L
AND # 07
JR NZ, $ +12
LD A, L
ADD A, # 20
LD L, A
CCF
SBC A, A
AND # F8
ADD A, H
LD H, A
4.Etot algorithm "DOWN HL" Many people know, and some have
already forgotten
how it works, yes it does not matter. I think this is the
second of Ca Mykh commonly used algorithms, after cleaning
the screen
LDIR'u. On cycles: for each "normal" line = 27 cycles
for every eight = 59 cycles and each 64-th line (from the
requirement TI third) = 49 cycles. Going Fullscreen - an
average of 30.84
bars on each line.
DOWN_HL INC H
LD A, H
AND # 07
JR NZ, $ +12
LD A, L
ADD A, # 20
LD L, A
JR C, $ +6
LD A, H
SUB # 08
LD H, A
5.Po plate (192 * 2 = 384 bytes), which contains two bytes,
meaning the ing the beginning of each subsequent line. In
deep childhood I ka It turned out that it is very wasteful
for the memory. : /
POP DE
LD A, E
ADD A, C
LD E, A
Total cycles: for each following line = 22 cycles. Gentlemen,
it is not bad. It is possible and even faster (10 cycles), but
then plate will have to sign the screen all the addresses, but
it is 12 KB - Now that's really wasteful, but twice
faster. Say what you like, but the amount of memory in the
computer (almost linearly) related to the quality of programs,
and not far off a new Standard - Pentagon 512K.
6.How always, at this point there is a pessimistic optimistic
Political Affairs: a possible faster?? "Yes!" - I say, from
the mountains The hardness of GOMOSAPIENSA. Algorithm Down
Micro Dab (DMD), enables that returns to come close to the
maximum possible speed
4 clocks per line. Essentially, the method is well described
by the following
scheme:
L0
1, the output first line of the sprite
INC H
L1
2, the output of second-line sprite
INC H
.......
L7
8, the eighth line of the output sprite
LD A, L
ADD A, # 20
LD L, A
JR C, NPOS
LD A, H
SUB # 07
LD H, A
DJNZ L0
NPOS INC H
DJNZ L0
Now explain to the fingers. Conclusion sprite signs under
symbolic position, ie, eight lines (and each line is painted
the width of a sprite). For the algorithm is sufficient even
286-th processor). Rather, we must take the Y-coordinate, to
make AND # 7 and jump to get the number of lines (L0-L7), as in
registre "B" number of character positions in the sprite
(height). It's almost all; remained excluding emissions
unnecessary lines when printing the last position (here the
same action at the beginning of the Y-coordinate). It's as
simple as take pocket money from pervoklasnika; +).
Total cycles: for every "normal" line = 4 clocks,
for every eight = 37 cycles and each 64-th line (from the third
third) = 31 cycles. Going Fullscreen - an average of 8.03 cycles
on each line.
If you download an application: dmd.H and activisn.C, you do
not should be asking questions, just crank ALASM, and forward
to new victories!
It's not all: if you want, based on the principle of the
algorithm Down Micro Dab (DMD), the average cost per line can
be reduced almost by half.
Now to complete literacy classes want to give useful advice,
especially on the game-makers: Do not choose the size of
sprites, the height of eight times (eg 3 * 3 simv.poz), as
generally accepted as it steals from you and nick 59/10/37
ticks depending on the method of calculation. Best format for
the sprite height - it is eight times the number of lines minus
one! Can now multiply the number of sprites on 59/10/37 and
will learn much to save on trifles.
Date: 22 November 1998
Goljakov Evgeny aka Spencer Winset / Diamond group
ZXNet: 500:95 / 550.8
m Editorial
Dear readers! Your feedback on this article, you can send to
ZXNet-author's address and the address of the newspaper Nicron.
*
Other articles:
|
|
|
|
Programming - support operations in deriving spraytav area of the display memory.
|
|
|
|
|
|
|
|
|
|
|