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

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

setplay
-------
	r  ms  f  setplay  :  fixe les paramtres du son DMA.
	r	: jouer une seule fois (0), rpter le son (1).
	ms	: son mono (0) ou stro (1).
	f	: frquence 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 stro un octet sur deux
correspond  la voie de droite, l'autre  la voie de gauche. Les rglages sont
ceux passs  setplay.
	2) 0 play	: arrte 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 renvoye 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 renvoye sur la pile.
	st_allot s'impose pour les fichiers sons, car le DMA ne peut pas
accder  la TT RAM.

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

savebin
-------
	t  " fichier"  adr  savebin  :  cre 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 paramtres pour la gestion de la
cartouche.
	f	: frquence de 48 Hz  614400 Hz.
	init	: adresse d'une routine d'initialisation.
	inter	: adresse de la routine d'interruption.

replay
------
	excute la routine d'initialisation, lance le TIMER A avec la routine
d'interruption. Le clic droit de la souris permet l'arrt. 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 gnrer les instructions donnant l'accs en lecture et en
criture du son ainsi que l'instruction mettant fin au traitement:

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

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

replay_end
----------
	gnre 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 dbut de la routine
	rts			\ initialisation inutile

	here _inter !		\ garde le dbut de la routine
	0 replay_in		\ lit la valeur en entre dans D0
	0 replay_out		\ la ressort telle quelle
	rte

	: ecoute
		20000			\ frquence
		_init @ _inter @	\ les routines
		setreplay
		replay			\ lance l'coute (arrt=clic droit).
	;
	Autre exemple, un echo simple:

	10000 allot constant ZONE		\ mmoire pour cho

	here _init !
	ZONE labs# 1 lea		\ a1 pointe sur le dbut 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 mmoire
	0 dn 1 dn .w add		\ mlange avec la valeur lue
	1 replay_out			\ sort le mlange
	0 dn 1 (an)+ .w move	\ valeur lue dans mmoire
	6 dn 1 an .l cmp		\ A1=D6 (fin de mmoire?)
	1 labs short ne? bra		\ non, pas encore
	ZONE labs# 1 lea		\ oui, revient au dbut
	1 label
	rte

	: echo
		20000 _init @ _inter @ setreplay
		replay
	;

	A 20000 Hz, une zone de 10000 octets (5000 mots) reprsente 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 frquence:

timerA
------
	Deux syntaxes possibles:
	mfp timer_stop timerA   : arrte 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
paramtres suivants:
	rout:	adresse de la routine  excuter priodiquement. 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 extrieure et
		delay=0 pour un comptage bas sur le temps.
	freq:	frquence 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 spcifie  la frquence de 9600
hertz avec fin de routine automatique.

	routine  %hFFFA00  0  9600  0  timerA: a exactement le mme effet
que la ligne prcdente sauf que les noms des constantes n'ont pas t utiliss.

	Ensuite:

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

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

	se programment de la mme manire que le timer A.

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

joyst
-----
	signale  la machine que deux joysticks sont branchs. Dans ce mode
la souris n'existe plus, il faut donc prvoir une instruction mouse avant de
revenir au bureau.

mouse
-----
	signale  la machine qu'un joystick et la souris sont branchs (mode
normal).

mousex  mousey  mousek
----------------------
	renvoient respectivement les coordonnes 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 rglage de la position et de la
taille de la fentre FORTH, donne accs aux accessoires ou aux autres
applications (sous MultiTOS). On revient au FORTH  l'aide de l'option
Retour ou en ractivant la fentre (sous MultiTOS). La page de base du
FORTH est redimensionne et ractive (car celles de l'utilisateur ne sont
plus forcment bien ajustes).

ltype
-----
	" chaine" ltype  :  envoit une chaine de carctres  l'imprimante. On
peut par ce moyen envoyer une srie de codes de commande, mais, le
caractre 0 marquant la fin de chaine, lui ne pourra pas tre envoy.

&cookie
-------
	&cookie XXXX  :  cre un mot XXXX dont le nom de 4 lettres
correspond exactement au cookie recherch (penser aux majuscules si
ncessaire). A l'excution 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 paramtres, parfois un numro de
version, etc...).

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

cache
-----
	x  cache  :  fixe la valeur du registre CACR grant le cache des 68030
ou plus. Valeurs possibles de x:
	%ha0a		: vide en dsactive les deux caches
	%h101	: active les deux caches
	%ha00	: vide et dsactive le cache donnes
	%h100	: active le cache donnes
	%h00a	: vide et dsactive 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 donnes
	a5: pointeur d'interprtation
	a4: pointeur de pile des retours.

trace
-----
	f  trace  : passe en mode trace ds le mot suivant. Chaque mot est
affich  l'cran ainsi que le sommet de la pile avant son excution. L'appui
sur Enter excute le mot affich, l'appuis sur ESC interromp le traitement et
revient au mode direct. L'affichage se fait dans une fentre brute fixe au
dpart sur les 3 dernires lignes de l'cran.

untrace
-------
	arrte le tracage des programmes ds le mot suivant.

trace_win
---------
	y  h  trace_win : fixe la fentre 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 ngatif, la position est calcule  partir du bas de l'cran.
	Pour tracer un programme en tout confort, on peut, avec desk,
modifier la fentre FORTH pour qu'elle ne dborde pas sur les 3 dernires
lignes et ainsi avoir deux zones spares: excution et traage.
