¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3012
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 356 veces
Contactar:

¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor zup » 31 Ene 2013, 20:15

Es una pregunta que me acaba de surgir echando una ojeada al "3 weeks in paradise".

En un 16/48k "normal", no debería pasar nada ya que la ROM es ROM y dudo mucho que la rutina LOAD "salte" de la dirección 65535 a 16384 directamente. ¿Pasa lo mismo en un 128k? ¿Qué tal le sentaría ese tratamiento a un Inves?

El tema con el "3 weeks in paradise" es la versión de 128k. El tema es que carga un bloque de 57408 bytes a partir de la dirección 27392 en configuración de memoria "normal" (ROM1, RAM5, RAM2, RAM0). ¿Pasa algo especial al llegar a la dirección 65536? ¿Pasaría a escribir en una página RAM o intentaría escribir en una ROM (=no pasa nada)? Mi suposición es que hará algo así:

- Rellenará la RAM 27392 a 65536 (RAM 5, 2 y 0).
- 16384 bytes se irán al limbo (ROM).
- 2880 bytes se cargarán a partir de la dirección 16384 (RAM 5).

¿Es esto correcto? He visto también juegos que intentan cargar más allá del final de la RAM (supongo que para que los copiadores del momento fallaran por falta de memoria). Teniendo en cuenta las particularidades del Inves Spectrum... ¿no deberían dar problemas a base de bien?
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 840
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 18 veces
Gracias recibidas: 63 veces

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor Namek » 31 Ene 2013, 20:21

Tu suposicion es correcta, pero seria hasta la direccion 65535, ya que la 65536 no existe.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor mcleod_ideafix » 31 Ene 2013, 20:34

zup escribió:En un 16/48k "normal", no debería pasar nada ya que la ROM es ROM y dudo mucho que la rutina LOAD "salte" de la dirección 65535 a 16384 directamente.

Exacto. De la 65535 pasa a la 0, que es ROM. Cualquier operación de escritura por parte del Z80 a direcciones de la ROM (en un 48K, 128K y +2 gris) se pierde (los datos no van a ningún sitio).

zup escribió:¿Pasa lo mismo en un 128k?

Sí, excepto en el caso del +2A/+3. En éstos, si el modo all-RAM está configurado, las direcciones de ROM son en realidad RAM y las escrituras ahí realmente escriben.

zup escribió:¿Qué tal le sentaría ese tratamiento a un Inves?

Lee este artículo y te harás una idea de lo que pasa cuando se escriben valores a posiciones de la ROM en un Inves.
http://www.zxprojects.com/index.php/the ... s-spectrum

zup escribió:El tema con el "3 weeks in paradise" es la versión de 128k. El tema es que carga un bloque de 57408 bytes a partir de la dirección 27392 en configuración de memoria "normal" (ROM1, RAM5, RAM2, RAM0). ¿Pasa algo especial al llegar a la dirección 65536?

Pues que pasaría a intentar escribir en ROM, con lo cual, se perdería aquello que se carga.

zup escribió:- Rellenará la RAM 27392 a 65536 (RAM 5, 2 y 0).
- 16384 bytes se irán al limbo (ROM).
- 2880 bytes se cargarán a partir de la dirección 16384 (RAM 5).

¿Es esto correcto?

Sí, es correcto.

zup escribió:Teniendo en cuenta las particularidades del Inves Spectrum... ¿no deberían dar problemas a base de bien?

Probablemente. Falta de sonido, borde de pantalla que no cambia, etc. Puede que más cosas, pero hasta que no se documente todo lo que hace el gate array del Inves, lo único que hay es lo que aparece en el artículo comentado.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3012
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 356 veces
Contactar:

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor zup » 31 Ene 2013, 21:51

Gracias por las respuestas. Lo que haría el Z80 y el 48k lo tenía claro, pero lo que me estaba temiendo es que la circuitería de paginación (y sobre todo, el ASIC que llevan los modelos negros de Amstrad) interpretara las intenciones del Z80 de alguna manera rara (del estilo de "mete la siguiente página"). Está claro que estaba pensando demasiado.

Luego, pensando un poco en el artículo sobre las rarezas del Inves, he caído en la cuenta de que cargar sobre la ROM es toda una provocación en estos equipos... he visto algunos juegos de 48k que intentar ir más allá de la memoria para fastidiar a los copiones, pero más que a los piratas iban a fastidiar a los usuarios de Inves...
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
na_th_an
Amiga 1200
Amiga 1200
Mensajes: 1273
Registrado: 10 Oct 2012, 11:17
Sistema Favorito: (Otro)
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Sega Master System
Gracias dadas: 18 veces
Gracias recibidas: 15 veces

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor na_th_an » 01 Feb 2013, 10:35

zup escribió:El tema con el "3 weeks in paradise" es la versión de 128k. El tema es que carga un bloque de 57408 bytes a partir de la dirección 27392 en configuración de memoria "normal" (ROM1, RAM5, RAM2, RAM0). ¿Pasa algo especial al llegar a la dirección 65536? ¿Pasaría a escribir en una página RAM o intentaría escribir en una ROM (=no pasa nada)? Mi suposición es que hará algo así:

- Rellenará la RAM 27392 a 65536 (RAM 5, 2 y 0).
- 16384 bytes se irán al limbo (ROM).
- 2880 bytes se cargarán a partir de la dirección 16384 (RAM 5).

