Puerto serie + Wifi en el Amstrad CPC

Proyectos de hardware con sus esquemáticos y si llevan software en fuente

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.
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Puerto serie + Wifi en el Amstrad CPC

Mensaje por yombo »

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.
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,
Imagen
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
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

Mensaje por Kyp »

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,
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.
Dicho así no lo entiendo ni yo :)) :)) :))
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.
Avatar de Usuario
Gatuso
Le gustan las llamas
Le gustan las llamas
Mensajes: 54
Registrado: 05 Mar 2015, 00:47

Re: Puerto serie + Wifi en el Amstrad CPC

Mensaje por Gatuso »

tactica escribió:Pues venga, el siguiente tiene que ser el ZX81 :D


:D

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

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.
Avatar de Usuario
tactica
Demonio segundo orden
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

Mensaje por tactica »

Ya te digo, tú te me presentas solamente con esto en 1981 y te tomo como venido de otro planeta :))

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) :)
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Puerto serie + Wifi en el Amstrad CPC

Mensaje por yombo »

Propongo buscar un Eniac y enchufarle el ESP8266 :)) :)) :))
Imagen
Avatar de Usuario
Gatuso
Le gustan las llamas
Le gustan las llamas
Mensajes: 54
Registrado: 05 Mar 2015, 00:47

Re: RE: Re: Puerto serie + Wifi en el Amstrad CPC

Mensaje por Gatuso »

yombo escribió:Propongo buscar un Eniac y enchufarle el ESP8266 :)) :)) :))
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.

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).
Avatar de Usuario
javu61 !Sinclair QL
Fundador
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

Mensaje por javu61 »

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 :D

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 ;)
Larga vida y prosperidad \\//_
Avatar de Usuario
yombo
Demonio tercer orden
Demonio tercer orden
Mensajes: 737
Registrado: 01 Ago 2014, 21:21

Re: Puerto serie + Wifi en el Amstrad CPC

Mensaje por yombo »

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.
Me había equivocado, en Yombonet uso A7 y A6. No A6 y A5.

Para hacerlo me documenté con lo que hay en worldofspectrum.org, pero ahora no me acuerdo qué documento miré.
Imagen
Responder

Volver a “Proyectos de hardware abiertos”