CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 2.05.01 KERNAL (KL)

Le Kernal, comme son nom l'indique est le noyau du système d'exploitation.

C'est ainsi qu'il est responsable de la commande du déroulement des programmes, c'est-à-dire du traitement des interruptions ainsi que des Events, du traitement des Restarts, de la mise en place d'extensions de la ROM et de la commutation entre les diverses configurations de la mémoire.

Les routines liées au mécanisme des Events peuvent être intéressantes pour l'utilisateur.

0000 ********************************* RST 0 RESET ENTRY

Après la mise sous tension du système, le processeur commence ici le traitement du programme. Un appel de RST 0 a pour effet une réinitialisation totale du système.

0000 U ROM disable, Mode 1, reset diviseur
0005 Reset Cont'd
0008 ************************************* RST 1 LOW JUMP

Sert à appeler une routine dans le système d'exploitation ou dans la RAM lui étant parallèle. L'adresse de la routine à appeler doit figurer directement à la suite de l'instruction RST. Comme pour la zone de &0000 à &3FFF, 14 bits d'adresse suffisent, les bits 14 et 15 sont utilisés pour sélectionner entre ROM et RAM. Le bit 15 mis a pour effet de sélectionner la RAM dans la zone de &C000 à &FFFF alors que le bit 14 annulé a pour effet de sélectionner le système d'exploitation.

0008 (0430) RST 1 LOW JUMP CONT'D
000B (042A) KL LOW PCHL CONT'D
000E manipuler adresse de retour
000F correspond à jp (bc)
0010 ************************************* RST 2 SIDE CALL

Sert à appeler une routine dans une ROM d'extension. RST 2 est utilisé quand un programme, connecté sous forme de ROM d'extension, a besoin de plus de 16 K.

0010 (04C3) RST 2 LOW SIDE CALL CONT'D
0013 (04BD) KL SIDE PCHL CONT'D
0016 manipuler adresse de retour
0017 correspond à jp (de)
0018 ************************************* RST 3 FAR CALL

Permet d'appeler une routine n'importe où, en ROM ou en RAM. IlI faut pour cela faire suivre l'instruction RST 3 de l'adresse sur deux octets d'un bloc de paramètres (de 3 octets de long). Les deux premiers octets du bloc de paramètres contiennet l'adresse de la routine à appeler. Le troisième octet indique l'état ROM/RAM

0018 (046D) RST 3 LOW FAR CALL CONT'D
001B (045F) KL FAR PCHL CONT'D
0020 ************************************* rst 4 RAM LAM

RST 4 vous permet de lire le contenu de la RAM à partir d'un programme en langage machine, quel que soit l'état ROM sélectionné. L'instruction RST 4 remplace pratiquement LD A,(HL); hl doit pour cela contenir l'adresse de la case mémoire à lire.

0020 (056C) RST 4 RAM LAM CONT'D
0023 (0467) KL FAR ICALL CONT'D
0028 ************************************ rst 5 FIRM JUMP

Permet de sauter à une routine du système d'exploitation. L'adresse d'entrée correspondante doit suivre immédiatement l'instruction RST 5.
Avant que le saut à la routine voulue ne soit exécuté, la ROM du système d'exploitation est sélectionnée puis à nouveau déconnectée après abandon de la routine.

0028 (04DB) RST 5 FIRM JUMP CONT'D
0030 ******************************** RST 6 USER RESTART

Les octets &0030 à &0037 sont disponibles pour l'utilisateur. Lors de la mise sous tension du système, un RST 0 est fixé d'avance.

0030 RST 0 vers High Kernel Restore
0038 *************************** RST 7 INTERRUPT ENTRY

entrée pour interruptions hardware.

0038 (03E7) RST 7 INTERRUPT ENTRY CONT'D
003B EXT INTERRUPT
0040 ************************jusqu'ici on Copie dans la RAM
0040 L ROM disable
0044 ***************************** Restore High Kernel Jumps
0044 copier 003F
0047 jusqu'à
0048 0000
0049 dans la RAM 004A
004C RST 0 vers
004E 0030
0051 Jump
0054 Block
0057 (copier)
005C ************************************** KL CHOKE OFF

