• Gracias, pero no tengo muchos conocimientos sobre la MSX en la parte de assembler, como dije es un programa de Spectrum. Cuando empece a leer sobre el Z80 lo que lei fueron algunas hojas de datos y el curso Easymbler, que es justamente para la MSX, pero vi lo compleja que era la arquitectura y termine haciendo el programa para Spectrum 48K. Al PSG no sabia si podia adaptarse correctamente la emision de sonido digitalizado, pero resulto que era bastante simple y por eso salio rapida la version para Spectrum 128K. Debi hacer esta prueba en la TS2068 para escucharla en una maquina real con AY-3-891x, pero ya que era la version que seguia quise hacer una prueba "rapida" en MSX. Al final lo de rapida termino siendo un dia entero de obstaculo tras obstaculo, pero al menos cuando me toque hacer la version MSX ya tengo una idea de lo que me espera. Muchos problemas con los que me encontre tienen que ver con el BlueMSX, me baje el OpenMSX pero voy a tener que configurarlo para correr soft para MSX1 cuando tenga tiempo.
    Por lo que vi de otro sintetizador, si mal no recuerdo el Talker, en MSX se pueden usar las rutinas en codigo maquina desde BASIC a traves de la instruccion USR, pasandole como parametro un texto. La idea es que los sintetizadores sean usables desde BASIC en todas las plataformas para las que haga una version, no solamente con un texto fijo sino que tienen que aceptar alguna variable para que sean realmente utiles. Vi uno para Spectrum que usa texto fijo en la misma linea a continuacion, en el estilo RANDOMIZE USR DIRPRG: REM TEXTO A HABLAR, pero si bien sirve para algunas aplicaciones, no permite procesar un texto variable para hablarlo.
    El tema de convertir el programa a varias plataformas tiene que ver con un proyecto de hace muchos años que nunca empece, tenia la idea de hacer como desafio personal algun juego simple, pero convertirlo a varias plataformas tratando de aprovecharlas lo mejor posible. Resulto que el solo hecho de hacer un juego implica un monton de cosas para las que nunca tuve tiempo, que abarcan mas que solo la programacion, asi que el proyecto quedo ahi. Cuando se me ocurrio convertir el programa del PIC a la C64 y vi que podia ser un proyecto serio (no esperaba que sonara tan bien), decidi retomar el viejo proyecto de conversion multiplataforma, pero con este programa.
    La conversion es interesante porque se aprende suficiente de cada maquina como para tener una idea general de lo que es posible, aunque en este caso estoy dejando de lado el aspecto grafico, pero aprendo lo suficiente sobre el sonido y el sistema operativo de cada una.
    Tambien es una oportunidad de programar algo para maquinas que tal vez nunca en la vida tenga tiempo para usar como programador, y asi puedo decir que al menos una vez hice una aplicacion para cada una. Que el programa haya estado diseñado para sonido digital de 8 bits con un procesador RISC de 20MHZ y haya podido funcionar en maquinas no diseñadas para sonido digital, en 4 bits y con procesadores de 1MHz o 3.5MHz, tan diferentes como el 6502 y el Z80 ya justifica todo lo que hice. Ahora sigo probando mas por curiosidad que por otra cosa.
     

  • Hoy estuve analizando la salida de audio del emulador y habia una interrupcion cada aproximadamente 20ms que duraba alrededor de 2ms, lo que hacia era congelar el sonido en el volumen en que estaba. Eso era la causa de la distorsion, tal como habia supuesto, una interrupcion coherente con los 50Hz del video, pero se supone que este chip de video no necesita interrumpir al procesador para acceder a VRAM, ya que son buses independientes. Por que razon se interrumpe el programa siendo que deshabilito las interrupciones durante toda la ejecucion, y en la Spectrum 128K funciona correctamente el mismo codigo, sera tema de investigacion posterior.
    Puse breakpoints en la rutina de interrupcion de $38 y ahi me di cuenta que siempre se interrumpia en las primeras direcciones del programa, que coinciden con un bucle de espera que usa DJNZ. No se si esto rehabilita las interrupciones, voy a tener que verlo bien, pero ahora deshabilitando de nuevo las interrupciones en esa rutina funciona correctamente.
    Dejo el archivo .DSK para que lo prueben en un emulador, no hace mas que decir siempre lo mismo, faltaria agregar la interfaz para que el usuario pueda escribir algo.
    Por otro lado, quise hacer un ejecutable .COM para MSXDOS y no tuve suerte, cargue el programa a partir de $0100 y se alcanza a escuchar que intenta hacer un sonido pero ahi se muere el programa. No encontre demasiada informacion sobre si los puertos del PSG son accesibles bajo MSX-DOS de la misma manera, y que tengo que hacer al comenzar y terminar un programa .COM, la idea era hacer un comando al estilo ECHO que en vez de imprimir hablara, pero por ahora va una version para el BASIC que era lo que queria hacer al principio.
    
    ]tavmsx360.zip[/file]
     
  •  

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