Mercurial > hg > RemoteEditor > vim7
comparison src/swis.s @ 0:76efa0be13f1
Initial revision
author | atsuki |
---|---|
date | Sat, 10 Nov 2007 15:07:22 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:76efa0be13f1 |
---|---|
1 ; Thomas Leonard | |
2 ; 24/5/98 | |
3 | |
4 ar0 rn 0 | |
5 ar1 rn 1 | |
6 ar2 rn 2 | |
7 ar3 rn 3 | |
8 ar4 rn 4 | |
9 ar5 rn 5 | |
10 ar6 rn 6 | |
11 ar7 rn 7 | |
12 ar10 rn 10 | |
13 ar11 rn 11 | |
14 lk rn 14 | |
15 ar15 rn 15 | |
16 | |
17 AREA DATA | |
18 align 4 | |
19 | |
20 export |r0| | |
21 r0: dcd 0 | |
22 | |
23 export |r1| | |
24 r1: dcd 0 | |
25 | |
26 export |r2| | |
27 r2: dcd 0 | |
28 | |
29 export |r3| | |
30 r3: dcd 0 | |
31 | |
32 export |r4| | |
33 r4: dcd 0 | |
34 | |
35 export |r5| | |
36 r5: dcd 0 | |
37 | |
38 export |r6| | |
39 r6: dcd 0 | |
40 | |
41 export |r7| | |
42 r7: dcd 0 | |
43 | |
44 export |time_of_last_poll| | |
45 time_of_last_poll: dcd 0 | |
46 | |
47 AREA CODE, READONLY | |
48 align 4 | |
49 import |r0| | |
50 export |swi| | |
51 = "swi" | |
52 align 4 | |
53 swi: | |
54 ; r0 = swi number | |
55 stmfd sp!,{ar4-ar10,lk} | |
56 orr ar10,ar0,#1<<17 ;always use the X form | |
57 mov ar0,ar1 | |
58 mov ar1,ar2 | |
59 mov ar2,ar3 | |
60 add ar3,sp,#4*8 | |
61 ldmia ar3,{ar3-ar7} | |
62 swi 0x6f ; OS_CallASWI | |
63 ldr ar10,regs_addr | |
64 stmia ar10,{ar0-ar7} | |
65 ldmvcfd sp!,{ar4-ar10,pc}^ | |
66 ; report the error and quit on Cancel | |
67 mov r1,#0x17 | |
68 adr r2,s_title | |
69 swi 0x400df ; Wimp_ReportError | |
70 cmp r1,#1 ;OK selected? | |
71 ldmeqfd sp!,{ar4-ar10,pc}^ ;yes - try to continue | |
72 swi 0x11 ;no - die (OS_Exit) | |
73 s_title: | |
74 = "Nasty error - Cancel to quit" | |
75 = 0 | |
76 | |
77 align 4 | |
78 export |xswi| | |
79 = "xswi" | |
80 align 4 | |
81 xswi: | |
82 ; r0 = swi number | |
83 stmfd sp!,{ar4-ar10,lk} | |
84 orr ar10,ar0,#1<<17 ;always use the X form | |
85 mov ar0,ar1 | |
86 mov ar1,ar2 | |
87 mov ar2,ar3 | |
88 add ar3,sp,#4*8 | |
89 ldmia ar3,{ar3-ar7} | |
90 swi 0x6f ; OS_CallASWI | |
91 ldr ar10,regs_addr | |
92 stmia ar10,{ar0-ar7} | |
93 mov ar0,#0 | |
94 orr ar0,ar0,ar15 | |
95 ldmfd sp!,{ar4-ar10,pc}^ | |
96 | |
97 regs_addr: | |
98 dcd r0 | |
99 | |
100 ; The Wimp_Poll swis have to be done specially because, | |
101 ; for some reason, r13 sometimes gets corrupted by Wimp_Poll | |
102 ; (eg when running FileFind) | |
103 AREA CODE, READONLY | |
104 align 4 | |
105 import |time_of_last_poll| | |
106 export |wimp_poll| | |
107 = "wimp_poll" | |
108 align 4 | |
109 wimp_poll: | |
110 mov ar3,sp | |
111 swi 0x400c7 ; Wimp_Poll | |
112 mov sp,ar3 | |
113 | |
114 mov ar3,ar0 | |
115 swi 0x42 ; OS_ReadMonotonicTime | |
116 ldr ar2,addr_time | |
117 str ar0,[ar2] | |
118 mov ar0,ar3 | |
119 | |
120 mov ar2,#0 | |
121 wfs ar2 ; Write floating point status. Needed? | |
122 movs pc,lk | |
123 | |
124 align 4 | |
125 export |wimp_pollidle| | |
126 = "wimp_pollidle" | |
127 align 4 | |
128 wimp_pollidle: | |
129 mov ar3,sp | |
130 swi 0x400e1 ; Wimp_PollIdle | |
131 mov sp,ar3 | |
132 | |
133 mov ar3,ar0 | |
134 swi 0x42 ; OS_ReadMonotonicTime | |
135 ldr ar2,addr_time | |
136 str ar0,[ar2] | |
137 mov ar0,ar3 | |
138 | |
139 mov ar2,#0 | |
140 wfs ar2 ; Write floating point status. Needed? | |
141 movs pc,lk | |
142 | |
143 addr_time: dcd time_of_last_poll |