Manual · 7

C para cartuchos ELF

Los cartuchos ELF tienen un procesador ARM que ejecuta un programa en C y le da al 2600 sus instrucciones según las va pidiendo. VCSIDE trae una plantilla que sigue las reglas que necesitan estos cartuchos, y las comprueba tras cada compilación.

Qué se ejecuta dónde

El juego se escribe en C y se compila para el ARM del cartucho (un Cortex-M0) con arm-none-eabi-gcc. Durante las líneas visibles, el ARM entrega al 6507 cada instrucción que ejecuta, a través de una biblioteca que proporciona el cargador del cartucho. Durante el overblank, el 6507 ejecuta la sincronía vertical, el borrado vertical y el overscan con un programa pequeño propio, y el ARM queda libre para la lógica del juego.

La ROM, build/<nombre>.bin, es un archivo ELF reubicable. Funciona en Stella y Gopher2600 y en el PlusCart y el UnoCart. Para el Chameleon Cart se enlaza con el firmware de ese cartucho.

La plantilla ELF abierta en VCSIDE, con su código en C y el panel de espacio
La plantilla ELF: un arcoíris que se desplaza con una barra que se mueve con el joystick.

La plantilla

Un proyecto nuevo de C para ELF tiene:

ArchivoQué es
MakefileCompila la ROM con las opciones que necesitan estos cartuchos y comprueba el resultado.
include/vcsLib.hLos registros del TIA y el RIOT y las funciones del cargador.
src/main.cEl juego. El ejemplo dibuja un arcoíris que se desplaza, y vuelve al menú con RESET en un multicartucho.
src/trampolines.SLlamadas largas al cargador, y a memcpy y memset.
chameleon/support.cLo que añade la compilación para el Chameleon Cart.

La plantilla es CC0. También puedes empezar con el ejemplo del sprite animado, con el mismo hero.vcsgfx que el de ensamblador y su src/hero.gfx.h. Mira qué escribe al guardar.

Las reglas que sigue

Tras enlazar, el Makefile comprueba el resultado:

Compilar y errores

F7 ejecuta el build_command del proyecto, make. Las carpetas de la cadena de herramientas Arm y de Make se ponen al principio de su PATH, ya que un programa abierto desde el escritorio no tiene el del shell.

Todo va a Problemas: los errores de gcc en su línea, los mensajes sin línea, los de ld (una referencia sin definir con la función que la hace, una región que se desborda), las comprobaciones anteriores y los errores del propio make.

Para el Chameleon Cart:

make chameleon CHAMELEON_FW=<folder of the Chameleon Cart's template>

La plantilla del firmware del Chameleon Cart no se incluye con VCSIDE.

Espacio

El informe de espacio lee el archivo ELF: código, código en RAM, constantes y variables, y la memoria del cartucho elegido para el proyecto: la flash y la RAM del Chameleon Cart, o la RAM del PlusCart y el UnoCart.

Ejecutar y depurar

F5 ejecuta la ROM en Stella o Gopher2600 como cartucho ELF. Ninguno de los dos emuladores puede parar en una línea de C, así que los puntos de ruptura no se pasan. Las opciones del emulador incluyen las comprobaciones del ARM para ELF.