¡Qué “ojazos” tienes, Lara!

pcjeuxunderworld.jpg

Y nada más. Os dejo que os deleitéis con esta genial portada mientras yo sigo con mis vacaciones. Vamos, que sigo vivo, pero de vacaciones. Y bastante ocupadete intentando terminar la entrada para el concurso BASIC 2007 de Bytemaniacos. Cuando veáis los gráficos que se ha currao mi colega, maese Anjuel, lo váis a flipar 🙂 Este año está difícil (como todos), pero a ver si hay suerte y nos llevamos el gato al agua en la categoría libre. ¡Un saludo y felices fiestas!

Programación #9… El tema de las ROMs de IF2 sin chicha

Sin chicha porque no voy a mostrar nada más, sólo daros una especie de noticia o de update de lo que estoy haciendo, ya que aún no tengo nada sólido (o casi nada) y llevo muchos días sin actualizar por motivos de carga laboral.

El tema es que splib2 tenía sus tejemanejes de lectura/escritura en sus propias variables y había que tocarla un poco para poder adecuarla a su ejecución desde ROM. Por suerte, Alvin Albrecht es el tío más participativo que existe y me ha ayudado muchísimo, hasta el punto de indicarme qué tenía que cambiar específicamente y hacer pruebas él mismo para asegurarse de que todo funcionaba.

Así que, podemos decir que es posible crear juegos de IF2 con z88dk+splib2. Además, Alvin me ha comentado que sería muchísimo más fácil hacerlos con SP1 (a.k.a. “splib3“) en lugar de splib2.

El tema iba de mover cuatro estructuras tochas, separándolas de la biblioteca y considerándolas externas, para poder almacenarlas “aparte” en RAM. Estas estructuras son, básicamente, las que controlan el buffer: el display list, la lista de dirty chars, la localización en memoria de los tiles y una serie de listas empleadas en la actualización de la pantalla. Las estructuras creadas por sp_Initialize() por lo visto resultan ser de sólo lectura, por lo que pueden ir en ROM. El tema, por tanto, quedaría más o menos así:

en ROM:

$0000-$31FF nuestro programa.
$3200-$3FFF rotation tables

en RAM:

$4000-$5AFF VRAM, aunque estoy pensándome emplear el primer tercio ($4000-$47FF) para pila y tiestos.
$5B00-$6FFF libre para nuestros datos descomprimidos desde ROM o lo que sea.
$7000-$7FFF las cuatro estructuras de splib2 anteriormente mencionadas y nuestras globales.

Ahora mismo tengo toda esta información, sólo tengo que armarme el proyecto en condiciones y empezar a programar algo real y que se mueva. Cuando tenga algo tangible, os explicaré cómo montar todo el tema y eso y veréis que tampoco es tan coñazo… Sólo un poco laborioso la primera vez.

¡Deseadme suerte!

Y, en 2008…

8fpfsld.jpg

Grandes Juegos de LOKOsoft #21. La historia de CJMC

Buino, voy a volver un poco con los juegos por varias razones. La primera es que últimamente en el curro no me dejan espacio para hacer todo lo que tengo que hacer (principalmente, terminar Phantomasa R para PC), con lo que no me queda tiempo libre para seguir investigando lo de las ROMs para IF2 con z88dk+splib2 (y eso que estoy a las puertas de la prueba definitiva: linkar la splib2). La segunda es que el número de visitas ha descendido dramáticamente desde que me puse con la programación, así que entiendo que interesa muchísimo menos. Por esta y otras razones más de menos peso he decidido intentar compaginar contenidos de forma que haya de todo en la semana: juegos, programación, paranoias… Ya sé que esto lo dije antes y no lo cumplí, pero esta vez lo intentaré.

box1.jpg box2.jpg

Dicho esto, seguimos con las grandes glorias del pasado repasando un poco más la extensa e incompleta (por desgracia y por obra del tiempo extraviador de cintas) obra de LOKOsoft. El juego que nos ocupa hoy tiene una historia muy parecida a la de Phantomasa: se trata de algo que tenía pensado entonces pero que no fui capaz de desarrollar por falta de conocimientos, y que he terminado haciendo y publicando con CEZGS. Os hablo de CJMC, y además “a secas”, ya que Nanako no había nacido por aquellos entonces (es hija de Anju y un servidor y vino al mundo en 2006).

Leer más de esta entrada

Programación #8: Variables globales en RAM desde ROM generada con z88dk

Estos conocimientos los adquirí gracias al amigo Utopian, que lo resolvió para poder currarse ROMs de MSX desde z88dk, así que ya tenía el trabajo hecho :). Por tanto podéis agradecérselo a él, y esos altares que empezábais a construirme como Dios Supremo de las ROMs con z88dk me parece que se los merecerá él más que yo (encima, el target que él se ha currao para MSX es 200 veces más complejo y petón que el mío para Speccy). Lo que se explica aquí es realmente útil.

