Asteroids: presentación de números en decimal – posible uso de BCD

Un byte codificado en binario es muy fácil de presentar en pantalla en binario. Llega con hacer “rol”, ir pasando sus bits al acarreo, empezando por el bit 7 y terminando por el bit 0, e ir pintando un 1 o un 0 según el bit / acarreo valga 1 o 0, respectivamente. Puede verse una implementación en la rutina “pintaBin” de la librería “LibText.asm”:

Asteroids - Rutina pintaBin.PNG

Sumar $30 = 48 permite convertir un 0 en el carácter PETSCII ‘0’, y permite convertir un 1 en el carácter PETSCII ‘1’, porque en este caso se suma también el acarreo, es decir, $31 = 49.

Igualmente, un byte codificado en binario también es muy fácil de presentar en pantalla en hexadecimal. Llega con quedarse con el nibble alto (bits 4 – 7), pintar el dígito hexadecimal ($0 – $f) correspondiente a los 16 posibles valores del nibble, y repetir el proceso con el nibble bajo (bits 0 – 3). Pueden verse las rutinas “pintaHex” y “pintaHex2” de la librería “LibText.asm”:

Asteroids - Rutina PintaHex.PNG

Sin embargo, lo que no es tan fácil es presentar en decimal un byte codificado en binario. Para esto es para lo que está pensada la codificación BCD. BCD, al guardar un dígito decimal en cada nibble, es fácil de presentar en decimal. Podemos ver la rutina “pintaBCD” de librería “LibText.asm”:

Asteroids - Rutina pintaBCD.PNG

La idea básica es quedarse con el nibble alto, acceder a una tabla que convierte en el dígito decimal correspondiente (0 – 9) los diez posibles valores del nibble (recordemos que lo que hay en el nibble es un dígito decimal), y repetir el proceso con el nibble bajo. Fácil, porque BCD es esencialmente una codificación decimal.

Por tanto, podríamos pensar que la solución a todos nuestros problemas es usar la codificación BCD para las coordenadas (X, Y), la velocidad, el ángulo, las vidas y los puntos. Sin embargo, no es exactamente así. Iremos viendo por qué…

Deja un comentario