Página 1 de 3

Creando juegos para Interface II

Publicado: Lun Mar 31, 2014 4:25 pm
por radastan
Vamos a ver,

Todas las rutinas que he creado para Z88DK no necesitan la ROM para nada, por lo que técnicamente es perfectamente posible crear cartuchos IF2 simplemente compilando a partir de la posición 0. Está probado con un emulador y todo perfecto.

Lo que si que hay que tener cuidado es en poner la pila en la RAM y nunca grabar en el espacio de la ROM para no cargarme el ZX Spectrum. ¿es correcto? ¿alguna cosa más?

Re: Creando juegos para Interface II

Publicado: Lun Mar 31, 2014 4:35 pm
por zup
Supongo que es preferible poner la pila por debajo de 32767, para hacerlo compatible con los 16k. Tampoco mangonees con los puertos $1ffd y $3ffd... puede que tu código se esté ejecutando en +2A/+3 en modo all RAM.

Re: Creando juegos para Interface II

Publicado: Lun Mar 31, 2014 4:42 pm
por radastan
zup escribió:Supongo que es preferible poner la pila por debajo de 32767, para hacerlo compatible con los 16k. Tampoco mangonees con los puertos $1ffd y $3ffd... puede que tu código se esté ejecutando en +2A/+3 en modo all RAM.


Tomo nota, es importante que sea compatible con todos los ZX Spectrum.

Es que veo muy molón sacar juegos en formato cartucho.

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 12:19 pm
por radastan
A ver, una ayudita. Estoy haciendo esto para compilar:

Código: Seleccionar todo

zcc +zx -vn cartuchozx.c -o cartuchozx.rom -lndos -zorg=0


Y en el código pongo:

#pragma output STACKPTR=32700

De momento obtengo una pantalla a barras de colores con un programa de ejemplo.

¿Lo anterior está bien?

La gran pregunta, ¿Cómo le digo a Z88DK que use la RAM para las variables?

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 12:41 pm
por radastan
Todo solucionado, os digo los pasos.

Primero, la orden correcta para compilar es:

Código: Seleccionar todo

zcc +zx -vn -lndos -lm -startup=2 -make-app cartuchozx.c -o cartuchozx.rom


Y de segundo hay que borrar del código:

Código: Seleccionar todo

#pragma output STACKPTR=loquesea


Así funciona a la primera.

¡Cartuchico al canto para Retromadrid! :D

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 12:46 pm
por radastan
Vale, el último problema, ¿cómo hago para leer el teclado en una ROM? porque leer desde los puertos no funciona.

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 1:37 pm
por Ivanzx
Estoy un poco pez en el tema, asi que lo mismo la pregunta es un poco tonta, pero...

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? :)

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 2:14 pm
por radastan
Te explico:

Un cartucho Interface II (interfaz que es muy simple de clonar con unos cables y un par de conectores) es en origen una ROM de 16K de memoria. Dicha ROM se pone en superposición a la del ZX Spectrum, por lo que no puedes usar rutinas que hagan uso de la ROM del ordenador.

Como debería funcionar en todos los modelos sólo puedes hacer uso de la RAM que haya por encima del área de pantalla hasta los 16K de RAM del ZX Spectrum original (el primero).

Evidentemente echa la ley, echa la trampa, se pueden hacer cartuchos que respondan a una dirección de memoria y cambien la "página" de la ROM, copiando en RAM el código principal. Con este sistema no habría limitación de memoria, y ya según el modelo mínimo para el que esté destinado el cartucho tendrás más o menos RAM.

Ya hay gente que ha pasado juegos en formato cinta a cartucho, pero todos deben cumplir la norma de no usar la ROM original del Spectrum.

De todas formas si te paras a pensar, en 16K caben muchas cosas si no haces salvajadas, por lo que si quieres hacer un juego en este formato limítate a los modelos de 16K de RAM (como 7 KB libres para ti) y no pases de los primeros 16K de direccionamiento. Yo estoy haciendo pruebas y en 16K puedo meter un juego sin problemas. Basta limitar el número de sprites y tiles, no pasarte de tamaño de mapa (preferible un arcade o hacer grupos de tiles), etc.

Yo voy a intentar hacer un juego sencillo para Retromadrid, a ver que sale.

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 2:51 pm
por radastan
Encontrado el problema, si haces una matriz global (fuera de cualquier función) se mete en ROM. Idem para variables, no puedes usar globales porque se meten en ROM (deben estar como mínimo dentro de MAIN).

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 3:58 pm
por utopian
Hay compiladores que te dejan especificar un área de memoria especial para las variables globales (RAM), y otro para el código (ROM). Creo que el SDCC te permite algo así, pero z88dk no.

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.

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 4:28 pm
por radastan
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?

