mirror of
https://github.com/GnoConsortium/gno.git
synced 2025-01-06 19:30:34 +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
|