comparison uprogs/usys.S @ 0:ed10291ff195

first commit
author mir3636
date Sun, 06 Jan 2019 19:27:03 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:ed10291ff195
1 /*****************************************************************
2 * usys.S
3 * by Zhiyi Huang, hzy@cs.otago.ac.nz
4 * University of Otago
5 *
6 ********************************************************************/
7
8
9
10 #include "syscall.h"
11 #include "traps.h"
12
13 /* This is clumsy, but don't know how to make it smart */
14 .globl fork
15 fork:
16 push {lr}
17 push {r3}
18 push {r2}
19 push {r1}
20 push {r0}
21 mov r0, #SYS_fork
22 swi #T_SYSCALL
23 pop {r1} /* to avoid overwrite of r0 */
24 pop {r1}
25 pop {r2}
26 pop {r3}
27 pop {lr}
28 bx lr
29
30 .globl exit
31 exit:
32 push {lr}
33 push {r3}
34 push {r2}
35 push {r1}
36 push {r0}
37 mov r0, #SYS_exit
38 swi #T_SYSCALL
39 pop {r1} /* to avoid overwrite of r0 */
40 pop {r1}
41 pop {r2}
42 pop {r3}
43 pop {lr}
44 bx lr
45
46 .globl wait
47 wait:
48 push {lr}
49 push {r3}
50 push {r2}
51 push {r1}
52 push {r0}
53 mov r0, #SYS_wait
54 swi #T_SYSCALL
55 pop {r1} /* to avoid overwrite of r0 */
56 pop {r1}
57 pop {r2}
58 pop {r3}
59 pop {lr}
60 bx lr
61
62 .globl pipe
63 pipe:
64 push {lr}
65 push {r3}
66 push {r2}
67 push {r1}
68 push {r0}
69 mov r0, #SYS_pipe
70 swi #T_SYSCALL
71 pop {r1} /* to avoid overwrite of r0 */
72 pop {r1}
73 pop {r2}
74 pop {r3}
75 pop {lr}
76 bx lr
77
78 .globl read
79 read:
80 push {lr}
81 push {r3}
82 push {r2}
83 push {r1}
84 push {r0}
85 mov r0, #SYS_read
86 swi #T_SYSCALL
87 pop {r1} /* to avoid overwrite of r0 */
88 pop {r1}
89 pop {r2}
90 pop {r3}
91 pop {lr}
92 bx lr
93
94 .globl write
95 write:
96 push {lr}
97 push {r3}
98 push {r2}
99 push {r1}
100 push {r0}
101 mov r0, #SYS_write
102 swi #T_SYSCALL
103 pop {r1} /* to avoid overwrite of r0 */
104 pop {r1}
105 pop {r2}
106 pop {r3}
107 pop {lr}
108 bx lr
109
110 .globl close
111 close:
112 push {lr}
113 push {r3}
114 push {r2}
115 push {r1}
116 push {r0}
117 mov r0, #SYS_close
118 swi #T_SYSCALL
119 pop {r1} /* to avoid overwrite of r0 */
120 pop {r1}
121 pop {r2}
122 pop {r3}
123 pop {lr}
124 bx lr
125
126
127 .globl kill
128 kill:
129 push {lr}
130 push {r3}
131 push {r2}
132 push {r1}
133 push {r0}
134 mov r0, #SYS_kill
135 swi #T_SYSCALL
136 pop {r1} /* to avoid overwrite of r0 */
137 pop {r1}
138 pop {r2}
139 pop {r3}
140 pop {lr}
141 bx lr
142
143 .globl exec
144 exec:
145 push {lr}
146 push {r3}
147 push {r2}
148 push {r1}
149 push {r0}
150 mov r0, #SYS_exec
151 swi #T_SYSCALL
152 pop {r1} /* to avoid overwrite of r0 */
153 pop {r1}
154 pop {r2}
155 pop {r3}
156 pop {lr}
157 bx lr
158
159 .globl open
160 open:
161 push {lr}
162 push {r3}
163 push {r2}
164 push {r1}
165 push {r0}
166 mov r0, #SYS_open
167 swi #T_SYSCALL
168 pop {r1} /* to avoid overwrite of r0 */
169 pop {r1}
170 pop {r2}
171 pop {r3}
172 pop {lr}
173 bx lr
174
175 .globl mknod
176 mknod:
177 push {lr}
178 push {r3}
179 push {r2}
180 push {r1}
181 push {r0}
182 mov r0, #SYS_mknod
183 swi #T_SYSCALL
184 pop {r1} /* to avoid overwrite of r0 */
185 pop {r1}
186 pop {r2}
187 pop {r3}
188 pop {lr}
189 bx lr
190
191 .globl unlink
192 unlink:
193 push {lr}
194 push {r3}
195 push {r2}
196 push {r1}
197 push {r0}
198 mov r0, #SYS_unlink
199 swi #T_SYSCALL
200 pop {r1} /* to avoid overwrite of r0 */
201 pop {r1}
202 pop {r2}
203 pop {r3}
204 pop {lr}
205 bx lr
206
207 .globl fstat
208 fstat:
209 push {lr}
210 push {r3}
211 push {r2}
212 push {r1}
213 push {r0}
214 mov r0, #SYS_fstat
215 swi #T_SYSCALL
216 pop {r1} /* to avoid overwrite of r0 */
217 pop {r1}
218 pop {r2}
219 pop {r3}
220 pop {lr}
221 bx lr
222
223 .globl link
224 link:
225 push {lr}
226 push {r3}
227 push {r2}
228 push {r1}
229 push {r0}
230 mov r0, #SYS_link
231 swi #T_SYSCALL
232 pop {r1} /* to avoid overwrite of r0 */
233 pop {r1}
234 pop {r2}
235 pop {r3}
236 pop {lr}
237 bx lr
238
239 .globl mkdir
240 mkdir:
241 push {lr}
242 push {r3}
243 push {r2}
244 push {r1}
245 push {r0}
246 mov r0, #SYS_mkdir
247 swi #T_SYSCALL
248 pop {r1} /* to avoid overwrite of r0 */
249 pop {r1}
250 pop {r2}
251 pop {r3}
252 pop {lr}
253 bx lr
254
255 .globl chdir
256 chdir:
257 push {lr}
258 push {r3}
259 push {r2}
260 push {r1}
261 push {r0}
262 mov r0, #SYS_chdir
263 swi #T_SYSCALL
264 pop {r1} /* to avoid overwrite of r0 */
265 pop {r1}
266 pop {r2}
267 pop {r3}
268 pop {lr}
269 bx lr
270
271 .globl dup
272 dup:
273 push {lr}
274 push {r3}
275 push {r2}
276 push {r1}
277 push {r0}
278 mov r0, #SYS_dup
279 swi #T_SYSCALL
280 pop {r1} /* to avoid overwrite of r0 */
281 pop {r1}
282 pop {r2}
283 pop {r3}
284 pop {lr}
285 bx lr
286
287 .globl getpid
288 getpid:
289 push {lr}
290 push {r3}
291 push {r2}
292 push {r1}
293 push {r0}
294 mov r0, #SYS_getpid
295 swi #T_SYSCALL
296 pop {r1} /* to avoid overwrite of r0 */
297 pop {r1}
298 pop {r2}
299 pop {r3}
300 pop {lr}
301 bx lr
302
303 .globl sbrk
304 sbrk:
305 push {lr}
306 push {r3}
307 push {r2}
308 push {r1}
309 push {r0}
310 mov r0, #SYS_sbrk
311 swi #T_SYSCALL
312 pop {r1} /* to avoid overwrite of r0 */
313 pop {r1}
314 pop {r2}
315 pop {r3}
316 pop {lr}
317 bx lr
318
319 .globl sleep
320 sleep:
321 push {lr}
322 push {r3}
323 push {r2}
324 push {r1}
325 push {r0}
326 mov r0, #SYS_sleep
327 swi #T_SYSCALL
328 pop {r1} /* to avoid overwrite of r0 */
329 pop {r1}
330 pop {r2}
331 pop {r3}
332 pop {lr}
333 bx lr
334
335 .globl uptime
336 uptime:
337 push {lr}
338 push {r3}
339 push {r2}
340 push {r1}
341 push {r0}
342 mov r0, #SYS_uptime
343 swi #T_SYSCALL
344 pop {r1} /* to avoid overwrite of r0 */
345 pop {r1}
346 pop {r2}
347 pop {r3}
348 pop {lr}
349 bx lr
350
351
352 /*
353 SYSCALL(fork)
354 SYSCALL(exit)
355 SYSCALL(wait)
356 SYSCALL(pipe)
357 SYSCALL(read)
358 SYSCALL(write)
359 SYSCALL(close)
360 SYSCALL(kill)
361 SYSCALL(exec)
362 SYSCALL(open)
363 SYSCALL(mknod)
364 SYSCALL(unlink)
365 SYSCALL(fstat)
366 SYSCALL(link)
367 SYSCALL(mkdir)
368 SYSCALL(chdir)
369 SYSCALL(dup)
370 SYSCALL(getpid)
371 SYSCALL(sbrk)
372 SYSCALL(sleep)
373 SYSCALL(uptime)
374 */