+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:

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

Mensajepor zup » 08 Dic 2012, 23:39

Estoy intentando pasar unos cuantos juegos de Spectrum a diskette / disco duro. Me he encontrado un problema "curioso" con un juego de 128k, en concreto el Gryzor.

La historia es que este juego carga desde BASIC, y carga un montón de datos. En concreto, carga las páginas 7, 6, 4, 3, 1, 2 y 0 (por este orden). Si carga desde cinta, no hay problema. El problema es que si carga desde disco, se resetea. De momento, mi teoría es que una de estas páginas sobreescribe parte de los datos del +3 DOS y causa el reseteo, o bien el +3 DOS está metiendo datos en alguna página ya cargada y corrompe el programa.

He metido algún otro juego (Knight Tyme, Spellbound) y funcionan bien, pero no usan tantos bancos de RAM como el Gryzor. Me gustaría saber en qué orden se deben cargar las páginas, o cuál creéis que es la que tiene más papeletas para dar problemas. Gracias.
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
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 » 09 Dic 2012, 00:11

Exacto. El +3DOS usa no una, sino varias páginas de la memoria para guardar la caché del disquete. Tienes antes que reducir esa caché llamando a una rutina que se llama algo así como SET_DOS_1346 (+3DOS usa las páginas 1,3,4 y 6 por defecto). Si el juego usa tooodas las páginas de RAM entonces tendrías que hacerte tu propia rutina de carga leyendo sectores "a pelo" en lugar de ficheros, para "bypassear" así el sistema de ficheros y la caché.
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 » 09 Dic 2012, 06:05

Tambien puedes comprimir los datos del juego, cargarlo en las paginas no conflictivas y luego descomprimir desde C/M machacando sin problemas las paginas usadas por el +3 DOS, al menos asi lo hice yo con el SHADOW OF THE UNICORN para dejarlo en un solo bloque que se descomprimia ocupando 64K en el modo ALL RAM DEL +3/+2A, del mismo modo he adaptado unos cuantos juegos en formato TAP preparados para ser facilmente transferibles a disco, aunque la mayoria de 48K, para que se puedan cargar sin problemas tanto desde casette como desde disco y en cualquier modelo de spectrum, echales un ojo en www.turboload.co.nr y nos cuentas. :D

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

Vale, hora de revisar unas cuantas cosillas...

Supongo que lo de las páginas 1346 y la página 7 es la explicación a por qué el Gryzor casca cargando desde disco pero no desde cinta. Posiblemente sea la explicación de por qué el Amaurote de 128k carga perfectamente en un 128k/+2 pero no en los +2A/+3 (curiosamente la versión de 48k carga bien desde cinta, desde disco o desde donde quieras).

Voy a revisar los cargadores de Knight Tyme y Spellbound. El primero carga las páginas 0, 3, 4, 6 y 7; el spellbound carga las 0, 1, 3, 4 y 6 (más las pantallas de carga, claro). Estos dos juegos vienen de una compilación que publicó Mastertronic en su día en diskette... así que asumo que sus cargadores son 100% compatibles con +3.

También me toca revisar el Stormbringer. Este juego carga las páginas 0, 1, 3, 4 y 6; no encontré versión en diskette así que lo pasé tal cual de cinta a disco... aparentemente carga pero vete a saber si ha corrompido algo por debajo y no se nota.

(P.D.: Si alguien quiere que le pase los diskettes para espiarlos, que me pase un PM. Algunos juegos que he metido son denied, y no creo que sea buena idea ponerlos en páginas web)

EDITO:
Los cargadores de los Magic Knight (Knight Tyme, Spellbound, Stormbringer) cargan las páginas en la dirección 32768 y luego usan una rutina en c/m para colocarlas en la página que quieren. La rutina viene a ser algo así:

Código: Seleccionar todo

org 26210
di      ; Deshabilita las interrupciones
ld a,1      ; En realidad aquí se POKEA la página a meter (26212)
ld bc,32765
out (c),a   ; Coloca la página de memoria A
ld hl,32768
ld de,49152
ld bc,16384
ldir      ; Transfiere el bloque desde la dirección 32768
      ;   hasta la página seleccionada
ld a,16
ld bc,32765
out (c),a   ; Coloca la página de memoria 0 y la ROM 1 (sintaxis)
ei      ; Habilita interrupciones
ret      ; Retorna al BASIC


Ninguno de estos juegos toca la página 7 (que se supone reservada para DOS), pero tampoco liberan la memoria asignada en las páginas 1346 (la rutina que sugería mcleod-ideafix). Me extraña por dos motivos:
a) Cargan tranquilamente páginas desde disquete. Si se usan esas páginas como caché, deberían corromper algo.
b) En el manual del +3 (joder, ahí viene TODO sobre el DOS), especifican dos cosas contradictorias: que se puede deshabilitar completamente la caché y el disco RAM (poniendo 0 como número de buffers reservados) y que siempre existe un mínimo de 4 sectores reservados ¿?

