Calling MO
On trouve sur MO les points dentrées moniteur standard, répertoriés dans la documentation technique du MO5 :
$02 Ecriture dun 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 dun 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 linterface 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 dun bloc
$2E ALLOD Allocation de départ
$30 ECRSE Ecriture dun secteur
$32 FINTR Fin du transfert
$34 LECFA Lecture de la FAT
$36 MAJCL Mise à jour cluster
$38 RECFI Recherche dun 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 dune palette complète :
A = $FF
X = Adresse de palette (32 octets)
Mise à jour dune couleur :
A = Numéro de couleur (0-15)
X = Masquage ET de la couleur
Y = Masquage OU de la couleur
Lecture dune 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 linterface 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 derreur
Ladresse de la table des vecteurs (16 bits) de ces
points dentrées se trouve en SIMUL ($206A-$206B). Ce qui offre des perspectives intéressantes :
tout point dentrée peut être reprogrammé, y compris ceux concernant le disque, ce que la gamme
TO nautorise pas, ou même être ajouté à cette liste (jusquau code $7E). Dans ce dernier
cas, lavantage, pour un appel répétitif, est la minimalisation de linstruction, 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 dorigine,
que vous aurez soin de rétablir en sortie de programme.
A supposer que vous vouliez ajouter un point dentrée
qui vous permette dafficher 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 dentrée
30 8D 0010 LEAX AFFIC,PCR Pointeur sur programme daffichage
AF C1 STX ,U++ Ajoute le pointeur à la table
* Test du nouveau point dentré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 à lassembleur)
* Programme daffichage
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 dune ligne
8D FCB 13+$80 Retour au début de la ligne
END Fin du programme source
|