Bajo un océano de bits, mes XXII

Por Javier Albizu, 2 Octubre, 2019
El tiempo continúa transcurriendo y los ánimos se mantienen en un estado de incertidumbre. Estas han sido unas semanas de ver muchos vídeos y leer cosas, pero de picar código ha habido poco. Sigo con el cerebro un poco derretido y no me está dando para mucho.

En lo referente a la práctica activa de la programación, lo único que he hecho ha sido practicar un poco con algunas de las herramientas que disponía1 como son “Droid 64” y ” “petcat” para poder escribir el código en Basic del Commodore desde Linux y luego convertirlo ese texto en un binario que sea capaz de entender VICE.

Los primeros listados en Basic del manual de usuario los escribí hace unos meses directamente en el emulador, pero resultaba una labor bastante incómoda. Aun así, no tenía demasiada opción porque la exportación de los PRG a texto plano que hacía Droid 64 dejaban bastante que desear.

Por otro lado, a la hora de tratar de convertir los archivos de texto directamente a PRG con petcat aquello petaba por todos lados. Cuando trataba de listar el código en el emulador los caracteres que me mostraba no tenían demasiado que ver con los que había escrito. Así pues, al principio la cosa fue complicada. No sabía cómo escribir “desde fuera” las teclas especiales del C64 y eso me rompía el código. Aparte de eso, y al igual que me sucedió con Acme, hasta que no llegué a entender que tenía que escribir todo el código en minúsculas me retrasó bastante. Las mayúsculas no las interpretaba como la letra que yo veía, sino como el carácter especial que aparece en el Commodore cuando las combinas con el “Shift”.

Pero…
Tras extraer con Droid 64 el archivo PRG “en crudo” de uno de los discos virtuales de Commodore que había creado, y realizar la conversión de ese PRG a un archivo de texto con petcat la luz se “hació”

Convertir de Prg a Bas:
petcat -2 -o archivo_de_destino.bas -- archivo_de_origen.prg

Ahí pude ver que mnemónico tenía este programa para combinaciones de teclas como las de “CLR/HOME” del Commodore. Es más, bobo de mi, estaban todas documentadas en su página de ayuda. No sé cuántas veces había mirado ese documento hasta darme cuenta de que eso había estado ahí todo el rato.
En fin, una vez superado ese bache en mi comprensión lectora, la cosa ya fue mucho más sencilla. Es más, comprobé también que podía ahorrarme los mnemotécnicos de petcat utilizando las tablas de código ASCII que vienen en el manual del Commodore. Una vez hecho esto, para convertir un archivo de texto plano a Prg eran tan sencillo como ejecutar un:

petcat -wsimon -o archivo_de_destino.prg -- archivo_de_origen.bas

Pero claro, la cosa no podía quedar ahí y esto me llevó a mirar otra serie de cosas. Consultas basadas en gran medida en los vídeos de la Competición Basic vs C2.
Comprobé que, aunque el resultado en pantalla es idéntico, poner un “10 print "{clr}" no es lo mismo que escribir “10 print chr$(147)”. Al igual que sucede con el BASIC de CPC, el número de caracteres influye en lo que la memoria que va a ocupar el programa.

Emocionado de la vida ante aquel nimio avance, decidí hacer otra prueba loca. Nuevamente con Droid 64 exporté el PRG del Traz a código ensamblador y, tras hacer dos pequeños apaños, traté de compilarlo con Acme sin erótico resultado.
Aquel era el resultado esperado y, obviamente, ya desde antes era consciente de que aún me queda mucho por entender antes de lanzarme a desensamblar un programa, pero en ese punto fue en el que la cosa se volvió a descontrolar… una vez más.

Youtube es una mala influencia y, de vez en cuando, las sugerencias de sus algoritmos parecen acertar y recomendarte algo válido o, cuando menos, prometedor. Referencias que me hacen danzar de un lado a otro3 buscando “el método”. Un método que no voy a encontrar fuera pero que, ahora mismo, no tengo el nivel de concentración necesario para alcanzar por mi mismo.

