Avances en el desarrollo del ZX-Uno

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
aowen
Commodore 128
Commodore 128
Mensajes: 90
Registrado: 14 Mar 2014, 14:31
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum +2
consola_favorita: Nintendo GameBoy
Primera consola: Nintendo GameBoy

Re: Avances en el desarrollo del ZX-Uno

Mensajepor aowen » 24 Mar 2014, 16:53

mcleod_ideafix escribió:
aowen escribió:Ok, you don't want an NMI to occur when there's no handler present, but is it possible to isolate the machine NMI and the divMMC NMI. If not I'd rather have the machine NMI than the divMMC one as it's more useful to me.

DIVMMC can be enabled or disabled at boot. If disabled, NMI behaves as usual. When I boot with Open SE IV, DIVMMC is disabled so if I press NMI button, I receive the expected L Break Into Program 0:1


It's "SE Basic IV", not "Open SE IV". It's a fork.

How am I going to run esxDOS if divMMC isn't active? I want esxDOS and and the native NMI, not the pointless game loader.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Avances en el desarrollo del ZX-Uno

Mensajepor antoniovillena » 24 Mar 2014, 17:38

Ya tengo listo el esquemático con el LX9. La mayoría de los pines están sin conectar porque depende de como salga el ruteado, no obstante haré una asignación para ver si nos faltan pines.

Los cambios:
  • Ya no necesitamos el regulador de 2.5V. Esto es una gran ventaja porque nos ahorramos un regulador. La única (aunque leve) desventaja es que para el cable RGB necesitamos una resistencia, la que va al pin 16 del Scart.
  • Todos los pines son configurables entrada/salida, a diferencia del 250E donde había sólo entradas. Ya no nos tenemos por qué preocupar de elegirlos en el bus de expansión (cualquiera nos vale).
  • Es multiboot. Esto significa que podemos cargar 2 o más configuraciones distintas (por ejemplo un Spectrum y un Jupiter Ace) y seleccionarlas en la BIOS. Eso sí, habría que portar la BIOS al Jupiter Ace.
  • He aumentado la SPI Flash de una W25X40 a una W25Q80. En realidad nos valdría la antigua, pero nos viene bien tener espacio de más para el Multiboot, además de que el bitstream de la LX9 es más grande. Otra ventaja es que podemos cargar los datos 4 veces más rápido.

Los que sepáis del tema, si podéis echadle un vistazo para ver si me he equivocado en algo o me he dejado algo atrás.

Cosas a tener en cuenta para el ruteado:
  • El conector microUSB debe ser más robusto, teniendo 4 anclajes en lugar de 2.
  • Lo de los planos de masa que sugirió McLeod para evitar el ruído. Esto necesitaría una mejor explicación, porque en el prototipo actual veo que la mayoría del área en la capa inferior es un plano de masa.
  • Mejorar las huellas de los conectores para que las patitas de plástico encajen en la PCB. Que yo recuerde tenían patitas: conectores jack, conector SD, conector microSD y conector PS/2.
  • PCB un poco más gruesa. Esto no es del ruteado, pero lo pongo aquí para no olvidarlo. La actual es de 1.0mm, con 1.4mm creo que es suficiente.
  • Si es posible hacer una version alternativa a 4 capas. Puedo pedir 5 PCBs a 2 capas y otras 5 a 4 capas para los 10 prototipos y las sorteamos. Esto encarece el prototipo pero nos quedamos tranquilos para la versión final.

-- Actualizado 24 Mar 2014, 17:54 --

El pdf que pongo aparte (zxuno0.13_lx9_pinout_arbitrario) es para comprobar que no faltan pines, no es el esquema definitivo.
Adjuntos
zxuno0.13_lx9_pinout_arbitrario.pdf.zip
(67.96 KiB) Descargado 283 veces
zxuno0.13_lx9.zip
(137.35 KiB) Descargado 283 veces

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: Avances en el desarrollo del ZX-Uno

Mensajepor mcleod_ideafix » 24 Mar 2014, 20:13

antoniovillena escribió:[*]Lo de los planos de masa que sugirió McLeod para evitar el ruído. Esto necesitaría una mejor explicación, porque en el prototipo actual veo que la mayoría del área en la capa inferior es un plano de masa.

