• Con paciencia y saliva...
    Esta quedando bastante bien la UI, ya va a funcionar todo como queres.

    Respecto de los conectores, le di con la pistola de aire caliente a unos mother quemados y saque bastantes cosas de ahi. Mi tecnica es calentar grandes zonas (sin derretir plasticos del lado de componentes) y con una pinza le das un par de golpes en la mesa. Los componentes caen solos y limpitos. Repetis la calentada hasta que sacas todo.
     

  • Con eso solo sale? Tengo dos placas para sacarles los conectores, una 286 que anda pero le robe los chips de RAM para usarlos en una placa de Amiga, y otra que tiene un K5 quemado. Voy a tener que probar un dia de estos, asi de paso me armo una salida de audio para la TS2068.
     

  • Que laburo! te felicito por la dedicación que le metés a todo tu proyecto!!!
    Saludos
     

  • Con eso solo sale? Tengo dos placas para sacarles los conectores, una 286 que anda pero le robe los chips de RAM para usarlos en una placa de Amiga, y otra que tiene un K5 quemado. Voy a tener que probar un dia de estos, asi de paso me armo una salida de audio para la TS2068.

    pastbytes
    .
    Si asi salen, si queres, podes calentar y golpeas primero del lado de soldaduras hacia abajo, el estaño cae a chorros y deja la mesa como si estuviera ametrallada.

    Por otro lado, si elegis bien la direccion de E/S, podes hacer una interfase que ande en todas las sinclair ya que aunque tienen distinto pinout comparten varias lineas, solo tenes que ver la ZX printer o la alphacom 32.
     

  • Si, me parece que la impresora es lo unico que anda en todas, no estaria mal.
     

  • Hice una prueba con el programa en VB controlando los parametros del chip, se puede ver aca:



    También empecé a rehacer mi sitio web, aunque todavía no subí nada porque cambia un poco la estructura y no se puede subir gradualmente. Para ir haciendo de a poco el manual del chip, hice una figura donde se explica como afectan los dos parámetros de notas a la voz, el que se ve horizontalmente en la imagen es el tono base de la voz, que modifica la frecuencia de las formantes, mientras que lo que se ve verticalmente es la modificación de la nota de la voz, conservando la onda original pero variando la frecuencia de la envolvente. La modificación de la nota es lo que sirve para cantar, la modificación del tono base sirve para hacer la voz de una persona diferente, con tono más grave o más agudo. En la figura sólo se prueba con 4 notas, la nota Do de las octavas 1, 2, 3 y 4, pero entre esas hay 11 semitonos intermedios.


    1373703376 75 FT59536 Tonos1
     

  • Bueno, despues de pelearla desde anoche logre corregir el problema que tenia con el comando '!', faltaba inicializar un par de registros al detener el sonido, para que cuando llegara el proximo comando todo estuviera en orden. Ahora resuelto todo parece facil y evidente, pero es un programa muy dificil de depurar, de paso haciendo el seguimiento del codigo paso a paso (siguiendo la ejecucion a ojo, no es que haya usado alguna herramienta de simulacion) pude encontrar otro error mas que estaba bastante oculto y se disfrazaba como otro error diferente, ese error ni siquiera lo habia detectado, si no seguia el codigo ni me daba cuenta de que era un problema distinto.
    Ahora me queda terminar de armar la placa para conectar el PIC al puerto de joystick de la MSX, escribir el driver en ensamblador para enviar un byte, y hacer algun programa que use el chip para emitir sonido. Tambien tengo que hacer lo mismo en C64, todavia no estoy seguro de si usar las rutinas estandar de RS232 de la ROM o si implementar un driver especial que envie mas rapido.
    Ya habra mas novedades cuando termine de arreglar unas cosas del trabajo y me quede un poco mas de tiempo, pero creo que ya puedo enviar los chips prometidos.
    El programa ahora es beta 2, seguramente no va a cambiar nada en la version final, solamente voy a ordenar rutinas y eliminar codigo no usado, pero eso va a ser mas adelante, por ahora esta version es perfectamente usable.
     
  •  

  • No tenia planeado hacer esto porque sabia que iba a ser un lio, pero por suerte salio bien. Hacia meses y en algunos casos uno o dos años, que habia rutinas y tablas de ondas perdidas en el programa, porque los algoritmos para la generacion de los fonemas fueron cambiando, a veces le hacia una modificacion a un fonema que no resultaba exitosa pero que despues servia de base para otro diferente, asi de tantos experimentos quedaron rutinas que hacian un sonido pero se llamaban como otro, rutinas que quedaron cruzadas, codigo y datos que quedaron obsoletos, en resumen, un caos.
    Como el otro dia encontre un par de errores no muy criticos, pero errores al fin, y ya no habia espacio para agregar mas codigo, decidi dar vuelta todo el programa, ordenarlo y de paso eliminar lo que ya no servia, costo un poco pero lo logre. Ademas de dejar el codigo mas limpio, pude agregar algo fundamental, un silencio de longitud programable, esencial si se quiere hacer musica o canto, y de yapa logre que me quedaran 94 posiciones de memoria libres, 5 de las cuales en principio no se pueden usar.
    Para ordenar el programa no hubo mas remedio que pasar en limpio los varios algoritmos sucesivos que usa el programa, por si a alguien le interesa, el programa recibe datos en ASCII por el puerto serie, y ya que los comandos pueden tener hasta 3 caracteres, hay un pequeño buffer de ese tamaño, en cuanto el parser completa un comando, se le asigna un codigo interno y se procesa, ya sea de forma inmediata o generando uno o mas comandos internos en la lista de reproduccion. Paralelamente a esto se va enviando el eco de lo recibido por RS232 si esa opcion esta habilitada, y procesando la lista de reproduccion, la cual contiene comandos de 1 o 2 bytes, que se corresponden con tablas de ondas directas, funciones que generan un sonido mediante algoritmos, o funciones de configuracion, como cambiar la duracion o el tono de la voz.
    El parser inicial tambien tiene otro parser paralelo que procesa comandos ASCII cuando estamos en modo de configuracion (despues de abrir un parentesis), esto se hace asi porque un comando N puede ser un fonema N en modo normal o un comando de ajuste de nota en modo de configuracion, o lo mismo con los digitos hexa de los parametros.
    Todas estas cosas funcionan en paralelo, es lo bueno del ensamblador, se recibe un byte mientras se envia el eco del anterior, se emite la muestra de sonido actual, se procesan los comandos ASCII recibidos, y si se completo un comando valido se lo convierte y agrega a la lista de reproduccion. Todo eso puede ocurrir en una muestra de sonido emitida, por eso el programa tiene que estar muy optimizado, ya que hay alrededor de 115 microsegundos para procesar hasta el peor de los casos.
    Todavia me falta corregir un par de detalles, pero no son cosas complejas, de paso voy a tratar de agregar alguna funcion extra, pero supongo que para la semana que viene ya tiene que quedar todo listo.
     

  • Este parece un proyecto fractal, cuanto mas lo miro mas detalles le encuentro. biglaugh.png
    Corregi las cosas que me faltaban, que no eran errores sino ajustar los comandos permitidos por el parser a los sonidos agregados, ya que el parser aun tenia una definicion bastante antigua y habia un par de comandos que faltaba agregar, es largo de explicar y no vale la pena, no era algo que afectara al funcionamiento.
    Queda un solo cambio para hacer de los planeados, que tampoco afecta, es un cambio minimo para que al ejecutar el comando para detener inmediatamente un sonido, no lo haga al instante sino que espere a terminar el ciclo de onda actual, lo cual lo retrasa unas pocas muestras pero el sonido termina suavemente y no salen clicks. Esto es usado normalmente cuando se controla el PIC en tiempo real, como en el caso del programa con el piano, que cada vez que se pulsa una tecla detiene el sonido actual y emite el nuevo.
    Lo gracioso de todo esto, es que corregi varias cosas y en lugar de perder espacio logre espacio como para 80 instrucciones mas, ahora caben 165 contiguas, y 7 mas que no se pueden usar.
    Esto hace que si bien con el ultimo arreglo quede finalizado, tenga la tentacion de agregar un segundo canal de sonido, no puede ser nada complejo desde el punto de vista del codigo, tiene que aprovechar las rutinas existentes del sintetizador de voz y el motor de sonido, asi que puede tener restricciones, pero la idea es que tome menos de una semana hacerlo, seguramente va a tomar mas tiempo planearlo que hacerlo.
    La forma mas simple seria dejar el sintetizador monofonico y simplemente agregar dos instrumentos que funcionarian como fonemas pero emitiendo por ejemplo sonido de organo y bajo. Si todo se complica probablemente haga eso, pero tal vez lo mejor seria agregar un sintetizador de sonido independiente que genere ondas simples como triangular y/o diente de sierra, y funcione a la vez con el sintetizador de voz. Habria un comando para activar o desactivar el segundo canal, aunque el PIC lo procesaria siempre, solo que sonaria o no. Si se habilita ese canal, el audio pasaria a tener 7 bits por canal y por lo tanto la mitad de volumen, pero se podria cantar con acompañamiento.
    Si ocurre algun milagro, por ahi se pueda tener la segunda opcion pero con la posibilidad de usar tambien una onda digitalizada (cada onda ocupa 66 posiciones de memoria), o implementar alguna forma basica de volumen o ADSR.
     

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