Creando juegos para Interface II

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Creando juegos para Interface II

Mensaje por zup » Vie Abr 04, 2014 9:03 am

Ivanzx escribió:Con este cartucho se podría jugar en cualquier Spectrum? Habria alguna limitación de memoria? Se podrían programar juegos normales o habría que adaptar algo? Como es que nadie ha salido antes con esta idea? :)


Respondiendo rápidamente... creo que el IF2 solo funcionaba bien en los 16 y 48k, y no estoy seguro de cómo se comporta con un 128k/+2. Desde luego, no funcionará correctamente en un +2A/+3.

La limitación (tradicional) es que el juego debe caber en 16k de código (el espacio de la ROM), pero esta limitación es solo para el código que va en el cartucho (distinción importante). Aunque Shadow of the Unicorn no es un juego estrictamente de IF2, sustituía los 16k de ROM por los suyos propios y además cargaba parte del juego desde cinta, con lo que se saltaba a la torera los 48k del Spectrum. También podrías comprimir un juego, meterlo a un cartucho y descomprimirlo a RAM para saltarte esos 16k. Por último, hay un montaje hardware que permite usar 32k para el juego.

La otra limitación es que pierdes todo lo que había en la ROM, así que tu juego no podrá usar esas rutinas. Si por algún motivo, necesitas algo de la ROM (p.ej.: la rutina de carga), tendrás que meterlo en el cartucho.

Si tuvieras un juego de 16k viable (=no usa la ROM, aunque esto en 16k puede ser complicado) y quisiera adaptarlo, tienes dos caminos. Uno es cambiar todos los saltos absolutos para que estén en el espacio de direcciones de la ROM, el otro es meter en el cartucho el juego tal cual y reubicarlo en RAM nada más arrancar el spectrum.

En cuanto a por qué no se utiliza, hay varios motivos:
- Los interfaces con ROM son los que más se pegan de leches entre ellos. Eso quiere decir que un IF2 se lleva a patadas con un divide, un MF3 y demás.
- Solo tienes compatibilidad garantizada en los 16k/48k (aunque luego lo puedes sacar en cinta para usarlo en +2A/+3).
- En su día, para jugar a esto necesitabas un IF2 (no lo tenía todo el mundo) y cartuchos. Teniendo en cuenta que el precio del cartucho era el triple que el de la cinta, te puedes imaginar la de cartuchos que se vendieron.

radastan escribió:¿Lo mete en pila? ¿qué bestia, no?


No es tan raro, al menos no en PCs. En los Turbo Pascal/Turbo C y otros compiladores, es muy normal meter los parámetros de una función dentro de la pila, y luego usar BP para acceder a estos parámetros. Traducido a Z80, copias SP a IX y usar IX+nn para acceder a las variables locales. Además, meter esas variables en la pila te garantiza que el espacio no estará asignado permanentemente.

radastan escribió:No será la panacea en lo gráfico, pero desde luego pueden salir cosas majas.


La forma más bestia de meter cosas en IF2 sería rellenar el cartucho con código comprimido y después descomprimirlo en RAM al arrancar el programa. De esta manera sería fácil tener más de 16k de código+datos, con lo que te cargas la compatibilidad con los 16k (pero dejas a todo el mundo boquiabierto).

La generación procedural sería otra gran opción, pero para ese tipo de burradas hace falta ser un genio.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando juegos para Interface II

Mensaje por radastan » Vie Abr 04, 2014 9:42 am

zup escribió:La forma más bestia de meter cosas en IF2 sería rellenar el cartucho con código comprimido y después descomprimirlo en RAM al arrancar el programa. De esta manera sería fácil tener más de 16k de código+datos, con lo que te cargas la compatibilidad con los 16k (pero dejas a todo el mundo boquiabierto).

La generación procedural sería otra gran opción, pero para ese tipo de burradas hace falta ser un genio.


Tampoco hace falta llegar a esos extremos, con programación inteligente y sin pretensiones absurdas se pueden hacer muy buenos juegos en 16Kb.

Vamos a ver como termina este primer intento y a partir de ahí voy mejorando.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Creando juegos para Interface II

