Emulación teclado QL en ZEsarUX

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 31 Mar 2017 11:59

Último mensaje de la página anterior:

Radastan escribió:Lo que espero es que se curre un buen documento sobre el QL, sería muy interesante para la comunidad.

Me refiero a nivel de funcionamiento, y así sirve de guía para quien quiera hacer su propio emulador de QL.


Bueno, documentar, lo que se dice documentar... no voy a hacer. Mas allá de lo que yo incluya en el código fuente, en el FAQ, en la carpeta /docs del emulador, y por supuesto, cualquiera que me pregunte obtendrá respuesta. Pero ponerme a documentar, pues como que no.
Ya he comentado alguna vez que mi anterior emulador, el ZXSpectr, tenía documentación chula, tipo documento pdf de 50 y pico páginas, en español e inglés, y me quitaba montón de horas haciendo eso. Mi tiempo, como el de todos nosotros de este mundillo retro, es muy valioso como para "perderlo" documentando

-grin
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Radastan
Mensajes: 191
Registrado: 09 Sep 2016 11:32
Agradecido : 7 veces
Agradecimiento recibido: 65 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor Radastan » 31 Mar 2017 20:53

Es que siento curiosidad por como has implementado el teclado y otras cosas.

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 31 Mar 2017 23:09

Radastan escribió:Es que siento curiosidad por como has implementado el teclado y otras cosas.

Tu pregunta... sin problemas....;)
Resumiendo:
Cpu usando el musashi motorola core.
Driver de video hecho por mí. Es muy fácil, solo dos modos de vídeo, con parpadeo en uno de ellos y actualmente uso misma paleta de colores que Spectrum
Interrupciones: si no recuerdo mal, no las estoy lanzando, ni se bien cómo van en el QL, pero no las echo de menos... ;) Solo que como puedes ver, el cursor no parpadea y debería hacerlo
No emulo el procesador Intel adicional, sino que simulo su comportamiento... Este es el encargado de gestionar teclado, microdrive y sonido, y se comunica con el Motorola mediante direcciones de memoria (puertos i/o mapeados), es lo que se llama IPC. Hay diferentes comandos IPC, uno de ellos se encarga de leer el teclado.
La comunicación mediante IPC es bit a bit, cada vez el motorola envía una señal de escritura, espera un cambio en el bit 6, y lee el bit del resultado desde el bit 7. Se podría decir que es una comunicación serial de toda la vida con un bit cada vez de espera. Esto es la parte que me ha costado más de entender, la info realmente está ahí, pero no hay ningún ejemplo de ello y claro, si no lo haces exactamente como debe ser, no pasas ni del menú de inicio (F1/F2).
Luego además, el total de 64 teclas se divide en filas y columnas. Si miras la matriz entera, no tiene ninguna ordenación lógica posible, debe ser algún tipo de pesadilla sufrida por algún ingeniero de Sinclair...

Con todo esto, dado que al principio no me funcionaba el teclado, mi meta fue poder saltar el menú de inicio. Para ello, tuve que ver en que momento se leía la tecla y simular el F1 o F2. Ese es uno de los traps a la rom que primero hice, pero que actualmente tengo desactivado en el código fuente, pues ya no hace falta pues el teclado funciona. Para hacer esto, me fue muy útil mi debug y la capacidad de poder ver el código fuente de la rom del QL a medida que desensamblaba.

Después de poder simular el F1 o f2, lo siguiente fue saltar el proceso de boot de microdrive. Como no lo emulo, todos los accesos a microdrive, cuelgan la rom. Y para esto, de nuevo debug y ver cómo saltar esto. Actualmente este trap si que está saltado en el código del emulador

Y después, ya en el prompt del basic, lo siguiente fue intentar devolver algún resultado mediante IPC y que mostrase algún carácter ascii en pantalla. Básicamente se basa en enviar 5 nibbles (20 bits) donde se codifica la fila y columna de la tecla, si se pulsa shift, ctrl o alt, y algún flag más. Como al principio probé con lo que decía la documentación y no funcionaba, luego puse un bucle, con un contador para esos 20 bits, e incrementando y viendo si aparecía algún carácter ascii
Después de probar con el contador, empezaron a aparecer diferentes caracteres.
Me apuntaba el valor de 20 bits junto con su carácter ascii. Así durante bastante rato (quizá 3 o 4 horas) hasta que conseguí sacar la mitad de teclas más o menos. Y de ahí no pude sacar más valores, aparte que dichos valores no parecían tener relación con lo que decía la documentación, pero al menos podía repetir cada tecla, si quería por ejemplo simular una A, enviaba la sentencia de 20 bits que ya tenía... Pero no conseguía sacar más de la mitad de teclas totales.
Después de muchas pruebas se me encendió la bombilla y puse en práctica lo del bit 6 de espera, que estaba documentado y yo ignoraba. A partir de ahí, todo tuvo lógica, todo seguía tal cual estaba documentado, excepto que la ordenación de filas tal cual dice la documentación es al revés (desde el 7 hasta el 0 hacia abajo). Y con eso ya pude sacar todas las teclas...