Más allá de los recién llegados, los viejos conocidos4 continúan produciendo material. Lo nuevo de Ben Eater promete, y las entradas del blog “Programación Retro del Commodore 64” siguen un ritmo que no soy capaz de seguir (más aún cuando no he terminado con el libro original). Por el momento cada una de ellas va alimentando el documento de texto en el que las voy recopilando.
Como premio, con la llegada del nuevo curso, Fran Gallego ha empezado el curso con fuerza siempre con cosas interesantes.

Por su parte, Gamasutra me ha hecho conocer y amar a Jeff Vogel, mientras me mostraba que en Itch.io6 puedes agrupar los juegos por el motor que se ha utilizado para crearlos (teniendo algunos de ellos incluso enlaces al Github en el que se aloja su código).

En fin. Toca recomponerse, tratar de buscar el equilibrio y marcar una ruta que sea capaz de seguir.
En cuatro semanas te cuento si he sido capaz de hacer algo de eso.

Enlaces:

1. Herramientas para Basic
- Petcat es tu amigo
- Droid 64 no tanto

2. La guerra que acabará con todas las guerras
- Amstrad GameDev Challenge #05: BASIC vs C
- Amstrad GameDev Challenge #06: BASIC vs C. Especial RetroZaragoza En Vivo

3. One Lone Coder y más cosas que mirar para evitar ponerse a hacer
- Code-It-Yourself! Tetris - Programming from Scratch (Quick and Simple C++)
- NES Emulator Part #1: Bitwise Basics & Overview
- Learn 6502 Assembly Programming - Lesson1 : For absolute beginners!
- Ensamblador VASM
- VASM
- Retro Insectivores: Finding and Eliminating Bugs in NES Development

4. Los de siempre

Ben Eater
- “Hello, world” from scratch on a 6502

Programación Retro del Commodore 64
- Asteroids: movimiento sencillo de la nave
- Asteroids: movimiento de la nave con ángulo y velocidad
- Asteroids: nave con giros controlados
- Asteroids: eliminación de zonas ocultas
- Asteroids: información en la zona derecha de la pantalla
- Asteroids: disparos
-
Asteroids: disparos – rutinas accesorias
- Asteroids: disparos – algunas mejoras necesarias
- Asteroids: disparos – caracteres personalizados
- Asteroids: los asteroides
- Asteroids: los asteroides – un híbrido entre la nave y los disparos
- Asteroids: configuración y posicionamiento de los asteroides
- Asteroids: movimiento de los asteroides

El profe
- Instalación de CPCtelera 1.5 development branch
- Ejemplo básico: dibujar y mover un cuadrado con CPCtelera 1.5
- Introducción a la arquitectura Entity-Component-System (ECS)
- Arquitectura Entity-System: implementación básica inicial
- Arquitectura Entity-System: revisando la implementación inicial [#ASM #Z80]
- Ensamblador, linker, includes y símbolos globales [#ASM #Z80]
- Gestión automática con macros y constantes [#ASM #Z80]
- Creando Videojuegos: Iteraciones y Calidad de Producto
- Dudas, consejos y fé de erratas [#ASM #Z80]
- Entity-System (II): sistemas físico, input y render [#ASM #Z80]
- IA Básica: Árboles de Decisión y Niveles de Abstracción en Videojuegos [#ASM #Z80]
- Implementando el sistema de IA básico [#ASM #Z80]
- Entity-System (II): revisión y dudas [#ASM #Z80]
- Revisión del modelo de IA básica implementado [#ASM #Z80]

Dan Root
- The Animation of Metal Slug
- The Animation of Hollow Knight

GDC
- Beyond Framerate: Taming Your Timeslice Through Asynchrony
- How to Get a Job Writing for Games
- The Art of Wonder Boy: The Dragon's Trap

5. Jeff Vogel
- Why All My Games Look Like Crap
- I Am the Cheapest Bastard In Indie Games

6. Los motores y más
- Which are the most commonly used Game Engines?
- Juegos por "engine" en Itch.IO
- Spelunky HD en Itch.IO
- Spelunky HD en Github

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.