<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=Pl2_CORRIG_2.DOC</id>
	<title>Pl2 CORRIG 2.DOC - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=Pl2_CORRIG_2.DOC"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;action=history"/>
	<updated>2026-05-13T20:06:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;diff=16107&amp;oldid=prev</id>
		<title>&gt;Wongck at 15:19, 12 October 2011</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;diff=16107&amp;oldid=prev"/>
		<updated>2011-10-12T15:19:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:19, 12 October 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l766&quot;&gt;Line 766:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 766:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[ASM_Tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[ASM_Tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Programming&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ASSEMBLEUR 68000 sur ATARI ST Part 2&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Wongck</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;diff=16106&amp;oldid=prev</id>
		<title>&gt;Silver Surfer: Added category</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;diff=16106&amp;oldid=prev"/>
		<updated>2009-05-02T20:43:36Z</updated>

		<summary type="html">&lt;p&gt;Added category&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:43, 2 May 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l766&quot;&gt;Line 766:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 766:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[ASM_Tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[ASM_Tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Programming]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Silver Surfer</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;diff=16105&amp;oldid=prev</id>
		<title>&gt;Zorro 2 at 15:05, 9 October 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Pl2_CORRIG_2.DOC&amp;diff=16105&amp;oldid=prev"/>
		<updated>2006-10-09T15:05:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                           ----------------------&lt;br /&gt;
                           CORRIGES DES EXERCICES&lt;br /&gt;
&lt;br /&gt;
                                    NRÂ°2                                 &lt;br /&gt;
&lt;br /&gt;
                           ----------------------   &lt;br /&gt;
     &lt;br /&gt;
1) Exercice nrÂ°1&lt;br /&gt;
   -------------&lt;br /&gt;
&lt;br /&gt;
 VoilÃ  les listings des 2 macros instructions 'SAUVE' et 'RESTORE' qui&lt;br /&gt;
 permettent respectivement de sauvegarder et restaurer les registres du&lt;br /&gt;
 68000.&lt;br /&gt;
 &lt;br /&gt;
 Je passe sur les dâ€štails, il suffisait d'utiliser l'instruction MOVEM.&lt;br /&gt;
 Les registres seront sauvâ€šs dans la pile systÃ¨me par mode prâ€šdâ€šcrâ€šmen-&lt;br /&gt;
 tâ€š et restaurâ€šs par mode postincrâ€šmentâ€š.C'est tout ...&lt;br /&gt;
&lt;br /&gt;
          TEXT&lt;br /&gt;
&lt;br /&gt;
SAUVE     MACRO&lt;br /&gt;
          movem.l   d0-d7/a0-a6,-(sp)&lt;br /&gt;
          ENDM&lt;br /&gt;
&lt;br /&gt;
RESTORE   MACRO&lt;br /&gt;
          movem.l   (sp)+,d0-d7/a0-a6&lt;br /&gt;
          ENDM&lt;br /&gt;
&lt;br /&gt;
          END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Exercice nrÂ°2&lt;br /&gt;
   -------------  &lt;br /&gt;
VoilÃ  le listing de la macro HEXA, qui permet d'afficher en hexadâ€šcimal &lt;br /&gt;
le contenu de son paramÃ¨tre.&lt;br /&gt;
&lt;br /&gt;
         Il faut d'abord atteindre sucessivement les 8 demi-octets qui &lt;br /&gt;
composent le L-M passâ€š en paramÃ¨tre (1 chiffre hexa=4 bits)&lt;br /&gt;
Pour cela on utilise l'instruction de rotation ROL et on la place dans&lt;br /&gt;
une boucle. (LSR convenait aussi...)&lt;br /&gt;
On masquera ensuite les 4 bits de plus faible poids avec AND.L #%1111,dn&lt;br /&gt;
pour ne garder que le demi-octet Ã  traiter.&lt;br /&gt;
Le plus difficile vient ensuite:&lt;br /&gt;
Il faut maintenant afficher la valeur de ce chiffre hexa codâ€š par 4 bits&lt;br /&gt;
Ã  l'â€šcran.&lt;br /&gt;
Si le chiffre est &amp;lt;$A (donc &amp;lt;10) ce chiffre sera compris entre 0 et 9. &lt;br /&gt;
En additionnant $30 Ã  la valeur de ce chiffre on obtiendra le code ascii &lt;br /&gt;
du chiffre. (Car le code ascii de '0' est $30:celui de '1' est donc â€šgal&lt;br /&gt;
Ã  $30+1=$31  etc...)&lt;br /&gt;
Si le chiffre hexa Ã  afficher est &amp;gt;9 ce chiffre sera une lettre de l'alph-&lt;br /&gt;
abet (de A Ã  F).&lt;br /&gt;
En ajoutant $37+$A Ã  la valeur de ce chiffre on obtiendra le code ascii&lt;br /&gt;
du chiffre Ã  afficher.(Car le code ascii de 'A' est $37+$A :celui de 'B'  &lt;br /&gt;
est donc â€šgal Ã  $37+$B=$42  etc...)&lt;br /&gt;
Il suffit ensuite d'afficher avec CCONOUT le code ascii ainsi obtenu et&lt;br /&gt;
de recommencer l'opâ€šration avec tous les demi-octets du paramÃ¨tre.&lt;br /&gt;
&lt;br /&gt;
NB:On utilise les macros SAUVE et RESTORE dans notre macro HEXA pour &lt;br /&gt;
-- pouvoir utiliser tous les registres sans modifier leur contenu Ã &lt;br /&gt;
   la fin de la macro.&lt;br /&gt;
&lt;br /&gt;
   Vous remarquerez que j'utilise des LABELS dans la macro HEXA.&lt;br /&gt;
   La macro ne pourra donc qu'Ã¨tre utilisâ€še 1 fois dans un listing car&lt;br /&gt;
   l'assembleur ne peut pas distinguer deux labels identiques et Ã  &lt;br /&gt;
   chaque appel d'une macro, celle-ci est reâ€šcrite entiÃ¨rement...&lt;br /&gt;
   Vous pouvez cependant mettre la macro dans un sous-programme pour&lt;br /&gt;
   pouvoir l'appeller plusieurs fois...&lt;br /&gt;
&lt;br /&gt;
          TEXT&lt;br /&gt;
&lt;br /&gt;
HEXA      MACRO     $\1              ;macro Ã  1 paramÃ¨tre&lt;br /&gt;
          SAUVE                      ;on sauve les registres pour ne pas&lt;br /&gt;
                                     ;perdre leur contenu&lt;br /&gt;
          move.l    \1,d1            ;on pose le paramÃ¨tre dans d1&lt;br /&gt;
          moveq     #0,d2            ;initialise le nombre de glissement&lt;br /&gt;
DECAL     addi.b    #4,d2            ;on ajoute 4 au nb de glissements&lt;br /&gt;
          cmpi.b    #36,d2           ;si d2=36=32+4=on a finit les 32&lt;br /&gt;
          beq       FIN              ;rotations,dans ce cas -&amp;gt; FIN&lt;br /&gt;
          move.l    d1,d3            ;sinon on pose d1 dans d3 et on&lt;br /&gt;
          rol.l     d2,d3            ;fait une rotation de 4 bits&lt;br /&gt;
          andi.l    #%1111,d3        ;et on masque ces 4 bits car seuls&lt;br /&gt;
                                     ;eux doivent Ã¨tres traitâ€šs.&lt;br /&gt;
&lt;br /&gt;
; d3 contient donc la valeur Ã  afficher: 0 Ã  9 ou A Ã  F. (car un chiffre&lt;br /&gt;
;hexa est codâ€š par 4 bits (voir introduction) )&lt;br /&gt;
&lt;br /&gt;
          cmpi.b    #9,d3&lt;br /&gt;
          bgt       HEX              ;si d3 &amp;gt;9, on va en HEX car il faudra&lt;br /&gt;
                                     ;afficher une lettre et nom plus un&lt;br /&gt;
                                     ;chiffre...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DECIMAL   addi.b    #$30,d3 ;d3=d3+$30 car la valeur ASCII de 0 est $30&lt;br /&gt;
                            ;Donc si par exp. d3 vaut 1, on le reprâ€šsente&lt;br /&gt;
                            ;par le caractÃ¨re ascii $30+1=$31='1', si il&lt;br /&gt;
                            ;vaut 5, par le code ascii $30+5=$35='5',ainsi&lt;br /&gt;
                            ;de suite pour tous les chiffres hexa &amp;lt;9&lt;br /&gt;
          CCONOUT   d3      ;â€šdition du contenu de d3&lt;br /&gt;
&lt;br /&gt;
          jmp       DECAL   ;on redâ€šcale le paramÃ¨tre et on continue&lt;br /&gt;
                            ;avec les 4 bits suivants en DECAL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HEX       addi.b    #$37,d3  ;d3=d3+$37 pour les nombres hexa reprâ€šsentâ€šs&lt;br /&gt;
                             ;par les lettres car la valeur ASCII de A est&lt;br /&gt;
                             ;$37+$A.Donc si par exp. d3 vaut $B,on le re-&lt;br /&gt;
                             ;prâ€šsente par le code ascii $37+$B=$42='B'...&lt;br /&gt;
          CCONOUT   d3       ;on affiche la lettre (de A Ã  F)&lt;br /&gt;
&lt;br /&gt;
          jmp       DECAL    ;on  redâ€šcale le paramÃ¨tre et on continue&lt;br /&gt;
                             ;avec les 4 bits suivants en DECAL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FIN       RESTORE            ;quand on a fini l'oppâ€šration avec tous les&lt;br /&gt;
                             ;32 bits, on restore les registres empilâ€šs&lt;br /&gt;
          ENDM&lt;br /&gt;
&lt;br /&gt;
          END&lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Exercice nrÂ°3&lt;br /&gt;
   -------------&lt;br /&gt;
VoilÃ  la correction de la macro 'BINAIRE'.&lt;br /&gt;
&lt;br /&gt;
Pour atteindre les 32 bits du paramÃ¨tre et pour les afficher Ã  l'â€šcran,&lt;br /&gt;
on utilise l'instruction LSL.L #1,paramÃ¨tre dans une boucle et suivant&lt;br /&gt;
la valeur du bit sorti, on affiche un '1' (bit actif) ou un '0' ( bit&lt;br /&gt;
etteind).&lt;br /&gt;
L'instruction de branchement conditionnel correspondant peut par exemple&lt;br /&gt;
Ã¨tre bCC (Qui teste si le bit C du CCR est nul:   LSL copie le bit sorti&lt;br /&gt;
dans le bit C du CCR)&lt;br /&gt;
Pour afficher le '1' ou le '0', on utilise la macro CCONOUT #'1' ou&lt;br /&gt;
CCONOUT #'0'.&lt;br /&gt;
&lt;br /&gt;
NB:MÃ¨mes remarques que pour la macro HEXA en ce qui conscerne l'utilisa-&lt;br /&gt;
-- tion de labels dans la macro 'BINAIRE'.&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
          TEXT     &lt;br /&gt;
&lt;br /&gt;
BINAIRE   MACRO     $\1      ;MACRO Ã  1 paramÃ¨tre&lt;br /&gt;
          SAUVE              ;sauvegarde des registres&lt;br /&gt;
          move.L    \1,d1    ;le paramÃ¨tre dans d1&lt;br /&gt;
          move      #31,d3   ;compteur de boucle pour les dâ€šcalages&lt;br /&gt;
&lt;br /&gt;
LOOK      move      #'0',d0  ;d0 contient le code ascii de 0&lt;br /&gt;
          lsl.l     #1,d1    ;dâ€šcalage d'un bit de d1:Copie du bit dans&lt;br /&gt;
                             ;le code C du CCR&lt;br /&gt;
          bcc       ZERO     ;si le bit est nul (C=0):va en 'zero'&lt;br /&gt;
          move      #'1',d0  ;sinon d0 contient le code ascii de '1'&lt;br /&gt;
ZERO      CCONOUT   d0       ;on affiche le contenu de d0 (0 ou 1)&lt;br /&gt;
          dbf       d3,LOOK  ;on recommence avec les 31 autres bits&lt;br /&gt;
          RESTORE            ;on restore les registres&lt;br /&gt;
          ENDM               ;fini...&lt;br /&gt;
&lt;br /&gt;
          END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Exercice nrÂ°4:&lt;br /&gt;
   --------------&lt;br /&gt;
&lt;br /&gt;
 VoilÃ  le listing du programme qui permet de formater une disquette.&lt;br /&gt;
 &lt;br /&gt;
  Il suffisait d'utiliser correctement la fonction FLOPFMT du Gemdos&lt;br /&gt;
 et de la mettre dans une boucle pour pouvoir faire varier le nrÂ° de&lt;br /&gt;
 la piste Ã  formater.&lt;br /&gt;
&lt;br /&gt;
 Pour demander une confirmation d'â€šxecution Ã  l'utilisateur du programme,&lt;br /&gt;
 on affiche un message d'alerte avec PRINTLINE, on attend qu'il enfonce&lt;br /&gt;
 une touche du clavier (avec 'WAIT') et on teste le code ascii de la&lt;br /&gt;
 touche selectionnâ€še. (valeur qui retourne dans d0)&lt;br /&gt;
 Si cette touche est 'F' on formate la disquette, sinon on quitte le prg&lt;br /&gt;
 avec la macro TERM (fonction TERM du Gemdos).&lt;br /&gt;
&lt;br /&gt;
 Si une erreur se produit durant le formatage (d0 nâ€šgatif aprÃ¨s FLOPFMT),&lt;br /&gt;
 on affiche le code d'erreur en DECIMAL.&lt;br /&gt;
 Il faudra d'abord rendre le chiffre Ã  traiter positif avec NEG  dn.&lt;br /&gt;
 Le chiffre Ã  traiter (le code d'erreur) sera donc un nombre positif &lt;br /&gt;
 et infâ€šrieur Ã  100 (cf. les codes d'erreur du Gemdos).&lt;br /&gt;
 On effectue une division par 10 de ce chiffre pour obtenir le chiffre&lt;br /&gt;
 des dixaines (avec DIVU #10,dn) du code d'erreur.&lt;br /&gt;
 Le quotient retourne dans le mot de poids faible de dn: c'est le chiffre&lt;br /&gt;
 des dixaine, on l'affiche en lui ajoutant $30 pour obtenir un code ascii&lt;br /&gt;
 (avec CCONOUT).&lt;br /&gt;
 Le reste est dans le mot de poids fort de dn:Il reprâ€šsente le chiffre&lt;br /&gt;
 des unitâ€šs du code d'erreur.On SWAP dn et on l'affiche lui aussi.&lt;br /&gt;
     &lt;br /&gt;
 Quand le formatage sera terminâ€š, on affichera un message signalant que&lt;br /&gt;
 tout est OK.&lt;br /&gt;
  &lt;br /&gt;
 Remarque:&lt;br /&gt;
 ---------&lt;br /&gt;
     ATTENTION, notre programme va bien formater la disquette, mais si&lt;br /&gt;
     vous regardez les informations conscernant la disquette en utili-&lt;br /&gt;
     sant l'option 'INFORMATIONS' du bureau GEM ,on vous indiquera qu'il&lt;br /&gt;
     reste 0 Octets de libre alors qu'il y en a aussi 0 d'utilisâ€šs...      &lt;br /&gt;
     Ceci s'explique par le fait que nous n'avons pas initialisâ€š le &lt;br /&gt;
     BOOT SECTOR de la disquette:On ne pourra donc rien y â€šcrire car&lt;br /&gt;
     il contient toutes les informations nâ€šcessaires aux opâ€šrations de&lt;br /&gt;
     disk...&lt;br /&gt;
&lt;br /&gt;
 NB:Ceux qui ne possÃ¨dent pas PROFIMAT et qui veulent (doivent!) mettre&lt;br /&gt;
 -- le tampon pour FLOPFMT Ã  une adresse PAIRE ne doivent pas â€šcrire la&lt;br /&gt;
    DIRECTIVE :'ALIGN.W' en zone BSS.&lt;br /&gt;
    Pour METACOMCO, il existe une DIRECTIVE â€šquivalente:CNOP 0,2&lt;br /&gt;
    Pour DEVPAC ST: c'est la directive EVEN.&lt;br /&gt;
    Les autres assemblerons le listing et si il ne marche pas, c'est que&lt;br /&gt;
    le tampon pour FLOPFMT n'est pas Ã  une adresse paire.&lt;br /&gt;
    Il suffira alors de râ€šserver 1 OCTET juste devant le tampon:celui-ci&lt;br /&gt;
    passera donc d'une adresse impaire Ã  une adresse paire (impaire+1).&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          TEXT&lt;br /&gt;
&lt;br /&gt;
          INCLUDE   &amp;quot;INIT_TOS.L&amp;quot;&lt;br /&gt;
          INCLUDE   &amp;quot;MACROS.L&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          SETBLOCK&lt;br /&gt;
&lt;br /&gt;
          PRINTLINE ATTENTION   ;le message d'alerte   &lt;br /&gt;
&lt;br /&gt;
          WAIT                  ;attente d'une touche:code ascii dans d0&lt;br /&gt;
          CMPI.B    #'F',d0     ;d0='F' ?&lt;br /&gt;
          BEQ       FORMAT      ;alors FORMAT&lt;br /&gt;
          CMPI.B    #'f',d0     ;d0='f' ?&lt;br /&gt;
          BEQ       FORMAT      ;alors FORMAT&lt;br /&gt;
          TERM                  ;sinon quitter&lt;br /&gt;
&lt;br /&gt;
FORMAT    SUPER                 ;mode SUPERVISEUR &lt;br /&gt;
                                &lt;br /&gt;
          clr.l     d0&lt;br /&gt;
&lt;br /&gt;
BOUCLE    movem.l   d0,-(sp)          ;on sauvegarde juste d0&lt;br /&gt;
          move.w    #$e5e5,-(sp)      ;virgin&lt;br /&gt;
          move.l    #$87654321,-(sp)  ;mot magic&lt;br /&gt;
          move.w    #1,-(sp)          ;interleave&lt;br /&gt;
          move.w    #0,-(sp)          ;face&lt;br /&gt;
          move.w    d0,-(sp)          ;d0=les diffâ€šrentes pistes&lt;br /&gt;
          move.w    #9,-(sp)          ;nb de secteurs par piste&lt;br /&gt;
          move.w    #0,-(sp)          ;drive A&lt;br /&gt;
          clr.l     -(sp)             ;l-m=0&lt;br /&gt;
          pea       TAMPON            ;adresse du tampon&lt;br /&gt;
          move.w    #$a,-(sp)         ;Flopfmt&lt;br /&gt;
          trap      #14&lt;br /&gt;
          add.l     #26,sp            ;mise Ã  jour de SP  &lt;br /&gt;
          tst       d0&lt;br /&gt;
          bmi       ERROR             ;Si d0 est nâ€šgatif: erreur&lt;br /&gt;
          movem.l   (sp)+,d0          ;on restore d0&lt;br /&gt;
          addi.b    #1,d0             ;on incrâ€šmente le nrÂ° de piste&lt;br /&gt;
          cmpi.b    #80,d0            ;a-t-on les 80 pistes ?&lt;br /&gt;
          bne       BOUCLE&lt;br /&gt;
&lt;br /&gt;
          PRINTLINE OK                ;pas de probleme, OK&lt;br /&gt;
GO        WAIT                        ;attente d'une touche&lt;br /&gt;
          USER                        ;on revient en mode USER&lt;br /&gt;
          TERM                        ;-&amp;gt; retour&lt;br /&gt;
&lt;br /&gt;
ERROR     move      d0,d5        ;on sauve d0 dans d5 car d0 sera modifiâ€š&lt;br /&gt;
          PRINTLINE PROBLEME&lt;br /&gt;
          neg       d5           ;d5 devient positif&lt;br /&gt;
&lt;br /&gt;
;         affichage DECIMAL de d5&lt;br /&gt;
&lt;br /&gt;
          divu      #10,d5       ;chiffre des dixaines dans d5.w faible&lt;br /&gt;
          add       #$30,d5      ;chiffre=code ascii&lt;br /&gt;
          CCONOUT   d5           ;on l'affiche&lt;br /&gt;
          swap      d5           ;d5.w faible=reste de la division=chiffre&lt;br /&gt;
                                 ;des unitâ€šs de d5&lt;br /&gt;
          add       #$30,d5      ;chiffre=code ascii&lt;br /&gt;
          CCONOUT   d5           ;on l'affiche&lt;br /&gt;
          jmp       GO           ;--&amp;gt; fin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          DATA&lt;br /&gt;
&lt;br /&gt;
ATTENTION DC.B      27,'E','DANGER ! Ce programme FORMATE la disquette,'&lt;br /&gt;
          DC.B      ' inserez une disquette VIERGE puis',10,13,'pressez'&lt;br /&gt;
          DC.B      ' [F] pour FORMATER la disquette ...'&lt;br /&gt;
          DC.B      ' (Ou une autre touche pour QUITTER!)',7,0&lt;br /&gt;
&lt;br /&gt;
OK        DC.B      27,'E','Pas d',39,'erreur : OK...',0&lt;br /&gt;
&lt;br /&gt;
PROBLEME  DC.B      27,'E',7,'ERREUR de code :-',0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          BSS&lt;br /&gt;
&lt;br /&gt;
          DS.B      20000    ;tampon en ammont de la nouvelle PILE&lt;br /&gt;
PILE      DS.B      1        ;le formatage nâ€šcessite beaucoup de place...&lt;br /&gt;
          ALIGN.W            ;SPECIFIQUE Ã  PROFIMAT !!!!!&lt;br /&gt;
TAMPON    DS.B      10000    ;tampon pour le formatage (adresse PAIRE)&lt;br /&gt;
SAUV_SP   DS.L      1        ;tampon pour SUPER et USER&lt;br /&gt;
&lt;br /&gt;
          END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Exercice nrÂ°5&lt;br /&gt;
   -------------&lt;br /&gt;
&lt;br /&gt;
 VoilÃ  le programme qui rejoue les sons crâ€šes avec PRO SOUND DESIGNER.&lt;br /&gt;
&lt;br /&gt;
 Le programme va attendre qu'on enfonce une touche du clavier puis il&lt;br /&gt;
 la teste (Macro 'WAIT' du gemdos, retour du code et du scancode dans&lt;br /&gt;
 d0).&lt;br /&gt;
 Les touches de Fonction n'ont pas de code ascii mais possÃ¨dent toutes&lt;br /&gt;
 un SCANCODE qui les diffâ€šrencies.&lt;br /&gt;
 Si l'octet de poids faible de d0 contient un code ascii (d0.w diffâ€šrent&lt;br /&gt;
 de 0), on quitte le prg car cela voudrait dire qu'on a enfoncâ€š une autre&lt;br /&gt;
 touche qu'une des 10 touches de fonction.&lt;br /&gt;
&lt;br /&gt;
 Vous avez ensuite dâ€” chercher les diffâ€šrents scancodes des touches de&lt;br /&gt;
 fonction pour pouvoir les utiliser ici.&lt;br /&gt;
 Pour cela, il suffisait d'â€šcrire le programme suivant,&lt;br /&gt;
 &lt;br /&gt;
     TEXT &lt;br /&gt;
&lt;br /&gt;
     INCLUDE  &amp;quot;MACROS.L&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
AA   WAIT                ;attente d'une touche&lt;br /&gt;
     SWAP   d0           ;d0.b de poids faible = scancode&lt;br /&gt;
     and.l  #$FF,d0      ;on ne garde que l'octet de poids faible de&lt;br /&gt;
                         ;ce mot (soit le SCANCODE)           &lt;br /&gt;
     HEXA   d0           ;affichage en HEXA du scancode&lt;br /&gt;
     WAIT                ;attente d'une touche&lt;br /&gt;
     CCONOUT   #27&lt;br /&gt;
     CCONOUT   #'E'      ;on efface l'â€šcran&lt;br /&gt;
     jmp       AA        ;et on recommence&lt;br /&gt;
&lt;br /&gt;
     END&lt;br /&gt;
&lt;br /&gt;
  puis de l'assembler ,de l'â€šxecuter et d'appuyer sur les touches de &lt;br /&gt;
  fonction pour noter leurs SCANCODES.&lt;br /&gt;
&lt;br /&gt;
  Le reste du programme doit identifier les diffâ€šrents scancodes des&lt;br /&gt;
  touches de fonction et jouer un son.&lt;br /&gt;
  Pour tester les valeurs du scancode de la touche enfoncâ€še, on compare&lt;br /&gt;
  la valeur du scancode rentrâ€š aux valeurs des 10 scancodes des touches&lt;br /&gt;
  de fonction que nous avons placâ€š en zone DATA.&lt;br /&gt;
  En mÃ¨me temps, on fait varier la valeur d'un registre d'adresse 'an'&lt;br /&gt;
  qui pointe sur les diffâ€šrentes adresses des sons.&lt;br /&gt;
  Si un scancode est identifiâ€š, on joue le son pointâ€š par 'an' en le&lt;br /&gt;
  fournissant comme paramÃ¨tre Ã  la macro 'DOSOUND', sinon on incrâ€šmente&lt;br /&gt;
  les registres d'adresse (mode (an)+) pointant sur les DATAs qui reprâ€š-&lt;br /&gt;
  sentent les scancodes et les adresses des sons.&lt;br /&gt;
  Si finalement aucun scancode n'est reconnu, on recommence le test des&lt;br /&gt;
  touches du clavier au dâ€šbut du programme.&lt;br /&gt;
    &lt;br /&gt;
      Les donnâ€šes dâ€šfinissant les sons se trouvent dans le fichier &lt;br /&gt;
 PROSOUND.DAT, il suffit de l'inclure en zone DATA dans le listing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 NB:Je modifie la valeur d'une VARIABLE SYSTEME dans ce listing (avec&lt;br /&gt;
 -- move.b  #0,$484) ceci dans le but d'arrÃ¨ter le 'BIP' qui se fait&lt;br /&gt;
    entendre quand on appuye sur une touche afin de ne pas perturber&lt;br /&gt;
    le son rejouâ€š.&lt;br /&gt;
    Je parlerais bientot des VARIABLES SYSTEME...&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
               TEXT&lt;br /&gt;
&lt;br /&gt;
               INCLUDE       &amp;quot;INIT_TOS.L&amp;quot;&lt;br /&gt;
               INCLUDE       &amp;quot;MACROS.L&amp;quot;&lt;br /&gt;
&lt;br /&gt;
               SETBLOCK&lt;br /&gt;
&lt;br /&gt;
               SUPER                           ;mode SUPERVISEUR&lt;br /&gt;
&lt;br /&gt;
               PRINTLINE     message           ;texte&lt;br /&gt;
               move.b        #0,$484           ;variable systÃ¨me (mettre&lt;br /&gt;
                                               ;0 enlÃ¨ve râ€špâ€štition et&lt;br /&gt;
                                               ;bip des touches)&lt;br /&gt;
&lt;br /&gt;
TEZT           WAIT                            ;attente d'une touche&lt;br /&gt;
                                               ;:CODE dans d0&lt;br /&gt;
               tst.b         d0                ;si code ascii diffâ€šrent de&lt;br /&gt;
               bne           STP               ;0, alors SToP, sinon&lt;br /&gt;
               swap          d0                ;d0.w de poids faible&lt;br /&gt;
                                               ;devient le SCANCODE&lt;br /&gt;
&lt;br /&gt;
               lea           FONCT,a0          ;a0=adresse des SCANCODES&lt;br /&gt;
               lea           VECTEUR,a1        ;a1=adresse des adresses&lt;br /&gt;
                                               ;des sons de VECTEUR&lt;br /&gt;
&lt;br /&gt;
LISONS         cmp.b         (a0)+,d0          ;compare SCANCODE de la&lt;br /&gt;
                                               ;touche enfoncâ€še (d0) Ã &lt;br /&gt;
                                               ;ceux de la table DC.B .&lt;br /&gt;
               move.l        (a1)+,a5          ;Pose l'adresse pointâ€še par&lt;br /&gt;
                                               ;a1 dans a5&lt;br /&gt;
               beq           SON               ;si CMP=oui, va jouer le &lt;br /&gt;
                                               ;son pointâ€š par a5&lt;br /&gt;
               addq.b        #1,d1             ;sinon ajoute 1 Ã  d1&lt;br /&gt;
               cmpi.b        #9,d1             ;d1=9 ?&lt;br /&gt;
               beq           TEZT              ;alors plus de scancodes&lt;br /&gt;
                                               ;et on revient en 'TEZT'&lt;br /&gt;
               jmp           LISONS            ;sinon on incrâ€šmente a0&lt;br /&gt;
                                               ;et a1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SON            DOSOUND       a5                ;Dosound le son pointâ€š par&lt;br /&gt;
                                               ;a5&lt;br /&gt;
               jmp           TEZT              ;puis on revient en 'TEZT'&lt;br /&gt;
&lt;br /&gt;
STP            USER                            ;mode UTILISATEUR&lt;br /&gt;
               TERM                            ;on quitte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               DATA&lt;br /&gt;
&lt;br /&gt;
MESSAGE        DC.B       27,'E','VoilÃ  des sons de PRO SOUND DESIGNER'&lt;br /&gt;
               DC.B       ', tapez sur les touches de Fonction :',13,10&lt;br /&gt;
               DC.B       '(Ou une autre touche pour sortir )',7,0&lt;br /&gt;
&lt;br /&gt;
VECTEUR        DC.L          sound0,sound1,sound2,sound3,sound4,sound5&lt;br /&gt;
               DC.L          sound6,sound7,sound8,sound9&lt;br /&gt;
               ;les adresses des 10 sons.&lt;br /&gt;
&lt;br /&gt;
FONCT          DC.B          $3B,$3C,$3D,$3E,$3F,$40,$41,$42,$43,$44&lt;br /&gt;
               ;les scancodes des touches de fonction (F1-&amp;gt;F10)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Donnâ€šes dâ€šfinissant les sons de PRO SOUND DESIGNER&lt;br /&gt;
&lt;br /&gt;
sound0    DC.B  0,214&lt;br /&gt;
          DC.B  1,0&lt;br /&gt;
          DC.B  2,215&lt;br /&gt;
          DC.B  3,0&lt;br /&gt;
          DC.B  4,215&lt;br /&gt;
          DC.B  5,0&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound1    DC.B  0,24&lt;br /&gt;
          DC.B  1,1&lt;br /&gt;
          DC.B  2,25&lt;br /&gt;
          DC.B  3,1&lt;br /&gt;
          DC.B  4,23&lt;br /&gt;
          DC.B  5,1&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound2    DC.B  0,156&lt;br /&gt;
          DC.B  1,1&lt;br /&gt;
          DC.B  2,156&lt;br /&gt;
          DC.B  3,1&lt;br /&gt;
          DC.B  4,156&lt;br /&gt;
          DC.B  5,1&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound3    DC.B  0,22&lt;br /&gt;
          DC.B  1,2&lt;br /&gt;
          DC.B  2,21&lt;br /&gt;
          DC.B  3,2&lt;br /&gt;
          DC.B  4,23&lt;br /&gt;
          DC.B  5,2&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound4    DC.B  0,55&lt;br /&gt;
          DC.B  1,3&lt;br /&gt;
          DC.B  2,59&lt;br /&gt;
          DC.B  3,3&lt;br /&gt;
          DC.B  4,57&lt;br /&gt;
          DC.B  5,3&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound5    DC.B  0,235&lt;br /&gt;
          DC.B  1,3&lt;br /&gt;
          DC.B  2,234&lt;br /&gt;
          DC.B  3,3&lt;br /&gt;
          DC.B  4,232&lt;br /&gt;
          DC.B  5,3&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound6    DC.B  0,70&lt;br /&gt;
          DC.B  1,5&lt;br /&gt;
          DC.B  2,72&lt;br /&gt;
          DC.B  3,5&lt;br /&gt;
          DC.B  4,71&lt;br /&gt;
          DC.B  5,5&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound7    DC.B  0,84&lt;br /&gt;
          DC.B  1,7&lt;br /&gt;
          DC.B  2,84&lt;br /&gt;
          DC.B  3,7&lt;br /&gt;
          DC.B  4,84&lt;br /&gt;
          DC.B  5,7&lt;br /&gt;
          DC.B  7,248&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,2&lt;br /&gt;
          DC.B  0,0&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound8    DC.B  0,175&lt;br /&gt;
          DC.B  1,0&lt;br /&gt;
          DC.B  2,193&lt;br /&gt;
          DC.B  3,4&lt;br /&gt;
          DC.B  4,20&lt;br /&gt;
          DC.B  5,6&lt;br /&gt;
          DC.B  7,254&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,0&lt;br /&gt;
          DC.B  93,63&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
sound9    DC.B  0,175&lt;br /&gt;
          DC.B  1,0&lt;br /&gt;
          DC.B  2,193&lt;br /&gt;
          DC.B  3,4&lt;br /&gt;
          DC.B  4,232&lt;br /&gt;
          DC.B  5,4&lt;br /&gt;
          DC.B  7,254&lt;br /&gt;
          DC.B  8,16&lt;br /&gt;
          DC.B  9,16&lt;br /&gt;
          DC.B  10,16&lt;br /&gt;
          DC.B  11,32&lt;br /&gt;
          DC.B  12,73&lt;br /&gt;
          DC.B  13,0&lt;br /&gt;
          DC.B  129,0&lt;br /&gt;
          DC.B  80,88&lt;br /&gt;
          DC.B  255,0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               BSS&lt;br /&gt;
&lt;br /&gt;
               DS.B          40000             ;pour SETBLOCK&lt;br /&gt;
PILE           DS.B          1&lt;br /&gt;
SAUV_SP        DS.L          1                 ;pour SUPER/USER&lt;br /&gt;
&lt;br /&gt;
               END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6) Exercice 6&lt;br /&gt;
   ----------&lt;br /&gt;
&lt;br /&gt;
VoilÃ  le programme qui permet de visualiser le directory d'une disquette.&lt;br /&gt;
&lt;br /&gt;
  Il fallait simplement utiliser la macro 'SEARCH' et la fonction SEARCH-&lt;br /&gt;
NEXT du gemdos qui dâ€šlivrent dans le tampon DTA le nom du fichier et cer-&lt;br /&gt;
tains autres renseignements conscernant le fichier reconnu.&lt;br /&gt;
Il fallait ensuite afficher le nom de chaque fichier reconnu:&lt;br /&gt;
Le nom se trouve en DTA+30, pour l'afficher on utilise la macro PRINTLINE.&lt;br /&gt;
&lt;br /&gt;
 NB:MÃ¨mes remarques que pour le listing nrÂ°4 conscernant l'adresse PAIRE&lt;br /&gt;
 -- du tampon DTA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          TEXT&lt;br /&gt;
&lt;br /&gt;
          INCLUDE   &amp;quot;INIT_TOS.L&amp;quot;&lt;br /&gt;
          INCLUDE   &amp;quot;MACROS.L&amp;quot;&lt;br /&gt;
&lt;br /&gt;
          SETBLOCK&lt;br /&gt;
&lt;br /&gt;
          PRINTLINE DIR            ;message&lt;br /&gt;
&lt;br /&gt;
          SEARCH    DTA,#0,PRG     ;installe DTA,cherche le prg (L/E)&lt;br /&gt;
          tst       d0             ;erreur ?&lt;br /&gt;
          bne       FIN            ;si ? alors FIN&lt;br /&gt;
          PRINTLINE DTANOM         ;en DTANOM se trouve le nom du fichier&lt;br /&gt;
          CCONOUT   #13            ;on saute une ligne&lt;br /&gt;
          CCONOUT   #10            ;on revient colonne 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BOUCLE    move      #$4f,-(SP)       ;SEARCH-NEXT&lt;br /&gt;
          trap      #1&lt;br /&gt;
          addq.l    #2,SP&lt;br /&gt;
          tst       d0               ;encore des prg ?&lt;br /&gt;
          bne       FIN              ;non ?! Alors FIN&lt;br /&gt;
          PRINTLINE DTANOM           ;on affiche le nom du prg&lt;br /&gt;
          CCONOUT   #13              ;on saute une ligne&lt;br /&gt;
          CCONOUT   #10              ;on revient Ã  la colonne 1&lt;br /&gt;
          jmp       BOUCLE           ;et on continue&lt;br /&gt;
&lt;br /&gt;
FIN       PRINTLINE FINI             ;message&lt;br /&gt;
          WAIT                       ;attente&lt;br /&gt;
          TERM                       ;salut !!&lt;br /&gt;
&lt;br /&gt;
          DATA&lt;br /&gt;
&lt;br /&gt;
PRG       DC.B      'A:\*.*',0     ;= TOUS les fichiers&lt;br /&gt;
DIR       DC.B      27,'E','LE DIRECTORY DE CETTE DISQUETTE EST:',10,13,0&lt;br /&gt;
FINI      DC.B      13,10,7,'VoilÃ  pour cette Disquette...',0&lt;br /&gt;
&lt;br /&gt;
          BSS&lt;br /&gt;
&lt;br /&gt;
          DS.B      2000&lt;br /&gt;
PILE      DS.B      1&lt;br /&gt;
          ALIGN.W            ;SPECIFIQUE Ã  PROFIMAT !!!&lt;br /&gt;
DTA       DS.B      30       ;dâ€šbut tampon&lt;br /&gt;
DTANOM    DS.B      14       ;ici DTA+30, le NOM du fichier&lt;br /&gt;
ZERO      DS.B      1        ;octet NUL pour PRINTLINE&lt;br /&gt;
&lt;br /&gt;
          END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 PETIT PLUS:&lt;br /&gt;
 -----------&lt;br /&gt;
 VoilÃ  le listing d'un programme qui va parfaitement illuster les termes&lt;br /&gt;
 de PROGRAMME PERE et PROGRAMME FILS ainsi que les possiblilitâ€šs de&lt;br /&gt;
 chainage de programme grÃ ce aux fonctions PEXEC et TERM du Gemdos.&lt;br /&gt;
&lt;br /&gt;
               &lt;br /&gt;
               TEXT&lt;br /&gt;
&lt;br /&gt;
               INCLUDE       &amp;quot;INIT_TOS.L&amp;quot;&lt;br /&gt;
               INCLUDE       &amp;quot;MACROS.L&amp;quot;&lt;br /&gt;
&lt;br /&gt;
               SETBLOCK&lt;br /&gt;
&lt;br /&gt;
               PRINTLINE     MESSAGE           ;texte&lt;br /&gt;
               WAIT                            ;attente&lt;br /&gt;
               PRINTLINE     EFFACE            ;texte&lt;br /&gt;
               PEXEC         ZERO,NUL,PRG,#0   ;Pexec en mode 0&lt;br /&gt;
&lt;br /&gt;
               PRINTLINE     RETOUR            ;texte&lt;br /&gt;
               WAIT                            ;attente&lt;br /&gt;
               TERM                            ;retour&lt;br /&gt;
&lt;br /&gt;
               DATA&lt;br /&gt;
&lt;br /&gt;
MESSAGE        DC.B      27,'E',7,'Je vais charger le programme SON.PRG'&lt;br /&gt;
               DC.B      ' ,je resterais en mâ€šmoire et quand le',13,10&lt;br /&gt;
               DC.B      'programme se terminera il me redonnera la '&lt;br /&gt;
               DC.B      'main car je suis le PRG PERE :',0&lt;br /&gt;
EFFACE         DC.B      27,'E','je charge mon PRG FILS :',0&lt;br /&gt;
RETOUR         DC.B      27,'E','PRG PERE:   COUCOU !!! me revoilÃ  ...',0&lt;br /&gt;
&lt;br /&gt;
NUL            DC.B          0                 ;pas d'environnenment&lt;br /&gt;
ZERO           DC.B          0                 ;pas de ligne de commande&lt;br /&gt;
PRG            DC.B          'A:\SON.PRG',0    ;nom du programme FILS&lt;br /&gt;
&lt;br /&gt;
               BSS&lt;br /&gt;
&lt;br /&gt;
               DS.B          200               ;pour SETBLOCK&lt;br /&gt;
PILE           DS.B          1&lt;br /&gt;
&lt;br /&gt;
               END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                              -------------------&lt;br /&gt;
&lt;br /&gt;
 VoilÃ  pour les corrections.&lt;br /&gt;
 &lt;br /&gt;
 Je vous signale que les macros instructions SAUVE,RESTORE,HEXA,BINAIRE&lt;br /&gt;
 sont prâ€šsentes dans le fichier MACROS_2.L et vous sont dâ€šsormais entiÃ¨-&lt;br /&gt;
 rement disponibles.            ----------&lt;br /&gt;
 Il existe aussi des PRG exemples utilisant ces macros instructions dans&lt;br /&gt;
 les fichiers:&lt;br /&gt;
&lt;br /&gt;
 listing   :EXEMPLE.L&lt;br /&gt;
 â€šxecutable:EXEMPLE.PRG&lt;br /&gt;
&lt;br /&gt;
 Les listings complets des programmes issus des exercices nrÂ°4,5,6 et du&lt;br /&gt;
 programme Exemple ci-dessus sont prâ€šsents dans les fichiers:&lt;br /&gt;
&lt;br /&gt;
 FORMAT.L&lt;br /&gt;
 SON.L&lt;br /&gt;
 DIR.L&lt;br /&gt;
 PERE.L&lt;br /&gt;
&lt;br /&gt;
 ainsi que les programmes dâ€šjÃ  assemblâ€šs:&lt;br /&gt;
&lt;br /&gt;
 FORMAT.PRG &lt;br /&gt;
 SON.PRG&lt;br /&gt;
 DIR.PRG&lt;br /&gt;
 PERE.PRG&lt;br /&gt;
&lt;br /&gt;
 Tous ces fichiers sont sur la disquette nrÂ° 1.&lt;br /&gt;
 ----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 PIECHOCKI  Laurent&lt;br /&gt;
 8,impasse Bellevue                Suite dans le fichier:VDI.DOC&lt;br /&gt;
 57980    TENTELING                                      -------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Back to [[ASM_Tutorial]]&lt;/div&gt;</summary>
		<author><name>&gt;Zorro 2</name></author>
	</entry>
</feed>