Así que en el caso del Amaurote, tendría que mirar cómo carga las páginas (probablemente haga algo legal en los 128k e ilegal en los +2A/+3); en el caso del Gryzor, usaré el cargador del Knight Tyme modificado... cargaré todas las páginas normalmente excepto la 7. Esa la cargaré la última, en la memoria de pantalla y la volcaré a la página 7 antes de saltar al código máquina.
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
Alan_Smithee
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 170
Registrado: 11 Mar 2007, 22:57
Gracias dadas: 8 veces
Gracias recibidas: 63 veces

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

Mensajepor Alan_Smithee » 09 Dic 2012, 15:01

Tuve ese mismo problema en los viejos días. Yo era el feliz dueño de un plus 3, y un amiguete, que trabajaba de mozo de almacen en ERBE, de vez en cuando me pasaba juegos que les regalaban allí. En una de estas me pasó una copia original en cinta del Operation Wolf, cuya versión para 128k tenía la virtud de comerese todas las páginas de memoria habidas y por haber. Yo, por supuesto, estaba empeñado en pasarla a disco, pero mis básicos conocimientos de código máquina no daban para tanto.

Lo había dejado por imposible hasta que un día recordé el artículo de Microhobby sobre las rutinas de acceso a disco de bajo nivel del +3, que básicamente lo que hacían era acceder al disquette de un modo independiente al del sistema de ficheros propio de la máquina, permitiendo virguerías como meter información en el disco en sectores de formatos extraños y cosas de esas que vienen muy bien para hacer protecciones anti-copia. Como estas rutinas no requieren ninguna información del +3DOS en ninguna de las páginas, podrían resolverme la papeleta, aunque fuera a costa de acceder al disco "sector a sector" en lugar de manejarme cómodamente con nombres de ficheros.

¡Y funcionó! :jumper: Aunque no fue fácil y tuve que pasar por un largo proceso de ensayo y error. Lo más lioso fue descubrir que tenía que ubicar estas rutinas en cualquier página de memoria que no tuviese compartido el refresco de pantalla (no recuerdo cuales eran ahora, estoy fuera de casa y no tengo la documentación a mano) ya que los breves milisegundos de diferencia en tiempo de ejecución que ello suponía eran suficientes para que la muy delicada sincronización que requería este acceso a bajo nivel se fuera al traste... lo cual a su vez me obligaba a unos cuantos malabarismos para meter estas rutinas en un lugar apropiado, quitar el trozo del juego original que tenía que estar allí, reubicarlo en otra parte (que al final tuvo que ser la zona de pantalla), volverlo a poner todo en su sitio una vez cargadas las 7 páginas...

