Obligement - L'Amiga au maximum

Vendredi 19 avril 2024 - 23:00  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Dossier : L'émulation PC sur Amiga 2000 (carte A2088)
(Article écrit par Stéphane Mayère et extrait d'A-News (Amiga News) - novembre 1989)


Commodore annonce dans ses publicités que l'Amiga 2000 est une machine multitâche (tout le monde le sait désormais) et multistandard (MS-DOS et bientôt le plus alléchant Unix). Mais vous êtes-vous déjà posé la grande question : "Mais dis Monsieur Commodore, comment est-ce que c'est-y-que ça fonctionne cette affaire de compatibilité sur un A2000 ?".

Eh bien mon enfant, c'est un petit peu complexe et en même temps très sioux, nous allons donc ensemble décortiquer la carte A2088 et voir son fonctionnement.

La carte A2088

Cette carte est en fait un compatible IBM-XT modifié tenant sur une simple carte 13x4 pouces. Son microprocesseur est un 8088 cadencé à 4,77 MHz comme un bon vieux PC quoi... Une EPROM de 16 koctets gère un BIOS que Commodore a modifié afin d'y apporter les routines nécessaires à la communication avec l'Amiga.

La carte est fournie avec 512 ko de mémoire, sans compter les 128 ko de mémoire mixte utilisée pour les communications interprocesseurs (nous y reviendrons ...). Un emplacement est prévu pour un coprocesseur arithmétique 8087. De plus, la carte est équipée avec un contrôleur de disquette SMC 9268 et un connecteur au standard 5 pouces. Il est à noter que le lecteur A1010 de l'Amiga est reconnu du côté PC comme un lecteur 720 ko (il faut le brancher sur la carte, bien sûr...).

Tout ça sur une simple carte me direz-vous ? Cette petite carte fait encore bien plus : je n'ai pas encore parlé de ce que Commodore appelle le "PC Multifunction Chip". Ce circuit spécialisé (comme le trio Agnus, Denise, Paula) fait le travail d'un contrôleur DMA, d'un contrôleur d'interruptions et d'un timer. Résultat des courses : une A2088 équipée de ce circuit et de mémoire est un véritable PC tenant sur une carte, les périphériques en moins.

La carte 2088 a deux connecteurs latéraux : un connecteur PC qui se branche dans un port PC et un connecteur 100 broches qui s'enfiche dans le port du bus du côté Amiga. Le connecteur du côté PC permet, en étant sur le bus, à l'A2088 d'avoir accès aux autres ports PC et aux périphériques qu'on peut y mettre. Le connecteur sur le bus Amiga permet au 68000 d'accéder à la mémoire mixte de l'A2088. Cette mémoire est conçue pour être accessible par les deux côtés de la machine : Amiga et PC.

Émulation PC A2088
Diagramme simplifié de l'A2000 avec la carte A2088 installée : le bus processeur
et les bus PC peuvent fonctionner sans interférer avec le Blitter.


D'autres petites trouvailles ont étés ajoutées sur l'A2088 pour lui faire croire qu'elle est réellement un PC à part entière. L'exemple du clavier est le plus simple à comprendre (et à expliquer pour moi). Le PC Multifunction Chip s'attend à être connecté à un clavier PC standard (qui lui, communique à l'aide d'une interface série synchrone), mais le clavier du 2000 n'est pas un clavier PC, bien qu'il soit connecté sur l'A2088. Voilà pourquoi les concepteurs de la carte 2088 ont ajouté un registre à décalage entrée parallèle/sortie série ainsi que le logiciel permettant de le piloter dans le matériel de la carte.

Les effets en sont les suivants : quand une touche est pressée sur le clavier, elle est traduite (du côté Amiga) dans son équivalent PC et sa valeur est chargée dans la mémoire mixte. Le côté Amiga prévient alors l'A2088 de la présence de la valeur de la touche se trouvant en mémoire. Le logiciel de gestion du registre transfère alors la valeur de la touche de la mémoire vers le registre à décalage, et cette valeur est transmise par une ligne série au PC Multifunction Chip comme si elle venait directement d'un clavier. Tout ce travail explique pourquoi l'écho de la frappe à l'écran est un peu lent. La gestion de l'affichage est un peu plus compliquée, nous y reviendrons.

Le logiciel de gestion de l'A2088

On pourrait maintenant se demander comment cohabitent (pour reprendre le cri d'amour du crapaud) les deux systèmes. En général chaque système réagit quand l'autre lui envoie une interruption (je rappelle qu'une interruption est un évènement élémentaire pouvant survenir à n'importe quel moment). Frapper une touche sur l'Amiga envoie une interruption à l'A2088. Ceci déclenche une routine de gestion des interruptions de l'A2088 qui fait que la carte gère la valeur de la touche comme si elle avait été frappée du côté PC, selon le mécanisme détaillé plus haut. De la même manière, lorsque l'A2088 accède à la mémoire écran (graphique, monochrome, texte...), elle envoie une interruption à l'Amiga, qui va alors aller scruter la mémoire vidéo de l'A2088 (qui fait partie de la mémoire mixte) et déterminer ce qu'il doit et comment il doit afficher ce que l'A2088 a envoyé.

Quand on clique sur les icônes PCmono ou PCcolor, ces programmes vont lancer un autre programme appelé PCwindows. Ce dernier ouvre une fenêtre et un écran dans lesquels vont s'afficher les informations générées par l'A2088. L'Amiga 2000 lui voit la carte A2088 comme un périphérique logique et cherche à lui associer une bibliothèque de routines (c'est la janus.library du tiroir Expansion). PCwindows (ou n'importe quel autre programme Amiga) a alors accès à une série de routines qui lui permet d'interagir avec le matériel de la carte A2088 (les puces, quoi...).

Cet accès est de type "haut niveau" et est immuable. Ceci est un énorme avantage car cela permet à Commodore de modifier la carte elle-même ou la bibliothèque de routines, sans affecter les autres programmes déjà existants, ce qui n'aurait pas été possible avec des accès à des routines de bas niveau. Le programme PCwindows lance plusieurs tâches qui sont réveillées par les interruptions du PC comme on l'a expliqué auparavant.

Actuellement une interruption oblige l'Amiga à envoyer un signal Exec (exec.library présente en ROM) à la tâche.

La mémoire mixte

Le côté Amiga et le côté PC de l'ordinateur doivent tous les deux être capables de lire et d'écrire dans la mémoire mixte, et ce rapidement, bien que chaque côté ait sa propre architecture et sa façon de "réagir". Par exemple, le 8088 stocke un mot de 16 bits en mettant l'octet de poids faible à l'adresse la plus basse, alors que l'Amiga stocke un mot de 16 bits en écrivant d'abord le poids fort. De la même façon, le PC stocke un pixel couleur dans deux bits adjacents d'un même octet de la mémoire vidéo, alors que l'Amiga stocke les deux bits dans des octets différents.

Les concepteurs de la carte 2088 ont donc trouvé une solution élégante : du côté PC, chaque mot de mémoire a un emplacement donné. Le côté Amiga, lui, peut gérer un morceau de mémoire de trois façons différentes. Il utilise une adresse pour accéder à un octet de mémoire, une autre pour accéder à un mot de mémoire, et une troisième pour accéder à deux octets de mémoire vidéo couleur, les deux octets étant lus du côté Amiga dans l'ordre inverse par rapport à ce que voit le côté PC. Dans le troisième cas, le mot de donnée lu par le côté Amiga contient le premier bit de chacun des huit pixels contenus dans le premier octet et le deuxième bit des pixels dans le deuxième octet (ouf...).

Émulation PC A2088
Ces diagrammes montrent l'accès à la mémoire mixte. Deux bits adjacents du côté PC forment un pixel,
mais doivent être dans différents plans de bits du côté Amiga pour récréer le même pixel. La figure A montre comment
deux octets du PC sont représentés dans la mémoire Amiga. La figure B montre comment les deux octets sont placés
dans différents plans de bits pour transcrire le pixel créé du côté PC).


Émulation PC A2088
Ce diagramme montre les trois modes d'accès à la mémoire mixte. Bien que chaque emplacement mémoire
ait une seule adresse du côté PC, il apparaît à trois endroits différents dans la zone Amiga.
Ce type de codage permet d'avoir accès à la résolution 320x200 en 4 couleurs du PC. L'A2088 gère
également le mode 640x200 monochrome, mais comme chaque pixel est défini par un bit, la manipulation
précédente n'est plus nécessaire.


Autrement dit, l'Amiga et le PC voient la même mémoire différemment selon l'emplacement mémoire que l'Amiga utilise pour y accéder. En plaçant ces fonctions au niveau du matériel, l'Amiga et le PC peuvent faire tourner leurs propres logiciels sans avoir à se préoccuper de conversions de données, ou ce qui est plus important, du temps que pourraient prendre de telles conversions.

Différentes parties de la mémoire mixte sont réservées pour des utilisations spécifiques :
  • Une zone de 64 ko est utilisée pour les opérations usuelles (généralement pour transférer des secteurs disques entre les deux machines).

  • 32 ko sont utilisés par la mémoire vidéo couleur du PC, 8 ko pour la mémoire monochrome.

  • Une zone de 16 ko est appelée "Parameter RAM". Cette mémoire sert à deux choses :

    D'abord, les deux systèmes en utilisent un octet chacun, appelé "LockByte", pour signaler s'ils vont s'allouer une partie des 64 ko de mémoire usuelle (qui seront restaurés dès la fin de la tâche). Il peut arriver que les deux systèmes essaient de s'allouer le même mémoire au même instant. Le logiciel de gestion va alors vérifier que le LockByte a une valeur d'inutilisation (0) et mettre cette valeur à "1" pour indiquer une allocation de mémoire, puis redonner la valeur d'inutilisation. Les deux systèmes peuvent alors partager sans problèmes la mémoire mixte.

    La deuxième fonction de la "Parameter RAM" est de stocker les blocs de paramètres qu'un système envoie et que l'autre lit. Par exemple, quand on veut transférer des données du côté Amiga vers le côté PC, les données traversent une zone des 64 ko de mémoire usuelle, et la "Parameter RAM" contient à ce moment les informations nécessaires au transfert : l'emplacement et la longueur de bloc de données ainsi que l'emplacement de côté PC.

  • Les derniers 8 ko restants de la mémoire mixte servent à gérer les entrées/sorties (I/O page RAM). Du côté Amiga, cette mémoire lit un certain nombre d'adresses, alors que du côté PC , elle correspond à un ensemble d'emplacements entrées/sorties utilisés pour contrôler les ports série et parallèle, ainsi que le contrôleur CRT monochrome et couleur du PC. Dans certains cas, ces emplacements sont des registres. Dans d'autres, ils recopient des valeurs de registres que l'Amiga peut lire mais pas modifier.
L'affichage du PC

Nous avons maintenant une idée de la façon dont l'Amiga et le PC communiquent entre eux. Voyons maintenant comment est géré l'affichage. Un affichage monochrome (texte) ou couleur (texte ou graphique) est détourné vers le moniteur Amiga de la façon suivante. Quand un programme tournant du côté PC envoie des données à l'écran, les routines d'entrées/sorties du BIOS envoient des informations dans la zone vidéo de la mémoire mixte. Le fait d'écrire dans cette mémoire génère une interruption de l'A2088 vers l'Amiga. L'Amiga la reconnaît comme une interruption vidéo et "réveille" une tâche qui compare le contenu de la mémoire mixte vidéo avec ce qui est affiché dans la fenêtre PC courante du moniteur Amiga.

Cette tâche connaît en permanence ce qui est affiché et met à jour uniquement les zones qui été modifiées. Ceci fait que l'affichage se fait bien plus vite que s'il fallait rafraîchir tout l'écran à chaque fois. Par exemple pour l'ajout d'un caractère en fin de ligne. Si le PC est en mode monochrome (et stocke l'écran comme une matrice de valeurs ASCII) alors, la tâche d'affichage doit convertir ce caractère en une matrice rectangulaire pour l'afficher sur l'écran Amiga.

