mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-12-22 14:30:29 +00:00
178 lines
3.1 KiB
NASM
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
|