CODINGCHRONIQUE A100% DES LOGON SYSTEM ★ LOGON SYSTEM ACPC N°40 - GEREZ VOS BANKS ... DE MÉMOIRE ★

Logon System ACPC n°40 - Gerez vos Banks ... de mémoireCoding Chronique A100% Des Logon System
Avec quoi vais-je bien pouvoir surchauffer ... vos petits neurones assoiffés ce mois-ci?
La Rupture ligne à ligne? Les SplitRasters ? La connexion de l'Asic ? La Connexion des Rams sur le CPC... Voilà t'y que c'est une bonne idée, ça ! Je sais que ce sujet a déjà été abordé dans des numéros précédents mais je pense que j'apporte aujourd'hui quelques détails supplémentaires...

GATE ARRAY ou PAL ?

Comme vous le savez tous (mais si, vous le saviez), le CPC dispose d'un circuit surnommé le Gate Array (qui n'est pas un nom spécifique mais le nom d'un type de circuit spécifique construit spécialement pour l'ordinateur - dédié, quoi... -), ce qui n'est pas le cas pour le reste des circuits de l'Amstrad qu'on retrouve dans de nombreux autres ordinateurs). C'est pourquoi ils sont modestement appelés Amstrad 40007 (Cpc 464), Amstrad 40008 (Cpc 664), Amstrad 40010 (Cpc 6128).

Le G.A. permet de gérer pas mal de choses intéressantes comme la palette de couleurs, le mode graphique, le contrôle sur le compteur d'interruption et les interruptions, les ROM (leur Connexion/Déconnexion), la connexion de la page d'Entrée/Sortie de l'Asic sur le CPC + (Rhaaaa, je l'ai dit).

La connexion des RAM supplémentaires semble utiliser le Gate Array puisqu'on utilise la même adresse I/O pour y accéder. Sans rentrer ici dans le détail de la sélection des différents circuits, il faut savoir que l'architecture hardware des entrées/sorties permet d'envoyer une donnée simultanément sur plusieurs circuits avec une seule instruction d'entrées/sorties. Par ailleurs, et c'est aussi un autre sujet, les instructions d'entrées sorties sur CPC utilisent le registre Z80A B au lieu de C pour définir l'adresse d'entrée sortie, ce qui condamne l'usage d'instructions comme OTDR, OTIR, INIR et INDR, qui se servent de B comme compteur. Cette utilisation du registre B révèle également un défaut de documentation sur le Z80A, qui n'était pas important auparavant : Les instructions OUTI et OUTD commencent par décrémenter B avant de l'utiliser pour l'entrée-sortie (et non l'inverse). Ce qui impose d'utiliser ces instructions en plaçant dans B l'adresse de l'entrée sortie + 1 (par exemple B=#80 au lieu de #7F pour accéder au Gate Array).

Pour revenir sur l'accès aux circuits, les adresses sont définies dans B de manière à n'accéder qu'à un seul circuit à la fois. Ceci est vrai pour tous les circuits sauf pour le PAL qui gère la mémoire additionnelles des 6128 ou des possesseurs d'extension DK'tronics. Dis autrement, lorsque vous faites un OUT avec B=#7F, vous sélectionnez simultanément le Gate Array et le PAL qui gère la ram additionnelle. C'est la donnée envoyé au circuit qui lui permet de savoir qu'il est concerné.

Il faut noter que les cartes Vortex Ram utilisent la même adresse de sélection Ram mais de façon différente, d'où sa totale incompatibilité avec DKtronics ...

LES EXTENSIONS DE MÉMOIRE
Sachez cependant que les cartes d'extensions DK'tronics sont compatibles en partie avec les connexions mémoires prévues sur le 6128. Ainsi, un 464 (ou un 664) avec une extension DK'tronics 64 K se comportera de la même façon qu'un 6128 et pourra donc supporter le CPM PLUS. Cette compatibilité de la DK'tronics l'a privilégié par rapport à l'extension Vortex, que peu de logiciels reconnaissent! Cependant, il existe toutefois une différence subtile entre un 6128 et un 464/664 équipé d'une extension Dk'Tronics pour l'utilisation du mode C3 (que nous aborderons un peu plus loin). Il faut aussi savoir qu'une extension 512K branchée sur un 6128 ne vous donnera pas 512+128 mais 512+64, car l'ancienne page 64 sera occultée.

LE G.A. ET LES RAMS
Pour en revenir à la donnée envoyée sur le port GA/PAL, celui-ci dispose de 3 fonctions principales dont la majorité a déjà dû être décrite par Fred ( voir le Gate Array, Cent Pour Cent n°35 ). Je me bornerais donc à rappeler le fonctionnement de la valeur prévue pour le PAL qui contrôle les RAM. Voici où et comment on donne le numéro de la fonction que l'on désire:

