Vale, si no se selecciona la ULA suponemos que no afectará. Al acceder a la ula creo que el byte alto se usa para seleccionar la fila de teclado a leer y cosas así. Será cuestión de investigar al ponerse a ello,Kyp escribió: No se hasta que punto será de libre uso el byte alto pero desde luego el bajo está muy solicitado. Aunque es una suposición mía, creo que se puede considerar una práctica común lo de usar el byte bajo para seleccionar un dispositivo y una vez seleccionado usar el alto más o menos libremente.
Puerto serie + Wifi en el Amstrad CPC
Moderadores: cacharreo, Fundadores
Reglas del Foro
Aquí solo tienen cabida proyectos de hardware que incluyan siempre al menos sus esquemáticos para poder reproducirlos si llevan componentes electrónicos, y si es posible los ficheros del programa en que se hacen, los diseños de las placas, los gerber, etc. Si llevan algún tipo de software asociado debe estar diponible el código fuente
Para los que no cumplen estas condiciones se debe postear en el foro de proyectos generales.
Aquí solo tienen cabida proyectos de hardware que incluyan siempre al menos sus esquemáticos para poder reproducirlos si llevan componentes electrónicos, y si es posible los ficheros del programa en que se hacen, los diseños de las placas, los gerber, etc. Si llevan algún tipo de software asociado debe estar diponible el código fuente
Para los que no cumplen estas condiciones se debe postear en el foro de proyectos generales.
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Puerto serie + Wifi en el Amstrad CPC
-
Kyp
- Hermano de Lucifer
- Mensajes: 3401
- Registrado: 30 Sep 2013, 14:54
- Ubicación: Madrid
- Has thanked: 31 times
- Been thanked: 163 times
Re: Puerto serie + Wifi en el Amstrad CPC
Si, una lectura a cualquier puerto par (A0 = 0) lo maneja la ULA. Se lee 0E0KKKKK donde E es el valor de la entrada EAR y KKKKK es un OR entre todos los valores de las columnas de las filas seleccionadas poniendo a 0 el bit correspondiente en el byte alto de la dirección del puerto.yombo escribió: Vale, si no se selecciona la ULA suponemos que no afectará. Al acceder a la ula creo que el byte alto se usa para seleccionar la fila de teclado a leer y cosas así. Será cuestión de investigar al ponerse a ello,
Dicho así no lo entiendo ni yo
![Riendo :))](./images/smilies/sc_jlaugh.gif)
![Riendo :))](./images/smilies/sc_jlaugh.gif)
![Riendo :))](./images/smilies/sc_jlaugh.gif)
Me explico.
Con un IN hFEFE se obtienen los valores de la fila 0
Con un IN hFEFD se obtienen los valores de la fila 1
...
Con un IN hEEFE se obtienen un OR bit a bit de los valores de la fila 0 y 4
Con un IN hCEFE se obtienen un OR bit a bit de los valores de la fila 0, 4 y 5
...
Aunque leyendo varias filas a la vez no se sabe realmente que tecla se ha pulsado es una forma muy rápida de saber si se ha pulsado una tecla cualquiera, por ejemplo si IN h00FE AND h1F es distindo de 0 entonces se ha pulsado una tecla, aunque no se sepa cual, pero es mucho más rápido que comprobar una a una cada fila.
Hay más bits del byte bajo reservados. Al menos A1 (el chip AY) y A5 (el interface Kempston) que yo sepa. Seguro que hay una lista por alguna parte.
Última edición por Kyp el 13 Nov 2015, 10:20, editado 1 vez en total.
- Gatuso
- Le gustan las llamas
- Mensajes: 54
- Registrado: 05 Mar 2015, 00:47
Re: Puerto serie + Wifi en el Amstrad CPC
tactica escribió:Pues venga, el siguiente tiene que ser el ZX81
![Muy Feliz :D](./images/smilies/sc_jgrin.gif)
Pero este os lo dejo a los expertos, porque menudo dolor... Apenas es una pequeña prueba de recepción de datos pero me ha bastado para darme cuenta de las dificultades de adaptarlo a ciertos micros. Para empezar el Basic del ZX81 no tiene instrucciones IN y OUT, que suelo usar en el programilla de test, así que había que explorar otras opciones de direccionamiento (hay un Super Basic que sí las incluye, pero esta otra opción me parecía mas didáctica). En lugar de usar puertos de entrada/salida he escogido unas direcciones de memoria, supuestamente inocuas por aquello del ghosting, para activar el chip. En concreto la entrada CS0 está formada por el AND de A14, A13 y A12, de forma que cualquier acceso por encima de &7000 activa la UART (el A15 por eso de que lo usa la ULA para el pintado no lo he querido usar por si complicaba la cosa). De esta forma en lugar de usar /IORQ he utilizado /MEMRQ para la entrada /CS2, y así poder escribir y leer en la UART usando PEEK y POKE en lugar de IN y OUT. La entrada CS1 la he puesto a VCC ya que no era necesaria.
Pero ese sistema implica desactivar la RAM cuando se acceda a esas posiciones, para evitar la colision en el bus de datos entre la memoria y la UART. Para eso me vino de perlas este post donde se explica un interfaz de entrada/salida donde el autor usa un transistor para poner en alto la línea /RAMCS cuando se está accediendo a determinadas direcciones. He usado el mismo esquema, gobernando el transistor con el resultado de A14·A13·A12 y comprobando que un poke a las direcciones que me interesaban no llegaban a escribirse nunca en la RAM.
Mas penurias, los caracteres en el ZX81 no siguen la numeración ASCII, con lo que el pequeño test tenía que andar pasando del ASCII que le llegaba de internet a la codificación propia del ZX81. Y eso que parece una tontería en este caso es crítico, porque en modo SLOW el pobre micro no da para mas y pierde caracteres incluso a 150 baudios, como podeis ver en el vídeo. No he conseguido bajar la velocidad del chip wifi mas que eso (según el manual el mínimo serían 110), aunque me hubiera gustado verlo funcionar sin fallos aunque fuera a 25 baudios. Simplemente poner un IF para ver si lo que venía era un número o una mayúscula implicaba perder mas caracteres, así que el procesado de los datos es lo justo para convertirlos en legibles (y de hecho en el video no se muestran los números).
Si se ejecuta el programa en modo FAST el resultado es impecable sin un solo carácter perdido, pero la interactividad ya no es la misma, claro...:
![Imagen](http://i.imgur.com/fMbWkwt.jpg)
Esto en ensamblador tiene que ir de maravilla, pero ahí ya se me escapa totalmente. De hecho ni siquiera he terminado el programilla de test para enviar pulsaciones desde el propio ZX81, y todos los comandos AT los enviaba desde el PC pinchando el adaptador USB-232 en la placa a modo de man in the middle. Pero desde luego desde el punto de vista didáctico la prueba ha merecido muchísimo la pena.
- 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: Puerto serie + Wifi en el Amstrad CPC
Ya te digo, tú te me presentas solamente con esto en 1981 y te tomo como venido de otro planeta ![Riendo :))](./images/smilies/sc_jlaugh.gif)
Pues si es cuestión de hacerlo en ensamblador es que hay todavía esperanza. Desde luego podría ser un récord Guiness: wifi en el ordenador menos potente posible (o con menos memoria)![Sonrisa :)](./images/smilies/sc_jsmiley.gif)
![Riendo :))](./images/smilies/sc_jlaugh.gif)
Pues si es cuestión de hacerlo en ensamblador es que hay todavía esperanza. Desde luego podría ser un récord Guiness: wifi en el ordenador menos potente posible (o con menos memoria)
![Sonrisa :)](./images/smilies/sc_jsmiley.gif)
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
- Gatuso
- Le gustan las llamas
- Mensajes: 54
- Registrado: 05 Mar 2015, 00:47
Re: RE: Re: Puerto serie + Wifi en el Amstrad CPC
Es que este chip es una verdadera genialidad. WiFi completo en sólo dos pines, así lo puede conectar hasta a la minipimer de la cocina.yombo escribió:Propongo buscar un Eniac y enchufarle el ESP8266![]()
![]()
Seguro que algún loco es capaz de conectarlo a un telégrafo y lograr una conexión totalmente digital (digital de dedo, quiero decir).
-
javu61
- Fundador
- Mensajes: 2175
- Registrado: 30 Mar 2013, 11:58
- Ubicación: Valencia
- Been thanked: 76 times
- Contactar:
Re: Puerto serie + Wifi en el Amstrad CPC
El ENIAC es una calculadora programable, como todos los ordenadores primitivos desde el primero que fué el Z1. En esa época lo normal (salvo en el ENIAC que no operaba así) era que se leian los comandos desde una unidad de cinta de papel y las ejecutaban secuancialmente uno a uno.
Por tanto conectar un puerto serie a estos aparatos es posible, pero su uso es reemplazar a la unidad de cinta de papel
No hay instrucciones de salto en esas máquinas, solo operaciones aritméticas y poco mas. Luego a alguien se le ocurrió que podia usar varias cintas, por tanto el programa se ejecutaba hasta un punto y decidia por que cinta debía seguir. El invento llegó a tener 16 unidades de cinta conectadas para hacer los primeros programas reales.
Luego ya se apostó por la arquitectura Von Neumann y las instrucciones se mezclaron con los datos. Curiosamente, los microcontroladores como los PIC y los Atmega no usan esa arquitectura, sino una arquitectura Harvard con separación de programas y datos, mas similar a la de las primeras máquinas.
Lo que queda del ENIAC está en la Universidad de Pensilvania, no creo que nos lo dejen para esto, pero se puede preguntar![Guiño ;)](./images/smilies/sc_jwink.gif)
Por tanto conectar un puerto serie a estos aparatos es posible, pero su uso es reemplazar a la unidad de cinta de papel
![Muy Feliz :D](./images/smilies/sc_jgrin.gif)
No hay instrucciones de salto en esas máquinas, solo operaciones aritméticas y poco mas. Luego a alguien se le ocurrió que podia usar varias cintas, por tanto el programa se ejecutaba hasta un punto y decidia por que cinta debía seguir. El invento llegó a tener 16 unidades de cinta conectadas para hacer los primeros programas reales.
Luego ya se apostó por la arquitectura Von Neumann y las instrucciones se mezclaron con los datos. Curiosamente, los microcontroladores como los PIC y los Atmega no usan esa arquitectura, sino una arquitectura Harvard con separación de programas y datos, mas similar a la de las primeras máquinas.
Lo que queda del ENIAC está en la Universidad de Pensilvania, no creo que nos lo dejen para esto, pero se puede preguntar
![Guiño ;)](./images/smilies/sc_jwink.gif)
Larga vida y prosperidad \\//_
- yombo
- Demonio tercer orden
- Mensajes: 737
- Registrado: 01 Ago 2014, 21:21
Re: Puerto serie + Wifi en el Amstrad CPC
Me había equivocado, en Yombonet uso A7 y A6. No A6 y A5.Kyp escribió:Hay más bits del byte bajo reservados. Al menos A1 (el chip AY) y A5 (el interface Kempston) que yo sepa. Seguro que hay una lista por alguna parte.
Para hacerlo me documenté con lo que hay en worldofspectrum.org, pero ahora no me acuerdo qué documento miré.