APPLICATIONSDIVERS ★ RSX LIST (AMSTAR&CPC) ★

RSX List (Amstar&CPC)Applications Divers
Le mois dernier nous avons vu en détail la première partie du listing asembleur. Je vous propose ce mois-ci de nous attarder sur le traitement spécifique du buffer où a été traduite et listée la ligne BASIC actuellement pointée par le système.

Vous pouvez prendre pour Fil d'Ariane les quelques lignes qui suivent afin de découvrir le listing assembleur et ses commentaires.

RECHERCHE
DES INSTRUCTIONS
A DECALAGE

  • FSPACE : développement d'une ligne BASIC

    C'est ici que commence le listing du buffer où est traduite la ligne pointée. Le système vient d'envoyer le premier caractère. C'est à ce moment qu'on prend en charge l'affichage de ce buffer. Les premiers caractères envoyés sont des caractères Nui (0). Ces caractères ne sont pas comptés. Ces caractères sont envoyés sur le canal de sortie en attendant qu'il soit prêt. On comprend l'utilité de cette méthode quand c'est l'imprimante qui est sélectionnée comme canal de sortie. Connaissant la rapidité de ce périphérique, ce caractère peut être perdu, s'il est imprimé il n'a aucun effet. Quand est envoyé le caractère "Une-Feed* (10), cela signifie que le canal de sortie a été détecté comme "prêt", on en profite pour remettre à zéro le compteur de caractère (POS-SP). Les caractères qui suivent sont le numéro de ligne. On les compte afin de les soustraire à la marge ultérieurement. Quand le numéro de ligne est entièrement Imprimé apparaît dans le registre

    A le caractère "Space" (20). On analyse donc le contenu de cette ligne, on saute pour cela à LISTDV.

  • LISTDV ; développement/recherche dans la ligne

    C'est cette routine qui prend la main pour lister le reste du buffer. Après avoir remis en état le vecteur détourné. On recherche dans ce buffer tout ce qui nécessite un traitement spécifique, c'est-à-dire :

    • les chaînes de caractères ;
    • les deux points séparateur d'Instruction ;
    • la fin du buffer, marquée par (0) ;
    • FOR;
    • NEXT;
    • IF...THEN...ELSE; -WHILE; -WEND;
    • les datas et les remarques.

TRAITEMENT
DES INSTRUCTIONS
A DECALAGE

On regroupe sous ce titre tous les traitements des instructions BASIC trouvées dans le buffer où se trouve la ligne BASIC qui est en train d'être listée.

  • TDEUPT : traitement des deux points séparateurs d'instructions

    Ces deux points déclenchent le passage à la ligne suivante, afin de n'avoir qu'une seule instruction ou fonction par ligne. On remarque deux cas particuliers :

    • le caractère (0) qui marque la fin du buffer ;
    • un deuxième (;). Dans ce cas on l'imprime comme un caractère normal sans passer à la ligne suivante.
  • FLIGNE : fin du buffer, fin du listing de la ligne pointée

    Nous sommes arrivés à la fin du buffer. On va retourner la main au système pour lister les lignes suivantes. Il faut auparavant pointer HL sur la fin du buffer et détourner le vecteur d'impression vers la nouvelle routine de listing du buffer.

    Si la touche a été frappée on ne détourne pas ce vecteur et nous partons dans un traitement spécial afin d'Interrompre l'opération en cours,

  • TFOR/TWHILE : traitement de FOR et de WHILE

    En effet pour FOR et WHILE on augmente de deux la largeur de la marge sans aucune condition.

  • TNEXT/TWEND : traitement NEXT et de WEND

    Ces instructions ont le traitement complémentaire aux deux précédentes. Quand on décrémente la largeur de la marge. Si celle-ci devient inférieure à 6 on imprime un message indiquant que le NEXT ou le WEND est mal placé.

  • TIF : traitement du groupe d'instruction IF... THEN

    Cette Instruction esf traitée d'une manière un peu particulière. La machine est ici, permettez-moi l'expression, "intelligente" ! On commence par mémoriser la largeur de la marge dans un tableau. On peut aller Jusqu'à 16 "IF" dans une ligne. Si le "THEN" associé à ce "IF" n'est pas trouvé avant la fin de la ligne on génère le message d'erreur n° 3 ; c'est-à-dire "ERREUR de STRUCTURE'.

  • TELSE : traitement de l'instruction ELSE Ce traitement confère aussi à la machine une petite intelligence. En effet, on teste à la rencontre de ce mot la présence du contexte IF-THEN. Si c'est le cas on récupère la largeur de la marge à l'aide de la petite routine HLTAB qui va chercher dans le tableau de fabulation des "IF". Le mot ELSE est Imprimé au même niveau que son "IF" associé et l'impression reprend à 1a ligne suivante avec une marge plus large de deux caractères.
  • TREM 0/1 : traitement des remarques Les deux manières de poser des remarques dans un programme sont reconnues et traitées. Si l'instruction REM ou 7" es précédée d'un séparateur d'Instruction deux points, on passe à la ligne suivante. Les remarques sont imprimées comme les caractères de contrôle.
  • TDATA : traitement spécifique des DATAS
Les Datas sont traités comme une chaîne de caractère partant du mot Data Jusqu'à la fin de la ligne.

