Hace tiempo encontre este articulo: http://www.qsl.net/kp4md/petascii.htm
Ahi habla de un pequeño circuito amplificador para convertir la salida MIC de una ZX81 a niveles TTL, para transferir programas de ZX81 a una Commodore 64, con conversion de caracteres.
El circuito es bastante simple, un diodo para dejar pasar solo la parte positiva de los pulsos, y dos transistores para amplificar la señal y hacerla cuadrada.
En mi caso particular, mi interes esta en el circuito solamente, para poder controlar la placa de sintetizador de voz desde cualquier maquina Timex o Sinclair (ZX81, Spectrum, TS2068, etc.) de la forma mas universal y barata posible, ya que esto funcionaria en cualquiera, siempre que se escriba el soft adecuado para cada una.
Hace unos dias hice unas pruebas armando todo provisoriamente, y el amplificador permitia que tocando la entrada MIC hiciera hablar al sintetizador, por el ruido inyectado por el cuerpo al circuito. Sin tener osciloscopio me era imposible saber si una señal de la Spectrum llegaba correctamente a los niveles TTL, asi que decidi armar bien la placa, y para no perder mucho tiempo hice un adaptador para reutilizar un sintetizador de voz para MSX.
Aca se ven las dos placas:
Faltaba ahora la parte de soft para controlarlo, y para eso hice unas pruebas desde el BASIC usando la instruccion OUT al puerto 254 para controlar la salida MIC, simplemente activando y desactivando la salida para verificar que la señal llegaba a la placa. Como todo parecia estar bien, decidi hacer una mezcla de programas, por una parte usar el codigo del sintetizador TAVZX, que se encarga de buscar la variable Z$ y averiguar la direccion en memoria de la misma, y por otra parte la rutina de envio RS232 por puerto de joystick utilizada con el sintetizador para MSX, pero adaptada para usar la salida MIC de la Spectrum.
Despues de un monton de pruebas los resultados fueron negativos conectando el sintetizador, pero hay tantas variables en el medio que no es de extrañar que no funcione.
Hoy estuve corrigiendo el programa y probando con distintos textos, y la conclusion es que el programa el correcto, envia a 19200 bps (esto esta medido capturando la salida MIC como audio), y llama a las rutinas correspondientes para enviar la secuencia de unos y ceros. Pero por alguna razon, lo que sale por MIC es distinto. Puede ser que sea un problema de la adaptacion de MSX a Spectrum.
Esta es una captura de lo que sale por MIC:
Se puede ver que salen bastante definidos los bits, aunque no corresponde con el texto enviado. Hay que tener en cuenta que estoy enviando a 19200 bps y tuve que capturar a 192KHz, por lo que hay alrededor de 10 muestras por bit, lo que hace que no sea muy precisa la captura, pero se puede ver que para bits consecutivos con el mismo valor el nivel mas o menos se mantiene. Esto puede ser un problema si no se mantiene lo suficiente, ya que un byte podria tener todos ceros o todos unos, y si se cae la señal antes de terminar el byte se altera el dato recibido. Esto por otro lado se puede resolver enviando a mayor velocidad.
Voy a tener que seguir revisando el codigo para descifrar que esta ocurriendo, y si funciona ya tenemos sintetizador de voz para las Sinclair.
La placa chica es el adaptador de Sinclair a TTL, la placa grande es el sintetizador de voz para el puerto de joystick de MSX. Todo se alimenta con una fuente de 5V, entra el cable desde la salida MIC de la Spectrum, y sale el cable de audio desde el sintetizador hacia los parlantes de PC.
Unas fotos mas de la placa:
Lo ideal seria que funcionara a 57600 bps, para luego adaptar la rutina de MSX tambien para esa velocidad y que quede como nuevo estandar. A esa velocidad se puede enviar un caracter en cada interrupcion de 50/60 Hz sin alterar la ejecucion de un juego en asm.
Voy a tener que seguir peleando con el Z80, que es un procesador al que no termino de adaptarme.