Red con ZX Spectrums y datos por Internet

Aquí solo proyectos que incluyan el código fuente

Moderador: Fundadores

Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
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: Red con ZX Spectrums y datos por Internet

Mensaje por javu61 »

Si me acuerdo de cogerlo, tengo un interface 1 en casa, acudiré con el y algún spectrum, el osciloscopio y un ordenador con puerto serie y paralelo para empezar a probar cosas. En Madrid tengo 3 teles que puedo llevar.

La red de spectrum admite hasta 64 nodos máximo, es una red sin servidor de estilo Ethernet, todos conectados de uno a otro y todos compiten a la vez por el uso de la red. Como todas las redes es una comunicación serie, lo que pasa es que una Lan funciona mucho mas rápida que un puerto serie normal, y los protocolos permiten interrumpir la comunicación y recuperarla a voluntad, y repetir los envios de los paquetes que no hayan llegado a destino. Creo que sería sencillo usar un PC por el puerto serie para enviar para recibir los datos, empaquetarlos en un mensaje IP, y enviarlo internet por un socket como si fuera un FTP p similar, y lo que reciba de la red hacer lo contrario. La principal ventaja es que sería una comunicación entre solo un spectrum y un solo pc, por lo que el medio casi siempre está libre y no hay pocos problemas de bloqueos. Incluso como se envían datos en modo texto, sería posible poner un PC sin un spectrum conectado.

Para que esto funcione a través de Internet hay que poner un ordenador que haga de servidor, reciba todos los paquetes y los reenvíe a todos los ordenadores conectados, ya que no es posible montar lo mismo que hace el spectrum, si se organiza una red entre nodos y cada uno envia al siguiente lo que recibe, cuando un nodo cae todo el resto de la red cae.

Además, debemos definir una serie de cosas, como por ejemplo como se conecta un spectrum a la red y se le asigna un número de nodo. Creo que para evitar problemas el servidor debería enviar al que quiera conectarse un mensaje con el número de nodo que le corresponde, y a partir de ese momento que use siempre ese número en la comunicación. El servidor debe mantener la lista de nodos conectados, y reconocer cuando un nuevo usuario se queire conectar, y cuando se ha desconectado para liberar ese número de nodo, siempre con la limitación de 64 nodos máximo, aunque sería saltable ya que la red puede controlar el tema, pero no sería posible enviar mensajes a nodos con número mayor de 64 desde un spectrum, aunque siempre pueden recibir lo que se envíe a todos los nodos.

Como veis, no es que sea imposible, ni especialmente difícil, pero hay que desarrollar algo de Hard y algo de Soft, no creo que esto esté disponible en la próxima reunión, aunque si es posible ir preparando cosas, hacer algunos desarrollos, probar allí cosas, y lanzarlo tranquilamente cuando se pueda. Es un proyecto para el que necesitamos:
  • Un coordinador, siempre hay deciciones que tomar y alquien debe tomarlas, hacer el seguimiento de como va el tema, y controlar que si algo se retrasa más de la cuenta, poner alguna solución (esto pasa siempre que el proyecto no lo hace uno solo).
  • Un equipo que diseñe un interface adecuado entre la red del Spectrum y el PC, usando un interface 1 o desarrollando una placa con solo la red, y en el lado del PC algo usando un puerto paralelo, uno serie, usando un conversor Serie a USB, o un montaje directo que reciba en serie y convierta a USB (usando un arduino por ejemplo que ya está echo y es ma sencillo que partir de cero).
  • Un equipo que desarrolle el driver para el PC del interface entre spectrum y el PC, que envíe a un programa externo lo que va recibiendo, y reciba desde un programa externo datos y los envíe al spectrum.
  • Un equipo que desarrolle un programa de comunicación por Internet, solicite un nodo al server, reciba el mensaje del número o que no hay nodos libres, envíe lo que recibe a través del driver al servidor de internet, y al contrario reciba del servidor de internet datos y los remita al driver, y remita al servidor un mensaje indicnado que está activo cada x tiempo (entre 1 y 5 minutos habitualmente), y envíe una desonexión al servidor cuando se cierre el programa.
  • Un equipo que desarrolle el servidor, reciba peticiones de añadirse a la red, asigne el número del nodo y lo remita al cliente, reciba los datos de la red y los reenvíe a todos los nodos conectados, revisando que los nodos sigan activos cada x tiempo, y procese las peticiones de baja de los usuarios.
Esto es lo que se me ocurre, por tanto, los que estén interesados en el tema, y sepan hacer alguna de las cosas indicadas, que se apunten, y según los que sean se hace de una u otra forma.

