ZXPP, clon de Spectrum en una Papilio Pro

Cursos, reparaciones, fichas, tutoriales, etc.

Moderador: Fundadores

Responder
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3378
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 147 times

Re: ZXPP, clon de Spectrum en una Papilio Pro

Mensaje por Kyp »

He hecho un intento rápido con el controlador de la Mist, nada :(
Y también con el de otra placa FPGA, la mojo, tampoco :(
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3378
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 147 times

Re: ZXPP, clon de Spectrum en una Papilio Pro

Mensaje por Kyp »

Paso 06, repaso al teclado

Cuando empecé el proyecto, para centrarme en el funcionamiento del clon y no entretenerme mucho, 'adopté' el módulo de teclado del ZX-Uno, concretamente la primera versión que hizo mcleod que acabó desechando porque no funcionaba bien del todo y de la que heredé sus fallos. Se que el ZX-Uno tiene un módulo nuevo pero como hago esto para aprender, he preferido escribir mi propio módulo en vez de copiar otro, con la excepción de la interfaz con el teclado PS/2 que he utilizado un módulo escrito por Mike Field (http://hamsterworks.co.nz/mediawiki/ind ... 2_Keyboard). El resto, se basa bastante en las mejoras que hice junto con Wilco para el YAZSAKI/Speckey.

Mi aproximación para manejar las teclas extra que tiene un teclado PS/2 es diferente a la del módulo del mcleod. En vez de tener una matriz de 40 teclas y hacer un montón de cálculos en función de si se pulsó MAYUSCULAS o CONTROL o ALT para determinar que teclas hay que mostrar como pulsadas, lo que hago es definir una matriz más grande, 54 teclas, y luego construyo los 5 bits del teclado en función de la matriz y los 8 bits del bus de direcciones, de forma muy parecida a como funciona el teclado del Spectrum+.

Estas son las teclas que funcionan, no se si merece la pena añadir más:
Las 40 del Spectrum mapeadas tal cual donde CAPS SHIFT es mayúsculas izquierda y SYMBOL SHIFT es mayúsculas derecha.
, . - simulan pulsar SS más N M J
BACKSPACE simula pulsar CS más 0
Y algo que me hacía mucha ilusión, pulsando CTRL+ALT+SUPRIMIR se resetea el Spectrum :D

De momento nada más, pero sigo trabajando en más mejoras ;)

NOTA: No me deja adjuntar el ZIP con el proyecto porque dice que es demasiado grande. Tampoco he podido copiarlo a los "archivos infernales" porque no me deja subir archivos. Así que dejo un enlace a mi OneDrive para el que quiera bajárselo: https://1drv.ms/u/s!AiLQqKhbBn1Ff37DZQucW8KSe3M
Avatar de Usuario
antoniovillena
Demonio segundo orden
Demonio segundo orden
Mensajes: 1596
Registrado: 02 Abr 2013, 19:06
Been thanked: 1 time

Re: ZXPP, clon de Spectrum en una Papilio Pro

Mensaje por antoniovillena »

Estoy intentando portarlo al ZX-Uno con el siguiente .ucf

Código: Seleccionar todo

## Prohibit the automatic placement of pins that are connected to VCC or GND for configuration.
CONFIG PROHIBIT=P144;
CONFIG PROHIBIT=P69;
CONFIG PROHIBIT=P60;

NET netCLK          LOC="P55"  | IOSTANDARD=LVTTL | PERIOD=31.25ns;               # CLK
NET netRST          LOC="P8"   | IOSTANDARD=LVTTL | PULLDOWN;                     # A11  fire2
NET netNMI                       IOSTANDARD=LVTTL | PULLDOWN;                     # B9  -- SW(2)

NET ps2CLK          LOC="P99"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C1
NET ps2DAT          LOC="P98"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C0

NET joyBTN(0)       LOC="P1"   | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C8  -- JOYSTICK A1 up
NET joyBTN(1)       LOC="P5"   | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C10 -- JOYSTICK A2 down
NET joyBTN(2)       LOC="P6"   | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C11 -- JOYSTICK A3 left
NET joyBTN(3)       LOC="P7"   | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C13 -- JOYSTICK A4 right
NET joyBTN(4)       LOC="P2"   | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST | PULLUP; # C9  -- JOYSTICK A6 fire
#   joy+5                                                                         #     -- JOYSTICK A7
NET joyGND                       IOSTANDARD=LVTTL;                                # C12 -- JOYSTICK A8

NET audioL          LOC="P10"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # A14
NET audioR          LOC="P9"   | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # A15
NET audioEAR        LOC="P94"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B12 -- JOYSTICK B1
NET audioGND                     IOSTANDARD=LVTTL;                                # C12 -- JOYSTICK B8
#   audio+5                                                                       #     -- JOYSTICK B7

NET videoV          LOC="P85"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # C2
NET videoH          LOC="P87"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # C3
NET videoR(0)                    IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # C4
NET videoR(1)       LOC="P79"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # C5
NET videoR(2)       LOC="P80"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # C6
NET videoR(3)       LOC="P81"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # C7
NET videoG(0)                    IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B4
NET videoG(1)       LOC="P82"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B5
NET videoG(2)       LOC="P83"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B6
NET videoG(3)       LOC="P84"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B7
NET videoB(0)                    IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B0
NET videoB(1)       LOC="P88"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B1
NET videoB(2)       LOC="P92"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B2
NET videoB(3)       LOC="P93"  | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST;          # B3
Pero me da el siguiente error:

Código: Seleccionar todo

ERROR:Place:1115 - Unroutable Placement! A clock IOB / BUFIO clock component
   pair have been found that are not placed at a routable clock IOB / BUFIO site
   pair. The clock IOB component <netCLK> is placed at site <P55>. The BUFIO
   component <SP6_BUFIO2_INSERT_PLL1_ML_BUFIO2_1> is placed at site
   <BUFIO2_X4Y21>. Each BUFIO site has a select set of IOBs that can drive it.
   If these IOBs are not used, the connection is not routable You may want to
   analyze why this problem exists and correct it. This placement is UNROUTABLE
   in PAR and therefore, this error condition should be fixed in your design.
   You may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote
   this message to a WARNING in order to generate an NCD file. This NCD file can
   then be used in FPGA Editor to debug the problem. A list of all the COMP.PINS
   used in this clock placement rule is listed below. These examples can be used
   directly in the .ucf file to demote this ERROR to a WARNING.
   < NET "netCLK" CLOCK_DEDICATED_ROUTE = FALSE; >
Por cierto el reloj del ZX-Uno es de 50Mhz, habría que adaptar el código que está pensado para tener un reloj de 32Mhz.
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3378
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 147 times

Re: ZXPP, clon de Spectrum en una Papilio Pro

Mensaje por Kyp »

Si estás pensando portar el ZXpp al ZX-Uno yo casi mejor empezaría por el paso 4 que tiene todo lo necesario para obtener un Specturm 48K completamente operacional y sin las complicaciones añadidas de periféricos que necesitan señales de reloj adicionales que parece que es lo que te está fallando.

Sobre lo de los IOB/BUFIO solo se que me han dado problemas en alguna ocasión cuando he tratado de obtener muchas señales de reloj diferentes y deduzco (sin tener ninguna seguridad) que tiene que ver con que no todas la señales de reloj generadas por el DCM se pueden rutar a cualquier parte de la FPGA y que el enrutado automático falla. Seguramente se pueda 'sugerir' al enrutador que ponga los bloques de otra forma para que funcione pero no tengo ni idea de como :|

A parte de cambiar los parámetros de los módulos del PLL (clock.vhd) para que funcionen a partir de un reloj de 50 MHz en vez del de 32 MHz que lleva la Papilio Pro, habrá que ajustar el módulo del teclado que tiene unas constantes calculadas para 32 MHz y creo que nada más.

Y el UCF cambiará bastante lógicamente. No tengo un ZX-Uno para probar (acepto donaciones :| ) y poder echarte una mano.
Responder

Volver a “Cursos y Tutoriales”