				Le TOS
				******

1 Le GEMDOS
***********

	Toutes les fonctions du GEMDOS renvoient une valeur, si l'op‚ration s'est
mal pass‚e cette valeur est n‚gative et correspond … l'un codes d'erreurs list‚s en
dessous:

0	tout va bien			>0	paramŠtre renvoy‚
-32	mauvaise fonction		-49	plus de fichiers
-33	fichier non trouv‚		-58	d‚j… verrouill‚
-34	chemin non trouv‚		-59	mauvaise requete d‚verrouillage
-35	plus de handles		-64	limites d‚pass‚es
-36	accŠs refus‚			-65	erreur interne
-37	mauvais handle		-66 	mauvais format programme
-39	m‚moire insuffisante	-67	erreur redimensionnement bloc
-40	mauvaise adresse bloc	-80	trop de liens symboliques
-46	mauvais lecteur		-200	mount point crossed
-48	cross device rename

" fichier"  attribut  fcreate		: cr‚e un fichier et renvoit le handle.
-----------------------------

" fichier" mode fopen	: ouvre un fichier (0=read,1=write,2=r+w).
---------------------

handle fclose	: ferme un fichier.
-------------

handle n adr fread 	: lit n octets sur le fichier et les place … l'adresse adr.
------------------
	Renvoit le nombre d'octets lus.

handle n adr fwrite	: ‚crit n octets sur le fichier se trouvant … l'adresse adr.
-------------------
	Renvoit le nombre d'octets ‚crits.

x  handle int>	: ‚crit l'entier x sur le fichier (4 octets).
--------------

" chaine" handle str>	: ‚crit la chaine sur le fichier.
---------------------

%fx  handle flt>	: ‚crit le r‚el x sur le fichier (8 octets).
----------------

adr  handle set>	: ‚crit l'ensemble point‚ par adr sur le fichier.
----------------

adr  handle struc>	: ‚crit la structure point‚e par adr sur le fichier.
------------------

handle  >int	: lit un entier sur le fichier et l'envoit sur la pile, puis d‚pose 1
------------
	(ok) ou 0.

chaine handle >str	: lit une chaine sur le fichier et la place dans la chaine
------------------
	sp‚cifi‚e, renvoit 1 (ok) ou 0.

handle >flt	: lit un r‚el sur le fichier et l'envoit sur la pile, puis d‚pose 1
-----------
	(ok) ou 0.

