02-14-2012, 11:08 PM
slenkar Wrote:When I try to use Isqrt.bas it says:
ISqrt.bas:125: Error: illegal preprocessor character '$'
Um. I wrote that piece. I'd better look.
Ah. I'm calling this a compiler bug. It used to compile that. The current version doesn't.
The code uses "jr nc,$+3" to mean "jump to three bytes forward from here" - $ should mean "current location", and the compiler didn't blink with this some versions ago.
Here's a fix, replacing it with a label:
sqrtLFsqrt16loop:
sbc hl,de ; IF speed is critical, and you don't mind spending the extra bytes,
; you could unroll this loop 7 times instead of DJNZ.
; deprecated because of issues - jr nc,$+3 (note that if you unroll this loop, you'll need 7 labels for the jumps the other way!)
jr nc,sqrtLFsqrthop1
add hl,de
sqrtLFsqrthop1:
ccf
rl d
rla
adc hl,hl
rla
adc hl,hl
DJNZ sqrtLFsqrt16loop
However, as I noted in the comment, this is a pain if you decided to unroll the loop for maximum speed - you'd need 7 labels for the jumps!
Anyway, I've updated the copy in the wiki, to make this one go away.
Boriel, how did jr $+3 suddenly stop compiling?!
