Teclado para ZX-Uno

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Teclado para ZX-Uno

Mensajepor antoniovillena » 01 May 2014, 00:28

Queda muy chulo. Yo también tengo las pegatinas del teclado AV pero antes me tengo que comprar otro teclado porque el que tengo no es exclusivo para el ZX-Uno. Bueno, voy a ver si te implemento el VHDL para que puedas trastear con él. Las teclas duplicadas del teclado numérico (cursores, joystick, pause) no necesitaban pegatinas.

Avatar de Usuario
TallerSeverino
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 519
Registrado: 12 Abr 2013, 09:55
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Cádiz
Gracias dadas: 17 veces
Gracias recibidas: 17 veces

Re: Teclado para ZX-Uno

Mensajepor TallerSeverino » 01 May 2014, 00:55

He cortado primero en vertical todos los trazos (incluyendo el que ha pasado por el centro del "delete" :mrgreen: ), usando una regla, luego, usando la regla como "soporte" he empezado con las verticales el "espacio", con la regla y presionando la zona donde va avanzando el cutter, van saliendo por filas y es más sencillo seguir el patrón, y a la vez las otras quedan aún ancladas al papel. Uhm, explicado así parece más complicado de la cuenta, pero no.
Una imagen vale más que mil palabras:
Imagen

Lo del boli era para tapar la marca del teclado, y de paso he apuntado las combinaciones para reset "soft" y "hard".
Un saludo!

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

Re: Teclado para ZX-Uno

Mensajepor antoniovillena » 01 May 2014, 02:08

Ya he terminado el teclado AV. Cada vez que McLeod saque una nueva revisión tenemos que recompilar con este archivo ps2k.vhd. Tendrías que machacar el antiguo ps2k.vhd.

Código: Seleccionar todo

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity ps2k is port (
    clk     : in  std_logic;
    ps2clk  : in  std_logic;
    ps2data : in  std_logic;
    rows    : in  std_logic_vector(7 downto 0);
    cols    : out std_logic_vector(4 downto 0);
    joy     : out std_logic_vector(4 downto 0);
    scancode: out std_logic_vector(7 downto 0);
    rst     : out std_logic;
    nmi     : out std_logic;
    mrst    : out std_logic);
end ps2k;

architecture behavioral of ps2k is

  type    key_matrix  is array (7 downto 0) of std_logic_vector(4 downto 0);
  signal  keys      : key_matrix;
  signal  pressed   : std_logic;
  signal  isalt     : std_logic;
  signal  lastclk   : std_logic_vector(4 downto 0);
  signal  bit_count : unsigned (3 downto 0);
  signal  shiftreg  : std_logic_vector(8 downto 0);
  signal  parity    : std_logic;

