![]() |
|
POKE STRING and @string$ - Printable Version +- Boriel Basic Forum (https://forum.boriel.com) +-- Forum: Compilers and Computer Languages (https://forum.boriel.com/forumdisplay.php?fid=12) +--- Forum: ZX Basic Compiler (https://forum.boriel.com/forumdisplay.php?fid=11) +---- Forum: Help & Support (https://forum.boriel.com/forumdisplay.php?fid=16) +---- Thread: POKE STRING and @string$ (/showthread.php?tid=229) Pages:
1
2
|
Re: POKE STRING and @string$ - boriel - 2013-06-04 LCD Wrote:Okay, so I do now know which one was not working... LD registerpair,(IX+offset) is invalid. Then this should work:Ok, I like this. My two cents: I think it's better to FASCALL it and use the POP sequence in this case: Code: sub fastcall cpymempaged(src as Uinteger,des as Uinteger,length as Uinteger,bank as ubyte)
asm
ex de, hl ; de = src
pop hl ; RET address
pop af ; bank
ld bc,32765
out (c),a
pop bc ; length
ex (sp), hl ; hl = des, RET addr back in the stack
ex de, hl ; hl = src, de = dest
ldir
ld a,(23388)
ld bc,32765
out (c),a
end asm
end subRe: POKE STRING and @string$ - LCD - 2013-06-05 boriel Wrote:Yes, but I' going to sleep now. Will test it tomorrow. Will check the function, size of code, but not the execution time as I do not expect much difference there (the most time consuming thing, is the LDIR).LCD Wrote:Okay, so I do now know which one was not working... LD registerpair,(IX+offset) is invalid. Then this should work:Ok, I like this. My two cents: I think it's better to FASCALL it and use the POP sequence in this case: Oh, and I found nice window scrolling/rolling routines in a book: 1 pixel, 8 pixel and attribute. Typing them up now. Maybe this can replace the Scroll library later. Re: POKE STRING and @string$ - LCD - 2013-06-09 Sorry for the late reply. I was busy fixing the next bug in BorIDE that stopped me from running your code. Anyway, I tested it using this program: 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 h,(ix+5)
ld l,(ix+4)
ld d,(ix+7)
ld e,(ix+6)
ld b,(ix+9)
ld c,(ix+8)
ldir
ld a,(23388)
ld bc,32765
out (c),a
end asm
end sub
sub fastcall cpymempaged(src as Uinteger,des as Uinteger,length as Uinteger,bank as ubyte)
asm
ex de, hl ; de = src
pop hl ; RET address
pop af ; bank
ld bc,32765
out (c),a
pop bc ; length
ex (sp), hl ; hl = des, RET addr back in the stack
ex de, hl ; hl = src, de = dest
ldir
ld a,(23388)
ld bc,32765
out (c),a
end asm
end sub
paper 7:ink 0:border 7:cls
poke 23388,16
CopyMem(0,49152,6144,17)
CopyMem(49152,16384,6144,17)
border 1
pause 0
cls
cpymempaged(49152,16884,6144,17)
pause 0I fear, your routine does not work. But it is in fact shorter than mine. |