Esto es una rutina de ensamblador 100% y lamentablemente, por ahora, ZX BASIC no entiende mucho de asm (no está integrado con el parser de asm del todo y le cuesta encontrar los errores de asm).
El error lo tienes en la línea:
Código: Seleccionar todo
ld a, (iy)
Debería ser
Código: Seleccionar todo
ld a, (iy + 0)
(Más arriba lo hiciste bien con ix).
El (iy + 0) debería ser explícito por sintaxis (en mi modesta opinión) para resaltar el hecho de que (iy + 0) siempre gastará un byte más para la indirección, aunque sea 0.