over getxy op
dup getxy line
1+ ) drop 1+ ) drop ;
Fijate otra cosa. a y b guardan las coordenadas x e y de los puntos.
Es conveniente que esten separadas en memoria?
porque no guardar los dos valores uno a continuacion de otro?
Como comento Manuel en otro post, empaquetar y desempaquetar numeros puede ser de gran ayuda..
en x86 tarda lo mismo leer un byte, un word o un dword.. incluso a veces es mas rapido leer un dword.
entonces conviene mantenerse en 32 bits (o 64 en un futuro) salvo que este trabajando con texto
como empaqueto?
si necesito preservar el signo..
:xyto32 | x y -- xy ; de 16 bits a 32
$ffff and 16 << swap $ffff and or ;
:32toxy | xy -- x y
dup 16 << 16 >> | preserva signo
swap 16 >> ;
si no necesito el signo
:xyto32
16 << or ; | ojo no controlo limites, si el numero es mayo a 65536 los mexcla
:32toxy
dup $ffff and swap 16 >> $ffff and ; | el ultimo and es para quitar el signo... >> siempre arrastra el bit de signo
esto simplifica el acceso a los puntos y ademas permanecen juntos en memoria (es bueno para el cache):
:getxy
2 << 'lista + @ 32toxy ; | 2 << = 4 *
Otro detalle en el codigo es la repeticion de las lineas..estas dibujando de 0 a 1 y de 1 a 0 por ejemplo
:lineas
0 ( esqu 1- <? )( dup 1+ ( esqu <? )(
over getxy op
dup getxy line
1+ ) drop 1+ ) drop ;