Básicamente vamos a explicar cómo instruir a z88dk (en concreto, al ensamblador que tiene por debajo) para que coloque las variables globales en RAM aunque compile todo el código en ROM. Para que os hagáis una idea, nada se crea realmente en el binario generado, símplemente se colocan los punteros a las variables en direcciones de RAM en lugar de reservar espacio en él.

Leer más de esta entrada

Programación #7: Creando una ROM de Spectrum con z88dk

Buenas. Lo siguiente dentro de la lista de hitos para conseguir hacer un juego para Interface 2 usando z88dk + splib2 viene a ser conseguir generar un archivo de ROM. Antes de meternos en verea, vamos a explicar unas cosillas. z88dk es un compilador multi-plataforma. El +zx que especificamos al compilar simplemente sirve para que se lea un archivos de configuración con código y parámetros específicos para el ZX Spectrum. Este archivo es lib/config/zx.cfg (lib/config/zx.lnx en linux). En este archivo, además de definirse qué reglas de optimización se emplearán y qué parámetros específicos necesita el compilador para generar un binario para Spectrum, se especifica el crt0 que se empleará. Un crt0 no es más que código de inicio. Básicamente se suele colocar la pila, preparar el sistema un poco, establecer el punto de entrada para ejecutar (dónde está main, vamos) y cosas así. El tema es que el crt0 para Spectrum no nos sirve ya que está preparado para programas que se ejecuten en RAM. En este capítulo crearemos nuestro propio archivo de configuración y nuestro propio crt0 para juegos en ROM, y al final escribiremos un programa pocho para probar que funciona todo. En el próximo capítulo veremos cómo colocar variables globales e intentaremos linkar contra splib2 (¡¡espero que no emplee código automodificable ni variables ni nada!!).

Leer más de esta entrada

Programación #6: Juego en ROM para Spectrum 16K usando z88dk+splib2

Pues sí, me ha picado el gusanillo con el concurso que anuncia Radastan para el año que viene. Se trata de hacer un juego que funcione como cartucho ROM del IF2 para Spectrum y que funcione en cualquier Spectrum de 16K. Eso significa que debe ser un juego que ocupe 16K (de $0000 a $3FFF, reemplazando a la ROM), y que tenemos aproximadamente unos 9K de RAM extra para hacer que se mueva (si le quitamos a los 16K del Spectrum 16K los 7K que ocupa la pantalla (VRAM) nos quedamos con 9K).

Esto implica importantes limitaciones (¡por si no tuviéramos ya bastantes!):

  • No podemos usar ninguna rutina de la ROM. Como el juego lo voy a hacer en C usando splib2 para todo, esto no es un problema.
  • Toda la RAM que tenemos está en la zona de la memoria en contienda (la ULA y la CPU se pelean por esta memoria y gana la ULA siempre), por lo que responderá más lentamente.
  • ¡Sólo! tenemos 9K de RAM para jugar, y aquí tendré que meter los aproximadamente 5K que ocupan las estructuras de la splib2, lo que nos deja con 4K para la pila y lo que pueda caber.

La idea es la siguiente: Colocar las estructuras de la splib2 y todas las variables en los 9K de RAM, configurar la splib2 para que ocupe lo justo en la pantalla (de las 24 lineas de carácteres) para que se tarde menos en actualizar el display, usar Orfeus para una musiquilla del menú (si cabe), tener el mapa comprimido en ROM y descomprimirlo en la RAM que quede libre para tener más sitio para código y gráficos y poco más.

En el momento de estar escribiendo estas lineas aún no tengo la seguridad de que lo que quiero hacer sea factible, así que tómate estos artículos más como un “cuaderno de bitácora” que como un “tutorial“, ya que los tutoriales se hacen, por lo general, cuando uno sabe cómo resolver los temas de los que trata, y este no es el caso. Veamos…

Leer más de esta entrada

Programación #5: Enemigos plataformeros en BASIC.

Continuando con los artículos de programación BASIC, seguimos con los enemigos. Ya tenemos completamente solucionado el movimiento de nuestro héroe, así que ahora toca proveerle de antagonistas que haga que el juego tenga algún aliciente.

ist2_2077314_evil_teacher.jpg

Además, lo vamos a hacer bien. Lo más fácil a la hora de ponerse a hacer un juego (y más en BASIC Spectrum) es liarse a hardcodear como locos. Lo ideal, sin embargo, es construir los motores de juego lo más generales que sea posible, de forma que toda la forma del juego (pantallas, objetos, enemigos …) puedan leerse de ristras de datos que el motor interprete. Así podremos reaprovechar partes del motor (o todo él, esto es muy divertido), obteniendo nuevos juegos en muy poco tiempo símplemente cambiando los datos.

Por tanto, vamos a crear un sistema de manejo de enemigos totalmente parametrizable y ampliable, en el que nos sea muy sencillo añadir nuevos patrones de movimiento o tipos de enemigos. Pasen y vean, señores.

Leer más de esta entrada