Cacharreando con el prototipo 2 del ZX-Uno

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
yombo
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 190
Registrado: 01 Ago 2014, 22:52
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: TV Games/Pong Clone
Primera consola: TV Games/Pong Clone

Re: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor yombo » 20 Feb 2015, 23:18

mcleod_ideafix escribió:Otra cosa en la que se puede ayudar es indagando en el resto de proyectos de clones de Spectrum que usan el T80 (creo que practicamente todos) a ver qué parches han introducido sus desarrolladores en el propio T80.


Lo único que he encontrado son proyectos con versiones anteriores del T80, o con la misma que usáis vosotros (la 247)
Excepto éste de aquí que es el único que he encontrado que ha añadido algo a la 247:
https://github.com/wsoltys/mist-board/tree/master/cores/zxgate/t80/trunk/rtl/vhdl

Pero he hecho el diff y lo que ha añadido son unas señales SavePC, RestorePC etc, que parece por cómo las usa que son de un circuito para debuguear.
Y además le faltan unas líneas que tenéis en vuestro T80.vhd que son de flags, o sea que muy buen ejemplo no es.
De todas formas en T80_MCode.vhd hay cambios en los estados que no comprendo.

A ver si sirve. :roll:

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: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor Namek » 22 Feb 2015, 12:23

Mejias3D escribió:Este es mi primer experimento de software con ZX-Uno. Franjas estáticas horizontales de 2 colores a Full Screen, conseguidas solamente usando un programa en Basic.

Solo 3 detalles a tener en cuenta:

    - Solo os funcionará en el prototipo versión 2 de ZX-Uno, en su estado actual de desarrollo, con el core T80 y la ROM Spectrum 48K.

    - Para ejecutarlo debéis hacerlo con RUN 100 (o bien con GO TO 100).

    - Es posible (o no) que necesitéis pulsar espaciadamente alguna tecla un par de veces o 3, para cuadrar las franjas del borde.


Para conseguir franjas de colores estables en el borde en cualquier modelo de Spectrum, solo tienes que añadir un PAUSE 1 antes del GOTO, por ejemplo:

10 BORDER 1:BORDER 2:BORDER 3:BORDER 4:BORDER 5:BORDER 6:BORDER 0:PAUSE 1:GOTO 10

Saludos... :mrgreen:

Avatar de Usuario
Mejias3D
Commodore 128
Commodore 128
Mensajes: 97
Registrado: 07 Dic 2014, 20:05
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Videopac
Primera consola: Videopac
Ubicación: Palma de Mallorca
Contactar:

Re: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor Mejias3D » 22 Feb 2015, 13:22

Namek escribió:Para conseguir franjas de colores estables en el borde en cualquier modelo de Spectrum, solo tienes que añadir un PAUSE 1 antes del GOTO, por ejemplo:

10 BORDER 1:BORDER 2:BORDER 3:BORDER 4:BORDER 5:BORDER 6:BORDER 0:PAUSE 1:GOTO 10

Saludos... :mrgreen:

Lo he comprobado con el emulador Spectaculator y es cierto >| =D>

-- Actualizado 22 Feb 2015, 18:32 --

mcleod_ideafix escribió:[...]El T80 "funciona", así que de cambiarlo, será de las últimas cosas que haga. Antes deben funcionar:
- El teclado en modo bidireccional, para así poder enviarle resets y hacer que funcionen los teclados USB/PS2
- El puerto de joystick
- La salida estéreo del AY-3-8912 (usar el módulo AY de jotego)
- El scandoubler para la salida VGA
- El soporte de memoria del Timex
Cuando las plaquitas estén hechas:
- El bus de expansión
Y alguna coseja más, que podría caer, tal como:
- Interrupciones ráster programables
- SpecDrum
- Modo turbo (bueno, 7MHz, pero no deja de ser el doble)
- DataGear (DMA para el Z80) [...]

Es una buena lista de características, estoy cada día más encantado con este proyecto.

Me gustaría hacer una humilde sugerencia: Además de un botón del teclado dedicado a conmutar en caliente entre Modo Normal y Modo Turbo, ¿podrías considerar también la implementación de una acción Pausa mediante la pulsación de otro botón? :rezo

Estaría muy bien por ejemplo en el botón "Pausa Inter" :jumper:
Imagen

Gracias :santo:
El mundo cambia con tu ejemplo no con tu opinión (Paulo Coelho)
El premio es el placer de descubrir (Richard Feynman)

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor radastan » 22 Feb 2015, 18:20

Namek escribió:Para conseguir franjas de colores estables en el borde en cualquier modelo de Spectrum, solo tienes que añadir un PAUSE 1 antes del GOTO, por ejemplo:

