Recherche:Archéologie de l'informatique/Thomson/Points d’entrée du moniteur

Une page de Wikiversité, la communauté pédagogique libre.

Le point d’entrée du moniteur système est l’interruption logicielle 1. Le gestionnaire lit un octet après l’instruction SWI et distribue l’appel à l’aide de la table SWI (qui se trouve dans la RAM et peut être modifiée ou déplacée).

Donc, le code d’appel est:

   SWI
   FCB n

La plupart des assembleurs autoriseront ce code équivalent :

   CALL n

Notez que vous pouvez ajouter 0x80 au numéro syscall. Cela permettra d’y accéder à l’aide d’une instruction JMP au lieu d’une instruction JSR.

Dans ce cas, le code équivalent est :

   GOTO n

00 - Réinitialisation logicielle[modifier | modifier le wikicode]

Cela équivaut à appuyer sur le bouton de réinitialisation « initial prog » et à appeler le vecteur de réinitialisation. La plupart du temps, cela vous ramène au menu BASIC ou assembleur.

02 - Mettre du caractère[modifier | modifier le wikicode]

Entrées:

B : code de caractère ASCII Imprime le caractère dans le registre B à la position actuelle de l’écran (stocké à 0x201B dans la page directe du moniteur)

04 - Carte couleur VRAM page[modifier | modifier le wikicode]

Mappez la mémoire vidéo couleur afin que le processeur puisse y écrire.

06 - Forme de carte VRAM page[modifier | modifier le wikicode]

Mappez la mémoire vidéo de forme afin que le processeur puisse y écrire.

08 - Bip[modifier | modifier le wikicode]

Bip!

0A - Obtenir du caractère[modifier | modifier le wikicode]

Effectuez une numérisation du clavier et décodez la touche enfoncée.

Sortie:

Indicateur Z défini si aucune touche n’est enfoncée Variable KEY (0x2037) définie sur le jeton de base de la clé (si la clé modificateur BASIC a été utilisée) ou sur le code clé brut. Reg B est défini sur le code ASCII de la touche enfoncée.

0C - Test au clavier[modifier | modifier le wikicode]

Analyse du clavier de bas niveau.

Sortie:

L’indicateur Z est défini si aucune touche n’est enfoncée Reg B est défini sur le code clé brut de la première touche enfoncée Reg A: modifier keys state: bit 0: touche BASIC bit 1: Clé CNT bit 2: clé jaune

0E - POINT[modifier | modifier le wikicode]

Entrée:

Reg X,Y: coordonnées du point final Var CHDRAW (0x2036) : caractère à dessiner, ou 0 pour le mode graphique Var PLOTX, PLOTY (0x2032) : point de départ Var SHAPE, COLOR (0x2029) : forme/caractère et couleur à utiliser Trace une ligne de (PLOTX, PLOTY) à (X, Y).

Si CHDRAW = 0, utilise le mode graphique : la couleur est définie par la variable SHAPE (allez figurer). Sinon, utilisez le mode texte : SHAPE est le caractère ASCII à utiliser, COLOR est la couleur de premier plan à utiliser et les coordonnées sont des caractères. Sortie:

PLOTX et PLOTY sont mis à jour avec les valeurs de X et Y et peuvent être utilisés pour chaîner des lignes lors du dessin de polygones.

10 - TRACÉ[modifier | modifier le wikicode]

Entrée:

Reg X,Y: coordonnées du point final Var CHDRAW (0x2036) : caractère à dessiner, ou 0 pour le mode graphique Var SHAPE, COLOR (0x2029) : forme/caractère et couleur à utiliser Dessinez un pixel ou placez un caractère dans la position définie par X et Y. Fonctionne de la même manière que DRAW.

Sortie:

PLOTX et PLOTY sont mis à jour avec les valeurs de X et Y et peuvent être utilisés pour chaîner des lignes lors du dessin de polygones.

12 - Intrigue des personnages[modifier | modifier le wikicode]

14 - Obtenir un pixel[modifier | modifier le wikicode]

Entrée:

Reg X,Y: coordonnées Obtient la couleur des pixels. Si le pixel est défini dans la mémoire de forme, la couleur de premier plan du bloc est renvoyée. Si le pixel n’est pas défini, la couleur d’arrière-plan du bloc est renvoyée.

Sortie:

Reg B: couleur des pixels

16 - Test du stylo lumineux[modifier | modifier le wikicode]

Sortie:

Le drapeau C reflète l’état du bouton du stylet lumineux

18 - Balayage au stylo lumineux[modifier | modifier le wikicode]

Sortie:

L’indicateur C est défini si le stylet lumineux n’est pas pointé vers l’écran X,Y : coordonnées du stylo lumineux 1A - Lire le caractère à partir de l’écran Entrée:

