13
Chapitre 8 L’horloge du PC Il faut synchroniser le microprocesseur et ses coupleurs. Nous allons voir comment dans ce chapitre. 8.1 Le contrˆoleur d’horloge 8284 On peut engendrer le signal d’horloge de diverses fa¸ cons. Intel a con¸ cu un circuit int´ egr´ e sp´ ecialis´ e, ` a utiliser avec le microprocesseur8086/88,qui joue le rˆole d’interface entre un cristal et le microprocesseur. Il s’agit du 8284A, qui fournit le signal d’horloge, le signal de synchronisation et aussi le signal READY pour l’insertion d’´ etats d’attente dans le cycle du bus. Le microprocesseur 8088 est disponible avec deux cadencements : le plus utilis´ e est le 8088-1 ` a 5 MHz mais il existe aussi le 8088-2 ` a 8 MHz. 8.1.1 Brochage du 8284 Le circuit int´ egr´ e 8284A comporte 18 broches comme le montre la figure 8.1. Nous allons ecrire le rˆole de chacune de ces broches et ` a quoi elles sont reli´ ees dans le cas de l’IBM-PC. Broches d’entr´ ee .- Les broches d’entr´ ee sont les suivantes : RES (RESet in) Le signal ` a la broche 11, actif ` a tension basse, engendre un signal ` a la broche RESET. Dans le cas de l’IBM-PC, cette broche est reli´ ee au signal de l’alimentation. Lorsqu’on allume l’IBM-PC, un signal ` a tension basse est fournie ` a cette broche et le 8284 active 217

L'horloge du PC

Embed Size (px)

Citation preview

Page 1: L'horloge du PC

Chapitre 8

L’horloge du PC

Il faut synchroniser le microprocesseur et ses coupleurs. Nous allons voir comment dans cechapitre.

8.1 Le controleur d’horloge 8284

On peut engendrer le signal d’horloge de diverses facons. Intel a concu un circuit integrespecialise, a utiliser avec le microprocesseur 8086/88, qui joue le role d’interface entre un cristal etle microprocesseur. Il s’agit du 8284A, qui fournit le signal d’horloge, le signal de synchronisationet aussi le signal READY pour l’insertion d’etats d’attente dans le cycle du bus.

Le microprocesseur 8088 est disponible avec deux cadencements : le plus utilise est le 8088-1a 5 MHz mais il existe aussi le 8088-2 a 8 MHz.

8.1.1 Brochage du 8284

Le circuit integre 8284A comporte 18 broches comme le montre la figure 8.1. Nous allonsdecrire le role de chacune de ces broches et a quoi elles sont reliees dans le cas de l’IBM-PC.

Broches d’entree.- Les broches d’entree sont les suivantes :

– RES (RESet in)

Le signal a la broche 11, actif a tension basse, engendre un signal a la broche RESET.Dans le cas de l’IBM-PC, cette broche est reliee au signal de l’alimentation. Lorsqu’onallume l’IBM-PC, un signal a tension basse est fournie a cette broche et le 8284 active

217

Page 2: L'horloge du PC

218 CHAPITRE 8. L’HORLOGE DU PC

la broche 10 (RESET), obligeant le 8088 a une reinitialisation. C’est ce qu’on appelle undemarrage a froid (cold boot).

– X1 et X2 (crystal in)

Les broches 17 et 16 (X1 et X2) sont reliees au cristal. La frequence du cristal doit etrele triple de la frequence desiree pour le microprocesseur. La frequence maximum du cristalpour le 8284A est de 24 MHz et de 30 MHz pour le 8284A-1.L’IBM-PC est relie a un cristal de 14.31818 Mhz.

Fig. 8.1 – Brochage du 8284

– F/C (Frequency/Clock select)

La broche 13 fournit une option sur la facon dont le signal d’horloge est engendre. Losqu’elleest a tension basse, le signal d’horloge est engendre par le 8284 a l’aide d’un oscillateur acristal. Lorsqu’elle est a tension haute, le signal d’horloge est recu par la broche 14 (EFI).Puisque l’IBM-PC utilise un oscillateur a cristal, cette broche est reliee a une tension basse.

– EFI (External Frequency In)

Le signal externe de frequence est relie a la broche 14 si la broche 13 (F/C) est a tensionhaute, comme nous venons de le voir.Dans le cas de l’IBM-PC cette broche n’est pas reliee puisqu’on utilise un oscillateur acristal.

– CSYNC (Clock SYNChronization)

Un signal, actif a tension haute a la broche 1, permet a plusieurs 8284 d’etre relies ensembleet d’etre synchronises.L’IBM-PC utilise seulement un 8284, aussi cette broche est-elle a tension basse.

– RDY1 et AEN1 (ReaDY 1 et Address ENable 1)

Les signaux RDY1, de la broche 4, et AEN1, de la broche 3, sont actifs a tension haute et

Page 3: L'horloge du PC

8.1. LE CONTROLEUR D’HORLOGE 8284 219

tension basse respectivement. Ils sont utilises ensemble pour fournir un signal READY aumicroprocesseur, qui inserera alors un etat WAIT dans le cycle de lecture/ecriture.Dans le cas de l’IBM-PC, RDY1 est relie a DMAWAIT et AEN1 a RDY/WAIT. Cecipermet a l’etat WAIT d’etre inserer soit par le microprocesseur, soit par le DMAC.

– RDY2 et AEN2

Ces signaux, correspondants aux broches 6 et 7 respectivement, fonctionnent exactementcomme RDY1 et AEN1. Ces signaux RDY et AEN supplementaires sont fournis pour lessystemes a plusieurs microprocesseurs.Dans le cas de l’IBM-PC, RDY2 est relie a la tension basse et AEN2 a la tension haute, cequi deconnecte cette fonction en permanence.

– ASYNCCe signal correspond a la broche 15. Une tension basse est utilisee pour les peripheriquesqui ne sont pas capables d’adherer a une requisition RDY tres stricte.Dans le cas de l’IBM-PC, cette broche est reliee a la tension basse, rendant la conceptiondu diagramme de temps plus facile pour les portes logiques plus lentes.

Broches de sortie.- Les broches de sortie sont les suivantes :

– RESET

Ce signal, correspondant a la broche 10 et actif a tension haute, fournit un signal RESETau microprocesseur 8088. Il est active par le signal d’entree RES.

– OSC (OSCillator)

Ce signal, correspondant a la broche 12, fournit une frequence d’horloge egale a celle ducristal. Ce signal est TTL-compatible.L’oscillateur a cristal de l’IBM-PC est cadence a 14.31818 MHz donc OSC fournit cettefrequence aux connecteurs d’extension.

– CLK (CLocK)

Ce signal, correspondant a la broche 8, fournit une frequence d’horloge egale au tiers decelle de l’oscillateur a cristal ou de la frequence d’entree EFI. La broche est reliee a l’entreed’horloge du 8088 et aux peripheriques qui doivent etre synchronises avec le microproces-seur.Dans le cas de l’IBM-PC, la broche est reliee a la broche 19 du microprocesseur 8088.

– PCLK (Peripheral CLocK)

Cette frequence, correspondant a la broche 2, est la moitie de celle de CLK (soit le sixiemede celle du cristal). Le signal est TTL-compatible.Dans le cas de l’IBM-PC, cette frequence de 2,386383 MHz est fournie au temporisateur8253 pour le haut-parleur interne.

– READY

La broche 5 est reliee a la broche READY du microprocesseur.Dans le cas de l’IBM-PC, ce signal est utilise pour dire au 8088 d’indiquer si le micropro-cesseur a besoin d’inserer un etat WAIT du a la lenteur des peripheriques que le micropro-cesseur essaie de contacter.

Page 4: L'horloge du PC

220 CHAPITRE 8. L’HORLOGE DU PC

8.1.2 Schema du circuit

Le schema de la puce du circuit integre est montre a la figure 8.2.

Fig. 8.2 – Equivalent du 8284

8.2 Le temporisateur 8253

Dans le cas de l’IBM-PC, une seule horloge est utilisee pour synchroniser les activites detous les coupleurs relies au microprocesseur. Cette horloge produit la plus grande frequence dusysteme pour le microprocesseur. Il existe des fonctions du PC qui exigent une horloge avecune frequence plus basse. Le temporisateur (PIT pour Programmable Interval Timer) 8253 estutilise pour fournir la frequence desiree, par exemple pour le bip.

8.2.1 Brochage du 8253

La figure 8.3 montre le brochage du 8253, ainsi que son equivalent logique :

– A0, A1, CS

Le 8253 comporte trois compteurs. Chacun d’eux fonctionne independamment et est pro-gramme separement pour diviser la frequence d’entree par un nombre compris entre 1 et 65536. Chaque compteur se voit attribue une adresse de port. Un registre de controle com-mun aux trois compteurs possede sa propre adresse de port. Ceci signifie qu’on a besoin dequatre ports pour le temporisateur.Les ports sont adresses par les broches 19 (A0), 20 (A1) et 21 (CS) de la facon suivante :

CS A1 A0 Port0 0 0 Counter 00 0 1 Counter 10 1 0 Counter 2

Page 5: L'horloge du PC

8.2. LE TEMPORISATEUR 8253 221

0 1 1 Control register1 x x Le 8253 n’est pas selectionne

Chaque compteur a trois broches (CLK, GATE et OUT) qui lui sont associes.

– CLK

Les broches 9, 15 et 18 permettent d’obtenir la frequence d’horloge d’entree, qui peut varierde 0 a 2 MHz. Il doit s’agir d’un signal carre.

– OUT

Les broches 10, 13 et 17 fournissent la frequence de sortie. La forme du signal de sortiepeut etre programmee (carre, impulsion, ...).

– GATE

Les broches 11, 14 et 16 permettent d’activer ou de desactiver le compteur. Une tensionhaute (5 V) l’active alors qu’une tension basse (0 V) le desactive. Une impulsion 0 a 1 peutaussi etre appliquee pour activer le compteur dans certains modes.

– D0 – D7

Les broches 1 a 8 constituent le bus des donnees bidirectionnel du 8253. Ce bus des donneespermet au microprocesseur d’acceder a divers registres internes du 8253 pour des operationsde lecture et d’ecriture.

– RD

La broche 22, active a niveau bas, est reliee au signal de controle IOR du bus systeme.

– WR

La broche 23, active a niveau bas, est reliee au signal de controle IOW du bus systeme.

8.2.2 Initialisation du 8253

Chacun des trois compteurs du 8253 doit etre programme separement. Pour programmer uncompteur, un octet doit d’abord etre envoye dans le registre de controle, qui precise entre autrela forme du signal de sortie. Le nombre par lequel doit etre divise la frequence d’entree doit etreecrit dans le compteur. Puisque ce nombre occupe deux octets et que le bus des donnees du 8253a une largeur de 8 bits, ce nombre doit etre envoye un octet a la fois.

Octet de controle.- Le format de l’octet de controle est le suivant :

D7 D6 D5 D4 D3 D2 D1 D0SC1 SC0 RL1 RL0 M2 M1 M0 BCD

– Le bit D0 permet de choisir entre un diviseur exprime en binaire (0) ou en BCD (1).

– Les bits D1, D2 et D3 specifient le mode :

M2 M1 M0 Mode Description0 0 0 Mode 0 Interruption apres le decompte0 0 1 Mode 1 Un seul declenchement, programmablex 1 0 Mode 2 Generateur de tauxx 1 1 Mode 3 Generateur d’un signal carre1 0 0 Mode 4 Stroboscopique logiciel1 0 1 Mode 5 Stroboscopique materiel

Page 6: L'horloge du PC

222 CHAPITRE 8. L’HORLOGE DU PC

Fig. 8.3 – Brochage du 8253

– Les bits D4 et D5 specifient la facon de lire le diviseur :

RL1 RL0 Description0 0 Operation de declenchement du compteur0 1 LSB seulement1 0 MSB seulement1 1 D’abord LSB puis MSB

On peut ecrire mais aussi lire. Tous les compteurs vont en decroissant a partir de la valeurintroduite. La lecture permet d’utiliser le 8253 comme un compteur d’evenement.

– Les bits D6 et D7 specifient le compteur a initialiser :

SC1 SC0 Description0 0 Selectionner le compteur 00 1 Selectionner le compteur 11 0 Selectionner le compteur 21 1 Illegal

Page 7: L'horloge du PC

8.2. LE TEMPORISATEUR 8253 223

Exemple 1.- Considerer un montage ou la broche CS est activee par l’adresse A7 – A2 = 100101.

(a) Trouver les adresses de port assignees au 8253.(b) Qu’est-ce qui est effectue par le programme suivant ?

MOV AL,00110110

OUT 97H,AL

(a) D’apres les trois premieres broches etudiees, on a :

CS A1A0 Port Adresse en hexa1001 01 00 Compteur 0 941001 01 01 Compteur 1 951001 01 10 Compteur 2 961001 01 11 Registre de controle 97

(b) On envoie donc un octet au registre de controle. Puisque que SC = 00, il s’agit ducompteur 0. Puisque RL = 11, on aura l’octet de poids faible puis l’octet de poids fort lors de lalecture-ecriture. Puisque M = 011, on selectionne le mode 3, c’est-a-dire le signal carre. PuisqueBCD = 0, le diviseur sera envoye en binaire.

Exemple 2.- Utiliser les specifications de l’exemple precedent pour programmer :

(a) le compteur 0 pour le mode 3 et diviser CLK0 par le nombre 4282 en BCD.(b) le compteur 2 pour le mode 3 et diviser CLK2 par le nombre C26Ah.(c) Trouver la frequence de OUT0 et OUT2 si CLK0 = 1,2 MHz et CLK2 = 1,8 MHz.

(a) Pour programmer le compteur 0, nous devons envoyer l’octet de controle 00110111b =37h, d’ou le programme :

MOV AL,37H ; compteur 0, mode 3, BCD

OUT 97H,AL ; envoyer au registre de controle

MOV AX,4282H ; charger le diviseur

OUT 94H,AL ; envoyer l’octet de poids faible

MOV AL,AH

OUT 94H,AL ; envoyer l’octet de poids fort

(b) Pour programmer le compteur 0, nous devons envoyer l’octet de controle 10110110b =B6h, d’ou le programme :

MOV AL,B6H ; compteur 2, mode 3, binaire

OUT 97H,AL ; envoyer au registre de controle

MOV AX,C26AH ; charger le diviseur

OUT 96H,AL ; envoyer l’octet de poids faible

MOV AL,AH

OUT 96H,AL ; envoyer l’octet de poids fort

(c) La frequence pour OUT0 est 1,2 MHz divisee par 4282, soit 280 Hz. La frequence pour0UT2 est 1,8 MHz divisee par C26Ah = 49770, soit 36 Hz.

Page 8: L'horloge du PC

224 CHAPITRE 8. L’HORLOGE DU PC

8.2.3 Cas de l’IBM-PC

Les ports.- L’IBM-PC utilise un 74LS138 pour decoder l’adresse partant vers la broche CS du8253 conformement a la figure 8.4.

Fig. 8.4 – Selection du port du 8253

Les adresses de port sont indiquees ci-dessous, en supposant zero pour les x :

Adresse en binaire Adresse Fonction

AEN A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 en hexa

1 0 0 0 1 0 x x x 0 0 40 Compteur 0

1 0 0 0 1 0 x x x 0 1 41 Compteur 1

1 0 0 0 1 0 x x x 1 0 42 Compteur 2

1 0 0 0 1 0 x x x 1 1 43 Registre de controle

Connexions.- Les trois broches d’horloge CLK0, CLK1 et CLK2 du 8253 sont toutes connectees aune frequence constante de 1,1931817 MHz, fournie par la broche PCLK du 8284 apres avoir etedivisee par 2 par l’utilisation de la bascule D (un 72LS175), comme montre sur la figure 8.5 : lafrequence de PCLK (de 2,3863633 MHz, rappelons-le) doit etre divisee par deux car la frequenced’entree maximum permise pour le 8253 est 2 MHz.

GATE0 et GATE1, qui activent les compteurs 0 et 1, sont connectes a HIGH (5 V), ce quifait que ces deux compteurs ne peuvent pas etre desactives.

Le compteur 2 peut etre active ou desactive car GATE2 est relie a la broche PB0 du port Bdu 8255.

Utilisation du compteur 0.- La broche OUT0 du compteur 0 est reliee a la broche IRQ0 (l’in-terruption de plus haute priorite) du controleur d’interruption 8259 de facon a declencher, entreautres, l’interruption donnant l’heure (TOD pour Time-Of-Day)

Puisque la frequence de CLK0 est 1,193 MHz, si on la divise par le maximum possible, c’est-a-dire 65 536, on obtient une frequence de 18,2 Hz sur OUT0.

La forme du signal doit etre carre (mode 3 du 8253) afin de declencher IR0 au sommet dechaque signal.

L’octet de controle doit donc etre 36h, a savoir :

– D0 = 0 pour une valeur du diviseur en binaire.

Page 9: L'horloge du PC

8.2. LE TEMPORISATEUR 8253 225

– D3D2D1 = 011 pour le mode 3.– D5D4 = 11 pour LSB d’abord, MSB ensuite.– D7D6 = 00 pour le compteur 0.

Fig. 8.5 – Utilisation du 8253

La programmation du compteur 0, que l’on retrouvera dans le listing du BIOS, est donc :

MOV AL,36H ; compteur 0, LSB-MSB, mode 3, binaire

OUT 43H,AL ; envoyer au registre de controle

MOV AL,00 ; 00 pour LSB ET MSB du diviseur

OUT 40H,AL ; LSB a 0

OUT 40H,AL ; MSB a 0

La fonction de IR0 n’est seulement de prendre soin de l’horloge de l’heure du jour. Le BIOSutilise egalement cette interruption pour voir si le moteur du lecteur de disquette a besoind’etre arrete. L’utilisateur peut egalement s’en servir, en definissant la routine de service del’interruption 1Ch. Si l’utilisateur n’utilise pas cette interruption, le controle est rendu au BIOS.

Utilisation du compteur 1.- La sortie OUT1 du compteur 1 genere une impulsion periodiquerequise pour rafraıchir la memoire DRAM. Ce rafraıchissement doit etre effectue au moins tousles 15 µs par cellule. Cette tache de rafraıchissement de la RAM est confiee au DMAC 8257.Le compteur 1 du 8253 informe le DMAC periodiquement. Ainsi OUT1 doit fournir au DMACune impulsion a peu pres toutes les 15 µs, soit une frequence de 66,278 Hz. Ceci signifie que lediviseur du compteur 1 doit etre 18.

L’octet de controle doit donc etre 54h, a savoir :

Page 10: L'horloge du PC

226 CHAPITRE 8. L’HORLOGE DU PC

– D0 = 0 pour une valeur du diviseur en binaire.– D3D2D1 = 010 pour le mode 2. Dans ce mode, OUT1 reste a niveau haut durant 18

impulsions et passe a niveau bas durant une impulsion.– D5D4 = 01 pour LSB seulement, puisque la valeur du compteur est inferieure a FFh.– D7D6 = 01 pour le compteur 1.

La programmation du compteur 0, que l’on retrouvera dans le listing du BIOS, est donc :

MOV AL,54H ; compteur 1, LSB, mode 2, binaire

OUT 43H,AL ; envoyer au registre de controle

MOV AL,18 ; 18 pour LSB

OUT 41H,AL ; LSB a 18

Utilisation du compteur 2.- La sortie OUT2 du compteur 2 est reliee a trois broches : une duhaut-parleur, la broche PC5 du 8255 ainsi qu’a la circuiterie du lecteur de cassette.

La broche GATE2 est reliee a la broche PB0 du port 61h (port B). L’IBM-PC utilise lecompteur 2 pour generer les sons. Le BIOS utilise le temporisateur 2 pour generer un bip maison peut le changer pour jouer une note musicale.

Le bip est un son de frequence 896 Hz de mode 3 (signal carre). En divisant la frequenced’entree de 1,19318 MHz par 1331 (533h), on obtient 896 Hz.

L’octet de controle doit donc etre B6h, a savoir :

– D0 = 0 pour une valeur du diviseur en binaire.– D3D2D1 = 011 pour le mode 2.– D5D4 = 11 pour LSB d’abord, MSB ensuite.– D7D6 = 10 pour le compteur 2.

La programmation du compteur 2, que l’on retrouvera dans le listing du BIOS, est donc :

MOV AL,06BH ; compteur 2, LSB-MSB, mode 3, binaire

OUT 43H,AL ; envoyer au registre de controle

MOV AL,33H ; 33 pour LSB

OUT 42H,AL ; LSB a 33

MOV AL,05 ; 5 pour MSB

OUT 42H,AL ; MSB a 5

Mise en marche du haut-parleur.- Pour mettre en marche le haut-parleur, GATE2 doit etre aniveau haut. Ceci s’effectue grace au bit PB0 du port 61h :

IN AL,61H ; recuperer la valeur en cours du port B

MOV AH,AL ; la sauvegarder

OR AL,00000011B ; faire PB0 = 1 et PB1=1

OUT 61H,AL ; mise en marche du haut-parleur

; delai pour entendre le haut-parleur

MOV AL,AH ; recupere la valeur originelle du port B

OUT 61H,AL ; couper le haut-parleur

Le delai est obtenu en s’aidant du microprocesseur :

MOV CX,N

AGAIN: LOOP AGAIN

Page 11: L'horloge du PC

8.3. LE BIOS 227

Chaque instruction LOOP du 8088 dure 17 tics d’horloge, donc le delai est d’environ N ×

T × 17, ou T est la periode. Par exemple, pour CX = 28 000 et une frequence de 4,7 MHz (soitT = 210 ns), on a un delai de 100 ms.

Le BIOS utilise la facon suivante pour le bip :

SUB CX,CX

G7: LOOP G7

DEC BL

JNZ G7

Avec CX = 65 536, 〈〈 LOOP G7 〉〉 donne un delai d’environ 250 ms (210× 65536× 17 = 234ms). Le registre BL contient le nombre de delais de 250 ms.

8.3 Le BIOS

Le BIOS commence par definir les ports de base du 8253 :

0040 22 TIMER EQU 40H

0043 23 TIM_CTL EQU 43H ; 8253 TIMER CONTROL PORT ADDR

0040 24 TIMER0 EQU 40H ; 8253 TIMER/CNTER 0 PORT ADDR

0001 25 TMINT EQU 01 ; TIMER 0 INTR RECVD MASK

puisque nous avons que, pour l’IBM PC, le registre interne de controle a pour adresse 43h.Nous avons deja vu au chapitre 3 que la zone de communication du BIOS consacree au

temporisateur commence ligne 183.

8.3.1 Verification du temporisateur 1

Le BIOS ne s’occupe du temporisateur 1 qu’au demarrage du systeme, pour le verifier etl’initialiser :

413

414 ;----- VERIFY THAT TIMER 1 FUNCTIONS OK

415

E0E1 B054 416 MOV AL,54H ; SET TIMER 1,LSB,MODE 2

E0E3 E643 417 OUT TIMER+3,AL

E0E5 8AC1 418 MOV AL,CL ; SET INITIAL TIMER CNT TO 0

E0E7 E641 419 OUT TIMER+1,AL

E0E9 420 C12: ; TIMER1_BITS_ON

E0E9 B040 421 MOV AL,40H ; LATCH TIMER 1 COUNT

E0EB E643 422 OUT TIMER+3,AL

E0ED 80FBFF 423 CMP BL,0FFH ; YES - SEE IF ALL BITS GO OFF

E0F0 7407 424 JE C13 ; TIMER1_BITS_OFF

E0F2 E441 425 IN AL,TIMER+1 ; READ TIMER 1 COUNT

E0F4 0AD8 426 OR BL,AL ; ALL BITS ON IN TIMER

E0F6 E2F1 427 LOOP C12 ; TIMER1_BITS_ON

E0F8 F4 428 HLT ; TIMER 1 FAILURE, HALT SYS

E0F9 429 C13: ; TIMER1_BITS_ON

E0F9 8AC3 430 MOV AL,BL ; SET TIMER 1 CNT

E0FB 2BC9 431 SUB CX,CX

E0FD E641 432 OUT TIMER+1,AL

E0FF 433 C14: ; TIMER_LOOP

E0FF B040 434 MOV AL,40H ; LATCH TIMER 1 COUNT

E101 E643 435 OUT TIMER+3,AL

E103 90 436 NOP ; DELAY FOR TIMER

E104 90 437 NOP

E105 E441 438 IN AL,TIMER+1 ; READ TIMER 1 COUNT

E107 22D8 439 AND BL,AL

E109 7403 440 JZ C15 ; WRAP_DMA_REG

E10B E2F2 441 LOOP C14 ; TIMER_LOOP

E10D F4 442 HLT ; HALT SYSTEM

443

Page 12: L'horloge du PC

228 CHAPITRE 8. L’HORLOGE DU PC

444 ;----- INITIALIZE TIMER 1 TO REFRESH MEMORY

445

E10E B003 446 C15: MOV AL,03H ; <><><><><><><><><><><><>

E110 E660 447 OUT PORT_A,AL ; <><><>CHECKPOINT 3<><><>

448 ; WRAP-DMA_REG

E112 E60D 449 OUT DMA+0DH,AL ; SEND MASTER CLEAR TO DMA

Commentaires.- 1o) On verifie que le temporisateur 1 fonctionne. Nous avons deja vu qu’onenvoie l’octet de controle 54h (lignes 416 et 417). Il se trouve qu’au moment ou on arrive a laligne 418, la valeur de CL est 0, donc on envoie un compteur de 0 au compteur 1 (ligne 419). Ondeclenche le compteur 1 en envoyant l’octet de controle 40h au registre de controle (lignes 421et 422).

- 2o) A ce moment BL contient 0, il ne contient donc pas FFh (lignes 423 et 424),donc on continue. On lit la valeur du compteur 1 (ligne 425) et on effectue un OU avec la valeurde BL (ligne 426) et on recommence jusqu’a ce que CX soit nul (ligne 427). Si le temporisateurfonctionne, on arrivera a FFh a un certain moment, donc on passera a la suite (lignes 423 et424). Sinon, apres la fin de la boucle, on passera a la ligne 428, qui arrete tout bonnement lesysteme.

- 3o) On remet CX a 0 (ligne 431), on initialise le compteur du temporisateur 1avec FFh (lignes 430 et 432) et on declenche le temporisateur 1 (lignes 434 et 435). On laisse undelais pour le temporisateur (lignes 436 et 437) puis on lit la valeur du compteur (ligne 438), quine devrait donc pas etre egal a FFh. Si rien ne se passe avant la fin de la boucle, on arrete toutbonnement le systeme (lignes 441 et 442).

- 4o) Si le temporisateur fonctionne, on l’initialise pour rafraıchir la memoire vive(lignes 446 a 449), ce que nous reverrons au chapitre suivant.

8.3.2 Verification de la vitesse du temporisateur

Au demarrage, le BIOS verifie que le temporisateur ne fonctionne ni trop lentement, ni tropvite :

826 ;--------------------------------------------------------

827 ; 8253 TIMER CHECKOUT :

828 ; DESCRIPTION :

829 ; VERIFY THAT THE SYSTEM TIMER (0) DOESN’T COUNT :

830 ; TOO FAST OR TOO SLOW. :

831 ;--------------------------------------------------------

E350 832 D7:

E350 C606150402 833 MOV DATA_AREA(OFFSET MFR_ERR_GLAG),02H

834 ; <><><><><><><><><><><><><><><><>

835 ; <><><>TIMER CHECKPOINT (2)<><><>

E362 B0FE 836 MOV AL,0FEH ; MASK ALL INTRS EXCEP LVL 0

E364 E621 837 OUT INTA01,AL ; WRITE THE 8259 IMR

E366 B010 838 MOV AL,00010000B ; SEL TIM 0, LSB, MODE 0, BINARY

E368 E643 839 OUT TIM_CTL,AL ; WRITE TIMER CONTROL MODE REG

E36A B91600 840 MOV CX,16H ; SET PGM LOOP CNT

E36D 8AC1 841 MOV AL,CL ; SET TIMER 0 CNT REG

E36F E640 842 OUT TIMER0,AL ; WRITE TIMER 0 CNT

E371 843 D8:

E371 F6066B0401 844 TEST DATA_AREA[OFFSET INTR_FLAG],01H

845 ; DID TIMER 0 INTERRUPT OCCUR?

E376 7504 846 JNZ D9 ; YES - CHECK TIMER OP FOR SLOW TIME

E378 E2F7 847 LOOP D8 ; WAIT FOR INTR FOR SPECIFIED TIME

E37A EBD8 848 JMP D6 ; TIMER 0 INTR OION T OCCUR - ERR

E37C 849 D9:

E37C B10C 850 MOV CL,12 ; SET PGM LOOP CNT

E37E B0FF 851 MOV AL,0FFH ; WRITE TIMER 0 CNT REG

E380 E640 852 OUT TIMER0,AL

E382 C6066B040D 853 MOV DATA_AREA[OFFSET INTR_FLAG],0 ; RESET INTR RECEIVED FLAG

E387 BDFE 854 MOV AL,0FEH ; REENABLE TIMER 0 INTERRUTS

E389 E621 855 OUT INTA01,AL

E38B 856 D10:

Page 13: L'horloge du PC

8.3. LE BIOS 229

E38B F6066B0401 857 TEST DATA_AREA[OFFSET INTR_FLAG],01H ; DID TIMER 0 INTERRUPT OCCUR?

E390 75C2 858 JNZ D6 ; YES - TIMER CNTING TOO FAST, ERR

E392 E2F7 859 LOOP D10 ; WAIT FOR INTR FOR SPECIFIED TIME

860

861 ;----- SETUP TIMER 0 TO MODE 3

862

E394 B0FF 863 MOV AL,0FFH ; DISABLE ALL DEVICE INTERRUPTS

E396 E621 864 OUT INTA01,AL

E398 B036 865 MOV AL,36H ; SEL TIM 0,LSB,MSB,MODE 3

E39A E643 866 OUT TIMER+3,AL ; WRITE TIMER MODE REG

E39C B000 867 MOV AL,0

E39E E640 868 OUT TIMER,AL ; WRITE LSB TO TIMER 0 REG

E3A0 E640 869 OUT TIMER,AL ; WRITE MSB TO TIMER 0 REG

Commentaires.- 1o) Rappelons que DATA AREA est defini ligne 59 dans le segment ABSO.

- 2o)