322 | | - Quelques remarques : |
323 | | - Le processeur a le droit d’accéder aux ressources protégées (registres du coprocessor 0 `c0`), |
324 | | et aux adresses mémoires >= `0x80000000`) si et seulement si le bit `UM` vaut `0`, |
325 | | ou si l’un des deux bits `ERL` et `EXL` vaut `1`. |
326 | | - Les interruptions sont autorisées si et seulement si le bit `IE` vaut `1`, |
327 | | et si les deux bits `ERL` et `EXL` valent `00`, et si le bit correspondant de `IM` vaut `1`. |
328 | | - Les trois types d’événements qui déclenchent le branchement au noyau: |
329 | | (interruptions, exceptions et appels système) forcent le bit `EXL` à `1`, |
330 | | ce qui masque les interruptions et autorise l’accès aux ressources protégées. |
331 | | - L’activation du signal `RESET` qui force le branchement au code de boot force le bit `ERL` à `1`, |
332 | | ce qui masque les interruptions et autorise l’accès aux ressources protégées. |
333 | | - L’instruction `eret` force le bit `EXL` à `0`. |
334 | | |
335 | | - Lors de l’activation du RESET : |
336 | | - `c0_sr` contient donc la valeur `0x0004` (`0b0000000000000100`). |
337 | | - Pour exécuter un programme utilisateur en mode protégé, avec interruptions activées, |
338 | | il doit contenir la valeur `0xFF11`. |
339 | | - Le noyau doit écrire la valeur `0xFF13` dans `c0_sr` et l’adresse de la première fonction du programme utilisateur dans `c0_epc` avant d’appeler l’instruction `eret`. |
340 | | |
| 322 | - Quelques remarques sur l'état du processeur :\\\\ |
| 323 | a. Le processeur a le droit d’accéder aux ressources protégées (registres du coprocessor 0 `C0`), |
| 324 | et aux adresses mémoires >= `0x80000000`) si et seulement si le bit `UM` vaut `0`, |
| 325 | ou si l’un des deux bits `ERL` et `EXL` vaut `1`. |
| 326 | b. Les interruptions sont autorisées si et seulement si le bit `IE` vaut `1`, |
| 327 | et si les deux bits `ERL` et `EXL` valent `00`, et si le bit correspondant de `IM` vaut `1`. |
| 328 | c. Les trois types d’événements qui déclenchent le branchement au noyau: |
| 329 | (interruptions, exceptions et appels système) mettent le bit `EXL` à `1`, |
| 330 | ce qui donc masque les interruptions et autorise l’accès aux ressources protégées. |
| 331 | d. L’activation du signal `RESET` qui force le branchement au code de boot force le bit `ERL` à `1`, |
| 332 | ce qui masque les interruptions et autorise l’accès aux ressources protégées. |
| 333 | e. L’instruction `eret` force le bit `EXL` à `0`, et l'état du processeur est alors défini par |
| 334 | par les valeurs des bits `UM` et `IE`. |
| 335 | f. Pour exécuter un programme utilisateur en mode protégé, avec interruptions activées, |
| 336 | le registre `C0_SR` doit contenir la valeur `0xFF11` |
| 337 | (c'est-à-dire `IM[7:0] = 0xFF`; `UM = 1`; `IE = 1`). |
| 338 | Par conséquent avant d'exécuter l'instruction `eret`, le noyau devra avoir écrit `0xFF13` |
| 339 | dans `C0_SR` (c'est-à-dire `IM[7:0] = 0xFF`; `UM = 1`; `IE = 1` ; `EXL = 1`) |
| 340 | et le noyau doit aussi mettre l’adresse de l'instruction utilisateur dans `C0_EPC`. |
| 341 | |
| 342 | - Lors de l’activation du RESET :\\\\ |
| 343 | a. `C0_SR` contient donc la valeur `0x0004` (`0b0000000000000100` donc `ERL = 1`) . |