Pour ce faire, l'Amiga se réfère à un fichier PCFONT.FONT qui décrit le profil binaire du jeu de caractères monochrome IBM (caractères ASCII plus les caractères spéciaux IBM). Si le caractère affiché a une valeur de fond différente de celle par défaut, la tâche d'affichage de l'Amiga va afficher le caractère dans plusieurs plans de bits Amiga.

Accès au disque dur

Commodore a conçu l'A2088 de façon à ce que le côté Amiga du 2000 puisse accéder à une partition d'un disque dur PC. On lance le programme FDisk du côté PC pour allouer une partie du disque au PC. Commodore fournit un programme similaire appelé ADisk qui permet de créer une partition AmigaDOS sur ce même disque dur.

Du côté Amiga, la partion apparaîtra avec un nom d'unité de JHO: et sera traitée comme n'importe quel autre disque Amiga, bien qu'on ne puisse pas démarrer dessus (même avec les ROM 1.3). Nous verrons une solution élégante pour y remédier, en éliminant carrément le disque PC (qui supprime l'autodémarrage des ROM 1.3). Revenons à notre JHO:. Il dispose de son propre pilote qui utilise la mémoire mixte et un système d'interruptions pour accéder au disque dur. La nouvelle question est, vous l'aurez compris, comment les deux côtés de la machine vont-ils coordonner leur accès au même disque ?

