CODINGAMSLIVE ★ AMSLIVE n°12 - PROGRAMMATION : ROM POUR MATELOTS ★

AMSLIVE n°12 - Rom Pour les MatelotsCoding Amslive

Comment ne pas réinventer la roue !

Tout a commencé un bel après-midi... Je codais une routine de gestion clavier (sans passer par les vecteurs système) qui ne marchait pas et qui commençait à sérieusement m'énerver... lorsque... là ! Pat ! L'IDEE !

En effet, après 10 ans passés sur CPC je remarquais que le Basic devait avoir une gestion clavier quelque part en ROM alors pourquoi m'user à programmer ce qui est déjà dans mon CPC !

Trois heures plus tard, après un désassemblage sauvage des ROMs du CPC j'avais trouvé plus que ce que je. voulais ! En effet les ROM et surtout celle du Firmware fourmillent de petites routines sympa !

Après quelques NOPs de réflexion, j'ai décidé de vous parler de toutes ces petites   routines   contenues   dans   les méandres   de   votre   CPC   et   qui   ne nécessitent pas la présence du système.

Pour le moment on se contentera de la ROM   Firmware,   on   verra   les   autres
(AMSDOS et BASIC) plus tard (quelques siècles environs :). Avant toute chose, il faut que la ROM firmware soit activée pour l'utiliser ! Pour cela, il faut faire un petit :

LD BC,#7F88+mode ; Active ROM basse
OUT (C),C

Et pour désactiver la ROM :

LD BC,#7F8C+mode; Désactive ROM basse
OUT(C),C

"mode" correspond au mode graphique de l'écran, c'est à dire 0, 1, 2 ou 3. Je n'entrerai pas dans les détails de ces 2 OUTs (voir un cours sur le Gâte Array !).

Lorsque la ROM basse est connectée , elle occupe la zone #0000 à #3FFF donc faites attention à ne pas placer votre programme dans cette zone sinon c'est le plantage assuré lorsque vous activerez la ROM (à moins de ruser un peu...) !

De plus, si vous tentez d'écrire dans cette zone, ce n'est pas la ROM que vous allez modifier (c'est impossible) mais la RAM qui se trouve "dessous"... Par exemple, si vous avez envie d'écrire "le PC c'est pourri ?" (oui) en #2000 lorsque la ROM est activée, la phrase "Le PC c'est pourri ?" (oui) sera écrite en RAM ! Et vous pouvez le vérifier en désactivant la ROM et en allant voir en #2000, vous verrez "Le PC c'est pourri ?" (oui j'insiste!).

Bon, maintenant on va pouvoir commencer à parler des routines intéressantes qui sont dans cette ROM (Ah ! enfin !). Les routines seront décrite   de la manière suivante : Adresse d'appel, Conditions d'Appel, Condition de Fin et une explication brève de la routine (ce qu'elle fait). C'est parti pour un premier tour !

#0786   Installation  d'une  palette.   La première valeur de la table correspond à la couleur du border, les suivantes aux stylos 1 à 15. La valeur des couleurs doit être en Hard.
CA  :  DE  pointe sur une table de  16
couleurs.
CF : AF est modifié.

#078C Identique à #0786 sauf que le Border n'est pas pris en compte.
CA : DE pointe sur une table de 15 couleurs (valeur en soft).
CF : AF est modifié.

#07AA Installe une encre.
CA : BC=#7F00+lnk_No  HL doit pointer sur une couleur Hard.
CF : AF est modifié.

#0D99 Ce n'est pas une routine mais l'adresse d'une table permettant de convertir une couleur soft en hard. (#0D99+couleur soft) = couleur hard Couleur soft compris entre 0 et 26

#07B4 Attend la synchro verticale (VBL).
Equivalent du CALL #BD19.

CA : Aucune
CF : rien de modifié

#07C0 Modifie les registres 12 et 13 du CRTC en fonction de l'adresse écran et de la page vidéo.
Page 0-#0000 à #3FFF
Page 1-#4000 à #7FFF
page 2-#8000 à #BFFF
page 3-#C000 à #FFFF

Cette routine ne gère que des écrans de 16Ko donc adieu le fullscreen mais elle
peut être utilisée pour faire des scrolling hard.
CA : A = Numéro de la page vidéo (0 à 3)
HL=Adresse de l'écran.
CF : AF est modifié.

#0835 Envoie un code ASCII à l'imprimante. Cette routine prend en compte le signal BUSY au cas où l'imprimante serait fabriquée par -censuré-- (NDRC : sujet tabou !)...(NDSNN : Madram ! Dernier avertissement ! Il est tard, va te coucher !)
CA :A = code ASCII
CF : Si tout s'est bien passé la CARRY vaut 1 sinon 0. BC est modifié.

#0844 Idem à #0835 mais le signal BUSY n'est pas pris en compte.

CA : A = codeASCII
CF : BC modifié et la CARRY vaut 1.

#0863 Envoie une valeur à un registre du PSG. Cette routine coupe les interruptions pendant son exécution. CA : A = numéro du registre   C=valeur à envoyer au registre.
CF : B et AF sont modifiés.
On va s'arrêter là pour aujourd'hui ! j'espère vous filer la prochaine fois les adresses concernant la gestion du clavier... Pour les fanatiques, le source commenté de la ROM Firmware est disponible en fichier ASCII (150Ko environ).

Grim , AMSLIVE n°12

Remarque finale du Madram : cet article (merci Grim) est donné à titre éducatif. Dans la pratique, il est fortemment déconseillé de sélectionner la ROM par des OUTs et d'y sauter directement (adresses mentionnées uniquement valables pour le 6128, plus toutes les autres raisons déjà évoquées). Fais pas la grimace, Mat !

★ ANNÉE: ???
★ AUTEUR: GRIM

Page précédente : AMSLIVE n°10 - Memoire du CPC 2

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