SOUS-PROGRAMMES UTILITAIRES

  • FIND : recherche des Instructions Cette routine trouve dans le buffer les mots BASIC. Si une Instruction est suivie de ":" , on interprète ce caractère comme un espace.

    En retour le bit Z et mis à "un" si le mot BASIC recherché a été trouvé.

  • LDHLHL:LD...HL,(HL)

    Cette routine est pratique pour pointer en mémoire à l'aide du double registre HL. Elle range dans le registre HL le contenu des deux octets pointés par ce même double registre.

  • NLIGNE : génération d'une nouvelle ligne

    Cette routine fait passer à la ligne suivante et commande la génération de la marge.

  • NVPAGE : routine de pagination de l'imprimante

    Cette routine commande la sortie d'un titre sur chaque feuille du listing si au moins un paramètre a été passé au dernier appel de l'Instruction SET-PRT. Si non on Imprime "à la suite" sans générer de "Form Feed".

  • EJECTP/TITRE : éjection de la page et génération du titre

    Cette routine est spécifique à ce programme de listing développé, mais elle peut facilement être adaptée à d'autres routines d'impression de votre conception. J'espère vous avoir donné dans cette routine quelques idées.

  • PRTHLD : Impression du contenu de HL

    Cette routine imprime sur le canal de sortie le contenu du double registre HL formaté sur cinq caractères en base 10. Elle est comparable à l'instruction BASIC PRINTUSING "#####", HL à la différence que les blancs sont remplacés par "0".

  • PRCRLF : génération de cariage return/Une Feed
  • PRTIMV : normal/Inverse VIDEO - A l'écran : on Imprime une "ctriX"(24), qui a pour effet de changer la plume avec le papier, c'est le passage en inverse-vidéo et vice versa.
    - A l'Imprimante : on passe des caractères "normaux" aux caractères "gras" et inversement. On envole pour cela à l'Imprimante une des chaînes de configuration, GRASON ou GRA-SOF. Ces chaînes de caractères sont spécifiques à chaque Imprimante. Si l'Imprimante n'est pas prête on attend qu'elle le soit.
  • PRTTAB : génération de la marge

    Il y a deux cas à différencier, l'appel pour la première fois dans le listing d'une ligne et les appels suivants. Au premier appel on a déjà imprimé le numéro de la ligne. Les caractères passés ont été comptabilisés dans le pointeur POSSP. On soustrait dans ce cas ce nombre à la largeur de la marge. Aux appels suivants ce pointeur est à 0, ce qui simplifie le problème.

  • PRTLAB : Impression d'un mot quelconque

    Cette routine envoie sur le canal de sortie un mot pointé par le double registre HL. Le premier octet est la longueur de ce mot et les octets qui suivent, la forme.

  • PRTMOT : impression d'un mot BASIC

    Cette routine est spécifique. Elle génère la marge et imprime le mot BASIC pointé dans le buffer.

  • CHAINE : impression d'une chaîne de caractère

    Une chaîne est un ensemble de caractères commençant par un maillon identificateur qui est le même que celui qui la renferme. Ce caractère est mémorisé dans CACHAI. Si le maillon de fermeture de-la chaîne n'est pas trouvé avant ia fin du buffer c'est cette fin qui marque celle de la chaîne.

  • DCTABP ; décrémentation de fabulation

    C'est ce sous-programme qui diminue la largeur de la marge, il est appelé par plusieurs sous-programmes faisant augmenter la largeur de la marge. Si elle devient inférieure à 6 caractères un message d'erreur est généré par PRTERR.

  • ICTABP : incrémentation de la fabulation

    Cette routine est similaire à ia précédente à la différence qu'elle effectue le travail inverse. Elle incrémente la largeur de ia marge. De ce fait, elle n'a pas besoin de vérifier sa largeur.

  • ICTAB : incrémentation de la fabulation intermédiaire

    Cette routine Incrémente le pointeur intermédiaire de marge. Ce pointeur n'est modifié que par l'instruction IF... THEN et ELSE. Le pointeur reprend la valeur de TABP à chaque début de ligne.

  • PRCANA : permutation des canaux de sortie

    Cette routine détourne des vecteurs du système d'exploitation tout en mémorisant le canal de sortie et le vecteur détourné. Le vecteur détourné est redirigé vers les nouvelles routines d'affichage du buffer contenant la ligne BASIC à lister.

CONFIGURATION DE L'IMPRIMANTE

Il y a une troisième partie au listing assembleur. Il s'agit de la configuration Imprimante. Comme vous pouvez le voir il suffit demodifier GRASET, GRARST, MINI, CONDEN, NQL et RSTPRT pour l'adapter à une autre Imprimante. Je ne m'étends pas sur ses modifications, Je vous conseille de lire attentivement les commentaires de ce listing. De potasser un peu votre documentation concernant votre chère petite imprimante si elle n'est pas compatible "EPSON", et de réassembler un nouveau list avec ce nouveau fichier de configuration.

UN PETIT CONSEIL

Je vous conseille de taper votre programme tout en minuscules. C'est une très bonne méthode pour retrouver une grande partie des erreurs de frappe.

Philippe CORBES , AMSTAR&CPC n°28

★ EDITEUR: AMSTAR&CPC
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: Philippe CORBES
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» List    (Amstar-CPC)    LISTING    FRENCHDATE: 2021-02-02
DL: 247
TYPE: PDF
SiZE: 1416Ko
NOTE: 10 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX Disk-Utility (Computer Partner)
» Applications » Drucker - Rsx (CPC Amstrad International)
» Applications » RSX Output (Schneider Aktiv Special)
» Applications » RSX Speech System (Amstrad Action)
» Applications » RSX Info (Popular Computing Weekly)
» Applications » RSX Clock (Happy Computer)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 207 millisecondes et consultée 1724 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.