Essayons de répondre sur un exemple : supposons que nous ayons un disque PC avec son contrôleur dans un port PC (ce n'est pas mon cas) et suivons les différentes étapes de l'initialisation au démarrage du 2000. A la mise sous tension du système, le 8088 de la carte est immédiatement placé en état de "RESET". En fait, ceci empêche le processeur de tourner pendant le démarrage de l'Amiga. La startup-sequence est exécutée (elle doit contenir naturellement la commande BindDrivers pour charger la bibliothèque Janus).

Quand le démarrage est terminé, l'A2000 envoie un signal d'annulation de RESET (SET) au 8088 et boucle en attendant une interruption du 8088. Débarrassé du RESET, le 8088 exécute alors les routines d'initialisation du BIOS : vérification du processeur, des canaux DMA, initialisation des vecteurs d'interruptions, etc. Commodore a modifié ces routines pour que l'A2088 signale à l'Amiga la fin de son initialisation et boucle ensuite en attendant un signal de continuation de l'Amiga. Ceci se produit après le rafraîchissement mémoire du côté PC. Lorsque l'Amiga en a été informé, il lit un bloc de code (fichier PC.BOOT) sur son disque, qu'il transfère ensuite dans la mémoire mixte (c'est du code directement exécutable par le 8088).

C'est le seul code qui est chargé dans la mémoire mixte, et il est chargé de façon à apparaître de côté PC à une adresse de ROM périphérique. L'Amiga donne le signal de continuation au 8088. La séquence BIOS est presque terminée. Le 8088 cherche alors des ROM périphériques des adresses 8000 aux adresses F4000 (hexa) en scrutant cette zone par pas de deux koctets. Si une série de trois octets de signature 55AA suivie d'un octet indicateur de longueur est rencontrée, le BIOS transfère le contrôle à l'adresse qui suit les octets de signature, qui doit être un code d'initialisation de périphérique. Dans notre cas ce serait un contrôleur de disque dur.

