Spectrums en red

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
fermars
Freddy Hardest
Mensajes: 555
Registrado: Mié Abr 25, 2012 7:09 am
Ubicación: Madrid
Contactar:

Spectrums en red

Mensaje por fermars » Lun Ene 12, 2015 2:14 pm

Hola a todos, ¿Alguien tiene experiencia en la conexión de Spectrums en red?
Abro aquí este hilo (también lo he preguntado en VdR por si os suena duplicado) por si acaso. El caso es que en el manual del Interface 1 hay un diminuto listado que permite implementar un "chat" entre dos Spectrums pero me gustaría mucho que pudiéramos ampliarlo para que funcionara con varios Spectrum en red; he intentado cambiarlo probando hasta donde se me ha ocurrido pero no lo he conseguido ¿Sabéis si se puede hacer y cómo?

Este es el programa:

Código: Seleccionar todo

10 OPEN #4:“n”;2: REM for output
20 INPUT a$: PRlNT#4;a$ 
30 CLOSE #4 
40 OPEN X4;“n”;2: REM for input 
50 lNPUTt4;bS: PRINT b$ 
60 CLOSE #4 
70 GO TO 10
Cambiando las líneas 10 y 40 para redirigir los datos entre las dos estaciones (una es el 1 y otra es el 2). He probado a poner "0" en ambas líneas (broadcasting) pero aunque funciona, el dato únicamente se pasa al Spectrum adyacente y no llega a todos de forma simultánea... :?

Más info en la página 31 de dicho manual.
ftp://ftp.worldofspectrum.org/pub/sincl ... Manual.pdf

y otra cosa ¿Cómo se puede hacer para que cualquier equipo de la red pueda imprimir en una ZX Printer o acceder a unidades Microdrive del Spectrum "master"?

Gracias.
Fernando

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Spectrums en red

Mensaje por mcleod_ideafix » Lun Ene 12, 2015 6:29 pm

fermars escribió:Cambiando las líneas 10 y 40 para redirigir los datos entre las dos estaciones (una es el 1 y otra es el 2). He probado a poner "0" en ambas líneas (broadcasting) pero aunque funciona, el dato únicamente se pasa al Spectrum adyacente y no llega a todos de forma simultánea... :?
A ver... te hablo de memoria, ya que hace unos cuantos años que hice experimentos con esto, pero creo que se te ha olvidado numerar las estaciones, desde la 1 a la 63, usando el comando FORMAT.

Por ejemplo, el primer Spectrum, que tendría como número de estación la 1, haría:

Código: Seleccionar todo

FORMAT "n";1
Esto es algo así como ponerse como dirección IP estática la dirección 1.
fermars escribió:y otra cosa ¿Cómo se puede hacer para que cualquier equipo de la red pueda imprimir en una ZX Printer o acceder a unidades Microdrive del Spectrum "master"?
Para lo primero debes implementar un pequeño servidor de impresión en el Spectrum maestro (ID de estación #1), tal que así:

Código: Seleccionar todo

 5 FORMAT "n";1
10 OPEN #8;"n";1
20 LPRINT INKEY$ #8;
30 GO TO 20
Desde cualquier otro Spectrum en red, para imprimir en la impresora harías:

Código: Seleccionar todo

 5 FORMAT "n";2: REM 2 o cualquier otro numero hasta 63
10 OPEN #8;"n";1
20 PRINT #8;"Hola mundo"
30 CLOSE #8
Para lo segundo que dices, pues algo similar: en el Spectrum "master", éste abrirá un fichero, por ejemplo para escritura, así, y un canal para lectura en red. Lo que reciba por la red, lo escribe en el fichero. En esencia, es lo mismo que el ejemplo del servidor de impresión. Algo así:

Código: Seleccionar todo

 5 FORMAT "n";1
10 OPEN #8;"n";1
20 OPEN #7;"m";1;"fichero"
30 PRINT #7; INKEY$ #8;
40 GO TO 20
El "cliente" de red sería el mismo que en el caso de la impresión remota. Dicho cliente podría ser un pelín más sofisticado y ponerse de acuerdo con el servidor para que cuando el cliente envíe algún código concreto, por ejemplo, el ASCII 0, dé por finalizada la escritura. Algo así:

Servidor:

Código: Seleccionar todo

 5 FORMAT "n";1
10 OPEN #8;"n";1
20 OPEN #7;"m";1;"fichero"
30 LET a$=INKEY$ #8
40 IF CODE a$=0 THEN GO TO 60
50 PRINT #7; a$;: GO TO 30
60 CLOSE #8: CLOSE #7
Cliente:

Código: Seleccionar todo

 5 FORMAT "n";2: REM u otro valor mayor, hasta 63.
10 OPEN #8;"n";1
20 PRINT #8;"Hola mundo"
30 PRINT #8;"Adios mundo"
40 PRINT #8;CHR$ 0: REM enviar fin de fichero
50 CLOSE #8
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
fermars
Freddy Hardest
Mensajes: 555
Registrado: Mié Abr 25, 2012 7:09 am
Ubicación: Madrid
Contactar:

Re: Spectrums en red

Mensaje por fermars » Lun Ene 12, 2015 11:21 pm

Mil gracias, tremendo resumen. Para mi hoy es un momento histórico porque gracias a tu ayuda..:

Imagen

:D Jejeje, no veas la cara de alegría. He tenido algunos problemillas pero al final ha funcionado.

Con respecto al tema de definir los números de estación, eso lo estoy haciendo bien. De hecho si usas únicamente dos Spectrum no es necesario definirlos según el manual (ambas estaciones son 1). Como decía entre dos equipos sí funciona el tema del "chat" pero cuando meto otro equipo más (asignando IDs 1,2 y 3) el programa no funciona. No se si será posible...


Con los que no he tenido tanta suerte es con los listados para Microdrive. Me has dejado 3 listados, el servidor "simple":

Código: Seleccionar todo

 5 FORMAT "n";1
10 OPEN #8;"n";1
20 OPEN #7;"m";1;"fichero"
30 PRINT #7; INKEY$ #8;
40 GO TO 20
Que no me ha funcionado. Supongo la línea 40 tiene que hacer un GOTO a la 30, si no me da error de que el Stream ya está abierto, pero subsanado eso aparentemente todo va normal (crea el archivo en la cinta...) y el borde de la pantalla empieza a parpadear en negro a la espera de datos.
Si uso el "cliente" de impresión, o sea:

Código: Seleccionar todo

 5 FORMAT "n";2: REM 2 o cualquier otro numero hasta 63
10 OPEN #8;"n";1
20 PRINT #8;"Hola mundo"
30 CLOSE #8
Parece que hace algo, porque el borde del servidor parpadea más rápido, pero al pulsar BREAK en el cliente, ese parpadeo rápido desaparece y se queda tal cual, sin escribir nada en el Microdrive.

También he intentado el código para el "server sofisticado" o sea este:

Código: Seleccionar todo

 5 FORMAT "n";1
10 OPEN #8;"n";1
20 OPEN #7;"m";1;"fichero"
30 LET a$=INKEY$ #8
40 IF CODE a$=0 THEN GO TO 60
50 PRINT #7; a$;: GO TO 30
60 CLOSE #8: CLOSE #7
Y debe haber algo mal al decir al programa que el "0" vaya a la línea 60, porque siempre va a la línea 60. Por alguna razón el programa lee siempre que a$ vale "0" y no se queda rebotando entre la 50 y la 30 a la espera de otros datos.
El cliente claro, no lo he podido probar.

¿Qué crees que puede pasar?
Fernando

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados