Mercurial > vim
view src/swis.s @ 3115:906ea37adb23
Added tag v7-3-328 for changeset 5b53cea62e5d
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 30 Sep 2011 17:46:21 +0200 |
parents | 3fc0f57ecb91 |
children |
line wrap: on
line source
; 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