Mode d'emploi du Xbios: Pour se servir du DSP, il faut d‚j… demander s'il n'est pas d‚j… utilis‚: retour=Dsp_Lock(void) R‚serve le DSP. Si retour=-1, il est d‚j… occup‚, attendre son tour!! void Dsp_Unlock(void) LibŠre le DSP. Puis on v‚rifie que y'a assez de place libre dedans (… cause des sous programmes, qui sont install‚s en m‚moire haute): void Dsp_Available(long *x_size,long *y_size) Renvoie la limite haute de la m‚moire 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 r‚sultat ‚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 pr‚cisant la taille m‚moire que l'on va utiliser (un sous programme ne pourra donc plus ˆtre charg‚ par la suite en dessous de cette limite, on est prot‚g‚) retour=Dsp_Reserve(long x_size,long y_size) Pr‚cise les adresses maximales que l'on va utiliser dans notre programme. En retour, si on re‡oit -1, y'a eu une merde. Reste maintenant … le charger. Pour cela, on peut soit charger et ex‚cuter le programme directement, soit le charger en RAM (c“t‚ 030), puis le faire ex‚cuter ensuite: retour=Dsp_LoadProg(char *file, int ability, char *buffer) Charge et ex‚cute le fichier LOD indiqu‚ par file, en se servant du buffer pour travailler. ability est un paramŠtre identifiant votre programme. Vous pouvez soit le choisir vous mˆme, soit en demander un tout-prˆt 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'ex‚cution. Vous obtenez donc un bloc binaire dans votre buffer, qui est le programme prˆt … ˆ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'ex‚cuter un programme pr‚c‚demment charg‚ avec LodToBinary dans le buffer, de taille codesize en mots DSP, et avec toujours le paramŠtre d'ability pour l'ex‚cution 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 trŠs brutale, style debugger, s'abstenir pour les autres. Le paramŠtre 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 ex‚cuter son programme. Vous pouvez passer outre et choisir votre propre ability, mais y'a le risque de tomber sur un identificateur d‚j… pris. retour=Dsp_GetProgAbility(void) Demande quel est l'identificateur du programme DSP actuel. L'int‚rˆt est que l'on peut savoir si son programme est d‚j… en m‚moire, 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 int‚resse: le format binaire est compos‚ de mots DSP (groupe de 3 octets, donc) qui indiques dans l'ordre: o 1 mot: le type de m‚moire ($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 pr‚ciser l'espace et l'adresse m‚moire de ce qui suit, l'assembleur g‚nŠre un nouveau bloc). Une fois charg‚, le DSP saute … l'adresse $0000. C'est pour cela que votre programme doit ˆtre con‡u pour d‚marrer 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 charg‚s tels quels en m‚moire DSP, et compl‚t‚s ‚ventuellement par des mots nuls. Puis ex‚cution depuis l'adresse 0. A ce propos, une erreur du Xbios: vous remarquerez l'absence de la m‚moire L. Il suffit simplement de s‚parer un bloc de m‚moire L en deux blocs de m‚moire X et Y … envoyer au DSP, pendant la conversion LodToBinary. Mais ce con de Xbios ne le fait pas, et balance tout en m‚moire 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 mˆme, etc.. Dans ces conditions, autant faire les transferts soi-mˆme, c'est plus rapide et plus amusant... Mais comme nous tournons ici dans le boot sector, on va programmer comme un sauvage, en ne r‚servant pas de m‚moire, sans respecter Dsp_Lock, etc.. C'est possible uniquement parce qu'en boot, un autre programme ne peut pas d‚j… 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 mˆme temps!!. Ainsi, on se sert de Dsp_ExecBoot, qui est normallement r‚serv‚ aux d‚buggers DSP (tiens, pourquoi ai-je mis un pluriel ?...). En effet, le TOS installe un semblant de systŠme d'exploitation (extrˆmement primaire) dans le DSP, en haut de la m‚moire P:. Et ce mini-systŠme est court-circuit‚ dans le cas d'un Dsp_ExecBoot. Un dernier d‚tail: cet embryon de systŠme d'exploitation n'est charg‚ dans la m‚moire du DSP qu'une seule fois, lors du reset. Inutile de dire que si vous l'‚crasez, le Xbios sera bien embˆt‚ 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 m‚moire P: haute. Je ne parlerai pas des sous-programmes DSP, c'est trop le bordel … programmer, mieux vaut se contenter de programmes, y'a d‚j… de quoi faire. Nullos, DNT-Crew 1994