diff options
Diffstat (limited to 'cpu/exceptions')
-rw-r--r-- | cpu/exceptions/edt.txt | 4 | ||||
-rw-r--r-- | cpu/exceptions/execution.txt | 30 |
2 files changed, 34 insertions, 0 deletions
diff --git a/cpu/exceptions/edt.txt b/cpu/exceptions/edt.txt new file mode 100644 index 0000000..f1f5792 --- /dev/null +++ b/cpu/exceptions/edt.txt @@ -0,0 +1,4 @@ +Each entry is n bits long, where n is the current mode in bits +TODO: Specify a limit for them + +Each entry is a pointer to the code to be executed diff --git a/cpu/exceptions/execution.txt b/cpu/exceptions/execution.txt new file mode 100644 index 0000000..17ca927 --- /dev/null +++ b/cpu/exceptions/execution.txt @@ -0,0 +1,30 @@ +For non-double exceptions: + OPRE gets set to the PR from the previous code running + OIPE gets set to the IP from the previous code running + PR is set to all 1s + + Interrupts will not occur until after the current processing has been finished via `irete`, or an appropriate task switch occurs + Any exception that occurs before `irete`, or an appropriate task switch, will trigger a double exception instead of the normal one + + When returning via irete: + PR is set to OPRE + Execution jumps to OIPE + +For a double exception: + OPRDE is set to the PR from the previous code running + OIPDE is set to the IP from the previous code running + PR is set to all 1s + + Segmentation is ignored for the double exception handler, flat addressing is used with no protection + + If any exceptions occur during execution of the double exception handler: + If this is not the only core active on the system: + Broadcasts a triple fault message + Shuts down + + If this is the only core active on the system: + Restarts the system + + When returning via iretde: + PR is set to OPRDE + Execution jumps to OIPDE |