Interface Oric-PC
(2)Par Jean Marc Duro.
A
près la réalisation du montage, voici arrivé le moment de s'en servir. Le programme suivant en Turbo Pascal 6.0 est un exemple d'utilisation qui se contente de recevoir des octets et de les afficher à l'écran. L'appui sur une touche du clavier provoque la sortie du programme.|
uses crt, dos; { adresse des registres du port imprimante } |
{ lit un quartet sur le port imprimante } function InPort: byte; var PortData: byte; begin PortData := port[StatusAddress]; Inport := ((PortData or 7) div 8) xor $10; end; { routine principale } var PortDat, InputData: byte; done: boolean; begin Init($378); { 378, 3BC } { RAZ tampon sortie Oric } PortOut($04); { Active D2 } PortOut($00); { RAZ D2 } done := false; repeat { lit le premier quartet sur le port imprimante } PortDat := Inport; { teste si la ligne Busy est activée = donnée présente if (PortDat and $10) = $10 then begin { Stocke le quartet de poids faible } InputData := PortDat and $0F; { Active D1 = sélection poids fort / poids faible } PortOut($02); { lit le second quartet sur le port imprimante } PortDat := Inport; { Stocke le quartet de poids fort } InputData := InputData or ((PortDat and $0F) shl 4); { Affiche l'octet } Write(Chr(InputData)); { Sort si appui sur une touche } if keypressed then done := true; { RAZ D1, active D0 et D2 = RAZ tampon U1 et Ack vers Oric } PortOut($05); Delay(10); { fait durer le signal ack pour l'Oric } { RAZ D0 et D2 = retour à la normale } PortOut($00); end; until done; { restaure les contenus des registres } Restor; end. |
Un essai de transfert simple entre un Oric Atmos et PC 486 DX2-66 a montré un taux de transfert de l'ordre de 200 octets par seconde (LLIST).
Ceci indique les limites de performances du système. Prenons un exemple: supposons que nous voulions créer une sauvegarde d'écran avec des lignes mouvantes. Le programme de transfert enchaînera alors les commandes de dessin de lignes à destination du PC.
Le dessin d'une ligne nécessite de transférer 10 octets:
- 1 octet de commande qui définit la fonction à exécuter, ici le dessin d'une ligne,
- 2 octets d'abcisse du point de départ (X1: mot de 16 bits),
- 2 octets d'ordonnée du point de départ (Y1: mot de 16 bits),
- 2 octets d'abcisse du point de d'arrivée (X2: mot de 16 bits),
- 2 octets d'ordonnée du point de d'arrivée (Y2: mot de 16 bits),
- 1 octet de couleur de ligne (c: mot de 8 bits).
A raison de 200 octets par seconde, on ne pourra donc jamais dépasser 200/10 = 20 lignes par seconde. A cette vitesse maximale théorique, il faudra bien entendu retirer le temps nécessaire au traitement de la fonction par le PC, variable en fonction de la vitesse du PC. Ce temps est néanmoins faible devant le temps que met l'Oric pour présenter un nouvel octet sur son port imprimante.
On peut raisonnablement estimer pouvoir afficher au moins 15 lignes par seconde côté PC, sur un écran VGA 640 par 480. A titre de comparaison, la démonstration d'origine livrée avec l'Oric Atmos, dessine environ 8 lignes par seconde. On peut donc espérer doubler la vitesse d'affichage tout en quadruplant la résolution par le biais du montage d'interface.
Ce qui est vrai en graphique ne l'est plus en mode texte. En effet, un texte de 50 lignes de 38 caractères sera affiché en près de 10 secondes sur PC contre moins de 3 secondes sur Oric. L'accès au mode texte 80 x 25 avec le montage interface se paiera par une lenteur supplémentaire à l'affichage.
Ces tracas pourraient être levés en créant une librairie d'affichage en assembleur côté Oric d'une part, et en utilisant les possibilités bidirectionnelles des ports imprimantes récents, ce qui enlèverait au montage le besoin d'un multiplexeur et augmenterait la vitesse d'acquisition côté PC, mais là adieu l'universalité du montage.
Comme vous l'avez compris au travers de l'exemple du dessin d'une ligne, il va maintenant nous falloir définir les fonctions que nous voulons faire exécuter au PC et définir les codes de commande associés ainsi que les paramètres de ces fonctions. Le montage étant seulement unidirectionnel, il nous faudra aussi définir les variables représentatives de l'état de l'écran PC côté Oric (couleur de papier, couleur d'encre, position du curseur, etc.). Ce sera l'objet de notre prochain article.
