[Resuelto] Como se crean juegos en ROM?

Dudas, cuestiones, sugerencias y peticiones en general sobre el proyecto / Questions and requests about the project
Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: RE: Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 22 Sep 2016, 16:48

A ver si te he entendido bien y corrígeme si digo alguna burrada, porque tengo nociones de la estructura de la ROM-RAM del spectrum, muchas de ellas adquiridas a raíz de disponer del ZXUno:
antoniovillena escribió:
Puedes hacer una ñapa que consiste en grabar una ROM de 48K en el banco 0 y asumir que siempre está ahí.
Propones que en el banco 0 de la flash aloje una ROM fija de 48K, una pregunta y disculpa mi ignorancia, por qué de 48K?, cada banco no es de 16K?
Esta ROM sería la de un spectrum sin modificar? y supongo compatible con el modo 128k...
antoniovillena escribió: Así tienes los 8 bancos para tu juego. Necesitarás una rutina que vuelque de flash a ROM y mover de una dirección SRAM a otra estos 8 bancos, pero ese código ocupará menos de 256 bytes y los puedes alojar en memoria de video para que el snapshot no se cuelgue.
Aquí entiendo que estaría el volcado completo del juego, con el añadido de 256 bytes en la zona de vídeo... pero al cargar la ROM, el ZXUNO apuntará el PC a la direccion 0 del primer banco de los 128K del juego, que en este caso se encontrará en zona ROM... entiendo que aquí tengo que hacer un salto (con lo que podria sobreescribir unos bytes vitales del juego) a mi rutina de 256 bytes que lo mueve todo y lee de la flash los 48K para llevarlos a ROM, estando en modo ROOT?

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Como se crean juegos en ROM?

Mensaje por antoniovillena » 22 Sep 2016, 18:13

La ROM de 48k es necesaria porque el 95% de los juegos asumen que existe.
Y sí, lo primero que se ejecuta es pc=0000 de la ROM 0. Habría que hacer un salto al cargador y luego parchear esos 3 bytes de salto con lo que hubiese antes en esa posición

Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: RE: Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 22 Sep 2016, 18:19

antoniovillena escribió:La ROM de 48k es necesaria porque el 95% de los juegos asumen que existe.
Y sí, lo primero que se ejecuta es pc=0000 de la ROM 0. Habría que hacer un salto al cargador y luego parchear esos 3 bytes de salto con lo que hubiese antes en esa posición
Vale, parcheandolo con el contenido anterior tras el salto, tiene sentido, no había caido. Creo que ya tengo una idea para montar el chiringuito, ahora a por ello a ratos... os mantendré informados.

Enviado desde mi thor mediante Tapatalk

Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 29 Sep 2016, 12:00

Estoy haciendo unas primeras pruebas partiendo del código de romsupgr de antonio, y depurando en ZEsarUX (todas las pruebas pretendía llevarlas a cabo en este emulador primero)

El caso es que la primera parte se que funciona bien, si lo cargo a partir de una ROM no rooteada, se detiene en el primer HALT, todo correcto. Pero la segunda parte, algo no está yendo bien, con una ROM rooteada... al cambiar a modo boot (justo al ejecutar el out (c), a) se va el contador PC a otra parte y no llega a parar en el halt, qué puede estar sucediendo, será algún bug del ZEsarUX y en hardware real funcionaría bien?

Me gustaría ejecutar instruccion por instruccion con el ZEsarUX... pero no he dado con la opción para ello

Imagen

org $0000

Main di ; Deshabilitamos interrupciones

ld bc, zxuno_port
out (c), 0
inc b
in f, (c)
jp p, Nonlock
halt ; ROM no rooted, paramos...

Nonlock in a, (c) ; Cambiamos a modo configuracion (boot)
or 1
out (c),a

halt ; Detenemos todo para depurar con ZEsarUX

Nota: Esta misma prueba la lleve a cabo desde una rutina de ESXDOS (org $2000) con SE Basic rooted y me fue bien, la única diferencia es que no comencé con un DI para deshabilitar interrupciones.
Última edición por spark2k06 el 29 Sep 2016, 12:10, editado 1 vez en total.

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Como se crean juegos en ROM?

Mensaje por antoniovillena » 29 Sep 2016, 12:09

Al entrar al modo boot se paginan los primeros 16K ($0000-$3FFF) con el contenido del bootloader. Así que asegúrate que el código se ejecute por encima de la dirección $4000, sino tendrás un cuelgue seguro.

Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 29 Sep 2016, 12:10

antoniovillena escribió:Al entrar al modo boot se paginan los primeros 16K ($0000-$3FFF) con el contenido del bootloader. Así que asegúrate que el código se ejecute por encima de la dirección $4000, sino tendrás un cuelgue seguro.
Ok, probamos... gracias.

Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 30 Sep 2016, 12:42

Me encuentro en la fase final del cargador, restaurando los registros para lanzar ya directamente la ejecución en el PC del snapshot. Pero me surge una duda, cómo restauro el valor completo del registro de flags -> F? Existen algunas instrucciones para activar algunos flags, otras se activan por operaciones anteriores... pero cómo cargo el Byte completo de los flags?

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Como se crean juegos en ROM?

Mensaje por antoniovillena » 30 Sep 2016, 12:49

spark2k06 escribió:Me encuentro en la fase final del cargador, restaurando los registros para lanzar ya directamente la ejecución en el PC del snapshot. Pero me surge una duda, cómo restauro el valor completo del registro de flags -> F? Existen algunas instrucciones para activar algunos flags, otras se activan por operaciones anteriores... pero cómo cargo el Byte completo de los flags?
Con la instrucción POP AF y almacenando el valor previamente en pila.

Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 30 Sep 2016, 12:51

antoniovillena escribió:
spark2k06 escribió:Me encuentro en la fase final del cargador, restaurando los registros para lanzar ya directamente la ejecución en el PC del snapshot. Pero me surge una duda, cómo restauro el valor completo del registro de flags -> F? Existen algunas instrucciones para activar algunos flags, otras se activan por operaciones anteriores... pero cómo cargo el Byte completo de los flags?
Con la instrucción POP AF y almacenando el valor previamente en pila.
Claro! Seguimos... :-)

Avatar de Usuario
spark2k06
Mensajes: 1150
Registrado: 12 Feb 2016, 13:58

Re: Como se crean juegos en ROM?

Mensaje por spark2k06 » 01 Oct 2016, 08:42

antoniovillena escribió:Con la instrucción POP AF y almacenando el valor previamente en pila.
Bueno, esto ya funciona :-), solo tengo una última duda antes de subir una demo a youtube y hacer público el código del cargador, que por supuesto es optimizable... la duda es la siguiente, la dejo en un comentario de una instrucción:

ld a,(interrupt) ; Interrupt (bit 2 contains IFF2, 1=EI/0=DI) -> SNA Format (worldofspectrum.org)
bit 0,a ; -> He observado un snapshot con EI que esta este byte a $01 y otro con DI que esta a $00 (a que se refiere entonces con que el bit 2 contiene IFF2???)
call nz,setei

Con el juego Batman The Movie de 128k me ha funcionado correctamente, y al hacer un reset durante el juego por ejemplo pues lanzaría una ROM de 48k, y saldría el Basic 48k.

Ya explicaré mas detalles técnicos cuando de por cerrado el asunto.

Saludos!
Última edición por spark2k06 el 01 Oct 2016, 08:42, editado 1 vez en total.

Responder