Saludos
Larga vida y prosperidad \\//_
Avatar de Usuario
Pachuquin
Demonio tercer orden
Demonio tercer orden
Mensajes: 828
Registrado: 18 Ene 2014, 00:51
Ubicación: Septem fratres

Re: Red con ZX Spectrums y datos por Internet

Mensaje por Pachuquin »

Yo votaría por usar un microcontrolador con tarjeta de red para prescindir del PC y hacerlo más autónomo.

Imagen

http://imall.iteadstudio.com/im120410001.html

Este, por ejemplo, es compatible con Arduino y sale por unos 20€.
Imagen
Avatar de Usuario
Zardoz
Aspirante a demonio
Aspirante a demonio
Mensajes: 225
Registrado: 03 May 2013, 23:58
Ubicación: Madrid
Has thanked: 1 time
Been thanked: 9 times

Re: Red con ZX Spectrums y datos por Internet

Mensaje por Zardoz »

javu61 escribió: La red de spectrum admite hasta 64 nodos máximo, es una red sin servidor de estilo Ethernet, todos conectados de uno a otro y todos compiten a la vez por el uso de la red. Como todas las redes es una comunicación serie, lo que pasa es que una Lan funciona mucho mas rápida que un puerto serie normal, y los protocolos permiten interrumpir la comunicación y recuperarla a voluntad, y repetir los envios de los paquetes que no hayan llegado a destino. Creo que sería sencillo usar un PC por el puerto serie para enviar para recibir los datos, empaquetarlos en un mensaje IP, y enviarlo internet por un socket como si fuera un FTP p similar, y lo que reciba de la red hacer lo contrario. La principal ventaja es que sería una comunicación entre solo un spectrum y un solo pc, por lo que el medio casi siempre está libre y no hay pocos problemas de bloqueos. Incluso como se envían datos en modo texto, sería posible poner un PC sin un spectrum conectado.
Por lo que estado leyendo, parece que es una implementación de CSMA/CA . El tema, es los timings? cuales son? que bitrate se usa? los bits de parada/inicia que ancho tienen respecto a los de datos ? Cuanto espera como máximo antes de considerar que el destinatario del mensaje no esta ?

Ademas se me ocurren cosas mas burras. El ZXNet no deja de ser un protocolo de nivel 1/2. En teoría seria factible implementar un TCP/IP simplon sobre ZX Net, con lo que el micro-controlador/rasperry/PC solo tendria que hacer de "router" y incluso se podría conectarse a un servidor IRC haciendo algún equivalente de telnet (ie abrir un comunicación TCP y enviar/recibir texto)

Pero lo primero, es lo primero. Hay que conseguir los timings antes de nada. Ya con eso, es factible hacer algo para minimo poder escuchar la linea con un micro-controlador/rasperry/PC
Avatar de Usuario
jordigahan
Demonio segundo orden
Demonio segundo orden
Mensajes: 1763
Registrado: 06 Sep 2013, 02:17
Has thanked: 3 times
Been thanked: 17 times
Contactar:

Re: Red con ZX Spectrums y datos por Internet

Mensaje por jordigahan »

si es para retroalba, yo podria llevar un +2b
Avatar de Usuario
wilco2009 !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 8156
Registrado: 01 Abr 2013, 23:47
Ubicación: Valencia
Has thanked: 47 times
Been thanked: 107 times

Re: Red con ZX Spectrums y datos por Internet

Mensaje por wilco2009 »

Zardoz escribió: Pero lo primero, es lo primero. Hay que conseguir los timings antes de nada. Ya con eso, es factible hacer algo para minimo poder escuchar la linea con un micro-controlador/rasperry/PC
Yo tengo sonda lógica pero solo un IF1, por lo que no puedo hacer pruebas.

Lo mejor sería que javu61 hiciera mediciones con el osciloscópio durante la quedada de Parla y nos sacara de dudas a este respecto.
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".

Douglas Adams. Guía del autoestopista galáctico.
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: Red con ZX Spectrums y datos por Internet

Mensaje por javu61 »

La diferencia entre un puerto serie y una red es qué esta no es tan sensible a las diferencias de velocidades por lo que no me preocupa mucho el timing seguro que con cuatro prueba lo aciertas. Lo que pasa es que aunque un protocolo de nivel físico lo puedes implantar como quieras y da igual como será el medio, no puedes implementarlo sobre ip de manera tan sencilla pues los paquetes no son ni parecidos.