Básicamente es eso ;) He estado a punto de tirar la toalla con este tema varias veces, a esto se suma el que he pedido ayuda a varias personas autores de emuladores de QL y las respuestas han sido de tres tipos:
-gente que no me ha contestado
-gente con poca voluntad de ayudar
-y gente que pese a que quería ayudar, no recordaban como lo habían hecho y me remitían a que mirase el código fuente de sus emuladores.
Hubo uno, que no diré quién es, que me dijo que no lo recordaba , pese a que lo había implementado hacia menos de 1 año...Su respuesta en su caso fue del segundo y tercer tipo simultáneamente :(
Ah incluso aquí se suma otro problema, y es que la mayoría de emuladores de QL están basados en el código del viejo uqlx. Este uqlx usa también varios traps a la rom, también para el teclado. Su autor original no pude contactar con el, creo, pero algunos autores de emuladores más recientes , basados en el código de uqlx, no sabían cómo funcionaba el teclado, pues simplemente se basaron en copiar lo que ya había en uqlx.
Por supuesto que he mirado mucho el código de uqlx pero me ha servido de muy poquito, la parte de teclado no he conseguido saber que hace... es difícil siempre mirar el código ajeno...

Como decía, si quieres más info me puedes preguntar, aunque creo que casi todo está en este post, jeje. Puedes revisar el archivo ql.c de mi código, donde está todo el lío este del teclado

Saludos
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 31 Mar 2017 23:16

Ah aparte de todo esto, también he generado las funciones de acceso a memoria, y toda la integración de elementos comunes de ZEsarUX con las máquinas emuladas: debug de cpu, selección de máquina, breakpoints, modificación de registros y alguna cosa más... Aunque todo esto es relativamente fácil. Lo peor como decía ha sido el teclado. 4 meses casi, a ratos sueltos, probando cosas diferentes y mucho debug de la rom... Ah y aprendiendo a marchas forzadas lenguaje ensamblador del motorola ;)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Radastan
Mensajes: 191
Registrado: 09 Sep 2016 11:32
Agradecido : 7 veces
Agradecimiento recibido: 65 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor Radastan » 02 Abr 2017 23:53

Pues muchas gracias por la explicación, realmente curioso que la comunicación con el IPC sea bit a bit.

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 03 Abr 2017 15:42

Radastan escribió:Pues muchas gracias por la explicación, realmente curioso que la comunicación con el IPC sea bit a bit.


De nada :) Lo de la comunicación serie... pues no se, supongo que alguna ventaja tendría, o quizá era lo habitual en aquella época... Estoy pensando que quizá eso facilita la comunicación por el puerto serie RS del QL....
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

jltursan
Mensajes: 5704
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 1016 veces
Agradecimiento recibido: 2079 veces
Contactar:

Re: Emulación teclado QL en ZEsarUX

Mensajepor jltursan » 03 Abr 2017 19:52

¡Bienvenido a la maravillosa selva del QL en la que todos sus moradores son increiblemente amistosos! -507

De momento lo que has conseguido me parece increible, ¡muchisimas gracias por dedicarle tiempo a este equipo tan maltratado por el tiempo y por mucha gente! -drinks

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 03 Abr 2017 22:30

Bueno lo que si que me parece es un mundillo con poca información y difícil de encontrar...
Aunque ya me funciona el teclado en el Basic, parece que los juegos usan una función del IPC que aún no implemento... tengo que continuar peleándome...
Juegos? He dicho juegos? Si, pese a que no emulo ni microdrives ni floppy, estoy probando a cargar juegos del ql directamente a memoria y lanzando llamada CALL a código máquina... de momento un pacman, un arkanoid y otro que he probado, no leen bien el teclado... cachis!
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 04 Abr 2017 19:29

Actualizo, primer juego de QL cargado en ZEsarUX