¿Es esto correcto? He visto también juegos que intentan cargar más allá del final de la RAM (supongo que para que los copiadores del momento fallaran por falta de memoria). Teniendo en cuenta las particularidades del Inves Spectrum... ¿no deberían dar problemas a base de bien?


Depende. El que cargue un bloque tan largo que no cabe en la memoria normalmente me hace pensar que tenga un cargador custom que se encargue de ir paginando y cambiando la dirección de carga al vuelo cuando se llegan a determinadas posiciones en el archivo. He visto hacer esto en otras ocasiones. Creo recordar que el autor de SE Basic tenía una utilidad para construir cargas que hacía precisamente esto. Cargaba un solo bloque enorme pero el cargador iba paginando una por una las RAMs configuradas como destino de la carga y cambiando el puntero de carga.

Avatar de Usuario
Metalbrain
MSX Turbo R
MSX Turbo R
Mensajes: 435
Registrado: 22 Nov 2008, 00:30
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Gracias recibidas: 2 veces

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor Metalbrain » 01 Feb 2013, 12:50

na_th_an escribió:
zup escribió:El tema con el "3 weeks in paradise" es la versión de 128k. El tema es que carga un bloque de 57408 bytes a partir de la dirección 27392 en configuración de memoria "normal" (ROM1, RAM5, RAM2, RAM0). ¿Pasa algo especial al llegar a la dirección 65536? ¿Pasaría a escribir en una página RAM o intentaría escribir en una ROM (=no pasa nada)? Mi suposición es que hará algo así:

- Rellenará la RAM 27392 a 65536 (RAM 5, 2 y 0).
- 16384 bytes se irán al limbo (ROM).
- 2880 bytes se cargarán a partir de la dirección 16384 (RAM 5).

¿Es esto correcto? He visto también juegos que intentan cargar más allá del final de la RAM (supongo que para que los copiadores del momento fallaran por falta de memoria). Teniendo en cuenta las particularidades del Inves Spectrum... ¿no deberían dar problemas a base de bien?


Depende. El que cargue un bloque tan largo que no cabe en la memoria normalmente me hace pensar que tenga un cargador custom que se encargue de ir paginando y cambiando la dirección de carga al vuelo cuando se llegan a determinadas posiciones en el archivo. He visto hacer esto en otras ocasiones. Creo recordar que el autor de SE Basic tenía una utilidad para construir cargas que hacía precisamente esto. Cargaba un solo bloque enorme pero el cargador iba paginando una por una las RAMs configuradas como destino de la carga y cambiando el puntero de carga.


En este caso concreto, sí que es correcto. El mismo juego nos dio un poquito de problemas durante el desarrollo del gp2xpectrum:
http://www.gp32spain.com/foros/showthre ... m1-6/page5

El juego comprueba además el checksum completo incluyendo la ROM, así que solo funciona con la ROM del 128k toastrack británico, fallando con el +2, +2A, +3, 128 español...

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3012
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 356 veces
Contactar:

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor zup » 01 Feb 2013, 16:37

En este juego en concreto se utilizaba la rutina de la ROM (casi, en vez de entrar a ella por 1366 entra por 1378), así que es el caso "normal". En otros casos que se utilizan turbos o ruinas "extrañas" suelo colocar un breakpoint que se dispara al acceder al puerto 32765. Si sale en medio de la rutina de carga, ahí tienes tu paginación (los juegos Alkatraz lo suelen hacer).

En cuanto a lo del juego, sí que había visto que cascaba al terminar de cargar pero no sabía la razón. Como estaba listado en el hilo de (in)compatibilidad del +2A/+3, me limité a coger la versión "compatible" que apuntaban y me funciona perfectamente desde disquete.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor Hark0 » 01 Feb 2013, 22:24

Pregunta un poco OT:

En un 128... ¿se puede cambiar de bloque de RAM desde Basic? ¿Hay alguna dirección de la RAM que almacene a que banco está apuntando la CPU?

Gracias ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3012
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 356 veces
Contactar:

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor zup » 01 Feb 2013, 23:00

Sí, se puede cambiar.

Primero tienes que POKEar en 23388 el valor que vas a enviar al puerto 32765, y luego hacer un OUT para enviarlo. Para seleccionar la página 3 tendrías que hacer POKE 23388,19: OUT 32765,19.

El puerto 32765 no se puede leer, así que el sistema se fía del contenido de 23388 (BANKM) para saber qué página tiene metida. Es importante porque si haces el OUT sin actualizar BANKM, a la siguiente vez que el Spectrum pagine algo va a volver a una página equivocada. El POKE y el OUT deberían ir seguidos. Antes del POKE tienes garantizado que la página es la antigua y después del OUT que es la nueva; entre medias puedes (o no) tener la página nueva ya metida.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
oblo
Amiga 1200
Amiga 1200
Mensajes: 1260
Registrado: 29 Mar 2011, 16:08

Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?

Mensajepor oblo » 01 Feb 2013, 23:11

Radastan y unos cuentos más hicieron hace tiempo toda una disertación sobre el tema. En su momento trasteé un poco con todo lo que decían en el post usando ZXbasic y la verdad que funcionaba (pruebas sencillas, como almacenar variables en los diferentes bancos para luego leerlas y jugar con ellas)

salu2


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados