• Hice una prueba del sintetizador con PIC conectado a la Talent por el puerto de joystick, usando una rutina en codigo maquina que permite enviar texto desde BASIC a 19200 bps simulando un puerto RS232.
    La rutina tiene que cargarse con BLOAD al principio, y despues se la llama con USR(TEXTO), por ejemplo A=USR("SALUDOS")
    Antes de enviar cada caracter, chequea si la señal CTS del sintetizador esta activada (en 0), y de ser asi se detiene y retorna al BASIC la cantidad de caracteres que quedaron sin enviar, para poder reintentar el envio con el resto de la cadena.
    Use el programa R.E.C. de DamianWorf, ya que necesitaba algo en BASIC y el menu de opciones era ideal para probar tanto la secuenciacion de voz como los comandos inmediatos, por eso pruebo cambiando rapidamente las opciones del menu.
    Un detalle que no habia tenido en cuenta es que el programa usa ordenes PLAY, y espera a que termine la reproduccion antes de continuar, por lo que conecte la salida que indica que se esta reproduciendo sonido a la entrada del pin 3 (joystick hacia la izquierda). La señal CTS esta conectada al pin 1 (joystick hacia arriba), por lo que en el programa una linea como esta:

    1010 IF PLAY(0)<>0 THEN 1010

    se convierte en esta:

    1010 IF STICK(2)
    Esto es asi porque normalmente CTS esta en 0, por lo que STICK siempre detecta 1, y PLAYING esta normalmente en 0 (cuando no reproduce sonido), es decir que cuando el sintetizador esta conectado, STICK retorna:

    0 si CTS esta desactivada (el sintetizador no puede recibir mas datos) y se esta reproduciendo sonido
    1 si CTS esta activada (el sintetizador puede aceptar datos) y se esta reproduciendo sonido
    7 si CTS esta desactivada y no se esta reproduciendo sonido
    8 si CTS esta activada y no se esta reproduciendo sonido

    Si STICK retorna un valor <7 sabemos que el sintetizador esta reproduciendo sonido, pero este chequeo solo es necesario si queremos sincronizar la ejecucion con la emision de sonido.

    Este es el video de prueba:



    Ya voy a publicar el circuito y el codigo de la rutina cuando me ordene un poco.

     

  • El resultado es Muy bueno!.
    Como podre disponer de uno para hacer desarrollos?

    Saludos!.
    DamianWorf
     

  • Voy a esperar primero a que lleguen los que envie, ahora igual no tengo ningun PIC de esos salvo los dos que estoy usando, mas adelante se podria arreglar para que le envie a alguien algunos chips grabados, pero habria que ver quien puede armar placas, como te habia comentado el cable lo corte de uno RS232 de PC, asi que es dificil hacer una placa que sirva para todos. En la Talent no cabe bien la ficha en ese puerto (el puerto B que es el que esta mas al frente de la maquina), porque en las maquinas los conectores suelen estar diseñados para las fichas de joystick, que no tienen tornillos a los lados. En el puerto A se enchufa perfectamente porque a los lados es plano, pero en el puerto B del lado izquierdo el plastico de la carcasa esta mas salido y entonces se enchufa a medias. Todos los conectores DB9 que vi tienen ese problema, al menos los que son para placas, lo cual es una lastima porque es una placa ideal para hacerla de tamaño reducido, sin cable, con un DB9 de un lado y un jack de audio del otro. Como no hay cajas de plastico donde entre todo y quede el DB9 firme, por ahora parece que va a haber que usar un cable tal como hice con mi placa, se podria usar un DB9 para placa pero habria que cortarle los costados, y no se que tanto soporte la placa conectando y desconectando tanto el DB9 como la salida de audio.
    Resumiendo, todavia hay que encontrarle una forma practica con componentes comunes para poder hacer un diseño de placa que sirva para todos, yo lo que puedo mandar son los PIC, tengo hecho el manual, tambien puedo subir el programa de Windows para controlarlo e ir probando comandos, y la rutina en asm para manejar el chip desde la MSX. Creo que con eso hay bastante para que puedan experimentar, yo voy a arreglar un poco mas la rutina de transmision por joystick, y no se cuanto mas voy a poder dedicarme a MSX, mi intencion es probarlo en mas plataformas asi que en algun momento tengo que seguir con otra.
     

  • Este es el esquema de conexion para el puerto de joystick en MSX:


    1380685969 75 FT84787 Picsynthmsx1


    No se que tanto consumo soporta el puerto, pero no son necesarios los 3 leds, con el led PLAYING, que indica cuando se esta reproduciendo sonido, tendria que alcanzar. El led NOT_READY/CTS usa una resistencia mas grande porque la señal tiene que llegar bien al puerto, si se usa un led de alto rendimiento anda perfecto. Y por ultimo, el led CONFIGMODE no tiene mucho sentido en esta version del sintetizador, ya que es un indicador util solo cuando se esta controlando el chip desde una terminal.
     
  •  

  • Retomo este tema, aunque en realidad no hay novedades, mas bien es para ver si alguien tiene experiencia en asm de MSX y puede ayudar a darle forma a la rutina de transmision serie (RS232) por el puerto de joystick.
    Yo parti de estas rutinas: LINK
    Por lo que veo de la rutina que me quedo, use la 0.5 (aunque por ahi use una mezcla con la 1.0), que es esta: LINK
    Tambien hay rutinas de recepcion pero en este caso no las use para nada, algun dia seria bueno integrarlas para tener un paquete de rutinas para uso general.
    Adjunto la rutina modificada tal como la use en el video a 19200 bps, no pego el codigo aca porque no sale bien formateado, tambien esta el .bin por si alguno quiere probarla con el circuito que puse antes, agregando un MAX232 para adaptar voltajes a RS232.
    Como explique antes, uso una direccion del joystick para leer la señal CTS, y eso se verifica en la rutina justo antes de enviar cada byte de la cadena, si el receptor (en mi caso el PIC) esta ocupado, la rutina interrumpe el envio y retorna la cantidad de caracteres que quedaron sin enviar.
    Yo ordene un poco el codigo, aunque gran parte es el codigo original con los comentarios en portugues, pero la rutina estaba hecha para leer una cadena de texto en el mismo codigo y transmitir eso sin ningun tipo de chequeo. Lo que agregue fue la lectura del parametro de la llamada USR, verifico si se envio una cadena de texto a la rutina, si no es asi se retorna 0, si es una cadena, se obtiene la direccion en memoria, la cantidad de caracteres, y se envia, chequeando en cada caracter la linea CTS. Si en algun momento se interrumpe la transmision, retorna la cantidad faltante como ya explique, si todo va bien retorna 0.
    Lo ideal seria que se pudiera seleccionar de alguna manera si vamos a usar el puerto A o el B, y si vamos a usar o no la linea CTS, ademas de elegir la velocidad. Tal vez se podria agregar una segunda entrada en la rutina para configurar esos parametros, los que se escribirian a la propia rutina.
    Pero la razon por la cual deje esto pendiente, fue que no pude decidir donde ubicar la rutina en memoria, en principio la pense para usarla desde el BASIC, y para que se cargue legalmente, no como ahora que esta ubicada en el medio de la zona de programa y de la zona de variables (por lo que si cualquiera de las dos crece se sobreescribe). El problema es que para ubicar la rutina hay que desplazar el comienzo del area de programa BASIC, o el final de la memoria del usuario, que esta en F380h, por este ultimo limite la cosa se complica porque ese tope solo es valido cuando no hay disketeras conectadas, y varia hacia abajo segun el tamaño y la cantidad de unidades, aparentemente es mas seguro reubicar el area de programa, que empieza en 8000h, pero esto solo es valido para maquinas con 64K, y cambia para maquinas con menor cantidad de RAM. Supongo que lo mejor seria asumir que sera una maquina de 64K, y en todo caso hacer versiones especiales si hace falta para otros modelos.
    En fin, la rutina esta andando y ahi esta disponible el codigo, pero hay que decidir donde ubicarla en memoria y como configurar los parametros de transmision, que ahora estan fijos.

    ]serialtx.zip[/file]
     

  • Hice un programa simple para probar el chip como sintetizador musical, por supuesto no se puede tocar mas de una nota a la vez, pero se dispone de 2 octavas a la vez y se pueden seleccionar entre la octava 0 y la 5. Los parametros se seleccionan con las teclas de funcion, F1 incremente la octava, shift + la decrementa, F2 incrementa el numero de instrumento (de 3 a 7), F3 incrementa el tipo de envolvente (de 0 a 3), F4 incrementa el modo de modulacion (de 0 a 4), y F5 incrementa el nivel de volumen (de 0 a 15). Con shift mas la tecla de funcion correspondiente se disminuye cada parametro.
    Para ajustar la duracion de la envolvente, equivalente al comando Z del sintetizador, se usa el mismo teclado pero se debe cambiar de modo presionando Enter, el modo ENV ajusta la duracion de la envolvente usando notas, mientras que en el modo NOTA funciona como un teclado normal.
    Tuve que agregarle codigo para que espere a que se libere la tecla actual, ya que la auto repeticion de teclas complicaba bastante las cosas para que siguiera sonando mientras se tuviera la tecla pulsada. El problema es que quedo andando un poco lento para pasar de una tecla a otra.
    Para el que lo quiera probar, funciona a 19200bps con el chip conectado al puerto 2 (el que esta hacia el frente en una DPC-200).
    Por ahi tenga algun error, porque lo hice en dos dias, bastante loco me volvieron entre el OpenMSX y KDE que se peleaban por capturar las teclas, y como consecuencia de eso no podia detener la ejecucion del programa porque esa combinacion no funcionaba. Por ahi se pueda mejorar mas adelante haciendo directamente en asm, para poder leer varias teclas simultaneas.
    Va una captura de pantalla del programa, y el DSK de 360K.

    1399679704 75 FT84787 Pianomsx


    ]piano360.dsk.zip[/file]

     

  • Esto es puramente un experimento, pero tal vez algun dia se haga realidad un juego de aventuras multiplataforma con voz.
    Por ahora solamente tenia curiosidad de saber como quedaba un juego de aventuras hablado, no agregue el codigo al programa BASIC pero se podria haber hecho, por ahi lo haga mas adelante aunque solo sea para ver 2 o 3 pantallas, como demostracion.
    Tome el codigo que habia publicado christian en este tema: LINK
    Adaptar algunas partes no es complicado, pero el juego entero lleva mas trabajo, lo ideal seria tener un motor de aventuras conversacionales que soporte una segunda cadena de texto exclusiva para enviar al sintetizador, y ya que los comandos del sintetizador de voz por soft son similares a los del sintetizador con PIC, se podria tener una version con PIC y otra puramente por soft, con minimas modificaciones.
    El juego y la voz que pruebo corresponden a estas pantallas:

    1401152533 75 FT84787 Nave1

    1401152533 75 FT84787 Nave2

    Hice 3 pruebas de audio, con dos voces distintas, y luego con la segunda pero con eco, las adjunto en mp3.


    ]pruebamsx_2014-05-26_1.zip[/file]

    ]pruebamsx_2014-05-26_2.zip[/file]

    ]pruebamsx_2014-05-26_3.zip[/file]
     

  • Me hace recordar al Cobra's Arc de Dinamic:

    LINK
     

  • Lo probe en Spectrum, esta bueno, pero no solo por la voz, me sorprendio la interfaz, es un juego muy trabajado. No lo vi en otras versiones, lo voy a tener que probar.
    Lo que quiero hacer es que no sea tan robotica la voz, que se adapte mejor a los textos, pero eso solo con el PIC lo puedo hacer, la version por soft no tiene mucho margen para modificar la pronunciacion.
     

Moderador (s): homecomputer, Selandari, pastbytes, El Griego, damian.worf, Durandal