• Me habia olvidado de comentar, cuando empece a investigar la TS2068 me baje varios libros y siempre decian que si se usan programas en codigo maquina habia que evitar usar no me acuerdo si el registro IX o IY, yo uso ambos asi que puede que ese sea el problema con la TS. Despues voy a probar alguna modificacion guardando estos registros al inicio y restaurandolos al final, a ver si con eso corre tambien en esa maquina, al menos para que haya mas gente que pueda probarlo hasta que haya una version especial para la 2068.
     

  • El famoso antes y despues.
     

  • PRINT FLASH 1, "ULTIMO MOMENTO!"

    Anuncio la primera beta del programa, hecha un poco a las corridas porque falta hacer una interfaz decente, pero tiene toda la funcionalidad necesaria para probarlo.
    Hice una mejor medicion de tiempos y resulto que el audio se genera a 9,5KHz, como el programa que emitia 3 bits tenia los sonidos hechos para 7,8KHz, al aumentar la frecuencia un 20% tenia que reproducir la voz mas aguda y rellenar con espacios ese 20%, ahora renderice nuevas tablas de ondas desde las originales a 44KHz y las incorpore al programa, costo reformar todas las referencias en el codigo que se hacian a la antigua tabla de ondas, pero quedo andando. Ahora el sonido digitalizado paso de 312 bytes a 380 bytes!
    Tuve muchos problemas extraños con las rutinas de la ROM, como que se cuelga el programa al borrar la pantalla, por razones desconocidas, pero esta version anda bien.
    Hay tambien algunos detalles como que el texto debe ser ingresado en mayusculas, todavia no me decido si usar minusculas, mayusculas, o agregar un poco mas de codigo y permitir ambas, lo logico en Spectrum seria usar minusculas que es lo que viene por defecto.
    Para saber cuales son los comandos disponibles, busquen el manual del TAV64 en el foro de C64, en software, que ahi esta en pdf y es valido para esta version, al menos la tabla de comandos. Pero basicamente los sonidos disponibles son:
    Vocales, AEIOU, vocales acentuadas, A+ E+ I+ O+ U+, vocales con tono mas bajo (para ultima silaba de una oracion), A- E- I- O- U-, consonantes: B CH D F G J K L M N P R R2 S T SH
    La R seria el sonido RR, y R2 seria el sonido suave, como en ARENA, que en el sintetizador se escribiria AR2E+NA- (R2 para la ere, E+ porque va acentuada, A- porque termina la oracion).
    Tambien hay comandos extendidos, que empiezan con /, solo hay 3: /0 (beep plano), /1 (beep con volumen decreciente, estilo campanilla), /2 (sonido de alarma). Prueben repetirlos 3 o 4 veces y van a notar como son, por ejemplo /2/2/2 o /1/1/1.
    Si conocen mas gente que tenga Spectrum o compatibles, seria bueno que lo puedan probar asi veo que forma darle para terminarlo, y puedo saber que tal anda. Es probable que con tanto calculo por el cambio de resolucion le haya errado en algo.
    Me olvidaba, cuando arranca el programa muestra en pantalla los comandos usados para el texto que habla al inicio, pueden tomar algo de eso como referencia. Tambien hay dos tonos de voz, por defecto se pone siempre el tono alto, pero si en medio de la frase se usa <, todo lo que sigue va en tono bajo, si se pone > se vuelve al tono alto.
     
    ]tavzx_beta1.tap[/file]
     

  • Aca va una actualizacion, habia quedado mal el programa BASIC, que reproducia un caracter de mas del texto anterior, ahora anda correctamente, y le agregue la opcion de que al presionar ENTER repita el ultimo texto.
    Corregi algunos sonidos que habian quedado mal porque usaban de tabla de ondas una parte del codigo que todavia no estaba hecha, ahora suenan como deberian.

    ]tavzx_beta2.tap[/file]
     

  • Actualizacion: El programa ya esta funcionando reproduciendo el texto de una variable Z$, basicamente hay que cargar esta variable con el texto y llamar con RANDOMIZE USR, el codigo busca en el area de variables una por una, si encuentra alguna alfanumerica, chequea que sea Z$, si no la encuentra simplemente retorna, si la encuentra usa la variable como lista de reproduccion de fonemas.
    Tambien corregi los sonidos de las vocales, que salian distorsionadas por un conflicto de registros, ahora suenan correctamente. Falta reubicar el programa al final de la memoria y estaria listo para usarse desde programas BASIC. Por el momento creo que va a quedar asi como ultima version beta, si no surge algo para corregir. No se si voy a tener tiempo para seguir desarrollandolo en lo inmediato, voy a publicar algo cuando este un poco mas presentable el programa, y ahi se va a quedar por un tiempo.
     

  • Aca esta adjunto el .tap, el programa BASIC de ejemplo se encarga de cargar el codigo maquina. Este es el listado:




    El programa muestra como se puede usar el sintetizador desde el BASIC. Ya no arranca con la pantalla de los creditos/demostracion (el texto inicial y canto), sino que ahora basta con asignar el texto a la variable Z$ y llamar al programa con RANDOMIZE USR 60536.
    La parte de demostracion aun existe en el programa pero si se quiere ver debe llamarse mediante RANDOMIZE USR 60539 que es lo que hace la linea 10.
    Este programa simplemente pide el ingreso de un texto en la variable T$, si se ingresa * se detiene la ejecucion, si se ingresa un texto, se copia T$ a Z$ y se llama al sintetizador en la linea 70, y si se ingresa un texto vacio, se llama al sintetizador sin modificar el valor previo de Z$, repitiendo el texto anterior.
    El sintetizador usa 5000 bytes al final de la memoria, empezando en 60536, si se quiere hacer un programa BASIC que lo utilice, hay que agregar al programa una linea, por conveniencia al final, como la linea 9999, haciendo CLEAR 60535, lo cual reserva los ultimos 5000 bytes para que no haya conflictos con la memoria del BASIC. Una vez ejecutado eso se puede cargar el sintetizador con LOAD "" CODE
    La forma mas facil de utilizarlo en programas propios, es cargando este .tap tal como esta, ya que asi quedaran reservados los ultimos 5000 bytes de memoria con el sintetizador cargado. Luego se puede ejecutar NEW, que borra la memoria del BASIC pero no el sintetizador, a continuacion se puede tipear el programa propio, agregando la linea 9999 del ejemplo. Una vez terminado el programa, se graba con SAVE "PROGRAMA" LINE 9999 y seguido de eso, SAVE "TAVZX ASM" CODE 60536,5000
    Al cargar el programa "PROGRAMA", se ejecutara automaticamente la linea 9999, que cargara a su vez el sintetizador "TAVZX ASM" y luego continuara la ejecucion en la linea 10, donde deberia estar el comienzo del programa propio.
    Espero que se haya entendido mas o menos, algun dia tendre que escribir un manual especifico para esta version. Algun dia...


    ]tavzx_beta3.tap[/file]
     

  • Va el video del programa andando, capturado desde la CZ Spectrum por video compuesto.
    El programa BASIC hace algo raro que no parece tener que ver con el codigo maquina, cuando se repite un texto presionando ENTER, al parecer le agrega un sonido similar a la T al final. Probe ejecutando manualmente con RANDOMIZE USR varias veces y no hace ese efecto.
    El texto del video es siempre el mismo, no es muy divertido que digamos pero asi me es mas facil ir escuchando las diferencias entre versiones.
    Despues se ven un par de frases tipeadas asignandolas a Z$ y reproduciendolas con RANDOMIZE USR 60536.
    Si no surge algo para corregir o agregar, creo que esta version, con los cambios correspondientes al texto, va a ser la 1.0


     

  • PRIMERA PRUEBA EN AY-3-8912 (MP3 ADJUNTO)

    Me dio curiosidad de hacer una prueba emitiendo por el PSG AY-3-8912, tuve que hacer algunos calculos para hacer lineal el volumen logaritmico de los 3 canales, pero logre 4 bits a maximo volumen (dicen que se puede tener 8 bits, cosa que dudo, pero seguro se puede lograr mas de 4 bits). El error es minimo, casi insignificante, quedo bastante lineal, al menos en los calculos, en la realidad tendria que medir la salida, el dia que tenga una maquina con ese chip.
    No le encuentro la vuelta a la paginacion en la 128K, cargo el programa y el codigo maquina no queda en RAM, la unica manera de hacerlo correr es ensamblando el programa a RAM directamente. Ya es demasiado tener que aprender como manejar el editor de la 128K, el mapeado de memoria y las diferencias del BASIC, asi que por ahora adjunto una captura del audio del programa, grabado desde el emulador Spin.
    Por lo pronto, ya tengo sintetizador en Z80 y AY-3-891x, lo que implica que una version TS2068 y otra MSX dependen exclusivamente de entender los mapeados de memoria, y las rutinas de las ROM para borrar pantalla e imprimir textos, ademas del tema del pasaje del texto al programa (que en este caso se hace a traves de la variable Z$).

    ]tavzx_beta3psg.zip[/file]
     

  • Aura si, el archivo tap. La diferencia del PSG con respecto al beeper es drastica, habra que ajustar los sonidos para mejorarlo pero suena muy limpio, tambien da una idea de como va a sonar en la TS2068 y la MSX.
    ]tavzx_beta3psg.tap[/file]
     

  • Bueno, ya le agregue un pequeño retardo a la version PSG, ya que estaba emitiendo sonido como a 11KHz en vez de los 9,5KHz a los que debia reproducir. Los programas publicados son practicamente versiones finales, para 48K y para 128K, si hay alguna modificacion va a ser menor.
    No tiene caso ahora publicar otra version que no se si alguien prueba, directamente voy a publicar la version 1.0, pero necesito saber si esta bien asi el programa, que lo prueben desde el BASIC.
    No encontre mucha documentacion de las Spectrum 128K, no se si el BASIC tiene mas memoria disponible que la 48K, tampoco encontre un manual del usuario de esa maquina, solo el introductorio. Venia con manuales esa maquina? Amstrad tampoco hacia manuales? No se si estoy buscando mal pero encontre cualquier cosa menos algo que diga donde almacenar programas en codigo maquina, o como es el mapa de memoria que no sea el de la 48K. Lo unico claro es que es similar a la 48K, pero tiene los primeros 16K con ROM seleccionable, 2 ROMs en la 128K, y hasta 4 ROMs en las +3, mas la opcion de mapear RAM para correr CP/M. En la ultima pagina (una pagina son 16K) se maneja toda la RAM disponible, pudiendo mapear cualquiera de las otras paginas en esa area. Hay dos paginas fijas en el medio de la memoria, una afectada por el video y otra para programas, que tambien se pueden mapear en la ultima pagina. Pero nada dice si el BASIC 128 usa mas de 48K, y si hay alguna pagina segura para almacenar codigo maquina, que no use el sistema. Como consecuencia de esta desinformacion, la version 128K asume un mapeado como de 48K, esto quiere decir que la RAM disponible para el BASIC es la misma que en la version 48K del programa, esto es 5300 bytes menos que lo disponible al encender la maquina. Creo que aun asi deberia ser suficiente para la mayoria de los programas, no creo que profundice demasiado en la version 128K, ya que a juzgar por la informacion disponible, los usuarios de esas maquinas solo la usan para jugar. Tampoco ayuda que no tenga ninguna Spectrum con chip de sonido para hacer pruebas reales.
    Lo que sigue entonces es hacer la version para TS2068, para la cual hay mucha mas informacion, se podria hacer una version basada en la 128K pero con la direccion de los puertos del chip de sonido cambiadas, para que funcione como esta pero en una TS2068 con cartucho emulador de Spectrum, pero lo ideal seria que funcione nativamente ya que no tengo emulador. Si alguien tiene sugerencias tambien me interesan, ya sea para alguna version existente o para las futuras versiones TS2068 o MSX, ya que es mas facil implementar cosas si se piensan antes que agregarlas una vez hecho el programa. No se si todo se puede o sea practico de hacer, pero en una de esas surgen ideas que sean realizables aunque fuera para alguna futura version.
    Me olvidaba, tambien esta corregido el error de que al repetir un texto se reprodujera un sonido extra al final, al parecer la instruccion DEC HL no activa la bandera Z cuando llega a 0, vaya uno a saber por que, asi que agregue un chequeo adicional y ahora cuenta los caracteres del texto correctamente.
     

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