| ★ CODING ★ Apprendre pas à pas la programmation en assembleur Z80 par Roudoudou ★ Premiers programmes (briques indispensables) ★ |
| Utilisation de la RAM étendue |
Comment utiliser la mémoire étendue sur CPC/Plus/GX ?Vous savez déjà (si vous avez lu les précédents articles) que l'Amstrad CPC est capable de gérer 4Mo de ROM sans bidouille mais il est aussi capable de gérer 2Mo sans bidouille aucune. On peut trouver certains émulateurs capables de monter jusqu'à 4Mo et de telles extensions physiques existent mais elles présentent l'inconvénient de devoir être programmées de façon particulière pour éviter de déclencher d'autres périphériques. Restons sur 2Mo ce qui est déjà largement au dessus du standard communément admis de 512ko d'extension. De la même façon qu'avec les ROM, la mémoire étendue n'est accessible QUE par le Z80. Il n'est pas possible de commuter des pages mémoires et espérer que le contenu graphique de votre écran change. Contrairement à la ROM étendue d'un CPC qui ne peut se connecter qu'en #C000, la RAM étendue d'un CPC a une préférence pour l'espace d'adressage #4000-#7FFF. C'est bien car cela n'interfère pas avec la ROM, mais en même temps, ça nous restreint sacrément si on utilise le Basic! Travaillant en assembleur, nous ne sommes pas concernés par ces histoires et c'est tant mieux. Il existe d'autres commutations disponibles pour lesquelles on trouve des utilités graphiques ou système. Vous avez peut-être déjà entendu parler des "modes" #C1, #C2 ou #C3 Ce ne sont pas exactement des modes. Comme le résume la page Gate Array du site Quasar, le MMR (Memory Mapping Register) est scindé en 3 zones.
En regardant ce tableau, on remarque rapidement que les fameux "modes" qui vont de #C0 à #C7 correspondent aux 7 types de configuration mémoire dela page de mémoire étendue 0 et le "C" correspond au MMR. La fonction 0 correspond à la désactivation du mapping, le résultat est identique avec toutes les pages! Ainsi, vous n'êtes pas obligé d'utiliser #7FC0 pour remettre la mémoire en état par défaut. Les autres combinaisons sont valides : #7FC0, #7FC8, #7FD0, #7FD8, #7FE0, #7FE8, #7FF0 et #7FF8 (que vous ayiez ou non une extension branchée c'est OK). La fonction 1 connecte la 3è bank de 16k du slot étendu nnn de 64K en #C000-#FFFF La fonction 2 connecte l'ensemble du slot étendu nnn de 64k en #0000-#FFFF La fonction 3 connecte la 3è bank de 16k du slot étendu nnn de 64K en #C000-#FFFF (analogue à la fonction 1) MAIS aussi bascule la RAM centrale #C000-#FFFF vers #4000-#7FFF ce qui permet facilement de gérer un page flipping (nous y reviendrons un jour). Les fonction 4,5,6 et 7 connectent respectivement la 1è, 2è, 3è ou 4è bank de 16k du slot étendu nnn dans la zone #4000-#7FFF Puisqu'un schéma est souvent plus parlant qu'un long discours, voici un résumé visuel des commutations possibles avec une extension de 128k (soit 192k au total pour le CPC).
Et comme il n'est pas spécialement visuel d'utiliser ce registre au dessus de 64k de mémoire étendue, je vous propose une petite macro. Vous renommez les paramètres à votre convenance hein... DISABLE equ 0Maintenant que le cadre est posé, on peut passer à un cas d'utilisation pratique dans l'article [ suivant ] ou si vous êtes chauds, vous pouvez aussi regarder [ comment initier le mode "#C2" ? ]. |
|