Desgraciadamente, no debajo de los sitios donde realmente la necesitamos, que es en la pista del reloj SPI para la flash, por ejemplo.
Para señales susceptibles de superar los 10MHz, la recomendación es:
- Ancho de pista de 20mil (esto puede ser complicado de conseguir, pero si no son 20, pues lo más "gordita" posible)
- También, a ser posible, para estas pistas, evitar vías. Es decir, rutarla toda ella en la misma cara. Si esto no es posible y hay que cambiar de cara, intentar que la vía caiga en una posición múltiplo de la longitud de onda de la señal que va a pasar por esa pista. Por ejemplo: imagina que vamos a rutar la señal de reloj de 50MHz, y que no puede hacerse toda la pista en la misma cara, sino que hay que poner una vía. La longitud de onda de una señal de 50MHz es 6 metros (longitud de onda = velocidad de la luz / frecuencia de la señal). No vas a poner una vía a 6 metros del comienzo de la pista, pero sí puedes hacerlo en el múltiplo (potencia de 2 en realidad) más cercano. Popngamos que el múltiplo es 1024; pues la vía podría ponerse a 6000 / 1024 = 5,86 mm del comienzo de la pista. Esto es para minimizar rebotes y pérdida de energía de la señal (que se pierde en forma de radiación, y eso no es bueno) por culpa de la aparición de ondas estacionarias, que ocurre cuando cambia el medio (cuando pasamos de una pista en una cara a otra en la otra cara, con una vía en medio).
- "Escoltando" a la pista, a su izquierda y derecha, sendos planos de masa (como si fuera una cable coaxial en 2D)
- Plano de masa en la otra cara debajo de la pista (o pista de masa siguiendo el mismo trayecto que la pista.)

antoniovillena escribió:[*]PCB un poco más gruesa. Esto no es del ruteado, pero lo pongo aquí para no olvidarlo. La actual es de 1.0mm, con 1.4mm creo que es suficiente.

Sí, por favor: más gruesa. Con la actual, en cuanto presionas un poco por la razón que sea, por ejemplo, para pinchar el JTAG, hay desconexiones momentáneas, probablemente por alguna soldadura no demasiado estable. Al abombarse la placa, el problema se acentúa.

Más cosas (no he visto aún el PDF, así que igual lo has tenido en cuenta):
- Añadir un choque "common mode" en la línea de alimentación de 5V. Estos choques son en realidad dos choques pegaditos entre sí, y dispuestos de forma que sólo se dejan pasar corrientes que circulen en sentidos opuestos, bloqueando aquellas corrientes que circulen en el mismo sentido (common mode). Sirve como filtro EMI y nos va a ahorrar más de un disgusto con los alimentadores USB de los chinos.
Ejemplo de choke common mode que sirve muy bien:
http://www.digikey.com/product-detail/e ... ND/3024968

- Añadir una "ferrite bead" en formato SMD (son como las resistencias SMD 0805, así que no ocupan casi nada) a la salida de cada uno de los reguladores de tensión, y otra más para la línea de alimentación analógica del AD724 (¡ojo! la analógica, no la digital: no las unas entre sí).
Yo he comprado éstas, para unos experimentos malévolos que voy a hacer con el prototipo:
http://www.ebay.es/itm/111216167196?ssP ... 1497.l2649

- En las pistas que van al conector de expansión, escoge una o dos (por ejemplo las dos más cortas) y trátalas como si fueran señales de reloj. Es decir, plano de masa por debajo y rodeadas de área de masa a izquierda y derecha. La idea es poder tener al menos un par de señales por las que rutar señales de reloj a posibles dispositivos externos (por ejemplo, el Spectranet de Winston necesita una señal de 25MHz para el Wiznet 5100)

- Idea: el conector PS/2 en realidad puede albergar dos dispositivos: ratón y teclado. Para ratón hay ya un "estándar", que es el Kempston mouse (VELESOFT de esto puede decirnos mucho), y hay implementaciones usando pequeñas CPLD para convertir la señal PS/2 de un ratón en una señal igualita a la de un Kempston mouse original de Spectrum. Pues bien, para ello, no hay más que añadir dos señales más de la FPGA al conector PS/2, concretamente a los pines 2 y 6 del PS/2, con sus respectivas resistencias de 270 ohmios, siguiendo esta ilustración, que además indica cómo es el cable "split" que saca para tener ambos dispositivos. Fíjate que si pinchas un teclado directamente al conector PS/2 funcionará, ya que las señales coinciden. No así con el ratón, que necesita el split.
cable_ps2_raton_y_teclado.gif
cable_ps2_raton_y_teclado.gif (9.76 KiB) Visto 6468 veces


VELESOFT tiene algunos juegos parcheados para ser usado con el raton Kempston en lugar del teclado, entre ellos: Arkanoid, R-Type, etc.

- La ubicación de los leds: si pueden caer a la altura de donde están los agujeritos en las cajas de Raspberry Pi para los leds, pues mejor, se podrán ver desde fuera :D
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Avances en el desarrollo del ZX-Uno

Mensajepor antoniovillena » 24 Mar 2014, 23:26

