4/2 - Assembleur Z80 : Définitions et rappels de base4/2.8 - Les instructions RESTART des CPC Les CPC (464, 664 et 6128) possèdent plus de mémoire que ce que peut théoriquement adresser un Z 80. Effectivement, le bus d'adresse du Z 80 comporte 16 connecteurs, ce qui lui permet d'adresser 2*16 mémoires, soit 64 Ko. Si nous prenons le cas du CPC 464, il possède 64 Ko de RAM et 32 Ko de ROM. Pour que cette configuration mémoire soit possible, le 464 a recours à une technique spéciale appelée « Bank Switching » : la mémoire est divisée en plusieurs zones (appelées banques) qui se chevauchent. A chaque instant, sur deux banques qui se chevauchent, une seule est active. Le choix de l'accessibilité à chaque banque est entièrement commandé par soft (par logiciel). Les constructeurs du CPC ont eu la bonne idée de créer de nouvelles instructions pour passer d'une banque de mémoire à l'autre qui se trouvent dans les diverses banques de l'ordinateur. En fait, ces instructions n'ont pas été créées à proprement parler, mais des fonctions particulières ont été affectées aux cinq premières instructions RESTART (RST 1 à RST 5). Remarque : sur les ordinateurs CPC, les instructions RST 0 à 7 remplacent les instructions RST #00 à RST #38 habituellement rencontrées sur les ordinateurs à base de Z 80. L'instruction RST 0 signifie qu'un appel à la routine située en RAM à l'adresse #0000 va être effectué. L'instruction RST 1 signifie qu'un appel à la routine située en RAM à l'adresse #00xx va être effectué, ainsi de suite jusqu'à l'instruction RST 7 qui active une routine située en RAM à l'adresse #0038. RESTART 1 à 5 Les RESTART 1 à 5 sont utilisés comme des instructions JMP ou CALL, avec cependant une particularité de codage pour certains d'entre eux. Mais voyons comment utiliser ces instructions. RST 1 : LOW JUMP L'instruction RST 1 permet d'accéder à une routine située dans la ROM basse (entre les adresses #0000 et #3FFF). L'instruction RST 1 est utilisée de la manière suivante : RST 1 DW AdresseLes bits 0 à 13 de l'adresse définissent une adresse comprise entre 0 et #3FFF ou #C000 et #FFFF. Le bit 14 permet de sélectionner la RAM basse (s'il est à un) ou la ROM basse (s'il est à zéro). Le bit 1 5 permet de sélectionner la ROM Basic (s'il est à zéro) ou la RAM haute (s'il est à un).Par exemple, pour accéder à une routine d'adresse #1530 située dans la ROM basse, il faudra faire : RST 1 DW #1530+ #0000Pour accéder à la même routine, mais située dans la RAM, il faudra faire :RST 1 DW #1530+ #4000Les états de sélection de la RAM/ROM sont restitués à leurs valeurs d'origine en fin de traitement du RST 1.RST 2 : SIDE CALL Cette instruction RESTART permet d'accéder à une routine située dans une ROM d'extension. L'adresse à accéder dans la ROM d'extension est précisée dans le mot qui suit l'instruction RESTART, de la manière suivante : RST 2 DW AdresseLes bits 14 et 15 de l'adresse qui suit le RST 2 indique laquelle des 4 ROM d'extension va être accédée. Les bits 0 à 14 donnent l'adresse à accéder. L'adresse réelle est bien sûr obtenue en ajoutant l'adresse basse d'implantation de la première ROM d'extension, soit #C000. La ROM supérieure est validée, et la ROM inférieure dévalidée. Les états de sélection de la RAM/ROM sont restitués à leurs valeurs d'origine en fin de traitement du RST 2.RST 3 : FAR CALL L'instruction RST 3 permet d'accéder à une routine située n'importe où en RAM ou en ROM. La forme générale d'utilisation de cette instruction est la suivante : RST 3 DW Adresse DB ROM SelectL'adresse qui suit le RST 3 (sur 2 octets) indique l'adresse à accéder (entre #0000 et # FFFF).L'octet de ROM Select qui suit l'adresse indique la RAM ou la ROM dans laquelle va se faire l'appel. Cet octet est codé comme suit : 0..251 : ROM supérieure validée, ROM inférieure dévalidée 252 : ROM supérieure validée, ROM inférieure validée 253 : ROM supérieure validée, ROM inférieure dévalidée 254 : ROM supérieure dévalidée, ROM inférieure validée 255 : ROM supérieure dévalidée, ROM inférieure dévalidée Les états de sélection de la RAM/ROM sont restitués à leurs valeurs d'origine en fin de traitement du RST 3. RST 4 : RAM LAM Cette instruction permet de lire un octet en mémoire à l'adresse contenue dans le registre HL au moment de l'appel. Les RAM supérieure et inférieure sont dévalidées pendant l'exécution d'un RESTART 4. Elle s'utilise donc de la manière suivante : LD HL, Adresse en RAM RST 4 RST 5 : FIRST JUMP[ Cette instruction permet d'accéder à une routine contenue dans la ROM inférieure. L'adresse de la routine à accéder (entre #0000 et #3FFF) est placée dans le mot qui suit l'instruction RST 5 de la manière suivante : RST 5 DW AdresseLa ROM inférieure est validée pendant l'instruction RST 5, puis dévalidée en sortie du RESTART. L'état de la ROM supérieure reste par contre inchangé.Les autres RESTART RST 0 : RESET L'instruction RST 0 est un RESET soft qui place l'ordinateur dans le même état d'initialisation qui suit sa mise sous tension. RST 6 : USER RESTART L'instruction RST 6 est réservée à l'utilisateur. Elle peut être utilisée pour étendre et personnaliser le jeu d'instructions du Z 80 en utilisant la même méthode que pour les RST 1 à 5. Lorsque la ROM inférieure est validée et qu'une instruction RST 5 est exécutée : - l'état des ROM est sauvegardé en RAM à l'adresse #002B,
- la ROM inférieure est dévalidée,
- le code situé en #0030 en RAM est exécuté par CALL #0030.
Lorsque la ROM inférieure est dévalidée et qu'une instruction RST 5 est exécutée :- le code situé en #0030 en RAM est exécuté par CALL #0030.
RST 7 : INTERRUPTCette instruction est réservée aux interruptions et ne peut être activée par le programme. CPCrulez[Content Management System] v8.732-desktop/c Page créée en 807 millisecondes et consultée 516 foisL'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. |
|
|