https://youtu.be/8ny0s6MEK2o
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Chema
Mensajes: 2668
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3222 veces
Agradecimiento recibido: 934 veces
Contactar:

Re: Emulación teclado QL en ZEsarUX

Mensajepor Chema » 04 Abr 2017 20:13

¿Ya te lee el teclado para juegos? Tiene que haber algún modo de que te mande las teclas pulsadas simultáneamente, tal vez como bits a uno en un bitstream, si no a ver cómo se lo monta un juego...

Bueno, es que estaba leyendo los últimos postes (me encanta el trabajo que estás haciendo) y se me pasó por la cabeza. Igual es una tontería.

En todo caso, menudo pedazo de curro!

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 04 Abr 2017 20:30

Chema escribió:¿Ya te lee el teclado para juegos? Tiene que haber algún modo de que te mande las teclas pulsadas simultáneamente, tal vez como bits a uno en un bitstream, si no a ver cómo se lo monta un juego...

Bueno, es que estaba leyendo los últimos postes (me encanta el trabajo que estás haciendo) y se me pasó por la cabeza. Igual es una tontería.

En todo caso, menudo pedazo de curro!


Si, precisamente ese juego del video utiliza una llamada de ipc que puede leer varias teclas a la vez, es justo lo que acabo de implementar ;)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
minter
Mensajes: 4870
Registrado: 22 Jul 2014 18:51
Agradecido : 6852 veces
Agradecimiento recibido: 2624 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor minter » 04 Abr 2017 20:41

Que bueno eres implementando... y que malo eres jugando!!! -507
Carga un ajedrez, que ahí no hay mucha acción! -rofl

En vez de ZEsarUX vas a tener que cambiar el nombre a ZMESSarUX con la cantidad de máquinas implementadas!

¿Y ahora una curiosidad... como gestionaste el tema de tener un micro de 16 bits y un bus de 8 bits?
¿O cuando creas una emulación, no tienes en cuenta ese concepto y simplemente te adaptas?

Buen avance!!! -thumbup

Avatar de Usuario
ron
Mensajes: 21945
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 3914 veces
Agradecimiento recibido: 4870 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor ron » 04 Abr 2017 20:56

palangana !!! voy a por una !!!

Avatar de Usuario
Chema
Mensajes: 2668
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3222 veces
Agradecimiento recibido: 934 veces
Contactar:

Re: Emulación teclado QL en ZEsarUX

Mensajepor Chema » 04 Abr 2017 21:13

chernandezba escribió:Si, precisamente ese juego del video utiliza una llamada de ipc que puede leer varias teclas a la vez, es justo lo que acabo de implementar ;)


Genial! Venga, va. Explica un poco cómo funciona el tema, que ya me has dejado intrigado....

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 04 Abr 2017 21:16

minter escribió:Que bueno eres implementando... y que malo eres jugando!!! -507
Carga un ajedrez, que ahí no hay mucha acción! -rofl

En vez de ZEsarUX vas a tener que cambiar el nombre a ZMESSarUX con la cantidad de máquinas implementadas!

¿Y ahora una curiosidad... como gestionaste el tema de tener un micro de 16 bits y un bus de 8 bits?
¿O cuando creas una emulación, no tienes en cuenta ese concepto y simplemente te adaptas?

Buen avance!!! -thumbup


Juasssss. Bueno primero probé el psion chess pero lleva una protección que parece que solo el Qemulator se salta
Respecto a los buses... eso no me afecta. El único cambio es adaptar funciones que tengo comunes del spectrum de 16 bits a 32 bits del Motorola
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 04 Abr 2017 21:17

Chema escribió:
chernandezba escribió:Si, precisamente ese juego del video utiliza una llamada de ipc que puede leer varias teclas a la vez, es justo lo que acabo de implementar ;)


Genial! Venga, va. Explica un poco cómo funciona el tema, que ya me has dejado intrigado....



Pues comando 9 del IPC. Le dices una fila de teclas a leer y el emulador se la devuelve, poniendo bits a 1 para la columna de tecla pulsada (8 teclas por fila). Sencillito ;)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

chernandezba
Mensajes: 416
Registrado: 05 May 2015 18:27
Agradecido : 29 veces
Agradecimiento recibido: 315 veces

Re: Emulación teclado QL en ZEsarUX

Mensajepor chernandezba » 04 Abr 2017 21:17

ron escribió:palangana !!! voy a por una !!!



Palangana???
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux


Volver a “Software Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado