	TRANSFORMEZ VOTRE SUPERCHARGER EN COPROCESSEUR
	----------------------------------------------


	Si votre Supercharger dort sous une tonne de poussire
parce qu'muler un PC XT  8MHz n'impressionne plus vos copains
Pentiumistes, relookez votre antiquit en coprocesseur capable de travail
en parallle avec le 68000: en bref, une BeBox 8MHz pour pas un rond.

	Sachez qu'il est relativement simple d'changer des donnes avec
Supercharger, de lui faire excuter un programme pendant que le 68000
s'occupe d'autre chose, mme en GFA!
	Pour ce faire, ses concepteurs avaient crit un petit programme du
nom de SCTB.PRG qui mettait  la disposition du programmeur assembleur une
srie de routines sur le Trap #4. Malheureusement, il avait plusieurs
dfauts:
	- plantage sur 68030...
	- obligation de lancer SCTB avant
	- le Trap #4 et la mmoire rserve n'taient libres qu'aprs un
	RESET

	Je vous amne donc une nouvelle version de cette TOOL BOX (bote 
outils) sous forme d'un fichier BINaire qu'on pourra inclure dans
n'importe quel programme (GFA, assembleur, C...). Ceci comporte plusieurs
avantages:
	- le trap #4 et la mmoire reserve sont librs ds que votre
	programme se termine
	- accs au Supercharger avec d'autres langages que l'assembleur
	- par le biais d'INCLUDE, la librairie peut faire partie
	intgrante du PRG et ne ncessite donc plus la prsence d'un
	second fichier.
	Pour comble de bonheur, il n'y a plus de bombes sur le 68030.

	Cet article devrait s'accompagner, sur la disquette, de la
TOOL_BOX.BIN, des listings GFA, assembleur et PC illustrant par l'exemple
l'utilisation des routines.

Les trois modes de Supercharger
-------------------------------
	1. En mode 'Indtermin', l'tat du priphrique est inconnu, il
	est compltement inutilisable et ncessite l'appel  la fonction
	BOOT qui le passe en mode 'Esclave'.

	2. En mode 'Esclave', c'est l'Atari qui le pilote comme un
	vulgaire lecteur de disquette: crire ou lire  une adresse. Mais
	si on lance l'excution d'un programme PC, il bascule alors en mode
	'Coopratif'.

	3. En mode 'Coopratif', plus personne ne commande. Il faut que
	vos deux programmes soient parfaitement au point et peuvent alors
	changer des donnes sous forme d'un octet ou d'un bloc de
	mmoire. C'est le programme PC qui dcide si il doit retourner en
	mode 'Escalve' ou en mode 'Indtermin'.

Appeler la TOOL BOX
-------------------

	Le premier octet du fichier BINaire constitue le point d'entre de
toutes les routines, si j'ai charg ce fichier  l'adresse ADR,
j'appellerai les routines avec:
	C:ADR() pour le Basic GFA (selon que j'utilise le TT ou le STE, il
	faut parfois changer cette ligne en CALL ADR)
	jsr ADR pour l'assembleur

	Mais auparavant, il aura fallu remplir un petit tableau de donnes
situ en ADR+2 et contenant:
	ADR+2: (un mot) ID, numro de fonction
	ADR+4: (un mot) DMA, numro de priphrique, 3 en gnral
	ADR+6: (mot long) TAILLE, taille des donnes  transfrer
	ADR+10: (mot long) PC_ADR, adresse ct PC
	ADR+14: (mot long) TOS_ADR, adresse ct Atari

	Aprs l'appel de la fonction on obtient:
	ADR+18: (mot long) CODE, valeur retourne
	ADR+22: (octet) OCTET, lors d'changes d'octets

	Chaque fonction n'utilisera qu'une partie des paramtres. En GFA
on utilisera POKE, DPOKE ou LPOKE pour y inscrire les valeurs, en
assembleur MOVE fera l'affaire.

PRINCIPE GENERAL
----------------
	Une fois la Tool_box charge, il faut installer les routines sur
le Trap #4: Fonction INSTALLE, ID=-1.
	Ensuite, on doit booter Supercharger afin de pouvoir commencer le
dialogue en mode 'Esclave': Fonction BOOT, ID=3.

	A ce stade, on peut utiliser Superchager comme un priphrique
d'entre sortie:
	Fonction ECRIRE_DONNEES, ID=6 (remplir TAILLE, PC_ADR et TOS_ADR)
	Fonction LIRE_DONNEES, ID=7 (remplir TAILLE, PC_ADR, TOS_ADR)
	Ce sont ces fonctions qui permettent, par exemple, d'envoyer un
programme ct PC. Si un programme y a t charg, alors on peut
l'excuter:
	Fonction EXEC_PROG, ID=8 (remplir PC_ADR).

	On est alors en mode coopratif, dans ce mode on dispose de 4
