APPLICATIONSPROGRAMMATION ★ MACHPOKE: COMMENT RECOPIER DU LANGAGE MACHINE ★

MachpokeApplications Programmation

L'immense majorité des possesseurs d'AMSTRAD ne connaît pas le langage machine (ou l'assembleur). Or, certains de ces programmes publiés sont vraiment alléchants ; mais comment les entrer au clavier ? et sans rien comprendre à cette technique ?

Nous avons donc créé un programme en Basic qui se chargera de tout, très rapidement, et en vous mettant à l'abri des erreurs. Pour résumer, vous lancez notre programme Basic, puis vous entrez au clavier le contenu d'UNE SEULE des colonnes du listing en assembleur. Une page en assembleur est donc beaucoup plus vite "recopiée" au clavier qu'une page de Basic !... La frappe terminée, le programme se charge de la syntaxe pour la sauvegarde sur cassette ou disquette. Répétons encore que notre programme n'est pas un "Assembleur" mais plutôt un "Entreur" de listings, conçu pour ceux qui ignorent le langage machine, qui continueront à l'ignorer, mais qui veulent profiter de ce genre de programme même sans rien y comprendre. Toutefois, afin de ne pas "taper idiot", il est essentiel de posséder ces quelques notions superficielles :

QU'EST-CE UN PROGRAMME EN LANGAGE MACHINE ?

C'est une suite continue de nombres, de 0 à 255, qui ont été logés quelque part dans la mémoire. Par exemple de l'adresse 32901 à l'adresse 32984 : sa longueur est donc de 84 octets et son "Adresse départ" est 32901. Pour lancer ce programme, ce n'est pas RUN, mais CALL 32901. OK ? Supposons que cette série de 84 nombres commence par 195, 6, 152, etc. Il faudait pour les loger en RAM faire :

POKE 32901,195:POKE 32902,6:POKE 32903,152, etc.
Fastidieux, non ? Rassurez-vous, notre programme demande la fameuse adresse de départ, puis vous n'entrez que les nombres (ou valeurs) à "poker" en RAM ; il se charge de l'ordre POKE à l'adresse à chaque fois augmentée de 1. Super facile. Et ce jusqu'à la fin du listing. Votre routine est en place, même après un NEW, elle attend d'être appelée par le CALL adresse départ ; tout ira alors très vite ; environ 50 fois plus rapide que le Basic. A quoi correspondent ces nombres entrés ? Certains sont des codes de commande pour le microprocesseur Z80 de l'AMSTRAD, très souvent suivis par des paramètres qu'il exige (des adresses, des nombres ; comme pour les fonctions Basic).

LE LISTING
EN ASSEMBLEUR

Celui qui a conçu le programme

– Une "préface" qui définit l'adresse départ, l'adresse d'exécution (généralement, c'est la même) et des noms de baptême de sub-routines avec leurs adresses. On s'en moque.
– Une colonne des adresses traduites en décimal (en plus de l'hexadécimal). C'est rare.
Votre unique travail est d'identifier la colonne adresse (en notant la première) et la colonne données (ou valeurs). C'est tout, maintenant, on passe au Basic.

LE PROGRAMME MACHPOKE

Pourquoi est-il si long pour un "POKAGE" aussi simple ? Pour éliminer toutes erreurs d'étourde-rie lors de la frappe. Elles sont faciles et seraient fatales et très difficiles à localiser ensuite. La moindre erreur provoquera un plantage brutal du système, après le CALL, et pas de "Syntax Error in &982B". De quoi disposons-nous ?

– D'un écran de saisie super clair et sans équivoque,
– de la possibilité de lister à l'écran ou sur imprimante ce que vous avez déjà entré, pour vérification,
– de la possibilité de corriger vos erreurs,
– de la sauvegarde sur cassettte ou disquette de votre saisie, même si elle n'est pas terminée ni vérifiée,
– du chargement de la saisie (LOAD) pour suite ou correction.
– et enfin, après l'avoir sauvegardé, de pouvoir essayer le programme par CALL.
Confort + sécurités = fiabilité.

un deuxième programme baptisé MACHDIM. Rassurez-vous, il sera vite fait : c'est MACHPOKE avec seulement quelques petites modifications (voir liste).

LE PROGRAMME MACHDIM

Identique à MACHPOKE, sauf que les valeurs entrées ne sont-pas POKEES mais provisoirement mises au tableau DIM. Un autre tableau DIM recueille, lui, les adresses correspondantes. La sauvegarde fournit donc un "fichier ASCII", rechargeable par l'option LOAD. Il y a quand même une option CALL pour l'essayer (après une prudente sauvegarde...).

Que faire de ce programme machine enregistré en ASCII ? Il faut le transformer ensuite en fichier linéaire, c'est le rôle d'un tout petit programme Basic.

LE PROGRAMME POKEDIM

Il tient très peu de place en mémoire. Dans un premier temps, il lit le fichier ASCII enregistré par MACHDIM, et le POKE en RAM. Il vous prie de noter par écrit son nom, son adresse départ et sa longueur. Enfin, il vous propose de l'enregistrer en binaire sous un autre nom (prudent). Vous pouvez alors le tester par CALL.

Ces programmes Basic ne font appel à aucune astuce spéciale ou fonction peu usitée, que du classique. Et comme nous publions la légende de nos variables, vous devez vous y retrouver facilement.

en question n'a pas entré à la queue-leu-leu cette suite de codes et de paramètres ; ce serait trop difficile pour se rappeler le numéro de code de chaque fonction. Il s'est servi d'un programme utilitaire appelé un "Assembleur" où il entre au clavier le mot (en lettres) qui sont les initiales de chaque fonction. Exemples : LD, ADD, JP, JR, EX, etc., suivis de ses paramètres numériques (comme en Basic). C'est l'Assembleur qui traduit ces "MNEMONIQUES" en leurs codes machine respectifs, surveille la syntaxe et met tout ces nombres dans le bon ordre. Mais, c'est aussi ce même programme Assembleur qui en fait le listing sur imprimante, celui-là même qui est reproduit photographique-ment sur la page de la revue. Et c'est là que ça se gâte un peu... En effet, chaque Assembleur a une présentation de listing qui lui est propre, et à nous de nous y retrouver. Heureusement, ce n'est pas difficile :

D'abord, sachez que les valeurs entrées sont TOUJOURS en hexadécimal, et notre série de tout à l'heure 195,6,1 52,.. est en fait sous la forme C3,06,98,... toujours DEUX caractères (pas gênant). De gauche à droite, nous trouvons généralement les colonnes suivantes :

1) Les adresses mémoire. La plupart du temps en hexadécimal, sur deux octets, donc 4 caractères. Seule la première (départ) nous intéresse.
2) Les valeurs à entrer. C'est la nôtre ! Souvent, il y a 1, 2, 3 ou 4 octets à la file. Exemple pour CD7DBC, il faudra entrer séparément CD puis 7D puis BC. On les appelle généralement les "CODES OBJETS".
3) Ce qu'a tapé le programmeur, des lettres (mnémoniques) et des valeurs en hexa, on s'en moque.
4) Des commentaires (des REM), on s'en moque également.
Voyons maintenant quelques variantes de présentation de listings.

