			Les inclassables
			****************

1 Le son DMA
************

setplay
-------
	r  ms  f  setplay  :  fixe les paramŠtres du son DMA.
	r	: jouer une seule fois (0), r‚p‚ter le son (1).
	ms	: son mono (0) ou st‚r‚o (1).
	f	: fr‚quence en kHz (0=6.25, 1=12.5, 2=25, 3=50).

play
----
	trois syntaxes possibles:
	1) a  t  play  :  joue le son se trouvant … l'adresse a et de taille t en
octets. Le son est sur 8 bits sign‚, pour le son st‚r‚o un octet sur deux
correspond … la voie de droite, l'autre … la voie de gauche. Les r‚glages sont
ceux pass‚s … setplay.
	2) 0 play	: arrˆte le son en cours.
	3) -1 play	: rend la main lorsque le morceau en cours est termin‚.

st_allot
tt_allot
--------
	ce sont des variantes de allot qui forcent l'allocation en ST RAM ou en
TT RAM sur un TT.
	n  st_allot	: alloue un bloc de n octets dans le dictionnaire si
celui-ci est en ST RAM, sinon demande au GEMDOS un bloc en ST RAM.
L'adresse est renvoy‚e sur la pile.
	n  tt_allot	:  alloue un bloc de n octets dans le dictionnaire si
celui-ci est en TT RAM, sinon demande au GEMDOS un bloc en TT RAM.
L'adresse est renvoy‚e sur la pile.
	st_allot s'impose pour les fichiers sons, car le DMA ne peut pas
acc‚der … la TT RAM.

loadbin
-------
	d  t  " fichier"  adr  loadbin  :  charge un fichier … l'adresse indiqu‚e, d
est l'offset du premier octet par rapport au d‚but du fichier, t est la taille en
octets. Renvoit la taille effectivement lue ou un code d'erreur GEMDOS.

savebin
-------
	t  " fichier"  adr  savebin  :  cr‚e un fichier et y ‚crit t octets se
trouvant … l'adresse adr. Renvoit le nombre d'octets effectivement ‚crits ou
un code d'erreur GEMDOS.







2 La cartouche ST REPLAY 16

setreplay
---------
	f  init  inter  setreplay  :  fixe les paramŠtres pour la gestion de la
cartouche.
	f	: fr‚quence de 48 Hz … 614400 Hz.
	init	: adresse d'une routine d'initialisation.
	inter	: adresse de la routine d'interruption.

replay
------
	ex‚cute la routine d'initialisation, lance le TIMER A avec la routine
d'interruption. Le clic droit de la souris permet l'arrˆt. La routine
d'interruption peut elle aussi y mettre fin, la fonction replay rend alors la
main.

	Les deux routines doivent ˆtre ‚crites en assembleur, les trois mots qui
suivent permettent de g‚n‚rer les instructions donnant l'accŠs en lecture et en
‚criture du son ainsi que l'instruction mettant fin au traitement:

replay_in
---------
	n replay_in : g‚nŠre dans le dictionnaire l'instruction move
$FB0000,Dn. C'est donc le registre Dn qui contient le mot lu.

replay_out
----------
	n replay_out  :  g‚nŠre l'instruction tst ($FA8000,Dn.w). Donc ‚crit
sur le port cartouche la valeur de mot contenue dans Dn.

replay_end
----------
	g‚nŠre les instructions qui redirigent l'interruption sur un simple RTE
et qui mettent … 1 un flag interne mettant fin … replay.

	Exemple, une ‚coute simple:

	variable _init
	variable _inter

	here _init !		\ garde le d‚but de la routine
	rts			\ initialisation inutile

	here _inter !		\ garde le d‚but de la routine
	0 replay_in		\ lit la valeur en entr‚e dans D0
	0 replay_out		\ la ressort telle quelle
	rte

	: ecoute
		20000			\ fr‚quence
		_init @ _inter @	\ les routines
		setreplay
		replay			\ lance l'‚coute (arrˆt=clic droit).
	;
	Autre exemple, un echo simple:

	10000 allot constant ZONE		\ m‚moire pour ‚cho

	here _init !
	ZONE labs# 1 lea		\ a1 pointe sur le d‚but de la zone
	1 an  6 dn  .l move
	10000 imm# 6 dn .l add	\ d6=a1+10000=fin de zone
	rts

	here _inter !
	killabels
	0 replay_in
	1 (an) 1 dn .w move		\ lit la m‚moire
	0 dn 1 dn .w add		\ m‚lange avec la valeur lue
	1 replay_out			\ sort le m‚lange
	0 dn 1 (an)+ .w move	\ valeur lue dans m‚moire
	6 dn 1 an .l cmp		\ A1=D6 (fin de m‚moire?)
	1 labs short ne? bra		\ non, pas encore
	ZONE labs# 1 lea		\ oui, revient au d‚but
	1 label
	rte

	: echo
		20000 _init @ _inter @ setreplay
		replay
	;

	A 20000 Hz, une zone de 10000 octets (5000 mots) repr‚sente un retard de
un quart de seconde.

3 Programmation des timers
**************************

	Outre les routines de son, il peut ˆtre utile de programmer une routine en
interruption … n'importe quelle fr‚quence:

timerA
------
	Deux syntaxes possibles:
	mfp timer_stop timerA   : arrˆte le timer A, la constante timer_stop vaut en
				fait 2, pour mfp voir plus bas.
	rout  mfp  mode  freq  end  timerA  : lance le Timer A avec les
