Bajo un océano de bits, mes XVII

Por Javier Albizu, 15 Mayo, 2019
Este mes ha sido entretenido a la par que ilustrativo en lo referente a este reto. Pero no lo ha sido porque haya avanzado demasiado en el terreno de la programación, sino porque mi tiempo se ha centrado mayormente en buscar, probar y conocer las herramientas que se encuentran a mi disposición si quiero programar cosicas para el Commodore desde un entorno con arquitectura x86.

Podríamos decir que este mes se lo hemos dedicado a entender un poco mejor el legado de los chicos de Commodore Bussiness Machines1.

Un vez hecha esta introducción, vamos al turrón.

¿Qué herramientas tenemos a nuestra disposición?

Pues depende.

Si queremos programar en BASIC para el C642 la cosa es bien sencilla. Basta con tener el VICE y utilizar su “petcat” sobre cualquier archivo de texto plano en el que hayas introducido las líneas de código. Con esto te generará un archivo .prg que reconozca el emulador.
De premio, utilizando su comando c1541 puedes meter eso dentro de una imagen de disco .d64.
Es algo tan sencillo que ha sido lo que más me ha costado encontrar. Porque la Internet es asín.

También tenemos la opción de ejecutar “nativamente” en Linux o Windows comandos del BASIC de Commodore con CBM Basic, pero no tienes la posibilidad de usar pokes o sprites por hardware. Cosas de los sistemas operativos modernos

Si queremos ir al ensamblador3 el abanico se amplia. Sólo mirando las herramientas que aparecen en 6502.org la cosa puede llegar a ser abrumadora. Si ya vas a los foros de Lemon 64 o Commodoremania puedes perder un par de vidas tratando de hacer la criba.

Al final el tema de los ensabladores lo he dejado reducido a dos; ACME y CC65.
El primero por el nombre y porque he visto que hay varios tutoriales sobre él, y el segundo porque se encuentra en los repositorios de Ubuntu. Lo que ha terminado por decantar mi criba por ambos ha sido que existen resaltadores de sintaxis de los dos para VIM.

Si la gente no quiere liarse a “compilar el compilador de ensamblador” se puede descargar Kick Assembler, que está hecho en Java y le serviría para cualquier sistema operativo sin liarse demasiado la manta a la cabeza.
En caso de que busque algo aún más sencillo, también podría decantarse por alguno de los IDEs5 que tiene a su disposición por ahí.

Relaunch está hecho en Java, así que funcionaría tanto en Linux como en Windows o en Mac, y tanto C64 Studio como Kickass IDE funciona bajo Wine, así que tendría la papeleta solucionada en lo que respecta a cualquiera de los sistemas operativos mayoritarios sin necesidad de tener que compilar nada.
Eso sí, Relaunch no trae compilador “de serie”, pero lo puedes arrejuntar con Kick Assembler y asunto resuelto.

Porque la compilación. Vaya movida.
Si hay algo que me ha quedado claro últimamente es que no sólo tienes que aprender a programar en un lenguaje. Tienes que hacerlo pensando en el compilador que utilizarás y la arquitectura del procesador. De acuerdo a lo que he podido entender (seguramente de manera errónea) durante estas “investigación” esto es algo especialmente sensible en el caso de los compiladores cruzados.

He bajado el código fuente de distintos juegos escritos en ensamblador para el C64 y cada uno sólo puede ser compilado con la herramienta para la que fue pensado. Amigüitos, no intentéis compilar algo hecho para ACME con CC65. Y no intentéis compilar nada de CBM Prg Studio con otro ensamblador.

Pasamos a la caza de bichos6 y la cosa se complica un poco más.
Vice tenía un compilador bastante apañado en su versión 3.1 para Windows (y sólo en esa), pero desapareció en la 3.3 (la última que ha salido), donde sólo ha quedado el Monitor que te permite consultar y modificar la memoria y registros desde la línea de comandos.

Si queremos tirar de herramientas gráficas, WinVICE 3.1 funcionan bajo Wine y sigue estando disponible para su, así que por ahí podríamos tener la cosa apañada, pero también existen otras alternativas.

C64 debugger tiene versión nativa tanto para Linux como para Windows y Mac, así que mejor os ahorráis el tratar de compilarlo desde su código fuente (yo no he sido capaz). De cualquier manera, lo que aparece en pantalla nada más arrancar es tan colorido y movido que asusta.

Step 6502 sólo está para Windows, pero funciona bajo Wine, así que se puede usar sin problemas en Linux. Por lo poco que lo he tocado me ha parecido un poco… especial. Hasta donde he podido entender, arranca un emulador en blanco y en estado de pausa. Eres tú quien se dedica a meter a mano los valores hexadecimales en memoria y a avanzar “paso a paso” los ciclos del reloj. Para los muy cafeteros.

