gno/lib/libc/gen/setjmp.asm

178 lines
3.1 KiB
NASM

*
* Modified ORCA/C setjmp() and longjmp() routines to save and restore sigmask
*
* Original code from orcalib 2.0.1 - Copyright Byte Works, Inc.
* changes by Derek Taubert
* June 14, 1995
*
* $Id: setjmp.asm,v 1.1 1997/02/28 05:12:45 gdr Exp $
*
case on
dummy start ; ends up in .root
end
LONGA ON
LONGI ON
setjmp START
TSC
PHD
TCD
CLC
ADC #$0004
STA [$04] ; stack pointer
LDY #$0002
LDA $01,S
STA [$04],Y ; direct page register
LDY #$0004
LDA $00
STA [$04],Y ; LSB program counter
INY
INY
LDA $02
STA [$04],Y ; MSB program counter
; start sigmask changes
pea $0000
pea $0000
jsl sigblock
ldy #$0008
sta [$04],Y ; LSB sigmask
iny
iny
txa
sta [$04],Y ; MSB sigmask
; end sigmask changes
PLD
PHB
PLX
PLY
PLA
PLA
PHY
PHX
PLB
LDA #$0000
RTL
END
LONGA ON
LONGI ON
longjmp START
TSC
TCD
PHB
PHK
PLB
; start sigmask changes
ldy #$000A
lda [$04],Y ; MSB sigmask
pha
dey
dey
lda [$04],Y ; LSB sigmask
pha
jsl sigsetmask
LDY #$0006
lstk LDA [$04],Y
STA sp,Y
DEY
DEY
BPL lstk
LDX $08
BNE argok
INX
; end sigmask changes
argok PLB
LDA >sp
TCS
LDA >pc+$00000002
STA $02,S
LDA >pc
STA $00,S
LDA >dp
TCD
TXA
RTL
sp DC H'AD'
DC H'00'
dp DC H'00'
DC H'00'
pc DC H'19'
DC H'00'
DC H'00'
DC H'04'
END
LONGA ON
LONGI ON
_setjmp START
TSC
PHD
TCD
CLC
ADC #$0004
STA [$04]
LDY #$0002
LDA $01,S
STA [$04],Y
LDY #$0004
LDA $00
STA [$04],Y
INY
INY
LDA $02
STA [$04],Y
PLD
PHB
PLX
PLY
PLA
PLA
PHY
PHX
PLB
LDA #$0000
RTL
END
LONGA ON
LONGI ON
_longjmp START
TSC
TCD
PHB
PHK
PLB
LDX $08
BNE argok
INX
argok LDY #$0006
lstk LDA [$04],Y
STA sp,Y
DEY
DEY
BPL lstk
PLB
LDA >sp
TCS
LDA >pc+$00000002
STA $02,S
LDA >pc
STA $00,S
LDA >dp
TCD
TXA
RTL
sp DC H'AD'
DC H'00'
dp DC H'00'
DC H'00'
pc DC H'19'
DC H'00'
DC H'00'
DC H'04'
END