De todas formas lo más gordo son matrices, ¿pueden crearse en una zona de memoria determinada? Las uso para detectar colisiones y obstáculos, así no hay que tirar de cálculos.

La prueba que he realizado, no obstante, va de perlas en velocidad.

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 5:22 pm
por horace
Hola Radastan,

No lo puedo probar ni igual es lo que necesitas pero para meter variables a fuego donde quieras, creo que la sintaxis en z88dk es:

Código: Seleccionar todo

extern uchar var1 @ 24576;  // +1 byte
extern int var2   @ 24577;  // +2 bytes
extern uchar var3 @ 24579;  // +1 byte

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 8:07 pm
por Ivanzx
radastan escribió:Te explico:

Un cartucho Interface II (interfaz que es muy simple de clonar con unos cables y un par de conectores) es en origen una ROM de 16K de memoria. Dicha ROM se pone en superposición a la del ZX Spectrum, por lo que no puedes usar rutinas que hagan uso de la ROM del ordenador.

Como debería funcionar en todos los modelos sólo puedes hacer uso de la RAM que haya por encima del área de pantalla hasta los 16K de RAM del ZX Spectrum original (el primero).

Evidentemente echa la ley, echa la trampa, se pueden hacer cartuchos que respondan a una dirección de memoria y cambien la "página" de la ROM, copiando en RAM el código principal. Con este sistema no habría limitación de memoria, y ya según el modelo mínimo para el que esté destinado el cartucho tendrás más o menos RAM.

Ya hay gente que ha pasado juegos en formato cinta a cartucho, pero todos deben cumplir la norma de no usar la ROM original del Spectrum.

De todas formas si te paras a pensar, en 16K caben muchas cosas si no haces salvajadas, por lo que si quieres hacer un juego en este formato limítate a los modelos de 16K de RAM (como 7 KB libres para ti) y no pases de los primeros 16K de direccionamiento. Yo estoy haciendo pruebas y en 16K puedo meter un juego sin problemas. Basta limitar el número de sprites y tiles, no pasarte de tamaño de mapa (preferible un arcade o hacer grupos de tiles), etc.

Yo voy a intentar hacer un juego sencillo para Retromadrid, a ver que sale.



Gracias por la explicación ;)
Y ahora una pregunta, que porcentaje de juegos comerciales no usan la ROM original del Spectrum? Es fácil programar de esa manera nuevos juegos?

Sobre lo de los 16K, por ejemplo, un forero de WoS ha sacado varios juegos, de buena acogida, intencionadamente de 16K, lo mismo son candidatos a buenos cartuchos ;), aquí os dejo la lista de sus juegos:

http://www.worldofspectrum.org/infoseekpub.cgi?regexp=^Cyningstan$&loadpics=3

Saludos!

Re: Creando juegos para Interface II

Publicado: Jue Abr 03, 2014 8:51 pm
por radastan
Ivanzx escribió:Y ahora una pregunta, que porcentaje de juegos comerciales no usan la ROM original del Spectrum? Es fácil programar de esa manera nuevos juegos?


Que ocupen 16K muy pocos, que ocupen 48K algunos. De echo hay gente que se dedica en sus ratos libres a pasarlos, así tenemos algunos juegos pasados. Tienes más info sobre cartuchos programables y software pasado en:

http://www.fruitcake.plus.com/Sinclair/Interface2/Cartridges/Interface2_RC_Cartridges.htm

http://trastero.speccy.org/cosas/droy/cartuchos/cartuchos_s.htm

Hacer juegos para Interface 2 es sencillo hoy día, tenemos muchas herramientas que lo facilitan, sólo hay que tener presente que no debe usarse rutinas de la ROM y limitarte a los 16K del cartucho, pudiendo aprovechar lo que sobre de 16K de la RAM de los primeros ZX Spectrum.

Evidentemente hay que ser inteligente y no querer meter un Head Over Heels en 16K.

Ivanzx escribió:Sobre lo de los 16K, por ejemplo, un forero de WoS ha sacado varios juegos, de buena acogida, intencionadamente de 16K, lo mismo son candidatos a buenos cartuchos ;), aquí os dejo la lista de sus juegos:

http://www.worldofspectrum.org/infoseekpub.cgi?regexp=^Cyningstan$&loadpics=3


Un juego puede ser para 16K y sin embargo no ser posible su traslado a IF2 debido a que usa la ROM del sistema.

Re: Creando juegos para Interface II

Publicado: Vie Abr 04, 2014 8:04 am
por radastan
Esto es un juego que estoy haciendo "ex-profeso" para Interface 2:

Imagen

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