Envoyer un e-mail à Collection ThomsonCollection Thomson
EditoForum 2002Liens
Nanoreseau
Docs
Logiciels
Matériel
Imprimer le document
Retour à la liste

Calling MO

On trouve sur MO les points d’entrées moniteur standard, répertoriés dans la documentation technique du MO5 :

      $02          Ecriture d’un caractère
      $04          Passe en mémoire écran de fond
      $06          Passe en mémoire écran de forme
      $08          Bip sonore
      $0A          Lecture du clavier
      $0C          Lecture rapide du clavier
      $0E          Trace un segment
      $10          Trace un point
      $12          Trace un point caractère
      $14          Lit la couleur d’un point
      $16          Lit le bouton du crayon optique
      $18          Lit les coordonnées du crayon optique
      $1A          Lit l’écran
      $1C          Lit le joystick
      $1E          Génération de musique
      $20          Opérations cassette
      $22          Lance/stoppe LEP
      $24          Gestion de l’interface parallèle
      $26          Entrée contrôleur disque

... mais il existe 10 entrées non officielles communes aux MO5 et MO6, qui appellent les routines du MiniDos :

      $28          DKBOOT Lancement du boot
      $2A          DKFMT  Formatage de la disquette
      $2C          ALLOB  Allocation d’un bloc
      $2E          ALLOD  Allocation de départ
      $30          ECRSE  Ecriture d’un secteur
      $32          FINTR  Fin du transfert
      $34          LECFA  Lecture de la FAT
      $36          MAJCL  Mise à jour cluster
      $38          RECFI  Recherche d’un fichier
      $3A          RECUP  Récupération de la place occupée

... et les MO6 ont quatre entrées de plus, sur le principe de la gamme TO de dernière génération:

      $3C          Opérations sur la palette
                          Entrées :
                              Mise à jour d’une palette complète :
                               A = $FF
                               X = Adresse de palette (32 octets)
                              Mise à jour d’une couleur :
                               A = Numéro de couleur (0-15)
                               X = Masquage ET de la couleur
                               Y = Masquage OU de la couleur
                              Lecture d’une couleur :
                               A = Numéro de couleur (0-15)
                               X = $FFFF
                               Y = $0000
                               Retour de la couleur dans X
      $3E          Lit les boutons de souris
                          C de CC à 1 = Bouton gauche enfoncé
                          Z de CC à 1 = Bouton droit enfoncé
      $40          Lit les coordonnées de la souris
                          C de CC à 1 = Mauvaise lecture
                          X Abscisse de la souris
                          Y Ordonnée de la souris
      $42          Gestion de l’interface série
                          Entrées :
                          $2082 RS.OPC Mot de commande
                          $2084 NOMBRE Paramètres de transmission
                          $2085 BAUDS  Vitesse de transmission
                          Sorties :
                          C de CC à 1 = Erreur
                          $2083 RS.STA Code d’erreur

L’adresse de la table des vecteurs (16 bits) de ces points d’entrées se trouve en SIMUL ($206A-$206B). Ce qui offre des perspectives intéressantes : tout point d’entrée peut être reprogrammé, y compris ceux concernant le disque, ce que la gamme TO n’autorise pas, ou même être ajouté à cette liste (jusqu’au code $7E). Dans ce dernier cas, l’avantage, pour un appel répétitif, est la minimalisation de l’instruction, qui ne comporte jamais que 2 octets : le code de CALL ($3F) et le numéro du vecteur de programme. Il faudrait alors recopier la table des vecteurs dans une zone mémoire, changer ou ajouter certains vecteurs de routines puis faire pointer SIMUL sur cette nouvelle table en protégeant préalablement le pointeur de table d’origine, que vous aurez soin de rétablir en sortie de programme.

A supposer que vous vouliez ajouter un point d’entrée qui vous permette d’afficher un texte dont le dernier caractère est augmenté de $80 en guise de terminateur :

                      ORG    $4800               Origine du programme binaire
  
               * Initialisations préalables
  BE 206A      DEBUT  LDX    $206A               Lit le pointeur SIMUL
  34 10               PSHS   X                   Empile le pointeur SIMUL
  CE 4000             LDU    #$4000              Pointe sur nouvelle adresse de table
  FF 206A             STU    $206A               Réinitialise le pointeur SIMUL
               * Copie de la table en RAM
  86 44               LDA    #$44                Taille de la table MO5/MO6
  E6 80        COPIE  LDB    ,X+                 Lit une donnée
  E7 C0               STB    ,U+                 Ecrit la donnée
  4A                  DECA                       | Pour les
  26 F9               BNE    COPIE               | 44 données
               * Ajoute le point d’entrée
  30 8D 0010          LEAX   AFFIC,PCR           Pointeur sur programme d’affichage
  AF C1               STX    ,U++                Ajoute le pointeur à la table
               * Test du nouveau point d’entrée
  30 8D 0012          LEAX   MESS,PCR            Pointeur sur le message
  3F 44               CALL   $44                 Affiche le message
               * Restauration de SIMUL
  35 10               PULS   ,X                  Récupère le pointeur SIMUL
  BF 206A             STX    $206A               Restaure le vecteur SIMUL
  39                  RTS                        Retour au Basic
                                                 (ou STOP pour le retour à l’assembleur)
               * Programme d’affichage
  3F 02        AFFIC0 CALL   $02                 Affiche le caractère
  E6 80        AFFIC  LDB    ,X+                 Lit le caractère suivant
  2A FA               BPL    AFFIC0              Si pas augmenté de $80, affiche
  C4 7F               ANDB   #$7F                Isole code caractère
  3F 82               CALL   $02+$80             Affiche le caractère et sort
               * Message à afficher
  4D 45 53 53  MESS   FCC    "MESSAGE1"          Message à afficher
  41 47 45 31
  0A                  FCB    10                  Descend d’une ligne
  8D                  FCB    13+$80              Retour au début de la ligne
                      END                        Fin du programme source
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