Mensaje por jzx » Vie Abr 04, 2014 1:58 pm

O poner una parte comprimida (que se descomprima en los 16 k) y otra parte directamente ejecutable. Según lo que se comprima y cómo lo repartas podrías tener por decir algo 20 k de programa, 12 directamente en rom y 8 en ram, (si son gráficos por ejemplo que se comprimen más) y es compatible con spectrum 16 k. Tampoco es tan extremista, lo hacían algunos programas para 48 k en cinta para tardar menos en cargar.
Última edición por jzx el Vie Abr 04, 2014 2:00 pm, editado 1 vez en total.

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Creando juegos para Interface II

Mensaje por jzx » Vie Abr 04, 2014 1:59 pm

O poner una parte comprimida (que se descomprima en los 16 k) y otra parte directamente ejecutable. Según lo que se comprima y cómo lo repartas podrías tener por decir algo 20 k de programa, 12 directamente en rom y 8 en ram, (si son gráficos por ejemplo que se comprimen más) y es compatible con spectrum 16 k. Tampoco es tan extremista, lo hacían algunos programas para 48 k en cinta para tardar menos en cargar.

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Creando juegos para Interface II

Mensaje por flopping » Vie Abr 04, 2014 2:03 pm

radastan escribió:con programación inteligente y sin pretensiones absurdas se pueden hacer muy buenos juegos en 16Kb.

Vamos a ver como termina este primer intento y a partir de ahí voy mejorando.


Efectivamente, prueba de ello son juegos como el jetpac, pssst, deathchase, jumping jack y un largo etc...

Y existen algunas opciones mas, aunque en este caso, no es para juegos de 16k, si no, para juegos de 64K, que es la que he desarrollado yo, a medias con un compañero de foro, se trata de un interface de rom, tipo el shadow of unicorn, pero en este caso funciona de una forma algo diferente, os explico.

En primer lugar enchufamos el interface y al encender el ordenador, sustituimos los 16k de la rom por otra, con un codigo, que se autocopia en la ultima posicion de la memoria, en este caso de un 48K, en este codigo, hay una rutina que mira si la rom cambia de valores, si es asi, coge los siguientes 16K y los pone a continuacion y asi, hasta completar los 48k y quedandose con 16K mas en lugar de la rom, de esta forma podemos cargar un juego de 64K en un spectrum de 48K y sin necesidad de divide, cinta, disco etc....la carga es muy rapida poco mas de un segundo y bueno, es algo curioso el poder cargar juegos de mas de 48K, y encima a todo esto, el interface lleva una eprom o eeprom, que puede albergar hasta 16 juegos de 64K, y si ponemos un zocalo, podremos cambiar de eprom o eeprom, tantas veces como queramos, pudiendo tener varios juegos en, digamos "cartuchos de rom", ¿como veis la cosa?.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Creando juegos para Interface II

Mensaje por antoniovillena » Vie Abr 04, 2014 2:20 pm

La generación procedural está bien para demos PC de 4K pero en un spectrum es muy lenta, sino prueba a echar una partida a The Hobbit y verás. Todo lo que sea copiarse o descomprimirse a RAM sería desaprovechar la única ventaja que te provee un juego de cartucho: disponer de los 64K que direcciona el Z80 para tí.

Así que lo que te recomiendo es que tengas el código en ROM, si puedes usa TmxCompress para guardar el mapa comprimido, y si puedes también, utiliza algún mecanismo para empaquetar el resto de gráficos. Por ejemplo si necesitas sprites pre-rotados, usa una rutina que te genere las versiones rotadas partiendo del original. Y lo mismo para tablas lookups.
Imagen

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando juegos para Interface II

Mensaje por radastan » Vie Abr 04, 2014 4:59 pm

Para mi primer juego en Interface2 he minimizado rutinas al máximo y si el tiempo me lo permite usaré un sistema propio de mapeado bastante eficiente y que permite gráficos bonitos y mapa grande en poco espacio.

Como desconozco como va a salir dejo florituras como movimiento al pixel para próximos juegos, la idea es un juego apañado en cartucho en plan videoaventura.


