MODULES RSN (Read Sound)

Extension du systme PARX M&E

organisation du fichier:
------------------------

0	dc.b "READ_SND"		identifiant d'un RSN
8	dc.b "xxxx"		type de fichier pris en compte
				(exemple SNDH, WAVE...)
12	dc.w type		octet suprieur:
					$03: fichier sans code
					$04: fichier avec code
				octet infrieur:
					bit0: 0 tout charger
					      1 buffers possibles
					bit1: 0 toute RAM
					      1 ST RAM only
14	dc.b "xxxxxxxx"		nom court sur 8 octets
22	dc.w version		en dcimal, exemple 100 pour 1.00
24	dc.b ".."+0		nom long 30 octets maxi + 2 zros
56	bra modinfo
60	bra modpal
64	bra modexe
68+	code+data+bss

Buffer SNDB
-----------
C'est une zone de 128 octets servant de dialogue entre le programme
et les routines du module.

SNDB
0	dc.b "TYPE"		identifiant du fichier trait
				(exemple SNDH,...) ou zro si
				le fichier est inconnu
4	dc.l taille		taille du fichier source
8	dc.l dcomp		taille du fichier dcompress
				(ou =taille si non compress)
12	dc.l handle		celui du fichier
16	dc.l adresse		celle des donnes
20	dc.l nombre		nombre de morceaux dans le fichier
24	dc.l chanson en cours	de 1  nombre ou zro (replay arrt)
				bit 15 mis en cas de pause
28	dc.l masque MIDI	chaque bit pour piste 0-31 1=ON, 0=MUTE
				mis  FFFFFFFF par modpal
32	dc.l param1		MIDI (modexe avec code = -2)
36	dc.l param2		MIDI (modexe avec code = -2)
40	dc.w speed		MIDI vitesse (dfaut 100 avec modpal)
42	dc.w masque MIDI	chaque bit pour un canal MIDI 0-15
44...

60	dc.b "..."+0		titre du morceau (31 char+0)
92	dc.b "..."+0		auteur du morceau (31 char+0)

124	user
125     user
126	dc.b flag		utilis par FORTH (retour modinfo)
127	dc.b flag		utilis par FORTH (dpiler zone src)

METHODE ***
-----------
	Le programme appelant charge le module.
	Le programme appelant ouvre le fichier son et remplit handle.

	Il appelle modinfo :

***
---


MODINFO
-------
	mthode d'appel:
	move.l #sndb,-(sp)	; empile l'adresse du sndb
	jsr 56(a0)		; si a0 pointe a dbut du module
	addq.l #4,sp		; vire sndb

	d0.l est la valeur de retour !

	On obtient en retour:

d0 = 0	Fichier inconnu, "TYPE" est gal  zro

d0 = 1	Fichier ok, il est du type compress

d0 = 2	Fichier ok, il est du type non compress

	Pour les cas 1 & 2, le module s'occupe de remplir "TYPE" et la
	taille dcompresse (gale  taille si pas de compression)
	Pour tous les cas, la taille est remplie dans le sndb et le
	morceau en cours est annul  zro.

METHODE ***
-----------
	>>> Si le module est du type TOTAL (tout charger en mmoire)

	Suite  MODINFO, le programme doit prendre les dispositions
	suivantes
	- rserver un bloc source
	- si il y a dcompression, rserver un bloc destination

	Il appelle modpal :

***
---


MODPAL
------
	mthode d'appel:

	move.l adrdest,-(sp)	; ou -1 si inutilis
	move.l adrsource,-(sp)
	move.l #sndb,-(sp)
	jsr 60(a0)
	lea 12(sp),sp

	d0.l est la valeur de retour:

d0 = 0	erreur

d0 = 1	ok, charg et pas de compression

d0 = 2	ok, charg et fichier dcompress, source devenue inutile

	Dans les cas 1 et 2, le module remplit les zones titre et auteur
	(ou zro) et la zone adresse (celle de la source si rien de
	compress ou celle de la destination), le nombre de morceaux.

	Dans le cas 2, le programme appelant peut librer la zone source.

METHODE ***
-----------
	Le programme appelant excute modexe:

***
---

MODEXE
------
	mthode d'appel

	move.l n,-(sp)
	move.l #sndb,-(sp)
	jsr 64(a0)
	addq.l #8,sp

	si n=-1 revoie le statut du replay (numro du morceau en cours ou
	0 si pas de son)
	si n=0 stoppe le son
	si n=$8000 bascule pause/play
	si n>0 joue le morceau demand

	d0.l valeur de retour:

d0 = -2	erreur (le fichier son n'est pas reconnu)
d0 = -1 erreur (le matriel ne permet pas de rejouer ce son)
d0 = 0	son stopp
d0 > 0	numro du son en cours
d0 avec bit 15, morceau en pause




