Motorola 68000 - Motorola 68000

Architecture Motorola 68000
Designer Motorola
Morceaux 16/32 bits
Introduit 1979 ; il y a 42 ans ( 1979 )
Concevoir SCRC
Branchement Code d'état
Endianité Gros
Registres
Processeur Motorola 68000
informations générales
Lancé 1979
Conçu par Motorola
Performance
Largeur des données 16 bits
Largeur de l'adresse 24 bits
Architecture et classement
Jeu d'instructions Motorola série 68000
Spécifications physiques
Transistors
Paquets)
Histoire
Successeur Motorola 68010

Le Motorola 68000 ( soixante-huit mille ; également appelé m68k , Motorola 68k , soixante-huit-kay ) est un microprocesseur d' ordinateur à jeu d'instructions complexes (CISC) 16/32 bits , introduit en 1979 par Motorola Semiconductor Products Sector.

La conception implémente un jeu d' instructions 32 bits , avec des registres 32 bits et un bus de données interne 16 bits . Le bus d'adresses est de 24 bits et n'utilise pas de segmentation mémoire , ce qui facilite sa programmation. En interne, il utilise un 16 bits de données unité arithmétique et logique (ALU) et deux autres 16 bits UMM principalement utilisé pour les adresses, et a une externe 16 bits bus de données . Pour cette raison, Motorola l'a appelé un processeur 16/32 bits.

En tant que l'un des premiers processeurs largement disponibles avec un jeu d'instructions 32 bits et fonctionnant à des vitesses relativement élevées pour l'époque, le 68k était une conception populaire dans les années 1980. Il a été largement utilisé dans une nouvelle génération d' ordinateurs personnels avec des interfaces utilisateur graphiques , notamment le Macintosh , l' Amiga , l' Atari ST et le X68000 . La console Mega Drive de 1988 est également alimentée par un 68000.

Le 68k a rapidement été étendu à davantage de membres de la famille, mettant en œuvre des ALU 32 bits complètes dans le cadre de la série croissante Motorola 68000 . Le 68k d'origine est généralement à compatibilité logicielle avec le reste de la ligne, bien qu'il soit limité à un bus externe de 16 bits de large.

Pré-version de la puce XC68000 fabriquée en 1979
Mourir de Motorola 68000

Après 42 ans de production , l' architecture 68000 est toujours en service.

Histoire

Motorola MC68000 ( boîtier de support de puce sans plomb (CLCC))

Le premier processeur largement produit de Motorola était le Motorola 6800 . Bien qu'il s'agisse d'une conception performante, il a été éclipsé par des conceptions plus puissantes, telles que le Zilog Z80 , et des conceptions moins coûteuses, telles que la technologie MOS 6502 (MOS 6502). Alors que les perspectives de vente du 6800 diminuaient, Motorola a commencé un nouveau design pour le remplacer. C'est devenu le projet Motorola Advanced Computer System on Silicon, ou MACSS, lancé en 1976.

Le MACSS visait à développer une architecture entièrement nouvelle sans rétrocompatibilité avec le 6800. Il conserve finalement un mode de compatibilité de protocole de bus pour les périphériques 6800 existants, et une version avec un bus de données 8 bits a été produite. Cependant, les concepteurs se sont principalement concentrés sur l'avenir, ou la compatibilité ascendante , ce qui donne à la conception 68000 une longueur d'avance par rapport aux architectures de jeux d' instructions (ISA) 32 bits ultérieures . Par exemple, les registres du CPU ont une largeur de 32 bits, bien que peu de structures autonomes dans le processeur lui-même fonctionnent sur 32 bits à la fois. L'équipe MACSS s'est fortement appuyée sur l'influence de la conception de processeurs de mini - ordinateurs , tels que les systèmes PDP-11 et VAX , qui sont également basés sur des microcodes .

