summaryrefslogtreecommitdiff
path: root/cpu/interrupts/exceptions/execution.txt
blob: dbf8825c762151f117139c98a179122b2344183a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

	Hardware interrupts will not occur until after the current processing has been finished via `irete`
	Any exceptions that occur before `irete` 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