1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-09 06:29:38 +00:00
cc65/libsrc/common/raise.s

55 lines
1.2 KiB
ArmAsm

;
; Ullrich von Bassewitz, 2003-03-14
;
; int __fastcall__ raise (int sig);
;
.import jmpvec
.include "signal.inc"
;----------------------------------------------------------------------------
; int __fastcall__ raise (int sig);
_raise:
cpx #0
bne invalidsig
cmp #SIGCOUNT
bcs invalidsig
; Save the signal number low byte, then setup the function vector
pha
asl a
tax
lda sigtable,x
sta jmpvec+1
lda sigtable+1,x
sta jmpvec+2
; Reset the signal handler to SIG_DFL (I don't like this because it may
; introduce race conditions, but it's the simplest way to satisfy the
; standard).
lda #<___sig_dfl
sta sigtable,x
lda #>___sig_dfl
sta sigtable+1,x
; Restore the signal number and call the function
pla ; Low byte
ldx #0 ; High byte
jsr jmpvec ; Call signal function
; raise() returns zero on success and any other value on failure
lda #0
tax
invalidsig:
rts