06-03-2013, 07:17 AM
LCD Wrote:At the moment I'm "tera-busy" (not mega, neither giganitrofurano Wrote:btw, it's missing a description about memcopy (or memcpy) at <!-- m --><a class="postlink" href="http://www.boriel.com/wiki/en/index.php/ZX_BASIC:Library">http://www.boriel.com/wiki/en/index.php ... IC:Library</a><!-- m -->Is this not a little bit offtopic?
based on that, i'm trying to create a new subroutine, which attempts to do a memcopy from paged memory (128k) (far still incomplete and accurate, because, besides it doesn't work fine yet, it doesn't copy a group of bytes splitted into different neighbour pages)
Code:sub memcpypagedtodisplay(tdest as ulong, tpadr as ulong, tleng as ulong):
dim tpvl as ulong
dim tqadr as ulong
tpvl=int (tpadr/16384)
tqadr=tpadr mod 16384
out 32765,16+(int(tpvl*1.5))
memcopy(tdest,49152+tqadr,tleng)
end sub
Anyway, Memcopy is not optimal, it can be replaced with much faster and shorter ASM routine. I made one and it is on my HDD, but I do not remember which one was working and which not.
Code:sub CopyMem(src as Uinteger,des as Uinteger,length as Uinteger,bank as ubyte)
asm
ld a,(ix+11)
ld bc,32765
out (c),a
ld hl,(ix+5)
ld de,(ix+7)
ld bc,(ix+9)
ldir
ld a,(23388)
ld bc,32765
out (c),a
end asm
end subCode:sub CopyMem(src as Uinteger,des as Uinteger,length as Uinteger)
asm
ld d,(ix+7)
ld e,(ix+6)
ld h,(ix+5)
ld l,(ix+4)
ld b,(ix+9)
ld c,(ix+8)
ldir
end asm
end sub

This idea is *very* interesting, and this routine may go in the library/ package, bundled with the compiler. :roll: