+3: Orden correcto de carga de las páginas de RAM

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
zup
Amiga 2500
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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor zup » 13 Dic 2012, 19:45

Hombre, puedes paginar y reubicar desde BASIC, pero reubicar 16k con PEEK y POKE es muy leeeeento. En el cargador que uso, eso se lo dejo a una minirutina en c/m de 28 bytes (por ahora escondida en el REM de la primera línea).

Desde c/m sigues teniendo el problema (este empieza a ser un clásico) de la página 7. Además, debido a que para hacer llamadas a DOS el mapa tiene que ser ROM3,RAM5,RAM2,RAM7 te quedan solo 2 páginas (la 5 y la 2) donde cargar datos. De hecho, yo ubicaría el stack en la 5 junto con la pantalla de carga, e iría cargando las páginas en la RAM2 y trasladándolas a su ubicación definitiva.

Al final creo que es demasiado esfuerzo. Con el BASIC hago exactamente eso, y uso el c/m para la paginación/reubicación. Si hace falta poner el SP en alguna parte antes de lanzar el código o meter una página concreta antes de empezar, no es complicado encontrar un sitio donde esconder ese código (lo primero son 6 bytes, lo segundo son 9). Puedo entender el uso de c/m para comprimir bloques (aunque yo no los comprimo), pero no para hacer la carga de ficheros.

Ahora mismo acabo de terminar de pasar "El gran halcón" (vale, ese ya existe en disquete, pero el disquete accede directamente a sectores,creo). El programa usa las páginas 0,1,3,4 y 6 (al margen de la página 2 que siempre está mapeada y parte de la 5). El cargador en BASIC ha ocupado 350 bytes, lo que deja mucho espacio para cargar el programa (de hecho, podrías poner el CLEAR casi en 24200).

Lo que de verdad me encantaría saber es qué partes concretas de la página 7 se usan y cuáles quedan libres (eso no lo tengo claro). Creo que hay muy pocos casos de programas que usen la página 7, pero puede ser útil saber dónde se pueden meter datos en casos de emergencia.