– A gauche, on peut trouver une numérotation des lignes du listing. Sans intérêt.

Il n'y a pas de danger de loger par POKE des valeurs erronées en mémoire, pourvu que vous ne lanciez pas par CALL. Toutefois, nous avons prévu le cas où l'emplacement de ce programme machine dans la mémoire gênerait le Basic : adresse départ trop basse qui viendrait dans le Basic, ou adresse finale trop haute qui irait écraser les variables utilisées par le Basic, ou pire encore, dans la zone mémoire de l'écran. D'où


POKEUR DE PROGRAMME EN LANGAGE MACHINE

LE MODE D'EMPLOI

C'est plutôt une présentation, car toutes les options figurent à l'écran. De plus, toute frappe non valable est refusée et signalée par un bip sonore, le PRINT CHR$(7). Toute première phase : Entrée de l'adresse départ, en hexadécimal ou en décimal. Vous pouvez, par exemple, indifféremment taper 38912 ou &9800. Après le "&", pas d'espace et obligatoirement quatre caractères. Sitôt après une passe à l'écran de saisie en quatre WINDOW, très coloré (on vous gâte... ). Moitié gauche = saisie, moitié droite = les interventions.

La partie saisie est en trois colonnes : adressé en décimal, sa traduction en hexadécimal et les valeurs à entrer, le curseur vous y attend. Rappelons que c'est le programme qui affiche l'adresse en cours ; pas vous. Ces trois colonnes sont légendées en haut de l'écran.

