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

3 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

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