Las placas que montan una tarjeta de red no tienen potencia para salir a internet, ser USB mas que nada para direccionar sobre una red interna en la que un pc lee el socket y va guardando lo que recibe. Justo lo que se busca aquí, por lo que sin una alternativa posible efectivamente, y ya hay drivers para esas tarjetas
Larga vida y prosperidad \\//_
Avatar de Usuario
Zardoz
Aspirante a demonio
Aspirante a demonio
Mensajes: 225
Registrado: 03 May 2013, 23:58
Ubicación: Madrid
Has thanked: 1 time
Been thanked: 9 times

Re: Red con ZX Spectrums y datos por Internet

Mensaje por Zardoz »

He conseguido encontrar algo de pura coña, aunque es mas del QLan que del ZXNet : http://www.programd.com/57_755222f50fc17ea9_1.htm y el manual del QL Toolkit II (http://www.dilwyn.me.uk/pe/index.html#tk2 )

A partir de ello, para el QL se puede sacar (si esta bien, y no he metido la gamba) :
- 8/N/5
- cada bit dura 11.2 us , incluido el de inicio
- Bitrate de 1/(*11.2*10^(-6)) = 89285,714
- Transferencia teórica máxima de 8/(1+8+5)=2,3333... -> 51020,408 bit/s -> ~ 6,2 KiB

A mi eso de 5 bits de parada no me cuadra mucho, creo que lo estoy mal interpretando...

Código: Seleccionar todo

QL Network Protocols
Standard QL Handshake

The Standard QL handshaking network protocol is compatible with the
Sinclair Spectrum protocol. It comprises 11 phases

                sender                  receiver
   a) scout

     1) gap     waiting for 3ms for
                activity, if activity
                occurs: restart

     2) wait                            waiting for activity
                                        (a scout)

     3) scout   send a scout of         wait for 530us
                duration < 530us, if
                contention occurs:
                restart

   b) header

     4) hactiv  set net active 22us     wait for active

     5) hbytes  for each byte 11.2us    for each byte wait for
                start (inactive) bit,   start (inactive) bit,
                8*11.2us data bits,     read 8 data bits, if
                5*11.2us stop (active)  fails: restart
                bits

     6) hackw   wait for 2.5ms for      set net active 22us
                active, if not active:
                restart

     7) hackbt  wait for start bit,     send 11.2us start bit
                read 8 data bits,       8 data bits 00000001
                if error: restart

   c) data

     8) dactiv  set net active 22us     wait for active

     9) dbytes  for each byte 11.2us    for each byte wait for
                start (inactive) bit,   start (inactive) bit,
                8*11.2us data bits,     read 8 data bits, if
                5*11.2us stop (active)  fails: restart
                bits

    10) dackw   wait for 2.5ms for      set net active 22us
                active, if not active:
                restart

    11) dackbt  wait for start bit,     send 11.2us start bit
                read 8 data bits,       8 data bits 00000001
                if error: restart

The entire protocol is synchronised by a period of inactivity at least
2.8ms long.

The header is eight bytes long in the following format:

    destination station number
    sending station number
    block number (high byte)
    block number (low byte)
    block type (0 normal, 1=last block of file)
    number of bytes in block (0 to 255)
    data checksum
    header checksum

If the number of bytes in a block is 0, 256 data bytes are actually
sent.

The checksums are formed by simple addition: if there are two single
bit errors in the most significant bit (the most common type of error)
within one block, then the errors will pass undetected.
If the block number received in a header is not equal to the block
number required, then the header and data block are acknowledged but
ignored.

The protocol is not proof against a failure on the last block
transmitted where the receiver has accepted the block, but the sender
has missed the acknowledge. In this case the sender will keep
re-transmitting the block until it times out (about 20s).
Avatar de Usuario
zx81
Demonio tercer orden
Demonio tercer orden
Mensajes: 502
Registrado: 19 Oct 2013, 16:27
Ubicación: Valencia
Has thanked: 15 times
Been thanked: 6 times
Contactar:

Re: Red con ZX Spectrums y datos por Internet

Mensaje por zx81 »

Después de dos días he conseguido un ratillo para meter cuchara en esta tan interesante propuesta. Cuando estuve programando la parte del IF1+Microdrives para mi emulador (vano esfuerzo, porque trabajé mucho para conseguir una emulación creo que muy satisfactoria y que casi nadie ha aprovechado) miré por encima el tema de la ZX-Net. Dado el funcionamiento del IF1 y de todos los periféricos de Sinclair, no me extrañaría nada que la red no fuera más que un simple puerto serie en daisy-chain. El IF1 no tiene hardware dedicado especialmente para la red, solo para las comunicaciones en general.

