⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdos.s

📁 Newlib 嵌入式 C库 标准实现代码
💻 S
📖 第 1 页 / 共 5 页
字号:
/*######################################################################## RDOS operating system# Copyright (C) 1988-2006, Leif Ekblad## This library is free software; you can redistribute it and/or modify# it under the terms of the GNU Lesser General Public License as published# by the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.## This library is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public# License along with this library; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## The author of this program may be contacted at leif@rdos.net## rdos.S                                                                # GCC based interface to RDOS kernel                                    ###########################################################################*/#include "user.def"    .macro UserGate nr     .byte 0x9A    .long \nr    .word 2    .endm /*############################################################################   Name       : RdosSwapShort##   Purpose....: Byte reverse a short int##   Returns....: Result###########################################################################*/    .global RdosSwapShort    RdosSwapShort:	pushl %ebp	movl %esp,%ebp	movw 8(%ebp),%ax	xchgb %ah,%al	leave	ret/*############################################################################   Name       : RdosSwapLong##   Purpose....: Byte reverse a long int##   Returns....: Result###########################################################################*/    .global RdosSwapLong    RdosSwapLong:	pushl %ebp	movl %esp,%ebp	movl 8(%ebp),%eax	xchgb %ah,%al	roll $16,%eax	xchgb %ah,%al	leave	ret/*############################################################################   Name       : LocalToNetworkLong##   Purpose....: Convert a local long to network format##   Returns....: Network format###########################################################################*/    .global LocalToNetworkLong    LocalToNetworkLong:	pushl %ebp	movl %esp,%ebp	movl 8(%ebp),%eax	xchgb %ah,%al	roll $16,%eax	xchgb %ah,%al	leave	ret/*############################################################################   Name       : NetworkToLocalLong##   Purpose....: Convert a network long to local format##   Returns....: Local format###########################################################################*/    .global NetworkToLocalLong    NetworkToLocalLong:	pushl %ebp	movl %esp,%ebp	movl 8(%ebp),%eax	xchgb %ah,%al	roll $16,%eax	xchgb %ah,%al	leave	ret/*############################################################################   Name       : RdosGetThreadHandle##   Purpose....: Get current thread handle##   Returns....: Thread ID###########################################################################*/    .global RdosGetThreadHandle    RdosGetThreadHandle:	pushl %ebp	movl %esp,%ebp	UserGate get_thread_nr	movzx %ax,%eax	leave	ret/*############################################################################   Name       : RdosGetThreadState##   Purpose....: Get thread state##   Parameters.: Thread ##                State buffer###########################################################################*/    .global RdosGetThreadState    RdosGetThreadState:	pushl %ebp	movl %esp,%ebp	push %edi	movl 8(%ebp),%eax	movl 12(%ebp),%edx	UserGate get_thread_state_nr	jc rgtsFail	    movl $1,%eax    jmp rgtsDone    rgtsFail:    xorl %eax,%eaxrgtsDone:	popl %edi	leave	ret/*############################################################################   Name       : RdosSuspendThread##   Purpose....: Suspend thread##   Parameters.: Thread ############################################################################*/    .global RdosSuspendThread    RdosSuspendThread:	pushl %ebp	movl %esp,%ebp	movl 8(%ebp),%eax	UserGate suspend_thread_nr	jc rsfFail    movl $1,%eax    jmp rsfDone    rsfFail:    xorl %eax,%eaxrsfDone:    leave    ret    /*############################################################################   Name       : RdosExec##   Purpose....: Execute a program##   Parameters.: Program#                Commandline###########################################################################*/    .global RdosExec    RdosExec:	pushl %ebp	movl %esp,%ebp	pushl %esi	pushl %edi	movl 8(%ebp),%esi	movl 12(%ebp),%edi	UserGate load_exe_nr	UserGate get_exit_code_nr	popl %edi	popl %esi	leave	ret    /*############################################################################   Name       : RdosSpawn##   Purpose....: Create new process and run a program##   Parameters.: Program#                Commandline#                StartDir###########################################################################*/    .global RdosSpawn    RdosSpawn:	pushl %ebp	movl %esp,%ebp	pushl %fs	pushl %ebx	pushl %edx	pushl %esi	pushl %edi    movw %ds,%dx    movw %dx,%fs    xorl %edx,%edx	movl 8(%ebp),%esi	movl 12(%ebp),%edi	movl 16(%ebp),%ebx	UserGate spawn_exe_nr	jc rsFail	    movzx %dx,%eax    jmp rsDone    rsFail:    xorl %eax,%eaxrsDone:	popl %edi	popl %esi	popl %edx	popl %ebx	popw %fs	leave	ret    /*############################################################################   Name       : RdosCpuReset##   Purpose....: Cpu reset###########################################################################*/    .global RdosCpuReset    RdosCpuReset:	pushl %ebp	movl %esp,%ebp	UserGate cpu_reset_nr	leave	ret    /*############################################################################   Name       : RdosGetVersion##   Purpose....: Get RDOS version##   Parameters.: &major#                &minor#                &release###########################################################################*/    .global RdosGetVersion    RdosGetVersion:	pushl %ebp	movl %esp,%ebp	pushl %eax	pushl %ecx	pushl %edx	pushl %edi	UserGate get_version_nr    movzx %dx,%edx	movl 8(%ebp),%edi	movl %edx,(%edi)    movzx %ax,%eax	movl 12(%ebp),%edi	movl %eax,(%edi)    movzx %cx,%eax	movl 16(%ebp),%edi	movl %eax,(%edi)	popl %edi	popl %edx	popl %ecx	popl %eax	leave	ret    /*############################################################################   Name       : RdosAllocateMem##   Purpose....: Allocate memory##   Parameters.: Bytes to allocate##   Returns....: Memory pointer###########################################################################*/    .global RdosAllocateMem    RdosAllocateMem:	pushl %ebp	movl %esp,%ebp	pushl %edx	movl 8(%ebp),%eax	UserGate allocate_app_mem_nr	movl %edx,%eax	popl %edx	leave	ret    /*############################################################################   Name       : RdosFreeMem##   Purpose....: Free memory##   Parameters.: Memory pointer###########################################################################*/    .global RdosFreeMemRdosFreeMem:	pushl %ebp	movl %esp,%ebp	pushl %edx	movl 8(%ebp),%edx	UserGate free_app_mem_nr	popl %edx	leave	ret	    /*############################################################################   Name       : RdosAppDebug##   Purpose....: App debug###########################################################################*/    .global RdosAppDebug    RdosAppDebug:	pushl %ebp	movl %esp,%ebp	UserGate app_debug_nr	leave	ret		    /*############################################################################   Name       : RdosWaitMilli##   Purpose....: Wait a number of milliseconds##   Parameters.: Milliseconds to wait###########################################################################*/    .global RdosWaitMilli    RdosWaitMilli:	pushl %ebp	movl %esp,%ebp	pushl %eax	movl 8(%ebp),%eax	UserGate wait_milli_nr	popl %eax	leave	ret			    /*############################################################################   Name       : RdosCreateSection##   Purpose....: Create section##   Returns....: Section handle###########################################################################*/    .global RdosCreateSection    RdosCreateSection:	pushl %ebp	movl %esp,%ebp	pushl %ebx		UserGate create_user_section_nr	movzx %bx,%eax	popl %ebx	leave	ret			    /*############################################################################   Name       : RdosDeleteSection##   Purpose....: Delete section##   Parameters.: Section handle###########################################################################*/    .global RdosDeleteSection    RdosDeleteSection:	pushl %ebp	movl %esp,%ebp	pushl %ebx	movw 8(%ebp),%bx	UserGate delete_user_section_nr	popl %ebx	leave	ret				    /*############################################################################   Name       : RdosEnterSection##   Purpose....: Enter section##   Parameters.: Section handle###########################################################################*/    .global RdosEnterSection    RdosEnterSection:	pushl %ebp	movl %esp,%ebp	pushl %ebx	movw 8(%ebp),%bx	UserGate enter_user_section_nr	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosLeaveSection##   Purpose....: Leave section##   Parameters.: Section handle###########################################################################*/    .global RdosLeaveSection    RdosLeaveSection:	pushl %ebp	movl %esp,%ebp	pushl %ebx	movw 8(%ebp),%bx	UserGate leave_user_section_nr	popl %ebx	leave	ret				    /*############################################################################   Name       : RdosCreateWait##   Purpose....: Create wait object##   Returns....: Wait handle###########################################################################*/    .global RdosCreateWait    RdosCreateWait:	pushl %ebp	movl %esp,%ebp	pushl %ebx	UserGate create_wait_nr	movzx %bx,%eax	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosCloseWait##   Purpose....: Close wait##   Parameters.: Wait handle###########################################################################*/    .global RdosCloseWait    RdosCloseWait:	pushl %ebp	movl %esp,%ebp	pushl %ebx	movw 8(%ebp),%bx	UserGate close_wait_nr	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosCheckWait##   Purpose....: Check wait state##   Parameters.: Wait handle##   Returns....: Signalled ID or 0###########################################################################*/    .global RdosCheckWait    RdosCheckWait:	pushl %ebp	movl %esp,%ebp	pushl %ebx	pushl %ecx	movw 8(%ebp),%bx	UserGate is_wait_idle_nr    movl %ecx,%eax    popl %ecx	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosWaitForever##   Purpose....: Wait forever##   Parameters.: Wait handle##   Returns....: Signalled ID or 0###########################################################################*/    .global RdosWaitForever    RdosWaitForever:	pushl %ebp	movl %esp,%ebp	pushl %ebx	pushl %ecx	movw 8(%ebp),%bx	UserGate wait_no_timeout_nr	jc rwfFail    movl %ecx,%eax    jmp rwfDonerwfFail:    xorl %eax,%eaxrwfDone:    popl %ecx	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosWaitTimeout##   Purpose....: Wait with timeout##   Parameters.: Wait handle#                Timeout in ms##   Returns....: Signalled ID or 0###########################################################################*/    .global RdosWaitTimeout    RdosWaitTimeout:	pushl %ebp	movl %esp,%ebp	pushl %ebx	pushl %ecx	pushl %edx	movl 12(%ebp),%eax	movl $1193,%edx	mull %edx	pushl %edx	pushl %eax    UserGate get_system_time_nr    popl %ebx    addl %ebx,%eax    popl %ebx    adcl %ebx,%edx	movw 8(%ebp),%bx	UserGate wait_timeout_nr	jc rwtFail    movl %ecx,%eax    jmp rwtDonerwtFail:    xorl %eax,%eaxrwtDone:    popl %edx    popl %ecx	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosStopWait##   Purpose....: Stop wait##   Parameters.: Wait handle###########################################################################*/    .global RdosStopWait    RdosStopWait:	pushl %ebp	movl %esp,%ebp	pushl %ebx	movw 8(%ebp),%bx	UserGate stop_wait_nr	popl %ebx	leave	ret					    /*############################################################################   Name       : RdosRemoveWait##   Purpose....: Remove wait object from wait handle##   Parameters.: Wait handle#                ID###########################################################################*/    .global RdosRemoveWait    RdosRemoveWait:	pushl %ebp	movl %esp,%ebp	pushl %ebx	pushl %ecx	movw 8(%ebp),%bx	movl 12(%ebp),%ecx	UserGate remove_wait_nr    popl %ecx

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -