35 lines
885 B
ArmAsm
35 lines
885 B
ArmAsm
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||
|
.sect .text
|
||
|
.define __send, __receive, __sendrec
|
||
|
|
||
|
! See ../h/com.h for C definitions
|
||
|
SEND = 1
|
||
|
RECEIVE = 2
|
||
|
BOTH = 3
|
||
|
SYSVEC = 32
|
||
|
|
||
|
!*========================================================================*
|
||
|
! _send and _receive *
|
||
|
!*========================================================================*
|
||
|
! _send(), _receive(), _sendrec() all save bp, but destroy ax, bx, and cx.
|
||
|
.extern __send, __receive, __sendrec
|
||
|
__send: mov cx,SEND ! _send(dest, ptr)
|
||
|
jmp L0
|
||
|
|
||
|
__receive:
|
||
|
mov cx,RECEIVE ! _receive(src, ptr)
|
||
|
jmp L0
|
||
|
|
||
|
__sendrec:
|
||
|
mov cx,BOTH ! _sendrec(srcdest, ptr)
|
||
|
jmp L0
|
||
|
|
||
|
L0: push bp ! save bp
|
||
|
mov bp,sp ! can't index off sp
|
||
|
mov ax,4(bp) ! ax = dest-src
|
||
|
mov bx,6(bp) ! bx = message pointer
|
||
|
int SYSVEC ! trap to the kernel
|
||
|
pop bp ! restore bp
|
||
|
ret ! return
|
||
|
|