10 BORDER 1:BORDER 2:BORDER 3:BORDER 4:BORDER 5:BORDER 6:BORDER 0:PAUSE 1:GOTO 10

Saludos... :mrgreen:


Ea, 30 años después descubro este truco... :lol:
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

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: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor mcleod_ideafix » 22 Feb 2015, 19:29

Mejias3D escribió:Me gustaría hacer una humilde sugerencia: Además de un botón del teclado dedicado a conmutar en caliente entre Modo Normal y Modo Turbo, ¿podrías considerar también la implementación de una acción Pausa mediante la pulsación de otro botón? :rezo

Estaría muy bien por ejemplo en el botón "Pausa Inter" :jumper:
Imagen


Ah! Pues a mi me parece muy buena idea. Así, en juegos en los que no hay tecla de pausa, se podrá interrumpirlo si es necesario. Como la memoria no es DRAM, no hay refresco que se vea afectado. Eso sí: tengo que mirar si esa tecla en concreto es la mejor opción, ya que hay teclas en el teclado que no dan un código, sino una ristra de códigos, y no quisiera complicar innecesariamente el core de teclado PS/2.

Añado: jová! Es que mira qué secuencia produce esa tecla...
E1,14,77,E1,F0,14,F0,77

A ver si no se hace muy compleja la máquina de estados para ella...
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Mejias3D
Commodore 128
Commodore 128
Mensajes: 97
Registrado: 07 Dic 2014, 20:05
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Videopac
Primera consola: Videopac
Ubicación: Palma de Mallorca
Contactar:

Re: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor Mejias3D » 22 Feb 2015, 19:53

mcleod_ideafix escribió:Ah! Pues a mi me parece muy buena idea. Así, en juegos en los que no hay tecla de pausa, se podrá interrumpirlo si es necesario. Como la memoria no es DRAM, no hay refresco que se vea afectado. Eso sí: tengo que mirar si esa tecla en concreto es la mejor opción, ya que hay teclas en el teclado que no dan un código, sino una ristra de códigos, y no quisiera complicar innecesariamente el core de teclado PS/2.

Añado: jová! Es que mira qué secuencia produce esa tecla...
E1,14,77,E1,F0,14,F0,77

A ver si no se hace muy compleja la máquina de estados para ella...

La tecla que tú consideres estará bien. Siempre se podrá arreglar con una pegatina más, si a Hark0 le parece bien ;)

Gracias de nuevo.
El mundo cambia con tu ejemplo no con tu opinión (Paulo Coelho)
El premio es el placer de descubrir (Richard Feynman)

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

Re: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor antoniovillena » 22 Feb 2015, 19:59

Yo tenía prevista una tecla pause en el teclado AV. De hecho hasta Hark0 hizo la pegatina. Tendría que ver la ubicación pero estoy casi seguro que estaba en el grupo de 6 inicio, fin, avpag...

Avatar de Usuario
Quest
Atari 1040 STf
Atari 1040 STf
Mensajes: 900
Registrado: 18 Jul 2013, 22:20
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo NES/Clónica
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor Quest » 23 Feb 2015, 02:08

He estado trasteando un poco con teclados ps/2 (hasta que se haga la versión renovada del core) para comprobar la compatibilidad de los mismos.

Hoy he probado algunos de los que tengo y 2 no funcionaban en el ZX-UNO. Uno de ellos era un teclado ps/2 supuestamente genuino ps/2 (trae el conector ps/2 morado directamente, sin conversores) y es bastante moderno. El otro es un "dual" usb / ps/2, de los que necesitan adaptador ps/2 (este ya imaginaba que no funcionaría).

Así que he decidido hacer algunas pruebas en mi arduino para ver qué era lo mínimo necesario para hacerlos funcionar. Al final he conseguido hacer funcionar ambos en mi arduino. Evidentemente como no tengo ni pajolera de VHDL ni FPGAS, no sabría siquiera como empezar a "traspasar" eso a la misma.

- El caso de ambos teclados ha sido bastante parecido, el segundo requería algo más para "iniciarse" como ps/2, pero básicamente en ambos ha sido suficiente con amagar con empezar a enviarles algo desde el host. Según la imagen que pongo aquí debajo, sólo con hacer la parte no sombreada, ha sido suficiente (aproximadamente):

Imagen

En el arduino, paso las señales de entrada a salida o de salida a entrada a voluntad según lo necesito. Primero las pongo como salida, para enviar el amago, y después las pongo como entradas y activo la interrupción externa para escuchar caracteres.

Partiendo de que el estado "Idle" es de ambas señales en alto, y antes de empezar a "escuchar":