Reg X,A: position du caractère à lire Définissez le registre B sur le code ASCII du caractère à une position donnée, ou 0 si inconnu. Si le caractère est accentué, vous obtiendrez une valeur de 16. Appeler à nouveau GETC avec les mêmes paramètres renverra le code d’accent, puis la lettre. Alternativement, ceux-ci peuvent être lus à partir des variables SS2GET et SS3GET (0x205C).

Sortie:

Reg B: résultat

1C - Scan par joystick[modifier | modifier le wikicode]

Entrée:

Reg A: ID du joystick à lire (0 ou 1) Scannez le joystick. Cela ne fonctionne que si une extension « son et jeu » est branchée.

Sortie:

Indicateur C : état du bouton du joystick Reg B: position du joystick; 0 est au centre, 1 est en haut, puis dans le sens des aiguilles d’une montre jusqu’à 8 qui est en haut à gauche.

1E - Génération de musique[modifier | modifier le wikicode]

Entrée:

Reg B: note à jouer (gamme d’une octave, de 0 à D) Variables à 0x203A : tempo, durée, timbre, réglages d’octave. Jouez une note de musique.

20 - Contrôle de bande[modifier | modifier le wikicode]

Entrée:

Reg A: 0 pour la lecture, 1 pour l’écriture Reg B: type de bloc (0 = en-tête, 1 = données, FF = EOF) Reg Y: pointeur de bloc de données (points sur la taille du bloc, puis les données, puis la somme de contrôle) Lecture ou écriture sur bande

Sortie:

Région à Y écrite avec bloc ou bloc écrit sur bande Reg A: différence de somme de contrôle (0 si la lecture s’est bien passée).

22 - Moteur à bande[modifier | modifier le wikicode]

Entrée:

Reg A: commande motrice bit 0: nouvel état du moteur (0 pour arrêter, 1 pour démarrer) bit 1 : retard Démarre ou arrête le moteur du lecteur de bande. Si le bit 1 est défini, un délai de 1 seconde est effectué. Utilisez cette option lors de l’écriture pour vous assurer que le bloc est clairement séparé des blocs précédent et suivant, et que le chargeur a le temps de traiter le bloc précédent pendant que la bande continue de fonctionner lors de la lecture.

Sortie:

Indicateur C : défini si le lecteur de bande n’est pas connecté Extensions

24 - Contrôle de l’imprimante[modifier | modifier le wikicode]

Entrée:

Reg B : octet à envoyer Var PROPC 1 : Écrire sur un octet 2: Vidage d’écran 4: Ouvert 10: fermer Cela nécessite l’extension de port parallèle CC90 et une imprimante.

Sortie:

Indicateur C : indicateur d’erreur Var PRSTA : code d’erreur

ROM disque La table SWI par défaut mappe tous les appels système suivants à la ROM de disquette. S’il n’y a pas de contrôleur de disquette connecté à la machine, ceux-ci passeront à la mémoire non mappée et se bloqueront.

Les extensions de contrôleur de disquette sont également compatibles avec les machines TO. Étant donné que le TO n’utilise pas SWI, mais que les programmes sautent directement dans une table au début de la ROM, il est prudent d’appeler les vecteurs de la ROM de disque de cette façon (mais vous n’utiliserez pas les remplacements SWI, le cas échéant)

26 - Contrôle du disque[modifier | modifier le wikicode]

Entrée:

Var DKOPC (0x2048) : code d’opération disque Var 0x2049: numéro de lecteur de disque Var 0x204A : numéro de piste (sur QDD, 0xFF signifie accès LBA) Var 0x204C : numéro de secteur (16 bits uniquement pour le contrôleur QDD) Opération générale de contrôle de disquette de bas niveau. Celle-ci effectue différentes actions en fonction de la valeur de la variable DKOPC (0x2048).

Certains d’entre eux peuvent être combinés, par exemple DKOPC = 88 est « secteur de vérification et d’écriture ».

DKOPC = 1 : Réinitialiser Entrée:

Var 0x20E9 : pointeur vers le tampon du secteur des opérations sur disque Var 0x20ED : pointeur vers le tampon FAT du disque Sortie:

Indicateur C : défini sur erreur Var DKSTA (0x204E): code d’état DKOPC = 2: Lire le secteur Entrée:

Var 0x204F : pointeur vers destination DKOPC = 4 : Densité unique DKOPC = 8: Secteur d’écriture Entrée:

Var 0x204F : pointeur vers la source DKOPC = 10 : Double densité DKOPC = 20: Chercher la piste 0 DKOPC = 40 : Rechercher une piste DKOPC = 80: Vérifier le secteur

28 - Démarrage à partir d’une disquette[modifier | modifier le wikicode]

Lit le secteur d’amorçage à partir de la disquette et l’exécute.

Le secteur d’amorçage par défaut pour le disque DOS BASIC charge le DOS BASIC, puis exécute AUTO.BAT à partir de la disquette le cas échéant. Il passe ensuite à l’interpréteur interactif DOS BASIC.

Sortie:

DKSTA (0x204E) et 0x2080 sont définis sur erreur Cela peut ne jamais revenir, en fonction de ce que fait le secteur d’amorçage