Capito ? OK, on continue...

Nous disposons donc d'une valeur sur 6 bits à envoyer au PAL. Sur un CPC 6128 ou avec une extension DK'tronics on peut décomposer les 6 bits utiles en 2 parties. Les bits 3, 4 et 5 pour la sélection d'un bloc de 64 k et les 3 autres bits (0, 1 et 2) pour organiser des blocs de 16K dans le bloc de 64K.

Avant toute chose, et pour ceux à qui l'idée n'avait pas traversé l'esprit, le Z80A reste un processeur 8 bits et dispose d'un espace d'adressage de 2 puissance 16 octets, soit 65536 cases bien rangées, ou encore 4 x 16384 ... ce qui est équivalent à 4 x #4000 (Hexadécimal). Mais Où veut-il en venir? (NDLR : Oui, où ??). A ceci: Tout comme les Roms qui utilisent le principe de « Swapping », plusieurs plans de mémoire sont mappés (localisés...) aux mêmes adresses et leur commutation dépend... du Gate Array et du PAL.. bien sûr!! Ah là là Poum, faut tout te dire!

LES PLANS DE MÉMOIRE

Les blocs de mémoire commutés sont géneralement de 16 Ko, ce qui explique qu'on raisonne très souvent par blocs de 16 Ko sur CPC (même pour les pages VidéoRam). Donc, je reprends... Notre mémoire de 64 K peut donc être divisée en 4 blocs de 16 K. Les bits 0, 1 et 2 permettent d'indiquer comment sont positionnés les 4 blocs de 16 k dans la mémoire centrale... A quoi servent les bits 3, 4 et 5 ? Eh bien tout simplement à indiquer le numéro de la page de 64 K disponible. Sur un 6128 (ou Extension 64 K), on considère que le premier bloc de 64 K additionnel est identifié comme le bloc 000 (bits 3,4,5). Les 64 K de RAM centrale ne sont pas comptabilisés puisqu'ils sont communs à tous les Cpc. Pour accéder à ces « extra-pages », il est donc nécessaire de préciser le numéro de page (64 K) dans les bits 3, 4 et 5... Pour accéder à la deuxième page de 64 K additionnelle (128 K a 192 K) , il est donc nécessaire de placer 2-1=1 (on raisonne par rapport à 0) dans les bits 5, 4, 3 (soit 001 en binaire). Si vous êtes l'heureux possesseur d'une extension DK'tronics de plus de 64 K, et que celle-ci fonctionne normalement (le rafraîchissement des Ram dynamiques laissant malheureusement à désirer... le contenu de ces Rams est assez « volatile »), alors vous pouvez sélectionner le reste des pages 64 K disponibles grâce aux bits 5, 4, 3. Ce qui nous offre la possibilité d'avoir 8 pages de 64 K en ligne additionnelles sur le CPC, soit 8 x 64 K = 512 K ... un demi-mégaoctet sur CPC ...

Avec cette extension, la même totale sur le CPC est donc de 512 K + 64 K, soient 576 K

CONNEXION DES BLOCS DE 16K

Comme nous l'avons vu, il est possible de sélectionner 8 blocs de 64 K composés chacun de sous blocs de 16 K. La configuration des sous blocs dans l'espace adressable, en conjonction avec les 4 sous blocs de 16 K de la RAM centrale, est effectuée avec les bits 0, 1 et 2. Etant donné que seule la RAM centrale est utilisable par le CRTC pour la vidéo, il existe pour chaque page de 64 K un ensemble de 8 combinaisons pour disposer les sous blocs dans l'espace adressable de 64 K et obtenir des combinaisons de sous blocs intéressantes.

Pour plus de clarté, numérotons les sous blocs 16K de la RAM principale comme 0, 1, 2 et 3 et considérons que les sous blocs 16K 4, 5, 6 et 7 sont les sous blocs de la page de 64 K sélectionnée (bits 5.4.3) Le schéma suivant montre le placement des sous blocs en fonction des bits 0.1.2 :

Si on place les bits 0.1.2 =000 alors on est dans un état standard ou la RAM supplémentaire est invisible dans l'espace adressable. Les configuration 001 et 011 offrent des combinaisons très intéressantes, surtout pour les concepteurs de jeux où de démos puisque la configuration 011 est la seule qui permettent de déplacer un bloc 16K de ram centrale à une autre adresse que celle à laquelle il est habituellement localisé (Autrement dit, il est possible d'accéder à 2 blocs 16K de la ram centrale avec le même code, ce qui est intéressant pour les jeux vidéos qui utilisent une technique dite de "flipping"). La configuration 010, qui bascule les 4 sous blocs additionnels en RAM centrale, a été conçue dans l'optique CP/M +, où il était nécessaire de dispo­ser d'une zone TPA très large ... Cette Ram devait être très grande et surtout linéaire, d'où un grave problème puis­que le CP/M + occupe plus de 30 K en Ram centrale. C'est pourquoi vous dis­posez de 61 K de Ram avec le CP/M +. Pourquoi pas 64 K, me direz-vous?