begin
  process (clk)
  begin
    if rising_edge(clk) then
      rst <= '1';
      nmi <= '1';
      mrst <= '1';
      lastclk <= lastclk(3 downto 0) & ps2clk;
      if lastclk="11100" and ps2clk='0' then  -- detector de flanco de bajada de PS2CLK
        if bit_count=0 then
          parity <= '0';
          if ps2data='0' then
            bit_count <= bit_count + 1;
          end if;
        else
          if bit_count<10 then
            bit_count <= bit_count + 1;
            shiftreg  <= ps2data & shiftreg(8 downto 1);
            parity    <= parity xor ps2data;
          elsif ps2data='1' then
            bit_count <= (others => '0');
            if parity = '1' then -- nueva pulsacion completa en shiftreg.
              pressed  <= '1';
              scancode <= shiftreg(7 downto 0);
              case shiftreg(7 downto 0) is
                when X"f0" => pressed    <= '0';
                when X"12" |
                     X"59" => keys(0)(0) <= pressed; -- Left or Right shift (CAPS SHIFT)
                when X"1a" => keys(0)(1) <= pressed; -- Z
                when X"22" => keys(0)(2) <= pressed; -- X
                when X"21" => keys(0)(3) <= pressed; -- C
                when X"2a" => keys(0)(4) <= pressed; -- V
                when X"1c" => keys(1)(0) <= pressed; -- A
                when X"1b" => keys(1)(1) <= pressed; -- S
                when X"23" => keys(1)(2) <= pressed; -- D
                when X"2b" => keys(1)(3) <= pressed; -- F
                when X"34" => keys(1)(4) <= pressed; -- G
                when X"15" => keys(2)(0) <= pressed; -- Q
                when X"1d" => keys(2)(1) <= pressed; -- W
                when X"24" => keys(2)(2) <= pressed; -- E
                when X"2d" => keys(2)(3) <= pressed; -- R
                when X"2c" => keys(2)(4) <= pressed; -- T
                when X"16" => keys(3)(0) <= pressed; -- 1
                when X"1e" => keys(3)(1) <= pressed; -- 2
                when X"26" => keys(3)(2) <= pressed; -- 3
                when X"25" => keys(3)(3) <= pressed; -- 4
                when X"2e" => keys(3)(4) <= pressed; -- 5
                when X"45" => keys(4)(0) <= pressed; -- 0
                when X"46" => keys(4)(1) <= pressed; -- 9
                when X"3e" => keys(4)(2) <= pressed; -- 8
                when X"3d" => keys(4)(3) <= pressed; -- 7
                when X"36" => keys(4)(4) <= pressed; -- 6
                when X"4d" => keys(5)(0) <= pressed; -- P
                when X"44" => keys(5)(1) <= pressed; -- O
                when X"43" => keys(5)(2) <= pressed; -- I
                when X"3c" => keys(5)(3) <= pressed; -- U
                when X"35" => keys(5)(4) <= pressed; -- Y
                when X"5a" => keys(6)(0) <= pressed; -- ENTER
                when X"4b" => keys(6)(1) <= pressed; -- L
                when X"42" => keys(6)(2) <= pressed; -- K
                when X"3b" => keys(6)(3) <= pressed; -- J
                when X"33" => keys(6)(4) <= pressed; -- H
                when X"29" => keys(7)(0) <= pressed; -- SPACE
                when X"14" => keys(7)(1) <= pressed; -- CTRL (Symbol Shift)
                when X"3a" => keys(7)(2) <= pressed; -- M
                when X"31" => keys(7)(3) <= pressed; -- N
                when X"32" => keys(7)(4) <= pressed; -- B
                when X"76" => keys(0)(0) <= pressed; -- Break (Caps Space)
                              keys(7)(0) <= pressed;
                when X"0e" |
                     X"06" => keys(0)(0) <= pressed; -- Edit (Caps 1)
                              keys(3)(0) <= pressed;
                when X"4e" |
                     X"09" => keys(0)(0) <= pressed; -- Graph (Caps 9)
                              keys(4)(1) <= pressed;
                when X"66" => keys(0)(0) <= pressed; -- Backspace (Caps 0)
                              keys(4)(0) <= pressed;
                              if keys(7)(1)='1' and isalt='1' then
                                mrst <= '0';         -- Master Reset
                              end if;
                when X"0d" => keys(0)(0) <= pressed; -- Extend
                              keys(7)(1) <= pressed;
                when X"54" => keys(0)(0) <= pressed; -- True Video (Caps 3)
                              keys(3)(2) <= pressed;
                when X"5b" => keys(0)(0) <= pressed; -- Inv. Video (Caps 4)
                              keys(3)(3) <= pressed;
                when X"58" => keys(0)(0) <= pressed; -- Caps lock (Caps 2)
                              keys(3)(1) <= pressed;
                when X"6b" => keys(0)(0) <= pressed; -- Left (Caps 5)
                              keys(3)(4) <= pressed;
                when X"72" => keys(0)(0) <= pressed; -- Down (Caps 6)
                              keys(4)(4) <= pressed;
                when X"75" => keys(0)(0) <= pressed; -- Up (Caps 7)
                              keys(4)(3) <= pressed;
                when X"74" => keys(0)(0) <= pressed; -- Right (Caps 8)
                              keys(4)(2) <= pressed;
                when X"55" => keys(7)(1) <= pressed; -- = (Symb L)
                              keys(6)(1) <= pressed;
                when X"4a" => keys(7)(1) <= pressed; -- / (Symb V)
                              keys(0)(4) <= pressed;
                when X"7c" => keys(7)(1) <= pressed; -- * (Symb B)
                              keys(7)(4) <= pressed;
                when X"7b" => keys(7)(1) <= pressed; -- - (Symb J)
                              keys(6)(3) <= pressed;
                when X"79" => keys(7)(1) <= pressed; -- + (Symb K)
                              keys(6)(2) <= pressed;
                when X"4c" => keys(7)(1) <= pressed; -- ; (Symb O)
                              keys(5)(1) <= pressed;
                when X"52" => keys(7)(1) <= pressed; -- " (Symb P)
                              keys(5)(0) <= pressed;
                when X"41" => keys(7)(1) <= pressed; -- , (Symb N)
                              keys(7)(3) <= pressed;
                when X"49" => keys(7)(1) <= pressed; -- , (Symb M)
                              keys(7)(2) <= pressed;
                when X"71" => joy(1)     <= pressed; -- Joy Left
                              if keys(7)(1)='1' and isalt='1' then
                                rst <= '0';          -- Reset
                              end if;
                when X"69" => joy(2)     <= pressed; -- Joy Down
                when X"6c" => joy(3)     <= pressed; -- Joy Up
                when X"7a" => joy(0)     <= pressed; -- Joy Right
                when X"11" => joy(4)     <= pressed; -- Joy Fire
                              isalt      <= pressed;
                when X"03" => if keys(7)(1)='1' and isalt='1' then
                                nmi <= '0';          -- NMI
                              end if;
                when others=> null;
              end case;
            end if;
          else
            bit_count <= (others => '0');
          end if;
        end if;
      end if;
    end if;
  end process;

  process (keys, rows)
  variable tmp: std_logic;
  begin
    for i in 0 to 4 loop
      tmp:= '0';
      for j in 0 to 7 loop
        tmp:= tmp or (keys(j)(i) and not rows(j));
      end loop;
      cols(i) <=  not tmp;
    end loop;
  end process;