- En el 1º teclado, simplemente ha habido que:
0- Poner CLK y DATA como salidas
1- Pasar CLK a nivel bajo durante al menos 60us.
2- Después, pasar DATA a nivel bajo (simulando un bit de comienzo)
3- "soltar" la señal CLK, es decir, ponerla en alto y ponerla ya como entrada, para que sea el teclado el que empiece a generar el reloj.

Entonces el teclado ya se pone a funcionar.

- En el 2º teclado, además de los pasos anteriores he tenido que añadir en un paso más, un while de espera leyendo CLK hasta que veamos nivel bajo. Sin añadir esta línea, el teclado dual (no se el motivo realmente) no funciona. Ni siquiera cambiándola por un delay equivalente...

Espero que se haya entendido algo, se que mi terminología es un poco novata :oops:

Quizá sirva para algo, aunque sea para parchear mínimamente lo que hay para ir tirando con algún teclado más... ? Supongo que en realidad lo mejor es esperar a la nueva versión reescrita de la parte del teclado, pero bueno, ahí quedan mis pruebas. Realmente lo ideal es una comunicación bidireccional completa (no solo parcial), aunque sólo serviría para 2 cosas extra que yo recuerde: el manejo de los LEDs del teclado (comando ED) y establecer el typematic rate (comando F3).

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: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor mcleod_ideafix » 23 Feb 2015, 02:32

Quest escribió:Quizá sirva para algo, aunque sea para parchear mínimamente lo que hay para ir tirando con algún teclado más... ? Supongo que en realidad lo mejor es esperar a la nueva versión reescrita de la parte del teclado, pero bueno, ahí quedan mis pruebas. Realmente lo ideal es una comunicación bidireccional completa (no solo parcial), aunque sólo serviría para 2 cosas extra que yo recuerde: el manejo de los LEDs del teclado (comando ED) y establecer el typematic rate (comando F3).

Y para enviar el comando de reset, que es lo que precisamente necesitamos aquí. Ya de los tiempos en los que hice el firmware para el adaptador de teclado PS/2 - Spectrum, que también está basado en microcontrolador me di cuenta de todo esto :)

De hecho mi idea es precisamente que el core de teclado, con ayuda de la BIOS, resetee el teclado, ponga el typematic a 0 (sin repetición), elija el scan mode 2 (el más común, que implementan todos los teclados, porque el scan mode 3 no lo implementan todos), y encienda el led de bloqueo numérico para indicar que el teclado ha sido reconocido.

He aquí el cachito de rutina que empleo en el adaptador de teclado PS/2 para inicializar el mismo: aquí lo que intento es ponerlo en scan mode 3, más que nada porque la primera versión que hice usaba este modo de scan. Luego me di cuenta de que no todos los teclados lo soportan, así que después de ponerlo pregunto por el scan mode actual, y si no es el 3, entonces es el 2, y uso un paso extra en la traducción que convierte de scan mode 2 a scan mode 3. En la FPGA no me puedo permitir estos lujos, así que asumo directamente que trabajo en scan mode 2.

Código: Seleccionar todo

; --------------------------------------------------------------------------------
; Rutina para inicializar el teclado
; Pone el modo scan 3 y activa Bloq Num.
; Se activa desde el gestor de interrupciones, en respuesta a la señal de RESET
; --------------------------------------------------------------------------------
KBInit:     ;SCAN SET 3
                  Transmite #0f0h
            Transmite #3

                  ; Preguntamos por el scan set actual
                  Transmite #0f0h
                  Transmite #0
                  call KBWait
                  mov ScanMode,R6

            cjne R6,#3, ProgModo2

            ; MAKE / BREAK para todas las teclas
                  Transmite #0f8h
                  sjmp Fin_InitTec

ProgModo2:  Transmite #0f6h   ; Cargamos valores por defecto
            Transmite #0f3h   ; Cargamos 1 seg de antes de rep. y 0,5 seg. de autorrepeat
                  Transmite #7fh

            ; BLOQ NUM activado
Fin_InitTec:Transmite #0edh
                 Transmite #2
                  mov Leds,#2
                  clr Sinclair

                  ; Habilitar escaneo del teclado
                  Transmite #0f4h

                 ret
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: Cacharreando con el prototipo 2 del ZX-Uno

Mensajepor wilco2009 » 23 Feb 2015, 23:33

Bueno,pues al final he encontrado un rato para soldar la FPGA. Qué pequeñas tiene las patas la jodida.
La primera en la frente, las dos primeras patillas que he soldado se me ha hecho un truño de estaño que me ha costado un mundo retirar, pero claro, ¿qué puedo pedirle a un soldador de 1.5mm que parece un tronco de arbol cuando lo miras con la lupa?. Al final ya creo que está toda soldada en condiciones.
Ya os iré contando.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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