EXTMEM |
Mémoire étendue |
---|---|
TRS-80 Pascal |
Syntaxe
TYPE MEMOPCODE = (M_RELEASE, M_TEST, M_RESERVE, M_GET, M_PUT); PROCEDURE EXTMEM(OPERATION:MEMOPCODE; BANK:INTEGER; LOCALADDRESS, EXTENDADDRESS, BLOCKSIZE:INTEGER;VAR STATUS:INTEGER); EXTERNAL; |
Description
Cette procédure permet à un programme Pascal d'utiliser les 64 premiers Ko de mémoire pour entreposer des données sous le contrôle du programme.
Remarques
- Le TRS-80 model 4 peut contenir jusqu'à 128 Ko de mémoire. Cette procédure permet à un programme Pascal d'utiliser les 64 premiers Ko de mémoire pour entreposer des données sous le contrôle du programme. Pour que cette procédure fonctionne, au moins une banque de 32 Ko doit être libre (non utilisée par memdisk ou un autre programme). Le paramètre BANK est utilisé pour spécifier le numéro de banque dans la mémoire étendue. Les deux banques supérieures d'une machine de 128 Ko sont les banques 1 et 2.
- Le code d'opération indique à EXTMEM l'opération à effectuer. La procédure EXTMEM fournit toutes les opérations nécessaires, y compris l'allocation et la libération de banques de mémoire. Dans chaque cas, la variable STATUS contient le code de résultat lorsque EXTMEM revient. Si STATUS vaut 0, l'opération s'est terminée avec succès, sinon il s'agit du code d'état renvoyé par le système d'exploitation. Voici la liste des opérations disponibles :
- Le Pascal standard définit un fichier comme une séquence et permet aux fichiers d'être lus ou écrits uniquement du début à la fin dans un ordre séquentiel. Les fichiers à accès aléatoire sont des fichiers dans lesquels les enregistrements peuvent être lus et écrits dans n'importe quel ordre.
- Les procédures et fonctions Pascal suivantes sont fournies pour permettre un accès aléatoire aux enregistrements d'un fichier. Lors de l'utilisation de fichiers à accès aléatoire, ces routines doivent être déclarées comme externes. Les déclarations externes suivantes pour les routines de fichiers aléatoires utilisent les types suivants :
Opération | Description |
---|---|
M_RELEASE | Cette opération permet d'indiquer que la banque de mémoire est libérée. |
M_TEST | Cette opération permet d'indiquer que la banque est testée pour déterminer son état actuel. Si l'état est 1, la banque est occupée (en cours d'utilisation) et si l'état est 0, la banque est disponible. |
M_RESERVE | Cette opération permet d'indiquer qu'il faut réserver la banque de mémoire sélectionnée et la rend disponible pour une utilisation par EXTMEM. La banque sélectionnée est marquée comme étant en cours d'utilisation. |
M_GET | Cette opération permet de copier un bloc de données de la mémoire étendue vers la mémoire locale. Le paramètre EXTENDADDRESS est l'adresse du bloc en mémoire étendue. Les adresses de la mémoire étendue vont de #8000 à #FFFF. Le paramètre LOCALADDRESS est l'adresse du bloc dans la mémoire locale. Cette adresse peut être obtenue en utilisant la fonction LOCATION en Pascal. Le paramètre BLOCKSIZE est la taille du bloc en octets. La taille d'une structure de données peut être obtenue à l'aide de la fonction SIZE en Pascal. |
M_PUT | Cette opération permet de copier un bloc de données de la mémoire locale vers la mémoire étendue. Les paramètres sont les mêmes que pour M_GET. |
Type | Description |
---|---|
filetype | Un type défini par l'utilisateur de format: filetype = FILE OF datatype. |
datatype | Un type prédéfini tel que INTEGER ou un type défini par l'utilisateur tel que datatype = RECORD fl : INTEGER; f2 : REAL END; Le nombre d'octets dans le type de données doit être compris entre 1 et 256. |
Exemple
L'exemple de programme suivant illustre l'utilisation de la procédure EXTMEM. Un tableau est entreposé et récupéré à partir de la mémoire étendue :
- PROGRAM EXTMEMSamples;
- TYPE
- MEMOPCODE = (M_RELEASE, M_TEST, M_RESERVE, M_GET, M_PUT);
- REAL_ARRAY = ARRAY[0..120] OF REAL;
- VAR
- R:REAL_ARRAY;
- STATUS:INTEGER;
-
- PROCEDURE EXTMEM(OPERATION:MEMOPCODE; BANK:INTEGER; LOCALADDRESS,EXTENDADDRESS,BLOCKSIZE:INTEGER;VAR STATUS:INTEGER); EXTERNAL;
-
- BEGIN
- { allouer la banque 1 de mémoire étendue }
- EXTMEM(M_RESERVE,1,LOCATION(R),#8000,SIZE(REAL_ARRAY),STATUS);
- IF STATUS <> 0 THEN WRITELN('Incapable d''allouer la banque 1')
- ELSE
- BEGIN
- { un code pour entrer des données dans le tableau devrait aller ici stocker les données dans la mémoire étendue }
- EXTMEM(M_PUT,1,LOCATION(R),#8000,SIZE(REAL_ARRAY),STATUS);
- IF STATUS <> 0 THEN BEGIN
- WRITELN('Ne peu pas entreposer les donnees en memoire');
- ESCAPE;
- END;
- { récupérer les données }
- EXTMEM(M_GET,1,LOCATION(R),#8000,SIZE(REAL_ARRAY),STATUS);
- IF STATUS <> 0 THEN BEGIN
- WRITELN('ne peut pas demander les donnees de la memoire etendue');
- ESCAPE;
- END;
- EXTMEM(M_RELEASE,1,LOCATION(R),#8000,SIZE(REAL_ARRAY),STATUS);
- END;
- WRITELN('test complete');
- END.
Dernière mise à jour : Vendredi, le 31 Juillet 2020