• Buenas, hace un tiempo que quería implementar multitarea en un MSX1 y este año me puse a ver como podía hacerlo. Después de darle muchas vueltas al asunto y de hacer muchas pruebas, terminé haciendo una librería en C de threads con partes mínimas en ensamblador. No sabía nada de ensamblador de Z80 ni de arquitectura de MSX (no es que ahora sepa mucho más... dodge.png) así que tuve que ponerme aprender un poco. Debería andar en la mayoría de las MSX con al menos 64k de RAM, aunque es probable que haya que adaptarla para que funcione en máquinas que hacen uso de slots expandidos...
    Tanto la librería como las aplicaciones se pueden compilar en Windows o en Linux. Para Windows hay que modificar un poquito los Makefile, y utilizar binarios de Windows para el proceso de compilación, cualquier cosa me dicen y explico un poco mejor el asunto.
    De paso les comento que con SDCC se puede generar binarios para MSX-DOS, para ROMS y para ser cargado con BLOAD. Si bien SDCC genera código para Z80, no tiene implementado nada de MSX, por lo que hay que hacer una implementación de las primitivas que vayan a usarse y del fichero crt0 encargado de inicializar el programa.
    En la página de Avelino Herrera Morales: LINK, hay una implementación de las primitivas para MSX-DOS y también hay un enlace a otra pagina que explica como generar ROMS.
    Como yo tuve un problema con el tema de la multitarea en MSX-DOS, opté por el formato para BLOAD.
    Para compilar en este formato con SDCC no encontré absolutamente nada en internet, así que tuve que hacer un crt0 (basado en el de Avelino), un programita que le ponga la cabecera al ejecutable e implementar las primitivas para que use las llamadas a la BIOS (solo las que fui usando)
    Todo esto lo pueden descargar desde acá: LINK
    Para ver como se utiliza pueden ver el programa de ejemplo mt.c, después hice un programa más complejo que vendría a ser una especie de shell con programas hardcodeados que permite ejecutarlos en primer plano o en segundo plano (background)
    Como sabrán con el tema de la multitarea surgen los llamados problemas de competencia, por lo cual también hice una implementación de semáforos, que también sirven para sincronizar threads.
    Una prueba muy interesante es deshabilitar el uso de semáforos en el programa mt.c y ver como se pierden conteos en la suma total.
    Por ultimo, la librería puede adaptarse a otras plataformas, incluso a otras arquitecturas como la de los PICS, solo hay que portar las partes en ensamblador e implementar las primitivas para cada máquina.
    Bueno, les dejo una imagen DSK para que carguen en una maquina real o en un emulador el shell que hice. Tipeando help se muestran los comandos y programas disponibles.
    Espero que les guste!


    ]shell.dsk[/file]
     

  • Hola esta bien el DSK. lo trate de probar en el openmsx con ubuntu y me tira offline disk,
     

  • Sí, está bien, pero debe ser por la configuración que tengas de la disquetera, a mi en openmsx con la configuración para la SVI-738 me anda bien. Te subo un zip, descomprimilo y pone directamente "openmsx -machine (...) -diska disco"
    De paso, para probar el comando text2tape, en openmsx hay que pulsar F10 y escribir "cassetteplayer new archivo.wav". Ese programa lo hice para ver si se podía estar escribiendo algo en el tape y mientras ejecutar otras cosas pero al ejecutarse baja las interrupciones del VDP por lo que congela todo hasta que termine mad.png
    Para ejecutar en background hay que antecerder los programas con &
    Tenés una ROM de disco en el openmsx verdad?
     

  • Me olvidé el zip shy.png
    Acá va...
    ]disco.zip[/file]
     

  • hola si con la 738 arranco el dsk, si tenia la rom de la Dpf 550. y andaban otros dsk. en un rato te comento algo(mira que puede ser un rato lllllllaaaaaaarggggo)

    Saludos
     

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