21 de Marzo, 2015

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 ;).

Anotación por Juan J. Martínez, clasificada en: avr, arduino.

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.

Algunas anotaciones relacionadas: