¿La mejor combinación tracker FM + player?

Pagina 2/2
1 |

Van AxelStone

Prophet (2703)

afbeelding van AxelStone

08-03-2016, 11:38

Muchas gracias Manel, le hecho un ojo. Es una lástima que se haya popularizado el uso de compiladores cruzados (que por otro lado entiendo, la comodidad no tiene nada que ver), si todos los fuentes estuvieran en formato M80 sería trivial linkar las librerías con MSX-C. No obstante voy a probar tu consejo de linkar .lst generado por SJASM, igual suena la flauta.

Van Manel46

Champion (463)

afbeelding van Manel46

08-03-2016, 12:24

El listado que genera Sjasm (.lst), es el listado ensamblador, en el que se especifican todas las correspondencias etiqueta/dirección. Aparte, ves el código generado, por ejemplo: RET corresponde a $C9.
Esto te va a servir para conocer las distintas direcciones que tienes que llamar desde "C", para manejar el replayer. Supongo que en "C", también usas etiquetas. Para definirlas a partir de las direcciones del fichero .lst, debe haber algo equivalente a lo que se hace en asm:
REPRODUCIR EQU $A100.
Llamas REPRODUCIR, y se ejecuta rutina que empieza en $A100.

Van AxelStone

Prophet (2703)

afbeelding van AxelStone

08-03-2016, 12:51

En MSX-C hay 2 formas de llamar a las funciones ASM:

  1. Si has compilado con el M80 y linkado posteriormente, llamas a la función por su etiqueta. O sea si para iniciar música la etiqueta ASM es strmus, en C se llamaría justamente como strmus(), de ahí que sea mi opción preferia. Además al linkarse todo en común, se organiza la memoria de forma óptima.
  2. Si viene como librería externa no puedo usar etiquetas, debo usar sus direcciones de memoria con lo que llamamos punteros a funciones. Así por ejemplo si strmus se coloca en $A100, debo crear un puntero (*strmus)=0xA100 e invocarlo con el puntero. La principal pega es la asignación de memoria, que no se puede hacer "en bloque" y no sé hasta que punto puedo acabar pisando lo que no debo.

Como digo voy a centrarme en 1, creo que de cara a MSX-C es lo mejor y de paso aprendo.

Van Manel46

Champion (463)

afbeelding van Manel46

08-03-2016, 13:04

Es que no conozco nada de "C", y no se a que te refieres con lo del M80 (debe ser el compilador de C).
Pero adelante con tu idea. Seguro aprendes un montón.

Van AxelStone

Prophet (2703)

afbeelding van AxelStone

08-03-2016, 14:02

M80 = Macro Assembler Smile

Compilador de ensamblador para MSX. El SJASM no es totalmente compatible con M80, hay que tocar el código fuente ASM para que pueda compilar. Una vez compilado, genera un fichero compatible con L80 (el linker de MSX) y puedes generar el ejecutable final diciéndole al linker "oye, que además de mi fuente en C llevas esta librería ASM externa". Al final se genera un código único con todo el batiburrillo que le has pasado.

Van Manel46

Champion (463)

afbeelding van Manel46

08-03-2016, 14:50

Gracias por la explicaciones.
Genial si todo queda ligado como dices. A ver si lo consigues. Animos!

Van AxelStone

Prophet (2703)

afbeelding van AxelStone

08-03-2016, 17:58

Ánimo igualmente, al mío aún le queda un largo recorrido, el tuyo está ya tocando a la puerta Wink

Van Manel46

Champion (463)

afbeelding van Manel46

08-03-2016, 18:18

Gracias.
Ya te comenté que el megarom de puzles en screen 8, está terminado (con 18 músicas Big smile ). Incluso con efectos, mediante el AYFX, que convive perfectamente con el replayer FM.
Has de tener en cuenta, que para mantener la música, se hace desde las interrupciones, los efectos también.

Van AxelStone

Prophet (2703)

afbeelding van AxelStone

08-03-2016, 20:06

Qué alivio, yo también contaba con usar el AYFX Smile . ¡Al final todos chocamos con las mismas piedras! Cool

Van AxelStone

Prophet (2703)

afbeelding van AxelStone

29-03-2016, 08:12

Pues nada, he conseguido compilar el driver en el M80 para usarlo desde MSX-C pero algo debe estar mal, necesitaría ayuda. Al final he bajado los originales que me indicas, pero he tenido que modificarlos para que compilen en M80 y así poder usarlos. Los cambios son básicamente renombrar etiquetas (el M80 las termina en @) y declarar todas las funciones como public. Además he tenido que quitar la parte donde se hace el memory allocation, ya que de lo contrario el M80/L80 dan "Out of memory", supongo que se pisará con el fuente en MSX-C.

El header original del MBLOADER mismamente era tal que:

         DB    0FEh
         DW    START,EINDE,START
         ORG   0C000H

BDOS     EQU 0F37Dh
SETDMA   EQU 26
READ     EQU 39
OPEN     EQU 15
CLOSE    EQU 16

Y el modificado es tal que:

BDOS     EQU 0F37Dh
SETDMA   EQU 26
READ     EQU 39
OPEN     EQU 15
CLOSE    EQU 16

public MBLOAD@
public MKLOAD@

Con esto, puedo compilar el siguiente código en MSX-C;

#include

VOID MBLOAD();

VOID main() {
	printf("Now playing ALESTE1.MBM");
	MBLOAD("ALESTE1.MBM");
}

Sin embargo cuando intento cargar la música, el programa se cuelga. Estoy seguro que debe ser un problema de ubicación en memoria, al haberme cepillado la parte donde el ASM ubicaba el código, por lo que habría que tocar de algún modo el fuente.

¿Alguna sugerencia? Gracias!

Pagina 2/2
1 |