end architecture;


-- Actualizado 01 May 2014, 01:11 --

Por cierto el mapeado del joystick kempston funciona perfectamente, incluso con 3 teclas simultáneas (arriba+derecha+disparo, por ejemplo)

-- Actualizado 01 May 2014, 01:18 --

Y otra cosa más. Después de muchos intentos no consigo hacer funcionar el pokeador (pulsando NMI en esta ROM) bajo el ZX-Uno. Estoy casi seguro de que es porque se lanzan 2 NMIs muy seguidas, ya que el código anula el efecto de una segunda NMI si han pasado algunos ciclos. Mañana intentaré probarlo en un Spectrum real.
Adjuntos
leches.zip
(13 KiB) Descargado 467 veces

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Teclado para ZX-Uno

Mensajepor Hark0 » 01 May 2014, 08:20

¿las dos teclas (en/es) que estaban pendientes las has ubicado/usado finalmente?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

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

Re: Teclado para ZX-Uno

Mensajepor antoniovillena » 01 May 2014, 09:54

Hark0 escribió:¿las dos teclas (en/es) que estaban pendientes las has ubicado/usado finalmente?


No. Las dos teclas que faltan son ~ y Pause. Es McLeod el que tiene que decidir dónde ubicarlas. La pausa todavía no está implementada en el ZX-Uno.

Avatar de Usuario
TallerSeverino
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 519
Registrado: 12 Abr 2013, 09:55
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Cádiz
Gracias dadas: 17 veces
Gracias recibidas: 17 veces

Re: Teclado para ZX-Uno

Mensajepor TallerSeverino » 01 May 2014, 11:38

antoniovillena escribió:Queda muy chulo. Yo también tengo las pegatinas del teclado AV pero antes me tengo que comprar otro teclado porque el que tengo no es exclusivo para el ZX-Uno. Bueno, voy a ver si te implemento el VHDL para que puedas trastear con él. Las teclas duplicadas del teclado numérico (cursores, joystick, pause) no necesitaban pegatinas.


Pues entonces las "despego" pero como estaba en el layout por eso las he puesto.
Falta aclarar qué hacen exactamente las teclas a la derecha del espacio, Alt-gr, la de "windows" y la de opciones (esa con la ventana dibujada).
Esta tarde lo pruebo.

Un saludo.
Ah, ¿habéis notado que el led de power del zxuno parece un faro antiniebla? habría que subir esa resistencia que es de 220ohm a no se, 330 o 470, probaré con dos valores.

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

Re: Teclado para ZX-Uno

Mensajepor antoniovillena » 01 May 2014, 12:03

