APPLICATIONSDIVERS ★ MIRAGES ★

MiragesApplications 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,
– octets 21 et 22 : adresse de chargement,
– octet 18 : type de fichier (0 : Basic non protégé, 1 : Basic protégé, 2 : binaire, 6 : ASCII),
– octets 24 et 25 : longueur totale du fichier,
– octets 26 et 27 : adresse d'exécution pour les programmes en code machine.


Les registres DE contiennent l'adresse de chargement, les registres BC contiennent la longueur totale du fichier. Le registre A contient le type du fichier (ces trois informations se trouvent aussi dans la zone en-tête pointée par HL). Dans le programme, nous sauvegarderons ces valeurs dans les adresses 9900 H et suivantes, mais ceci n'est pas utile, ces valeurs pouvant être récupérées à travers la zone en-tête, et dans . ce cas, seule la paire de registres HL devra être sauvegardée dans la pile et récupérée pour le traitement après CIDIR. Si l'opération d'ouverture s'est bien déroulée, le drapeau de CARRY est à 1, d'où le test qui renvoie en ABAN en cas d'erreur de lecture.

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 = &9800
20 FOR I = 0 TO &45
30 READ A:POKE AD + I,A
40 NEXT I
50 DATA &C3, &06, &98, &0D
60 DATA ...
70 DATA ...
100 SAVE "PROG1",B,&9800, &46
Pour 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,
– DE contiennent la longueur,
– BC contiennent l'adresse d'exécution si elle existe,
– A contient le type. L'adresse d'exécution a été récupérée dans la zone en-tête. Pour ceux qui n'ont pas d'assembleur, le programme Basic précédent est valable ; il suffit de remplacer la ligne 20 par 20 FOR I = 0 TO &76 et les lignes de DATA par le nouveau code machine. En modifiant la ligne 100, vous pourrez sauvegarder le programme sous le nom que vous souhaitez.
CPC N°1

★ ANNÉE: 1985
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTEUR: Denis BOURQUIN
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Mirages    (CPC  Revue)    FRENCHDATE: 2020-04-22
DL: 243
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » BIN2BAS (Happy Computer)
» Applications » RSX Line
» Applications » Abbreviations For Keywords (Popular Computing Weekly)
» Applications » Clock (Thorsten Giertz/CPC Amstrad International)
» Applications » Sporttabellenberechnung (Happy Computer)
» Applications » Tape Dump Utility
Je participe au site:
» 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 804 millisecondes et consultée 1592 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.