Tout simplement parce que la connexion de l'ensemble des 4 sous blocs additionnels ( Fction 11ppp010 ppp=page 64 K) ne se fait pas sans précau­tion puisque l'ensemble de la Ram est basculé (64 K). Ce qui peut être très fâcheux pour le programme qui effec­tue la connexion car cette dernière l'efface ... à moins que ... on ait prévu dans la Ram qui va se connecter un programme situé juste aprés le « out de connexion » et c'est ce qui est fait pour CP/M+ ...

A noter toutefois que le dernier bloc de 16K d'une page de 64K est le plus important. En effet, c'est le seul à partir duquel on peut accéder à tous les autres blocs de 16K (via les configurations 001, 010 et 011)

Le schéma longshotien ( Commutation des Banks-Ram ), qui, je l'espère, sera découpé et collé dans les références book des plus fanatiques de la programmation hard du CPC, représente l'ensemble des combinaisons Ram possibles avec un 6128 ... c'est-à-dire la page principale et la page 0 (chacune ayant 4 blocs). Concernant le schéma, quelques précisions ...

Les blocs 0, 1, 2, 3 correspondent aux 4 premiers blocs de 16 K de la Ram principale.

A noter : La Ram Vidéo n'est prise en compte par le CRTC que sur la Ram principale, même si une banque est connectée à la place de la VidéoRam.

Une banque connectée à la place de la VidéoRam aura pour seule conséquen­ce de vous empêcher d'avoir des accès en Lecture/Ecriture sur la Ram Vidéo. Le problème est un peu similaire lors de la connexion des ROM avec la seule différence que les accès en écriture auront lieu dans la Ram connectée (phénomène de transparence des Rom). Les accès en lecture fourniront bien évidemment le contenu de la ROM connectée. Et pour finir sur les priorités Ram/Rom, précisons aussi que la page I/O ASIC ( pour les possesseurs de CPC Plus ) est prioritaire sur toutes les Ram lorsqu'elle est connectée.

Enfin, il faut noter que la configuration 011 (aussi appelé mode C3 : 11000011) ne fonctionne pas tout à fait sur un 464/664 comme sur un 6128. En effet, dans cette configuration, les lectures/écritures entre 4000 et 7FFF affectent le bloc 16K N°3 et les lectures/écritures entre C000 et FFFF affectent le bloc 7. Cependant, si la rom haute est activée sur un 464/664 (via la fonction 10 du Gate Array), alors il y a des différences de comportement.

L'UTILITAIRE M-PACK

Et pour finir, je vous livre en pâture un gestionnaire de mémoire que j'ai écrit il y a fort longtemps et qui vous rendra quelques services: Memory-Pack. Ce programme ajoutera quelques RSX au Basic pour permettre une gestion plus aisée de la deuxième page de 64 K de votre CPC.

N'hésitez pas à nous écrire pour nous insulter (NDRobby : genre Gogol System, hé ! hé ! hé !) ou plus simplement pour nous poser vos questions...
Au mois prochain!

Longshot Logon System 91 – ACPC n°40 SepOct91, p40-41-42-43 (révisé en 2019)

★ ANNÉE: 1991
★ AUTEUR: LONGSHOT

Page précédente : Logon System ACPC n°39 - Faites onduler vos écrans
★ AMSTRAD CPC ★ DOWNLOAD ★

File:
» Memory  Pack  v1.0DATE: 2002-12-14
DL: 261
TYPE: ZIP
SiZE: 7Ko
NOTE: 40 Cyls
.HFE: Χ

Other platform tool:
» LOGON40-Memory  Pack  v1.0    LISTINGDATE: 2012-08-27
DL: 206
TYPE: text
SiZE: 8Ko
NOTE:

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

Lien(s):
» Coding » Logon System ACPC n°48 - Les scroll hard vertical
» Coding Src's » End Demo (Logon System)
» Coding » Logon System ACPC n°35 - Le Gate Array
» Coding » Logon System ACPC n°38 - Overscan facile
» Coding Src's » Test CRTC v1.1 (Longshot)
» Coding » Logon System ACPC n°44 - 3D Scroll demo
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 412 millisecondes et consultée 2634 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.