Independiente por fin
He acabado el ensamblador, y revisado el desensamblador porque descubrí varios errores al probar ambas partes a la vez.
La idea es encadenar los dos módulos hasta que el resultado sea el mismo. Por ejemplo, supongamos un binario programa.bin
:
$ ./dasm -ds programa.bin > fuente.s $ ./dasm fuente.s > programa2.bin $ ./dasm -ds programa2.bin > fuente2.s $ diff -u fuente.s fuente2.s
En realidad hay que ajustar un poco la salida del desensamblador porque genera ???
cuando no encuentra una instrucción válida del 6502
, pero se pueden reemplazar esos casos por un BRK
(por ejemplo), que sí es válido para el ensamblador.
Por supuesto todo el desarrollo se hace en una máquina normal, y luego se integra con el sistema operativo del microcomputador para la prueba final
.
Esto significa que ya puedo programar mi microcomputador sin la ayuda de un compilador cruzado ejecutándose en otra máquina :). Aquí hay un vídeo de ejemplo (en el que cometo un error; ya he corregido el ensamblador para que detecte esos despistes y muestre un mensaje de error).
Al final el entorno permite el comando list
para leer memoria y mostrar el desendamblado (opcionalmente admite una posición de memoria), y as
para ensamblar (que nuevamente permite indicar una posición de memoria).
La funcionalidad del ensamblador es bastante básica, pero proporciona lo que podemos esperar de un ensamblador para el 6502
(#
para valores inmediatos, $
como prefijo para números hexadecimales, etc).
Además soporta la entrada de cadenas de texto y bytes arbitrarios usando el operador
punto, con el ejemplo del vídeo:
as 1b00 1b00: ."Hello world!", $0a, 0 Ok
Lo que almacena la cadena de texto y los dos bytes que le siguen en la posición de memoria 0x1b00
.
Desde luego es bastante rudimentario, porque solo se puede introducir linea a linea y no soporta etiquetas o comentarios, pero creo que es suficiente para poder escribir programas sin ayuda externa ;).
Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.