Au milieu des années 1970, les fabricants de microprocesseurs 8 bits se sont précipités pour introduire la génération 16 bits. National Semiconductor avait été le premier avec ses processeurs IMP-16 et PACE en 1973-1975, mais ceux-ci avaient des problèmes de vitesse. Intel avait travaillé sur leur Intel iAPX 432 16/32 bits avancé (alias 8800) depuis 1975 et leur Intel 8086 depuis 1976 (il a été introduit en 1978 mais s'est répandu sous la forme du 8088 presque identique dans le PC IBM quelques années plus tard). L'arrivée tardive dans l'arène 16 bits offre au nouveau processeur plus de transistors (environ 40 000 actifs contre 20 000 actifs dans le 8086), des macro-instructions 32 bits et une facilité d'utilisation générale acclamée.

Le MC68000 original a été fabriqué à l' aide d'un processus HMOS avec une taille de caractéristique de 3,5  µm . Formellement introduits en septembre 1979, les premiers échantillons ont été publiés en février 1980, avec des puces de production disponibles en vente libre en novembre. Les cotes de vitesse initiales sont de 4, 6 et 8  MHz . Les puces 10 MHz sont devenues disponibles en 1981 et les puces 12,5 MHz en juin 1982. La version 16,67 MHz "12F" du MC68000, la version la plus rapide de la puce HMOS originale, n'a été produite qu'à la fin des années 1980.

IBM a envisagé le 68000 pour le PC IBM mais a choisi l' Intel 8088 car le 68000 n'était pas prêt ; Walden C. Rhines a écrit que « Motorola, avec sa technologie supérieure, a perdu le concours de design le plus important des 50 dernières années ». (IBM Instruments a brièvement vendu les systèmes informatiques de laboratoire IBM System 9000 basés sur 68000. ) Le jeu d'instructions 68k est particulièrement bien adapté à la mise en œuvre d'Unix, et le 68000 et ses successeurs sont devenus les processeurs dominants pour les stations de travail Unix, y compris les stations de travail Sun et Apollo/ Postes de travail de domaine . Le 68000 est également utilisé pour les ordinateurs grand public tels que l' Apple Lisa , le Macintosh , l' Amiga et l' Atari ST . Le 68000 est utilisé dans les systèmes Microsoft Xenix , ainsi que dans les premiers serveurs basés sur NetWare Unix. Le 68000 est utilisé dans la première génération d' imprimantes laser de bureau , y compris l'original Apple Inc. LaserWriter et le HP LaserJet .

En 1981, Motorola a présenté le Motorola 68000 Educational Computer Board , un ordinateur monocarte à des fins éducatives et de formation qui, en plus du 68000 lui-même, contenait de la mémoire, des périphériques d'E/S, une minuterie programmable et une zone de câblage pour des circuits personnalisés. La carte est restée utilisée dans les collèges américains comme outil d'apprentissage de la programmation en assembleur jusqu'au début des années 1990.

En 1982, le 68000 a reçu une mise à jour mineure de son architecture de jeu d'instructions (ISA) pour prendre en charge la mémoire virtuelle et se conformer aux exigences de virtualisation de Popek et Goldberg . La puce mise à jour s'appelle 68010 . Il ajoute également un nouveau "mode boucle" qui accélère les petites boucles et augmente les performances globales d'environ 10 % aux mêmes vitesses d'horloge. Une autre version étendue, qui expose 31 bits du bus d'adresses, a également été produite en petites quantités sous le nom de 68012 .

Pour prendre en charge des systèmes moins coûteux et des applications de contrôle avec des tailles de mémoire plus petites, Motorola a introduit le MC68008 compatible 8 bits , également en 1982. Il s'agit d'un 68000 avec un bus de données 8 bits et un bus d'adresse plus petit (20 bits). Après 1982, Motorola a consacré plus d'attention aux projets 68020 et 88000 .

Second approvisionnement

Hitachi HD68000
Thomson TS68000

Plusieurs autres sociétés étaient des fabricants de deuxième source du HMOS 68000. Parmi elles, Hitachi (HD68000), qui a réduit la taille des fonctionnalités à 2,7 µm pour leur version 12,5 MHz, Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (à l'origine EF68000 et plus tard TS68000), et Toshiba (TMP68000). Toshiba était également un fabricant de deuxième source du CMOS 68HC000 (TMP68HC000).

Les variantes cryptées du 68000, à savoir les Hitachi FD1089 et FD1094, stockent les clés de déchiffrement des opcodes et des données d'opcode dans une mémoire sauvegardée par batterie et ont été utilisées dans certains systèmes d'arcade Sega, y compris le System 16, pour empêcher le piratage et les jeux de contrebande illégaux.

Versions CMOS

Motorola MC68HC000LC8

Le 68HC000, la première version CMOS du 68000, a été conçu par Hitachi et introduit conjointement en 1985. La version de Motorola s'appelle MC68HC000, tandis que celle d'Hitachi est HD68HC000. Le 68HC000 offre des vitesses de 8 à 20 MHz. À l'exception de l'utilisation de circuits CMOS, il se comportait de manière identique au HMOS MC68000, mais le passage au CMOS a considérablement réduit sa consommation d'énergie. Le HMOS MC68000 d'origine consommait environ 1,35  watt à une température ambiante de 25  °C , quelle que soit la vitesse d'horloge, tandis que le MC68HC000 ne consommait que 0,13 watt à 8 MHz et 0,38 watt à 20 MHz. (Contrairement aux circuits CMOS, le HMOS consomme toujours de l'énergie lorsqu'il est inactif, de sorte que la consommation d'énergie varie peu avec la fréquence d'horloge.) Apple a sélectionné le 68HC000 pour une utilisation dans le Macintosh Portable .

Motorola a remplacé le MC68008 par le MC68HC001 en 1990. Cette puce ressemble au 68HC000 à bien des égards, mais son bus de données peut fonctionner en mode 16 bits ou 8 bits, selon la valeur d'une broche d'entrée à la réinitialisation. Ainsi, comme le 68008, il peut être utilisé dans des systèmes avec des mémoires 8 bits moins chères.

L'évolution ultérieure du 68000 s'est concentrée sur des applications de contrôle embarquées plus modernes et des périphériques sur puce. La puce 68EC000 et le noyau SCM68000 suppriment le bus périphérique M6800 et excluent l'instruction MOVE from SR des programmes en mode utilisateur, faisant du 68EC000 et du 68SEC000 les seuls 68000 processeurs non compatibles à 100% avec les processeurs 68000 précédents lorsqu'ils sont exécutés en mode utilisateur. Lorsqu'il est exécuté en mode superviseur, il n'y a aucune différence. En 1996, Motorola a mis à jour le noyau autonome avec des circuits entièrement statiques, ne consommant que 2  µW en mode basse consommation, en l'appelant le MC68SEC000.

Motorola a cessé la production des HMOS MC68000 et MC68008 en 1996, mais sa société dérivée Freescale Semiconductor produisait toujours les microcontrôleurs MC68HC000, MC68HC001, MC68EC000 et MC68SEC000, ainsi que les microcontrôleurs MC68302 et MC68306 et les versions ultérieures de la famille DragonBall . Les descendants architecturaux du 68000, les familles 680x0 , CPU32 et Coldfire , étaient également toujours en production. Plus récemment, avec la fermeture de l'usine Sendai, toutes les pièces 68HC000, 68020, 68030 et 68882 ont été abandonnées, ne laissant que le 68SEC000 en production.

En tant que noyau de microcontrôleur

Depuis qu'il a été remplacé par de "vrais" microprocesseurs 32 bits, le 68000 est utilisé comme noyau de nombreux microcontrôleurs . En 1989, Motorola a introduit le processeur de communication MC68302 .

Applications

Deux processeurs Hitachi 68HC000 utilisés sur un PCB de jeu d'arcade

Lors de son introduction, le 68000 a d'abord été utilisé dans des systèmes coûteux, notamment des micro-ordinateurs multi - utilisateurs comme le WICAT 150, les premiers ordinateurs d' Alpha Microsystems , Sage II / IV , Tandy 6000 / TRS-80 Model 16 et Fortune 32:16 ; mono-utilisateur postes de travail tels que Hewlett-Packard 's HP 9000 série 200 systèmes, le premier Apollo / domaine des systèmes, Sun Microsystems de Sun-1 , et le concept Corvus ; et des terminaux graphiques comme le VAXstation 100 de Digital Equipment Corporation et les IRIS 1000 et 1200 de Silicon Graphics. Les systèmes Unix sont rapidement passés aux générations ultérieures plus performantes de la ligne 68k, qui sont restées populaires sur ce marché tout au long des années 1980.

Au milieu des années 1980, la baisse des coûts de production a rendu le 68000 viable pour une utilisation dans les ordinateurs personnels et domestiques , à commencer par l' Apple Lisa et le Macintosh , suivis par le Commodore Amiga , l' Atari ST et le Sharp X68000 . D'autre part, le micro-ordinateur Sinclair QL était l'utilisation commerciale la plus importante du 68008, avec ses dérivés, tels que le terminal professionnel ICL One Per Desk . Helix Systems (dans le Missouri, aux États-Unis) a conçu une extension du bus SWTPC SS-50 , le SS-64, et a produit des systèmes construits autour du processeur 68008.

Alors que l'adoption de RISC et x86 a déplacé la série 68000 en tant que processeur de bureau/station de travail, le processeur a trouvé une utilisation substantielle dans les applications embarquées . Au début des années 1990, des quantités de 68000 processeurs pouvaient être achetées pour moins de 30  USD par pièce.

Les fabricants de jeux vidéo ont utilisé le 68000 comme colonne vertébrale de nombreux jeux d'arcade et consoles de jeux à domicile : Atari's Food Fight , à partir de 1982, a été l'un des premiers jeux d'arcade basés sur le 68000. D' autres ont inclus Sega 's système 16 , Capcom ' s système CP et CPS-2 , et SNK de Neo Geo . Fin des années 1980, le 68000 est assez bon marché pour les consoles de jeux puissance maison, comme Sega lecteur / Genesis Mega console et aussi le Mega CD attache pour elle (un système Mega CD dispose de trois unités centrales, deux d'entre eux 68000). La console multiprocesseur Atari Jaguar de 1993 utilisait un 68000 comme puce de support, bien que certains développeurs l'aient utilisé comme processeur principal en raison de leur familiarité. La console multiprocesseur Sega Saturn de 1994 utilisait le 68000 comme coprocesseur sonore (tout comme le Mega Drive/Genesis utilise le Z80 comme coprocesseur pour le son et/ou à d'autres fins). En 1995, le 68000 était devenu une console de jeu portable , la Genesis Nomad de Sega , en tant que processeur principal.

