• Estuve investigando el puerto RS232 de la Interface 1 para conectar la placa del sintetizador de voz y me encontre con descripciones un poco confusas en el manual, despues de equivocarme en la conexion pude dar con el cableado correcto.
    El cable que me arme compatibiliza el conector RS232 con el de la PC, aunque descubri que la Interface 1 tiene varias limitaciones, como por ejemplo que no lee la señal CTS, que es justamente la que usa mi placa para indicarle que no puede aceptar mas datos por haberse llenado el buffer. Aparentemente esta interfaz funciona siempre con DTR/DSR, por lo cual puentee las señales de salida CTS y DTR en mi placa para contentar tanto a las computadoras que usan RTS/CTS como a las que usan DTR/DSR.
    Si bien la Interface 1 permite elegir varias velocidades de 50 a 19200bps, siempre trabaja en 8 bits, sin paridad y con 1 bit de stop, que es justamente lo que usa el sintetizador.
    La utilizacion de este puerto serie es bastante simple, lo primero que se hace es ajustar la velocidad, por ejemplo 300bps, esto se hace con la orden FORMAT, indicando el modo en que se va a trabajar con el puerto, que puede ser binario o texto. Segun el manual, en modo binario se envian los caracteres tal como se especifican en las ordenes PRINT#, sin ninguna alteracion. Si se elige el modo texto en cambio, hay codigos reservados para los tokens del BASIC, y la ROM hace la conversion automatica de token a ASCII, esto es si tenemos un caracter que representa a la orden PRINT, se enviaran 5 caracteres (P, R, I, N y T) en vez del codigo correspondiente. Tambien se agrega automaticamente un avance de linea por cada retorno de carro.
    Para ajustar entonces la velocidad a 300bps en modo texto hacemos:

    FORMAT "t";300

    Luego debemos abrir el puerto, que tambien especifica el modo, y el numero de canal a utilizar. Si se utiliza el canal 3, tambien se redireccionan automaticamente los comandos de impresora al puerto serie.

    OPEN# 3;"t"

    Para enviar datos simplemente se utiliza PRINT #:

    PRINT #3;"RETROKOMPUTASIO+N PU+NTOKOM"

    Si queremos enviar un listado al puerto serie, simplemente hacemos LLIST
    Y por ultimo, cerramos el puerto:

    CLOSE# 3

    A continuacion sigue el video con las pruebas, y la descripcion en youtube:



    Sintetizador de voz en PIC16F648A, conectado a una Sinclair Spectrum 48K a través de la conexión RS232 de la ZX Interface 1. Se pueden ver las conexiones, con el video saliendo por video compuesto, la salida serie conectada a un cable armado especialmente para estandarizar la conexión RS232 al mismo conector de una PC, y los parlantes conectados a la placa.
    Se escribió un programa que dice "SINCLAIR SPECTRUM" en el arranque, y luego va pidiendo textos para enviar por la salida serie a la placa.
    Hubo que cambiar el color de borde porque costaba mucho enfocar la imagen al ser la filmadora NTSC y la Spectrum PAL.
    El PIC utiliza las lineas RX, TX, CTS y GND del puerto serie, pero la RS232 de la Interface 1 no lee CTS, sino DSR, por lo cual hubo que modificar la placa puenteando CTS con DTR para enviar la indicacion de que la placa esta lista para recibir datos por ambas señales.
    Por último, se ve al sintetizador intentado leer un LLIST. El puerto serie puede abrirse como texto o binario, en este caso esta abierto como texto, lo que permite que al enviarle códigos pertenecientes a las instrucciones, estos se conviertan a texto, es decir la ROM convierte automaticamente tokens a ASCII, por eso es posible enviar el listado a la salida con LLIST. Al parecer tambien requiere que se abra el canal 3 para que la opcion del listado sea posible.
    Si se abre el puerto serie como binario, se envían los códigos tal como salen con PRINT#, y se dispone de los 8 bits de datos.
     

  • Me interesa, me interesa, ya que soy usuario de la interface 1...
     

  • Llegaste a probar algo con RS232 en la Interface 1? Voy a pasar en limpio el cableado asi lo pueden armar, quiero probar tambien con algun programa terminal, tengo un par pero hay que pasarlo a audio primero, o a microdrive ya que tambien tengo uno. Me parece que por RS232 se puede cargar programas, tengo que intentar eso tambien.
     

  • En eso estoy, justo estaba tratando de cargar desde la +3 a la 48 K común con la interface 1 y viceversa, usando solo los comandos basic y tranfiriendo porciones con CODE y un cargador, vamos a ver. De repente es mejor una rutina en Assembler, pero ahí me tranco con la Shadow ROM de la Interface 1

    Saludos!
     

  • Pero la ROM de la Interface 1 ya tiene comandos para grabar y cargar programas por RS232 entre maquinas creo, con SAVE* y LOAD*, sale en el manual de la Interface1. Me habian recomendado un programa para cargar directamente desde la PC por RS232, era como una especie de emulador de red de la Interface1, creo que fue Hernan si mal no recuerdo. Yo no lo probe todavia porque no arme el cable null modem, el que tengo es de DB25, tengo adaptadores pero no me hice tiempo ahora. El programa se llama Spxfr, sino creo que tambien podes transferir desde la PC si emulas Spectrum 48K con Interface1, con los comandos BASIC de la interfaz, habria que probar. Que tal andas para armar placas? Te podria mandar un chip pero la verdad es que no tengo tiempo ni elementos para armar nada, sino mi placa hubiera quedado mas prolija. Ya me lleva bastante tiempo el desarrollo haciendo tiempo de donde no hay, y ahora escribir de a poco el manual de uso. De hecho es probable que no arme ninguna placa en el futuro y solo grabe los chips.
     

  • Dos años despues, revivo este tema que quedo olvidado, no me di cuenta de poner aca el video de la prueba que hice con la version final del sintetizador conectado a la CZ Spectrum con Interface 1. Para el que no sigue el foro de proyectos lo pongo aca de nuevo:



    Un detalle interesante es que para armar la demo, primero escribi el texto que tendria que salir impreso, luego escribi el texto como tenia que enviarse al sintetizador, y una vez que estaba todo listo, use el emulador EightyOne en Windows para conectar el sintetizador al puerto serie de la PC, y usarlo desde la emulacion como si tuviera una Spectrum con Interface 1. Por otro lado, use la opcion de Quick BASIC del 48K Keyboard Helper del emulador Spin, que me permitio copiar de un archivo de texto cada linea para que se vaya tipeando en la emulacion. Como Spin anda bien para pegar listados pero no controla el puerto RS232, tenia que grabar tzx en Spin y cargarlo en EightyOne para ir probando a medida que armaba el programa. Llevo un monton de trabajo, pero muchisimo menos que si hubiera tenido que tipearlo en la maquina real, y recien cuando quedo completo conecte la Spectrum y cargue el tzx desde la PC.
    De paso, no me acuerdo si habia publicado las conexiones del cable RS232 para la Interface 1, aca esta el plano que hice cuando lo arme:


    1379904251 75 FT59219 Epsn3329s


    Por si no queda claro, el conector de la izquierda es el de la RS232 de la Interface 1. El conector es bastante raro, la disposicion de señales no es estandar, y esta hecho como DCE, es decir como si fuera por ejemplo un modem, por la forma en que estan etiquetadas las señales. En un modem, RX es la salida de datos y TX es la entrada, porque se nombra todo de forma que haya una correspondencia 1 a 1 entre un conector DTE (por ejemplo una PC) y un conector DCE (por ejemplo un modem). La señal TX seria la salida de datos del DTE, y se conectaria a la señal TX del DCE, que en realidad seria una entrada. En esta interfaz esta hecho de esa manera, como si fuera un modem, lo mismo con las señales de control.
    El cable que arme compatibiliza el puerto con uno de PC, lo deja tal como el de PC, eso me permitia conectar el sintetizador tanto a la PC como a la Interface1 sin modificar el conector. Si se quiere conectar la IF1 con la PC, se necesitaria ademas un cable null modem.
    Los colores que estan anotados en el plano son los del cable que use para armarlo, que era una extension del puerto que corte para utilizar el cable y la ficha DB9.
     

  • Recien veo que no puse el codigo que genera el sonido de la demostracion, ahora estoy en Linux y tengo que investigar como imprimir a un archivo de texto el listado de un programa BASIC en algun emulador, si es eso posible. Por lo visto tipee solo los comandos al sintetizador (con PRINT #) y fui agregando los PRINT para pantalla directamente en el emulador, asi que solo tengo esto, pero sirve para tener una idea (la parte del final que genera la musica parece incomprensible, pero se genera automaticamente con el programa controlador hecho en Visual Basic):

    10 FORMAT "b";19200
    20 OPEN #4;"b"
    30 PRINT #4;"(Z30N20C06VF)BIENBENI+DOS AE+STA- DEMOSTRASIO+N ":PAUSE 120
    40 PRINT #4;"DE-LSINTETISADO+R  A+CHE- E+RE- KUA+TRO-.":PAUSE 120
    50 PRINT #4;"E+STE-SINTETISADO+R INTE+GRA- LASFUNSIO+NE-S ":PAUSE 120
    60 PRINT #4;"DESI+NTESIS DEBO+S,IJENER2ASIO+N DE-RUI+DO- ISONI+DO-.":PAUSE 200
    70 PRINT #4;"DISPO+NE DEUN U+NIKO KANA+L DE-SONI+DO DE-O+CHOBI+TS,":PAUSE 120
    80 PRINT #4;"KO-N BOLU+MEN AJUSTA+BLE E-NDIESISE+IS NIBE+LE-S.":PAUSE 200
    90 PRINT #4;"BOLU+MEN KI+NSE (VE)KATO+RSE (VD)TRE+SE (VC)DO+SE ":PAUSE 120
    100 PRINT #4;"(VB)O+NSE (VA)DIE+S (V9)NUE+BE (V8)O+CHO (V7)SIE+TE ":PAUSE 120
    110 PRINT #4;"(V6)SE+IS (V5)SI+NKO (V4)KUA+TRO (V3)TRE+S (V2)DO+S (V1)U+NO (V0)SE+R2O-.":PAUSE 200
    120 PRINT #4;"(VF)MODIFIKA+NDO EL BOLU+MEN SE(V8)SE(VF)PUE+DE":PAUSE 120
    130 PRINT #4;"(V8)DE(VF)SIMULA+R(V8)LA+R(V4)LA+R(VF)U-NEFE+KTO(V8)TO":PAUSE 80
    140 PRINT #4;"(VF)DE-(V8)DE-(VF)E+KO-(V8)E+KO-(V4)E+KO-.":PAUSE 120
    150 PRINT #4;"(VF)ES POSI+BLE AJUSTA+R LABELOSID+AD (C0A)PA+R2A ":PAUSE 120
    160 PRINT #4;"ABLA+R LE+NTO-,(C04)O PA+R2A ABLA+R RA+PIDO-(C06),":PAUSE 120
    170 PRINT #4;"SE- PUE+DE KAMBIA+R E-LTI+PO DEBO+S,(Z20)PA+R2A ":PAUSE 120
    180 PRINT #4;"TENE+R U+NABO+S MA+SGRA+BE-,(Z40)O- U+NABO+S MA+SAGU+DA-(Z30),":PAUSE 200
    190 PRINT #4;"TAMBIE+N SE PUE+DE AJUSTA+R LANO+TA DE-LABO+S,":PAUSE 120
    200 PRINT #4;"PA+R2A KANTA+R,(C10)DO (N22)RE (N24)MI (N25)FA (N27)SOL ":PAUSE 120
    210 PRINT #4;"(N29)LA (N2BC20)SI.(N20C06)E-L SINTETISADO+R FUNSIO+NA ":PAUSE 200
    220 PRINT #4;"KO+MOU+N SEKUENSIADO+R,PO-RLO KUA+L NO-ES NESESA+R2IO ":PAUSE 120
    230 PRINT #4;"ENBIA+RLOSKOMA+NDO-S DESONI+DO E-NTIE+MPO REA+L,":PAUSE 200
    240 PRINT #4;"SHA-KE KE+DAN ALMASENA+DOS ENU+NA LI+STA DE-'REPRODUKSIO+N,":PAUSE 200
    250 PRINT #4;"I-SO+N PROSESA+DOS ENELO+RDEN DE-SHEGA+DA-.":PAUSE 200
    260 PRINT #4;"ADEMA+S DEL SINTETISADO+R DEBO+S,SEDISPO+NE DEU+N ":PAUSE 150
    270 PRINT #4;"JENER2ADO+R DE RUI+DO,KE KOMPA+RTE KONEL JENER2ADO+R ":PAUSE 120
    280 PRINT #4;"DESONI+DO,LASOPSIO+NES DE-'MODULASIO+N.":PAUSE 200
    290 PRINT #4;"ES POSI+BLE ELEJI+R KUA+TRO MO+DOS DE MODULASIO+N ":PAUSE 200
    300 PRINT #4;"DEBOLU+MEN KON KUA+TRO ENBOLBE+NTES DISTI+NTA-S.":PAUSE 200
    310 PRINT #4;"SE PUE+DE EMITI+RSONI+DO KON TRE+S INSTRUME+NTOS PREDEFINI+DOS,":PAUSE 120
    320 PRINT #4;"BA+JO-,(M4E1Z40N10C10)/4(N12)/4(N14)/4==":PAUSE 200
    330 PRINT #4;"(C06N20Z30)O+RGANO-,(N40C80)/5(N42)/5(M4E1Z40N44)/5==":PAUSE 120
    340 PRINT #4;"(C06N20Z30)I-GITA+RA ELE+KTRIKA-,(N10C10)/6(N12)/6(M4E1Z40N14)/6==,":PAUSE 200
    350 PRINT #4;"(Z30N20C06)JENER2A+NDO RUI+DO SEPUE+DE ASE+REFE+KTOS,":PAUSE 120
    360 PRINT #4;"KO+MO U+NA EKSPLOSIO+N,(Z00N30C06M4E1VF)/3(N26)/3":PAUSE 100
    370 PRINT #4;"(N20)/3(N16)/3(N10)/3(N06)/3(N00)/3(V8)/3(V4)/3(V2)/3(V0)/3,":PAUSE 200
    380 PRINT #4;"(Z30N20C06VF)O-USA+R LAENBOLBE+NTE TRIANGULA+R ":PAUSE 120
    390 PRINT #4;"PA+R2ASIMULA+R E-LRUI+DO DELMA+R,":PAUSE 120
    400 PRINT #4;"(Z20N30CF8M2E0)/3======":PAUSE 600
    410 PRINT #4;"(Z30N20C06VF)LOSINSTRUME+NTOS SEPUE+DEN USA+R ":PAUSE 120
    420 PRINT #4;"PA+R2ASIMULA+R RUI+DOS'MEKA+NIKOS,":PAUSE 120
    430 PRINT #4;"(N10Z08C40M1E0VF)/4(Z10)/4(Z16)/4(Z20)/4(Z26)/4(Z30C30)/4":PAUSE 400
    440 PRINT #4;"(Z36C30)/4(Z40C30)/4(Z46C30)/4(Z50C30)/4(N16C7F)/4.":PAUSE 500
    450 PRINT #4;"(Z30N20C06)TAMBIE+N SEDISPO+NE DEUNKUA+RTO INSTRUME+NTO ":PAUSE 250
    460 PRINT #4;"DEFINI+BLE PORELUSUA+R2IO-,KE SEPUE+DE KARGA+R ENMEMO+R2IA RA+M.":PAUSE 200
    470 PRINT #4;"E+STA O+NDA PUE+DEUTILISA+RSE KO+MOINSTRUME+NTO,":PAUSE 200
    480 PRINT #4;"KO+MOENBOLBE+NTE,OKO+MOA+MBASKO+SAS SIMULTANEAME+NTE-.":PAUSE 200
    490 PRINT #4;"ENELSIGIE+NTE EJE+MPLO SE KA+RGA U+NA O+NDA TRIANGULA+R ":PAUSE 200
    500 PRINT #4;"KO+MO KUA+RTO INSTRUME+NTO,ISE PRUE+BAN DISTI+NTOS ":PAUSE 200
    510 PRINT #4;"INSTRUME+NTOS,ENBOLBE+NTES,IMO+DOS DE'MODULASIO-N.":PAUSE 120
    520 PRINT #4;"(I848C939BA3AAB2BAC1C9D1D9E0E8F0F7FFF7F0E8E0D9D1C9C1BAB2AAA39B938C847C746D655D564E463F372F27201810090109101820272F373F464E565D656D747C)"
    530 PRINT #4;"(Z36M4E1VF)"
    540 PRINT #4;"(N52CFF)/5(C14)=(N47C55)/5(N49C6F)/5(N4BC6B)/5(N50C84)/5":PAUSE 80
    550 PRINT #4;"(N52CFE)/5(N47CB8)/5(N47CB8)/5(N54CFF)/5(C36)=(N50C71)/5":PAUSE 80
    560 PRINT #4;"(N52C94)/5(N54C8F)/5(N56CA0)/5(N57CFF)/5(C70)=":PAUSE 80
    570 PRINT #4;"(N47CB8)/5(N47CB8)/5(N50CF5)/5(N52C7F)/5(N50C71)/5":PAUSE 80
    580 PRINT #4;"(N4BC7D)/5(N49C5F)/5(N4BCE8)/5(N50C71)/5(N4BC7D)/5":PAUSE 80
    590 PRINT #4;"(N49C5F)/5(N47C63)/5(N46CA0)/5(N47C63)/5(N49C5F)/5":PAUSE 80
    600 PRINT #4;"(N4BC7D)/5(N47C55)/5(N49CCE)/5(M0N32C20)/6(N30C21)/6":PAUSE 80
    610 PRINT #4;"(N2BC1B)/6(N29C18)/6(M4N22C22)/4(N17C0C)/4(N19C0C)/4":PAUSE 80
    620 PRINT #4;"(N1BC0D)/4(N20C11)/4(N22C22)/4(N17C15)/4(N17C17)/4":PAUSE 80
    630 PRINT #4;"(N24C27)/4(N20C0E)/4(N22C13)/4(N24C12)/4(N26C17)/4(N27C2A)/4":PAUSE 80
    640 PRINT #4;"(N17C17)/4(N17C17)/4(N20C1F)/4(N22C10)/4(N20C11)/4(N1BC0D)/4":PAUSE 80
    650 PRINT #4;"(N19C0C)/4(N1BC1D)/4(N20C11)/4(N1BC0D)/4(N19C0C)/4(N17C0C)/4":PAUSE 80
    660 PRINT #4;"(N19C1A)/4(N1BC0D)/4(N19C0C)/4(N17C0C)/4(N16C0A)/4":PAUSE 80
    670 PRINT #4;"(N17C2E)/4(M0N37CB8)/4(M0N2BC35)/6(N27C19)/6(N29C18)/6":PAUSE 80
    680 PRINT #4;"(N2BC1F)/6(N27C15)/6(N29C34)/6(N22C10)/6(N24C15)/6(N26C14)/6":PAUSE 80
    690 PRINT #4;"(N22C10)/6(N27C2E)/6(N24C15)/6(N26C14)/6(N27C15)/6(N22C13)/6":PAUSE 80
    700 PRINT #4;"(N21C20)/6(N1BC0D)/6(N21C0F)/6(N19C1A)/6":PAUSE 80
    710 PRINT #4;"(M4N49C6F)/7(N4BC6B)/7(N51C78)/7(N52C94)/7(N54C8F)/7":PAUSE 80
    720 PRINT #4;"(N56CBB)/7(N57CFF)/7(C54)=(N56CFF)/7(C5C)=(N54CFF)/7(C36)=":PAUSE 80
    730 PRINT #4;"(N56CFF)/7(C5C)=(N49CCE)/7(N51CF0)/7(N52CFF)/7(C14)=":PAUSE 80
    740 PRINT #4;"(N22C22)/4(N20C1F)/4(Z40E0N52CFF)/4(C14)=(N47C55)/4(N46C50)/4":PAUSE 80
    750 PRINT #4;"(N47CB8)/4(N54CFF)/4(C36)=(N47C55)/4(N46C5D)/4(N47CB8)/4":PAUSE 80
    760 PRINT #4;"(N52CFE)/4(N50CF5)/4(N4BCE8)/4(N49C5F)/4(N47C63)/4(N46C50)/4":PAUSE 80
    770 PRINT #4;"(N47C63)/4(N49CBE)/4(Z26M1E0N42C4A)/5(N44C47)/5(N46C5D)/5":PAUSE 80
    780 PRINT #4;"(N47C55)/5(N49C5F)/5(N4BC7D)/5(N50CF5)/5(Z20N4BCD6)/5(Z16N49CCE)/5":PAUSE 80
    790 PRINT #4;"(N4BC7D)/5(Z10N52C7F)/5(N47CB8)/5(N46CAD)/5":PAUSE 80
    800 PRINT #4;"(Z36M4E0N47CFF)/5=(C1B)=":PAUSE 80
    810 PRINT #4;".(Z30N20C06M0VF)FIN(V8)FIN(VF)DELA(V8)LA(VF)DEMOSTRASIO+N(V8)SIO+N(V4)SIO+N(VF)"
    820 CLOSE #4
     

  • Hago esta pregunta acá porque me parece que condice con la info dada en este topic.
    Hace tiempo estoy tratando de conectar un wifi modem basado en el fimware de Bo Zimmerman, algo muy popular para acceder a BBS. Tengo ya uno funcionando en Amiga, pero no he logrado conectarlo satisfactoriamente a una Spectrum con Interface 1. Si lo conecto al PC corriendo el Spectaculator, y usando el adaptador RS232 a USB, funciona perfecto. El tema es que al conectarlo a la Interface 1, y usando incluso el esquema de cableado descrito acá, así como uno que se describe en el sitio de Paul Farrow que es similar, no logro nada. Usé dos software de terminal en el emulador y ambos funcionaron. Pero en la máquina real nada.
    Los softwares son estos :

    LINK

    LINK

    Incluso he configurado el firmware del modem para dejar DTR a nivel alto siempre para evitar el error de "No Carrier" y activado el control de flujo usando RTS/CTS.
    Si alguien ha logrado hacer funcionar este invento con la Interface 1 agradezco info.
     

  • Es rara la RS232 de la IF1 porque tiene DTR pero no DSR, tiene CTS pero no RTS. Mis modems wifi estan armados exclusivamente para C64 asi que no puedo probarlos con la IF1, pero en su momento use esa conexion para "convertir" el RS232 de la IF1 a uno como el de PC, por eso termina en 9 pines macho. De ahi si queria conectar a la PC, usaba un cable null modem, que es lo que te faltaria porque el zimodem tiene los pines como si fuera una PC, no como un modem (en un modem RX es salida y TX es entrada). Tenes foto del modem que estas usando?

    Yo hasta ahora no pude encontrar una terminal para IF1 que funcione, PlatoTerm tengo entendido que es una terminal grafica para entrar a servidores Plato, es una especie de sistema operativo para fines educativos que usaban las universidades y los militares para tomar cursos a distancia, no se si sirve como terminal comun. El otro programa no lo conocia.

     

  • Es que en principio y por lo que he leido el RS232 de la Interface 1 estaba orientado a conectar impresoras seriales y poco más. Voy a porbar con un cable nullmodem, es cierto. El modem termina en una placa con ficha DB9 hembra que contiene ya el MAX 232 y el regulador de voltaje, estoy usando una que tiene activas todas las señales, ya que las más comunes tienen solo TX, RX y alimentación. Quizá sea el armado del cable a la IF1, que al terminar en ficha macho DB9 y no hembra DB25 como supuestamente sería, haya alguna incompatibilidad ahí. Respecto al firmware del zimodem, he probado incluso uno que invierte los pines de TX y RX y hace el cambio de nivel alto a nivel bajo, sin obtener resultado tampoco. Hoy en la noche pongo fotos del invento, pero está basado en el Node MCU LoLin V3, que lleva el ESP-12E, es lo mismo que el ESP8266 pero con más pines para GPIO, posibilitando tener todas las señales del RS232 disponibles.
     

Moderador (s): homecomputer, Selandari, pastbytes, Palamar, phd, Durandal