Franck Pommereau

new example

1 +IRQ0:
2 + # set IP for process B in its first stack frame
3 + set R1 @intr1B # top (empty)
4 + dec R1 # where interrupt mask is saved
5 + set R0 0xFFFF # mask
6 + save R0 R1
7 + dec R1 # where IP is saved
8 + set R0 @processB
9 + save R0 R1 # assign it to @processB
10 + # start process A
11 + set SP @intr0A
12 + set R0 @processA
13 + jmp R0
14 +
15 +# which process is running
16 +# - 0 => process A
17 +# - 1 => process B
18 +current:
19 + = 0
20 +
21 +IRQ2:
22 + # check which process is running
23 + set R0 @current
24 + load R0 R1
25 + set R2 @switchB
26 + jz R1 R2
27 + switchA: # switch to process A
28 + dec R1
29 + set SP @intr1A
30 + set R3 @end
31 + jmp R3
32 + switchB: # switch to process B
33 + inc R1
34 + set SP @intr1B
35 + end: # update the running process
36 + save R1 R0
37 + iret
38 +
39 +# code for process A: make R0 blink (AAAA/4444)
40 +processA:
41 + set R0 0xAAAA
42 + set R0 0x4444
43 + set R1 @processA
44 + jmp R1
45 +
46 +# code for process B: make R0 blink (BBBB/8888)
47 +processB:
48 + set R0 0xBBBB
49 + set R0 0x8888
50 + set R1 @processB
51 + jmp R1
52 +
53 +# stack for process A
54 +intr0A: # frame for IRQ0
55 + = 0
56 + = 0
57 + = 0
58 + = 0
59 + = 0
60 + = 0
61 + = 0
62 + = 0
63 + = 0
64 + = 0
65 + = 0
66 + = 0
67 + = 0
68 + = 0
69 +intr1A: # one more frame
70 + = 0
71 + = 0
72 + = 0
73 + = 0
74 + = 0
75 + = 0
76 + = 0
77 + = 0
78 + = 0
79 + = 0
80 + = 0
81 + = 0
82 + = 0
83 + = 0
84 +intr2A: # one last frame
85 + = 0
86 + = 0
87 + = 0
88 + = 0
89 + = 0
90 + = 0
91 + = 0
92 + = 0
93 + = 0
94 + = 0
95 + = 0
96 + = 0
97 + = 0
98 + = 0
99 +
100 +# stack for process B
101 +intr0B: # frame for IRQ0
102 + = 0
103 + = 0
104 + = 0
105 + = 0
106 + = 0
107 + = 0
108 + = 0
109 + = 0
110 + = 0
111 + = 0
112 + = 0
113 + = 0
114 + = 0
115 + = 0
116 +intr1B: # one more frame
117 + = 0
118 + = 0
119 + = 0
120 + = 0
121 + = 0
122 + = 0
123 + = 0
124 + = 0
125 + = 0
126 + = 0
127 + = 0
128 + = 0
129 + = 0
130 + = 0
131 +intr2B: # one last frame
132 + = 0
133 + = 0
134 + = 0
135 + = 0
136 + = 0
137 + = 0
138 + = 0
139 + = 0
140 + = 0
141 + = 0
142 + = 0
143 + = 0
144 + = 0
145 + = 0
1 +top:
2 + = 0
3 +
4 +IRQ0:
5 + intr 4
6 + set R4 @top
7 + load R4 R0
8 + sub R0 SP
9 + halt
10 +
11 +IRQ4:
12 + set R0 @top
13 + save SP R0
14 + iret
...\ No newline at end of file ...\ No newline at end of file