Secuencia de arranque de la ROM del +3

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 08 Abr 2014, 21:05

No se muy bien si colocar esto aquí o en la sección de programación.

Me gustaría saber si me podéis decir cual es la secuencia que sigue la ROM del +3 al arrancar hasta que sale el menú.
En concreto me interesa saber si se selecciona otra ROM aparte de la 0 (osea la de la mitad inferior del CHIP A) antes de salir el menú del inicio.

El tema es que estoy haciendo un prototipo de un engendro para ampliar un Spectrum 16Kb a 512Kb, ponerle las ROMs del +3e, un interface multijoystick, interface de sonido AY y salida de video compuesto.
En resumen, quiero convertirlo en algo muy parecido a un plus 3. Se le conecta un divIDE y ya se tiene todo.

Hasta ahora he probado con éxito la ampliación de RAM, la salida de vídeo y el interface multijoystick, pero ahora mismo ando liado con las ROMs del +3e y no me funcionan.

Las ROMs las tengo todas en un sólo chip de 64Kb al que selecciono las líneas A14 y A15 según detecto los cambios de ROM con los accesos a los puertos 7FFD y 1FFD.

Concretamente, si las coloco en el orden que se supone que deben de ir me aparece la siguiente pantalla:

Imagen

Y las líneas de selección A14 y A15 están a 0. Osea, aparentemente no cambia de ROM para nada, aunque podría ser que tuviera mal el programa de la GAL que se encarga de gestionar esto (lo más seguro).

El cableado parece estar bien ya que si pongo solamente la ROM del gomas o la ROM 3 (que corresponde con la del modo 48Kb) el Spectrum me arranca bien.

Imagen

En definitiva, que como no tengo osciloscopio para vigilar lo que hace el interface me sería de mucha ayuda si alguno de los que circulan por aquí que se saben la ROM al dedillo me puede dar una pista de si se hace un cambio de ROM durante el arranque, ya que si no es así y pese a todo no me funciona, no será el programa de la GAL sino algún problema con el hardware.

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: Secuencia de arranque de la ROM del +3

Mensajepor mcleod_ideafix » 08 Abr 2014, 21:23

haciendo un debuggeado en Specemu, que te permite parar la ejecución cuando el Z80 escribe en ciertos puertos, veo que pasa de la ROM 0 a la 3, y de la 3 a la 0 (esto imagino que es en el gestor de interrupción). No veo que use otras ROMs durante el arranque. Eso sí: el paso de la ROM 0 a la 3, o de la 3 a la 0, no es inmediato, sino que durante unos cuantas instrucciones, el sistema está en ROM 2 o ROM 1, pero no se llega a ejecutar nada de ellas. La rutina que hace el cambio de ROM está en RAM.

-- Actualizado 08 Abr 2014, 20:25 --

wilco2009 escribió:Y las líneas de selección A14 y A15 están a 0. Osea, aparentemente no cambia de ROM para nada, aunque podría ser que tuviera mal el programa de la GAL que se encarga de gestionar esto (lo más seguro).

¿Puedes poner las ecuaciones de la GAL?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Re: Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 08 Abr 2014, 21:52

Gracias por contestar.

En primer lugar pongo el esquema del circuito.

Imagen

La línea A14 se lee de un buffer que ha su vez almacena la línea D4. La señal de reloj del buffer la genera la GAL con la siguiente ecuación:

Código: Seleccionar todo

   CLK7FFD = !NIORQ&!NWR&!A15&A14&!A1*!DIS128;


En cuanto a la línea A15 de la ROM, para no tener que meter un nuevo buffer lo hago todo con la GAL.
Las ecuaciones que introduzco yo en ABEL son las siguientes:

Código: Seleccionar todo

   ROMA15.ar = 0;
   ROMA15.clk = NMREQ;
   when !NIORQ&!NWR&!A15&!A14&!A1&!DIS128 then
      ROMA15 := D2;
   when !(!NIORQ&!NWR&!A15&!A14&!A1&!DIS128) then
      ROMA15 := ROMA15;


Y las que se generan....

Código: Seleccionar todo

