| ![](http://gamoovernet.pixhotel.fr/pics_gamoovernet690px/20131217202125-gc339-HexEdit6.PNG)
|
Chaque rangée du contenu de la PROM PR-55 correspond une rangée de sprites soit 8 lignes :
- Les rangées sur fond blanc, de 0 à 28, sont celles qui sont effectivement affichées à l'écran, ce qui correspond à une hauteur d'image de 29 sprites.
- Les rangées en gris correspondent à des sprites qui ne seront jamais affichés puisque occultés par la suppression trame.
- Les rangées en gris clair correspondent à des sprites qui sont oblitérés mais cependant accessibles par le µP 8080, un peu comme s'ils étaient en réserve.
- La rangée en gris foncé correspondrait à la rangée zéro (la première en haut d'écran ) si elle devait être affichée. Cela par ce que la dernière adresse issue du compteur ligne, la pseudo "256V" (sortie "Q" sur 5 du LS 74 en 134 ) adresse la PROM sans adresser la mémoire écran. L'amorce d'une seconde image, dont il n'y aurait que 7 premières lignes, serait ainsi accolée à la suite de la première.
- La zone en noir n'est pas utilisée car jamais adressée par le compteur ligne.
|
On pourrait schématiser le balayage de l'écran ainsi, chaque point représentant un sprite :
- Une image de 32×29 sprites visualisables, ceux inclus dans le cadre qui représente la surface de l'écran.
- 3 rangées fantômes de 32 sprites non affichées (en rose )
- Une copie tout aussi fantôme et incomplète (7 lignes sur 8 ) de la rangée 00 de l'image déjà affichée (en rouge ).
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ 00 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 01 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 02 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 03 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 04 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 05 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 06 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 07 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 08 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 09 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 10 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 11 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 12 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 13 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 14 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 15 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 16 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 17 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 18 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 19 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 20 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 21 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 22 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 23 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 24 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 25 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 26 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 27 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 28 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ └───────────────────────────────────────────────────────────────────────────────────────────────────┘ 29 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 30 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 31 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ 00 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │
|
Mais cela n'est valable que pour la page écran "B" qui est adressée directement par le compteur ligne général, il n'en va pas de même des autres pages à qui est associé un compteur propre qui s'incrémente au même rythme que celui de la page "B" mais peut par contre être resetté à tout moment (
moitié gauche du schéma "E" ).
Voici comment l'affichage d'une page "D", "E" ou "F" se présenterait si le reset de son compteur propre était effectué en début de la rangée 18 sur l'écran.
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 _B _X ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ 00 14 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 01 15 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 02 16 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 03 17 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 04 18 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 05 19 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 06 20 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 07 21 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 08 22 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 09 23 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 10 24 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 11 25 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 12 26 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 13 27 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 14 28 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 15 29 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 16 30 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 17 31 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 18 00 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 19 00 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 20 01 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 21 02 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 22 03 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 23 04 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 24 05 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 25 06 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 26 07 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 27 08 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 28 09 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ └───────────────────────────────────────────────────────────────────────────────────────────────────┘ 29 10 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 30 11 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 31 12 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 00 13 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │
|
La colonne "
B" représente les n° de rangées sur l'écran (
ou celles de la page "B" ), la colonne "
X" représente les n° de rangées d'une page quelconque "D", "E" ou "F".
- Les rangées 10, 11, 12 et 13 seraient oblitérées par la période de suppression trame. La rangée 13 serait incomplète aux 7/8ème.
- Les rangées 29 à 31 des sprites fantômes autrefois occultées se retrouveraient affichée au beau milieu de l'écran.
- Le doublon de la rangée 00 succède comme pour la page "B" à la rangée 31. Il précède de ce fait la rangéee 00 originale dont la position sur l'écran est imposée par la ligne où le compteur a été resetté.
En fait tout ceci n'est pas strictement vrai, car la dernière ligne de la rangée tronquée se retrouve affichée tout en haut d'écran et décale ainsi toutes les rangées de sprites d'une ligne vers le bas. Le doublon de la rangée 00 en fait les frais et se retrouve amputé d'une ligne à l'affichage.
Pour simplifier l'exemple, le reset a été choisi au niveau de la première ligne d'une rangée, mais il peut être aussi être effectué au niveau de n'importe qu'elle autre ligne. Ce dispositif servirait donc à déplacer visuellement les rangées de sprites vers le haut ou vers le bas, ligne par ligne ou plus, et permettrait de délester le µP 8080 de cette tâche accaparante.
Cette conception impliquerait que tous les sprites de la rangée 00 de chaque page soient de la couleur du fond d'écran pour éviter de dédoubler les sprites qu'elle contient.
Bien que fonctionnel, le fait que la dernière rangée soit amputée d'une ligne introduit cependant une irrégularité qui ne semble pas "politiquent correcte". Ce qui renforce la présomption de corruption du contenu de la PR-55 listée, car la valeur qui semblerait la plus adéquate pour l'octet en 106H serait plutôt "0CH" que "0AH" afin d'inclure cette ligne dont l'absence perturbe la régularité dans l'enchainement des lignes. Le reset du compteur ligne général ayant déjà été prévu par la valeur "02" de l'octet suivant.
Quelques mots sur le dispositif de reset des compteurs de page.
Il a été choisi d'utiliser un bit mémoire par ligne pour valider le reset de chaque compteur. Comme chacun peut-être resetté indépendamment des deux autres sur n'importe quelle ligne, il aurait fallu une mémoire de 1024×3 bits.
Ici c'est une mémoire statique 2141 d'une taille de 4096×1 qui a été utilisée. Finalement un seul bit a suffit pour les 3 compteurs puisque à chacun a été associé un "time slot" différent pendant le signal de blanking ligne (
démultiplexeur 74LS138 ). "Time slot" au cours duquel le compteur associé peut être resetté par le signal SRLD/ si le bit correspondant est activé en mémoire.
29 30 31 32 33 34 35 36 37 38 39 40 41:0 1 2 ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┬ ┌────┐ █ └────┘ └────┘ └────┘ └────┘ └────┘ └────┴────┘ └ ┌─────────┐ · ┌─────────┐ · ┌─────────┐ · · ┌ █────┘ · └─────────┘ · └─────────┘ · └──────────────┘ ───────────────┐ · · · ┌───────────────────┐ · · · █ · · └───────────────────┘ · · · └─────────────── ───────────────┐ 0 • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 0 ┌────────── █ · · └────────────────────────────────────────────┘ · · · · · · · · ┌────┐ · · · · · · █──────────────────────────────────┘ └────────────────────────────── · · · · · · · ┌────┐ · · · · · █───────────────────────────────────────┘ └───────────────────────── · · · · · · · · ┌────┐ · · · · █────────────────────────────────────────────┘ └────────────────────
|
8H
16H
32H
H BLANK/
Time Slot n°4, alloué à la page "D"
Time Slot n°5, alloué à la page "E"
Time Slot n°6, alloué à la page "F"
|
Le chronogramme ci-dessus montre le découpage du signal "H BLANK" en 8+1 "time slots", le n°0 étant bissé en fin de l'intervalle imparti. Les signaux correspondants sont démultiplexés par le 74LS138 en 104.
Seuls 3 parmi les derniers servent à autoriser le reset des compteurs par le signal "SRLD/":
- le 5ème ou n°4 alloué à la page mémoire "D".
- le 6ème ou n°5 alloué à la page mémoire "E".
- le 7ème ou n°6 alloué à la page mémoire "F".
Ainsi cette mémoire d'un seul bit peut être accédée au travers les multiplexeurs 74LS157 en 100,101 et 107 :
- En écriture seule par le µP 8080 via le fil DŌB0 de son bus de donnée.
- En lecture quasi permanente par le dispositif de remise à zéro.
L'adressage de la mémoire étant réalisé en concaténant :
- le n° du "time slot" alloué grâce aux fils 8H à 32H du compteur de blocs de 8 pixels ou sprites.
- le n° de la ligne à partir des fils 1V à 128V du compteur ligne.
La présence du 74L279 (
en 98 ), relégué dans un coin du schéma "E", semblait à première vue anecdotique, et en fait après étude, il n'en est rien du tout. Ses flip-flops changent d'état dés l'apparition du signal "V BLANK/" et ne retrouvent celui d'origine qu'au reset du compteur associé à chacun. Ceci est lourd de conséquences car le reset des registres à décalage 74LS166 des pages "D", "E", et "F" est maintenu pendant toute cette période. Ce reset étant prioritaire sur leur horloge, aucun pixel ne peut alors être émis par ces registres à décalage.
Ce qui impliquerait ceci pour l'exemple donné en avant si je ne me suis pas fourvoyé : pendant cette période à la suite du signal de suppression trame, aucun sprite ne pourrait être affiché et le haut de la page écran resterait probablement complètement noir (
si le noir est la couleur du fond ) jusqu'à la ligne où le reset du compteur de la page sera effectué !
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 _B _X ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ 00 14 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 01 15 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 02 16 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 03 17 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 04 18 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 05 19 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 06 20 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 07 21 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 08 22 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 09 23 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 10 24 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 11 25 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 12 26 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 13 27 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 14 28 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 15 29 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 16 30 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 17 31 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 18 00 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 19 00 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 20 01 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 21 02 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 22 03 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 23 04 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 24 05 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 25 06 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 26 07 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 27 08 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 28 09 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ └───────────────────────────────────────────────────────────────────────────────────────────────────┘ 29 10 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 30 11 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 31 12 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │ 00 13 │ · · · · · · · · · · • · · · · · · · · · • · · · · · · · · · • · · │
|
Ainsi les rangées de sprites qui disparaitraient après avoir chutées ne réapparaitraient pas par le haut puisque qu'elles seraient oblitérées du fait du reset maintenu sur le registre à décalage impliqué.