CODING ★ LES MORBIDES DOUILLENT ★

Bidouilles ACPC n°34 - Banques de mémoire

L'inspiration de ce titre m'est venue dans le métro en voyant la tronche toujours aussi fêtarde des voyageurs. Qu'il est triste de ne pouvoir recevoir un sourire, le matin, aux heures de pointe. Pour ne pas traîner plus longtemps, voici le sujet des bidouilles de ce mois-ci : la pagination des 6128, plus ou moins.

Je ne veux pas faire de pub, mais les possesseurs de 6128 sont vachement avantagés au regard de ceux du 464. Non pas que la machine de ces derniers soit de la m..., mais il faut tout de même avouer que la 6128, Plus ou non, offre bien des facilités par lesquelles pèche son prédécesseur. Si le lecteur de disquettes fait incontestablement partie des avantages du 6128, il n'en va pas de même pour l'utilisation des 64 Ko supplémentaires de mémoire. Il est impossible d'en profiter pleinement sous Basic, et des désagréments sont rencontrés lors de l'utilisation sous Assembleur. En effet, si vous désirez utiliser la pagination, il vous faut jongler avec la page située de &4000 à &8000. Soit vous la consacrez aux données, soit les programmes qu'elle contient ne seront accessibles que lorsqu'elle sera active. Bref, c'est le bordel dans tous les cas de figure. Pour éclairer votre lanterne, nous allons mettre le feu aux poudres. Voici donc les manipulations à effectuer ainsi que quelques idées à mettre en pratique, si vous le désirez,

SE METTRE A LA PAGE

Pagination... Pagination ? Pagination ! Poum a beau retourner ce mot dans tous les sens, il ne voit pas ce que cela peut bien vouloir dire. Pour nos chers amis inaccoutumés à ce genre de vocabulaire, je vais m'expliquer, histoire de mettre tout le monde à la page. Paginer, dans le dictionnaire, est l'action de numéroter des pages. Comme nous ne sommes pas un magazine de PAO mais d'informatique, la pagination est pour nous l'art de rendre des pages de mémoire actives ou non. Qu'est-ce qu'une page mémoire ? C'est normalement une unité de mesure d'espaces ( 256 octets ). Dans le cadre de la pagination, cette valeur peut être quelconque, voire négligeable, mais surtout directement dépendante de l'ordinateur utilisé. Sur CPC, les banques étant de 16 Ko, toute pagination sera effectuée à partir de cette valeur. Un de ses multiples sera possible, mais une taille inférieure est hors de question, à cause du hardware. Pour mieux comprendre la disposition des banques supplémentaires, voici quelques explications. Vous avez pu remarquer que les 64 Ko de mémoire vive du CPC sont linéaires. Il est possible de les adresser directement, et ce sans se poser la moindre question, du moins lors de l'écriture de données. Si la commande proposée au Z80 est une lecture, la mémoire vive sera lue si l'adresse demandée pointe dans les 32 Ko centraux (&4000 - &C000 ). Ce sont les ROM qui seront lues, dans le cas où elles sont actives, et si l'adressage porte sur les 16 Ko inférieurs ou supérieurs. Cela nous prouve que le CPC est capable de mettre en évidence certaines zones de mémoire de 16 Ko selon leurs états. Il en va de même avec l'extension mémoire de 64 Ko. Avant tout, il faut la voir comme une seconde colonne, appelée soit, de 64 Ko, parallèle à la mémoire centrale et de la même manière, divisée en 4 pages de 16 Ko. Ces pages sont numérotées de 1 à 4, du bas de la mémoire vers le haut. Comme elles ne sont pas sur le même plan mémoire, il est a priori impossible de les atteindre, mais c'est compter sans paginations.

GAY TARE

A ne pas confondre avec Gai Luron (ni avec Georges Guétary... NDSDR), ce composant est un des plus pratiques du CPC. Cette possibilité qu'a le Z80 de rendre actives des pages mémoire est le fruit du travail du gate-array. Ce composant qui permet déjà de disposer d'une palette de 27 couleurs alors que le 6845 ne peut en gérer que 16 à lui seul et dans des conditions normales, est un réel monstre d'ingéniosité. S'il gère la commutation des Rom, pourquoi ne pas lui proposer celle des RAM. Cette tâche, il la remplit a merveille. Comme vous le savez, ce gate-array est situé sur le port &7FXX où XX est une valeur quelconque. Les commandes de gestion de Ram sont reconnaissables par le fait que les deux bits de poids fort de l'octet mis sur le bus d'entrées-sorties en &7FXX sont à 1.

Voici les valeurs utilisables de cet octet sous Basic ou en Assembleur :

  • OUT &7F00,&C0 : mode normal, vous disposez d'un CPC 464 conventionnel.
  • OUT &7F00,&C4 : dans ce mode, la page 1 de l'extension mémoire prend la place de la page 2 normale et se retrouve donc entre &4000 et &8000.
  • OUT &7F00,&C5 : idem pour la page 2 de l'extension.
  • OUT &7F00,&C6 : idem pour la page 3 de l'extension.
  • OUT &7F00,&C7 : idem pour la page 4 de l'extension.