adr handle >set	: lit un ensemble sur le fichier et le place en adr (adresse
---------------
	d'un ensemble de mˆme type) et renvoit 1 (ok) ou 0.

adr handle >struc	: lit une structure sur le fichier et la place en adr
-----------------
	(adresse d'une structure de mˆme type) et renvoit 1 (ok) ou 0.

n handle fseek	: d‚place le pointeur fichier de n octets (relatifs) et
--------------
	renvoit la nouvelle position par rapport au d‚but du fichier.

n handle fseek>	: place le pointeur … n octets (>0) par rapport au d‚but
---------------
	du fichier, renvoit n.

n handle fseek<	: place le pointeur … n octets (>0) de la fin du fichier,
---------------
	renvoit n.

" fichier" fdelete	: efface le fichier et renvoit 0 si ok.
------------------

fgetdta	: renvoit l'adresse de la DTA actuelle:
-------
	adr		: 21 octets r‚serv‚s
	adr+21	: attribut
	adr+22	: heure
	adr+24	: date
	adr+26	: taille
	adr+30	: nom (14 octets termin‚s par un nul).

adr fsetdta	: fixe la DTA … l'adresse indiqu‚e (ne renvoit rien).
-----------

dta	: d‚pose sur la pile l'adresse d'une zone de 44 octets pouvant servir de
---
	DTA.

" chemin" attribut ffirst	: cherche le 1ø fichier correspondant au masque
-------------------------
	donn‚. Renvoit 0 et remplit la DTA.

fnext	: cherche le fichier suivant, renvoit 0 et remplit la DTA.
-----

" masque" dir	: affiche les fichiers correspondants au masque.
-------------

d  f  p  s  format	: formate l'unit‚ d (0=A,1=B) avec f faces (1 ou 2), p
------------------
	pistes (80 par exemple) et s  secteurs par piste (9,10 ou 11). Avec
	s=-9 on obtient un formatage acc‚l‚rant les accŠs disques.

d  dsetdrv	: fixe le lecteur d, renvoit un masque des lecteurs pr‚sents.
----------

dgetdrv	: renvoit le num‚ro du lecteur actuel (A=0).
-------

" chemin" dsetpath	: fixe le r‚pertoire courant et renvoit 0.
------------------

chaine n dgetpath	: renvoit dans la chaine le chemin courant du lecteur n
-----------------
	et renvoit 0.

adr n dfree	: renvoit les informations sur le lecteur actuel:
-----------
	adr		: clusters libres
	adr+4		: total clusters
	adr+8		: octets par secteur
	adr+12	: secteurs par cluster

" dossier" dcreate	: cr‚‚ un dossier et renvoit 0.
------------------

" dossier" ddelete	: efface un dossier et renvoit 0.
------------------

0  " ancien"  " nouveau" frename	: renommne un fichier et renvoit 0.
--------------------------------

" fichier" f  attribut  fattrib	: modifie (f=1) ou lit (f=0) l'attribut du
-------------------------------
	fichier, l'attribut est renvoy‚.

n  fduplic	: donne au p‚riph‚rique n un handle normal, renvoit le handle.
----------

n handle fforce	: redirige le p‚riph‚rique n sur un fichier.
---------------

n malloc	: r‚serve n octets et renvoit l'adresse du bloc. Si n=-1 renvoit la
--------
	taille maximale disponible.

adr  mfree	: libŠre le bloc allou‚ … l'adresse adr, renvoit 0.
----------

0 adr n mshrink	: r‚serve un bloc de n octets commen‡ant en adr et
---------------
	libŠre les autres.

cauxis	: renvoit 0 si buffer s‚rie vide, %hFFFF sinon.
------

cauxin	: attend un caractŠre sur le port s‚rie et le renvoit sur la pile.
------

cauxos	: renvoit 0 si port s‚rie prˆt, %hFFFF sinon.
------

c  cauxout	: ‚crit le caractŠre c sur le port s‚rie.
----------

cprnos	: renvoit 0 si imprimante non prˆte, %hFFFF sinon.
------

c  cprnout	: envoit le caractŠre c sur le port imprimante et renvoit -1 si ok
----------
	ou 0 si erreur.

cconis	: renvoit 0 si buffer clavier vide, %hFFFF sinon.
------

c crawio	: lit (c=255) un caractŠre au clavier et renvoit son code
--------
	clavier+ASCII sur la pile ou (c<255) affiche le cractŠre c et renvoit
	une valeur quelconque.

" chaine" cconws	: affiche la chaine.
----------------

adr cconrs	: saisit une chaine au clavier de n octets maxi et renvoit les
----------
caractŠres en adr+2:
	adr		: n (entr‚e)
	adr+1		: n'=nbr de caractŠres lus (sortie)
	adr+2		: n' octets.

pterm0	: termine un programme (d‚j… r‚alis‚ par system).
------

n pterm	: termine un programme et renvoit n au pŠre.
-------

p  n  ptermres	: termine un programme, renvoit n au pŠre et conserve
--------------
	p octets … partir  de la page de base.

mode " nom" " commande" " envir" pexec	: charge et/ou ex‚cute un
--------------------------------------
	programme selon le mode.

super		: passe en mode superviseur.
-----

user		: revient au mode utilisateur.
----

2 Le BIOS
*********

	Comme pour le GEMDOS, la valeur renvoy‚e par ces fonctions est soit
paramŠtre (positif) ou un code d'erreur (n‚gatif):

0	Ok				-9	plus de papier
-1	erreur g‚n‚rale		-10	erreur d'‚criture
-2	lecteur non prˆt		-11	erreur de lecture
-3	commande inconnue	-12	p‚riph‚rique prot‚g‚ en ‚criture
-4	erreur CRC			-14	media-change d‚tect‚
-5	mauvaise requˆte		-15	p‚riph‚rique inconnu
-6	piste non trouv‚e		-16	secteurs d‚fectueux d‚tect‚s
-7	support inconnu		-17	ins‚rer un autre dique
-8	secteur non trouv‚

	Les p‚riph‚riques d'entr‚e sortie standards ont chacun un handle
pr‚d‚termin‚:

	0	PRN: 	port parallŠle
	1	AUX:	port s‚rie
	2	CON:	clavier, ‚cran
	3	MIDI
	4	IKBD	intelligent keyboard
	5	‚cran (sans codes de contr“le

n bconstat	: renvoit 0 si aucun caractŠre n'est disponible sur le
----------
	p‚riph‚rique n (en entr‚e), -1 sinon.

n bcostat	: renvoit 0 si le p‚riph‚rique n n'est pas prˆt … emettre, -1 sinon
---------
	(en sortie).

n bconin	: lit un caractŠre sur le p‚riph‚rique n.
--------

n c bconout	: envoit le caractŠre c sur le p‚riph‚rique n.
-----------

f  adr  n  s  d  rwabs	: selon f, lit ou ‚crit n secteurs de l'unit‚ d …
----------------------
partir du secteur s, les ‚changes se faisant … l'adresse adr.
	f	bit0	: 0=lire, 1=‚crire
		bit1	: 0=tenir compte de media-change, 1=ingnorer
	Cas particulier adr=0, alors simule (n=0) ou efface (n=1) le
changement de disque.

d mediach	: indique le changement de disque sur l'unit‚ d, renvoit 0 (pas
---------
chang‚), 1 (peut-ˆtre), 2 (surement chang‚).

drvmap	: renvoit un masque de bits indiquant les lecteurs connect‚s.
------

adr getmpb	: copie le Memory Parameter Bloc … l'adresse adr (12 octets).
----------

d getbpb	: renvoit l'adresse d'un bloc concernant l'unit‚ d ou 0 si erreur.
--------
	adr	: octets par secteur		adr+10:  1ø sect de 2ø FAT
	adr+2	: secteurs par cluster	adr+12:  1ø sect du 1ø cluster libre.
	adr+4	: octets par cluster		adr+14:  clusters de donn‚es
	adr+6	: secteurs dans repertoire	adr+16:  FAT 12 bits(0), 16bits(1)
	adr+8	: secteurs par FAT

m kbshift	: lit (m=-1) ou fixe (autre valeur) l'‚tat des touches de
---------
	controle:
	bit0	: shift droit		bit2	: control
	bit1	: shift gauche		bit3	: alternate

n  vect  setexec	: donne la valeur vect au vecteur d'exeption n.
----------------

3 Le XBIOS
**********

physbase	: renvoit l'adresse de l'‚cran physique.
--------

logbase	: renvoit l'adresse de l'‚cran logique.
-------

getrez	: r‚solution actuelle:
------
	0	: maxi 320x240		1: 640x200
	2	: 640x400 ou 640x480 (sur Falcon)
	4	: 640x480 (sur TT)		6: 1280x960
	7	: 320x480

l p r setscreen	: fixe la base logique (l), physique (p) et la r‚solution
---------------
	(r) de l'‚cran, mettre -1 si un paramŠtre est inutilis‚.
adr setpalette	: fixe la palette de couleurs (adr pointe sur 16 mots).

n  c  setcolor	: fixe la couleur (c) du registre n.
--------------

adr 0 d s p f n floprd	: lit n secteurs de la piste p sur la face f du lecteur
----------------------
	d … partir du secteur s, les octets lus sont entrepos‚s … l'adresse adr.
	Renvoit 0 si Ok.

adr 0 d s p f n flopwr	: comme floprd mais en ‚criture.
----------------------

adr 0 d s p f n flopver	: mˆmes paramŠtres que floprd, mais compare le
-----------------------
	contenu de la m‚moire … celui sur disque. Renvoit 0 si Ok, ou renvoit
	un code d'erreur et met en adr la liste des secteurs d‚fectueux.

n  adr  mfpint	: donne au vecteur n du MFP l'adresse adr.
--------------

n jenabint	: active l'interruption n du MFP.
----------

n jdisint	: d‚sactive l'interruption n du MFP.
---------

tim ctrl dat adr xbtimer	: lance un timer du MFP.
------------------------

kbdvbase	: renvoit l'adresse d'un tableau d'adresses des routines clavier:
--------
	adr	: entr‚e MIDI			adr+20	: routines heures
	adr+4	: erreur clavier		adr+24	: routine joystick
	adr+8	: erreur MIDI			adr+28	: vect. systŠme MIDI
	adr+12: ‚tat IKBD			adr+32	: vect. systŠme IKBD
	adr+16: routines souris

n adr midiws	: envoit au port MIDI n+1 octets trouv‚s … l'adresse adr.
------------

val  reg  giaccess	: lit (bit7 de reg … 0) ou ‚crit (bit7 de reg … 1) une
------------------
	valeur dans le registre reg du circuit son. En cas de lecture val est sans
	signification, en cas d'‚criture la valeur renvoy‚e est sans
	signification.

adr dosound	: envoit une chaine de commandes au circuit son.
-----------

masque offgibit	: annule certains bits du port A (ceux … 0 dans masque).
---------------

masque ongibit	: fixe certains bits du port A (ceux … 1 dans masque).
--------------

masque setprt	: lit (masque=-1) ou fixe les caractŠristiques de
-------------
	l'imprimante, renvoit les caract‚ristiques.

baud ctrl ucr rsr tsr scr rsconf	: configure le port s‚rie.
--------------------------------



n iorec	: renvoit l'adresse du buffer de r‚ception du p‚riph‚rique n:
-------
	n=0 (s‚rie), 1 (clavier) ou 2 (MIDI):
	adr	: adresse du buffer		adr+8		: derniŠre position
	adr+4	: taille du buffer		adr+10	: bas du buffer
	adr+6	: premiŠre position … lire	adr+12	: haut du buffer

type param vect initmous	: initialise la gestion de la souris.
------------------------

unshift shift capslock keytbl	: red‚finit les correspondances entre codes
-----------------------------
	claviers et code ASCII.

bioskeys	: restaure la d‚finition standard du clavier.
--------

delai repet kbrate	: fixe le temps avant r‚p‚tition (delai<256) et celui
------------------
entre deux r‚p‚titions (repet<256), renvoit les valeurs ant‚rieures:
	bit0-7	: delai		bits8-15 : repet.
	Si les deux paramŠtres valent -1, seul l'‚tat est renvoy‚.

random	: renvoit un nombre al‚atoire sur 24 bits.
------

adr supexec	: ex‚cute une routine en mode superviseur (routine point‚e par
-----------
	adr, et se terminant par RTS).

vsync	: attend la fin du balayage d'un ‚cran.
-----

op start n buf nvmaccess : lit (op=0) ou ‚crit (op=1) n octets … partir de
l'octet start (50 octets maxi) depuis ou vers la m‚moire (adresse buf). Avec
op=2 la Non Volatile Ram est remise … z‚ro. Renvoit 0 si Ok ou un code
d'erreur n‚gatif.

4 Autres fonctions
******************

	Les fonctions non implant‚es peuvent ˆtre appel‚es "… la main" … l'aide des
trois mots suivants:

gemdos
------
	on l'utilise en empilant les paramŠtres dans le dictionnaire comme
suit:
	here		\ conserve le d‚but de la zone
	opcode w,	\ nø de fonction toujours sur 2 octets
	param1 w, (si 2 octets) ou , (si 4 octets)
	param2 w, ....
	valeur de D0 ,  \ mettre 0 si inutilis‚e
	gemdos
	Renvoit alors la valeur de D0 et restaure le dictionnaire.

bios
xbios
-----
	mˆme ordre de paramŠtres que gemdos.