★ CODING ★ AMSLIVE ★ AMSLIVE n°12 - PROGRAMMATION : ROM POUR MATELOTS ★ |
AMSLIVE n°12 - Rom Pour les Matelots | Coding 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 LD BC,#7F88+mode ; Active ROM basse Et pour désactiver la ROM : LD BC,#7F8C+mode; Désactive ROM basse "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. #078C Identique à #0786 sauf que le Border n'est pas pris en compte. #07AA Installe une encre. #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). #07C0 Modifie les registres 12 et 13 du CRTC en fonction de l'adresse écran et de la page vidéo. Cette routine ne gère que des écrans de 16Ko donc adieu le fullscreen mais elle #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 !) #0844 Idem à #0835 mais le signal BUSY n'est pas pris en compte. CA : A = codeASCII #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. 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 !
|