Restaurer kernel, supprimer files d'attente Event et cetera

005D (configuration ROM actuelle)
0060 (entrée ROM actuelle)
0064 supprimer
0066 RAM firmware
0069 jusqu'à
006B B8CD
006C
0071 une ROM était-elle activée?
0072 oui sauter 007C si hl=0 007D charger défaut
0080 (ROM d'extension actuelle)
0083 (configuration ROM actuelle)
0086 (entrée ROM actuelle)
0089 charger paramètres
008C peur RST 3
0095 FAR CALL
0096 dw B8D7
0099 ************************************* KL TIME PLEASE

Combien de temps s'est-il écoulé?

009A (Timer high)
009E (Timer low)
00A3 **************************************** KL TIME SET

Fixer le temps sur valeur indiquée.

00A4 charger 0 dans accu et restaurer flags
00A5 (flag timer)
00A8 (Timer high)
00AC (Timer low)

00B1 ******************************************* Scan Events
00B1 Timer low
00B4 update
00B5 Timer
00BA Port B
00BC VSYNC?
OOBD non sauter
OOBF (Start Frame Fly Chain)
00C2 octet fort vers accu
00C3 accu = 0?
00C4 accu pas 0 sauter à Kick Event
00C7 (Start Fast Ticker Chain)
00CA octet fort vers accu
00CB accu = 0?
00CC accu pas 0 sauter à Kick Event
OOCF Scan Sound Queues
00D2 Count for Ticker
00D9 Update Key State Map
00DC (Start Ticker Chain)
OODF octet fort vers accu
00E0 accu = 0?
00E1 accu 0 sauter
00E2 divers flags pour routine int.
00E5 Ticker Chain doit encore
00E7 être traité
00F2 (Start Int Pending Queue)
00F8 divers flags pour routine int.
OIOA (sp save)
010E Timer low
0114 divers flags pour routine int.
011D (Start Int Pending Queue)
0120 octet fort vers accu
0121 accu = 0?
0122 accu 0 sauter
0127 (Start Int Pending Queue)
0132 divers flags pour routine int
0135 Ticker Queue pending ?
0137 non sauter
013D traiter Ticker Chain
0142 divers flags pour routine int
0145 octet fort vers accu
0146 encore quelque chose à traiter?
0147 oui sauter 0149 annuler flags OHE restaurer sp

0153 ******************************************** Kick Event

0158 KL EVENT
015D KL EVENT
0161 Kick Event

0163 ********************************* KL NEW FRAME FLY

créer et ajouter bloc event

0166 KL INIT EVENT
016A ******************************** KL ADD FRAME FLY

ajouter bloc event.

016A Start Frame Fly Chain
016D Add Event
0170 ********************************* KL D£L FRAME FLY

supprimer bloc event.

0170 Start Frame Fly Chain
0173 Delete Event
0176 ******************************* KL N£W FAST TICKER

créer et ajouter bloc event (voir KL NEW FRAME FLY).

0179 KL INIT EVENT
017D ****************************** KL ADD FAST TICKER

ajouter bloc event (voir KL ADD FRAME FLY).

017D Start Fast Ticker Chain
0180 Add Event
0183 ******************************* KL DEL FAST TICKER

supprimer bloc event (voir KL DEL FRAME FLY).

0183 Start Fast Ticker Chain
0186 Delete Event

0189 ******************************** traiter Ticker Chain

0189 (Start Ticker Chain)
018C octet fort vers accu
018D accu = 0?
018E accu 0 sauter
01A4 KL EVENT

01B3 ************************************* KL ADD TICKER

ajouter bloc ticker.

01BF Start Ticker Chain
01C2 Add Event

01C5 ************************************* KL DEL TICKER

supprimer bloc ticker.

01C5 Start Ticker Chain
01C8 Delete Event
01D2 ************************************** KL INIT EVENT

créer bloc event.

01E2 ******************************************* KL EVENT

'kick' bloc event.

01E7 Event Cnt >127/<0
01EB Event Cnt >0&<127
01F1 ajouter sync event
0219 ***************************************** KL DO SYNC

exécuter routine event.

021F (0467) KL FAR INCALL CONT'D
0227 ************************************** KL SYNC RESET

annuler sync pending queue

022E ********************************** ajouter sync event

022F priorité vers b
0230 instruction à exécuter
0236 adresse du prochain
0237 bloc event
0238 amener vers de
0240 priorité actuelle > trouvée
0241 priorité?
0242 non sauter
0255 ************************************** KL NEXT SYNC

Au suivant.

0256 (Start Sync Pending Queue) 0259 octet fort vers accu
025A accu = 0?
025B accu 0 sauter
0263 (priorité event actuel)
026B (priorité event actuel)
026E (Start Sync Pending Queue)
0276 ************************************** KL DONE SYNC

routine event terminée.

0276 (priorité event actuel)
027E ajouter sync event
0284 ****************************** KL DEL SYNCHRONOUS supprimer un bloc
déterminé de la pending queue.

0284 KL DISARM EVENT
0287 Start Sync Pending Queue
028A Delete Event
028D ********************************** KL DISARM EVENT

verrouiller bloc event (compteur négatif).

0294 ********************************** KL EVENT DISABLE

Verrouiller les événements simultanés normaux. Les événements simultanés urgents ne sont pas verrouillés.

0294 priorité event actuel
029A ********************************* KL EVENT ENABLE

autoriser événements simultanés normaux.

029A priorité event actuel
02A0 **************************************** KL LOG EXT

ajouter extensions résidentes.

02B1 ********************************* KL FIND COMMAND

chercher instruction dans toutes les zones mémoire ajoutées.

02B1 instruction à exécuter
02B7 (0553) KL ROM OFF & CONFIGURATION SAVE
02DA (0524) KL PROBE ROM CONT'D
02E4 MC START PROGRAM
02FC (051F) KL ROM SELECT CONT'D
0307 instruction à exécuter
0323 (052D) KL ROM DESELECT CONT'D

0326 ************************************** KL ROM WALK

trouve et initialise extensions ROM pour que ces ROMs soient disponibles.

0328 KL INIT BACK

0330 *************************************** KL INIT BACK

ajouter extensions ROM

0330 configuration ROM actuelle
0339 (051F) KL ROM SELECT CONT'D
0351 (ROM d'extension actuelle)
0360 KL LOG EXT
0366 (052D) KL ROM DESELECT CONT'D
0379 ********************************************* Add Event

0388 ******************************************* Delete Event

0397 ***************KL FIXER CONFIGURATION RAM

Ici est effectuée une commutation entre les différentes configurations RAM du CPC 6128.

0398 sauver registres
0399 configuration RAM actuelle
039E préparation pour Gate-Array
03A0 commutation configuration RAM
03A3 rétablir ancien état des registres
03A6 (0505) KL U ROM ENABLE CONTD
03A9 (050C) KL U ROM DISABLE CONT'D
03AC (04F7) KL L ROM ENABLE CONTD
03AF (04FE) KL L ROM DISABLE CONT'D
03B2 (0516) KL ROM RESTORE CONT'D
03B5 (051F) KL ROM SELECT CONT'D
03B8 (0543) KL CURR SELECTION CONT'D
03BB (0524) KL PROBE ROM CONT'D
03BE (052D) KL ROM DESELECT CONT'D
03C1 (0547) KL LDIR CONT'D
03C4 (054D) KL LDDR CONT'D

03C7 **************************** KL POLL SYNCHRONOUS Y a-t-il un event de

priorité supérieure à celle de l'actuel?

03D6 (Start Sync Pending Queue)
03E0 (priorité event actuel)

03E7 ****************** rst 7 INTERRUPT ENTRY CONT'D

comparez avec RST 7 INTERRUPT ENTRY.

03E9 KL EXT INTERRUPT ENTRY
03F4 L ROM enable
03F6 Scan Events
03FE (divers flags pour routine int.)
0418 fixer ancienne configuration

041E ************************* KL EXT INTERRUPT ENTRY

0423 L ROM disable

042A ****************************** KL LOW PCHL CONT'D

saut en ROM ou RAM basse.

0430 **************************** RST 1 LOW JUMP CONT'D

comparez avec RST 1 LOW JUMP.

043C rotation accu quatre fois vers la gauche
0445 (0456) préparer configuration et exécuter saut
0456 placer adresse de saut sur la pile
0458 fixer configuration ROM
045E exécuter saut préparé

045F ******************************* KL FAR PCHL CONT'D

0467 ****************************** KL FAR ICALL CONT'D

046D ********************** RST 3 LOW FAR CALL CONT'D

comparez avec RST 3 LOW FAR CALL.

047C ROM# > 252?
047E oui sauter
0480 ROM d'extension
0482 (connecter)
0484 ROM d'extension actuelle
04A2 L ROM disable
04A4 U ROM enable
04A6 (0456) préparer configuration et exécuter saut
04AF restaurer
04B0 ancienne
04 Bl configuration
04B3 de ROM d'extension
04B5 (ROM actuelle d'extension)

04BD ****************************** KL SIDE PCHL CONT'D

04C3 ********************** RST 2 LOW SIDE CALL CONTD

comparez avec RST 2 LOW SIDE CALL.

04D5 (configuration ROM actuelle)

04DB *************************** RST 5 FIRM JUMP CONT'D

comparez avec RST 5 FIRM JUMP.

04E3 L ROM enable
04E5 charger adresse de saut
04EB et exécuter saut
04F0 L ROM disable

04F7 ************************* KL L ROM ENABLE CONT'D

connecter ROM inférieure.

04FA L ROM enable
04FC saut à exécution

04FE ************************* KL L ROM DISABLE CONT'D

déconnecter ROM inférieure

0501 L ROM disable
0503 saut à exécution

0505 ************************* KL U ROM ENABLE CONT'D

connecter ROM supérieure.

0508 U ROM enable
050A saut à exécution

050C ************************ KL U ROM DISABLE CONT'D

déconnecter ROM supérieure.

050F U ROM disable
0511 exécution

0516 ************************** KL ROM RESTORE CONT'D

restaurer ancienne configuration ROM

0517 a contient
0518 l'ancienne
0519 configuration
051D saut à exécution

051F **************************** kL ROM SELECT CONT'D

sélectionner une ROM supérieure déterminée.

051F (0505) KL U ROM ENABLE CONT'D
0524 ***************************** KL PROBE ROM CONT'D

examiner ROM

0524 (051F) KL ROM SELECT CONT'D

052D ************************* KL ROM DESELECT CONT'D

restaurer ancienne configuration ROM supérieure.

052F (0516) KL ROM RESTORE CONT'D
0535 ROM d'extension (# in c)
0537 (connecter)
0539 ROM actuelle d'extension

0543 *********************** KL CURR SELECTION CONT'D

Quelle ROM supérieure est activée? 0543 ROM actuelle d'extension

0547 ************************************* KL LDIR CONT'D

LDIR pour ROMs bloquées.

054D (0553) KL ROM OFF & CONFIG.SAVE
054D *********************************** KL LDDR CONT'D

LDDR pour ROMs bloquées.

054D (0553) KL ROM OFF & CONFIG.SAVE

0553 ********************** KL RQM OFF & C0NFIG. SAVE

0555 manipuler adresse RET
0556 sauver ancienne configuration sur la pile
0557 ROMs
0559 disable
055D call (hl)
0561 restaurer
0562 ancienne
0563 configuration
0568 manipuler adresse RET

056C **************************** RST 4 RAM LAM GONT,D

Comparez RST 4 RAM LAM

056F ROMs
0571 disable
0576 aller chercher octet
0578 fixer ancienne configuration

057D *********************************** KL RAM LAM (IX)

correspond à ld a,(ix).

057F ROMs
0581 disable
0583 aller chercher octet
0586 fixer ancienne configuration

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 2.05.00 La ROM du système d'exploitation
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 020 millisecondes et consultée 1614 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.