Lo que habría que ver es si la repetición de los paquetes es automática o si cada nodo recibe un paquete y, si no es para él, lo repite. La dificultad que veía era que hay que respetar los tiempos. Eso es relativamente fácil en una emulación porque puedes pararla tanto tiempo como necesites. Pero en hardware real lo veo más complicado, especialmente si se intentan comunicaciones por Internet donde los tiempos pueden sufrir de una variabilidad elevada.

No sé porqué, pero me parece recordar algo relacionado con que el emulador RealSpectrum simulaba una ZX-Net usando el puerto serie estándar. En mi caso, preferiría simularla vía red local, porque hoy en día mucha gente no tiene un mísero puerto serie a mano (y los que aún lo tenemos es porque tiramos de conversores USB<->232.
Today's robots are very primitive, capable of understanding only a few simple instructions such as 'go left', 'go right' and 'build car'.
John Sladek

Emulador de Spectrum JSpeccy.
Emulador de Spectrum Bare-metal para las Raspberry PI ZXBaremulator
Avatar de Usuario
wilco2009 !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 8156
Registrado: 01 Abr 2013, 23:47
Ubicación: Valencia
Has thanked: 47 times
Been thanked: 107 times

Re: Red con ZX Spectrums y datos por Internet

Mensaje por wilco2009 »

zx81 escribió:Después de dos días he conseguido un ratillo para meter cuchara en esta tan interesante propuesta. Cuando estuve programando la parte del IF1+Microdrives para mi emulador (vano esfuerzo, porque trabajé mucho para conseguir una emulación creo que muy satisfactoria y que casi nadie ha aprovechado) miré por encima el tema de la ZX-Net. Dado el funcionamiento del IF1 y de todos los periféricos de Sinclair, no me extrañaría nada que la red no fuera más que un simple puerto serie en daisy-chain. El IF1 no tiene hardware dedicado especialmente para la red, solo para las comunicaciones en general.

Lo que habría que ver es si la repetición de los paquetes es automática o si cada nodo recibe un paquete y, si no es para él, lo repite. La dificultad que veía era que hay que respetar los tiempos. Eso es relativamente fácil en una emulación porque puedes pararla tanto tiempo como necesites. Pero en hardware real lo veo más complicado, especialmente si se intentan comunicaciones por Internet donde los tiempos pueden sufrir de una variabilidad elevada.

No sé porqué, pero me parece recordar algo relacionado con que el emulador RealSpectrum simulaba una ZX-Net usando el puerto serie estándar. En mi caso, preferiría simularla vía red local, porque hoy en día mucha gente no tiene un mísero puerto serie a mano (y los que aún lo tenemos es porque tiramos de conversores USB<->232.
Para la simulación quizás sería más apropiado para el público en general el puerto ethernet, pero si la simulas a través del puerto serie, podrías conectar el emulador a una red de spectrums reales. Siempre y cuando sea como tú dices y se base en un simple puerto serie en daisy-chain.

En cuanto al tema de los tiempos, es cuestión de probar. Supongo que irá a días. Si internet va bien, imagino que la gran diferencia de velocidad será una ventaja y bastará con tener un buffer para ir soltando los datos poco a poco. Si algún dato se retrasa algo más de lo debido, para eso están los reintentos que prevé el protocolo.

Una posibilidad que se me ocurre para minimizar el impacto del retraso de internet es encapsular más de un paquete ZX-NET en cada paquete IP. De esa manera debería haber un flujo más contínuo de datos.

Estaría genial que pudieras incluir la zx-net en tu emulador.
Lo primero sería hacer funcionar la red con una conexión local y después ya nos preocuparíamos de internet.
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".

Douglas Adams. Guía del autoestopista galáctico.
Avatar de Usuario
flopping
Fundador
Fundador
Mensajes: 9974
Registrado: 29 Mar 2013, 15:26
Ubicación: Valencia
Been thanked: 124 times
Contactar:

Re: Red con ZX Spectrums y datos por Internet

Mensaje por flopping »

Yo en lo que estaba pensando es en hacer unos interfaces, solo de ZXNet, sacar el circuito del disciple por ejemplo, ya que en el IF1 se hace por medio de la ULA y es mas complicado, de esta forma, podriamos tener de una forma sencilla y barata, un interface para conectar nuestros spectrums y no depender de tener un IF1, ¿que os parece la idea?, he estado viendo que no seria nada complicado y los componentes serian pocos y baratos, jejejejeeje.

Como ya he comentado varias veces, mi fuerte no es la programacion, eso se lo tendre que dejar a otros, pero en el hardware si que puedo aportar ideas y cosas, jajajajajaja
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
Responder

Volver a “Proyectos de software abiertos”