Enviao con un esmarfón
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

jzx
Nonamed
Mensajes: 1047
Registrado: Lun Feb 08, 2010 8:19 pm

Re: Creando juegos para Interface II

Mensaje por jzx » Vie Abr 04, 2014 5:43 pm

antoniovillena escribió:Todo lo que sea copiarse o descomprimirse a RAM sería desaprovechar la única ventaja que te provee un juego de cartucho: disponer de los 64K que direcciona el Z80 para tí.



Bueno, lo de la compresión venía a cuento de que se había dicho que fuera compatible con spectrum de 16 k, que está bastante corto de memoria por la que ocupa el video. Con 48 k está más holgado, pero si descomprimes trozos tendrías una especie de disco rom. El cartucho no puede ocupar los 64 k porque la ram no se puede deshabilitar, es decir sólo tienes 16 k de programa, los 48 restantes si no descomprimes código sólo te valdrían para datos, precalcular gráficos etc. Que tampoco es una tontería.


flopping escribió:En primer lugar enchufamos el interface y al encender el ordenador, sustituimos los 16k de la rom por otra, con un codigo, que se autocopia en la ultima posicion de la memoria, en este caso de un 48K, en este codigo, hay una rutina que mira si la rom cambia de valores, si es asi, coge los siguientes 16K y los pone a continuacion y asi, hasta completar los 48k y quedandose con 16K mas en lugar de la rom


Entiendo que es una rom con varias páginas, entonces puedes ir cambiando de página y usar directamente la rom sin copiar a ram, pudiendo luego volver a otra página anterior o a la que sea. Más lioso, pero puedes tener más datos disponibles que los 64 k. Como hacen los 128, pero con más páginas de rom. A no ser que te refieras a meter juegos de cinta sin tener que rehacerlos.

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Creando juegos para Interface II

Mensaje por zup » Vie Abr 04, 2014 9:07 pm

radastan escribió:Tampoco hace falta llegar a esos extremos, con programación inteligente y sin pretensiones absurdas se pueden hacer muy buenos juegos en 16Kb.


Estaba pensando yo en la típica pretensión absurda... "a ver cuánto cabe". Un caso de hacer las cosas por que se puede, no porque sea lógico hacerlo así.

antoniovillena escribió:La generación procedural está bien para demos PC de 4K pero en un spectrum es muy lenta...