fonctions pour changer des informations:
	Fonction ENVOIE_OCTET, ID=9 (remplir TAILLE=octet, cas particulier
	d'utilisation de TAILLE...)
	Fonction RECOIT_OCTET, ID=10, lire le rsultat dans OCTET
	Fonction ENVOIE_DONNEES, ID=4 (remplir TAILLE et TOS_ADR)
	Fonction RECOIT_DONNEES, ID=5 (remplir TAILLE et PC_ADR).
	Pour ces fonctions, c'est le programme PC qui dcide de l'adresse 
laquelle il recevra les informations. La valeur TAILLE, bien qu'indique
sur un mot long est en fait limite  64Ko. Ceci est du  la
segmentation de la mmoire d'un PC.

ET COTE PC?
-----------
	Le boot de la TOOL_BOX installe des routines sur l'interruption
$60 (l'quivalent d'un TRAP). Ces routines sont  la disposition du
programme PC en mode 'Coopratif' pour rpondre aux fonctions
correspondantes ct Atari.
	* Rpondre  ENVOIE_OCTET:
	mov ah,9
	int 060
	on obtient dans al l'octet envoy par le 68000.

	* Rpondre  RECOIT_OCTET:
	mov al,valeur_a_envoyer
	mov ah,10
	int 060
	le 68000 recevra l'octet mis dans al

	* Rpondre  ENVOIE_DONNEES:
	mov cx,nombre_octets
	mov ah,4
	int 060
	recevra le bloc  partir de l'adresse es:di (qu'il faut donc
	initialiser AVANT le transfert)

	* Rpondre  RECOIT_DONNEES:
	mov cx,nombre_octets
	mov ah,5
	int 060
	enverra vers le 68000 le bloc situ en ds:si (qu'il faudra
	initialiser AVANT le transfert)

	A ceci s'ajoutent deux fonctions qu'il faut prvoir dans votre
programme PC si vous voulez que l'Atari reprenne le contrle:

	* TERMINER
	mov ah,0
	int 060
	Revient au mode 'Esclave' (rien n'est effac, l'Atari peut
	relancer le programme avec EXEC_PROG, ou en lancer un autre).

	* RESET
	mov ah,1
	int 060
	Plus de communication avec Supercharger, il faudra un nouveau
	BOOT. Cette fonction est utilise juste avant de dsinstaller la
	TOOL_BOX en fin de programme.

CREER SON PROGRAMME PC
----------------------
	Il va vous falloir un assembleur PC (h oui!). Vous pourrez bien
sr le faire tourner sous mulateur puisque vous en avez un! Je vous
recommande A86/D86 un assembleur dbugger de bonne qualit, shareware, et
qui a la particularit de ne pas suivre le casse-tte des initialisations
de Microsoft Assembleur. De plus, il connait toutes les nouvelles
instructions du NEC_V30, car Supercharger n'est pas quip d'un banal
Intel 8086.
	Si par hasard, quelqu'un trouvait un assembleur 8086 tournant sous
TOS, qu'il me le fasse parvenir, ce serait une solution plus pratique et
plus rapide.
	Il faudra utiliser ORG 0 pour signaler que le programme n'aura pas
d'en-tte (c'est la BASEPAGE, il en a une lorsqu'il est lanc sous DOS),
et sachez que seuls les regsitres CS et IP sont initialiss au lancement
de votre programme. Tous les autres sont votre affaire (la pile, les
donnes, etc...).
	Afin d'tre cohrent avec ORG 0, il faudra transmettre  EXEC_PROG
une adresse ou IP est nul, par exemple $03000000 (dans cette adresse,
CS=$0300 et IP=$0000). En supposant que votre assembleur ne supporte pas
ORG 0, laisser le faire un fichier COM, avec ORG=0100 et utilisez
alors comme adresse une valeur ou IP=0100. Par exemple, $02F00100 qui est
gal  $03000000 mais avec IP=0100.
	Les zones libres sont:
	- avec 1Mo de RAM:
	$0300:0000  $F000:FFFF
	soit 1012Ko libres.

	- avec 512Ko de RAM:
	$0300:0000  $6000:7FFF
	$B000:8000  $B000:FFFF
	soit 436Ko libres.

L'EXEMPLE
---------
	Le programme PC que j'ai cr a pour but de passer en majuscules
toutes les lettres contenues dans un fichier texte. La taille sera limite
 32000 octets pour simplifier. Une fois lanc il attend une valeur de mot
qu'on transmet en deux octets:
	- si le MOT=0, revenir au mode 'Esclave'
	- si le MOT=1, RESET
	- si le MOT>1, c'est la taille du fichier Texte, le fichier est
	alors charg, converti puis renvoy. Le programme continue ainsi
	en boucle en attendant deux autres octets.
	Pendant que le NEC V30 travaille sur le texte, ct Atari on en
profite pour ouvrir le slecteur de fichier pour le nom de la sauvegarde.
Ainsi, pas une seconde n'est perdue.

	Les nombreux commentaires des listings devraient suffire  boucher
toutes les zones d'ombres laisses par ces explications un peu rapides.
(listing Assembleur 68000: SUPERCHG.S, listing GFA: SUPERCHG.LST, listing
du programme PC: PC_PROG.S).
	Le programme SUPERCHG.PRG correspond  la version assembleur, mais
il ragit au dtail prs comme celui du listing GFA et est bien plus
compact. On doit absolument trouver TOOL_BOX.BIN et PC_PROG.BIN dans le
mme rpertoire (ainsi qu'un Supercharger allum sur le port DMA, mais
vous l'aviez compris...).

LES PETITES ANNONCES
--------------------
	Je cherche, pour le Supercharger, un coprocesseur 8087, 40 broches
 8MHz. Je cherche galement un lecteur de disquettes 5"1/4 pour Commodore
(VIC20 ou 64 ou 128). Merci!

CONCLUSION
----------
	J'espre vous avoir donn envie de ressortir votre priphrique.
Au prix qu'il a cot, a fend le coeur de le laisser dormir. Faites-moi
part de vos ralisations, envoyez-moi vos listings: se prparer  la
programmation parallle n'est certainement pas inutile!

	Guillaume Tello
	240 rue Estienvrin, 49260 Montreuil Bellay
	gtello@wanadoo.fr



