diff options
author | Test_User <hax@andrewyu.org> | 2023-01-05 03:29:26 -0500 |
---|---|---|
committer | Test_User <hax@andrewyu.org> | 2023-01-05 03:29:26 -0500 |
commit | 0d290b91117fb0002e247b7a48a38eb40fc48fbd (patch) | |
tree | 5e36c882826194853835c1d1fc056bcbe7f01717 /cpu/exceptions/execution.txt | |
parent | b0ca4d17f93970881edf05f3cff206d47b7fa564 (diff) | |
download | specification-0d290b91117fb0002e247b7a48a38eb40fc48fbd.tar.gz specification-0d290b91117fb0002e247b7a48a38eb40fc48fbd.zip |
Add hardware task switching, get rid of software interrupts
Diffstat (limited to 'cpu/exceptions/execution.txt')
-rw-r--r-- | cpu/exceptions/execution.txt | 30 |
1 files changed, 30 insertions, 0 deletions
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 |