¡Ahora que te aseguro que mereció la pena el trajin! 8-) Las rutinas en cuastión, según Mhoogle, estaban en el artículo de la página 18 del nº 194 de Microhobby, pero por algún motivo en el momento de escribir estas líneas al intentar acceder a ellas me da un error del servidor (esperemos que pasajero ^_^')

--

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 » 09 Dic 2012, 15:20

Amaurote conseguido. Ahora me falta el Gryzor.

La idea es evitar usar el acceso a disco desde c/m, y mucho menos a nivel de sectores. El tema es que ahora los estoy pasando a disquetes mediante el emulador; más tarde los voy a pasar a disco duro. El BASIC del +3e es 100% compatible con el del +3, supuestamente la tabla de llamadas de +3DOS también... pero no creo que sea buena idea acceder a un disco duro a nivel de sectores.

El Operation Wolf también lo tengo en mi lista de deseados... la versión 128k carga TODAS las pantallas de una vez y es una firme candidata a pasar a disco. De hecho, la versión de Erbe carga todo desde BASIC... así que me facilita el trabajo.

EDITO: He pasado Typhoon y el Operation Wolf. De hecho, el Operation Wolf NO ha necesitado prácticamente cambios para funcionar desde disco (a menos que me haya perdido algo y la haya liado con la página 7).
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
Alan_Smithee
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 170
Registrado: 11 Mar 2007, 22:57
Gracias dadas: 8 veces
Gracias recibidas: 63 veces

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

Mensajepor Alan_Smithee » 09 Dic 2012, 18:20

Aah, perdón! No había entendido que se trataba para +3e y disco duro. Evidentemente, no, lo de trabajar con sectores al margen del sistema operativo era perfectamente viable en mi caso, donde se daba por supuesto que se iba a usar esa cara del diskette de +3 exclusivamente para cargar ese Operation Wolf, pero sería totalmente contraproducente para un disco duro, ya que, en el mejor de los casos, los sectores que escribieses a bajo nivel serían automáticamente sobreescritos en la siguiente ocasión en que el SO grabase algo en el disco duro por la vía "normal".

Si +3e no necesita reservar un espacio en la página 7 (o en ninguna otra) para sus manejos internos entonces probablemente sí que lo hayas logrado. Si no es el caso, lo más probable es que alguna de las fases del Operation Wolf se cargue corrupta. Para asegurarte prueba alguno de los trucos del Tipshop para pasar de fases y comprobar que al menos todas están ahí bien:

http://www.the-tipshop.co.uk/cgi-bin/in ... ion%20Wolf

Y si de verdad rula sin problemas, eer... ¡te habrás ganado mi más soberana envidia por lo sencillo que te lo han puesto las facilidades que ofrecen hoy en día los emuladores y +3e para hacer en un rato lo que a mí me llevó varias semanas de sudor y lágrimas! :mrgreen:

--

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, 00:01

GUAY!!! Tienes pensado poner tus versiones modificadas a disposicion del resto de mortales? Mas que nada porque me gustaria intentar hacer versiones comprimidas de tus modificaciones tanto para disco como para casette... :roll:

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, 05:09

Yo también pensé que querías pasar juegos a disquete, no a un +3e. En el +3e la llamada a SET_DOS_1346 funciona de hecho mejor que con el +3DOS original (en donde quizás tenga un bug).
Con el +3e, desde disco duro, sí pude hacerme un cargador para el "Where the time stood still", pero ese mismo cargador aplicado a los mismos ficheros pero en disquete, cargaba el juego corrupto.

Si la idea es pasar esos juegos a un +3e, y no son juegos que necesiten usar el disco una vez cargados del todo, ¿no te valdría crear un snapshot al principio del propio juego, y en el +3e cargarlo con el comando SPECTRUM? Yo tengo una partición en mi +3e con un programita en BASIC que muestra la lista de los juegos que hay, eliges uno y lo carga automaticamente de esta forma.

Atinando con la creación del snapshot, puedes hacerlo justo cuando ha terminado la carga y está a punto de empezar el juego en sí. De esta forma, la pantalla que se ve durante la carga del snapshot sigue siendo la pantalla de carga del juego.
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: 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, 09:11

La idea era pasar los juegos a disquete, con cargador BASIC. Si funcionan en disquete, no debería haber ningún problema para que lo hagan desde el disco duro (el objetivo final). Además, si los dejo así en teoría deberían funcionar en cualquier +3 (o 128k si los paso a cinta). 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.

En principio estoy usando para pasar los ficheros un Spectrum +3 "normal" emulado, ya que las operaciones de disco son más rápidas. Estoy metiendo los juegos en disquetes de 720k para que quepan más y tenga menos ficheros, luego pasaré los ficheros de los disquetes al disco duro del +3 usando el HxC.

No tengo ningún problema en compartir los discos, pero hay algunos juegos que están como "denied" en WOS y no es plan que me fastidien una web por eso. Si alguien quiere arriesgarse, le paso los discos por PM y que los publique.

Los programas que he pasado hasta ahora estaban desprotegidos y cargaban desde el BASIC normal, el mayor trabajo que han planteado ha sido mirar a ver en qué compilaciones se publicaron sin protección de ningún tipo. 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). El Operation Wolf aparentemente funcionó, pero tuve el +3 emulado corrompió el disquete y me vuelve a fallar (volveré a mirarlo). Gryzor nunca me ha funcionado.

Los cambios que he hecho en los juegos son:
- Poner nombres de fichero por todas partes (obviamente).
- Pantallas de carga: he dejado las pantallas de carga y he puesto un PAUSE 200 antes de entrar al juego (o antes de que el juego las corrompa, como en el Sir Fred). He eliminado alguna pantalla publicitaria (la de la FAD), pero no he quitado ninguna de juego (por muy malas que fueran). Los juegos que no tenían pantalla de carga es porque en la edición que he convertido no había. En el Toi Acid Game he hecho que el cargador de cada fase también tenga pantalla de presentación (en el original sólo había una intro por cara con pantalla).
- Ficheros compartidos: algunos juegos con múltiples fases (Thunderbirds, Game Over), tienen ficheros "repetidos". Se ha dejado solo uno, y los cargadores de BASIC de todas las partes lo utilizan. Si se van a trasladar otra vez a cinta, comprobar el orden de carga de los ficheros. De hecho, recomendaría comprobar SIEMPRE el orden de carga para que la cinta quede bien.
- Preguntas ofensivas: Jet Set Willy y TMHT ya no hacen preguntas raras al principio.

Lo que NO he hecho:
- No he eliminado ninguna pantalla de carga, excepto las de la FAD.
- No he comprimido ningún juego.
Imagino que alguien que quiera "apretar" el máximo de juegos por disquete o tarjeta flash podría querer hacerlo... pero incluso en 16 megas (una partición +3DOS) caben suficientes juegos como para que sea innecesario.

Con tiempo, miraré si paso algún programa de 48k con cargador básico (los que llaman a las rutinas del BASIC desde c/m), pero con los que están desprotegidos tengo para entretenerme un rato.
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 11 invitados