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

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

Mensajepor Metalbrain » 10 Dic 2012, 12:25

zup escribió:Por ahora, el único realmente "especial" que tengo es el Amaurote 128k (que como he dicho, no funcionaba en +2A y +3 ni siquiera desde cinta).


¿Has probado la versión corregida de velesoft?
http://www.worldofspectrum.org/forums/s ... tcount=244

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

Mensajepor mcleod_ideafix » 10 Dic 2012, 15:25

zup escribió:Si hago un snap y lo cargo con SPECTRUM, al margen de que no tengo claro que pueda cargar programas de 128k, estoy obligando a que esos juegos se puedan jugar solo en un +3e.

Sí, se pueden cargar snaps de 128K (en formato Z80).
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

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 » 10 Dic 2012, 18:44

Lo de comprimir los juegos es basicamente para que tarden menos en cargar desde cinta y tambien para que quepan mas juegos en los cada vez mas escasos discos de 3". Yo personalmente tengo varios juegos comprimidos en mi web www.turboload.co.nr aunque no tengo puesto ninguno que no este autorizado en WOS, los no autorizados los pondre en una pagina anonima.

Pregunta: Usas discos de 720K en el +3 con toda su capacidad? Tienes una controladora especial o algo asi?

Saludos.

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 » 10 Dic 2012, 19:52

Metalbrain escribió:¿Has probado la versión corregida de velesoft?


No, tengo bajado un pack que de juegos que tienen arreglado lo de IM2, pero no había visto esa lista que me dices. Voy a echarle una ojeada, seguro que hay alguno que no tengo desprotegido.

Namek escribió:Usas discos de 720K en el +3 con toda su capacidad? Tienes una controladora especial o algo asi?


Tengo el típico cable de disquetera externa y una disquetera de 3.5 pulgadas, también tengo el HxC. En realidad, un Spectrum es perfectamente capaz de manejar disquetes de 720k... si se lo dices. En la página 215 del manual del Spectrum +3 hay una referencia a la XDPB que controla estas cosas. Una cosa interesante es que estos datos están escritos en el disquete, así que un disquete con una XDPB "parcheada" funciona perfectamente sin tocar nada en el Spectrum.

El límite hardware es la transferencia de datos de la controladora (creo que 500 kb/s), lo que limita las disqueteras "legales" a disqueteras de doble densidad (o de alta densidad usando disquetes de doble densidad). Si intentas usar disquetes de alta densidad no podrá reconocerlos.

