CODINGAMSLIVE ★ AMSLIVE n°05 - CPC (S)OS 1ère partie ★

AMSLIVE n°05 - CPC Sos Partie 1Coding Amslive

Cette rubrique s'adresse aux débutants et à tous ceux désireux de (re)découvrir leur CPC. Quelques renseignements pointus seront donnés, mais juste pour information. Si vous ne saisissez pas tout, vous pouvez quand même continuez la lecture.

Le plus souvent, on distingue 3 niveaux de programmations chez le CPCiste : le BASIC, l'assembleur avec utilisation des routines "système" et la programmation directe des périphériques (Quelqu'un travaille sous CP/M ?!?). Leurs mélanges donne des résultats puissants, mais le plus souvent, buggés. Heureusement qu'AMSLIVE est là.

LA MÉMOIRE

De par sa conception (bus d'adresses de 16 bits et bus de données de 8 bits), le microprocesseur ne peut accéder que 65536 (=£10000) cases mémoires (octets) différentes, c'est à dire exactement 64 ko. Pourtant le CPC gère 256 ROMs de 16 ko (4 Mo), et 0.5 Mo de RAM (facilement multipliables). Le truc est de travailler par pages.

Pour faciliter la manipulation, chaque page est découpée en blocs de 16 ko, et on peut ne changer que certains blocs (à la manière de ces livres d'enfants où les pages sonl coupées en plusieurs parties et où l'on crée d'innombrables combinaisons en ne tournant que certaines de ces parties).

MATERIELLEMENT

Ceci est fait par des composants annexes tel le Gâte Array pour les ROMS ou la permutation de blocs, et un PAL pour la RAM. Comme lors d'un adressage, seuls les 2 bits de poids forts sont analysés, ceci explique que la mémoire soit divisée en blocs de 16 ko (2 bits donnent 4 possibilités, et 64/4 = 1 6). A propos des ROMs, notez que la ROM DISC (no7) est traitée comme n'importe quelle autre ROM externe, mais elle n'est pas déselectionnable (sauf sur +).

BIENVENUE DANS LA JONGLE

Le système d'exploitation du CPC (on l'appelera "système" par fainéantise et habitude) doit constament jongler avec les blocs. Prenons un exemple : une routine système (qui s'éxècute donc en ROM, quelque part entre 0000 et 3FFF -voir schéma) veut lire le bloc 0 de RAM (aussi entre 0000 et 3FFF !). Si on commutait la RAM, plantage assuré, car ce n'est plus la routine en ROM qui serait exécutée mais la RAM à partir de la même adresse (lors de la lecture d'un livre, vous changez de page en plein en plein milieu de phrase, vous ?). Il faut alors avoir une routine située hors de cette zone qui se chargera de commuter la RAM, de la lire comme voulu, de commuter la ROM et d'y resauter.

LOGICIELEMENT : L'EXTERNE EST GERE MAIS PAS L'INTERNE !

Au démarrage, le système teste les ROM externes, qui soit prennent la main, comme l'interface graphique DES ou le moniteur HACKER, soit fournissent les fameuses R5X, extensions résidentes du système. Comprennez : commandes ou programmes entiers, en mémoire (bien sur puisque c'est des roms !), gérées par le système et accessibles sous BASIC.
Voilà qui est paradoxal ! Les ROMS externes sont parfaitement supportées, mais la RAM supplémentaire interne du 6128 n'est pas du tout utilisée par le système et encore moins par le BASIC. Il faut charger un programme (BANKMAN sur la disquette CPM+) pour pouvoir y accéder.

COMMENT CA MARCHE ?

Le système est un ensemble de routines qui s'occupent de l'interfaçage matiériel. C'est à dire que c'est lui qui s'occupe de la gestion clavier, écran (texte ou graphique), fichier...

A l'encontre de ce qu'on peut trouver sur les ordinateurs actuels, il ne gère pas les différents programmes qui peuvent s'exécuter. En fait, il n'a même pas "la main" ! Il la donne au BASIC si aucune autre ROM ne l'a prise avant. C'est sous interruptions que sont remises à jour les couleurs, qu'est scanné le clavier...

Le BASIC, lui, se sert des différentes routines systèmes. Par exemple, la commande INK va appeler une routine qui changera non pas directement la couleur du stylo mais la case mémoire associé à ce stylo. Puis, le système appelé sous interruption lira cette case mémoire et alors changera effectivement la couleur.

Je le répète, le système ne s'occupe pas de l'éxecution des programmes. Ceci implique qu'en cas de bug, il y a plantage, et non pas un message "votre programme à planté". Le programme a le contrôle absolu !

Ceci-dit, plusieurs programmes peuvent fonctionner en même temps. Soit parceque les interruptions système sont respectées, soit parcequ'une routine appelée redonnera la main à la fin de son exécution.
Le partage de la mémoire est prévu lors de l'initialisation des RSXs (réservation de zones) et par la commande MEMORY en ce qui concerne le BASIC.

LES VECTEURS

Les routines sont stockées en ROM, c'est entendu. Mais pour les appeller, on ne saute pas directement en ROM : on passe par des vecteurs qui eux sont installés en RAM.

Les avantages sont nombreux : en cas d'évolution de la ROM, les routines vont changer d'adresses, mais l'adresse du vecteur reste la même.

D'autre part, les vecteurs sont placés dans une zone insensible aux permutations RAM/ROM. On peut y sauter sans risque quelquesoit la configuration en cours.

J'ai gardé le plus intéressant pour la fin : on peut détourner ces vecteurs. Il n'y a qu'à placer un saut à vos propres routines. Plus de détails la prochain fois !

AMSLIVE n°5

» La suite : AMSLIVE n°10 - CPC (S)OS 2ème PARTIE : LA MÉMOIRE (2/3)

★ ANNÉE: ???
★ AUTEUR: MADRAM

Page précédente : AMSLIVE n°04 - Z80

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

Lien(s):
» Coding » AMSLIVE n°20 - les Maître du Temps
» Coding » AMSLIVE n°07 - SINUS SITE , LA SUITE (2/2)
» Coding » AMSLIVE n°04 - Z80
» Coding » AMSLIVE n°02 - Choisir Son Assembleur
» Coding » AMSLIVE n°12 - Vu Metre
» Coding » AMSLIVE n°01 - Init
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 041 millisecondes et consultée 2562 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.