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

9 comentarios en «Un primer programa en ensamblador para el Commodore 64»

  1. Hola:
    Estoy intentando seguir el libro, he instalado las últimas versiones vice el la version 3.4 no trae x64.exe elegí x64sc.exe.
    La version de CBM es la 3.14.0 sin embargo al presionar control-F5, no se carga el programa me fije en el directorio de proyecto y no se crea un archivo con extension d64 como esperaba. ¿Alguna sugerencia?

    Me gusta

  2. Hola, Pablo.

    El libro lo escribí sobre las versiones 3.2 de VICE y 3.13 de CBM prg Studio (ver https://programacion-retro-c64.blog/2018/11/01/el-equipo/). Todo debería funcionar más o menos igual en versiones posteriores de estas herramientas, puesto que al final no deja de ser programación en ensamblador para el 6502/6510 y el C64, que son equipos que no han cambiado desde primeros de los 80.

    Ahora bien, ya sabes cómo es la informática, te cambian la versión de Word y esa opción que usabas siempre ya no está donde esperabas 😉 . Si no quieres tener sorpresas e ir sobre terreno seguro una opción es bajarte las versiones 3.2 de VICE y 3.13 de CBM prg Studio y trabajar con ellas.

    Por ejemplo, he leído que el editor de pantallas de CBM prg Studio 3.14 no es compatible con versiones anteriores. Puedes verlo aquí: «Note: In this version, screens saved from the screen designer are not compatible with previous versions of CBM prg Studio» (http://www.ajordison.co.uk/download.html).

    Bueno, me he bajado las versiones 3.4 de VICE y 3.14 de CBM prg Studio y he hecho un par de pruebas. Creo que VICE ha cambiado bastante más que CBM prg Studio. Efectivamente, ahora el emulador de C64 es el programa x64sc.exe.

    Lo que es muy importante es que este programa lo configures en Tools > Options > Emulator Control > Emulator and path. De este modo le indicas a CBM prg Studio dónde está tu emulador (ver https://programacion-retro-c64.blog/2018/11/02/instalacion-y-configuracion-de-cbm-prg-studio/).

    Yo he seguido estos pasos, he programado un «Hello World» en ensamblador, he pulsado Control + F5 (también vale Build > Project > And run) y sí se me carga y ejecuta el programa en VICE 3.4, si bien antes se me abre un «Assembly dump» (un volcado del código máquina que ha generado el ensamblador).

    Por cierto, el archivo que genera en el directorio del proyecto no es helloworld.prg, como antes, sino que ahora es auto.prg.

    En fin… ¡¡hasta las cosas del C64 cambian!! 🙂

    Saludos, HVSW.

    Me gusta

    1. Por cierto, durante los últimos días he probado bastantes programas con VICE 3.4, tanto propios como ajenos (incluso muchos clásicos). Me da la sensación de que esta versión se la pega bastante, desde luego bastante más que las versiones 3.2 y 3.1.

      Bueno, supongo que será la novedad y los muchos cambios. Seguro que con el tiempo y el uso corrigirán los errores.

      Un saludo, HVSW.

      Me gusta

  3. Para el problema del autolaunch en el vice resulta que al compilar genera auto.prg mientras que al pasarle los parámetros al vice intenta lanzar en «nombreproyecto.prg» y claro no lo encuentra.

    Hay que ir a «Project-> Properties» y en el campo «executable» poner auto.prg

    Y ya funcionará.

    Otra curiosidad es que cuando añades el Prog01.asm da un error indeterminado sin pista alguna al compilar que se soluciona creando tú un amsn y haciendo copy&paste del Prog01.asm. Ni idea de por qué.

    PD: ¡Gracias por este curso, estoy empezándolo y me compré tus dos libros!

    Me gusta

    1. Hola.

      El primer libro se publicó en junio de 2019 y el segundo en diciembre de 2019. Se escribieron específicamente para CBM prg Studio 3.13 y para VICE 3.2.

      Desde entonces, y hace ya casi 2 años, han salido varias versiones nuevas de CBM prg Studio y VICE. Y no siempre son totalmente compatibles con las anteriores.

      El ensamblador del 6502/6510 lógicamente hace décadas que no cambia, y el mapa de memoria y características del C64 tampoco. Pero las sucesivas versiones de CBM prg Studio y VICE sí han metido pequeños cambios. Esto puede hacer que hagan falta pequeñas adaptaciones en la configuración estas herramientas, en las directivas del macroensamblador, en la definición y configuración de los proyectos (ficheros *.cbmprj), etc.

      Además, en el primer libro pensé que los lectores querrían usar el macroensamblador de su elección, no necesariamente CBM prg Studio, por lo que no incluí los ficheros *.cbmprj en los ficheros ZIP a descargar (sólo los *.asm y otros recursos). Sin embargo, en el segundo libro ya sí los incluí los *.cbmprj.

      En general, ya digo, con pequeñas adaptaciones en la configuración de las herramientas, en la definición de los proyectos (ej. orden de los ficheros *.asm al ensamblar), etc., todo se resuelve sin problema.

      Y si no aquí estamos para intentar ayudar.

      ¡¡Que disfrutes los libros!!

      HVSW.

      Me gusta

  4. Estoy intentando probar el programa con CBM prg Studio 3.14.0. Bajo el comprimido, descomprimo y simplmente lo añado al proyecto y me dice que hay un error de Pre-procesador. ¿A qué puede ser debido esto?

    Me gusta

Deja un comentario