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?
¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?
- zup
- 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?
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!
Además vendo cosas!
- Namek
- 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?
Tu suposicion es correcta, pero seria hasta la direccion 65535, ya que la 65536 no existe.
- mcleod_ideafix
- 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?
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
- zup
- 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?
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...
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!
Además vendo cosas!
- na_th_an
- 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?
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.
- Metalbrain
- 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?
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...
- zup
- 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?
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.
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!
Además vendo cosas!
- Hark0
- 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?
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
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

- zup
- 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?
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.
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!
Además vendo cosas!
Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?
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
salu2
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados