	Mode d'emploi du Xbios:
Pour se servir du DSP, il faut dj demander s'il n'est pas dj utilis:

retour=Dsp_Lock(void)
	Rserve le DSP. Si retour=-1, il est dj occup, attendre son
	tour!!

void Dsp_Unlock(void)
	Libre le DSP.

Puis on vrifie que y'a assez de place libre dedans ( cause des
sous programmes, qui sont installs en mmoire haute):

void Dsp_Available(long *x_size,long *y_size)
	Renvoie la limite haute de la mmoire libre. Tout ce qui
	est au del est pris. Pour ceux qui sont durs d'oreilles,
	en assembleur avec les macros tos_030.s cela donne:
		pea	y_size
		pea	x_size
		Xbios	Dsp_Available
	Le rsultat tant dans x_size et y_size.

Ensuite, si on a assez de place, on se reserve un coin de paradis, pour viter
qu'un sous-programme DSP ne nous crase par la suite, en prcisant la taille
mmoire que l'on va utiliser (un sous programme ne pourra donc plus tre
charg par la suite en dessous de cette limite, on est protg)

retour=Dsp_Reserve(long x_size,long y_size)
	Prcise les adresses maximales que l'on va utiliser dans notre
	programme. En retour, si on reoit -1, y'a eu une merde.

Reste maintenant  le charger. Pour cela, on peut soit charger et excuter le
programme directement, soit le charger en RAM (ct 030), puis le faire 
excuter ensuite:

retour=Dsp_LoadProg(char *file, int ability, char *buffer)
	Charge et excute le fichier LOD indiqu par file, en se servant du
	buffer pour travailler. ability est un paramtre identifiant votre
	programme. Vous pouvez soit le choisir vous mme, soit en demander
	un tout-prt au Xbios (cf plus loin). Si retour=-1, y'a de l'eau
	dans le gaz.

retour=Dsp_LodToBinary(char *file, char *buffer)
	Idem, mais sans l'excution. Vous obtenez donc un bloc binaire
	dans votre buffer, qui est le programme prt  tre envoy au
	au DSP. C'est ce format de bloc que crache le programme ASM2P56,
	sous l'extension P56 (original, non?). En retour, on obtient
	la taille du bloc binaire en mots DSP (donc *3 octets)

retour=Dsp_ExecProg(char *buffer, long codesize, int ability)
	Permet d'excuter un programme prcdemment charg avec LodToBinary
	dans le buffer, de taille codesize en mots DSP, et avec toujours
	le paramtre d'ability pour l'excution

retour=Dsp_ExecBoot(char *buffer, long codesize, int ability)
	Idem ExecProg, mais buffer contient au maximum 512 mots DSP, et
	n'est plus au format crach par LodToBinary. Convient pour de
	la programmation trs brutale, style debugger, s'abstenir pour
	les autres.
	Le paramtre ability n'est pas pris en compte par le Xbios, on
	peut donc  la limite se permettre de l'ignorer: dans le contexte
	d'un Dsp_ExecBoot, il n'a aucune utilit (je me demande d'ailleurs
	si ce n'est pas une erreur de la documentation du Xbios que j'ai
	en ma possession).

retour=Dsp_RequestUniqueAbility(void)
	Demande un identificateur pour un programme DSP (ability), envoy
	en retour. On peut alors s'en servir pour excuter son programme.
	Vous pouvez passer outre et choisir votre propre ability, mais
	y'a le risque de tomber sur un identificateur dj pris.

retour=Dsp_GetProgAbility(void)
	Demande quel est l'identificateur du programme DSP actuel.
	L'intrt est que l'on peut savoir si son programme est dj en
	mmoire, ou bien si celui d'un copain y est ( condition qu'il ait
	choisi un ability  l'avance et diffus sa valeur  tout le monde).

Pour ceux que cela intresse: le format binaire est compos de mots DSP
(groupe de 3 octets, donc) qui indiques dans l'ordre:
	o 1 mot: le type de mmoire ($000000=P $000001=X $000002=Y)
	o 1 mot: l'adresse de base du bloc  charger
	o 1 mot: la longueur du bloc
	o ? mots: le bloc en question

Et ainsi de suite pour couvrir tout votre programme DSP ( chaque fois que
vous faites un org pour prciser l'espace et l'adresse mmoire de ce qui suit,
l'assembleur gnre un nouveau bloc). Une fois charg, le DSP saute 
l'adresse $0000. C'est pour cela que votre programme doit tre conu pour
dmarrer depuis l'adresse P:$0000.

Dans le cas de ExecBoot, ce n'est plus ce format: Il n'y a plus qu'un seul
bloc, qui n'est donc pas signal, et qui est charg en P:$0000 directement.
Bref, les 512 mots DSP maximum que vous passez  ExecBoot sont chargs tels
quels en mmoire DSP, et complts ventuellement par des mots nuls. Puis
excution depuis l'adresse 0.

A ce propos, une erreur du Xbios: vous remarquerez l'absence de la mmoire L.
Il suffit simplement de sparer un bloc de mmoire L en deux blocs de mmoire
X et Y  envoyer au DSP, pendant la conversion LodToBinary. Mais ce con de
Xbios ne le fait pas, et balance tout en mmoire Y, n'importe comment en plus.
Bref, y'a un bug...

Il nous reste  communiquer avec le DSP,  travers le port Host: le Xbios le
permet, mais autant le faire  la main, a va aussi vite. Vous me direz, c'est
moins compatible... Je rigole: si le DSP changeait, vos routines DSP ne
marcheraient plus, la taille d'un mot DSP ne serait sans doute plus la mme,
etc.. Dans ces conditions, autant faire les transferts soi-mme, c'est plus
rapide et plus amusant...

Mais comme nous tournons ici dans le boot sector, on va programmer comme un
sauvage, en ne rservant pas de mmoire, sans respecter Dsp_Lock, etc.. C'est
possible uniquement parce qu'en boot, un autre programme ne peut pas dj
utiliser le DSP. Depuis le bureau, autant se faire les tests complets, a ne
mange pas de pain et a vite d'tre 3  utiliser le DSP en mme temps!!.

Ainsi, on se sert de Dsp_ExecBoot, qui est normallement rserv aux
dbuggers DSP (tiens, pourquoi ai-je mis un pluriel ?...). En effet, le TOS
installe un semblant de systme d'exploitation (extrmement primaire) dans
le DSP, en haut de la mmoire P:. Et ce mini-systme est court-circuit
dans le cas d'un Dsp_ExecBoot. 

Un dernier dtail: cet embryon de systme d'exploitation n'est charg dans
la mmoire du DSP qu'une seule fois, lors du reset. Inutile de dire que si
vous l'crasez, le Xbios sera bien embt de ne plus trouver  qui parler
lors du prochain Dsp_ExecProg ou Dsp_LoadProg... C'est pour cela qu'il est
important de faire appel  la routine Dsp_Available pour ne pas provoquer
de catastrophes, et donc de faire attention  la mmoire P: haute.

Je ne parlerai pas des sous-programmes DSP, c'est trop le bordel  programmer,
mieux vaut se contenter de programmes, y'a dj de quoi faire.


Nullos, DNT-Crew 1994