Ok. Ya he cambiado el esquemático con los cambios propuestos.
Adjuntos
zxuno0.14_lx9.zip
(141.32 KiB) Descargado 300 veces

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: Avances en el desarrollo del ZX-Uno

Mensajepor mcleod_ideafix » 24 Mar 2014, 23:40

aowen escribió:How am I going to run esxDOS if divMMC isn't active? I want esxDOS and and the native NMI, not the pointless game loader.

Ok. That's fixed now. There is a new boot option to disable NMI handling by DIVMMC. So you can boot with SE Basic IV, enable DIVMMC with ESXDOS, and disable NMI detection by DIVMMC, so when a NMI is triggered, is handled by the SE Basic IV firmware.
I'm running the SE Basic IV version from Fuse, as you suggested (is it SE Basic IV too?) and I can boot it with DIVMMC, use dot commands to list SD contents, etc, but seems that the entry points for LOAD and SAVE are not the same as the standard ROM and the .tapein command doesn't work. Am I missing something?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
aowen
Commodore 128
Commodore 128
Mensajes: 90
Registrado: 14 Mar 2014, 14:31
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum +2
consola_favorita: Nintendo GameBoy
Primera consola: Nintendo GameBoy

Re: Avances en el desarrollo del ZX-Uno

Mensajepor aowen » 24 Mar 2014, 23:50

mcleod_ideafix escribió:
aowen escribió:How am I going to run esxDOS if divMMC isn't active? I want esxDOS and and the native NMI, not the pointless game loader.

Ok. That's fixed now. There is a new boot option to disable NMI handling by DIVMMC. So you can boot with SE Basic IV, enable DIVMMC with ESXDOS, and disable NMI detection by DIVMMC, so when a NMI is triggered, is handled by the SE Basic IV firmware.
I'm running the SE Basic IV version from Fuse, as you suggested (is it SE Basic IV too?) and I can boot it with DIVMMC, use dot commands to list SD contents, etc, but seems that the entry points for LOAD and SAVE are not the same as the standard ROM and the .tapein command doesn't work. Am I missing something?


The entry points are the same as the standard ROM but it is possible that it is failing a byte check. The version in Fuse is 4.0.4. Try using this version (updated for the new keyboard layout and with the tape trap patched) instead:

https://dl.dropboxusercontent.com/u/156 ... sic405.zip

Also I agree that Kempston mouse over PS/2 would be a nice feature. As you say, it can work over one port with one of these splitter cables:

http://www.amazon.com/Cables4PC-LAPTOP- ... B000U64YLU

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: Avances en el desarrollo del ZX-Uno

Mensajepor mcleod_ideafix » 25 Mar 2014, 00:51

aowen escribió:The entry points are the same as the standard ROM but it is possible that it is failing a byte check. The version in Fuse is 4.0.4. Try using this version (updated for the new keyboard layout and with the tape trap patched) instead:


This is what happens to me:
SE Basic IV with DIVMMC and no DIVMMC NMI: dot commands work, but LOAD "" doesn't load from SD card. Instead, it loads from the physical cassette. Scroll? message only stops with NMI.
SE Basic IV with DIVMMC and DIVMMC NMI: dot commands work. Loading from the NMI browser works sometimes. LOAD "" works sometimes, loading from the SD card.
SE Basic IV w/o DIVMMC : everything works as usual. When the Scroll? meesage appears and I press "N", the program interrupts.

I'm afraid this is something with DIVMMC support, but it's weird that it works with the Sinclair ROM and not with SE Basic IV.

EDIT:
It's the .tapein command the one that doesn't work. Booting SE Basic IV 4.0.5 with DIVMMC and DIVMMC NMI enabled.
- I fire up the NMI browser, choose a TAP and press ENTER. Returns to the (C)1981 Nine Tiles... message.
- I issue LOAD "" , the game loads, and at the end, the computer resets to (C)1981 Nine Tiles... message.
- I issue LOAD "" and the game loads again, this time with no issues.
- I use the .tapein command to load another TAP file. When I issue LOAD "", the previous game (the one I selected with the NMI browser) loads and executes.
- While I'm working in this configuration, any error (for example, using a non defined variable from BASIC) causes the computer to reset, or to freeze. This also happens if I disable the DIVMMC NMI. Remember that the DIVMMC automaps upon executing an instruction at address $0008.

If I boot SE Basic IV 4.0.5 with DIVMMC but without DIVMMC NMI, the NMI browser obviously doesn't show up. The .tapein command doesn't anything, and hence, the LOAD "" command loads from the default source, the cassette. It seems there is something different in the way programs loads either from the NMI browser, or from the combination .tapein / LOAD "" .

The same hardware configuration (DIVMMC with or without DIVMMC NMI), but with the Sinclair ROM doesn't show any of these issues.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Avances en el desarrollo del ZX-Uno

