★ APPLICATIONS ★ DIVERS ★ MIRAGES ★ |
Mirages | Applications Divers |
Voici deux petits programmes écrits en assembleur que de nombreux possesseurs du livre "AMSTRAD CPC 464 FIRMWARE" auraient pu écrire, tant les renseignements contenus dans cet ouvrage sont précieux. Le premier permet de charger et de lister un programme écrit en Basic, et ensuite de le sauvegarder avec la commande de protection (fichier apparaissant dans un CAT avec le type %). Le programme Basic chargé par ce programme peut être exécuté, modifié, listé ou sauvegardé avec ou sans protection. Nous allons analyser le listing de ce chargeur. Ce programme fait appel aux différentes routines de la ROM AMSTRAD par la zone des JUMP. Notons tout de suite que volontairement le pointeur de pile n'est pas initialisé ; la pile utilisée sera donc celle du Basic. CINIT : est le sous-programme d'initialisation de la cassette. CIOPEN : est le sous-programme d'ouverture d'un fichier cassette en lecture. La paire de registres H et L du Z80 pointe la zone où se trouve le nom du fichier à lire ; dans notre exemple, nous ne mettons aucun nom, et par conséquent, l'AMSTRAD chargera le premier fichier rencontré sur la cassette (notons que ces mêmes routines fonctionnent avec les disques, mais là, il est impératif de mettre le nom du fichier à lire). La paire de registre DE pointe une zone RAM de 2 k-octets qui ser- vira de buffer pour la lecture des blocs sur la cassette. Dans notre programme, le buffer est à l'adresse 9000 H et le registre B contient la longueur du nom du fichier à lire (ici zéro). A la sortie de la routine CIOPEN, les registres H et L contiennent l'adresse de la zone mémoire où se trouve l'en-tête du fichier. Cette zone mémoire se décompose ainsi pour les octets qui nous intéressent : – octets 0 à 15 : nom du fichier,
Les contenus des registres DE et HL sont échangés pour entrer dans la routine CIDIR qui effectue la suite de la lecture du fichier avec, comme paramètre d'entrée, l'adresse de stockage du fichier contenu dans les registres HL. Aucun test n'est fait sur le type de fichier rencontré, nous supposons que là cassette a été positionnée en début d'un fichier Basic protégé. Nous récupérerons ensuite l'adresse de début stockée en 9902H, et la longueur du fichier stocké en 9904 ; nous calculons l'adresse de fin de programme que nous implantons dans la zone mémoire système allant de AE83 H à AE88 H (lignes 26 à 31 du programme). Cette opération met à jour les pointeurs Basic ; notons qu'elle n'est peut-être pas optimale, l'auteur ayant procédé par tâtonnements. A la fin, le programme retourne au Basic. Ce programme est très court et peut donc être réassemblé à la main pour être relogé dans l'espace mémoire convenant le mieux à chacun. Il a été mis dans le haut de la mémoire car, les programmes Basic commençant à l'adresse 170H, il permet donc de lister des programmes de plus de 35 k-octets. Voici un petit programme Basic très court pour ceux qui n'ont pas d'assembleur, qui chargera et sauvegardera sur cassette le programme n° 1. 10 AD = &9800Pour les DATA, reprendre le listing assembleur. Le programme ainsi sauvegardé pourra être chargé par la commande : MEMORY &97FF:LOAD "PROG1" et il sera appelé par CALL &9800. Le programme n° 2 est la continuité du n° 1. Le programme n° 2 lit un fichier sur la cassette et le sauvegarde sur une autre cassette en conservant lé type du fichier (protégé ou non) et son nom. Lorsque le message "Press PLAY then any key" apparaît, introduire la cassette source et effectuer la lecture. Dès l'apparition du message "Press REC and PLAY then any key", insérer une cassette vierge et effectuer la copie. La partie sauvegarde commence au label ENR. Au départ, on récupère l'adresse de la zone en-tête qui avait été sauvegardée en 9900 H, puis on recherche la longueur du nom pour initialiser le registre B avec cette valeur. COOPEN : ouvre un fichier en écriture avec les registres HL qui pointent le nom du fichier. Les registres DE pointent le buf-fer d'écriture et le registre B contient la longueur du nom du fichier. CODIR : stocke le fichier sur la cassette avec utilisation des registres suivants : – HL contiennent l'adresse de début,CPC N°1
|