23.8.10

Tutorial de instalación de entorno de desarrollo en lenguaje C paraCommodore 64, usando CC65 y WinVICE sobre Windows XP/7

El motivo de este tutorial es instalar un entorno básico de desarrollo en lenguaje C para crear aplicaciones de Commodore 64 bajo Windows, con las siguientes características:
  • WinVICE: emulador de Commodore
  • CC65: compilador C para 6502
  • Plataforma Windows XP/7

Mi intención es tener todo el entorno en formato "portable" (recomiendo la web Portable Apps para obtener programas portables), o sea que no dependa de instalar aplicaciones y que sea fácilmente portable de un ordenador a otro, por ejemplo en una memoria USB o como en mi caso, usando la aplicación de almacenamiento online y sincronización automática Dropbox.


La estructura de carpetas que utilizaré será esta:


Básicamente en /programas irá el emulador WinVICE y el compilador CC65 y luego en /proyectos/c64estarán los archivos del "Hola mundo"

Teniendo en cuenta este árbol, cada uno puede usarla tal cual o adaptarla a su forma de trabajo, reemplazando por ejemplo la unidad D:\ por la C:\, etc.

Comencemos con el tutorial...

1) Descargar el emulador de Commodore WinVICE


WinVICE es un emulador Open Source que permite emular los sistemas de Commodore C16, C64, C128, C64DTV, VIC20, PLUS4, CBM-II y Pet.

Hay versiones disponibles para todo tipo de sistemas: Windows, DOS, GNU/Linux, etc.

La versión que voy a usar es la MS-Windows 32bit (Pentium-optimized) que se puede descargar desde aquí: WinVICE-2.2-x86.zip.



2) Instalar el emulador de Commodore WinVICE en Windows XP/7

En mi caso tengo una carpeta donde voy "instalando" todos los programas portables y como este tema de Commodore 64 me interesa que esté accesible desde varios ordenadores, instalaré todo en la carpeta \programas de Dropbox, en mi caso la carpeta donde descomprimo el WinVICE esD:\documentos\My Dropbox\programas\WinVICE\

Luego lo que hay que hacer es asociar los archivos .PRG, .D64, .T64, etc. al emulador. Por ejemplo pinchando con el botón derecho sobre un archivo .PRG y eligiendo Abrir con... > Examinar, navegar por el disco ir hasta la carpeta del emulador y seleccionar x64.exe

Consejo útil: cuando se hace lío con estas asociaciones lo mejor es pasar el CCleaner con la opción de "Limpiar el Registro de Windows", repetir el proceso varias veces hasta que no muestre más errores. Una guía sobre este tema: Asociar un tipo de archivo a un Programa determinado


3) Descargar CC65, el compilador de C para 6502



CC65 es un completo compilador cruzado de C para Windows y GNU/Linux que permite compilar código para varias plataformas basadas en el procesador 65(C)02, como los Commodore 16, 64, 128, CBM510, CBM610, PET, PLUS4, VIC20, GEOS, Atari 400/800/65XE/130XE/800XL/1200XL/5200 y Apple ][.

Incluye un potente macro ensamblador, un compilador de C, un enlazador (linker), librerías y varias otras herramientas. La licencia de este software es Open Source.

La opción más fácil (pero no la que usaré) es descargar el instalador (cc65-2.13.2-1.exe) e instalarlo directamente, una de las ventajas de hacerlo así es que se auto-configuran todas las variables de entorno de forma automática y quizás para empezar sea mejor, pero yo me voy a centrar en la opción portable, que tiene más pasos pero todo queda donde uno quiere, como uno quiere, sin ensuciar el sistema (el registro) y además nos permite la libertad de compartir nuestro entorno entre varios ordenadores.

Enlaces para descargar los archivos de la versión portable:
- Compilador CC65: cc65-win32-2.13.2-1.zip
- Librerías CC65 para la plataforma Commodore 64: cc65-c64-2.13.2-1.zip

Sección de descargas de CC65:



4) Instalación de CC65, compilador de C para 6502

En caso de instalar la versión autoinstalable se puede saltar directamente al punto 6.

Descomprimir el compilador (archivo cc65-win32-2.13.2-1.zip) en la carpeta D:\documentos\My Dropbox\programas\cc65.

Luego descomprimir cc65-c64-2.13.2-1.zip en la misma carpeta.

El resultado final debería ser así:



5) Crear un "makefile"