paramŠtres suivants:
	rout:	adresse de la routine … ex‚cuter p‚riodiquement. Se termine par
		un RTE
	mfp:	adresse des registres MFP … utiliser. On utilisera les deux
		constantes suivantes: MFP_ST = $FFFA80 et MFP_ST =
		$FFFA00. Sur un ST, seul le MFP ST existe!
	mode:	mode de comptage, on utilisera les deux constantes suivantes:
		count=8 pour une synchro avec une source ext‚rieure et
		delay=0 pour un comptage bas‚ sur le temps.
	freq:	fr‚quence voulue en Hertz
	end:	mode de fin de routine, on utilisera les deux constantes
		suivantes: auto_end=0 pour un retour automatique … la normale
		lors du RTE ou soft_end=1 pour un retour programm‚.

	Exemple:

	routine  MFP_ST  delay  9600 auto_end  timerA

	lance le timer A du ST sur la routine sp‚cifi‚e … la fr‚quence de 9600
hertz avec fin de routine automatique.

	routine  %hFFFA00  0  9600  0  timerA: a exactement le mˆme effet
que la ligne pr‚c‚dente sauf que les noms des constantes n'ont pas ‚t‚ utilis‚s.

	Ensuite:

	MFP_ST timer_stop timerA  (ou %hFFFA00 2 timerA) :  stoppe l'ex‚cution
de la routine.

timerB, timerC, timerD
----------------------

	se programment de la mˆme maniŠre que le timer A.

4 Souris, Joystick
******************

joyst
-----
	signale … la machine que deux joysticks sont branch‚s. Dans ce mode
la souris n'existe plus, il faut donc pr‚voir une instruction mouse avant de
revenir au bureau.

mouse
-----
	signale … la machine qu'un joystick et la souris sont branch‚s (mode
normal).

mousex  mousey  mousek
----------------------
	renvoient respectivement les coordonn‚es x, y de la souris et l'‚tat des
deux boutons (bit0:gauche, bit1:droit).

jx0  jy0  fire0
---------------
	renvoient la position horizontale (-1:gauche, 0:centre, 1:droite), la
position verticale (-1:haut, 0:centre, 1:bas) et l'‚tat du bouton (1:appuy‚,
0:relach‚) du joystick 0 (celui qui prend la place de la souris).

jx1  jy1  fire1
---------------
	renvoient la position horizontale (-1:gauche, 0:centre, 1:droite), la
position verticale (-1:haut, 0:centre, 1:bas) et l'‚tat du bouton (1:appuy‚,
0:relach‚) du joystick 1. En mode mouse, le bit 1 de mousek donne fire1.

5 Les autres
************

desk
----
	Affiche une barre de menu, permet le r‚glage de la position et de la
taille de la fenˆtre FORTH, donne accŠs aux accessoires ou aux autres
applications (sous MultiTOS). On revient au FORTH … l'aide de l'option
Retour ou en r‚activant la fenˆtre (sous MultiTOS). La page de base du
FORTH est redimensionn‚e et r‚activ‚e (car celles de l'utilisateur ne sont
plus forc‚ment bien ajust‚es).

ltype
-----
	" chaine" ltype  :  envoit une chaine de carctŠres … l'imprimante. On
peut par ce moyen envoyer une s‚rie de codes de commande, mais, le
caractŠre 0 marquant la fin de chaine, lui ne pourra pas ˆtre envoy‚.

&cookie
-------
	&cookie XXXX  :  cr‚e un mot XXXX dont le nom de 4 lettres
correspond exactement au cookie recherch‚ (penser aux majuscules si
n‚cessaire). A l'ex‚cution XXXX laisse sur la pile:
	soit 0 si le cookie n'existe pas,
	soit 1 si il existe. En dessous du 1 se trouve sur la pile la valeur du
cookie (parfois une adresse sur un bloc de paramŠtres, parfois un num‚ro de
version, etc...).

	&cookie MiNT		\ cr‚e le mot
	MiNT if			\ si il y a 1
		." Version " h.		\ si Mint pr‚sent, sa valeur est la version
	else
		." MiNT non install‚"\ si absent, on le signale
	then

cache
-----
	x  cache  :  fixe la valeur du registre CACR g‚rant le cache des 68030
ou plus. Valeurs possibles de x:
	%ha0a		: vide en d‚sactive les deux caches
	%h101	: active les deux caches
	%ha00	: vide et d‚sactive le cache donn‚es
	%h100	: active le cache donn‚es
	%h00a	: vide et d‚sactive le cache instruction
	%h001	: active le cache instruction




call
----
	adr call  :  saute … une routine en assembleur … l'adresse adr. Elle doit
se terminer par RTS (en utilisation normale). Il faut qu'elle ne modifie A4,
A5, A6 qu'en connaissance de cause:
	a6: pointeur de pile donn‚es
	a5: pointeur d'interpr‚tation
	a4: pointeur de pile des retours.

trace
-----
	f  trace  : passe en mode trace dŠs le mot suivant. Chaque mot est
affich‚ … l'‚cran ainsi que le sommet de la pile avant son ex‚cution. L'appui
sur Enter ex‚cute le mot affich‚, l'appuis sur ESC interromp le traitement et
revient au mode direct. L'affichage se fait dans une fenˆtre brute fix‚e au
d‚part sur les 3 derniŠres lignes de l'‚cran.

untrace
-------
	arrˆte le tracage des programmes dŠs le mot suivant.

trace_win
---------
	y  h  trace_win : fixe la fenˆtre TRACE … la ligne y et sur une hauteur
de h lignes (ceci en lignes de texte).
	Le programme impose une valeur de 3 pour h au minimum.
	Si y est n‚gatif, la position est calcul‚e … partir du bas de l'‚cran.
	Pour tracer un programme en tout confort, on peut, avec desk,
modifier la fenˆtre FORTH pour qu'elle ne d‚borde pas sur les 3 derniŠres
lignes et ainsi avoir deux zones s‚par‚es: ex‚cution et tra‡age.