Ce code va alors détourner un vecteur d'interruption bien spécifique, le vecteur INT 13H. Ce vecteur a été généré par les routines d'initialisation du BIOS qui gère les entrées/sorties disques. La ROM disque dur oblige alors ce vecteur à pointer sur ses propres routines. Dans ce cas, une demande de présence de disque dur est interceptée par la ROM, les requêtes d'entrées/sorties des disquettes sont identifiées et passées au BIOS. Les routines ROM d'initialisation du disque dur sont terminées et le BIOS continue sa scrutation, à la recherche d'autres ROM périphériques.

A ce moment, il rencontre le fameux code PC.BOOT en mémoire mixte. Ce code est précédé par les octets de signature signalant qu'il se comporte comme une ROM périphérique. Le BIOS passe donc le contrôle à ce qu'il croît être une routine d'initialisation de périphérique, mais qui est en fait une routine de PC.BOOT servant à rediriger le vecteur d'interruption INT 13H. Une requête d'entrée/sortie va alors être interceptée par le PC.BOOT : le côté Amiga s'est commandé lui-même du côté PC à l'aide des routines d'entrées/sorties disque ! LE BIOS termine alors sa recherche de ROM périphériques.

A partir de ce moment, le côté Amiga peut envoyer des requêtes d'entrées/sorties aux disques PC en accédant directement aux routines ROM de la carte contrôleur ou à travers le BIOS pour les unités disquettes. Dans ce cas, le côté Amiga peut accéder à une partition AmigaDOS sur un disque PC, quelles que soient les tâches tournant du côté PC. De plus, le code PC.BOOT dispose des fonctions nécessaires pour empêcher les accès simultanés des deux machines au même disque. Quand le côté PC accède au disque, le PC.BOOT intercepte la requête d'entrée/sortie et envoie un "flag" à l'Amiga via la mémoire mixte pour lui indiquer de ne pas faire d'accès disque de son côté.

