¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?
- 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?
Muchas gracias! Repasaré el enlace... ;D
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
- zup
- Amiga 2500
- Mensajes: 3013
- 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: 359 veces
- Contactar:
Re: ¿Qué pasa al hacer un LOAD sobre la ROM en un Spectrum?
La cosa se resume (si lo entendí bien) más o menos así (simplificada, el el +2A y +3 hay un puerto más y una variable más).
- El puerto 32765 es de solo escritura. Si tú no sabes el último valor que enviaste, no hay manera de leerlo.
- El sistema (donde digo sistema quiero decir la ROM del Spectrum) está programada para leer la variable BANKM (23388) antes de cambiar de página y restaurar esa página cuando acabe de hacer sus tejemanejes.
Supongamos que tienes metida la página 0 y quieres meter la página 4. El proceso normal sería el siguiente:
- CLEAR por debajo de 49151. Si la pila está en la página que vas a cambiar, estás jodido. Esto puede ir en cualquier parte del programa antes de la paginación (como buena costumbre, debería ser la primera instrucción).
...
- POKE 23388,20. Observa que se seleccionan a la vez página de RAM y de ROM, si no quieres liarla parda pon siempre la ROM1.
- En este momento, tienes metida la página 0 pero el sistema cree que es la 4. Si sucede algo que provoque un cambio de página (p.ej: un LOAD de disco en un +3, una interrupción a mala leche), la página que se restaurará al final será la 4. Por eso comenté que aquí no puedes garatizar que sea la RAM 0 o la 4.
- OUT 32765,20. Ahora mandas que la circuitería meta la RAM 4 (y la ROM1).
En el +2A y +3 tienes un par de cosillas más. Para empezar, existe otra variable más (BANK678, 23399) y otro puerto más ($1FFD), pero yo no creo que debas tocarlos desde BASIC. La segunda cosilla es el +3DOS, que te va a limitar las páginas a usar. De momento, la página 7 puedes considerarla prohibida y la página 1 tiene una caché de 4k al inicio. Eso te deja el mapa de memoria así:
- RAM0: Siempre utilizable, es la seleccionada por defecto.
- RAM1: Siempre ttilizable desde 53248 hasta el final. Si tu equipo no tiene unidad de disco (o eliminas la caché desde c/m), utilizable por completo.
- RAM2: Prohibida. Está paginada por defecto entre 32768 y 49151, así que probablemente tengas algo de tu programa BASIC (o la pila) dentro de ella.
- RAM3: Siempre utilizable.
- RAM4: Siempre utilizable.
- RAM5: Prohibida. Está paginada por defecto entre 16384 y 32767, aquí estará la pantalla, tu programa BASIC, el área de variables y quizás la pila (si tu programa es pequeño y has hecho un CLEAR muy bajo).
- RAM6: Siempre utilizable.
- RAM7: Totalmente prohibida en los +2A/+3, aunque tiene algunas zonas "seguras". Utilizable en los 128k/+2, pero tu programa será incompatbile con el resto de equipos.
No sé si me he enrollado demasiado, y algún dato va de memoria, pero si hay algo equivocado ya lo corregirán.
- El puerto 32765 es de solo escritura. Si tú no sabes el último valor que enviaste, no hay manera de leerlo.
- El sistema (donde digo sistema quiero decir la ROM del Spectrum) está programada para leer la variable BANKM (23388) antes de cambiar de página y restaurar esa página cuando acabe de hacer sus tejemanejes.
Supongamos que tienes metida la página 0 y quieres meter la página 4. El proceso normal sería el siguiente:
- CLEAR por debajo de 49151. Si la pila está en la página que vas a cambiar, estás jodido. Esto puede ir en cualquier parte del programa antes de la paginación (como buena costumbre, debería ser la primera instrucción).
...
- POKE 23388,20. Observa que se seleccionan a la vez página de RAM y de ROM, si no quieres liarla parda pon siempre la ROM1.
- En este momento, tienes metida la página 0 pero el sistema cree que es la 4. Si sucede algo que provoque un cambio de página (p.ej: un LOAD de disco en un +3, una interrupción a mala leche), la página que se restaurará al final será la 4. Por eso comenté que aquí no puedes garatizar que sea la RAM 0 o la 4.
- OUT 32765,20. Ahora mandas que la circuitería meta la RAM 4 (y la ROM1).
En el +2A y +3 tienes un par de cosillas más. Para empezar, existe otra variable más (BANK678, 23399) y otro puerto más ($1FFD), pero yo no creo que debas tocarlos desde BASIC. La segunda cosilla es el +3DOS, que te va a limitar las páginas a usar. De momento, la página 7 puedes considerarla prohibida y la página 1 tiene una caché de 4k al inicio. Eso te deja el mapa de memoria así:
- RAM0: Siempre utilizable, es la seleccionada por defecto.
- RAM1: Siempre ttilizable desde 53248 hasta el final. Si tu equipo no tiene unidad de disco (o eliminas la caché desde c/m), utilizable por completo.
- RAM2: Prohibida. Está paginada por defecto entre 32768 y 49151, así que probablemente tengas algo de tu programa BASIC (o la pila) dentro de ella.
- RAM3: Siempre utilizable.
- RAM4: Siempre utilizable.
- RAM5: Prohibida. Está paginada por defecto entre 16384 y 32767, aquí estará la pantalla, tu programa BASIC, el área de variables y quizás la pila (si tu programa es pequeño y has hecho un CLEAR muy bajo).
- RAM6: Siempre utilizable.
- RAM7: Totalmente prohibida en los +2A/+3, aunque tiene algunas zonas "seguras". Utilizable en los 128k/+2, pero tu programa será incompatbile con el resto de equipos.
No sé si me he enrollado demasiado, y algún dato va de memoria, pero si hay algo equivocado ya lo corregirán.
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?
WOW!
Voy a tener que imprimirme todo esto.
Muchas gracias de nuevo ;D
Voy a tener que imprimirme todo esto.
Muchas gracias de nuevo ;D
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados