				Le TOS
				******

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

	Toutes les fonctions du GEMDOS renvoient une valeur, si l'opration s'est
mal passe cette valeur est ngative et correspond  l'un codes d'erreurs lists en
dessous:

0	tout va bien			>0	paramtre renvoy
-32	mauvaise fonction		-49	plus de fichiers
-33	fichier non trouv		-58	dj verrouill
-34	chemin non trouv		-59	mauvaise requete dverrouillage
-35	plus de handles		-64	limites dpasses
-36	accs refus			-65	erreur interne
-37	mauvais handle		-66 	mauvais format programme
-39	mmoire 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		: cre 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 rel x sur le fichier (8 octets).
----------------

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

adr  handle struc>	: crit la structure pointe par adr sur le fichier.
------------------

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

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

handle >flt	: lit un rel sur le fichier et l'envoit sur la pile, puis dpose 1
-----------
	(ok) ou 0.

adr handle >set	: lit un ensemble sur le fichier et le place en adr (adresse
---------------
	d'un ensemble de mme 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 mme type) et renvoit 1 (ok) ou 0.

n handle fseek	: dplace le pointeur fichier de n octets (relatifs) et
--------------
	renvoit la nouvelle position par rapport au dbut du fichier.

n handle fseek>	: place le pointeur  n octets (>0) par rapport au dbut
---------------
	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 rservs
	adr+21	: attribut
	adr+22	: heure
	adr+24	: date
	adr+26	: taille
	adr+30	: nom (14 octets termins par un nul).

adr fsetdta	: fixe la DTA  l'adresse indique (ne renvoit rien).
-----------

dta	: dpose 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 acclrant les accs disques.

d  dsetdrv	: fixe le lecteur d, renvoit un masque des lecteurs prsents.
----------

dgetdrv	: renvoit le numro du lecteur actuel (A=0).
-------

" chemin" dsetpath	: fixe le rpertoire 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 priphrique n un handle normal, renvoit le handle.
----------

n handle fforce	: redirige le priphrique n sur un fichier.
---------------

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

adr  mfree	: libre le bloc allou  l'adresse adr, renvoit 0.
----------

0 adr n mshrink	: rserve un bloc de n octets commenant en adr et
---------------
	libre les autres.

cauxis	: renvoit 0 si buffer srie vide, %hFFFF sinon.
------

cauxin	: attend un caractre sur le port srie et le renvoit sur la pile.
------

cauxos	: renvoit 0 si port srie prt, %hFFFF sinon.
------

c  cauxout	: crit le caractre c sur le port srie.
----------

cprnos	: renvoit 0 si imprimante non prte, %hFFFF sinon.
------

c  cprnout	: envoit le caractre 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 caractre au clavier et renvoit son code
--------
	clavier+ASCII sur la pile ou (c<255) affiche le cractre 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
----------
caractres en adr+2:
	adr		: n (entre)
	adr+1		: n'=nbr de caractres lus (sortie)
	adr+2		: n' octets.

pterm0	: termine un programme (dj ralis par system).
------

n pterm	: termine un programme et renvoit n au pre.
-------

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

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

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

user		: revient au mode utilisateur.
----

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

	Comme pour le GEMDOS, la valeur renvoye par ces fonctions est soit
paramtre (positif) ou un code d'erreur (ngatif):

0	Ok				-9	plus de papier
-1	erreur gnrale		-10	erreur d'criture
-2	lecteur non prt		-11	erreur de lecture
-3	commande inconnue	-12	priphrique protg en criture
-4	erreur CRC			-14	media-change dtect
-5	mauvaise requte		-15	priphrique inconnu
-6	piste non trouve		-16	secteurs dfectueux dtects
-7	support inconnu		-17	insrer un autre dique
-8	secteur non trouv

	Les priphriques d'entre sortie standards ont chacun un handle
prdtermin:

	0	PRN: 	port parallle
	1	AUX:	port srie
	2	CON:	clavier, cran
	3	MIDI
	4	IKBD	intelligent keyboard
	5	cran (sans codes de contrle

n bconstat	: renvoit 0 si aucun caractre n'est disponible sur le
----------
	priphrique n (en entre), -1 sinon.

n bcostat	: renvoit 0 si le priphrique n n'est pas prt  emettre, -1 sinon
---------
	(en sortie).

n bconin	: lit un caractre sur le priphrique n.
--------

n c bconout	: envoit le caractre c sur le priphrique 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 connects.
------

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 donnes
	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	: rsolution 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 rsolution
---------------
	(r) de l'cran, mettre -1 si un paramtre 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 entreposs  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	: mmes paramtres que floprd, mais compare le
-----------------------
	contenu de la mmoire  celui sur disque. Renvoit 0 si Ok, ou renvoit
	un code d'erreur et met en adr la liste des secteurs dfectueux.

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

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

n jdisint	: dsactive 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	: entre MIDI			adr+20	: routines heures
	adr+4	: erreur clavier		adr+24	: routine joystick
	adr+8	: erreur MIDI			adr+28	: vect. systme MIDI
	adr+12: tat IKBD			adr+32	: vect. systme IKBD
	adr+16: routines souris

n adr midiws	: envoit au port MIDI n+1 octets trouvs  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 renvoye 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 caractristiques de
-------------
	l'imprimante, renvoit les caractristiques.

baud ctrl ucr rsr tsr scr rsconf	: configure le port srie.
--------------------------------



n iorec	: renvoit l'adresse du buffer de rception du priphrique n:
-------
	n=0 (srie), 1 (clavier) ou 2 (MIDI):
	adr	: adresse du buffer		adr+8		: dernire position
	adr+4	: taille du buffer		adr+10	: bas du buffer
	adr+6	: premire position  lire	adr+12	: haut du buffer

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

unshift shift capslock keytbl	: redfinit les correspondances entre codes
-----------------------------
	claviers et code ASCII.

bioskeys	: restaure la dfinition standard du clavier.
--------

delai repet kbrate	: fixe le temps avant rptition (delai<256) et celui
------------------
entre deux rptitions (repet<256), renvoit les valeurs antrieures:
	bit0-7	: delai		bits8-15 : repet.
	Si les deux paramtres valent -1, seul l'tat est renvoy.

random	: renvoit un nombre alatoire sur 24 bits.
------

adr supexec	: excute une routine en mode superviseur (routine pointe 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 mmoire (adresse buf). Avec
op=2 la Non Volatile Ram est remise  zro. Renvoit 0 si Ok ou un code
d'erreur ngatif.

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

	Les fonctions non implantes peuvent tre appeles " la main"  l'aide des
trois mots suivants:

gemdos
------
	on l'utilise en empilant les paramtres dans le dictionnaire comme
suit:
	here		\ conserve le dbut 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 inutilise
	gemdos
	Renvoit alors la valeur de D0 et restaure le dictionnaire.

bios
xbios
-----
	mme ordre de paramtres que gemdos.