La partie options est en trois zones. En haut, on rappelle la fameuse adresse départ. Au milieu, les légendes des lettres (en majuscules) pour chaque type d'intervention, E pour erreur, V pour Visionner, S pour Save, etc., plus un rappel vous signalant que vous êtes dans MACHPOKE ou dans MACHDIM. La partie inférieure pour l'instant est vide, c'est la zone réponse aux questions, suite aux interventions. Exemple : au lieu d'entrer la valeur suivante dans le tableau de saisie, vous avez tapé E et ENTER : dans cette zone apparaît : "Erreur : Adresse en décimal ?".

La page de saisie comprend vingt lignes (scrolling). De temps à autre, vérifiez qu'un oubli n'a pas provoqué un décalage adresse-valeur.

Les valeurs sont obligatoirement en DEUX caractères hexa (et en majuscules) ; ne tapez pas le "&", c'est le Basic qui le met. Si vous n'entrez qu'un seul caractère, le programme consulte s'il

est dans la liste des caractères d'interventions. Si ce n'est pas le cas, bip sonore et recommencez. Il ne peut pas faire une erreur en comptant ses adresses, il vérifie tout.

En "vision", il va lister votre saisie à partir de l'adresse que vous lui avez indiquée. Il présente 20 lignes et s'arrête (pas comme LIST en Basic...). La zone question vous présente alors trois options : "S" pour Suite, "E" pour Erreur décélée, ou "F" pour Fin de vision, et retour à la saisie ou autre option. Les options SAVE et LOAD vous demandent le nom du programme. On l'a limité
à huit caractères maxi, sans espaces ni point ; nous sommes alors compatibles cassettes et disquettes.

QUELQUES CONSEILS DIVERS

– Ne faites jamais un CALL avant d'avoir fait un SAVE (prudence... ).
– Vous pouvez faire un SAVE sur un programme incomplet, vous le rechargerez ensuite par LOAD pour le terminer et le corriger éventuellement.
– Avec MACHDIM et POKEDIM, ne donnez pas le même nom aux versions ASCII et binaire.
– Si un imprévu (par moi) vous obligerait à faire un BREAK par la touche ESC, rien n'est perdu, repartez par GOTO 2020.
– Les pages listings de CPC n° 1, pages 26 et 27, s'adressent au CPC 464 en cassette. Si vous avez le lecteur de disquettes branché, il faut faire BREAK (ou option Q = Quitter), puis |TAPE avant de faire CALL &9800, sinon vous avez le message "Bad command".
– Lisez attentivement le texte de l'article accompagnant le lisitng, et ce pour deux raisons :
– il peut y avoir un MEMORY à entrer avant de faire LOAD "nom du fichier binaire",
– le CALL peut concerner une autre adresse que l'adresse départ, c'est ce qu'on appelle l'adresse d'exécution ou de lancement (peu fréquent).
– Pour enregistrer le fichier binaire nommé "TRUC", la syntaxe est :
SAVE"TRUC",B,adresse départ, longueur
Les programmes MACHPOKE et POKEDIM se chargent de cette écriture. En revanche, LOAD est bien plus simple ; à partir de l'allumage de l'AMSTRAD, tapez simplement LOAD"TRUC", et il ira se loger au bon endroit, puis CALL adresse. C'est pour cela qu'il fallait le noter par écrit.
– En cas de discontinuité dans les adresses (rare), tapez ENTER en saisie.

CONCLUSION

Avec de tels outils et ces quelques notions, vous devez (enfin) profiter des listings ep Assembleur ; même sans le pratiquer, ni le comprendre, il ne vous impressionnera plus.

CPC n°5

★ ANNÉE: 1985
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: Michel ARCHAMBAULT
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» MACHPOKE    FRENCHDATE: 2011-12-01
DL: 243
TYPE: ZIP
SiZE: 6Ko
NOTE: Extended DSK/42 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Satanas
» Applications » Brockel Dir einen (CPC Amstrad International)
» Applications » Turbo Data Base Tool Box
» Applications » Edit-List (CPC Amstrad International)
» Applications » Teach Yourself Amstrad Basic - A Tutorial Guide part 2
» Applications » BBC Basic
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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
Page créée en 145 millisecondes et consultée 1749 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.