El límite por software es que el Spectrum solo formatea disquetes vacíos a 40 pistas y una cara (no sabe que la disquetera es de doble cara y 80 pistas), necesitarás una herramienta especial para formatear disquetes a 720k (el Multiformatter o el DU54.
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
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 » 12 Dic 2012, 21:36

Caso práctico y solicitud de corrección de chapuzas:

Vale, me he pegado un bueno rato pasando a ficheros "limpios" el Rocky Horror Show de 128k, pero me ha quedado una chapuza. La descarga de este post está unos mensajes más adelante.

Descripción breve:
------------------------
- Cargador original en código máquina, con su propia rutina de carga.
- Carga (por este orden) las páginas 5, 0, 1 y 3 (completas).
- Después mete la página 2 y carga dos bloques de código.
- Por último mete la página 0 otra vez y salta al inicio del código.

Cosas a destacar:
-----------------------
Ha habido dos cosas que me han llamado la atención. Lo primero es que carga la página 5 completa. Eso significa que el momento en que lo hace, machaca el BASIC, zona de variables y todo lo que pilla por medio. En ese momento, además, la página 5 está dos veces en memoria (una en 4000h, y la otra en C000h).

La otra cosa que me ha llamado la atención es que los dos últimos bloques se deben cargar en la página 2, pero en vez de hacerlo en el segmento 8000h lo hace paginando la página 2 en el segmento C000h.

Problemas:
---------------
El primer problema ha sido la página 5. Si se carga la primera, el casque está casi asegurado. Tampoco puedo cargarla la última, porque tengo la memoria ocupada. La solución ha sido cargarla temporalmente a la página 6, y hacer una rutina a partir de la dirección 16384 para paginar, copiar de la 6 a la 5, poner el stack a martillazos en su sitio y saltar al inicio.

El segundo (y más mosqueante) problema es el hecho de que he sido incapaz de cargar correctamente la página 2. Este hecho aparentemente trivial (cargar dos bloques de código en su sitio) no se realizaba correctamente y todavía no sé por qué. ¿La solución? No la he encontrado. He usado el ZX Spin, he puesto un breakpoint en la dirección de ejecución del código y cuando ha parado el programa he sacado la página 2 tal cual estaba en la memoria con la opción que tiene.

Tercer problema (también mosqueante). A pesar de todo (stack en su sitio, páginas metidas en RAM correctamente), al ejecutarse se corrompe la pantalla de título (no la de carga, sino la que viene después de los rayos). El juego aparentemente se ejecuta bien, pero no sé por qué lo hace.

Descripción del cargador BASIC:
---------------------------------------
Como el resto de juegos 128k que preparo, usa el cargador "mutado" de Spellbound (es MUY efectivo). En los DATA de la línea 140 está la rutina de pagina-traslada datos-despagina; en los DATA de la línea 200 esta mi rutina de pagina-traslada datos-despagina-stackea-ejecuta.

Las líneas 150 en adelante cargan datos en la página 2 y luego los mueven a la página que se indique en A. Es muy sencillo y nunca falla.

Hay una "chapuza" que es que la pantalla de carga se carga dos veces. Está presente por separado en el juego, y también se copia al trasladar los datos de la página 6 a la 5. Se podría quitar el archivo del disco, o hacer el fichero rhs.5 más pequeño y trasladar menos datos. También quedan restos (PAUSEs, CLS extraños) de mis pruebas de depurado.

Pues eso... ¿alguno de los grandes entendidos del Spectrum puede mirar esto por encima a ver si detecta de donde vienen los fallos que he encontrado?
Última edición por zup el 13 Dic 2012, 21:05, editado 2 veces en total.
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, 03:52

Vale, le echo un ojo y te cuento que veo o si consigo solucionar algo... :-k

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 » 13 Dic 2012, 13:13

Buenas,

A mí me gustaría ayudar, aunque lamentablemente cuando salió el Spectrum +3 en su día, yo ya me había pasado al Commodore 64. :roll:

¿Hay documentación sobre el +3DOS a un nivel lo suficientemente detallado? Supongo que los problemas vendrán por los buffers que use el sistema a alto nivel, ¿no?

¿Se podrían realizar cargadores independientes en código máquina? ¿Leer bytes de uno en uno sin machacar otras áreas de la RAM, o es imposible?

Gracias.

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, 14:02

Vale, he encontrado (al menos) un fallo: en la segunda rutina (la que copia la página 6 a la 5) la longitud del bloque a copiar es excesiva (concretamente 48 bytes excesiva). También he movido la rutina paginadora al final del área de pantalla (para evitar corromper el título), pero ha sido inútil... la pantalla de título sigue fallando.

La nueva versión está un poco más adelante, junto con otras cosas. He metido una versión "comentada" del cargador genérico que uso (insisto: he cogido cosas "prestadas" a los cargadores de la saga Magic Knight) en el disco Loader.dsk.

También he notado que la rutina de control con joystick sinclair no funciona bien, pero cargando cualquier versión de 128k en el emulador también falla. Me pasa en cualquier modelo de 128k. Curiosamente en las versiones de 48k funciona bien, y el control por teclado también (¿funcionará el control con Kempston o Protek?).

Respondiendo a blackhole: documentación hay toda la que quieras, empezando por el propio manual de la máquina (y después tirando de WOS y demás). Yo tengo el manual en inglés, y a partir de la página 208 (capítulo 27) tienes documentación bastante extensa. En mi caso, las reglas que sigo son muy sencillas:
- Uso BASIC para que los cargadores sirvan también en máquinas sin disco. Podría usar c/m, pero las llamadas a DOS son muy diferentes a la carga de cinta (y exigen tener la memoria de una determinada manera antes de entrar); sería imposible reutilizar ese cargador en cinta. Si alguien se molesta en usar el DISCTAPE (de Microhobby) y sigue el orden en que carga los ficheros, es muy fácil generar un fichero .tap y cargarlo en una máquina de cinta.
- La página 7 es sagrada (por ahora).
- Jamás cargo la página 5 directamente.

La página 7 es sagrada, ya que la usa el +3DOS para mantener ciertas estructuras en su sitio. Si la tocas, todo el sistema de disco deja de funcionar con lo que hay que tener muuuchas precauciones con ella (todavía estoy dándole vueltas a cómo hacerlo). La página 5 también es casi sagrada: en ella están (normalmente) la memoria de pantalla, el área de variables de sistema y el BASIC (además de que en mis cargadores suelo dejar el stack por ahí). Si la cargo directamente, mi cargador BASIC deja de funcionar; la mejor solución que he encontrado es usar una página libre como buffer y, justo antes de saltar a c/m, meterla a martillazos en su sitio.

Según el manual del Spectrum, las páginas 1, 3, 4 y 6 pueden contener buffers de disco y el disco RAM. En los cargadores de los juegos del Magic Knight (p.ej.: Knight Tyme), las usan libremente para almacenar datos. Supongo que si cargas cosas directamente ahí, no puedes acceder al disco RAM... pero no es una gran pérdida. Lo de los buffers me preocupa algo más, pero todavía no he visto que se corrompan los datos una vez cargados. Hay una llamada al DOS que permite eliminar las cachés, intentaré usarla si veo problemas.
Última edición por zup el 13 Dic 2012, 21:07, editado 2 veces en total.
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!

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 » 13 Dic 2012, 16:43

Está claro que para hacer cosas serias, tanto para reubicar bloques de memoria, como para activar páginas, como para descomprimir datos de las páginas inaccesibles como RAM 7 (para cargarlos comprimidos antes en otras zonas de memoria disponibles), hay que usar C/M. Porque si quieres tirar de BASIC, pues te encuentras todas las limitaciones que has escrito y a veces, por mucho que queramos "portabilidad" de formatos, pues mejor ceñirnos a uno solo... que el TZX ya lo tenemos. :lol:

Este finde tengo demasiados compromisos y no puedo echarle un vistazo, pero me quedo con la copla... eso sí, si hago algo será en C/M puro y duro. Mientras las rutinas DOS SET 1346, DOS OPEN, DOS READ, DOS CLOSE y DOS MOTOR OFF tengan el mismo punto de entrada en +3DOS que en +3e, hasta podría ser compatible sin tocar nada más.

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, 18:27

Pues ya esta, ya lo tengo, preparo un TAP listo para pasar a DSK y lo posteo aqui... saludos... :mrgreen:


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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