diff options
author | Bram Moolenaar <Bram@vim.org> | 2004-06-13 20:20:40 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2004-06-13 20:20:40 +0000 |
commit | 071d4279d6ab81b7187b48f3a0fc61e587b6db6c (patch) | |
tree | 221cbe3c40e043163c06f61c52a7ba2eb41e12ce /src/swis.s | |
parent | b4210b3bc14e2918f153a7307530fbe6eba659e1 (diff) | |
download | vim-071d4279d6ab81b7187b48f3a0fc61e587b6db6c.zip |
updated for version 7.0001
Diffstat (limited to 'src/swis.s')
-rw-r--r-- | src/swis.s | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/src/swis.s b/src/swis.s new file mode 100644 index 000000000..562747adb --- /dev/null +++ b/src/swis.s @@ -0,0 +1,143 @@ +; Thomas Leonard +; 24/5/98 + +ar0 rn 0 +ar1 rn 1 +ar2 rn 2 +ar3 rn 3 +ar4 rn 4 +ar5 rn 5 +ar6 rn 6 +ar7 rn 7 +ar10 rn 10 +ar11 rn 11 +lk rn 14 +ar15 rn 15 + + AREA DATA + align 4 + + export |r0| +r0: dcd 0 + + export |r1| +r1: dcd 0 + + export |r2| +r2: dcd 0 + + export |r3| +r3: dcd 0 + + export |r4| +r4: dcd 0 + + export |r5| +r5: dcd 0 + + export |r6| +r6: dcd 0 + + export |r7| +r7: dcd 0 + + export |time_of_last_poll| +time_of_last_poll: dcd 0 + + AREA CODE, READONLY + align 4 + import |r0| + export |swi| + = "swi" + align 4 +swi: + ; r0 = swi number + stmfd sp!,{ar4-ar10,lk} + orr ar10,ar0,#1<<17 ;always use the X form + mov ar0,ar1 + mov ar1,ar2 + mov ar2,ar3 + add ar3,sp,#4*8 + ldmia ar3,{ar3-ar7} + swi 0x6f ; OS_CallASWI + ldr ar10,regs_addr + stmia ar10,{ar0-ar7} + ldmvcfd sp!,{ar4-ar10,pc}^ + ; report the error and quit on Cancel + mov r1,#0x17 + adr r2,s_title + swi 0x400df ; Wimp_ReportError + cmp r1,#1 ;OK selected? + ldmeqfd sp!,{ar4-ar10,pc}^ ;yes - try to continue + swi 0x11 ;no - die (OS_Exit) +s_title: + = "Nasty error - Cancel to quit" + = 0 + + align 4 + export |xswi| + = "xswi" + align 4 +xswi: + ; r0 = swi number + stmfd sp!,{ar4-ar10,lk} + orr ar10,ar0,#1<<17 ;always use the X form + mov ar0,ar1 + mov ar1,ar2 + mov ar2,ar3 + add ar3,sp,#4*8 + ldmia ar3,{ar3-ar7} + swi 0x6f ; OS_CallASWI + ldr ar10,regs_addr + stmia ar10,{ar0-ar7} + mov ar0,#0 + orr ar0,ar0,ar15 + ldmfd sp!,{ar4-ar10,pc}^ + +regs_addr: + dcd r0 + + ; The Wimp_Poll swis have to be done specially because, + ; for some reason, r13 sometimes gets corrupted by Wimp_Poll + ; (eg when running FileFind) + AREA CODE, READONLY + align 4 + import |time_of_last_poll| + export |wimp_poll| + = "wimp_poll" + align 4 +wimp_poll: + mov ar3,sp + swi 0x400c7 ; Wimp_Poll + mov sp,ar3 + + mov ar3,ar0 + swi 0x42 ; OS_ReadMonotonicTime + ldr ar2,addr_time + str ar0,[ar2] + mov ar0,ar3 + + mov ar2,#0 + wfs ar2 ; Write floating point status. Needed? + movs pc,lk + + align 4 + export |wimp_pollidle| + = "wimp_pollidle" + align 4 +wimp_pollidle: + mov ar3,sp + swi 0x400e1 ; Wimp_PollIdle + mov sp,ar3 + + mov ar3,ar0 + swi 0x42 ; OS_ReadMonotonicTime + ldr ar2,addr_time + str ar0,[ar2] + mov ar0,ar3 + + mov ar2,#0 + wfs ar2 ; Write floating point status. Needed? + movs pc,lk + +addr_time: dcd time_of_last_poll |