2A - Format disquette[modifier | modifier le wikicode]

Entrée:

Var 0x2048: si le bit 7 est défini, vérifiez également le formatage Var 0x2049 : numéro de lecteur Var 0x204D: facteur d’entrelacement sectoriel (1 à 15). Non utilisé pour QDD. Var 0x204F: pointeur de tampon fonctionnel Sortie:

L’indicateur C est défini en cas d’erreur Var DKSTA (0x204E) : code d’erreur

2C - Allouer un bloc[modifier | modifier le wikicode]

Entrée:

0x20F6 : pointeur d’entrée de répertoire (tel que défini par SWI 2E) Disk FAT doit être chargé (en utilisant SWI 34) Allouez un bloc dans la FAT pour le fichier actif.

Sortie:

Indicateur C: définir si le disque est plein 0x20E5 est défini sur 5 (code d’erreur : disque plein) 0x20F9 est défini sur le numéro de bloc nouvellement alloué La mémoire tampon FAT en mémoire est mise à jour pour allouer le nouveau bloc.

2E - Allouer l’entrée de répertoire[modifier | modifier le wikicode]

Entrée:

0x20E7 : Pointeur de descripteur de fichier 0x20E9: coussin de travail sectoriel 0x20EB : Type de fichier 0x20EC : indicateur de fichier 0x20F0 : mode d’ouverture de fichier (2 ou 3) Allouez une entrée de répertoire pour la création d’un nouveau fichier.

Sortie:

L’indicateur C est défini en cas d’erreur 0x2045 : code d’erreur logiciel (répertoire plein, ...) 0x204E : code d’erreur matériel (pas de disque, secteur introuvable, ...) 0x20F6 : numéro d’entrée de répertoire alloué

30 - Écraser le fichier avec sauvegarde sécurisée[modifier | modifier le wikicode]

32 - Fin de transaction (Fermer le dossier)[modifier | modifier le wikicode]

Entrée:

0x20E7 : Descripteur de fichier 0x20F0 : Mode d’accès aux fichiers 0x20FE: coussin sectoriel Met à jour la FAT disque et le catalogue à partir de la copie de travail en mémoire. Cela valide toutes les modifications effectuées jusqu’à présent et rend les fichiers nouvellement écrits visibles sur le disque.

Cela ne mettra pas à jour le « nombre de secteurs dans le dernier cluster » et le « nombre d’octets dans le dernier secteur ». Si vous avez besoin d’une précision supérieure à celle d’un cluster pour vos tailles de fichiers, vous devez les définir vous-même. D’autres solutions sont possibles, telles que le remplissage des fichiers ASCII avec des caractères EOF.

Notez qu’il n’est utile de l’appeler que pour les modes d’ouverture de fichier 2 (écriture) et 3 (écriture avec sauvegarde).

Sortie:

Indicateur C : défini sur erreur 0x204E : code d’erreur

34 - Disque de lecture FAT[modifier | modifier le wikicode]

Entrée:

0x20ED : pointeur de tampon FAT Lit la FAT disque sur la copie de travail en mémoire

Sortie:

L’indicateur C est défini en cas d’erreur La mémoire tampon FAT est remplie avec les données du disque.

36 - Mettre à jour le cluster[modifier | modifier le wikicode]

38 - Ouvrir le dossier[modifier | modifier le wikicode]

Entrée:

0x20E7 : Structure du pointeur vers le descripteur de fichier 0x20E9 : Pointeur de tampon de travail sectoriel 0x20EB : Type de fichier 0x20EC : indicateur de fichier 0x20F0 : mode ouvert (1 = lecture ?, 2 = écriture, 3 = sauvegarde et effacement) Localisez un fichier dans la FAT et ouvrez-le pour le lire ou l’écrire. L’écriture dans un fichier le tronque. Le mode « enregistrer et effacer » ouvre un fichier temporaire (nommé SCRATCH. DOS), qui remplacera l’entrée de répertoire d’origine lorsque le fichier sera fermé.

Sortie:

L’indicateur C est défini en cas d’erreur. Il n’est PAS défini si le fichier est introuvable. Var 0x20E5 : code d’erreur (3 = erreur IO) Reg A: identique à ci-dessus. 0x20F5 : compteur sectoriel (défini sur 0) 0x20F6 : premier bloc de fichier 0x20F7 : nombre d’octets dans le dernier secteur de fichier 0x20FA : pointeur vers l’entrée de fichier dans la table de répertoires

3A - Effacer le fichier[modifier | modifier le wikicode]

Effacez le fichier du répertoire du disque et libérez tous les secteurs qui lui sont alloués dans le FAT. Le fichier doit d’abord être ouvert. Cela ne réécrit pas la FAT de travail sur le disque, pour cela, vous devez utiliser l’appel « end transaction ».

Sortie:

L’indicateur C est défini en cas d’erreur 0X2025 : code d’erreur Reg Y: Pointeur FAT.