ROMA15 := (D2 & !NIORQ & !NWR & !A15 & !A14 & !A1 & !DIS128
     # DIS128 & ROMA15
     # A1 & ROMA15
     # A14 & ROMA15
     # A15 & ROMA15
     # NWR & ROMA15
     # NIORQ & ROMA15);

ROMA15.AR = (0);

ROMA15.C = (NMREQ);

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: Secuencia de arranque de la ROM del +3

Mensajepor mcleod_ideafix » 08 Abr 2014, 23:26

Hay una cosa que me "chirría", y es que el reloj de ese registro, ROMA15, sea NMRQ. Cuando el valor de ROMA15 cambia, la señal /MREQ del Z80 está inactiva. Prueba a poner como reloj la señal NWR del procesador. El reloj, ¿es activo en flanco positivo o negativo? Si es activo en flanco positivo, cambia NWR por !NWR
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Re: Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 08 Abr 2014, 23:55

mcleod_ideafix escribió:Hay una cosa que me "chirría", y es que el reloj de ese registro, ROMA15, sea NMRQ. Cuando el valor de ROMA15 cambia, la señal /MREQ del Z80 está inactiva. Prueba a poner como reloj la señal NWR del procesador. El reloj, ¿es activo en flanco positivo o negativo? Si es activo en flanco positivo, cambia NWR por !NWR

Gracias por la ayuda. La verdad es que tienes toda la razon, el reloj no puede ser ese.
Mañana lo probare y te cuento que hoy ya es un poco tarde.

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Re: Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 10 Abr 2014, 08:33

Pues de momento estoy en duda si funciona, porque me empezó a fallar incluso sin la ROM, por lo que parece que hay alguna soldadura fria o algún problema con el cableado.
Ya os informo.

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Re: Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 12 Abr 2014, 00:54

Parece que ya he devuelto el cableado a la normalidad y he cambiado el reloj de la ecuación, pero sigue colgándose.

Luego para poder probar si el hardware hacía correctamente la selección de la página de la ROM he hecho la siguiente prueba:

1º - He quitado la EPROM externa y he dejado activa la ROM interma del Spectrum
2º - He colocado un par de diodos en A14 (rojo) y A15 (azul) del zócalo de la ROM para ver el resultado de la selección.
3º - He hecho un pequeño programa que cambia de página cada vez que pulsas una tecla.

Imagen

Y el resultado es este:



Como veis, aparentemente funciona correctamente, pero sin embargo con las ROMs originales se cuelga.

¿Alguna idea de cual puede ser el problema?

-- Actualizado 12 Abr 2014, 23:36 --

Noticias frescas compañeros.

He probado las ROMs del 128Kb y del +2 gris y funcionan a la perfección.

Imagen

Imagen

Imagen

Imagen

Las ROMs del +3 se empecinan en no funcionar. :?

Bueno, por lo menos confirmo que el bit bajo de la selección de la página de la ROM funciona correctamente.

Falta que funcione la otra parte. Funcionalmente parece que va bien, tal y como he mostrado en el post anterior.

¿Será que no tiene suficiente velocidad? ¿Será que no encuentra alguna parte del hardware del +2/+3 que le es necesaria para funcionar?

Ni idea.

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Re: Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 13 Abr 2014, 16:36

[glow=red]¡¡¡¡¡¡EUREKA!!!!![/glow] :D :D :D :D

Imagen

¡¡¡¡¡Por fin las ROMs del +2A/+3 funcionando en el interface!!!!!

Al final era un gran chorrada.

Os cuento el desarrollo.

Para poder diagnosticar el problema he copiado cuatro veces las ROMs del 48Kb cambiando el mensaje de inicio (no tenía la ROM de testeo que ha preparado mcleod para mi).

La idea era ir haciendo outs y y un reset en caliente para comprobar lo que salía en el mensaje de inicio.

Arrancamos y:

Imagen

Como era de esperar arranca la ROM 0, tal y como indican los leds y el mensaje en pantalla.

Para cambiar a la ROM 1 escribimos:

Código: Seleccionar todo

OUT 32765,16
RANDOMIZE USR 0


El resultado es:

Imagen

De momento la cosa va bien.

Como ya estamos en la ROM1, para cambiar a la ROM 3 escribimos:

Código: Seleccionar todo

OUT 8189,4


Y se cuelga sin darme tiempo a más.

Imagen

Para la ROM 2 ocurre exactamente lo mismo, lo que delimita el tema al bit A15 de la ROM y descarta incompatibilidad hardware del +3, ya que me está ocurriendo exactamente lo mismo con la ROM del gomas. Vamos por buen camino. :D

Si nos fijamos en la imagen de más arriba nos damos cuenta que es exactamente la misma que aparece cuando no hay ROM en el Spectrum. Mosqueo, mosqueo. ::? ::?

Dándole vueltas al tema me da por comprobar /CE del chip y Eureka!!!!, cuando tenemos seleccionada A15 /CE se pone a 1. :o

Y aquí es donde está el error. Resulta que tengo implementadas las señales /ROM1OE y /ROM2OE, por lo que se pueden deshabilitar las ROM 1 y 2 por separado de las ROMs 3 y 4.
Esta funcionalidad la he implementado, por espacio, en la GAL del joystick.
Pues bien, estaba suelto el cable de la señal /ROM2OE.

Lo conecto y hago pruebas.

Imagen

Imagen

Ahora sí, las ROMs 2 y 3 funcionan!!!!.

Es hora de probar las ROMs del +3........

Imagen

TACHAN!!!!!!!!! FUNCIONA!!!!!!!!

Joder la de tiempo que me ha hecho perder el puñetero cablecito. :D :D :D

ZX-81
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 130
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 16 veces
Gracias recibidas: 39 veces
Contactar:

Re: Secuencia de arranque de la ROM del +3

Mensajepor ZX-81 » 27 Abr 2014, 18:23

Nontiendo nada. ¿Resolviste al final este problema y ahora tienes otro?. Pregunto por lo qeue estuvimos hablando en la RM...
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 401
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600
Gracias dadas: 1 vez
Gracias recibidas: 7 veces

Re: Secuencia de arranque de la ROM del +3

Mensajepor wilco2009 » 27 Abr 2014, 21:25

Sí. El problema anterior era la habilitación de la ROM.

Ahora mismo parece que funciona pero arranca con algún valor de variables del sistema incorrecto, pero por lo demás funciona totalmente OK.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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