Header files específicos para máquinas de Commodore: cbm.h y c64.h

Programación retro del Commodore 64

  • Programación retro del Commodore 64
  • “Programación Retro del Commodore 64” es un blog sobre el hardware, el sistema operativo, y la programación del Commodore 64. Y más específicamente sobre programación en ensamblador. Pretende ser un blog con información de calidad, y referencia en español de la programación retro de esta maravillosa máquina.
    • Mi blog
« Publicado el: 27/08/2022 »

Bueno, pero todo este rollo de los prototipos y los header files, que en el fondo es de C, ¿qué tiene que ver con nuestro querido C64 o el compilador cc65? Pues tiene que ver en que cc65 incorpora, además de muchos otros header files que son relativos a las librerías estándar de C, varios header files con prototipos de funciones y con constantes que son de interés en las máquinas Commodore, ya sea el C64 u otras.

cc65 también incluye header files de librerías para hacer entrada / salida por consola (conio.h), manejo de joystick (joystick.h), manejo de ratón (mouse.h), entrada / salida a disco (dio.h), gráficos (tgi.h), manejo de GEOS (geos.h), etc. Sin embargo, estos header otros files, aunque sin duda son muy útiles en un C64, no son objeto de esta entrada.

Por ello nos centramos ahora en cbm.h y c64.h:

Header file cbm.h:

El header file cbm.h es para todo tipo de máquinas Commodore. Y como todos los header files están en la ruta cc65\include.

Si analizamos su contenido vemos que tiene bastantes constantes, que son las instrucciones #define del preprocesador, y prototipos de funciones.

No es el objeto de esta entrada analizar todo el cbm.h en detalle, pero sí seleccionar algún ejemplo que sea fácil de entender y al que se le vea utilidad. Por ejemplo, se definen constantes para caracteres PETSCII que pueden ser de interés:

De este modo, el programador de C, en vez de tener que saber que el carácter PETSCII para “home”, que es el carácter que vale para llevar el cursor a la esquina superior izquierda de la pantalla, tiene el valor 19, llega con que en sus programas use el literal CH_HOME:

En ese listado echo en falta algunos caracteres clásicos de PETSCII, como 18 – RVS ON para activar el modo invertido, los caracteres que al imprimirse cambian el color de las letras, el 147 – CLR para borrar la pantalla, etc., pero estos siempre los puede añadir el programador como constantes propias.

En definitiva, muy útil…

Header file c64.h:

El header file c64.h también incluye definiciones muy útiles propias ya del C64. Por ejemplo, constantes para los colores, para el manejo del joystick, etc.

Pero lo más importante de todo, con diferencia, es que define estructuras de datos (structs en C) que, al estar vinculadas a las posiciones de memoria del VIC ($d000), SID ($d400) y CIAs ($dc00 y $dd00), permiten al programador acceder directamente desde C a esas posiciones de memoria y, por tanto, leer y/o alterar los registros del VIC, el SIC o los CIAs.

Dicho más claramente: si programamos en C para el C64 con cc65 y usamos esos structs del header file c64.h, podemos, directamente desde C, crear y manejar sprites, reproducir música, usar temporizadores, modificar el color del vídeo, etc.

¡¡Me quito el sombrero!!

Código de ejemplo: home