Modificación del mapeo de teclas del interface Yazsaki
Moderador: Fundadores
-
- El infierno es su lugar
- Mensajes: 186
- Registrado: 19 Jun 2014, 23:07
- Ubicación: Sant Joan Despi, Barcelona
Modificación del mapeo de teclas del interface Yazsaki
Hola,
No sabía si abrir este hilo aquí o en proyectos de software, al final se queda aquí. Se trata de cómo hacer una pequeña modificación del interface de teclado Yazsaki, concretamente el remapeado de las teclas a gusto del usuario. Como comenté en un hilo, no me acababa de convencer cómo se habían asignado las teclas del teclado de PC a las del Spectrum. Yo he hecho una versión propia, basada en el teclado del ZX Spectrum+, espero que os guste.
Herramientas necesarias:
* Un grabador que pueda grabar el micro Atmel ATTiny45 (la cucaracha negra de 8 patas del interface). No sé si el Wilhelm lo pilla; el Galep V sí.
* El entorno de desarrollo IDE para compilar el código (más adelante pongo el enlace para bajarlo, es gratuíto).
* El codigo fuente (más adelante pongo el enlace).
* Un extractor de EPROMs o en su defecto un destornillador pequeñito para levantar el micro sin torcer las patas.
En el hilo del proyecto de hardware, Sinclair puso el enlace a la página original del proyecto:
http://www.jrok.com/project/speckey/spec_key.html
Desde aquí se puede bajar el código fuente del microcontrolador ("AVR source code (assembler) - AVR studio 4.11 "), que está en Assembler. Que no cunda el pánico entre quienes no hayan trabajado nunca con Assembler: la modificación sólo afecta a los datos y no al código. Concretamente, al final del fichero hay un bloque que se llama "speccy_LUT". LUT quiere decir "look up table", y no es más que una tabla en la cual se relaciona un valor de entrada con otro (u más) de salida. El valor de entrada de esta tabla es el "scan code" del teclado de PC, que no es más que el número que transmite el teclado cuando se pulsa una tecla. El valor de salida de esta tabla es la tecla (o teclas) del Spectrum que queremos que se activen. Más información sobre los "scan codes" en este enlace, en el apartado de "scan codes":
http://retired.beyondlogic.org/keyboard/keybrd.htm
Por otra parte, en la web del trastero del Spectrum hay una excelente descripción de cómo funciona el teclado del Spectrum.
http://trastero.speccy.org/cosas/droy/imar3/imar3_s.htm
A nosotros nos interesa la siguiente tabla:
Address_____ZX Spec key________Half row
-------_____-----------________--------
FEFE-65278__V__C__X__Z__CS_____000 1
FDFE-65022__G__F__D__S__A______001 2
FBFE-64510__T__R__E__W__Q______010 3
F7FE-63486__5__4__3__2__1______011 4
EFFE-61438__6__7__8__9__0______100 5
DFFE-57342__Y__U__I__O__P______101 6
BFFE-49150__H__J__K__L__Enter__110 7
7FFE-32766__B__N__M__SS_Space__111 8
____________D4 D3 D2 D1 D0
(Perdón por el aspecto de la tabla ).
Esto se interpreta así: cuando se pulsa una tecla en el Spectrum, pongamos la tecla I, se activa el bit 2 ('I' está en la columna D2) y la semifila correspondiente es la 101 en binario, o sea la sexta semifila en decimal (101 es 5 en binario, pero como tenemos que la 000 es la primera, la 001 la segunda, ... y la 101 es la sexta).
En la "look up table" tenemos un valor de entrada que es el código de la tecla del teclado del PC, pero sabemos que para según que teclas del teclado del ZX Spectrum+ necesitamos que se pulsen más de una tecla simultáneamente. Por ejemplo: las comillas " se consiguen con Symbols Shift más la P. Por ese motivo la tabla tiene 2 campos: uno para la primera tecla y el segundo para la segunda. En muchos casos no se necesita Caps Shift ni Symbols Shift, por eso la segunda columna aparece en blanco.
La modificación de la tabla es tan sencilla como poner en la fila que nos interese el contenido que definamos. Digamos que queremos que cuando se pulse "Bloq Mayúsculas" en el teclado del PC, se active Extended Mode en el Spectrum. En el link que he puesto de los scan codes vemos que un teclado devuelve el código 58 hexadecimal. Vamos a la línea de código 58 hexa, que ahora mismo tiene este aspecto:
.db 0 ,0 ;0x58
y ponemos el código de Symbols Shift en la primera columna, y el de Caps Shift en la segunda. Para no liarnos, lo hacemos en binario. Según la tabla de más arriba: CS = D0 (00001) con semifila "000", y SS = D1 (00010) con semifila "111". El número binario que se escribe no es más que la concatenación de los 5 dígitos del bit con los 3 de la semifila. Con esta información, la línea nos quedará ahora así:
.db 0b00001000 ,0b00010111 ;0x58 Bloq mayús ( extended mode )
Siguiendo esto, yo he reprogramado la tabla para tener el siguiente funcionamiento:
Escape = Break
Cursores = Cursores
Num keypad = 0 a 9 más . / * - + y Enter
+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
|T.V.|..1.|..2.|..3.|..4.|..5.|..6.|..7.|..8.|..9.|..0.|I.V.|....|.Delete..|
+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
|Delete|..Q.|..W.|..E.|..R.|..T.|..Y.|..U.|..I.|..O.|..P.|."..|Graf|.Enter.|
+------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+.....|
|.ExtMod.|..A.|..S.|..D.|..F.|..G.|..H.|..J.|..K.|..L.|..Ñ.|Edit|....|.....|
+------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+----+-----+
|..CS..|CLok|..Z.|..X.|..C.|..V.|..B.|..N.|..M.|__,_|__._|.-..|..CS........|
+------++---+--+-+---++----+----+----+----+----++---+-+--+---++----+-------+
|..SS...|......|.....|..........Space...........|.....|......|.....|..SS...|
+-------+------+-----+--------------------------+-----+------+-----+-------+
(También pido perdón por el aspecto del teclado ).
Para compilar todo esto y tener el fichero binario, se necesita el Atmel Studio, que es el entorno de desarrollo del micro ATTiny45 que monta el interface. Se puede descargar desde aquí:
http://www.atmel.com/tools/atmelstudio.aspx
Elegid el "Atmel Studio 6.2 sp1 (build 1502) Installer – with .NET", que es el más gordo.
En el Atmel Studio hay que hacer lo siguiente:
1. Crear un proyecto nuevo donde queráis y con el nombre que queráis.
2. El tipo de proyecto debe ser "AVR Assembler Project".
3. Os preguntará el tipo de micro ("Device selection"); hay que decir ATTiny45.
4. Añadir componente existente: el fichero speckey_45.asm. Se hace pulsando el botón derecho del
mouse sobre la solución, y hacer "Add -> Existingg item".
5. Definir el fichero speckey_45.asm como punto de entrada del proyecto (botón derecho sobre el
fichero, "Set as EntryFile").
6. Si se ha creado un fichero .ASM vacío: eliminar. Botón derecho sobre él, "remove".
7. Hacer "Build -> Build solution", y si no hay errores, ya tenéis el fichero .HEX listo para grabar.
A quien quierla le paso el binario y el asm del proyecto que he hecho yo, que lamentablemente está inacabado. Concretamente, las teclas "ExtMod y "SS" izquierdo están intercambiados, y tampoco funciona el cursor derecho.
Si alguien hacer variaciones sobre esto y quiere que se lo compile, que me lo diga y lo haré encantado.
Espero que este tutorial se sea de utilidad para alguien
Un saludo!
No sabía si abrir este hilo aquí o en proyectos de software, al final se queda aquí. Se trata de cómo hacer una pequeña modificación del interface de teclado Yazsaki, concretamente el remapeado de las teclas a gusto del usuario. Como comenté en un hilo, no me acababa de convencer cómo se habían asignado las teclas del teclado de PC a las del Spectrum. Yo he hecho una versión propia, basada en el teclado del ZX Spectrum+, espero que os guste.
Herramientas necesarias:
* Un grabador que pueda grabar el micro Atmel ATTiny45 (la cucaracha negra de 8 patas del interface). No sé si el Wilhelm lo pilla; el Galep V sí.
* El entorno de desarrollo IDE para compilar el código (más adelante pongo el enlace para bajarlo, es gratuíto).
* El codigo fuente (más adelante pongo el enlace).
* Un extractor de EPROMs o en su defecto un destornillador pequeñito para levantar el micro sin torcer las patas.
En el hilo del proyecto de hardware, Sinclair puso el enlace a la página original del proyecto:
http://www.jrok.com/project/speckey/spec_key.html
Desde aquí se puede bajar el código fuente del microcontrolador ("AVR source code (assembler) - AVR studio 4.11 "), que está en Assembler. Que no cunda el pánico entre quienes no hayan trabajado nunca con Assembler: la modificación sólo afecta a los datos y no al código. Concretamente, al final del fichero hay un bloque que se llama "speccy_LUT". LUT quiere decir "look up table", y no es más que una tabla en la cual se relaciona un valor de entrada con otro (u más) de salida. El valor de entrada de esta tabla es el "scan code" del teclado de PC, que no es más que el número que transmite el teclado cuando se pulsa una tecla. El valor de salida de esta tabla es la tecla (o teclas) del Spectrum que queremos que se activen. Más información sobre los "scan codes" en este enlace, en el apartado de "scan codes":
http://retired.beyondlogic.org/keyboard/keybrd.htm
Por otra parte, en la web del trastero del Spectrum hay una excelente descripción de cómo funciona el teclado del Spectrum.
http://trastero.speccy.org/cosas/droy/imar3/imar3_s.htm
A nosotros nos interesa la siguiente tabla:
Address_____ZX Spec key________Half row
-------_____-----------________--------
FEFE-65278__V__C__X__Z__CS_____000 1
FDFE-65022__G__F__D__S__A______001 2
FBFE-64510__T__R__E__W__Q______010 3
F7FE-63486__5__4__3__2__1______011 4
EFFE-61438__6__7__8__9__0______100 5
DFFE-57342__Y__U__I__O__P______101 6
BFFE-49150__H__J__K__L__Enter__110 7
7FFE-32766__B__N__M__SS_Space__111 8
____________D4 D3 D2 D1 D0
(Perdón por el aspecto de la tabla ).
Esto se interpreta así: cuando se pulsa una tecla en el Spectrum, pongamos la tecla I, se activa el bit 2 ('I' está en la columna D2) y la semifila correspondiente es la 101 en binario, o sea la sexta semifila en decimal (101 es 5 en binario, pero como tenemos que la 000 es la primera, la 001 la segunda, ... y la 101 es la sexta).
En la "look up table" tenemos un valor de entrada que es el código de la tecla del teclado del PC, pero sabemos que para según que teclas del teclado del ZX Spectrum+ necesitamos que se pulsen más de una tecla simultáneamente. Por ejemplo: las comillas " se consiguen con Symbols Shift más la P. Por ese motivo la tabla tiene 2 campos: uno para la primera tecla y el segundo para la segunda. En muchos casos no se necesita Caps Shift ni Symbols Shift, por eso la segunda columna aparece en blanco.
La modificación de la tabla es tan sencilla como poner en la fila que nos interese el contenido que definamos. Digamos que queremos que cuando se pulse "Bloq Mayúsculas" en el teclado del PC, se active Extended Mode en el Spectrum. En el link que he puesto de los scan codes vemos que un teclado devuelve el código 58 hexadecimal. Vamos a la línea de código 58 hexa, que ahora mismo tiene este aspecto:
.db 0 ,0 ;0x58
y ponemos el código de Symbols Shift en la primera columna, y el de Caps Shift en la segunda. Para no liarnos, lo hacemos en binario. Según la tabla de más arriba: CS = D0 (00001) con semifila "000", y SS = D1 (00010) con semifila "111". El número binario que se escribe no es más que la concatenación de los 5 dígitos del bit con los 3 de la semifila. Con esta información, la línea nos quedará ahora así:
.db 0b00001000 ,0b00010111 ;0x58 Bloq mayús ( extended mode )
Siguiendo esto, yo he reprogramado la tabla para tener el siguiente funcionamiento:
Escape = Break
Cursores = Cursores
Num keypad = 0 a 9 más . / * - + y Enter
+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
|T.V.|..1.|..2.|..3.|..4.|..5.|..6.|..7.|..8.|..9.|..0.|I.V.|....|.Delete..|
+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
|Delete|..Q.|..W.|..E.|..R.|..T.|..Y.|..U.|..I.|..O.|..P.|."..|Graf|.Enter.|
+------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+.....|
|.ExtMod.|..A.|..S.|..D.|..F.|..G.|..H.|..J.|..K.|..L.|..Ñ.|Edit|....|.....|
+------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+----+-----+
|..CS..|CLok|..Z.|..X.|..C.|..V.|..B.|..N.|..M.|__,_|__._|.-..|..CS........|
+------++---+--+-+---++----+----+----+----+----++---+-+--+---++----+-------+
|..SS...|......|.....|..........Space...........|.....|......|.....|..SS...|
+-------+------+-----+--------------------------+-----+------+-----+-------+
(También pido perdón por el aspecto del teclado ).
Para compilar todo esto y tener el fichero binario, se necesita el Atmel Studio, que es el entorno de desarrollo del micro ATTiny45 que monta el interface. Se puede descargar desde aquí:
http://www.atmel.com/tools/atmelstudio.aspx
Elegid el "Atmel Studio 6.2 sp1 (build 1502) Installer – with .NET", que es el más gordo.
En el Atmel Studio hay que hacer lo siguiente:
1. Crear un proyecto nuevo donde queráis y con el nombre que queráis.
2. El tipo de proyecto debe ser "AVR Assembler Project".
3. Os preguntará el tipo de micro ("Device selection"); hay que decir ATTiny45.
4. Añadir componente existente: el fichero speckey_45.asm. Se hace pulsando el botón derecho del
mouse sobre la solución, y hacer "Add -> Existingg item".
5. Definir el fichero speckey_45.asm como punto de entrada del proyecto (botón derecho sobre el
fichero, "Set as EntryFile").
6. Si se ha creado un fichero .ASM vacío: eliminar. Botón derecho sobre él, "remove".
7. Hacer "Build -> Build solution", y si no hay errores, ya tenéis el fichero .HEX listo para grabar.
A quien quierla le paso el binario y el asm del proyecto que he hecho yo, que lamentablemente está inacabado. Concretamente, las teclas "ExtMod y "SS" izquierdo están intercambiados, y tampoco funciona el cursor derecho.
Si alguien hacer variaciones sobre esto y quiere que se lo compile, que me lo diga y lo haré encantado.
Espero que este tutorial se sea de utilidad para alguien
Un saludo!
- flopping
- Fundador
- Mensajes: 9974
- Registrado: 29 Mar 2013, 15:26
- Ubicación: Valencia
- Been thanked: 124 times
- Contactar:
Re: Modificación del mapeo de teclas del interface Yazsaki
Pues muchas gracias por esas modificaciones, ahora ya tenemos donde elegir, jejejejeeje.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
- stratotrasto
- Hermano de Lucifer
- Mensajes: 2494
- Registrado: 20 Feb 2014, 17:23
- Ubicación: Abula
Re: Modificación del mapeo de teclas del interface Yazsaki
Guau! No me he enterado de nada pero tú dame tiempo... Una de las cosas que me gusta de este foro es la predisposición de sus integrantes a compartir sus inventos y/o proyectos. Me parece un hilo estupendo. Yo por mi parte estoy buscando un teclado que pueda modificar y adaptar al interface de Sinclair y con esto que comentas me viene de fábula. Además de hacer unas pegatinas al estilo ZX para este últimos. Un saludo.
Si me muero no dejéis a mi mujer vender mis cacharros por lo que le dije que me costaron...
- flopping
- Fundador
- Mensajes: 9974
- Registrado: 29 Mar 2013, 15:26
- Ubicación: Valencia
- Been thanked: 124 times
- Contactar:
Re: Modificación del mapeo de teclas del interface Yazsaki
Aquí somos así de desprendidos, jajaajajaja......si no compartiéramos, muchas cosas no se podrían realizar por desconocimiento o falta de datos, de esta forma, lo que uno no sabe, lo explica otro y así al final todos aprendemos e innovamos, yo a veces, de ver ciertas cosas, aunque sean simples y sencillas, se me ocurren otras y aunque algo pueda parecer una chorrada o una cosa muy simple, siempre se pueden sacar ideas para mejorarlo o diseñar algo nuevo a partir de una idea o cosas así, por eso es muy importante que la gente no se guarde sus "inventos", si no que los exponga y los explique, que nos vienen muy bien a todos, ¿o no?, jajaajajajastratotrasto escribió:Guau! No me he enterado de nada pero tú dame tiempo... Una de las cosas que me gusta de este foro es la predisposición de sus integrantes a compartir sus inventos y/o proyectos. Me parece un hilo estupendo. Yo por mi parte estoy buscando un teclado que pueda modificar y adaptar al interface de Sinclair y con esto que comentas me viene de fábula. Además de hacer unas pegatinas al estilo ZX para este últimos. Un saludo.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
-
- El infierno es su lugar
- Mensajes: 186
- Registrado: 19 Jun 2014, 23:07
- Ubicación: Sant Joan Despi, Barcelona
Re: Modificación del mapeo de teclas del interface Yazsaki
Por mi parte es un placer compartir mis rollos y que haya compañeros que esten dispuestos a escuchar.
- flopping
- Fundador
- Mensajes: 9974
- Registrado: 29 Mar 2013, 15:26
- Ubicación: Valencia
- Been thanked: 124 times
- Contactar:
Re: Modificación del mapeo de teclas del interface Yazsaki
Mientras no sean rollos de papel higiénico, aquí compartimos y escuchamos de todo, jajajajaajAngriff escribió:Por mi parte es un placer compartir mis rollos y que haya compañeros que esten dispuestos a escuchar.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
- tactica
- Demonio segundo orden
- Mensajes: 1893
- Registrado: 20 Ene 2015, 20:39
- Ubicación: La Coruña
- Has thanked: 11 times
- Been thanked: 17 times
Re: Modificación del mapeo de teclas del interface Yazsaki
¿Dónde se puede votar por buen comentario? Porque no podría estar más de acuerdo con lo que has dicho, los que todavía andamos cacharreando con los "juguetes" de nuestra juventud es lo que tenemos que hacer, compartir todo lo que sepamos y seguir manteniendo viva la ilusión con estas máquinas prodigiosasflopping escribió:Aquí somos así de desprendidos, jajaajajaja......si no compartiéramos, muchas cosas no se podrían realizar por desconocimiento o falta de datos, de esta forma, lo que uno no sabe, lo explica otro y así al final todos aprendemos e innovamos, yo a veces, de ver ciertas cosas, aunque sean simples y sencillas, se me ocurren otras y aunque algo pueda parecer una chorrada o una cosa muy simple, siempre se pueden sacar ideas para mejorarlo o diseñar algo nuevo a partir de una idea o cosas así, por eso es muy importante que la gente no se guarde sus "inventos", si no que los exponga y los explique, que nos vienen muy bien a todos, ¿o no?, jajaajajaja
- tactica
- Demonio segundo orden
- Mensajes: 1893
- Registrado: 20 Ene 2015, 20:39
- Ubicación: La Coruña
- Has thanked: 11 times
- Been thanked: 17 times
Re: Modificación del mapeo de teclas del interface Yazsaki
Si la predisposición a compartir que mencionas es particular de este foro y se echa de menos en otros, entonces estoy doblemente contento de haberme apuntadostratotrasto escribió:Guau! No me he enterado de nada pero tú dame tiempo... Una de las cosas que me gusta de este foro es la predisposición de sus integrantes a compartir sus inventos y/o proyectos. Me parece un hilo estupendo. Yo por mi parte estoy buscando un teclado que pueda modificar y adaptar al interface de Sinclair y con esto que comentas me viene de fábula. Además de hacer unas pegatinas al estilo ZX para este últimos. Un saludo.
- flopping
- Fundador
- Mensajes: 9974
- Registrado: 29 Mar 2013, 15:26
- Ubicación: Valencia
- Been thanked: 124 times
- Contactar:
Re: Modificación del mapeo de teclas del interface Yazsaki
Bueno, no es que tengamos la exclusividad de eso, pero si que es verdad que aquí se comparten muchas cosas y la gente esta muy activa siempre y eso quieras que no enriquece un foro, si ademas le sumas una muy buena gente y un muy buen rollo entre todos, pues sale lo que sale, jajaajajaja...tactica escribió:Si la predisposición a compartir que mencionas es particular de este foro y se echa de menos en otros, entonces estoy doblemente contento de haberme apuntadostratotrasto escribió:Guau! No me he enterado de nada pero tú dame tiempo... Una de las cosas que me gusta de este foro es la predisposición de sus integrantes a compartir sus inventos y/o proyectos. Me parece un hilo estupendo. Yo por mi parte estoy buscando un teclado que pueda modificar y adaptar al interface de Sinclair y con esto que comentas me viene de fábula. Además de hacer unas pegatinas al estilo ZX para este últimos. Un saludo.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".
Mi juego, que puedes descargar desde aqui