Comme vous le voyez, ces commandes mettent simplement les pages citées à la place de la banque 2 normale. Rien de bien sorcier, Là où les choses deviennent intéressantes, c'est dans les commandes suivantes : OUT &7F00,&C1 : la banque 4 de l'extension se loge de &C000 à &FFFF. Vous voyez l'astuce ? OUT &7F00,&C2 : le second soit prend la place du premier (les quatres banques principales deviennent secondaires et inversement). Les quatre premières commandes de pagination ne sont pas réellement intéressantes. En effet, elles bloquent de manière gênante la zone s'étalant de &4000 à &8000, ce qui est ennuyeux pour les programmes conséquents. Nous ne reviendrons donc pas'sur eux outre mesure. La dernière, si elle est très puissante et peut laisser présumer un pseudo « bi-tâche », est difficilement utilisable. En effet, un multitâche doit posséder une zone de gestion commune aux travaux, pour le partage du temps et des statuts, ce qui est impossible ici car aucun octet n'est incommutable par ce procédé, par contre, &C1 est particulièrement intéressant, alors pourquoi ne pas en parler...

C1 , C'EST BIEN

Mais non, Robby ! Ras C2 c'est mieux... on vient justement de dire le contraire. Soit beau et tais-toi ! C'est vrai, quoi ! M'énerve ce mec des fois... Qu'est-ce que sa beauté au regard de celle de Miss X ? Roupie de sansonnets, castagnettes bretonnes, presse-purée martiniquais.,. Bref, quantité négligeable, comme dirait Franck (dont la rubrique a bénéficié d'un regain de beauté provoqué par une nouvelle maquette au demeurant fort visuelle et si pratique). Donc, la commande &7F00,&C1 est vraiment une commande à ne pas négliger. Voici pourquoi imaginez que vous soyez possesseur d'un CPC 6128 avec lequel vous désirez calculer une image. Disons que cette image est laborieuse et lente à mettre en œuvre, comme par exemple des fractales ou du ray-tracing. Il vous faut, pour une certaine convivialité et par respect pour le patient, afficher un état de la progression des calculs. Comment ce faire, sans détériorer l'écran ? C'est simple, il suffit d'utiliser l'ordre de pagination &C1. Ainsi, les affichages graphiques se feront sur la banque 4 de l'extension alors que les messages textes seront inaltérés sur la banque 4 normale (centrale). En effet, si la banque de l'extension est valide, donc accessible par le microprocesseur, elle n'est pas prise en compte par le CRTC en ce qui concerne les signaux vidéo. Ainsi le Basic continue de travailler en &C000 sans se douter qu'il est dans une banque. Quel hold-up de temps machine ! Il suffit de temps a autre de lancer la commande &C0 pour mettre à jour les commentaires, et ce en évitant les scrollings histoire de ne pas perturber le Basic. Pour la sauvegarde de l'écran, pas de problème. Un SAVE de la dernière banque, et tout se passe comme si l'écran réel contenait effectivement l'image.

Je suis sûr qu'à ce moment précis, certains diront : « Pourquoi ne pas faire la même chose en utilisant un écran en &4000 et un autre en &C000 ? ». A ceux-là, je répondrai que ce genre de manipulation force à ne pas utiliser la zone s'étalant de &4000 à &8000 et de perdre par le fart 16 Ko de mémoire Basic. Voyez-vous maintenant où nous voulons en venir ?

TOUJOURS PLUS...

Voici tout de même quelques indications concernant le slot secondaire :

  • Toute page validée, soit sélectionnée, à la place d'un écran ne sera jamais visible sur le moniteur car non reliée physiquement avec le CRTC 6845.
  • Le 6128 Plus réagit comme son ancêtre.
  • Un 464 muni d'une extension DKtronics, Vortex, etc. réagit comme un 6128, quelle que soit la taille de la mémoire ajoutée.

NEXT MONTH

tour le mois prochain, nous vous réservons une petite surprise spéciale Assembleur. A ce propos, nous avons besoin de votre aide. Si l'un de vous connaît la valeur des Gaps permettant de formater 10 secteurs par piste sur une disquette normale, qu'il nous l'envoie. Il gagnera ainsi un tee-shirt Miss X et permettra à ses contemporains de bénéficier d'une bidouille sympa. A bon paramétreur, salut !

Sined, ACPC n°34 Fev91, p56-57

Page précédente : Bidouilles ACPC n°33 - Formatage de bronze

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Assembleur ACPC n°34
» Coding » Programmation Approche en Douceur (Cahiers Amstrad)
» Coding » Bidouilles ACPC n°17 - Le catalogue AMSDOS
» Coding » Bidouilles ACPC n°45 - Les vecteurs system (3/6)
» Coding » Assembleur ACPC n°44 - La programmation HARD du PSG
» Coding » Assembleur ACPC n°41 - Les flags, grands délires
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 579 millisecondes et consultée 3029 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.