Me he creado un simple archivo .BAT para compilar, enlazar las librerías, archivos externos, crear un ejecutable y mostrarlo llamando al emulador de Commodore 64, todo en un solo paso.


Editor de código fuente: Mención especial merecen los editores de código fuente, la herramienta de programación base, personalmente uso el Notepad++ (en su versión portable), es un editor liviano que me resulta muy cómodo, permite agregar plugins, reconoce el lenguaje Ensamblador y C (además de muchos otros que uso a diario, como PHP, HTML, CSS, Javascript, SQL, Flash ActionScript, etc.) Seguramente el tipo de editor sea algo personal y cada uno prefiera uno distinto, por ejemplo el Crimson Editor también parece ser una buena opción.

Bibliografía sobre el tema: cc65:project setup.

Archivo /proyectos/c64/holamundo.bat
@ECHO OFF

REM ### INICIO ZONA DE CONFIGURACION ###
REM moverse a la carpeta donde se encuentran nuestros archivos fuente
D:
CD \
CD documentos\My Dropbox\proyectos\c64\

REM nombre del archivo C a compilar (sin la extension)
SET NOMBRE=holamundo

REM la libreria a incluir
SET LIBRERIAS=text.s

REM ruta a la carpeta de CC65
SET CC65_HOME=D:\documentos\My Dropbox\programas\cc65\

REM ruta al emulador
SET EMULADOR="D:\documentos\My Dropbox\programas\WinVICE\x64.exe"

REM ### FIN ZONA DE CONFIGURACION ###

PATH %CC65_HOME%bin

REM cl65 -t c64 -l Walker.asm -o walker_nocomp.prg Walker.c
cl65 -t c64 -l -L %CC65%lib -o %NOMBRE%.prg %NOMBRE%.c %LIBRERIAS%

REM borrar el archivo objeto generado al compilar
DEL *.o

REM borrar el archivo assembler generado al compilar
DEL *.lst

REM comprimir el resultado (opcional)
REM exomizer -o walker.prg -s sys walker_nocomp.prg

REM ejecutar el juego compilado
%EMULADOR% %NOMBRE%.prg

COLOR 30
ECHO *** TERMINADO ***

REM PAUSE


6) Crear un "Hola mundo!" en C para Commodore 64

Bibliografía, dos enlaces a la documentación en CC65 que pueden ser muy interesantes:
- cc65:hello_world
- cc65:overview

Crear archivo de texto /proyectos/c64/holamundo.c
#include <stdio.h>
#include <stdlib.h>

/* declarar texto como variable externa en text.s */
extern const char texto[];
int main (void)
{
 printf ("%s\n", texto);
 return EXIT_SUCCESS;
}

Crear archivo de texto /proyectos/c64/text.s
.export _texto
_texto: .asciiz "Hola mundo!!"


Y si todo ha ido bien al ejecutar holamundo.bat se cargará de forma automática el emulador mostrándonos la característica pantalla azul de C64 (no la de Windows jeje) con nuestro "Hola mundo!", así que ¡¡bienvenido al mundo de Commodore 64 y los 8 bits!!


También veremos en la carpeta de nuestro proyecto que se ha creado un archivo de nombreholamundo.prg, que es el programa listo para funcionar desde Commodore 64.

La estructura de carpetas y archivos quedaría así:




7) Y mucho más 
  • Mi "makefile" es muy básico, seguro que se puede mejorar muchísimo y ademas me imagino que habrá otras maneras de hacerlos.
  • CC65 ofrece muchas posibilidades, entre ellas las de compilar código para otras plataformas basadas en el procesador 6502.
  • También se puede obtener el código assembler generado a partir del fuente C, que resulta muy interesante para ver y curiosear.
  • Recomiendo explorar la web de CC65 donde hay bastante información aunque a veces resulta un poco "mareante" 
  • Sobre el lenguaje C, al comenzar con este tema nunca había programado en C, así que he usado algunas paginas de consulta que me fueron muy útiles para dar mis primeros pasos, por ejemplo C con Clase.

He creado este tutorial pensando en la guía que me hubiera gustado encontrar cuando dí mis primeros pasos en este tema, espero que resulte útil para otras personas que quieran meterse en la programación retro y no sepan cómo hacerlo.

Finalmente, he preparado un archivo comprimido con todos los archivos del tutorial para descargar y descomprimir en un sólo paso, se puede descargar desde aquí: CC65 + WinVICE + holamundo.c + makefile.bat.

Agradecería que me aviséis de cualquier fallo o problema que noteis.