Fast Memory Access (FMA).
(C) VTS'99
Fast, but not Direct Memory Access - because
working memory exercises continue
good old Z80.
This method is proposed to use
in peripheral (as well as any other)
devices on the Z80 to increase their productivity when working
with arrays of memory (graphics, for example).
Thus, we can throw the memory-memory with
rate of 5.10 cycles / byte. Khe-heh, already
see the smirk kodyaschey brethren). Yeah, STE
Again favorite stack. True, the normal DMA
shakes bytes for 8 cycles (at least
8237, the Zilog information do not have)
but he booolshoy and gluttonous;).
True, he still manages to pump out and uploads the data from
the outside, and a little poshustree. In the case may be
somewhere in memory Z80 "Progryzt" hole and insert there the
registers of this very "outside", and do not take offense for a
speed close to the IN / OUT (although the turbo will be better,
because IN / OUT operate normally - I mean KAY).
And now more specific.
I think it's common knowledge that one
Frame Spectrum screen thrown like this:
LD HL, XXXX; 10 cycles
PUSH HL; 11 clock cycles
LD HL, YYYY --------
PUSH HL 21t./2bayta
LD HL, ZZZZ (10.5t./bayt)
PUSH HL --------
.... 21 * 3072 = 64512t.
only 3072 times
XXXX, YYYY, ZZZZ - is the screen.
As can be seen on-screen information through the
every two bytes thinned the other two
Bytes:
.. E5 21 XX XX E5 21 YY YY E5 21 ZZ ZZ ...
LD HL, XXXX PUSH HL
To prepare such a mess in the usual
memory, you need to work longer than one
frame, therefore, requires thorough
dekryunching and Prorva memory.
But there is a better way! ((C) advertising) and
it requires zhelezyachnogo intervention. Is he in the
entanglement bits addresses, for example, A14 and A1, can also
on condition A15 = 1. Then we get the following:
0000 0000
16k 16k segment 0 segment 0
4000 4000
16k 16k segment 1 segment 1
8000 8000
16k segment 2 FMA
C000 32k
16k segment 3 AREA
FFFF FFFF
Ie 2'oy and 3'y segments overlapped
each other every two bytes. AND
if now in 2'oy segment written in a row a bunch of (16Kb) E5 21
(and at # BFFD Record C9 - RET) and make the call on # 8001,
then the stack unload 16,382 bytes :-).
It remains only the top page of memory
click ...
Well, in the end to count how much
We still passes 8,237:
K (8237) = (10.5-8) * 100/10.5 = 23.8%
Not so much ...
ps: Here we describe only the principle, because
apply it to some central Z80
problematic (and it is not in iron ...). Ie it to the periphery!
isdos 23-04-99 22:47 msk