Certains jeux d'arcade (tels que Steel Gunner et d'autres basés sur Namco System 2 ) utilisent une configuration double CPU 68000, et des systèmes avec une configuration triple CPU 68000 existent également (tels que Galaxy Force et d'autres basés sur la Sega Y Board), ainsi que une configuration quad 68000 CPU, qui a été utilisée par Jaleco (un 68000 pour le son a une fréquence d'horloge inférieure à celle des autres 68000 CPU) pour des jeux tels que Big Run et Cisco Heat ; un autre, le cinquième 68000 (à une fréquence d'horloge différente de celle des autres processeurs 68000) a été utilisé dans le jeu d'arcade Jaleco Wild Pilot pour le traitement des entrées/sorties (E/S).

Le 68000 a également connu un grand succès en tant que contrôleur embarqué. Dès 1981, les imprimantes laser telles que l'Imagen Imprint-10 étaient contrôlées par des cartes externes équipées du 68000. La première HP LaserJet , introduite en 1984, était équipée d'un 68000 8 MHz intégré. D'autres fabricants d'imprimantes ont adopté le 68000, y compris Apple avec l'introduction de la LaserWriter en 1985, la première imprimante laser PostScript . Le 68000 a continué à être largement utilisé dans les imprimantes tout au long des années 1980, persistant jusque dans les années 1990 dans les imprimantes bas de gamme.

Le 68000 a également connu le succès dans le domaine des systèmes de contrôle industriel. Parmi les systèmes qui ont bénéficié d'avoir un 68000 ou un dérivé comme microprocesseur, il y avait des familles de contrôleurs logiques programmables (PLC) fabriqués par Allen-Bradley , Texas Instruments et par la suite, suite à l'acquisition de cette division de TI, par Siemens . Les utilisateurs de tels systèmes n'acceptent pas l'obsolescence des produits au même rythme que les utilisateurs domestiques, et il est tout à fait probable qu'en dépit d'avoir été installés il y a plus de 20 ans, de nombreux contrôleurs basés sur 68000 continueront de fonctionner de manière fiable jusqu'au 21e siècle.

Dans un certain nombre d' oscilloscopes numériques des années 80, le 68000 a été utilisé comme processeur d'affichage de forme d'onde ; certains modèles, y compris le LeCroy 9400/9400A, utilisent également le 68000 comme processeur mathématique de forme d'onde (y compris l'addition, la soustraction, la multiplication et la division de deux formes d'onde/références/mémoires de formes d'onde), et certains oscilloscopes numériques utilisant le 68000 (y compris le 9400/9400A ) peut également exécuter des fonctions de transformée de Fourier rapides sur une forme d'onde.

Les microcontrôleurs 683XX , basés sur l'architecture 68000, sont utilisés dans les équipements de réseau et de télécommunications, les décodeurs de télévision, les instruments de laboratoire et médicaux, et même les calculatrices portables. Le MC68302 et ses dérivés ont été utilisés dans de nombreux produits de télécommunications de Cisco, 3com, Ascend, Marconi, Cyclades et autres. Les anciens modèles de PDA Palm et de Handspring Visor utilisaient le DragonBall , un dérivé du 68000. AlphaSmart a utilisé la famille DragonBall dans les versions ultérieures de ses traitements de texte portables. Texas Instruments a utilisé le 68000 dans ses calculatrices graphiques haut de gamme, les séries TI-89 et TI-92 et Voyage 200 .

Une version modifiée du 68000 a constitué la base de l' émulateur matériel IBM XT/370 du processeur System 370.

Architecture

Motorola 68000 s'enregistre
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (position du bit)
Registres de données
J0 Données 0
D1 Données 1
D2 Données 2
D3 Données 3
D4 Données 4
D5 Données 5
D6 Données 6
D7 Données 7
Registres d'adresses
  A0                           Adresse 0
  A1                           Adresse 1
  A2                           Adresse 2
  A3                           Adresse 3
  A4                           Adresse 4
  A5                           Adresse 5
  A6                           Adresse 6
Pointeurs de pile
  A7 / USP                        Pointeur de pile (utilisateur)
  A7' / SSP                        Pointeur de pile (superviseur)
Compteur de programme
  ordinateur                           Compteur de programme
Registre des codes de condition
  1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (position du bit)
  T S M 0 je 0 0 0 X N Z V C RCC

Bus d'adresses

Le 68000 dispose d'un bus d'adresse externe 24 bits et de deux signaux de sélection d'octets "remplacés" A0. Ces 24 lignes peuvent donc adresser 16 Mo de mémoire physique avec une résolution en octets. Le stockage et le calcul des adresses utilisent 32 bits en interne ; cependant, les 8 bits d'adresse de poids fort sont ignorés en raison du manque physique de broches de périphérique. Cela lui permet d'exécuter un logiciel écrit pour un espace d'adressage logiquement plat de 32 bits , tout en accédant uniquement à un espace d'adressage physique de 24 bits. L'intention de Motorola avec l'espace d'adressage interne 32 bits était la compatibilité ascendante, rendant possible l'écriture du logiciel 68000 qui tirerait pleinement parti des implémentations 32 bits ultérieures du jeu d'instructions 68000.

Cependant, cela n'a pas empêché les programmeurs d'écrire des logiciels incompatibles. Un logiciel "24 bits" qui rejetait l'octet d'adresse supérieur, ou l'utilisait à des fins autres que l'adressage, pouvait échouer sur les implémentations 32 bits 68000. Par exemple, les premières versions (pré-7.0) de Mac OS d'Apple utilisaient l'octet de poids fort des pointeurs principaux de bloc de mémoire pour contenir des indicateurs tels que verrouillé et purgeable . Les versions ultérieures du système d'exploitation ont déplacé les drapeaux vers un emplacement à proximité, et Apple a commencé à expédier des ordinateurs dotés de ROM " 32 bits propres " à partir de la sortie du Mac IIci de 1989.

La famille 68000 stocke des entiers multi-octets en mémoire dans l'ordre big-endian .

Registres internes

L' UC possède huit registres de données à usage général 32 bits (D0-D7) et huit registres d'adresses (A0-A7). Le dernier registre d'adresse est le pointeur de pile et les assembleurs acceptent l'étiquette SP comme équivalente à A7. C'était un bon nombre de registres à l'époque à bien des égards. Il était suffisamment petit pour permettre au 68000 de répondre rapidement aux interruptions (même dans le pire des cas où les 8 registres de données D0-D7 et 7 registres d'adresse A0-A6 devaient être sauvegardés, 15 registres au total), et pourtant suffisamment grand pour rendre la plupart des calculs rapides, car ils pourraient être effectués entièrement dans le processeur sans conserver de résultats partiels en mémoire. (Notez qu'une routine d'exception en mode superviseur peut également enregistrer le pointeur de pile utilisateur A7, qui totaliserait 8 registres d'adresses. Cependant, la conception du pointeur à double pile (A7 et mode superviseur A7') du 68000 rend cela normalement inutile, sauf lorsqu'un changement de tâche est effectué dans un système multitâche.)

Le fait d'avoir les deux types de registres permet à une adresse de 32 bits et à un calcul de données de 16 bits d'avoir lieu en même temps. Cela permet de réduire le temps d'exécution des instructions car les adresses et les données peuvent être traitées en parallèle.

Registre d'état

Le 68000 a un registre d'état de 16 bits. Les 8 bits supérieurs sont l'octet système, et sa modification est privilégiée. Les 8 bits inférieurs sont l'octet utilisateur, également connu sous le nom de registre de code de condition (CCR), et sa modification n'est pas privilégiée. Les opérations de comparaison, d'arithmétique et de logique 68000 modifient les codes de condition pour enregistrer leurs résultats en vue d'une utilisation par des sauts conditionnels ultérieurs. Les bits de code de condition sont "zéro" (Z), "transporter" (C), "débordement" (V), "prolonger" (X) et "négatif" (N). Le drapeau "extend" (X) mérite une mention spéciale, car il est distinct du drapeau carry . Cela permet de séparer le bit supplémentaire des opérations arithmétiques, logiques et de décalage du report pour le flux de contrôle et la liaison.

Jeu d'instructions

Les concepteurs ont tenté de rendre le langage d'assemblage orthogonal . C'est-à-dire que les instructions sont divisées en opérations et modes d'adresse , et presque tous les modes d'adresse sont disponibles pour presque toutes les instructions. Il y a 56 instructions et une taille d'instruction minimale de 16 bits. De nombreuses instructions et modes d'adressage sont plus longs pour inclure plus de bits d'adresse ou de mode.

Niveaux de privilège

Le CPU, et plus tard toute la famille, implémente deux niveaux de privilèges. Le mode utilisateur donne accès à tout sauf aux instructions privilégiées telles que les contrôles de niveau d'interruption. Le privilège de superviseur donne accès à tout. Une interruption devient toujours une supervision. Le bit superviseur est stocké dans le registre d'état et est visible par les programmes utilisateurs.

Un avantage de ce système est que le niveau superviseur dispose d'un pointeur de pile séparé. Cela permet à un système multitâche d'utiliser de très petites piles pour les tâches, car les concepteurs n'ont pas à allouer la mémoire requise pour contenir les trames de pile d'un empilement maximal d'interruptions.

Interruptions

La CPU reconnaît sept niveaux d' interruption . Les niveaux 1 à 5 sont strictement prioritaires. C'est-à-dire qu'une interruption de numéro supérieur peut toujours interrompre une interruption de numéro inférieur. Dans le registre d'état, une instruction privilégiée permet de définir le niveau d'interruption minimum actuel, bloquant les interruptions de priorité inférieure ou égale. Par exemple, si le niveau d'interruption dans le registre d'état est défini sur 3, des niveaux supérieurs de 4 à 7 peuvent provoquer une exception. Le niveau 7 est une interruption non masquable déclenchée par niveau (NMI). Le niveau 1 peut être interrompu par n'importe quel niveau supérieur. Le niveau 0 signifie aucune interruption. Le niveau est stocké dans le registre d'état et est visible par les programmes de niveau utilisateur.

Les interruptions matérielles sont signalées à la CPU à l'aide de trois entrées qui codent la priorité d'interruption en attente la plus élevée. Un codeur séparé est généralement requis pour coder les interruptions, bien que pour les systèmes qui ne nécessitent pas plus de trois interruptions matérielles, il soit possible de connecter les signaux d'interruption directement aux entrées codées au prix d'une complexité logicielle accrue. Le contrôleur d'interruption peut être aussi simple qu'un encodeur prioritaire 74LS148 , ou peut faire partie d'une puce périphérique d' intégration à très grande échelle (VLSI) telle que le périphérique multifonction MC68901 (utilisé dans la gamme d'ordinateurs Atari ST et Sharp X68000 ), qui a également fourni un UART , une minuterie et des E/S parallèles.

La "table d'exception" ( adresses de vecteur d'interruption de table de vecteur d' interruption) est fixée aux adresses 0 à 1023, autorisant 256 vecteurs de 32 bits. Le premier vecteur (RESET) se compose de deux vecteurs, à savoir l'adresse de pile de départ et l'adresse de code de départ. Les vecteurs 3 à 15 sont utilisés pour signaler diverses erreurs : erreur de bus, erreur d' adresse, instruction illégale , division zéro , vecteur CHK et CHK2, violation de privilège (pour bloquer l' escalade de privilège ) et certains vecteurs réservés qui sont devenus un émulateur de ligne 1010, un émulateur de ligne 1111 , et point d'arrêt matériel . Le vecteur 24 démarre les interruptions réelles : interruption parasite (pas d'accusé de réception matériel) et autovecteurs de niveau 1 à 7, puis les 16 vecteurs TRAP, puis d'autres vecteurs réservés, puis les vecteurs définis par l'utilisateur.

Comme au minimum le vecteur d'adresse de code de départ doit toujours être valide lors de la réinitialisation, les systèmes incluaient généralement une mémoire non volatile (par exemple ROM ) commençant à l'adresse zéro pour contenir les vecteurs et le code d' amorçage . Cependant, pour un système à usage général, il est souhaitable que le système d'exploitation puisse modifier les vecteurs au moment de l'exécution. Cela a souvent été accompli soit en pointant les vecteurs de la ROM vers une table de saut dans la RAM , soit en utilisant la commutation de banque pour permettre à la ROM d'être remplacée par la RAM au moment de l'exécution.

Le 68000 ne répond pas aux exigences de virtualisation de Popek et Goldberg pour une virtualisation complète du processeur, car il possède une seule instruction non privilégiée, "MOVE from SR", qui permet un accès en lecture seule au logiciel en mode utilisateur à une petite quantité d'état privilégié. Les 68EC000 et 68SEC000, qui sont des dérivés ultérieurs du 68000, répondent cependant aux exigences, car l'instruction "MOVE from SR" est privilégiée. Le même changement a été introduit sur les processeurs 68010 et ultérieurs.

Le 68000 est également incapable de prendre en charge facilement la mémoire virtuelle , ce qui nécessite la capacité de piéger et de récupérer après un échec d'accès à la mémoire. Le 68000 fournit une exception d'erreur de bus qui peut être utilisée pour intercepter, mais il ne sauvegarde pas suffisamment l'état du processeur pour reprendre l'instruction défaillante une fois que le système d'exploitation a traité l'exception. Plusieurs entreprises ont réussi à créer des stations de travail Unix à base de 68000 avec une mémoire virtuelle qui fonctionnait en utilisant deux puces 68000 fonctionnant en parallèle sur différentes horloges phasées. Lorsque le 68000 "principal" rencontrait un mauvais accès mémoire, du matériel supplémentaire interrompait le 68000 "principal" pour l'empêcher de rencontrer également le mauvais accès mémoire. Cette routine d'interruption gérerait les fonctions de mémoire virtuelle et redémarrerait le 68000 "principal" dans l'état correct pour continuer le fonctionnement correctement synchronisé lorsque le 68000 "principal" reviendrait de l'interruption.

Ces problèmes ont été corrigés dans la prochaine révision majeure de l'architecture 68k, avec la sortie du MC68010. Les exceptions d'erreur de bus et d'erreur d'adresse poussent une grande quantité d'état interne sur la pile du superviseur afin de faciliter la récupération, et l'instruction "MOVE from SR" a été rendue privilégiée. Une nouvelle instruction « MOVE from CCR » non privilégiée est fournie pour être utilisée à sa place par le logiciel en mode utilisateur ; un système d'exploitation peut intercepter et émuler les instructions "MOVE from SR" en mode utilisateur si vous le souhaitez.

Détails du jeu d'instructions

Les modes d'adressage standard sont :

  • Inscrivez-vous directement
    • registre de données, par exemple "D0"
    • registre d'adresses, par exemple "A0"
  • Inscription indirecte
    • Adresse simple, par exemple (A0)
    • Adresse avec post-incrément, par exemple (A0)+
    • Adresse avec pré-décrément, par exemple −(A0)
    • Adresse avec un décalage signé de 16 bits, par exemple 16(A0)
    • Registre indirect avec registre d'index et décalage signé 8 bits, par exemple 8(A0,D0) ou 8(A0,A1)
    Notez que pour (A0)+ et -(A0), la valeur réelle d'incrémentation ou de décrémentation dépend de la taille de l'opérande : un accès octet ajuste le registre d'adresse par 1, un mot par 2 et un long par 4.
  • PC (compteur de programme) relatif au déplacement
    • Décalage relatif signé 16 bits, par exemple 16(PC). Ce mode était très utile pour le code indépendant de la position.
    • Relatif avec décalage signé 8 bits avec index, par exemple 8(PC,D2)
  • Emplacement mémoire absolu
    • Soit un nombre, par exemple "$4000", soit un nom symbolique traduit par l'assembleur
    • La plupart des assembleurs 68000 ont utilisé le symbole "$" pour hexadécimal , au lieu de "0x" ou d'un H.
    • Il existait des versions 16 et 32 ​​bits de ce mode d'adressage
  • Mode immédiat
    • Données stockées dans l'instruction, par exemple "#400"
  • Mode immédiat rapide
    • 3 bits non signé (ou 8 bits signé avec moveq) avec valeur stockée dans l'opcode
    • Dans addq et subq, 0 est l'équivalent de 8
    • par exemple, moveq #0,d0 était plus rapide que clr.l d0 (bien que les deux aient rendu D0 égal à 0)

Plus : accès au registre d'état et, dans les modèles ultérieurs, à d'autres registres spéciaux.

La plupart des instructions ont des suffixes point-lettre, permettant aux opérations de se produire sur des octets de 8 bits (".b"), des mots de 16 bits (".w") et des longueurs de 32 bits (".l").

Comme de nombreux processeurs de son époque, le temps de cycle de certaines instructions variait en fonction du ou des opérandes source. Par exemple, l'instruction de multiplication non signée prend (38+2n) cycles d'horloge pour se terminer, où 'n' est égal au nombre de bits définis dans l'opérande. Pour créer une fonction qui prenait un nombre de cycles fixe, il fallait ajouter du code supplémentaire après l'instruction de multiplication. Cela consomme généralement des cycles supplémentaires pour chaque bit qui n'a pas été défini dans l'opérande de multiplication d'origine.

La plupart des instructions sont dyadiques , c'est-à-dire que l'opération a une source et une destination, et la destination est modifiée. Les instructions notables étaient :

  • Arithmétique : ADD, SUB, MULU (multiplication non signée), MULS (multiplication signée), DIVU, DIVS, NEG (négation additive) et CMP (une sorte de comparaison effectuée en soustrayant les arguments et en définissant les bits d'état, mais n'a pas stocké le résultat)
  • Arithmétique décimale codée en binaire : ABCD, NBCD et SBCD
  • Logique : EOR (ou exclusif), ET, NON (pas logique), OU (ou inclus)
  • Décalage : (logique, c'est-à-dire que les décalages vers la droite mettent zéro dans le bit le plus significatif) LSL, LSR, ( décalages arithmétiques , c'est-à-dire étendent le signe du bit le plus significatif) ASR, ASL, (tourne via eXtend et non) ROXL, ROXR, ROL, ROR
  • Test de bits et manipulation en mémoire ou registre de données : BSET (mis à 1), BCLR (clear à 0), BCHG (invert) et BTST (pas de changement). Toutes ces instructions testent d'abord le bit de destination et activent (effacent) le bit CCR Z si le bit de destination est 0 (1), respectivement.
  • Contrôle multitraitement : TAS, test-and-set , effectue une opération de bus indivisible, permettant d'utiliser des sémaphores pour synchroniser plusieurs processeurs partageant une même mémoire
  • Flux de contrôle : JMP (saut), JSR (saut au sous-programme), BSR (saut d'adresse relative au sous-programme), RTS (retour de sous-programme ), RTE (retour d' exception , c'est-à-dire une interruption), TRAP (déclencher une exception logicielle similaire à une interruption logicielle), CHK (une exception logicielle conditionnelle)
  • Branche : Bcc (où le « cc » spécifiait l'un des 14 tests des codes de condition dans le registre d'état : égal, supérieur à, inférieur à, report et la plupart des combinaisons et inversions logiques, disponibles à partir du registre d'état). Les deux conditions possibles restantes (toujours vraies et toujours fausses) ont des mnémoniques d'instruction séparés, BRA (branche toujours) et BSR (branche vers sous-programme).
  • Decrement-and-branch : DBcc (où "cc" était comme pour les instructions de branchement), qui, à condition que la condition soit false , décrémente le mot bas d'un registre D et, si le résultat n'est pas -1 ($FFFF) , branché à une destination. Cette utilisation de -1 au lieu de 0 comme valeur de fin a permis de coder facilement des boucles qui n'avaient rien à faire si le compte était 0 pour commencer, sans avoir besoin d'une autre vérification avant d'entrer dans la boucle. Cela a également facilité l'imbrication de DBcc.

68EC000

Contrôleur Motorola 68EC000

Le 68EC000 est une version économique du 68000 avec un brochage légèrement différent, conçu pour les applications de contrôleurs embarqués. Le 68EC000 peut avoir un bus de données 8 bits ou 16 bits , commutable lors de la réinitialisation.

Les processeurs sont disponibles dans une variété de vitesses, notamment des configurations à 8 et 16  MHz , produisant chacun 2 100 et 4 376  Dhrystones . Ces processeurs n'ont pas d' unité à virgule flottante et il est difficile d'implémenter un coprocesseur FPU ( MC68881/2 ) avec un car la série EC manque des instructions de coprocesseur nécessaires.

Le 68EC000 a été utilisé comme contrôleur dans de nombreuses applications audio, y compris les instruments de musique Ensoniq et les cartes son, où il faisait partie du synthétiseur MIDI . Sur les cartes son Ensoniq, le contrôleur offrait plusieurs avantages par rapport aux concurrents sans CPU à bord. Le processeur a permis à la carte d'être configurée pour effectuer diverses tâches audio, telles que la synthèse MIDI MPU-401 ou l' émulation MT-32 , sans l'utilisation d'un programme TSR . Cette compatibilité logicielle améliorée, réduit l'utilisation du processeur et éliminé l'utilisation de la mémoire du système hôte.

Le cœur Motorola 68EC000 a ensuite été utilisé dans les processeurs DragonBall basés sur m68k de Motorola/ Freescale .

Il a également été utilisé comme contrôleur de son dans la console de jeu Sega Saturn et comme contrôleur pour les cartes contrôleurs Ethernet HP JetDirect pour les imprimantes HP LaserJet du milieu des années 1990 .

Exemple de code

Le code assembleur 68000 ci-dessous concerne un sous-programme nommé strtolower, qui copie une chaîne de caractères 8 bits à zéro terminal dans une chaîne de destination, en convertissant tous les caractères alphabétiques en minuscules.

                     
                     
                     
                     
        
             
                     
                     
                     
00100000          
00100000  4E56 0000
00100004  306E 0008
00100008  326E 000C
0010000C  1018
0010000E  0C40 0041
00100012  6500 000E
00100016  0C40 005A
0010001A  6200 0006
0010001E  0640 0020
00100022  12C0
00100024  66E6
00100026  4E5E
00100028  4E75
0010002A
; strtolower:
; Copy a null-terminated ASCII string, converting
; all alphabetic characters to lower case.
;
; Entry parameters:
;   (SP+0): Source string address
;   (SP+4): Target string address

                org     $00100000       ;Start at 00100000
strtolower      public
                link    a6,#0           ;Set up stack frame
                movea   8(a6),a0        ;A0 = src, from stack
                movea   12(a6),a1       ;A1 = dst, from stack
loop            move.b  (a0)+,d0        ;Load D0 from (src), incr src
                cmpi    #'A',d0         ;If D0 < 'A',
                blo     copy            ;skip
                cmpi    #'Z',d0         ;If D0 > 'Z',
                bhi     copy            ;skip
                addi    #'a'-'A',d0     ;D0 = lowercase(D0)
copy            move.b  d0,(a1)+        ;Store D0 to (dst), incr dst
                bne     loop            ;Repeat while D0 <> NUL
                unlk    a6              ;Restore stack frame
                rts                     ;Return
                end

Le sous-programme établit une trame d'appel en utilisant le registre A6 comme pointeur de trame. Ce type de convention d'appel prend en charge le code réentrant et récursif et est généralement utilisé par des langages tels que C et C++ . Le sous-programme récupère ensuite les paramètres qui lui sont passés ( srcet dst) de la pile. Il boucle ensuite, lisant un caractère ASCII (un octet) dans la srcchaîne, vérifiant s'il s'agit d'un caractère alphabétique majuscule, et si c'est le cas, le convertissant en caractère minuscule, sinon le laissant tel quel, puis écrivant le caractère dans la dstchaîne. Enfin, il vérifie si le caractère était un caractère nul ; sinon, il répète la boucle, sinon il restaure la trame de pile précédente (et le registre A6) et revient. Notez que les pointeurs de chaîne (registres A0 et A1) sont auto-incrémentés à chaque itération de la boucle.

En revanche, le code ci-dessous est pour une fonction autonome, même sur la version la plus restrictive d'AMS pour la série de calculatrices TI-89 , étant indépendante du noyau, sans aucune valeur recherchée dans les tables, fichiers ou bibliothèques lors de l'exécution, pas d'appels système, pas de traitement d'exception, des registres minimaux à utiliser, ni la nécessité d'en sauvegarder. Il est valable pour les dates juliennes historiques du 1er mars 1 AD, ou pour les dates grégoriennes . En moins de deux douzaines d'opérations, il calcule un numéro de jour compatible avec ISO 8601 lorsqu'il est appelé avec trois entrées stockées à leurs EMPLACEMENTS correspondants :

;
;  WDN, an address - for storing result d0
; FLAG, 0 or 2 - to choose between Julian or Gregorian, respectively
; DATE, year0mda - date stamp as binary word&byte&byte in basic ISO-format
;(YEAR, year ~ YEAR=DATE due to big-[[Endianness#Current_architectures|endianness]])
;
     move.l DATE,d0
     move.l d0,d1
;
; Apply step 1 - [[SuperBASIC#Example|Lachman's congruence]]
     andi.l #$f00,d0
     divu #100,d0
     addi.w #193,d0
     andi.l #$ff,d0
     divu #100,d0 ; d0 has the month index i in the upper word (mod 100)
;
; Apply step 2 - Using spqr as the Julian year of the leap day preceding DATE
     swap d0
     andi.l #$ffff,d0
     add.b d1,d0
     add.w YEAR,d0
     subi.l #$300,d1
     lsr  #2,d1
     swap d1
     add.w d1,d0 ; spqr/4 + year + i + da}}
;
; (Apply step 0 - Gregorian adjustment)
     mulu FLAG,d1
     divu #50,d1
     mulu #25,d1
     lsr  #2,d1
     add.w d1,d0
     add.w FLAG,d0 ; (sp32div16) + spqr/4 + year + i + da
;
     divu #7,d0
     swap d0  ;  d0.w becomes the day number
;
     move.w d0,WDN ; returns the day number to address WDN
     rts
;
; Days of the week correspond to day numbers of the week as:
; Sun=0  Mon=1  Tue=2  Wed=3  Thu=4  Fri=5  Sat=6
;

Voir également

Les références

Lectures complémentaires

Fiches techniques et manuels
Livres
  • 68000, 68010, 68020 Apprêt ; 1ère édition ; Stan Kelly-Bootle et Bob Fowler; Howard Sams & Co; 370 pages ; 1985 ; ISBN  978-0672224058 . (archiver)
  • Maîtriser le microprocesseur 68000 ; 1ère édition ; Philippe Robinson ; Livres à onglets ; 244 pages ; 1985 ; ISBN  978-0830608867 . (archiver)
  • Langage d'assemblage du guide de poche pour la série 68000 ; 1ère édition ; Robert Erskine ; Éditions Pitman ; 70 pages ; 1984 ; ISBN  978-0273021520 . (archiver)
  • Schémas de matrice du Motorola M68000 [1]
  • Programmation de code machine 68000 (processeurs 68000, 68008, 68010 et 68020); 1ère édition ; David Barrow ; Livres professionnels et techniques de Collins ; 234 pages ; 1985 ; ISBN  0-00-383163-9 .

Liens externes