Cuando Apple sacó su computadora Apple II, se tenía un intérprete de BASIC el cual trabajaba solamente con números enteros (una versión que podía usar números de punto flotante se llamó AppleSoft y se cargaba a memoria para ejecutarlo). Entonces Wozniak se dio cuenta de la necesidad de manipular apuntadores de 16 bits en su implementación del BASIC, considerando que el 6502 era un procesador de 8 bits.
SWEET16 fue el código que se ejecutaba como si estuviese corriendo en un procesador de 16 bits, con 16 registros (little-endians) de 16 bits, denominados de R0 a R15 y en donde algunos registros tenían ya funciones perfectamente definidas, por ejemplo:
- R0 es el acumulador.
- R12 es el apuntador a la subrutina que apunta al stack
- R13 guarda el resultado de todas las operaciones de comparación para hacer las pruebas para bifurcar (los llamados “branches”)
- R14 es el registro de estado (status)
- R15 es el contador de programa
Los 1|6 registros virtuales, 32 bytes en total, se localizaban en la página cero de la memoria de la Apple II (en $00-$1F), con los valores guardados primero con el byte menos significativo y luego el más significativo, es decir, lo que definen como little-endians. El intérprete de SWEET16 se localizaba desde $F689 a $F7FC en el ROM del Integer BASIC. Vamos, era una máquina virtual para operaciones en 16 bits que ocupaba solamente 300 bytes y es un ejemplo interesante de eficiencia, aunque corría a 1/10 de la velocidad del código nativo en 6502.
Uno podría pensar que hoy en día, con procesadores de 32 y 64 bits este código resulta inútil o en el mejor de los casos, como curiosidad histórica, pero la realidad es que puede usarse como un buen ejemplo de una máquina de 16 bits que corre en muy poca memoria, que puede ser incluso portado a otras máquinas (como la Atari ST) y hoy en día bien podría ponerse de ejemplo para trabajar con procesadores en sistemas embebidos, los cuales muchas veces por razones de economía, siguen usando solamente 8 bits. En mi opinión, vale la pena ver el código de Wozniak, el cual está perfectamente documentado en ensamblador del 6502, lo que además demuestra que el co-creador de Apple Computer no sólo era bueno para el hardware.
Referencias:
Wozniak, Stephen (November 1977). “SWEET16: The 6502 Dream Machine”. Byte.