163 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
# xstormy16 system calls for the simulator
 | 
						|
 | 
						|
#include <syscall.h>
 | 
						|
 | 
						|
	.text
 | 
						|
 | 
						|
	.globl _exit
 | 
						|
_exit:
 | 
						|
	mov r1,#SYS_exit
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size exit,0b-_exit
 | 
						|
 | 
						|
	.globl _open
 | 
						|
_open:
 | 
						|
	mov r1,#SYS_open
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size open,0b-_open
 | 
						|
 | 
						|
	.globl _close
 | 
						|
_close:
 | 
						|
	mov r1,#SYS_close
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size close,0b-_close
 | 
						|
 | 
						|
	.globl _read
 | 
						|
_read:
 | 
						|
	mov r1,#SYS_read
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size read,0b-_read
 | 
						|
 | 
						|
	.globl _write
 | 
						|
_write:
 | 
						|
	mov r1,#SYS_write
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size write,0b-_write
 | 
						|
 | 
						|
	.globl _lseek
 | 
						|
_lseek:
 | 
						|
	mov r1,#SYS_lseek
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size lseek,0b-_lseek
 | 
						|
 | 
						|
	.globl _unlink
 | 
						|
_unlink:
 | 
						|
	mov r1,#SYS_unlink
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size unlink,0b-_unlink
 | 
						|
 | 
						|
	.globl _getpid
 | 
						|
_getpid:
 | 
						|
	mov r1,#SYS_getpid
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size getpid,0b-_getpid
 | 
						|
 | 
						|
	.globl _kill
 | 
						|
_kill:
 | 
						|
	mov r1,#SYS_kill
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size kill,0b-_kill
 | 
						|
 | 
						|
	.globl _fstat
 | 
						|
_fstat:
 | 
						|
	mov r1,#SYS_fstat
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size fstat,0b-_fstat
 | 
						|
 | 
						|
	.globl _chdir
 | 
						|
_chdir:
 | 
						|
	mov r1,#SYS_chdir
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size chdir,0b-_chdir
 | 
						|
 | 
						|
	.globl _stat
 | 
						|
_stat:
 | 
						|
	mov r1,#SYS_stat
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size stat,0b-_stat
 | 
						|
 | 
						|
	.globl _chmod
 | 
						|
_chmod:
 | 
						|
	mov r1,#SYS_chmod
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size chmod,0b-_chmod
 | 
						|
 | 
						|
	.globl _utime
 | 
						|
_utime:
 | 
						|
	mov r1,#SYS_utime
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size utime,0b-_utime
 | 
						|
 | 
						|
	.globl _time
 | 
						|
_time:
 | 
						|
	mov r1,#SYS_time
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size time,0b-_time
 | 
						|
 | 
						|
	.globl _gettimeofday
 | 
						|
_gettimeofday:
 | 
						|
	mov r1,#SYS_gettimeofday
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size gettimeofday,0b-_gettimeofday
 | 
						|
 | 
						|
	.globl _times
 | 
						|
_times:
 | 
						|
	mov r1,#SYS_times
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size times,0b-_times
 | 
						|
 | 
						|
	.globl _link
 | 
						|
_link:
 | 
						|
	mov r1,#SYS_link
 | 
						|
	.hword 0x0001
 | 
						|
	bnz r1,#0,syscall_error
 | 
						|
	ret
 | 
						|
0:	.size link,0b-_link
 | 
						|
 | 
						|
syscall_error:
 | 
						|
# Return value for the syscall is in r2.  Save it here, as
 | 
						|
# _errno will overwrite it with the address of the errno
 | 
						|
# variable.  r0 is the errno.
 | 
						|
	push r2
 | 
						|
	push r0
 | 
						|
	callf __errno
 | 
						|
	pop r0
 | 
						|
	mov.w (r2),r0
 | 
						|
	pop r2
 | 
						|
	ret
 | 
						|
0:	.size syscall_error,0b-syscall_error
 |