• *** Nueva placa dual para C64, sintetizador de voz + wifi ***

    Como solo tengo un conector para el puerto del usuario y dos sintetizadores de voz para probar, hace tiempo hice una placa modular para poder intercambiar los sintetizadores de voz que usan PICs distintos, dejando los componentes comunes en una placa y modulos con los componentes especificos de cada sintetizador. Cuando quise conectar el modulo wifi ESP-8266, me encontre con el mismo problema, por lo que opte por hacer la placa compatible con el "bus HD1" para conectar el modulo wifi como si fuera un sintetizador de voz, usando solo los contactos que necesitaba. Como el primer sintetizador que hice con este formato fue el HD1, el conector quedo definido con los pines de ese sintetizador, y el modulo con el HR4 se adapta a ese orden, lo mismo que el modulo wifi, por eso lo de "bus HD1", ya que el conector no es mas que los contactos directos del sintetizador HD1.
    Ya que ultimamente estuve dedicandome mas al tema wifi que al sintetizador de voz, se me ocurrio analizar si podian conectarse los dos, para no tener que andar cambiando de modulo, y parece ser que es posible. Hace unos dias tengo el plano hecho de como conectar todo, pero recien entre ayer y hoy pude ponerme a terminarlo, hay cosas que funcionan y otras que requieren revision, pero seguramente sale andando.
    Aca hay una foto de cuando lo empece a armar, viendo donde ubicar los componentes:

    1476358657 75 FT59124 103 1419s

    Probando como quedaria con los dos modulos conectados:

    1476358782 75 FT59124 103 1423s

    1476358782 75 FT59124 103 1424s

    Asi quedo ya funcional:

    1476358912 75 FT59124 103 1441s

    1476359015 75 FT59124 103 1438s

    1476359115 75 FT59124 103 1436s

    Con los modulos conectados:

    1476359236 75 FT59124 103 1434s

    1476359236 75 FT59124 103 1435s

    La idea basica es utilizar DTR para seleccionar un modulo o el otro, activando DTR (que viene activado por defecto y es lo normal en comunicaciones por modem) se habilita el modulo wifi, y desactivando DTR se podria hablar con el sintetizador de voz. Esto es algo que funciona bien, cuando DTR esta activado se envia una señal a una nueva entrada _CS que tengo que agregar a los sintetizadores, si esta linea esta en 0 el sintetizador deberia ignorar cualquier cosa que reciba, y no enviar cualquier cosa que este transmitiendo, ya que las lineas TX y RX estan casi en paralelo, porque llegan a ambos modulos desde la C64. Con las lineas RTS y CTS no hay problema porque el sintetizador solo utiliza CTS para avisarle a la C64 que no puede recibir datos (porque el sintetizador tiene un buffer limitado), esta linea el modulo wifi no la necesita porque siempre tiene capacidad para recibir lo que envie la C64, por lo cual al activar el modulo wifi (activando DTR) la linea CTS que va a la C64 se pone en 1 siempre mientras DTR este activada, de esta manera se le indica a la C64 que puede enviar datos al modulo wifi en cualquier momento. La linea RTS en cambio sirve para que la C64 le indique a los modulos que no esta lista para recibir datos, esto no se usa en el sintetizador porque nunca envia datos que la C64 no pide, en otras palabras la C64 siempre sabe cuando el sintetizador va a enviar datos, asi que no necesita indicarle al sintetizador que no esta lista para recibir. Sin embargo, si es necesario indicarle al modulo wifi que la C64 no puede recibir datos, por lo cual RTS desde la C64 solo se conecta a ese modulo.
    Habia diseñado el circuito para que las lineas TX de los dos modulos se conectaran en paralelo pero sin hacer cortos, esto requeria que la linea TX que sale del sintetizador pasara por una resistencia de 4K7, pero parece ser que es muy alta y la C64 no llega a ver los datos, por lo que tuve que puentearla para que funcionara, voy a tener que probar de otra manera, ya que estando asi no pueden conectarse los dos modulos a la vez.
    La linea RX de los dos modulos esta en paralelo, aca no hay problemas de cortos, y esto funciona bien, pero probando me di cuenta de que al seleccionar el sintetizador, igual le estoy enviando todo eso al modulo wifi, lo que ocurre es que originalmente con la linea DTR tambien activaba la linea EN (enable) del modulo wifi, pero no tengo suficiente informacion sobre lo que hace asi que no la conecte. No se si apagando EN deja de recibir y enviar, o si apaga el modulo, si lo apaga no me sirve, asi que voy a tener que ir probando.

    Resumiendo, tengo una nueva placa donde puedo probar el modulo del sintetizador de voz, o el modulo wifi, tal como lo hacia antes, solo que ahora tengo que activar la linea DTR del RS232 para hablar con el modulo wifi, y desactivar DTR para hablar con el sintetizador de voz. Si se conecta solo un modulo funciona todo como antes salvo ese detalle de DTR que afecta solo al sintetizador, ya que la C64 la activa por defecto.
    La idea es poder conectar tanto el sintetizador de voz (cualquiera de los dos actuales) como el modulo wifi, y poder hablar por turno con los dos activando/desactivando DTR. Para lograr esto todavia hay que hacer unos ajustes de componentes y algunas pruebas, pero supongo que no pasara mucho tiempo hasta que funcione, por lo menos la parte de hard.
    Una vez que el circuito funcione al 100%, queda hacer una prueba, y esto va a requerir experimentar con la sincronizacion por soft de la comunicacion con ambos modulos, el objetivo de esto es poder comunicarse con los dos modulos (sintetizador y wifi) a 57600 bps durante la interrupcion de video, tal como hice las ultimas pruebas.

    Para finalizar, unas fotos de la placa conectada a la C64:

    1476360844 75 FT59124 103 1433s

    1476361152 75 FT59124 103 1431s

    Con solo el modulo wifi conectado:

    1476361225 75 FT59124 103 1430s

     

  • Despues de algunas pruebas y modificaciones, ya tengo funcionando la placa dual, sintetizador de voz + wifi, por lo menos a 1200 bps que es la velocidad que maneja el BASIC y con la que pude probar. Ahora queda probar la comunicacion con el modulo wifi a 57600 bps y ver si puedo enviar y recibir durante la interrupcion de video sin perder datos, asi si funciona ya manejaria los dos modulos con las mismas rutinas.
    El plano por ahora es este, le puse version preliminar porque puede cambiar, y al haber tantos planos publicados puede ser confuso saber cual es el definitivo. Yo uso un CD4093 en lugar del 7400, pero deberia andar mejor el 7400.


    1476654958 75 FT59124 C64wifisint3
     

  • Dejo el plano actualizado de la version 1.2 del sintetizador HR4.
    Esta version tiene reservados los pines para la lectura de joystick analogico de PC, o paddles/potenciometros, pero es algo que no esta funcionando del todo. Los comandos estan funcionando, reportan correctamente el estado de los dos botones del joystick, pero siempre devuelve el msmo valor de los ejes, como si la palanca estuviera al centro.
    El que quiera grabar o regrabar algun PIC que tenia otra version, me puede pedir el archivo y le paso el .hex para que lo grabe. Por ahora es una version alfa pero no creo que cambie mucho hasta la version final.

    1478829977 75 FT59124 Microsint64 1
     

  • Antes de comentar algo sobre el programa de la aventura conversacional y las rutinas que usa para enviar e imprimir el texto, vuelvo a publicar el video en este hilo asi queda todo junto, originalmente lo publique aca: http://www.retrocomputacion.com/e107_plugins/forum/forum_viewtopic.php?106972.post



    El "driver" que uso ahi le puede ser util a alguien para sus programas en BASIC, se carga en 49152 y ocupa alrededor de 1K, esto incluye dos buffers de 256 bytes cada uno. Hay que activarlo primero con SYS 49164, esto configura la rutina de interrupcion que chequea en cada cuadro los dos buffers, hay un contador de bytes por cada uno, si cada contador es mayor que cero envia un byte del buffer correspondiente a la salida RS232 o a la pantalla, y decrementa el contador correspondiente. Los dos buffers son independientes, uno puede cargar texto a imprimir y no cargar nada para hablar (para enviar por RS232).
    Desde el BASIC, si uno quisiera por ejemplo imitar la frase de juegos de guerra, tendria que hacer:

    10 SYS 49164: REM Esto solo se hace una vez al principio del programa
    20 ZP$="SALUDOS, PROFESOR FALKEN":REM Este es el texto a imprimir
    30 ZV$="SALU+DOS,PROFESO+R FA+LKE-N.":REM Este es el texto a hablar
    40 SYS 49152:REM Esto carga la variable ZV$ en el buffer de transmision
    50 SYS 49155:REM Esto carga la variable ZP$ en el buffer de impresion
    60 SYS 49161
    70 GET A$:IF A$="" THEN 70

    Como la rutina de interrupcion automaticamente comienza a imprimir/hablar apenas se ingresa el primer caracter, la rutina llamada con SYS 49161 espera hasta que no haya mas elementos en el buffer de impresion, de esta manera sincronizamos el programa con la impresion en pantalla. SYS 49158 hace lo mismo pero con el buffer de transmision, espera hasta que se haya enviado todo al sintetizador de voz.
    No es necesario llamar a 49161, se puede cargar la variable con mas texto y llamar de nuevo a 49155 para agregarlo al buffer, si el contenido de ZP$ es mas grande que el espacio libre en el buffer de impresion, la rutina se quedara esperando hasta que haya lugar libre. Como la rutina de interrupcion sigue imprimiendo y vaciando ese buffer, todo ocurre en paralelo.
    El envio por RS232 es siempre a 57600 bps, no tiene utilidad si no se armaron una placa del sintetizador de voz, aunque tambien con una interfaz RS232 conectada a una PC se podria ver en la PC el texto que envia el programa.
    Adjunto la rutina por si alguien quiere probarla.
    Me olvidaba, la rutina tambien hace que el cursor este siempre visible, y lo fuerza a empezar invertido cada vez que se imprime un caracter, de esta manera al imprimir un texto se ve el bloque del cursor, y recien empieza a parpadear una vez que se termina de imprimir. El parpadeo es el estandar del sistema, pero modificado para actuar como me convenia para parecerse a una terminal. Como la orden INPUT imprime un signo ?, es necesario esperar a que se termine la impresion antes de ejecutar esa orden, antes de poner la rutina en 49161 para esperar el fin de la impresion, me pasaba que el INPUT imprimia el ? en medio de la impresion del texto anterior, porque lo ejecutaba antes de que se terminara de imprimir.

    ]txdrv2.prg[/file]
     

  • En esta foto se alcanza a ver el borde inferior de la pantalla cuando el programa esta imprimiendo y hablando, la franja verde es el tiempo usado para enviar un byte a 57600 bps (entre 3 y 4 lineas, incluyendo el manejo del buffer), y la franja roja es el tiempo usado para imprimir un caracter.

    1480945512 75 FT59124 103 1574s

    En el video cada tanto se puede ver un flash donde todo el borde se pone rojo, eso es efecto del scroll, que excede el tiempo disponible en el borde entre dos cuadros, causando que el borde entero quede rojo por lo que tarda en copiar la memoria de pantalla.
    La C64 corriendo el juego:

    1480945726 75 FT59124 103 1582s

    Esta foto salio oscura, pero cuando la vi me recordo un poco a la portada del juego Hacker II:

    1480945879 75 FT59124 103 1585s
     

  • Muy bueno, y si tenes razon con lo del Hacker, tiene un aire .
     

  • que bueno!!!! que gran laburo de hardware y software !!felicitaciones!
    ojala tuviera tiempo para poder probarlo...
    lo quise jugar pero no entendia bien los comandos, vi el elaudiovisual de youtube y me encanto.
    veo un indicador , veo un pulsador, veo una etiqueta, veo un mono !!! genial
    buenisimo!!!
     

  • Estoy casi terminando una version que detecta si hay un sintetizador conectado, muestra el modelo y version, si no lo detecta se puede jugar sin voz, si lo detecta, permite elegir si habla todos los mensajes, algunos o ninguno.
     

  • Adjunto una version preliminar, todavia hay que corregir cosas, por ejemplo los comandos para grabar y cargar partidas, y agregarle alguna pantalla donde se mencione que el programa original es de un libro sobre programacion de aventuras.
    Me parece que sin sintetizador es jugable.

    ]neutronia1.d64[/file]
     

  • La pantalla de deteccion del sintetizador:

    1481238080 75 FT59124 103 1623s

    Corriendo la aventura:

    1481238128 75 FT59124 103 1625s

    Otra de la deteccion:

    1481238273 75 FT59124 103 1610s


     

Moderador (s): thierry, homecomputer, Selandari, pastbytes, Durandal