AltGr (en el teclado AV) es el disparo del Joystick (hace lo mismo que Alt), viendo la foto veo que tienes bien la pegatina. En los teclados McLeod AltGr es GRAPH (Caps Shift+9).

Las dos teclas windows y la de opciones no hacen nada ni tenemos previsto que lo hagan. Esas pegatinas por ahora son más un adorno que otra cosa. Si en un futuro se nos ocurre algo, pues ahí están.

Sí, los leds brillan demasiado. Tendríamos que ver cómo brillan en el segundo prototipo con la caja puesta, en este segundo prototipo sí que coincidirán los leds con la caja. Pero sí, seguramente seguirán siendo muy brillantes.

JULIO
Commodore 128
Commodore 128
Mensajes: 121
Registrado: 22 Feb 2013, 18:58
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: TV Games/Pong Clone

Re: Teclado para ZX-Uno

Mensajepor JULIO » 01 May 2014, 12:44

Hola.

Los led son tan brillantes que los tapo con un trozo de papel y celo cuando programo via jtag
y tengo que tener la tapa quitada.
Aunque aumentemos la resistencia me parece que nos va a dar igual.

[editado]
En cuanto al diseño "me lo imprimo yo mismo" ¿Cualquier copisteria/imprenta puede hacer este trabajo?...o sea yo llevo
un pincho usb y les paso el pdf y con eso ¿ya tienen lo necesario para hacer las pegatinas?
...para solo dos copias esto saldrá caro ¿no?

saludos
Julio.

Avatar de Usuario
TallerSeverino
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 519
Registrado: 12 Abr 2013, 09:55
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Cádiz
Gracias dadas: 17 veces
Gracias recibidas: 17 veces

Re: Teclado para ZX-Uno

Mensajepor TallerSeverino » 01 May 2014, 13:32

JULIO escribió:Hola.

Los led son tan brillantes que los tapo con un trozo de papel y celo cuando programo via jtag
y tengo que tener la tapa quitada.
Aunque aumentemos la resistencia me parece que nos va a dar igual.

[editado]
En cuanto al diseño "me lo imprimo yo mismo" ¿Cualquier copisteria/imprenta puede hacer este trabajo?...o sea yo llevo
un pincho usb y les paso el pdf y con eso ¿ya tienen lo necesario para hacer las pegatinas?
...para solo dos copias esto saldrá caro ¿no?

saludos
Julio.


Hola Julio, si subimos el valor de la resistencia baja la intensidad del led, es que sin caja es como dije un antiniebla, no se en caja cómo quedará, voy a probar con 470 ohms que debe dar la mitad de intensidad más o menos.
Respecto al pdf yo como tengo una monocromo de láser me llevé el documento a la papelería/copistería y les dije que me imprimieran la página 4 creo recordar, en una pegatina a4 y en formato horizontal, que depende, siempre puedes probar primero a imprimirlo en blanco y negro para probar y después que te lo hagan en pegatina, dependiendo de dónde vayas te van a cobrar más o menos, a mi me salio por menos de 1€, pero estamos hablando de una prueba en papel, lo que más cuesta es el papel de pegatina, lo demás es una copia a color a4. Y creo recordar algo así como 60 céntimos, y luego como es una pegatina muy normalita es muy fácil de despegar cuando lleguen los definitivos.

Un saludo.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Teclado para ZX-Uno

Mensajepor Hark0 » 01 May 2014, 22:24

En mi empresa, copia a4 color 40 ct.... si es adhesivo papel normal, pon unos 80 ct, si lo quieres en adhesivo papel NO removible, NO transparente (es blanco como todos pero cubre lo que hay debajo, muy chungo de quitar), pon 1 Eur.

Las etiquetas que se han hecho en serigrafia, no las ha hecho mi empresa, las ha hecho uana empresa del barrio... de mi amiguete Luis... ;) Ahora mismo a 4€ porque estamos haciendo (hemos hecho mejor dicho), solo 4... cuando haya una tirada más grande, seguro que me lo ajusta un poco más.


De momento, si vais probando en papel (los que teneis el zxuno funcionando) y veis que va bien y no falta nada... pasamos a fabricar las ue faltan... pero yo esperaria a ver si Mcleod implementa esas 2, ó Antonio encuentra algún fallo/mejor distribución o lo que sea...

;-)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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