Página 1 de 1

Programar puerto serie o puertos de expansion del Spectrum

Publicado: Mié Abr 16, 2014 4:05 pm
por REHome
Hola:

Tengo un ZX Spectrum +2A 128K negro. Veo que tiene el puerto serie. Para comunicarlo con los demás dispositivos externo e incluso enviar mensajes por ahí para comunicarlo con otro Spectrum por poner un ejemplo.

Sólo necesito usar el pin 2, 3 y masa, con eso me basta para hacer experimento con él. Quiero hacerles unas preguntas.

1) El estandar en baudios del puerto RS232 es 9600 baudios. ¿Es capaz el Spectrum alcanzar esa velocidad?

2) ¿Qué velocidad alcanza como máximo?

Se que es para imprimir en la impresora, mi idea es enviar carácteres a la salida del RS232 del Spectrum, por ejemplo una letra como la "A", o que mensaje que diga: "Hola mundo".

Quiero hacer un ejemplo en Basic 128K que en pantalla mueste 4 letras, por ejemplo.

Pulse estas teclas:
A) Envía la letra "A".
B) Envía la letra "B".
C) Envía la letra "C".
D) Envía la letra "D".

En pantalla, abajo o arriba que ponga un texto que muestre. "Haz pulsado la tecla C".

No se programación Basic. ¿Es muy complejo de hacer?

Un cordial saludo.

Re: Programar puerto serie o puertos de expansion del Spectr

Publicado: Mié Abr 16, 2014 5:33 pm
por zup
REHome escribió:1) El estandar en baudios del puerto RS232 es 9600 baudios. ¿Es capaz el Spectrum alcanzar esa velocidad?


Sí.

REHome escribió:2) ¿Qué velocidad alcanza como máximo?


Aquí empezamos las malas noticias. El Spectrum no tiene UART ni nada que se le parezca, el puerto serie en realidad son dos entradas y dos salidas digitales. El Spectrum emula el puerto serie mandando bits a intervalos ¿cuidadosamente? temporizados, para coincidir con las diferentes velocidades del puerto serie.

La velocidad máxima teórica debería ser 38400 baudios, pero hay bugs en la ROM que impiden alcanzarla. De hecho, creo que era peliagudo alcanzar los 19200... con 9600 debería ser seguro.

REHome escribió:Se que es para imprimir en la impresora, mi idea es enviar carácteres a la salida del RS232 del Spectrum, por ejemplo una letra como la "A", o que mensaje que diga: "Hola mundo".


En un Spectrum +3 deberías ejecutar:

Código: Seleccionar todo

10 FORMAT LPRINT 9600
20 FORMAT LPRINT "R"
30 LPRINT "Hola mundo"


La primera línea selecciona velocidad, la segunda dice que vas a imprimir por le puerto serie y la tercera imprime el mensaje. Ten en cuenta que el Spectrum no tiene control de flujo, y tampoco tengo claro si se pueden leer datos del RS232 desde BASIC. Si solo vas a sacar datos hacia afuera, con cuidar de no llenar el buffer de la impresora vas que te matas; si necesitas meter datos al Spectrum, tendrás que usar los canales.

REHome escribió:Quiero hacer un ejemplo en Basic 128K que en pantalla mueste 4 letras, por ejemplo.

Pulse estas teclas:
A) Envía la letra "A".
B) Envía la letra "B".
C) Envía la letra "C".
D) Envía la letra "D".

En pantalla, abajo o arriba que ponga un texto que muestre. "Haz pulsado la tecla C".

No se programación Basic. ¿Es muy complejo de hacer?


La cosa sería más o menos así, de una manera bastante chapucera:

Código: Seleccionar todo

10 PRINT "Pulsa una tecla"
20 LET A$=INKEY$
30 IF A$="A" THEN PRINT "La A"
40 IF A$="B" THEN PRINT "La B"
50 IF A$="C" THEN PRINT "La C"
60 IF A$="D" THEN PRINT "La D"
70 GO TO 20


Imprimimos el menú (línea 10), leemos una tecla y la guardamos en A$ (línea 20). Las líneas 30 a 60 imprimen un mensaje según hayamos pulsado una tecla u otra (atención: la a y la A son cosas diferentes) y en la 70 volvemos arriba para pedir otra tecla.

Esta es otra versión algo mejorada (y creo más rápida). Es muy sencillito, así que esta vez no hay explicaciones:

Código: Seleccionar todo

10 PRINT "Pulsa una tecla"
20 LET A$=INKEY$
30 IF A$>="A" AND A$<="D" THEN PRINT "La ";A$
40 GO TO 20