Por lo que he podido leer de Vice PDB Monitor la cosa parece interesante, pero ni he conseguido compilarlo ni he logrado que funcione su binario en Windows, así que igual toca investigar un poco más.

Como herramientas para realizar distintas operaciones7 como pueda ser hacer gráficos y caracteres o gestionar el contenido de los archivos ,d64 tendríamos SpritePad, Vchar 64 y Droid D64. Las dos primeras sólo están dispobibles para Windows pero funcionan a la perfección en Wine y la tercera está hecha en Java, así que hasta ahí tendríamos la papeleta solucionada en Linux.
Más allá de esto SpritePad, entre otras cosas, también te permite extraer los gráficos de un snapshot de VICE y Droid D64 te permite desensamblar el contenido de los discos y verlo en formato hexadecimal o ensamblador.
Un par de joyicas ambos dos.

Si eres un usuario de Mac no preocuparse, porque ahí está Actraiser y su Dustlayer8. Este señor han preparado un entorno de desarrollo para la máquina de la manzanita y, de premio tienen varios tutoriales de ensamblador con ACME.

En lo referente al aprendizaje9 también tenemos bastante en lo que rascar más allá de Dustlayer, y a ese respecto CodeBase 64 promete especialmente.

Y con esto creo que terminaríamos este pequeño repaso. Ando tentado de meterme a hacer el equivalente a una CPCtelera para el Commodore con todo lo que he ido encontrando, pero aún estoy über verde como para meterme en un embolado de ese calibre. Tiempo al tiempo.

Más allá del mundo Commodore, este mes también he seguido viendo vídeo a cholón.
Por un lado, he terminado con los de teoría de redes de Ben Eater10 que comencé el mes pasado y he seguido con los que tiene de electrónica. Lo mola todo, pero si quiero entender estas cosa de verdad tendré para un rato largo.
Por otro, y como no podía faltar, también he seguido con los de Fran Gallego11 como si no hubiera un mañana.

También he encontrado una lista de reproducción de “Matemáticas para desarrolladores de vídeo juegos”12 a la que le hincaré el diente… algún día.

Y, ahora sí, yo diría que ya habéis tenido suficiente por hoy.

Enlaces:

1. La famiglia
- Gracias por todo, Jack
- Chuck Peddle, father of the personalcomputer
- Bil Herd

2. Basic de C64 en x86
- The Versatile Commodore Emulator
- Compilando Basic de Commodore gracias a VICE
- Manual de petcat
- Manual de c1541
- CBM Basic GitHub

3. Ensablador de 6502 en x86
- Herramientas para C64 - 6502.org
- Acme GitHub
- Vim Acme GitHub
- CC65 GitHub
- Vim CC65 GitHub
- Kick Assembler

5. IDEs:
- Commodore IDE for Windows 32 and Linux
- K2 Devel
- C64 Kickass IDE
- Relaunch 64
- Info en C64 Wiki
- Unity 8 Bits
- C64 Studio
- CBM Prg Studio
- C64 Kickass IDE

6. Debug de C64 en x86
- Using the Vice monitor
- C64 Debugger
- Step 6502 GitHub
- Step 6502 en CSDB
- Vice PDB Monitor GitHub
- Vice PDB Monitor en CSDB
- Debugging 6502 assembly doesn’t have to be awful

7. Más herramientas
- Sprites con SpritePad
- Droid D64
- VChar 64 en GitHub
- VChar 64en CSDB

8. Dustlayer

9. Más tutoriales
- CodeBase 64
-
C64 Brain
- A full C64 game in 2013
- The bear essentials developing a Commodore 64 game

10. Más Ben Eater

Terminamos lo de las redes
- Networking tutorial 08 of 13 - The Internet Protocol
- Networking tutorial 09 of 13 - ARP: Mapping between IP and Ethernet
- Networking tutorial 10 of 13 - Looking at ARP and ping packets
- Networking tutorial 11 of 13 - Hop-by-hop routing
- Networking tutorial 12 of 13 - TCP: Transmission control protocol
- Networking tutorial 13 of 13 - TCP connection walkthrough

Electrónica y semiconductores
- Digital electronics tutorial
- How semiconductors work
- Stepping through a program on the 8-bit breadboard computer
- Comparing C to machine language
- Programming Fibonacci on a breadboard computer
- Building an 8-bit breadboard computer

11. Más Profedor Retromán

Ensamblador Z80
- Cargadores de Casete Propios
- Creando un Micro-GameEngine 1
- Creando un Micro-GameEngine 2
- Entidades con comportamientos variables
- Controlando un personaje con teclado
- Múltiples ficheros fuente, includes, símbolos globales y macros

C++
- C++ - Rvalue references, move constructor & move assignment operator

General
- Replanificación y entrega de producto
- ¿Por qué enseñar a programar en ensamblador?
- Clases de Teoría de Matemáticas

12. Math for Game Developers

El contenido de este campo se mantiene privado y no se mostrará públicamente.

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.