Garder l'autodémarrage du disque Amiga avec les ROM 1.3

Techniquement ce système est très bon, du moins tant qu'on garde ses ROM 1.2. En effet, si on a un disque dur Amiga et un disque PC, l'autodémarrage du disque Amiga est supprimé. Heureusement, il existe une solution : on peut démarrer sur le disque Amiga et créer sur ce disque un pseudo-disque PC qui sera en fait un gros fichier Amiga (chez moi 10 Mo). Voici comment faire :

Tout d'abord, comme on dispose d'un disque dur et d'un Mo de mémoire, on réinstalle le logiciel de la carte passerelle dans son intégralité. En particulier, le répertoire "c" du système doit contenir les commandes suivantes : DJmount, MakeAB ; le répertoire "devs" doit contenir le JDisk.device ; le répertoire "expansion" la bibliothèque Janus ; et le tiroir "fonts" le fichiers Pcfont.font et le répertoire Pcfont.

Ensuite vient la procédure de création du pseudo-disque proprement dite. Première chose : éditer la startup-sequence et rajouter après la commande BindDrivers la ligne suivante :

Run >NIL: SYS:PC/PCDisk

En effet, l'Amiga utilise PCDisk pour accéder au pseudo-disque, donc PCDisk doit tourner avant que le PC démarre. Il faut ensuite créer le fichier d'autodémarrage Amiga. Pour cela, utiliser la commande suivante :

MakeAR SYS:<nom de répertoire><nom du fichier>

Le programme MakeAB va alors demander les spécifications du pseudo-disque. La doc de la carte passerelle donne les spécifications d'un disque 10 Mo (ce qui suffit généralement), mais on peut donner n'importe quels types ou tailles même non standard ! Pour un disque de 10 Mo, il faut donner :
  • Nombre de têtes : 4.
  • Nombre de secteurs/piste : 17.
  • Nombre de cylindres : 306.
MakeAR va alors générer un fichier dc 10 Mo (ça peut prendre un moment !) qui sera réservé au PC. Une fois le fichier créé, il faut indiquer au système son emplacement. Il faut alors créer un petit fichier qu'on appellera impérativement "ABOOT.CTRL", et qui se trouvera dans le répertoire "SYS:PC/System". Ce fichier doit contenir le chemin complet d'accès au fichier créé avec MakeAR.

SYS:<nom de répertoire><nom du fichier> [return]

Une fois ce fichier sauvegardé, la moitié Amiga du travail est terminée. Il faut alors démarrer du côté PC avec le disque système, puis exécuter la procédure normale d'initialisation d'un disque MS-DOS. D'abord lancer le programme FDisk du côté PC pour partitionner le disque (même si on ne veut qu'une seule partition), puis formater la disque à l'aide de la commande :

Format c: /s

L'option "/s" permet d'installer le système sur le disque et donc de le rendre amorçable (ce qui est le but du jeu, après tout). Ceci fait, redémarrer l'Amiga. Après l'exécution de la startup-sequence, vous pourrez voir le lecteur 5"1/4 se mettre en branle, puis le disque dur. Si on clique sur l'icône "PCmono" ou "PCcolor", on se retrouve instantanément sous l'invite de commande C:>.

Quels sont les avantages ? Le principal est le suivant : si vous achetez un disque PC et son contrôleur, vous perdez l'autodémarrage sur le disque dur Amiga, depuis le temps qu'on l'attendait, dommage. Ensuite, deux disques durs, à mon avis ça fait double emploi.

Émulation PC A2088
Ce diagramme montre la séquence d'évènements nécessaire pour démarrer
l'A2088 avec l'Amiga 2000.


Mieux vaut en avoir un seul, plus gros et de toute façon, ça libère un port du côté PC pour mettre une carte EGA par exemple (le mode CGA est vraiment pourri !). De plus, lors d'une copie de sauvegarde du disque dur, les données MS-DOS sont sauvegardées puisque le disque PC est un fichier Amiga. Voilà les p'tits clous (comme dirait monsieur Flop-50) comment l'Amiga contrôle le PC de A à Z.


[Retour en haut] / [Retour aux articles]