|
|||||||||||||||||||||||||||||||||||||||||||
|
Au début de l'année 1984, les responsables d'une jeune entreprise appelée Amiga ont montré aux journalistes des prototypes d'un nouvel ordinateur personnel. Ces prototypes utilisaient une machine Sage 68000 comme unité centrale. De grosses boîtes en acier exécutaient les fonctions graphiques et sonores spéciales qu'Amiga prévoyait d'implémenter dans le silicium. Les graphismes étaient spectaculaires - suffisamment rapides pour supporter l'animation. La sortie audio ne produisait pas seulement de la musique mais utilisait la stéréo pour améliorer l'animation. Le son passait du haut-parleur de droite à celui de gauche lorsqu'une balle rebondissait sur l'écran. Tout le monde se demandait si Amiga pouvait vraiment réduire toute la puissance des prototypes dans des puces en silicium. À la fin de 1984 et au début de 1985, les sociétés de capital-risque se sont méfiées des nouveaux venus sur le marché encombré des ordinateurs personnels, de plus en plus dominé par IBM. De sérieux doutes sont apparus quant à la capacité d'Amiga à obtenir des capitaux pour fabriquer sa machine. Beaucoup d'entre nous craignaient que l'excitante machine que nous avions vue en prototype ne devienne jamais un produit. Nous avons été ravis lorsque Commodore a racheté Amiga et sauvé cette machine techniquement exceptionnelle de l'oubli. Gregg Williams, Ion Edwards et Phillip Robinson présentent en détail dans cet article la technologie qui fait de l'Amiga l'ordinateur personnel le plus avancé et le plus innovant du moment. ![]() L'ordinateur personnel Amiga Le graphisme affiché est en 320x200 pixels en 32 couleurs Il y a deux façons d'effectuer un travail dans un ordinateur : par logiciel ou par matériel. La première vous donne une flexibilité illimitée, l'autre, la vitesse. Le Macintosh d'Apple fait presque tout en logiciel et ce n'est pas un hasard si les gens veulent qu'Apple augmente la vitesse du Mac, ajoute de la couleur et baisse son prix. Commodore vient de présenter un ordinateur qui promet ces améliorations, et il le fait en faisant beaucoup de choses au niveau matériel. À 1295 $, l'ordinateur personnel Amiga promet des graphismes de bureau en couleur rapides comme l'éclair et deux fois plus de mémoire et de stockage sur disque que le Macintosh pour plusieurs centaines de dollars de moins que ce dernier (environ 900 $, mais vous devrez acheter un moniteur ou un téléviseur pour l'Amiga). Il dispose également d'un bus d'extension et d'un énorme 192 ko de code 68000 sophistiqué en ROM (mémoire morte) qui étend les capacités multitâches, graphiques, sonores et d'animation du matériel Amiga. Description du système L'Amiga est résumé dans la section "En bref" de cet article. Il ne dispose pas de ports pour cartes d'extension, mais Commodore a l'intention de proposer ultérieurement un boîtier qui se branche au connecteur d'extension afin d'ajouter plusieurs ports d'extension (il est théoriquement possible d'ajouter 8 mégaoctets de mémoire de cette manière). Le système d'exploitation de disque de l'Amiga (AmigaDOS) sera également capable de consulter le boîtier d'extension, de déterminer quels périphériques sont présents et de se configurer en conséquence, quel que soit le contenu du boîtier. En bref
L'Amiga possède une architecture unique qui n'est que partiellement décrite par ce schéma de fonctionnement : Trois puces spécialisées déchargent le processeur 68000 de nombreuses tâches qui le handicapent dans d'autres ordinateurs. Cependant, le schéma ne montre pas le partage finement ajusté des bus de données et d'adresses du système, les 25 canaux DMA (accès direct à la mémoire) qui effectuent de nombreuses opérations de déplacement de données sans immobiliser le 68000, ou les routines de multitraitement en ROM qui permettent à l'Amiga d'orchestrer une variété de tâches. Dans les paragraphes suivants, nous allons examiner les éléments clés de l'architecture système de l'Amiga. Les puces spécialisées Les trois puces spécialisées qui contrôlent le DMA, les graphismes, le son et les entrées/sorties ont été conçues par Jay Miner (et son équipe) qui est surtout connu pour avoir conçu les puces spécialisées des ordinateurs de la série Atari 800. Nous les aborderons en profondeur par fonction, mais voici une répartition simple :
![]() Figure 2 : la carte mère et ses composants. Le lecteur de disquette a été retiré (il se place normalement sur le côté bas/droit). L'alimentation (pas montrée) est, elle, à gauche de la carte mère Dans l'Amiga, tous les périphériques sont commandés par des interruptions - c'est-à-dire que le 68000 n'est pas obligé de les interroger constamment pour savoir s'ils ont de nouvelles données ; au lieu de cela, le 68000 reçoit des données du périphérique uniquement lorsque celui-ci envoie un signal d'interruption. La puce périphérique/son reçoit des signaux de demande d'interruption d'une des 15 sources (par exemple, le lecteur de disquette ou un canal audio), traduit la demande en un des six niveaux d'interruption gérés par le 68000 (le septième est réservé pour une utilisation future) et envoie le signal d'interruption au 68000. Le 68000 partage les bus d'adresses et de données avec 25 canaux de DMA, dont les registres et la logique résident dans les puces spécialisées. Le DMA de l'Amiga est rapide pour deux raisons : premièrement, le fait que chaque périphérique ait son propre canal de DMA diminue la surcharge associée à une opération de DMA ; deuxièmement, de nombreuses opérations de DMA sont entrelacées avec l'accès au bus 68000 d'une manière qui rend le DMA transparent pour le 68000 (voir ci-dessous pour plus de détails). Lorsque le DMA se produit entre la mémoire et les registres de la puce spécialisée, l'utilisation du bus registre-adresse de 19 bits (voir figure 1) rend le transfert deux fois plus rapide. En plaçant l'adresse de la mémoire sur le bus d'adresse et l'adresse du registre sur le bus registre-adresse, le circuit DMA fait en sorte que la valeur des données passe directement de l'adresse de la mémoire au registre. Ce transfert est deux fois plus rapide que le transfert DMA via le 68000, qui lit d'abord les données dans sa mémoire, puis écrit le résultat dans le registre. Bibliothèques et périphériques Le logiciel système (dont une grande partie se trouve dans les 192 kilooctets de la ROM) contient des bibliothèques, une manière prédéfinie d'organiser des routines utiles afin de pouvoir y accéder avec un maximum de flexibilité. Les bibliothèques peuvent être résidentes ou transitoires et peuvent être utilisées à n'importe quelle adresse mémoire (lorsqu'elles sont en mémoire). Les routines et les données peuvent toujours être appelées via une référence indirecte du 68000 avec décalage ; cela vous permet d'écrire du code utilisant une routine de bibliothèque sans connaître l'adresse de cette bibliothèque au moment de la compilation (en fait, tout le code du système peut être référencé en connaissant une seule adresse fixe dans la machine, et même cette adresse est fournie à toute machine qui en a besoin). Un périphérique est une extension du concept de bibliothèque qui permet au logiciel d'accéder aux périphériques d'entrées/sorties (actuels et futurs) de manière uniforme. Les routines Exec Le système Exec est une collection de routines 68000, présentes dans la ROM, qui sont réentrantes et optimisées et qui exécutent de nombreuses fonctions vitales pour le fonctionnement de l'Amiga. Il comprend des routines qui créent et manipulent des listes et des files d'attente, planifient les tâches par priorité, gèrent les interruptions, organisent les entrées/sorties des périphériques, contrôlent l'utilisation de la mémoire et exécutent d'autres fonctions. Une structure de données importante dans l'Amiga est le noeud de liste. Le noeud de liste est un bloc de données avec des pointeurs vers les noeuds prédécesseurs et successeurs de la liste dans laquelle il se trouve, deux champs de type et de priorité de 8 bits, et un bloc de données associé. Une liste est une chaîne doublement liée de noeuds de liste et d'éléments, débutant par un en-tête qui pointe vers les premier et dernier noeuds. Exec contient plusieurs routines qui vous permettent de faire des choses comme créer une nouvelle liste, insérer un élément de liste à sa place dans une file d'attente et retirer un noeud d'une liste. Un autre ensemble important de routines vous permet de manipuler les tâches. Une tâche est une unité de travail qui partage l'Amiga avec d'autres tâches d'une manière qui varie à la fois avec le type et la priorité de la tâche (toutes les tâches en cours sont conservées dans une file d'attente et sont exécutées par priorité décroissante). La plupart des programmes et des opérations résident dans l'Amiga sous forme de tâches. Le champ de priorité de la tâche, qui contient un nombre entre -128 et 127, détermine l'ordre dans lequel les tâches seront exécutées. Les tâches ayant des numéros identiques se partagent l'Amiga en tranches de temps de durée présélectionnée. Une tâche avec une priorité plus élevée préempte la tâche actuelle et commence à s'exécuter. Comme le système sauvegarde les états d'une tâche, les registres et la zone de la pile, une tâche peut reprendre à tout moment. Plus important encore, les programmeurs n'ont pas à tenir compte des autres tâches qui peuvent être exécutées en même temps. Lorsqu'une tâche est active, elle "pense" qu'elle a un accès complet et illimité au 68000. Partager le bus système Considérez que l'Amiga peut simultanément lire la disquette, lire quatre canaux audio, et afficher des graphismes en plan de bits de 16 couleurs basse résolution et huit sprites, et sans pratiquement aucun ralentissement du processeur 68000. Cela est possible en grande partie grâce à la façon dont les différents sous-systèmes partagent le bus. Le 68000 de l'Amiga tourne à 7,15909 MHz, tandis que sa mémoire tourne à deux fois cette vitesse. La plupart des instructions du 68000 alternent entre l'utilisation du bus et les calculs internes. Dans cette situation, la mémoire peut fonctionner à sa vitesse maximale tout en laissant libre un cycle de bus sur deux. Le partage du bus s'effectue en subdivisions du temps nécessaire au canon à électrons pour dessiner une ligne de pixels et effectuer un retour horizontal, soit environ 63 microsecondes (µs). Cela se divise en environ 226 cycles d'accès à la mémoire de 280 nanosecondes (ns) chacun. Le Copper, le Blitter et le 68000 accèdent à la mémoire sur les cycles pairs (0, 2, 4...) ; les cycles impairs (1, 3, 5...) sont réservés pour quatre cycles de DMA de rafraîchissement de la mémoire, trois cycles de DMA de disque, quatre cycles de DMA audio (suffisant pour quatre canaux), 16 cycles de DMA de sprites (suffisant pour huit sprites) et 80 cycles de DMA de plan de bits (suffisant pour afficher une image basse résolution de 16 couleurs). Les circuits DMA de chaque puce "savent" quand leurs emplacements apparaissent sur chaque ligne horizontale et lancent automatiquement le transfert DMA sans impliquer le 68000. Dans de nombreux cas, le Copper et le Blitter ne sont pas actifs, laissant le 68000 fonctionner à pleine vitesse (en fait, certaines instructions ont besoin du bus à des moments impairs ; si le bus n'est pas disponible, le 68000 insère des états d'attente jusqu'à ce que le PAL (puce logique à réseau programmé) signale que le bus est libre en activant la ligne DTACK du 68000. Cela se produit plus fréquemment à mesure que les puces spécialisées demandent plus de cycles du bus). Plusieurs choses modifient ce partage de bus. Si vous utilisez plus de quatre plans de bits d'affichage basse résolution, ou plus de deux plans de bits haute résolution, le DMA du plan de bits volera quelques cycles de mémoire au 68000. Le Copper et le Blitter ont tous deux une priorité plus élevée que le 68000 et obtiendront les cycles dont ils ont besoin en premier. Si le Blitter détecte une demande de bus mémoire de la part du 68000, il s'arrêtera au bout de quelques cycles pour laisser le 68000 utiliser le bus ; puis il reprendra le bus et continuera. Ceci permet au 68000 de disposer de quelques cycles même lorsque le Blitter est en marche. Si vous définissez un bit interne de "priorité du Blitter", cependant, le Blitter vole tous les cycles dont il a besoin au 68000. Même si cela n'est pas aussi mauvais qu'il n'y paraît, chaque fois que l'un des éléments ci-dessus vole des cycles, il exécute quand même sa fonction plus rapidement et plus efficacement que le 68000 n'aurait pu le faire. Multitâche L'Amiga est multitâche - c'est-à-dire qu'il peut travailler sur plus d'une chose à la fois. À bas niveau, par exemple, cela signifie que l'Amiga peut déplacer des sprites, lire la disquette et jouer de la musique en même temps. À des niveaux plus élevés, plusieurs programmes peuvent fonctionner simultanément dans des fenêtres qui se chevauchent. La capacité multitâche de l'Amiga provient de plusieurs caractéristiques dont nous avons déjà parlé : la structure des interruptions et les routines multitâches Exec en ROM. Les interruptions, qui sont acheminées et classées par ordre de priorité par les périphériques et la puce audio, déclenchent le changement de tâche. Par exemple, lorsqu'un périphérique signale son besoin d'effectuer des entrées/sorties, l'interruption passe par la puce périphérique/son et provoque l'exécution de la routine d'interruption du périphérique (en supposant qu'aucune interruption de priorité supérieure n'est en cours). La routine d'interruption traite le besoin du périphérique immédiatement ou notifie une tâche pour le faire, puis la routine se termine. Dans les deux cas, l'Amiga appelle alors l'ordonnanceur de tâches, qui s'assure que la tâche appropriée a la chance d'utiliser le système. Le Copper Le Copper est un coprocesseur à l'intérieur de la puce d'animation qui exécute son propre programme. L'exécution de ce programme est liée à la progression du faisceau d'électrons lorsqu'il dessine l'écran vidéo. En raison de cette capacité, le Copper est le plus souvent utilisé pour contrôler les parties graphiques et sonores des puces spécialisées, déchargeant ainsi le 68000 de la même tâche. Le Copper lit ses instructions depuis la mémoire et utilise le DMA pour écrire depuis son programme (en mémoire) vers les registres de lui-même et des deux autres puces spécialisées (selon Jay Miner, cela n'est pas si étrange si l'on considère les trois puces comme "une seule grande puce spécialisée"). Le jeu d'instructions du Copper ne comporte que trois types d'instructions : déplacer des données immédiates vers un registre, attendre que le faisceau d'électrons passe à une position donnée et passer à l'instruction suivante si le faisceau d'électrons a dépassé un emplacement donné. Les valeurs de position du faisceau sont précises à la ligne près verticalement et à 4 pixels basse résolution (ou 8 pixels haute résolution) horizontalement. La polyvalence du Copper peut être étendue par une utilisation astucieuse de ses registres. Par exemple, vous pouvez faire en sorte que le Copper saute à une instruction donnée en plaçant la nouvelle adresse dans le "compteur de programme" interne du Copper. En activant le bit 15 du registre INTREQ (demande d'interruption), le Copper peut provoquer une interruption de niveau 6, ce qui devrait conduire à une routine 68000 plus complexe qui traitera la situation ayant provoqué l'interruption. Un aspect important du Copper est que, pendant qu'il attend le faisceau d'électrons, il n'est pas sur le bus système et n'utilise pas de ressources. Ceci est en contraste avec de nombreux systèmes qui immobilisent leurs processeurs en attendant une position donnée du faisceau. Grâce au Copper, le 68000 n'est jamais bloqué pendant plusieurs millisecondes en attendant un événement lié à l'affichage. Le Copper peut gérer de nombreuses fonctions de base du système sans l'intervention du 68000. Par exemple, il peut rafraîchir certaines valeurs de plan de bits et de sprite qui doivent être restaurées au début de chaque image. Il peut également modifier la palette de couleurs au milieu de l'écran (ce qui permet d'obtenir plus de 32 couleurs à l'écran), changer le mode graphique (ce qui permet d'économiser de la mémoire) et mettre à jour la mémoire d'affichage sans problème en modifiant une image après que le faisceau d'électrons l'ait dessinée pour l'image en cours. Les programmes Copper donnent le maximum de contrôle sur l'affichage vidéo et les événements de cette périodicité, mais la plupart des programmeurs ne les créeront pas directement. De nombreuses routines ROM qui accomplissent des tâches de haut niveau manipulent les programmes Copper pour effectuer leur travail. L'espace mémoire Les premiers 512 ko de mémoire sont appelés "mémoire Chip" (voir figure 3). Toutes les fonctions exécutées par les puces spécialisées - images en plan de bits et sprite, programmes Copper et autres données (traitées ci-dessous) - doivent se trouver dans cette zone de mémoire. Bien sûr, dans l'Amiga standard avec 256 ko (ou la version étendue de 512 ko), la mémoire Chip est également utilisée pour tout ce pour quoi un ordinateur a besoin de mémoire vive. Commodore/Amiga pourrait annoncer ultérieurement un boîtier d'extension pouvant accueillir diverses cartes périphériques et jusqu'à 8 Mo continus de mémoire. Les programmes et données normaux devraient y être placés, laissant la mémoire de l'écran libre pour ses utilisations spécialisées. ![]() Figure 3 : la structure de la mémoire Les graphismes de l'Amiga sont, en un mot, époustouflants - tant par leur qualité que par leur rapidité. Les principaux composants graphiques de la machine sont le champ de jeu ("playfield"), les sprites, le Blitter et les routines d'animation et de texte. Le champ de jeu Une carte de bits ("bit map") est une zone de la mémoire que l'ordinateur interprète comme une matrice rectangulaire de pixels (points) ; la plupart des ordinateurs ont une certaine capacité graphique en carte de bits. De nombreuses machines forment des pixels de couleurs différentes en regroupant deux ou plusieurs bits adjacents dans la carte de bits. L'Amiga, cependant, n'utilise qu'un seul bit par pixel dans sa carte de bits (appelé "plan de bits") et "empile" des plans de bits séparés pour obtenir différentes couleurs (voir figure 4). Les couleurs disponibles ne sont pas "câblées" dans la machine mais sont spécifiées dans une table de registre de couleurs, également appelée palette de couleurs. Une image créée par plusieurs plans de bits est appelée une trame ("raster"). Le champ de jeu est l'affichage graphique en mode point qui constitue la majeure partie de l'affichage vidéo de l'Amiga. L'Amiga peut empiler jusqu'à cinq plans de bits pour obtenir un maximum de 32 couleurs. La table des registres de couleurs contient des valeurs de 12 bits qui peuvent spécifier n'importe quelle des 4096 couleurs différentes. Par conséquent, l'Amiga peut dessiner des images qui utilisent 32 de ces 4096 couleurs. ![]() Figure 4 : Graphiques du champ de jeu (playfield) de l'Amiga. Les bits d'une position donnée dans chaque plan binaire se combinent pour créer un index dans la table de registre des couleurs. L'entrée sélectionnée dans la table du registre des couleurs détermine la couleur du pixel ![]() Figure 5 : Robocity, un exemple de graphismes en 320x200 32 couleurs L'image d'un champ de jeu peut être beaucoup plus grande, à la fois horizontalement et verticalement, que la zone de l'écran utilisée pour l'afficher. En manipulant plusieurs valeurs de registre, vous pouvez faire défiler une image horizontalement, verticalement, ou les deux, avec très peu d'effort (lorsque l'image totale est plus large que sa partie affichée, le dernier pixel d'une ligne et le premier pixel de la suivante ne sont pas adjacents et sont séparés par un nombre fixe d'octets. L'Amiga utilise des registres modulo pour rendre la manipulation de deux de ces octets aussi rapide et aussi simple que s'ils étaient contigus). Une autre option d'affichage est appelée le mode double champ de jeu ("dual playfield"). Lorsque vous utilisez ce mode, jusqu'à six plans de bits sont divisés en deux images distinctes de jusqu'à trois plans de bits chacune, une image ayant la priorité sur l'autre. Cela simplifie souvent les affichages graphiques complexes. Par exemple, pour simuler l'effet de regarder un paysage à travers des jumelles, vous pouvez faire défiler un large champ de jeu de paysage "sous" un champ de jeu statique entièrement noir, à l'exception d'une zone transparente qui laisse apparaître le champ de jeu inférieur. Sprites Un sprite est une petite image en mode point qui peut être repositionnée simplement en redéfinissant les valeurs horizontales et verticales de son coin supérieur gauche. Les sprites sont indépendants du champ de jeu et apparaissent au-dessus ou au-dessous les uns des autres et du ou des champs de jeu selon une priorité spécifiée. L'Amiga possède huit sprites matériels, chacun pouvant avoir trois couleurs (les sprites ont une profondeur de deux plans de bits, et chaque pixel de deux bits correspond à trois couleurs plus la transparence). Les sprites Amiga ont une largeur de 16 pixels basse résolution et une hauteur quelconque. Chaque paire de sprites partage une table de registres de trois couleurs différentes (par exemple, les sprites 0 et 1 partagent les registres de couleurs 17, 18 et 19. Les sprites 2 et 3 partagent les registres 21, 22 et 23), permettant aux huit sprites d'utiliser jusqu'à 12 couleurs. Les sprites adjacents (0 et 1, par exemple) peuvent être attachés, ce qui signifie que leurs quatre plans de bits sont combinés ; une paire de sprites attachés peut alors utiliser les registres de couleurs 17 à 31 pour afficher jusqu'à 15 couleurs. Comme souvent dans l'Amiga, la complexité se cache derrière une apparente simplicité. Un sprite est en fait une valeur de 16 bits avec un déplacement horizontal spécifié pour la ligne actuelle de l'affichage vidéo. En mode manuel, vous êtes responsable de la création de l'image du sprite, ligne par ligne (peu de personnes utiliseront directement ce mode). En mode automatique, par contre, vous activez le circuit DMA du sprite, qui consulte une structure de données contenant la position et la forme ligne par ligne du sprite et le dessine automatiquement. En outre, vous pouvez redéfinir le sprite indéfiniment pendant que le faisceau d'électrons crée l'affichage vidéo. Le circuit DMA du sprite accepte une liste de mots de définition de la position et de la forme du sprite et les dessine tant que la ligne inférieure d'une occurrence et la ligne supérieure de la suivante sont séparées par au moins une ligne vidéo (notez que ceci se fait sans intervention du Copper). Le Blitter Le Blitter est une zone de la puce d'animation qui contrôle un canal DMA dédié au dessin de lignes et à la manipulation de zones rectangulaires du champ de jeu. Son nom vient d'un terme plus ancien, bit-bit, qui signifie "transfert de bloc en mode point". Jay Miner l'appelle un "Bimmer", pour "bit-mapped image manipulator", en raison de ses capacités étendues, mais "Blitter" est utilisé exclusivement dans la documentation de l'Amiga. Lorsqu'il manipule des blocs d'une image, le Blitter (lorsqu'il est correctement configuré) gère un certain nombre de tâches "domestiques" qui, dans d'autres ordinateurs, occupent une grande partie du temps processeur. Ces tâches comprennent :
Lorsqu'il est utilisé pour dessiner des lignes, le Blitter peut dessiner des lignes comme 1s, 0s, ou un motif spécifié ; il peut également dessiner des lignes d'une largeur d'un bit, qui sont nécessaires pour délimiter une zone à remplir. Dans ses deux opérations de traçage de lignes et de manipulation de zones, le Blitter doit d'abord effectuer une quantité modérée de calculs de "gestion interne". Étant donné la vitesse et la simplicité de l'opération résultante, les calculs de configuration ne sont pas une surcharge déraisonnable ; cependant, vous pouvez traiter le Blitter à un niveau plus élevé en utilisant certaines routines graphiques en ROM. Routines d'animation Les routines d'animation qui font partie de la ROM de l'Amiga constituent la base de l'animation couleur la plus sophistiquée que le marché des ordinateurs personnels ait jamais vue. L'une des démonstrations que nous avons vues, Robocity, montrait cinq personnages de dessins animés se déplaçant sur l'écran. La résolution était très bonne... ce n'est qu'en regardant de près que l'on pouvait voir les "saccades" qui prouvaient que l'on ne regardait pas un dessin animé fait à la main. L'animation est réalisée par le biais de quelques appels de sous-routines qui dessinent une liste liée des éléments à animer. L'élément de base du sous-système d'animation est le "GEL" ou "Graphic ELement" (élément graphique). Il existe quatre types de GEL : VSprites, BOB, AnimComp et AnimObj. VSprite signifie "sprite virtuel". Un VSprite est une structure de données en mémoire, étroitement liée à un sprite matériel, qui est gérée par les routines d'animation. En laissant les routines gérer la correspondance entre les VSprites et les sprites matériels, vous pouvez (avec certaines restrictions) définir plus de huit VSprites et laisser les routines s'occuper automatiquement des détails. Les VSprites peuvent également être découpés pour ne s'afficher que dans une certaine tranche horizontale de l'écran. BOB est l'abréviation de "Blitter object". Un BOB est une image qui agit comme un sprite, mais les routines d'animation utilisent le Blitter pour "coller" l'image sur le champ de jeu et (éventuellement) restaurer l'image qui était "sous" le BOB. Un BOB est défini par la combinaison d'une structure de données BOB et d'une structure de données VSprite, qui pointent toutes deux l'une vers l'autre. Un avantage d'un BOB par rapport à un VSprite est qu'un BOB est dessiné dans un champ de jeu - cela signifie qu'il peut être de n'importe quelle largeur et qu'il peut avoir autant de couleurs que le champ de jeu (jusqu'à 32). Les BOB peuvent également être coupés pour n'apparaître que dans une certaine fenêtre rectangulaire. Une AnimComp est un composant d'animation, une partie d'un AnimObj, un objet d'animation. Si votre AnimObj est la figure d'un homme qui marche, ses AnimComp comprendront probablement des BOB pour un torse, une tête, deux bras et deux jambes. Chaque AnimComp comprend plusieurs vues du même objet (par exemple, bras plié, bras tendu) avec un temps associé qui doit s'écouler avant de passer d'une vue à l'autre. Une fois que tout cela est assemblé, des appels répétés à la routine Animate substituent de nouvelles vues (déterminées par leurs constantes de temps) dans la liste liée de GEL avant de dessiner les éléments de la liste. Vous pouvez réaliser une animation par dessin séquentiel en spécifiant une série de vues qui décrivent un mouvement répété et en spécifiant un décalage à ajouter à la position de l'objet chaque fois que les routines passent de la dernière vue à la première. Par exemple, prenons l'exemple d'un chat marchant de deux pas vers la droite en six vues, de sorte que la vue 1 semble naturelle lorsqu'elle est affichée après la vue 6. En spécifiant le décalage horizontal correct vers la droite (qui est ajouté chaque fois que l'image revient à la vue 1), la routine Animate dessinera automatiquement les six vues dans l'ordre et la position corrects pour que le chat semble marcher sur toute la largeur de l'écran. Vous pouvez également demander à la routine Animate de réaliser une animation de contrôle de mouvement, dans laquelle la prochaine position d'un BOB est automatiquement calculée à partir de sa position actuelle et de quatre valeurs de vitesse et d'accélération sur les axes X et Y (vous pouvez également réaliser cette animation avec un "anneau" de vues de BOB qui se succèdent comme dans une animation de dessin séquentiel. Une autre routine, DoCollision, détecte deux types de collisions, les collisions GEL à GEL et les collisions limites (collisions de GEL avec des fenêtres limites rectangulaires) ; la routine exécute alors une routine de gestion des collisions donnée à partir d'une table de 16 routines possibles. Les GEL peuvent être codés de façon à ce que seuls certains types de collisions soient enregistrés (utile dans un jeu, par exemple, pour détecter les collisions missile-cible mais pas les collisions missile-missile). Texte L'Amiga traite le texte comme un type particulier de graphisme. Les polices sont décrites par une structure de données de police de texte (TF) qui permet la création de caractères mono-espacés ou proportionnels de n'importe quelle hauteur. Pour gagner de la place avec des polices plus grandes, une police peut définir entre 1 et 255 caractères. Deux polices, Topaz 8 et Topaz 9, sont présentes dans la ROM Amiga. La première donne 40 caractères par ligne en résolution normale. 80 en haute résolution ; la seconde donne respectivement 30 et 60 caractères par ligne. Des polices supplémentaires peuvent être chargées et retirées de la RAM selon les besoins. L'Amiga utilise la routine ROM TxWrite pour dessiner un message donné à un emplacement donné. Le texte peut être dessiné dans l'une des deux couleurs de "stylo" définies par l'utilisateur et dans l'un des trois modes de dessin :
Audio matériel L'Amiga comprend quatre canaux matériels pour le son qui sont largement contrôlés par des circuits DMA, indépendants du 68000. Des routines de contrôle audio dans une partie de la ROM de l'Amiga étendent ces capacités, vous permettant de travailler avec les capacités sonores de l'Amiga à un niveau conceptuel plus élevé et de manipuler les canaux sonores "à la volée" sans "bruit" de la sortie. Les quatre canaux audio, numérotés de 0 à 3, sont convertis en signaux analogiques, filtrés à travers un filtre passe-bas, et mélangés en deux signaux de sortie séparés, l'un combinant les canaux 0 et 3, l'autre, les canaux 1 et 2. Le filtre commence à atténuer les fréquences entre 5,5 kHz et 7,5 kHz et élimine efficacement toutes les fréquences supérieures. Cela permet d'éliminer une grande partie du crénelage, qui est une distorsion qui se produit lorsqu'un signal échantillonné trop peu fréquemment est lu. Les canaux sonores peuvent être contrôlés directement par le 68000, ce qui vous donne un contrôle total sur le son mais empêche le 68000 d'effectuer d'autres tâches. Dans la plupart des cas, vous pouvez obtenir le son dont vous avez besoin en laissant les canaux DMA produire le son à partir d'une table de valeurs (appelée table de son) qui décrit un ou plusieurs cycles de la forme d'onde nécessaire. Dans l'Amiga, chaque canal DMA audio comprend des registres qui donnent l'intensité sonore du canal, pointent vers une table de 16 bits d'octets de table sonore (les valeurs sont récupérées un mot à la fois et doivent être stockées sur des limites d'octets paires), et établissent le temps qui doit s'écouler avant que le prochain octet sonore soit envoyé. Ce dernier est un registre de période, qui contient une valeur qui est décrémentée toutes les 279 ns ; la valeur suivante de la table des sons est envoyée lorsque le compteur atteint zéro, et le registre est remis à sa valeur initiale. Lorsque le pointeur de la table sonore atteint sa dernière valeur, le pointeur est remis au début de la table. De cette façon, le canal audio continue à produire la forme d'onde donnée sans surveillance jusqu'à ce qu'il soit explicitement désactivé. Les canaux audio 0 à 2 peuvent être attachés aux canaux directement au-dessus d'eux pour moduler la sortie du canal supérieur. Lorsqu'un canal est rattaché, les mots de 16 bits qui constituent sa table de sons ne sont pas interprétés comme deux valeurs sonores de 8 bits. Au lieu de cela, les mots de données sont interprétés comme des valeurs de volume ou de période pour la valeur actuelle du canal modulé (c'est-à-dire que la valeur de volume détermine l'intensité sonore actuelle du canal, et la valeur de période détermine le temps qui s'écoule avant que le canal n'envoie la valeur suivante dans sa table de sons). Vous pouvez manipuler ces valeurs pour provoquer une modulation d'amplitude, une modulation de fréquence ou les deux. Audio logiciel La ROM contient trois types de routines. La première, les routines d'allocation de canal, vous permet d'allouer, d'utiliser et d'écarter un canal sans garder la trace du canal en question. Si vous avez plus de quatre canaux "virtuels" ouverts, les quatre avec les plus hautes priorités sont affectés aux canaux audio matériels réels. Deuxièmement, les routines de contrôle DMA contrôlent la façon dont le canal DMA audio manipule le canal audio matériel via les différents registres et la table des sons. En outre, vous pouvez faire en sorte que le canal envoie un bit de signal spécifié par l'utilisateur à une tâche existante (qui peut ensuite déclencher un événement) lorsque le canal audio a joué un nombre donné de répétitions de la table des sons ; cela permet aux tâches de manipuler l'Amiga en fonction de l'activité du canal audio. Troisièmement, les routines de génération d'enveloppe automatisent la tâche consistant à faire varier l'enveloppe d'amplitude qui détermine la lenteur ou la rapidité avec laquelle une note change de volume lorsqu'elle est jouée. Pour utiliser ces routines, vous devez créer un tableau de quatre valeurs de pente/destination qui décrivent une enveloppe ADSR (attack, decay, sustain, release). L'enveloppe ADSR vous indique à quelle vitesse la note gagne en volume dès qu'elle commence, quelle est sa valeur maximale, à quelle vitesse elle décroît une fois qu'elle atteint cette valeur, à quel niveau elle reste tant que la note est maintenue, et à quelle vitesse elle revient à zéro une fois que la note est relâchée. Vous pouvez dessiner une telle enveloppe avec quatre segments de ligne : l'Amiga définit l'enveloppe ADSR en donnant la pente et les valeurs de l'axe des y de destination pour chaque segment de ligne. Comme pour le DMA audio, on peut demander au logiciel concerné d'envoyer un bit de signal à une tâche donnée lorsque l'enveloppe est terminée. Un morceau de code potentiellement significatif est la bibliothèque de routines pour la synthèse vocale, incluse en standard dans l'ordinateur Amiga. Il s'agit de routines transitoires qui sont chargées du disque vers la mémoire lorsque cela est nécessaire ; elles sont capables de "parler" un texte anglais normal dans une variété de hauteurs et de vitesses via l'un des canaux sonores. Nous avons écouté les routines et trouvé que leur sortie était fortement infléchie mais compréhensible même avec les yeux fermés (un test auquel échouent de nombreux algorithmes de synthèse vocale). Intuition Intuition, l'interface utilisateur de l'Amiga, se situe au-dessus du système d'exploitation de disque et fournit l'interface orientée icônes, manoeuvrable à la souris et utilise la métaphore du bureau popularisée par le Macintosh d'Apple. Intuition complète la philosophie architecturale et les capacités graphiques de l'ordinateur en gérant un système de fenêtrage complexe et en donnant accès à des capacités multitâches. Intuition permet aux programmes de s'exécuter simultanément, chacun dans sa propre fenêtre. Chaque programme ouvre un terminal virtuel qui a accès à toutes les ressources du système. Même si plusieurs programmes peuvent s'exécuter simultanément, un seul peut accepter des entrées et afficher sa barre de menu. Vous pouvez sélectionner le programme qui effectue ces opérations en cliquant sur sa fenêtre ; cette fenêtre affiche également les messages de commande spéciaux du système. Différents programmes peuvent partager l'affichage vidéo, ou un seul programme peut créer plusieurs terminaux virtuels. Pour gérer l'affichage simultané de différentes résolutions et modes graphiques, Intuition utilise des écrans, qui sont des zones rectangulaires occupant toute la largeur de l'écran vidéo. Les écrans ont des résolutions, des palettes de couleurs et une hauteur prédéfinies et contiennent une ou plusieurs fenêtres. Une barre en haut de chaque écran identifie l'écran. Tous les écrans ont des menus déroulants. L'appui sur le bouton droit de la souris, qui appelle généralement un menu, transforme la barre d'écran en une barre de menu (une bande contenant les noms des menus qui s'appliquent à la fenêtre actuellement active). La barre d'écran contient également deux cases qui, lorsqu'elles sont cliquées avec le bouton gauche de la souris (généralement responsable de la sélection des éléments), déplacent l'écran vers le haut ou le bas de la pile d'écrans. Vous pouvez sélectionner des éléments de menu de la manière conventionnelle, bien qu'il existe plusieurs nouvelles fonctionnalités. Les menus déroulants, par exemple, peuvent avoir jusqu'à deux niveaux (voir photo 6). ![]() Figure 6 : Affichage du Workbench en 640x200 Les programmeurs disposent d'une grande souplesse dans la conception des menus. Par exemple, les menus peuvent apparaître en format multicolonne et contenir des graphismes. Les éléments de menu peuvent, lorsqu'ils sont sélectionnés, être marqués d'une coche, et ils peuvent automatiquement afficher les alternatives des touches de commande ou des lettres. Les fenêtres, qui apparaissent dans les écrans, peuvent gérer toutes les fonctions graphiques, textuelles et d'animation de l'Amiga. Comme Intuition ouvre les programmes d'application dans des fenêtres, les applications doivent spécifier leurs exigences en matière de graphismes, de texte et de couleurs en sélectionnant ou en créant un écran approprié. Intuition gère autant d'écrans et de fenêtres que la mémoire le permet, mais une seule fenêtre et, par extension, un seul écran peuvent recevoir des entrées à la fois. En tant que terminal virtuel, les programmes n'ont pas besoin de savoir s'ils sont actifs ; ils peuvent continuer à traiter des données tant qu'ils n'ont pas besoin d'entrée externe. Vous pouvez activer une fenêtre soit en y plaçant le pointeur à l'écran et en cliquant sur le bouton de la souris, soit en y déplaçant une icône. La fermeture d'une fenêtre entraîne la réactivation de la dernière fenêtre activée. Les fenêtres peuvent inclure plusieurs caractéristiques, y compris des barres de défilement verticales et horizontales, des barres de titre, des zones de déplacement de la fenêtre (utilisées pour déplacer la fenêtre vers une nouvelle position), des arrangeurs de profondeur (qui déplacent la fenêtre vers le haut ou le bas d'une pile de fenêtres), des boîtes de dimensionnement (qui vous permettent de changer la taille de la fenêtre), et des boîtes de fermeture (qui ferment une fenêtre). Intuition gère les fenêtres d'arrière-plan, qui s'ouvrent derrière toutes les autres fenêtres et ne peuvent pas être déplacées, dimensionnées ou arrangées en profondeur. Le programme d'application est entièrement responsable du maintien de son contenu, et les fenêtres normales apparaissent par-dessus. Un programme graphique, par exemple, peut utiliser une fenêtre de fond comme zone de dessin principale et appeler une fenêtre normale pour vous montrer une palette de couleurs parmi lesquelles choisir. Les programmeurs peuvent spécifier si une application rafraîchit sa fenêtre lorsqu'elle est partiellement couverte et découverte, ou si de la mémoire doit être allouée pour sauvegarder les parties cachées de la fenêtre. Un troisième choix, "super bit map", réserve suffisamment de mémoire pour stocker une image plus grande que celle que le système de fenêtrage affichera. Intuition ajuste et affiche automatiquement la plus grande partie possible du "super bit map". Les programmeurs peuvent utiliser cette technique pour créer des fenêtres dont le contenu défile. Ils peuvent également déterminer l'endroit où les fenêtres apparaîtront, la couleur à utiliser pour dessiner la bordure et le texte, si la fenêtre aura une bordure et s'il faut inclure un titre de fenêtre. Requêtes, alertes et gadgets Les requêtes sont des fenêtres d'information qui attendent une saisie au clavier ou à la souris. Normalement, vous devez cliquer avec le bouton gauche de la souris sur une zone "OK" avant de continuer, bien que vous puissiez passer à une autre fenêtre (la requête sera toujours là lorsque vous reviendrez à la première fenêtre). Avec un seul appel, les programmeurs peuvent attacher des requêtes à une fenêtre ou au double-clic du bouton de la souris. Les programmeurs ont accès à des requêtes système prédéfinis, comme la requêtes "Please Insert Disk XXXX" (Veuillez insérer la disquette XXXX). Toutefois, pour utiliser une requête personnalisée, le programmeur doit spécifier des éléments tels que des gadgets (voir ci-dessous), des bordures, le texte de la requête et, si nécessaire, des images bitmap conçues à la main. Les alertes sont des écrans spéciaux qui contiennent des informations absolument cruciales. Elles diffèrent des requérants en ce sens qu'aucun écran ou fenêtre ne peut les masquer et que les utilisateurs doivent agir immédiatement sur l'information avant de poursuivre. Les alertes de récupération exigent des réponses immédiates ; les alertes sans issue indiquent aux utilisateurs que le système est tombé en panne. Les écrans, les fenêtres, les requêtes et les alertes utilisent tous des gadgets, qui sont des périphériques d'entrée attachés aux fenêtres, aux requêtes et aux alertes. Les gadgets du système comprennent les gadgets de taille de fenêtre, les zones de déplacement de fenêtre/écran, les organisateurs de profondeur et les boîtes de fermeture. Les programmeurs peuvent concevoir leurs propres gadgets en spécifiant les formes et les couleurs des bordures, en décrivant la boîte de sélection du gadget, en fournissant le texte du gadget, en fournissant un tampon mémoire pour la réponse du gadget et en définissant le comportement du gadget. En plus des gadgets système, les programmeurs peuvent choisir parmi les gadgets booléens, les chaînes de caractères, les nombres entiers et les gadgets proportionnels. Les gadgets booléens sont des gadgets vrai/faux qui renvoient une valeur uniquement lorsqu'ils sont sélectionnés. Les gadgets de type chaîne renvoient une chaîne de caractères à partir du clavier, tandis que les gadgets de type nombre entier renvoient des valeurs entières. Les gadgets proportionnels, qui renvoient une valeur proportionnelle à leur position sur l'axe horizontal ou vertical (ou les deux), sont similaires aux barres de défilement du Macintosh. Un programmeur peut personnaliser l'apparence du bouton (l'élément qui glisse le long de l'axe de déplacement) pour lui donner une forme différente de la forme rectangulaire par défaut. Le Workbench (l'établi) Intuition inclut le Workbench, une interface de commande à base d'icônes et de fenêtres. La zone Workbench est un écran à quatre couleurs avec une résolution de 640x200 pixels. C'est à la fois un "écran" sur lequel les disques s'ouvrent et les programmes s'exécutent, ainsi qu'une "application" qui garde la trace des objets du Workbench et affiche des informations à l'aide des fenêtres d'Intuition. Le Workbench s'ouvre automatiquement lorsque vous entrez dans un disque qui l'inclus. En ouvrant la bibliothèque Workbench, les programmeurs peuvent accéder aux fonctions du Workbench pour créer et manipuler le Workbench et ses objets. Dans le Workbench, les utilisateurs peuvent ouvrir et fermer les disques, les outils, les projets, les tiroirs, le presse-papiers et la corbeille. L'ouverture d'un outil (terme Amiga pour désigner un programme d'application) crée une fenêtre sur l'écran actuel. Les outils créent des projets - des fichiers associés à l'outil (un fichier document, par exemple, est le projet d'un traitement de texte). L'ouverture d'un outil ouvre automatiquement une fenêtre qui liste les noms des projets disponibles. L'ouverture de l'icône d'un projet ouvre automatiquement l'outil qui lui est associé. Le Workbench gère également la sélection étendue, une méthode permettant de sélectionner plusieurs éléments qui seront traités dans l'ordre où ils ont été sélectionnés. Par exemple, vous pouvez sélectionner un traitement de texte et trois projets (documents) ; le traitement de texte travaillera alors sur les projets dans l'ordre dans lequel ils ont été sélectionnés. Les tiroirs sont des icônes du Workbench qui contiennent des outils, des projets et d'autres tiroirs ; lorsqu'ils sont ouverts, ils affichent leur contenu sous forme d'icônes dans une fenêtre. Pour ajouter un élément au tiroir, faites glisser l'icône de l'élément dans la fenêtre d'un tiroir ouvert ou déposez-la sur l'icône d'un tiroir fermé. Vous pouvez supprimer un élément en déplaçant son icône sur la corbeille, un tiroir spécial dans chaque tiroir de disque qui contient les objets supprimés. Le presse-papiers est un objet spécial qui vous permet de transférer des données entre les outils (programmes). Le presse-papiers stocke le dernier texte, les derniers graphismes ou les dernières données coupées d'un projet dans un fichier en mémoire (ou sur le disque si la coupe est trop importante pour la mémoire). En utilisant le presse-papiers, vous pouvez transférer rapidement des informations entre les outils ou les projets. Les programmeurs peuvent également concevoir des écrans personnalisés, dans lesquels ils peuvent spécifier des choses comme la taille et la position de l'écran, le nombre de couleurs disponibles, les titres de l'écran et la police par défaut. Le Workbench contient également un programme appelé "Preferences" qui vous permet de définir des éléments tels que le temps maximum pour que deux clics soient considérés comme un double-clic, le type de moniteur, la vitesse de répétition des touches du clavier, l'intervalle avant qu'elles ne commencent à se répéter et la présence de périphériques facultatifs, notamment les imprimantes, les modems et les pavés tactiles. Le programme Preferences peut également vous donner accès à une interface de ligne de commande (CLI), qui vous permet d'effectuer des travaux en tapant des commandes. L'interface de ligne de commande, qui s'ouvre dans une fenêtre sous Workbench, n'est pas très documentée dans les manuels standard et vous ne verrez normalement pas l'icône qui lui est associée. L'interface CLI utilise des commandes similaires à celles de MS-DOS de Microsoft. Elle peut, par exemple, examiner les répertoires, exécuter des programmes et rediriger les entrées et les sorties ; en fait, elle donne aux programmeurs l'accès au système d'exploitation qui se trouve "sous" le Workbench. Avertissements L'aperçu de ce produit est inhabituel dans la mesure où nous avons examiné l'Amiga dans un état antérieur à ce que nous faisons habituellement pour les autres aperçus de produits. Nous nous sentons justifiés de le faire pour deux raisons : premièrement, le matériel était dans son état final (les puces spécialisées fonctionnaient sur la carte mère de la version de production, bien que les puces PROM [mémoire morte programmable] ne contenaient pas la version finale du code ROM) ; deuxièmement, l'Amiga devrait être annoncé au moment où vous lirez ces lignes, et nous pensons que la technologie utilisée ici est remarquable. Byte publiera une revue officielle de l'Amiga dès que nous pourrons mettre la main sur une version définitive de la machine. Nous avons rédigé cet aperçu du produit après avoir passé deux jours avec l'équipe d'ingénieurs Amiga, étudié quatre volumes de documentation technique et plusieurs manuels d'utilisation, puis tenu des conversations téléphoniques. Au moment où nous avons vu la machine, ni le code ROM ni le système d'exploitation n'avaient été "gelés", ce qui a limité la quantité de logiciels que nous avons pu voir sur l'interface utilisateur Workbench, à plusieurs programmes de démonstration et à une première version du logiciel de dessin Graphicraft. Toutes les captures d'écran de cet article proviennent d'un logiciel fonctionnel (bien qu'encore inachevé), mais la plupart de ce que nous avons écrit sur la partie logicielle de l'Amiga provient de la documentation ou des ingénieurs. Selon Commodore/Amiga, le BASIC qui sera fourni avec le système aura des capacités graphiques et sonores étendues, pilotées par des appels aux routines de la ROM. La liste 1 donne une liste de produits pour l'Amiga dont nous avons appris l'existence par leurs fabricants respectifs. Liste 1 Voici une liste des matériels et logiciels annoncés pour l'Amiga. Matériels
Nous avons été impressionnés par le détail et la vitesse des graphismes en couleur de l'Amiga et par la qualité de son système sonore. Les caractéristiques de l'Amiga - ses puces spécialisées, sa gestion du multitâche, ses multiples canaux DMA, son bus système partagé, son coprocesseur pour l'affichage, ses routines système en ROM, etc. - indiquent une complexité de conception matérielle que nous n'avons jamais vue auparavant dans les ordinateurs personnels (il est intéressant de noter que la complexité du Macintosh réside dans son logiciel et que, selon plusieurs développeurs tiers qui ont utilisé les deux ordinateurs, le Macintosh est plus difficile à programmer). L'effet synergique de ces caractéristiques explique la vitesse, la qualité et le faible coût de l'Amiga. Nous sommes également très heureux de l'inclusion de la bibliothèque de synthèse vocale dans l'Amiga. Cela signifie que n'importe quel programme Amiga peut potentiellement créer une sortie vocale, ce qui n'a jamais été courant dans les ordinateurs personnels parce que ce n'était pas, jusqu'à présent, une fonctionnalité standard. Le matériel semble bon - nous l'avons vu fonctionner - mais nous avons vu très peu de logiciels fonctionner réellement (un programme de dessin, le "bureau" Workbench, et quelques programmes de démonstration). Cependant, nous pensons que cette machine sera un grand succès ; si cela se produit, l'Amiga aura probablement un grand effet sur les autres sociétés d'ordinateurs personnels et sur l'industrie en général.
|