CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 1.05.01 Les 64 K supplémentaires du 6128

1.5.1 Les 64 K supplémentaires du 6128

L'analyse du fonctionnement de la commutation des mémoires dans le 6128 n'a pas été sans nous poser quelques problèmes. Il n'était pas possible de résoudre ce problème par de simples PEEKs et POKEs. La seule chose à laquelle nous pouvions nous raccrocher était le programme 'BANKMAN' livréavec l'ordinateur. Comme ce programme, pour des raisons incompréhensibles, est toutefois un programme protégé, les choses ne furent pas très simples. Quoi qu'il en soit, après un certain temps de tests et d'expérimentation, nous sommes en mesure de décrire au moins les principes essentiels de la commutation de mémoires.

Avant que nous ne décrivions cependant la commutation dé mémoires, deux notions doivent être expliquées. Par banque, nous entendons une zone mémoire de 64 K. octets, alors qu'un bloc a, lui, une taille de 16 K octets. Ces deux termes seront fréquemment employés dans la section suivante.

L'organisation de la mémoire est prise en charge par un composant PAL du type HAL16L8. Sur ce composant sont placés les canaux de données DO à D2 ainsi que D6 et D7, les signaux d'adresse A14 et A15, le signal IOWR*, le signal CAS ainsi que RESET et CPU*. Les signaux disponibles en sortie sont NA14, NA15, CAS0 et CAS1. Le PAL lui-même occupe l'adresse de port &H7Fxx, exactement comme le gâte array. Nous avons indiqué, lors de la description du gâte array, que la sélection des registres dans le GA est effectuée par l'état des bits de données D6 et D7. La combinaison pour laquelle les deux bits de données valent 1 (high) ne sélectionne aucun registre du GA. Au lieu de cela, l'information contenue dans les bits de données D0 à D2 est évaluée par le PAL. C'est à travers cette information qu'est effectuée la commutation entre les diverses configurations de la mémoire possibles.
Après une impulsion RESET, l'ordinateur se comporte comme s'il n'y avait qu'une banque de 64 K octets intégrée. Les signaux d'adresse A14 et A15 du Z80 sont transmis sans modification au multiplexeur d'adresse, à travers le   PAL.

Le signal CAS du GA est placé, à travers le PAL, sur le pin CAS0. Le signal CAS1 est provisoirement inactif. Ainsi est activée la première banque du CPC lors des accès à la mémoire. Le refresh est par ailleurs également assuré pour la deuxième banque puisque seul le signal RAS est nécessaire à cet effet. Ce signal est cependant placé parallèlement sur les deux banques.

Si l'on sort cependant sur le PAL une valeur appropriée, la situation de la mémoire du CPC change notablement. Mais demandons-nous d'abord quelles valeurs seraient possibles. L'adresse de port est déjà connue. Nous savons d'autre part que les bits de données D6 et D7 doivent être mis pour que nous n'appelions pas involontairement des registres du GA. Les bits de données D3 à D5 ne sont pas interrogés car ils ne sont pas reliés au PAL. Nous savons donc maintenant quelles sont les valeurs possibles: &C0 à &C7. Mais quel est l'effet des différentes valeurs?

Malheureusement, du fait de la structure du CPC, il est très difficile d'analyser toutes les combinaisons. Dans certains cas, c'est en effet pratiquement la totalité de la mémoire qui est commutée. Et bien sûr, après la commutation, le programme de commutation disparaît. Cela aboutit à un "plantage" classique du système. Nous pouvons cependant vous indiquer quelles sont les combinaisons intéressantes pour vous. Avec ces valeurs, la mémoire de la zone d'adresse de &4000 à &7FFF de la banque 0 est échangée contre un bloc de la banque 1. Les valeurs nécessaires à cet effet figurent dans la table suivante:

&C0 Banque 0, bloc 1   (situation de départ)
&C4 Banque 1, bloc 0
&C5 Banque 1, bloc 1
&C6 Banque 1, bloc 2
&C7 Banque 1, bloc 3
Si une des valeurs entre &C4 et &C7 est sortie sur l'adresse de port &7Fxx, le CASO devient inactif dans la zone de &4000 à &7FFF. Le signal CAS1 devient par contre actif. L'information sur les pins d'adresse A14 et A15 du Z80 est modifiée par le PAL.
La valeur &C5 constitue une exception à cet égard puisqu'elle appelle la même zone d'adresse de la deuxième banque. &C4 adressera cependant la zone d'adresse &0000 à &3FFF de la seconde banque, sans que le processeur 's'en rende compte'. Pour lui, la RAM se trouve toujours dans la zone d'adresse qu'il souhaite. Il en va de même pour la valeur &C6 et la zone d'adresse de &8000 à &BFFF, pour &C7 et la zone de &C000 à &FFFF  de la seconde banque.

Nous n'avons malheureusement pas pu élucider la signification précise des valeurs &C1 à &C3. Ces valeurs jouent certainement un rôle important sous CP/M 3.0, puisqu'avec les autres valeurs il n'est pas possible de réaliser une TPA de 61 K octets. Toutefois, pour les lecteurs intéressés, nous pouvons vous indiquer quelle est l'organisation de la mémoire sous   CP/M 3.0.

Sous ce système d'exploitation, on doit "errer" avec trois zones de RAM parallèles. Bien entendu, vous n'avez pas à régler vous-même la commutation des mémoires,   CP/M s'en charge pour vous.

Pour les trois banques, la zone d'adresse de &C000 à &FFFF est identique. Cette zone n'est jamais commutée car c'est à travers elle qu'est entreprise la commutation des autres zones. Dans cette zone figure la limite supérieure de la TPA, ainsi que les sections du   BIOS   et du   BDOS   qui sont toujours résidentes.

Dans la banque 0 figurent encore trois autres blocs. Le premier bloc (&0000 à &3FFFF) contient le bloc jump inférieur qui est copié, dès la mise sous tension, de la ROM dans le bas de la RAM Dans le bloc 1 de la banque 0 (&4000 à &7FFF) se trouve la RAM écran. Dans le bloc 2, enfin, se trouve la plus grande partie du BIOS et du BDOS ainsi que les blocs jump nécessaires qui empêchaient en effet, sous CP/M 2.2, une extension de la TPA. La banque 2 se compose des blocs 0 à 2 et contient la plus grande partie de la TPA. La partie encore manquante de la TPA figure dans le bloc 3 de cette banque. Ce bloc est cependant identique pour les trois banques.

La banque 2 contient enfin encore une fois la zone de &4000 à &7FFF. Cette zone contient le CCP et les tables hash nécessitées par CP/M.

Si vous voulez expérimenter les valeurs de commutation de mémoires qui n'ont pas été expliquées dans ce chapitre, nous vous invitons à suivre les conseils suivants. Vous devriez d'abord transférer la mémoire écran de &C000 à &4000. Vous devriez ensuite placer, avant de le lancer, votre programme de test dans la zone en &C000 ainsi libérée. L'idéal serait bien sûr un petit programme de moniteur placé dans cette zone. La raison en est que cette zone n'est sans doute jamais déconnectée, contrairement à ce qui peut arriver pour les autres zones. Le programme de moniteur doit cependant restaurer la configuration originelle de la mémoire avant tout appel de routines système à travers les blocs jumps. Il faut donc sortir la valeur &C0 sur l'adresse de port appropriée. Si vous oubliez cette restauration, il peut arriver que, du fait de la commutation que vous avez effectuée, les blocs jumps ne soient absolument pas accessibles. Dans ce cas, l'ordinateur se "plante" en beauté.

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 1.05.00 La Ram du CPC

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 089 millisecondes et consultée 556 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.