Bueno, depende de cuántas cosas quieras generar. Está por ahí [url=https://es.wikipedia.org/wiki/.kkrieger]una demo que era un FPS y ocupaba 93k. Si intentas generar esos datos en un Spectrum, te tirarías años. Por otra parte, Elite generaba las galaxias mediante procedimientos (o eso creo) y no le costaba tanto.

Como cosa intermedia, me pregunto si se podría hacer una especie de generador de pistas como el del Lotus III, que dándole unos pocos parámetros generaba rápidamente pistas diferentes (y corría en 8086). En mi opinión, si generas cosas entre pantalla y pantalla y no te tiras más de 10 segundos generando cosas, la generación procedural es viable y soportable.

antoniovillena escribió:Todo lo que sea copiarse o descomprimirse a RAM sería desaprovechar la única ventaja que te provee un juego de cartucho: disponer de los 64K que direcciona el Z80 para tí.


Discrepo en algunas cosas:
- La única ventaja del cartucho es la carga instantánea.
- Aprovechar los 64K implicaría tener datos o código interesante en los 48k de RAM... lo cual no suele ser el caso (excepción: Shadow of the Unicorn, pero ese no salió en cartucho para IF2 y cargaba el resto de cosas desde cinta, lo que anula la ventaja de la carga instantánea).
- Si quieres utilizar 64k por completo, la elección más lógica no es el IF2, sino un +2A/+3 en modo all RAM. Tienes tus 64k, tienes otros 64k donde guardar datos menos a mano y además en momentos concretos puedes paginar la ROM del Spectrum (por si quieres utilizar alguna rutina).

antoniovillena escribió:Así que lo que te recomiendo es que tengas el código en ROM, si puedes usa TmxCompress para guardar el mapa comprimido, y si puedes también, utiliza algún mecanismo para empaquetar el resto de gráficos. Por ejemplo si necesitas sprites pre-rotados, usa una rutina que te genere las versiones rotadas partiendo del original. Y lo mismo para tablas lookups.


...y así volvemos al concurso de quién puede apretar más cosas en un solo cartucho :lol: Esa era un poco la idea de comprimir y pregenerar, ver cuánto cabe. Alguien con más sentido común cargaría todo desde cinta o disco.

antoniovillena escribió:...


Bueno, si te pones a hacer un interface está claro que puedes hacer lo que quieras... y no te digo si le metes una flash de 4 megas. El tema es que ya estás desarrollando para cosas que no existían y quizás sea más complicado convencer a programadores de que desarrollen para tu aparato.

El tema del interface ROM multijuegos tampoco hay que inventarlo del todo... ya hay cartuchos para IF2 que tienen múltiples juegos y se pueden aprovechar. Me pregunto si en vez de rediseñar todo el interface, se podría implementar vuestra idea en el cartucho de Fruitcake.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Creando juegos para Interface II

Mensaje por radastan » Vie Abr 04, 2014 10:05 pm

Yo soy más partidario de usar cartuchos "con cabeza" y de forma realista.

En primer lugar es muy sencillo meter un juego en 16K sin necesitar compresión avanzada ni generar nada proceduralmente. Ese debe ser el primer camino que debe tomarse, y el que debemos promocionar. Es un comienzo sencillo.

En segundo lugar estaría bien indagar en un cartucho que pudiese paginarse desde programa, para así poder meter el contenido de un juego mucho más grande en él. Con eso podríamos meter perfectamente cosas como Brunilda o los juegos de los Mojon Twins sin problemas, con lo que ganamos un formato fiable, rápido, y duradero.

A partir de ahí inventaros lo que venga en gana, pero llevamos años con los cartuchos a nuestra disposición y todavía no les sacamos provecho. Es la hora.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Creando juegos para Interface II

Mensaje por antoniovillena » Sab Abr 05, 2014 2:48 am

Creo que no se me ha entendido bien. Cuando me refiero a usar los 64K digo 16K de código+gfx, 7K de video y 41K para buffers+tablas. En un juego normal dispones de 41K para todo, por lo que si usas 20K para código+gfx sólo te sobran 21K para buffers+tablas. A bote pronto parece que 16K no es nada comparado con 41K, pero ningún juego gasta los 41K en código+gfx, la cosa varía entre 20K y 30K. Con 4K de código y 12K para gfx hay espacio de sobra para hacer un juego relativamente completo, quizás algo limitado en niveles, pero que seguro que le da un buen repaso en velocidad a cualquier juego de cinta si se aprovecha bien la RAM sobrante.

El modo all RAM tiene la pega de la contención, que aparte de ser más lenta distorsiona los sonidos.

Creo que en el Spectrum está muy poco explotado el tema cartuchos, en el CPC están más avanzados, los que tengan la Megaflash ROM saben de lo que hablo.
Imagen

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Creando juegos para Interface II

Mensaje por zx81 » Sab Abr 05, 2014 11:26 am

antoniovillena escribió:Creo que no se me ha entendido bien. Cuando me refiero a usar los 64K digo 16K de código+gfx, 7K de video y 41K para buffers+tablas. En un juego normal dispones de 41K para todo, por lo que si usas 20K para código+gfx sólo te sobran 21K para buffers+tablas. A bote pronto parece que 16K no es nada comparado con 41K, pero ningún juego gasta los 41K en código+gfx, la cosa varía entre 20K y 30K. Con 4K de código y 12K para gfx hay espacio de sobra para hacer un juego relativamente completo, quizás algo limitado en niveles, pero que seguro que le da un buen repaso en velocidad a cualquier juego de cinta si se aprovecha bien la RAM sobrante.

El modo all RAM tiene la pega de la contención, que aparte de ser más lenta distorsiona los sonidos.

Creo que en el Spectrum está muy poco explotado el tema cartuchos, en el CPC están más avanzados, los que tengan la Megaflash ROM saben de lo que hablo.


El modo AllRam permite varias combinaciones que, complicarían el desarrollo pero evitarían usar los modos con todas las páginas contenidas. El modo con la 0-3 es muy atractivo, aunque de vez en cuando tengas que repaginar para actualizar las páginas 5 o 7 de la pantalla. La paginación es inmediata así que es barato cambiar cuando lo necesites.

Ahora bien, el diablo está en los detalles y depurar ese programa no es moco de pavo.... aunque con los emuladores hoy en día lo tienes mucho más fácil.
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Creando juegos para Interface II

Mensaje por antoniovillena » Sab Abr 05, 2014 4:41 pm

Los modos all RAM son un poco inútiles: hay 2 modos con 3 de 4 páginas contenidas, otro modo con todas las páginas contenidas y el último el que comentas, el modo con la 0-3 sin contención. Lo más práctico es coger uno de los modos con 3 de 4 contenidas (modo 2 ó modo 3) y olvidarse de paginación. El modo 0-3 no vale para videojuegos (creo que se creó con CP/M en mente) puesto que no tiene la RAM de video accesible, y hay poca coincidencia de páginas al conmutar (sólo coincide el banco 3 en dos de los tres modos restantes) por lo que casi siempre hay que hacer malabarismos.

Yo escribí una pieza de código que conmutaba entre varios modos all RAM (entre ellos el 0) y era un quebradero de cabeza, tenías que colocar instrucciones estrategicamente para que al conmutar no se produjeran cuelgues.

En fin, que la simplicidad de no tener que paginar, conmutar y mover datos que se consigue con un juego de cartucho no se consigue con los modos all RAM, otra cosa es si le metes algún interface tipo DivIDE o ZXMMC que te permita paginar RAM en memoria baja.

Me reitero, los juegos de cartucho están muy poco valorados, debido en parte a que en su día fue un fracaso comercial y sólo sacaron una decena de juegos. Aparte, que estos juegos en su mayoría no se escribieron ad-hoc, sino que se adaptaron juegos de 16K. En un Spectrum 16K, sólo hay 9K libres (7K son la memoria de video) por lo que la limitación es muuucho mayor. Échale 6K de memoria fija y 3K de memoria variable. En 6K apenas hay espacio para meter código y gráficos.
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Creando juegos para Interface II

Mensaje por mcleod_ideafix » Dom Abr 06, 2014 2:20 am

radastan escribió:
utopian escribió:Si metes todo dentro del main, serán variables locales, creadas en la pila. Ojo, funcionará, pero el código que te genera el z88dk en ese caso es bastante más lento.


¿Lo mete en pila? ¿qué bestia, no?


Es lo habitual para las variables locales. Es la manera más económica de soportar todas las características de las variables locales:
- Privadas para la función.
- Permite recursividad.
- Se crean y se destruyen automáticamente con la función.

De hecho, el modo indexado del Z80 es perfecto (y probablemente se hizo así para eso) para acceder a parámetros y v ariables locales dentro de una función en C.

Imagino que por lo que habeis dicho antes de las variables gloables en ROM, las variables locales estáticas también se guardarán en ROM, ya que a efectos de tiempo de vida, son equivalentes a las variables globales. No podrían estar en la pila.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Creando juegos para Interface II

Mensaje por mcleod_ideafix » Dom Abr 06, 2014 2:25 am

zup escribió:
Ivanzx escribió:Con este cartucho se podría jugar en cualquier Spectrum? Habria alguna limitación de memoria? Se podrían programar juegos normales o habría que adaptar algo? Como es que nadie ha salido antes con esta idea? :)


Respondiendo rápidamente... creo que el IF2 solo funcionaba bien en los 16 y 48k, y no estoy seguro de cómo se comporta con un 128k/+2. Desde luego, no funcionará correctamente en un +2A/+3.


El interface 2 funcionará sin problemas en un 128K / +2 gris.
Web: ZX Projects | Twitter: @zxprojects

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 6 invitados