10-08-2011, 02:22 PM
i were trying to make some experiences with display memory byte sequence references from coco2 (pmode 4) and msx1 (screen 2)
first i tried these:
coco2-pmode4 with sub/endsub (around 49 seconds):
msx1-screen2 with sub/endsub (around 60 seconds):
but when i don't use sub/endsub, i got these results as benchmark:
coco2-pmode4 without sub/endsub (around 3 seconds):
msx1-screen2 with sub/endsub (around 7 seconds):
and i used the original zx-spectrum byte sequence display, i got this:
with sub/endsub (around 30 seconds):
without sub/endsub (around 0.25 seconds or less):
the question: what is causing so large performances differences from my expectations (i expected faster on the slower ones), and should i do for optimizing this?
first i tried these:
coco2-pmode4 with sub/endsub (around 49 seconds):
Code:
dim a1, a2, v1, i as integer
sub vpokeln(a1,v1)
let a2=16384 + ((a1 band 31) bor ((a1 band 224)*8) bor ((a1 band 1792)/8) bor (a1 band 6144))
if a1>=0 and a1<=6143 then: poke a2,v1:end if
end sub
out 254,6
for i=400 to 6000
vpokeln(i,40)
next i
pause 0
msx1-screen2 with sub/endsub (around 60 seconds):
Code:
dim a1, a2, v1, i as integer
sub vpokech(a1,v1)
let a2=16384+(((a1 band 7)*256) bor ((a1 band 248)/8) bor ((a1 band 1792)/8) bor (a1 band 6144))
if a1>=0 and a1<=6143 then: poke a2,v1:end if
end sub
out 254,6
for i=400 to 6000
vpokech(i,40)
next i
pause 0
but when i don't use sub/endsub, i got these results as benchmark:
coco2-pmode4 without sub/endsub (around 3 seconds):
Code:
dim i as integer
out 254,6
for i=400 to 6000
poke 16384+((i band 31) bor ((i band 224)*8) bor ((i band 1792)/8) bor (i band 6144)),40
next i
pause 0
msx1-screen2 with sub/endsub (around 7 seconds):
Code:
dim i as integer
out 254,6
for i=400 to 6000
poke 16384+(((i band 7)*256) bor ((i band 248)/8) bor ((i band 1792)/8) bor (i band 6144)),40
next i
pause 0
and i used the original zx-spectrum byte sequence display, i got this:
with sub/endsub (around 30 seconds):
Code:
dim a1, a2, v1, i as integer
sub vpokezx(a1,v1)
let a2=16384+a1
if a1>=0 and a1<=6143 then: poke a2,v1:end if
end sub
out 254,6
for i=400 to 6000
vpokezx(i,40)
next i
pause 0
without sub/endsub (around 0.25 seconds or less):
Code:
dim i as integer
out 254,6
for i=400 to 6000
poke 16384+i,40
next i
pause 0
the question: what is causing so large performances differences from my expectations (i expected faster on the slower ones), and should i do for optimizing this?