ASMtrad CPC

Apprenez l'assembleur Z80

Gestion ROM de la cartouche.

Tout l’intérêt du cpc+ et encore plus de la gx4000 (là pas le choix), c'est d'utiliser le port cartouche.
Une cartouche c'est un groupe de ROMs de 16Ko. Les cartouches officielles font 128Ko (8 ROMS).
Nous allons voir ici comment connecter une ROM de celle-ci.

Théorie:

Lorsque le cpc+ ou la GX4000 bootent, un saut est directement effectué vers la ROM 0 de la cartouche.
Celle-ci est connectée en ROM basse sur la plage #0000/#3FFF et le code exécuté est donc en #0000.

Rien n'est initialisé.
Aussi au boot, à vous d'initialiser le crtc; les interruptions et la pile par exemple (c'est le minimum).

Mais j'ai parlé de ROM basse... Qu'est-ce donc ?

Nous avons deux types de ROMS:

- Les ROMs basses (ou inférieure) qui se connectent en #0000/#3FFF ou #4000/7FFF ou #8000/BFFF.
- Les ROMs hautes (ou supérieure) elles se connectent seulement en #C000/#FFFF.

Connexion ROM BASSE (ou inférieure):

Attention ça ne fonctionne que si l'ASIC est délockée.
Tout se passe par le Gate Array:

ROM Basse

C'est donc assez simple.
On choisi la page avec les bits 4 et 3.

Ce qu'il faut noter c'est qu'on ne peut adresser que les 8 premières ROMs. Pour les autres vous ne pourrez les connecter qu'en ROM haute.

Bien que vous ayez choisi la page de la ROM basse, cela ne la connecte pas pour autant.
La connexion se fait elle aussi grâce au Gate Array:

Roms mode

Le passage du bit 2 à 0 connectera votre ROM basse.

Notez que le mode écran est sur le même octet à envoyer.
Je vous le fait remarquer car il y a de fortes chances que cela vous pose problème dès que vous avez un écran avec du multimode.

Notez aussi que vous pouvez connecter en même temps une ROM basse(inférieure) et une ROM haute (supérieure).

Connexion ROM haute (ou supérieure):

Une ROM haute se connecte obligatoirement en #C000/#FFFF.

Pour la connexion cela se passe comme au dessus mais avec le bit 3 à 0 pour connecter la ROM.
Mais comment choisir son numéro ?

Et bien cette fois-ci cela ne se passe pas avec le Gate Array mais avec le port #DF:

DF00

n=numéro de ROM logique (0-127)
p=numéro de ROM physique (0-31)

Mais que veux dire ROM logique et ROM physique ??? Alors la je vous préviens c'est compliqué...

Concrètement, sur cpc old on n'avait pas le choix, toute ROM d'extension était une ROM logique dont le numéro valait 0-255.
Mais sur cpc+ on peut non seulement avoir des ROMs logiques via une extension ROM ET les ROMs de la cartouches qui elles sont dites ROMs physiques.

Ainsi, on pourrait adresser à la fois des ROMs logiques mais aussi des ROMs physiques.
Comme on peut avoir des ROMs logiques de valeurs identiques à celles de la cartouche (donc de 0 à 31), la distinction est ainsi faite pour choisir l'une ou l'autre.

Au final à partir du moment ou vous travaillez sur cartouche le mieux est de ne vous servir que des ROMs physiques.

L'adressage est donc simple:

Vous voulez connecter en ROM haute la ROM 1 de la cartouche:

                        LD    BC,#DF00+%10000001      ;on séléctionne la ROM Physique numéro 1
                        OUT   (C),C
                        LD    BC,#7F00+%10000100
                        OUT   (C),C                   ;connexion de la ROM supérieure et déconnexion de la ROM inférieure et écran en mode 0.