EDITO:
He subido un pack con las últimas cosas que he tocado, por si alguien quiere unirse a la fiesta y convertir más juegos. Hay 4 discos: El Gran Halcón, Dizzy, The Rocky Horror Show, y Loader.
- Los tres juegos van acompañados con las versiones tzx de origen, por si alguien quiere ver cómo estaban antes de convertirlos.
- El Gran Halcón no tiene mucho problema, he cargado las páginas en donde las tenía el Spectrum y después he saltado a donde lo hacía el cargador original.
- Dizzy ocupa prácticamente toda la memoria, desde la dirección 23734 en adelante (sí, machaca el BASIC). Lo he trozeado en 4 trozos: pantalla, y páginas 5 (parcial), 2 y 0. El cargador mete la página 5 en la 4 (para no joder el BASIC), y luego "machaca" parte de la pantalla con una rutina que copia los datos de la página 4 a la 5, coloca el stack y salta al juego. De hecho, debido a que su cargador está en la dirección 23296 este juego no se puede cargar desde cinta en modo 128k, hay que usar el modo 48k. Ahora ya funciona en modo 128k, pero al precio de que ya no se puede usar en equipos de 48k :( . En cualquier caso es una prueba de concepto para ver que se pueden cargar ficheros ENORMES.
- The Rocky Horror Show es una mezcla de los dos anteriores: es un 128k que además usa la página 5 para meter cosas. Al margen de la corrupción de la pantalla de título, todo parece funcionar bien.
- Loader: Aquí está mi cargador "base", listo para ser modificado junto con algunos comentarios. Creo que es bastante compacto (aunque hay margen de mejora), y todavía se puede entender cómo va. Según necesites cargar más o menos páginas, o juguetear con la página 5, se pueden ir eliminando o añadiendo cosas (de hecho, para empezar sobran todos los comentarios).

El paquete está subido en mediafire, para que quien tenga curiosidad le eche una ojeada. Borro los paquetes anteriores del RHS, pero dejo la imagen de disco duro con algunos juegos.
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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor Namek » 13 Dic 2012, 21:51

Bueno pues despues de un monton de dolores de cabeza aqui lo teneis,el ROCKY HORROR SHOW 128K listo para transferir a disco del +3...

- Que he hecho:

cargo la pantalla
cargo la pagina 0 en la 4
cargo la pagina 1 en la 1
cargo la pagina 3 en la 3
cargo la pagina 5 menos la pantalla de carga mas la pagina 2 en un mismo bloque en la direccion 39680

- ya cargado todo en memoria reubicamos:

Primero desplazo las paginas 5 menos la pantalla y la 2 que tengo en memoria en un solo bloque a su direccion correcta 23296

activo pagina 7 y le copio la pagina 2
activo pagina 4 y la copio a pagina 2
activo pagina 0 y le copio la pagina 2
activo pagina 7 y la copio a pagina 2
activo pagina 0 y ya tenemos todo en su sitio... 8-[

Que aproveche.

http://turboload.co.nr/RHS+3.tap
Última edición por Namek el 14 Dic 2012, 02:57, editado 5 veces en total.

Avatar de Usuario
zup
Amiga 2500
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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor zup » 13 Dic 2012, 23:03

Después de analizar un poco el Gryzor de 128k, he conseguido transferirlo a ficheros de disco. Al final he tenido que trozear la página 7 en 3 trozos, ubicarlos en sitios que estaban (presumiblemente) libres y, una vez cargado todo desde el disco, reunir todos los cachos y limpiar los buffers por si acaso espera encontrar 0s ahí.

Solo sirve para transferirlo a disco duro... la versión en cinta está totalmente desprotegida (y se podría comprimir), y en su día también se publicó en diskette. En fin, otro juego transferido... ya solo me quedan un montó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!

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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor Namek » 14 Dic 2012, 05:37

Bueno pues como no me puedo estar quieto he comprimido el ROCKY HORROR SHOW de 128K y se me ha quedado en un TAP de menos de 41K, para colmo el descompresor me ha servido tambien para reubicar los bloques al mismo tiempo que se descomprimen y gracias a esto el cargador se ha reducido una barbaridad. Al final he dejado el juego en 4 archivos:

1.- CARGADOR BASIC (Y solo basic, nada de c/m o datas).
2.- PANTALLA DE CARGA COMPRIMIDA.
3.- PAGINAS 0,1 Y 3 COMPRIMIDAS EN UN SOLO BLOQUE QUE SE DESCOMPRIMEN DIRECTAMENTE EN SU PAGINA CORRECTA.
4.- PAGINAS 5 SIN PANTALLA DE CARGA Y 2 EN UN SOLO BLOQUE QUE SE DESCOMPRIME EN 30192 Y LUEGO SE REUBICA EN 23296.

Y por supuesto totalmente transferible a disco de +3, podeis bajarlo de mi pagina o desde este enlace: http://turboload.co.nr/RockyHorrorShow128.tap

Y con esto y un bizcocho... \:D/

BlackHole
Amiga 1200
Amiga 1200
Mensajes: 1489
Registrado: 07 Nov 2009, 11:38
Sistema Favorito: C64
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo SNES
Ubicación: Madrid
Gracias dadas: 14 veces
Gracias recibidas: 244 veces

Re: +3: Orden correcto de carga de las páginas de RAM

Mensajepor BlackHole » 14 Dic 2012, 13:53

Lástima que todas las versiones en cinta de Rocky Horror Show de 128K tienen fallos del controlador Sinclair... :?

Aquí hay una versión de un cracker ¿ruso? en el año 2000 que había arreglado el problema... http://mirrorstack.com/qgodx7uaohth

Avatar de Usuario
zup
Amiga 2500
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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor zup » 14 Dic 2012, 21:51

Vale, adjunto aquí una primicia para los que quieran curiosear: mi versión del Gryzor de 128k para disco (duro).

La versión de la que he partido (Gryzor de Erbe en cinta, 128k) está completamente desprotegida. El juego no carga desde disco sin modificaciones (ver primer post), porque usa las páginas 7, 6, 4, 3, 1, 2 y 0 (prácticamente todas). Probablemente Namek pueda comprimir para sus cintas este animalito sin demasiado problema, pero otra cosa es de disco.

Mi solución:
Viendo lo que carga y cómo lo hace, se ve que hay tres áreas utilizables: la memoria de pantalla, los últimos 6k de la página 0 y el área que va desde el final del BASIC hasta 32767. Entre todo tengo casi 20k libres, de sobra para meter los datos y algo más.

He dividido la página 7 en tres trozos: los primeros 8k los ubico a partir de 24576 (corresponde a la página 5, fichero gryzor.71), los siguientes 4k junto con una rutina c/m los he metido en el fichero gryzor.72, y los últimos 4k los he metido en la página 0 (fichero gryzor.0x).

Cargo todos los ficheros en su sitio correspondiente. El último es el fichero gryzor.72, porque corrompe la pantalla de presentación. Después salto a la dirección 16384.

En la dirección 16384 hay una rutina que hace lo siguiente:
- Meter la página 7.
- Trasladar los datos desde 24576 hasta la página 7.
- Trasladar los datos desde la memoria de pantalla hasta la página 7.
- Rellenar de ceros desde 24576 32767.
- Meter la página 0.
- Trasladar los datos de la página 0 a la memoria de pantalla.
- Rellenar de ceros el espacio libre de la página 0.
- Meter la página 7.
- Trasladar los datos de la memoria de pantalla a la página 7.
- Meter la página 0 otra vez, poner el stack en su sitio para cumplir lo que espera el programa y saltar al inicio del programa.

Por si las moscas, relleno de ceros los espacios de memoria que gryzor no utiliza... no vaya a ser que en realidad ese montón de ceros puedan ser utilizados para algo.

El disquete para +3 (o para trasladarlo a un +3e) se puede descargar aquí.

¿Alguna sugerencia, corrección o alguien que me comente cómo lo hubiera hecho él? Y preguntando concretamente a Namek... ¿el programa compresor/descompresor/reubicador puede trabajar correctamente con programas que usen tanta página y accedan a disco?

Por otra parte, en la descripción de RHS he tenido que coger lápiz y papel para averiguar qué haces con las páginas. ¿Las rutinas de carga usan la página 0? Lo digo porque siguiendo los meneos que haces, en ningún momento cargas datos en la página 0 (la cargas en la 4 y luego la mueves).
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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor Namek » 15 Dic 2012, 00:06

zup escribió:Y preguntando concretamente a Namek... ¿el programa compresor/descompresor/reubicador puede trabajar correctamente con programas que usen tanta página y accedan a disco?

Por otra parte, en la descripción de RHS he tenido que coger lápiz y papel para averiguar qué haces con las páginas. ¿Las rutinas de carga usan la página 0? Lo digo porque siguiendo los meneos que haces, en ningún momento cargas datos en la página 0 (la cargas en la 4 y luego la mueves).


El programa compresor que uso es el "FILE COMPRESSOR" V3.5 de Mladen Popovic para 48K, puedes descargarlo de:

http://retrospec.sgn.net/users/tomcat/y ... ressor.php

Este compresor permite comprimir bloques de datos de hasta 41780 bytes, el descompresor solo ocupa 150 bytes y no necesita memoria extra para descomprimir aparte de los 150 bytes del propio descompresor. Para descomprimir a una pagina de RAM solo hay que añadir antes de la rutina descompresora los 8 bytes de c/m necesarios para seleccionar la pagina RAM en cuestion y que el bloque comprimido descomprima a partir de la direccion 49152 y nada mas, asi que no creo que haya ningun problema en usarlo con todas las paginas que quieras.

En el RHS no puedo cargar la pagina 0 directamente ya que la necesito para poder cargar la pagina 5 y poder machacar el BASIC justo antes de empezar a ejecutar el juego, aunque ese problema no lo tengo en la version comprimida.

Ahora vamos a ver la version que nos ha buscado BlackHole de menos de 37K a ver como esta comprimida y si es posible pasarla a disco.

Un saludo.

Avatar de Usuario
zup
Amiga 2500
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: +3: Orden correcto de carga de las páginas de RAM

Mensajepor zup » 15 Dic 2012, 13:53

He metido una consulta en WOS acerca de lo de las páginas: no me trago que el +3DOS use TODA la página 7 para almacenar cosas temporales. Si el área realmente usada es mejor de 6k, la puedo considerar libre (puedo usar la memoria de pantalla como área temporal).
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!


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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