Envoyer un e-mail à Collection ThomsonCollection Thomson
EditoForum 2002Liens
Nanoreseau
Docs
Logiciels
Matériel
Imprimer le documentLes cours d'assembleur de Prehis-To
Retour à la liste

Initiation à l’assembleur 6809

Exemples de programmes

Programme de dessin

Et si nous dessinions un peu avec le crayon optique ou la souris ? Pour les deux, le programme est le même. Il suffira de choisir l’option voulue dans « Réglages et préférences ».

Les modalités seront les suivantes :

  • L’écran sera bleu sur blanc
  • On sortira du programme en tapant sur la barre espace.

En entrée de programme, l’écran est initialisé. Les coordonnées courantes sont récupérées pour afficher le point de départ du tracé. Puis un événement est attendu. Si le bouton de la souris ou du crayon n’est pas appuyé, on est en mode relâche : seul le curseur apparaît à l’écran. Si le bouton est appuyé, on est en mode tracé.

En mode relâche, si le crayon ou la souris n’ont pas changé de position, le point du curseur ne sera pas mis à jour pour qu’il ne clignote pas frénétiquement. Pendant un mouvement, le point précédent est effacé et le nouveau point est affiché. Il est convenu qu’une routine permettant la commutation du point suffit à assurer l’allumage et l’effacement du point. Si la couleur de forme est 4 (bleu) et la couleur de fond est -8 (blanc) soit $F8 en 8 bits, un XOR avec la valeur $FC (soit $F8 + $04) suffit à commuter entre ces deux valeurs.

Les étiquettes sont en première colonne, le programme TO en 2ème colonne, le programme MO en 3ème colonne et les commentaires en 4ème colonne :

  DEBUT | LDU    #MSIN          | LDU    #MSIN          | Pointe sur le message d’initialisation
        | BSR    AFFM           | BSR    AFFM           | Initialise l’écran
        | CLR    $6041          | CLR    $2036          | Demande le tracé en mode graphique
  * Attend une capture de coordonnées valide
  B0    | SET    *              | SET    *              |
        | JSR    $E818          | CALL   $18            | Lit les coordonnées crayon/souris
        | BCS    B0             | BCS    B0             | Si illisibles, nouvelle tentative
        | BSR    INVER          | BSR    INVER          | Inverse le point affiché
  * Attend un évènement
  B0    | SET    *              | SET    *              |
        | JSR    $E81B          | CALL   $16            | Lit le bouton crayon/souris
        | BCS    AFFIC          | BCS    AFFIC          | Si le bouton est enfoncé, affiche le point 
        | JSR    $E818          | CALL   $18            | Lit les coordonnées crayon/souris
        | BCS    NEXT           | BCS    NEXT           | Si mauvaise lecture, passe
  * Affichage du curseur
        | CMPX   $603D          | CMPX   $2032          | |
        | BNE    COMM           | BNE    COMM           | | Si les nouvelles coordonnées sont égales
        | CMPY   $603F          | CMPY   $2034          | | au coordonnées courantes, passe
        | BEQ    NEXT           | BEQ    NEXT           | |
  COMM  | PSHS   X,Y            | PSHS   X,Y            | Protège les nouvelles coordonnés en pile
        | LDX    $603D          | LDX    $2032          | Lit l’abscisse du point précédent
        | LDY    $603F          | LDY    $2034          | Lit l’ordonnée du point précédent
        | BSR    INVER          | BSR    INVER          | Inverse (efface) le point précédent
        | PULS   X,Y            | PULS   X,Y            | Récupère les coordonnées du nouveau point
        | BSR    INVER          | BSR    INVER          | Inverse (allume) le nouveau point
        | BRA    NEXT           | BRA    NEXT           | Attend l’événement suivant
  * Affichage d’un segment
  AFFIC | JSR    $E818          | CALL   $18            | Lit les coordonnées crayon/souris
        | BCS    NEXT           | BCS    NEXT           | Si mauvaise lecture, passe
        | LDB    #4             | LDB    #4             | | Fixe la couleur 4 (bleu)
        | STB    $6038          | STB    $2029          | | pour le tracé
        | JSR    $E80C          | CALL   $0E            | Trace le segment
  * Test frappe de barre espace
  NEXT  | JSR    $E806          | CALL   $0A            | Lit le clavier
        | CMPB   #$20           | CMPB   #$20           | | Si barre espace pas appuyée,
        | BNE    B0             | BNE    B0             | | boucle sur le programme
  FIN   | SWI                   | STOP                  | Arrêt du programme
  * Inversion du point de curseur
  INVER | JSR    $E821          | CALL   $14            | Lit la couleur du point
        | EORB   #$FC           | EORB   #$FC           | Commute la couleur
        | STB    $6038          | STB    $2029          | Initialise la nouvelle couleur
        | JMP    $E80F          | CALL   $10+$80        | Affiche le point
  * Programme d’initialisation de l’écran
  B0    | SET    *              | SET    *              |
        | JSR    $E803          | CALL   $02            | Envoie à la routine PUTC$
  AFFM  | LDB    ,U+            | LDB    ,U+            | Lit un caractère
        | BNE    B0             | BNE    B0             | Si pas caractère 0, envoie le caractère
        | RTS                   | RTS                   | Retour au programme principal
  * Message d’initialisation de l’écran
  MSIN  | FCB    $1F,$20,$20    | FCB    $1F,$20,$20    | | Déclaration d’une fenêtre
        | FCB    $1F,$12,$14    | FCB    $1F,$12,$14    | | d’une ouverture maximum
        | FCB    $1B,$40        | FCB    $1B,$40        | Couleur de forme 0 (noir)
        | FCB    $1B,$57        | FCB    $1B,$57        | Couleur de fond 7 (blanc)
        | FCB    $1B,$67        | FCB    $1B,$67        | Couleur de tour d’écran 7 (blanc)
        | FCB    $0C            | FCB    $0C            | Efface l’écran
        | FCB    $00            | FCB    $00            | - Fin de message -
        | END                   | END                   | Fin du programme à assembler

