CODING ★ Au Cœur du 6128 ★

Au Coeur du 6128 (CPC Revue)

Cette série d'article. D'écrira les possilbilltés internes de votre ordinateur et vous permettra d'utillsation au maximum toutes les routines résidantes. La description de ces rubrique sera abondamment commentée afin d. vous faciliter l'utilisation dans vos programmes.

RAPPELS

La configuration mémoire du 6128 est largement décrite dans son maqnue. nous en rappellerons les traits principaux :

  • une RAM de 64 K accessibles, comprenant:
  • une partie "utilisateur" de 0000 à BFFF
  • une RAM écran de C000 à FFFF
  • une ROM système de 0000 à 3FFF
  • une ROM Basic de C000 à FFFF

On voit d'ores et déjà que les ROM annexes doivent être connectées pour utilisation. Nous noterons également que si la fonction HIMEM est appelée en Basic, elle nous fournit la valeur 42619 (soit A676 en hexadécimal). il existe donc un espace mémoire entre A676 et C000 réservé pour une utilisation bien précise. C'est cet espace mémoire (figure 1) que nous allons étudier pendant quelque temps, car il présente des avantages non négligeables. Cet espace est en effet réservé aux "vecteurs" du système et du Basic. Les "vecteurs permettent d'obtenir des informations sur tout ce qui se passe au Cœur de la machine (accès aux routines de la ROM, flags, etc.).

LES VECTEURS

Les vecteurs du 6128 sont relativement nombreux et ne sont, généralement, pas au même endroit que sur le 464. Par exemple, Les 4 vecteurs que nous étudierons a4jourd'hui, les sélections des ROM annexes, sont placés aux adresses BA51, BA55. BA5F et BA66 sur le 6128 et aux adresses BA4A. BA54. BA5E et BA64 pour le 464.
Certains accès sont néanmoins les mêmes sur les deux machines. nous essayerons de le signaler en vous demandant de les vérifier, car il est difficile d'étudier deux ROM en même temps.

LES VECTEURS DE CONNEXION DE LA ROM

Les ROM Basic et système étant annexées, il est nécessaire de les connecter, dans certains programmes, afin de réutiliser des routines déjà écrites et ainsi de gagner du temps et de la place en mémoire.
Les connexions de ces ROM peuvent se réaliser en appelant les adresses suivantes:

  • B900 connexion de la ROM haute ( C000 à FFFF, Basic)
  • B903 déconnexion de la ROM haute
  • B906 connexion de la ROM basse ( 0000 à 3FFF, système)
  • B909 déconnexion de la ROM basse

(Ces adresses sont identiques sur CPC 464.)
Après désassemblage, il s'avère que les adresses mentionnées ne contiennent que des sauts et ce sont les adresses de renvoi que nous allons étudier.

B900 JP BA5F ; saut à BA5F
B903 JP BA66 ; saut à BA66
B906 JP BA51 ; saut à BA51
B909 JP BA58 ; saut à BA58

ROUTINES DE CONNEXION
ROM HAUTE C000 à FFFF

CONNEXION

BA5F DI ; Interdiction de toute interruption
BA60 EXX ; Echange le contenu des registres auxiliaires avec celui des registres d'usage général
BA61 LD A,C ; Charge l'accumulateur avec la valeur de C
BA62 RCS 3,C ; Le bit n° 3 du registre e est mis à 0
BA64 JR BA68 ; Saut à l'adresse BA6B

DECONNEXION

BA66 DI ; Interdiction de toute interruption
BA67 EXX ; Echange des contenus
BA68 LD A,C ; Charge C dans. l'accumulateur
BA69 SET 3,C ; Met le bit 3 de C à 1

ROM BASSE 0000 à 3FFF
CONNEXION

BA51 DI
BA52 EXX
BA53 LD A,C
BA54 RES 2,C
BA56 JR BA6B

DECONNEXION

BA5S DI
BA59 EXX
BA5A LD A,C
BA5B SET 2,C
BA5D JR BA6B

Sous-programmes (BA6B) .

BA68 OUT (C),C ; Sortie de la valeur de C sur le port
BA6D EXX ; Echange des contenus
BA6E EI ; Réactivation des interruptions
BA6F RET ; Retour au programme

COMMENTAIRES

Il est nécessaire d'apporter quelques précisions sur l'utilisation de ces routines. On voit que toutes celles-ci sont basées sur le transfert des registres auxiliaires et des registres d'usage généraI. D'après les essais que nous avons effectués, il semble que B' contient la valeur 7F et C' la valeur (hexa).
Dans le sous-programme BA6B, on adresse donc le port 7F (valeur sur les bits A8 il A15) et on lui fournit la valeur C.

Valeur de C
; 7 6 5 4 3 2 1 0
bit 7 à 1 Sélection d'un registre du gate array
bit 6 à 0 (Registre ayant plusieurs fonctions)
bit 5
bit 4 Analyse le compteur
bit 3 à 1 Déconnecte la ROM haute
à 0 Connecte la ROM haute
bit 2 à 1 Déconnecte la ROM basse
à 0 Connecte la ROM basse
bit 1 Sélection du mode écran
bit 0 Sélection du mode écran


Nous verrons plus longuement l'utilisation de ce registre dans d'autres articles (mode écran, etc.).

CONCLUSION

On voit qu'on peut facilement utiliser des vecteurs de la RAM pour améliorer nos programmes. Dans ce cas et pour sélectionner le registre, deux impératifs:

  1. placer la valeur 7F sur les bits AB à A 15 du bus (la valeur des bits A0 à A7 n'est pas critique) port;
  2. placer la valeur en fonction du résultat souhaité.

Nous avons utilisé ce programme pour désassembler la ROM Basic et systéme du 6128 avec succès. Le principe est le suivant ( exemple donné pour la ROM Basic ) :

  • connexion de la ROM de C000 à FFFF
  • transfert de la ROM en RAM à l'adresse 4000 (16384)
  • désassemblage à l'aide du moniteur DEVPAC. en prenant soin de le charger assez haut en mémoire (dans notre cas, il a été chargé en 760C).

A suivre ...

Page précédente : Au Coeur du 6128 - le Controleur Video

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

Lien(s):
» Coding » Au Coeur du 6128 - La ROM (CPC Revue)
» Coding » Au Cœur de l'Amstrad CPC
» Coding » Au Coeur du 6128 - le Controleur Video (CPC Revue)
Je participe au site:

» 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
Page créée en 362 millisecondes et consultée 2091 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.