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]