Mode 8080
Le mode 8080 est un mode permettant d'émuler le fonctionnement d'exécution d'un programme développer pour l'assembleur des microprocesseurs 8080 et 8085 d'Intel. Les microprocesseurs μPD70108 et μPD70116 disposent de deux modes de fonctionnement du microprocesseur: l'émulation native et l'émulation 8080. En mode natif, l'μPD70108 et μPD70116 exécutent toutes les instructions du jeu d'instructions 8086, à l'exception des instructions RETEM et CALLN. En mode 8080, le microprocesseur exécute le jeu d'instructions pour le μPD8080AF et les instructions RETEM et CALLN. Ces modes sont sélectionnés par des instructions spéciales ou en utilisant une interruption. Le bit le plus significatif du PSW est un indicateur de mode (MD) signalant la sélection du mode de contrôle.
Mode natif et changement de mode 8080
Lorsque le mode de fonctionnement passe de natif à l'émulation ou inversement, les registres sont cartographiés dans le mode d'émulation, comme illustré dans le tableau suivant :
Les 8 bits inférieurs du registre AW et les 8 bits inférieurs et supérieurs des registres BW, CW et DW du μPD70108 et du μPD70116 servent d'accumulateur et de 6 registres à usage général du μPD8080AF. Les 8 bits inférieurs du PSW du μPD70108 et du μPD70116 servant d'indicateurs μPD8080AF. Ces drapeaux correspondent aux 8 bits inférieurs du PSW. Le registre SP sert de pointeur de pile de l'μPD8080AF en mode natif, tandis que le registre BP agit en tant que pointeur de pile en mode d'émulation. De la même manière, les μPD70108 et μPD70116 utilisent des pointeurs de pile indépendants et des zones de pile dans chaque mode. L'utilisation de pointeurs de pile indépendants empêche la destruction du contenu d'un pointeur de pile dans un mode en raison d'une mauvaise utilisation du pointeur de pile dans l'autre mode. Les registres AH, SP, IX et IY et les registres à 4 segments (PS, SS, DS0, DS1) ne sont pas adressables à partir du mode d'émulation. En mode d'émulation, la base de segment du programme est déterminée par le registre PS dont le contenu a été spécifié par un vecteur d'interruption avant que le microprocesseur ne soit entrée en mode d'émulation. La base de segment des opérandes de mémoire (y compris la pile) est déterminée par le registre DS0 dont le programmeur spécifie le contenu avant que le microprocesseur ne passe en mode émulation. La fonction de mise en attente du bus (disponible via le signal de demande de mise en attente / d'accusé de réception) et la fonction de veille (disponible lorsque l'instruction HLT est exécutée) peuvent être utilisées en mode émulation de la même manière qu'en mode natif. Les μPD70108 et μPD70116 fonctionnent en termes de matériel BCU normal, même en mode émulation. Par conséquent, les opérations d'entrée/sortie entre l'μPD70108 et le μPD70116 et les circuits périphériques ou la mémoire sont exactement les mêmes que celles effectuées en mode natif. Cependant, les fonctions BUSLOCK et POLL ne sont pas disponibles pour une utilisation en mode d'émulation. Pour déterminer de manière externe si le μPD70108 ou le μPD70116 sont en mode d'émulation, vérifiez que le signal PS3 d'état du processeur a été émis pendant un cycle de bus μPD70108 ou μPD70116 au maximum. Le signal est toujours à un niveau bas en mode natif.
Le microprocesseur peut repasser en mode émulation lorsque INT est présente (même si les interruptions sont désactivées) et relancer l'exécution du programme en commençant par l'instruction suivant l'instruction HLT. Cette situation est vrai uniquement si le microprocesseur passe en mode veille à partir du mode émulation. Si RESET ou NMI est présent au lieu de INT - ou si INT est présent alors que les interruptions sont activées - le microprocesseur passera en mode natif à partir du mode veille. Si cela se produit, le microprocesseur peut entrer de nouveau en mode d'émulation à partir du mode natif. Autrement dit, à partir de la routine d'interruption NMI ou INT en mode natif, jusqu'à l'exécution de l'instruction RETI. Si le microprocesseur est entrée en mode veille à partir du mode natif, elle peut entrer dans le mode natif en entrant RESET, NMI ou INT, que les interruptions soient désactivées ou activées.
Natif à mode d'émulation 8080
Deux instructions provoquent le changement du mode de fonctionnement du mode d'émulation 8080 natif. Les instructions sont BRKMEM (pause pour émulation) et RETI (retour d'interruption).
Instruction de BRKEM
L'instruction BRKEM lance le mode d'émulation 8080. Il enregistre le contenu de PSW, PS et PC et remet l'indicateur MD à 0. Les valeurs de base et de déplacement du segment sont ensuite chargées dans les registres PS et PC, respectivement, à partir de la table de vecteurs d'interruption. Le numéro de vecteur d'interruption est spécifié par l'opérande immédiat de l'instruction BRKEM. Voici la syntaxe de l'instruction :
BRKEM imm8 |
Lorsque le mode d'émulation 8080 est lancé avec l'instruction BRKEM (MD = 0), le microprocesseur exécute le programme dans la zone de segment de 64 Ko spécifiée par le contenu du PS, à partir de l'adresse indiquée par le contenu du PC. Le code d'instruction extrait à ce stade est interprété comme une instruction μPD8080AF et est exécuté.
Instruction RETI
L'instruction RETI est généralement utilisée pour renvoyer l'exécution du programme à la routine principale à partir d'une routine d'interruption lancée par une instruction d'interruption externe ou BRK ou CALLN. Voici sa syntaxe :
RETI |
Lorsque l'instruction RETI rétablit le contenu de PSW, PS et PC, elle restaure également l'état de l'indicateur de mode (MD) avant que le mode soit passé de 8080 à natif. Cet indicateur MD restauré permet au microprocesseur de revenir en mode émulation.
Pour cette raison, si l'instruction RETI est exécutée en mode natif à la fin du programme d'interruption démarré par l'instruction d'interruption CALLN ou par une interruption externe alors que le microprocesseur est en mode 8080, celle-ci peut entrer à nouveau dans le mode 8080.
Émulation 8080 à mode natif
Les signaux et instructions suivants permettent de changer le mode de fonctionnement de 8080 à natif.
- RESET
- NMI ou INT
- CALLN (appel natif)
- RETEM (retour de l'émulation)
Opération RESET
Lorsque le signal RESET est présent, une opération de réinitialisation est effectuée sur le microprocesseur de la même manière qu'en mode natif. L'émulation 8080 en cours est donc abandonnée.
Opération NMI ou INT
Lorsque le signal NMI ou INT est présent, le processus d'interruption est exécuté comme en mode natif. L'exécution du programme du microprocesseur reviendra à la routine principale à partir de la routine d'interruption en mode natif. En mode natif, le microprocesseur peut entrer à nouveau dans le mode d'émulation 8080 en exécutant l'instruction RETI.
Instruction CALLN
L'instruction CALLN est utilisée exclusivement en mode d'émulation lors de l'appel d'un sous-programme en mode natif non écrit en code 8080. Si l'instruction CALLN est exécutée en mode 8080, le microprocesseur enregistre le contenu de PS, PC et PSW et met l'indicateur de mode à 1. Cette instruction charge également la base de segment d'un vecteur d'interruption dans le registre de segment (PS) et le décalage par rapport au compteur de programme (PC). Lorsque l'instruction RETI est exécutée à la fin de la routine d'interruption, l'exécution du programme peut être renvoyée à la routine principale en mode d'émulation 8080 à partir de la routine d'interruption en mode natif démarrée par l'instruction CALLN.
Instruction RETEM
L'instruction RETEM est utilisée exclusivement comme mode de retour du mode 8080 au mode natif lorsque l'instruction BRKEM a provoqué le passage au mode 8080. L'instruction RETEM du microprocesseur reviendra du programme d'interruption BRKEM au programme principal. Par conséquent, le contenu de PS, PC et PSW est restauré et le microprocesseur revient en mode natif. A ce stade, l'indicateur MD (MD=1), ayant été enregistré dans la pile par l'instruction BRKEM, est restauré, ceci permettant au microprocesseur de passer en mode natif.
Émulation imbriquée
Dans un mode natif appelé par CALLN ou une interruption NMI ou INT du mode d'émulation, le mode d'émulation ne peut pas être rappelé par une instruction BRKEM. Si cette imbrication est tentée, MD ne fonctionnera pas normalement et un fonctionnement normal est improbable.
Remarque
- Le mode 8080 n'a pas été reprit par les générations suivantes de microprocesseur. Ainsi, il est donc uniquement disponible avec les séries NEC V20/V30.