Mensajepor antoniovillena » 25 Mar 2014, 09:59

Se me ha ocurrido otra feliz idea. Podemos poner huellas tanto para el DB9 como para el conector VGA en el mismo sitio y que cada uno decida cual poner. Eso sí, irremediablemente un conector debe estar más salido que el otro. La huella conjunta quedaría tal que así:

dual.png
dual.png (18.6 KiB) Visto 6368 veces


Como el conector VGA sólo necesita 5 señales, se pueden usar las mismas del DB9 (que tiene 7). Otra opción es aprovechar los DACs de 3 bits del RGB/Video Compuesto, pero esto me gusta menos porque no permite usar a la vez VGA y RGB/Compuesto. Si no me equivoco tendría que poner una resistencia y un condensador para cada uno de los 3 canales para implementar el DAC delta-sigma. Evidentemente estos componentes son opcionales y deben ser anulados (sin soldar o soldando puentes) para trabajar con el DB9 (Joystick).

A mí personalmente no me interesa mucho la salida VGA, porque requiere sintetizar un scan doubler y no es una salida nativa de spectrum. Pero hay algunos clones rusos que se basan en esta salida, por lo que al menos en rusia tendremos algunos potenciales seguidores si implementamos dicha salida, aunque sea como opción.

Avatar de Usuario
aowen
Commodore 128
Commodore 128
Mensajes: 90
Registrado: 14 Mar 2014, 14:31
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum +2
consola_favorita: Nintendo GameBoy
Primera consola: Nintendo GameBoy

Re: Avances en el desarrollo del ZX-Uno

Mensajepor aowen » 25 Mar 2014, 13:21

mcleod_ideafix escribió:
aowen escribió:The entry points are the same as the standard ROM but it is possible that it is failing a byte check. The version in Fuse is 4.0.4. Try using this version (updated for the new keyboard layout and with the tape trap patched) instead:


This is what happens to me:
SE Basic IV with DIVMMC and no DIVMMC NMI: dot commands work, but LOAD "" doesn't load from SD card. Instead, it loads from the physical cassette. Scroll? message only stops with NMI.
SE Basic IV with DIVMMC and DIVMMC NMI: dot commands work. Loading from the NMI browser works sometimes. LOAD "" works sometimes, loading from the SD card.
SE Basic IV w/o DIVMMC : everything works as usual. When the Scroll? meesage appears and I press "N", the program interrupts.

I'm afraid this is something with DIVMMC support, but it's weird that it works with the Sinclair ROM and not with SE Basic IV.

EDIT:
It's the .tapein command the one that doesn't work. Booting SE Basic IV 4.0.5 with DIVMMC and DIVMMC NMI enabled.
- I fire up the NMI browser, choose a TAP and press ENTER. Returns to the (C)1981 Nine Tiles... message.
- I issue LOAD "" , the game loads, and at the end, the computer resets to (C)1981 Nine Tiles... message.
- I issue LOAD "" and the game loads again, this time with no issues.
- I use the .tapein command to load another TAP file. When I issue LOAD "", the previous game (the one I selected with the NMI browser) loads and executes.
- While I'm working in this configuration, any error (for example, using a non defined variable from BASIC) causes the computer to reset, or to freeze. This also happens if I disable the DIVMMC NMI. Remember that the DIVMMC automaps upon executing an instruction at address $0008.

If I boot SE Basic IV 4.0.5 with DIVMMC but without DIVMMC NMI, the NMI browser obviously doesn't show up. The .tapein command doesn't anything, and hence, the LOAD "" command loads from the default source, the cassette. It seems there is something different in the way programs loads either from the NMI browser, or from the combination .tapein / LOAD "" .

The same hardware configuration (DIVMMC with or without DIVMMC NMI), but with the Sinclair ROM doesn't show any of these issues.


It sounds to me like the TRAP logic and the NMI logic are linked so if you kill NMI you kill TRAPs as well. What's the behavior with the original ROM and divMMC NMI switched off? The only thing I've got to test against is the ZX Spectrum SE emulation in Fuse with divIDE, but I'll see if I can get that running and do some tests.

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: Avances en el desarrollo del ZX-Uno

Mensajepor mcleod_ideafix » 25 Mar 2014, 15:24

aowen escribió:What's the behavior with the original ROM and divMMC NMI switched off? The only thing I've got to test against is the ZX Spectrum SE emulation in Fuse with divIDE, but I'll see if I can get that running and do some tests.

It works. The NMI resets the computer (as it is expected with the Sinclair ROM if you don't poke the NMI_ADDR system var). dot commands (.cd, .ls) work. .tapein works, and LOAD "" loads the program selected with .tapein with no issues.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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