Un primer programa en ensamblador para el Commodore 64

Según los objetivos esbozados en la entrada “Objetivos”, lo primero sería revisar el hardware del Commodore 64. No obstante, dado que acabamos de instalar y configurar el emulador VICE y el entorno de desarrollo CBM prg Studio, lo primero que vamos a hacer es una pequeña demostración de un programa sencillo en ensamblador.

El programa va a pintar la cadena “PROGRAMACION RETRO DEL COMMODORE 64” en la primera línea de la pantalla.

El proceso para programarlo y probarlo es como sigue:

  • Ejecutar CBM prg Studio.
  • Crear un nuevo proyecto, elegir la máquina C64, y darle un nombre al proyecto.
  • En el explorador del proyecto, crear un fichero en ensamblador llamado Prog01.asm. Esto se hace con el botón derecho del ratón y añadir nuevo fichero.
  • Ahora queda hacer el programa, ensamblarlo y probarlo.

El programa es algo tan sencillo como lo que sigue (el ; sirve para marcar los comentarios):

Prog01

En resumen:

  • Con * = $c000 se indica que la dirección de carga del programa es $c000 (hexadecimal), que en decimal es 49152.
  • “pantalla” es una constante que vale $0400 (hexadecimal), es decir, 1024. Esa posición de memoria es el comienzo de la RAM de pantalla. Cuando el ensamblador ensambla el programa, sustituye las constantes por su valor. Las constantes no ocupan memoria del C64.
  • “prog01”, “bucle”, “fin” y “cadena” son etiquetas. Las etiquetas representan posiciones de memoria del C64. Por ejemplo, “prog01” en este caso vale $c000 o 49152. Y siempre es más cómodo y flexible utilizar etiquetas antes que posiciones de memoria propiamente dichas. Te permiten reubicar el código en otra zona de memoria y que siga funcionando sin mayores modificaciones. Nuevamente, el ensamblador las sustituye por su valor al ensamblar.
  • “ldx”, “lda”, “beq”, “sta”, “inx”, “jmp” y “rts” son instrucciones en ensamblador del microprocesador 6510. De momento, con entender los comentarios a su derecha es suficiente.
  • Todo lo que va a la derecha de un ; es un comentario.
  • “text” y “byte” son tipos de datos del ensamblador. Sirven para definir variables, es decir, posiciones de memoria del C64 con una información almacenada. En este caso, hay dos cadenas de texto de 40 caracteres cada una (el ancho de pantalla del C64 es de 40 caracteres) y un byte 0 que sirve para marcar el final.

Y el algoritmo es bien sencillo:

  • Se inicializa el registro X a cero. Este registro funcionará como índice para recorrer las dos líneas de texto.
  • Se carga el carácter X-esimo en el acumulador.
  • Si el carácter cargado es 0, se salta al final.
  • Si el carácter cargado no es 0, se imprime en la pantalla.
  • Se incrementa el registro X, es decir, el índice.
  • Se continúa con el bucle hasta el final.

De momento, no estará muy claro qué son el acumulador o el registro X, pero lo iremos viendo. Valga el ejemplo para hacernos una idea de cómo es un programa sencillo en ensamblador.

Bueno, después de escribir el programa hay que ensamblarlo, corregir errores, y ejecutarlo. En este caso podemos hacerlo del tirón con Control + F5. Si todo está bien, se cargará el emulador y dentro de éste el programa:

Prog01-emulador

Por último, se puede ejecutar el programa con la sentencia BASIC SYS 49152, que es la posición de memoria en que se ha cargado el programa. El resultado es:

Prog01-ejecucion

Como se puede observar, las dos primeras líneas de la pantalla se han modificado con el contenido esperado.

Bueno, algo sencillo pero suficiente para hacerse una idea de cómo es un programa en ensamblador, cómo programarlo, ensamblarlo, y ejecutarlo en el emulador.


Programa de ejemplo: Prog01

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s