Un peu de musique

« Au clair de la lune », vous connaissez ? Faisons jouer ce thème par le Thomson. Afin d’obtenir une partition claire, les octaves et les notes seront définies par des EQU. Les valeurs concernant les octaves seront augmentées de $80. La même partition sera utilisée pour les TO et les MO. Vous remarquerez que les phrasés 1, 2 et 4 de la partition sont rigoureusement identiques. Vous pourrez les dupliquer à l’édition en tapant « Z »+RET, en déplaçant par les curseurs pour couvrir la zone à copier, en tapant « C »+RET, en positionnant ensuite par les curseurs l’endroit de la copie et en tapant « I »+RET dans la barre d’édition d’Assembler.

Les étiquettes sont en première colonne, le programme TO en 2ème colonne, le programme MO en 3ème colonne et les commentaires en 4ème colonne :

  * Définition des valeurs pour les octaves
  O1    | EQU    16+$80         | EQU    16+$80         | Valeur pour octave 1 + $80
  O2    | EQU    8+$80          | EQU    8+$80          | Valeur pour octave 2 + $80
  O3    | EQU    4+$80          | EQU    4+$80          | Valeur pour octave 3 + $80
  O4    | EQU    2+$80          | EQU    2+$80          | Valeur pour octave 4 + $80
  O5    | EQU    1+$80          | EQU    1+$80          | Valeur pour octave 5 + $80
  * Définitions des valeurs pour les notes
  SL    | EQU    $30            | EQU    $00            | Valeur pour le silence
  DO    | EQU    $31            | EQU    $01            | Valeur pour le DO bécarre
  RE    | EQU    $33            | EQU    $03            | Valeur pour le RE bécarre
  MI    | EQU    $35            | EQU    $05            | Valeur pour le MI bécarre
  FA    | EQU    $36            | EQU    $06            | Valeur pour le FA bécarre
  SO    | EQU    $38            | EQU    $08            | Valeur pour le SOL bécarre
  LA    | EQU    $3A            | EQU    $0A            | Valeur pour le LA bécarre
  SI    | EQU    $3C            | EQU    $0C            | Valeur pour le SI bécarre
  * Initialisation des registres de musique
  DEBUT | LDD    #4             | LDD    #4             | | Initialise l’octave
        | STD    $6036          | STD    $203E          | | à 4
        | LDD    #12            | LDD    #12            |  | Initialise la durée
        | STD    $6033          | STD    $203B          |  | à 12
        | LDD    #5             | LDD    #5             | | Initialise le tempo
        | STD    $6031          | STD    $2039          | | à 5
        | LDB    #0             | LDB    #0             |  | Initialise le timbre
        | STB    $6035          | STB    $203D          |  | à 0
  * Joue la musique
        | LDX    #MUSIQ         | LDX    #MUSIQ         | Pointeur sur partition
  B0    | SET    *              | SET    *              |
        | LDB    ,X+            | LDB    ,X+            | Lit une valeur de partition
        | BLT    OCTAV          | BLT    OCTAV          | Si b7 à 1, change d’octave
        | BITB   #$40           | BITB   #$40           | | Si b6 à 1,
        | BNE    FIN            | BNE    FIN            | | sort du programme
        | JSR    $E81E          | CALL   $1E            | Envoie le code de note à jouer
        | BRA    B0             | BRA    B0             | Lit la suite de la partition
  OCTAV | ANDB   #$7F           | ANDB   #$7F           | Enlève le b7 à 1
        | STB    $6036+1        | STB    $203E+1        | Initialise la nouvelle octave
        | BRA    B0             | BRA    B0             | Lit la suite de la partition
  FIN   | SWI                   | STOP                  | Arrêt du programme
  
  * Même partition pour TO et MO
  * Phrasé 1
  MUSIQ  FCB    O4,DO,DO,DO,RE,MI,SL,RE,SL
         FCB    DO,MI,RE,RE,DO,SL,SL,SL
  * Phrasé 2
         FCB    O4,DO,DO,DO,RE,MI,SL,RE,SL
         FCB    DO,MI,RE,RE,DO,SL,SL,SL
  * Phrasé 3
         FCB    RE,RE,RE,RE,O3,LA,SL,LA,SL
         FCB    O4,RE,DO,O3,SI,LA,SO,SL,SL
         FCB    SL
  * Phrasé 4
         FCB    O4,DO,DO,DO,RE,MI,SL,RE,SL
         FCB    DO,MI,RE,RE,DO,SL,SL,SL
  * Appendice
         FCB    SL,DO,DO,DO,RE,SL,SO,SL,DO
         FCB    $40     - Fin du message -
  
        | END                   | END                   | Fin du programme à assembler
Site
Plus
Forums
Code
Créations

*Site en favoris
*Page en favoris
*Site en démarrage
*Page en démarrage


Haut de page

Collection Thomson 2015 © Ghislain Fournier & François Mouret