initial commit
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
#include "setjmp.h"
|
||||
|
||||
int setjmpsp(jmp_buf env, void * sp)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
ldy #0
|
||||
lda sp + 0
|
||||
sta (env), y
|
||||
iny
|
||||
lda sp + 1
|
||||
sta (env), y
|
||||
iny
|
||||
|
||||
lda __ip + 0
|
||||
sta (env), y
|
||||
iny
|
||||
lda __ip + 1
|
||||
sta (env), y
|
||||
iny
|
||||
|
||||
lda __fp + 0
|
||||
sta (env), y
|
||||
iny
|
||||
lda __fp + 1
|
||||
sta (env), y
|
||||
iny
|
||||
|
||||
ldx #0
|
||||
l1:
|
||||
lda __sregs, x
|
||||
sta (env), y
|
||||
iny
|
||||
inx
|
||||
cpx #32
|
||||
bne l1
|
||||
|
||||
tsx
|
||||
txa
|
||||
sta (env), y
|
||||
|
||||
inx
|
||||
l2:
|
||||
iny
|
||||
lda $0100, x
|
||||
sta (env), y
|
||||
inx
|
||||
bne l2
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int setjmp(jmp_buf env)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
ldy #0
|
||||
lda __sp + 0
|
||||
sta (env), y
|
||||
iny
|
||||
lda __sp + 1
|
||||
sta (env), y
|
||||
iny
|
||||
|
||||
lda __ip + 0
|
||||
sta (env), y
|
||||
iny
|
||||
lda __ip + 1
|
||||
sta (env), y
|
||||
iny
|
||||
|
||||
lda __fp + 0
|
||||
sta (env), y
|
||||
iny
|
||||
lda __fp + 1
|
||||
sta (env), y
|
||||
iny
|
||||
|
||||
ldx #0
|
||||
l1:
|
||||
lda __sregs, x
|
||||
sta (env), y
|
||||
iny
|
||||
inx
|
||||
cpx #32
|
||||
bne l1
|
||||
|
||||
tsx
|
||||
txa
|
||||
sta (env), y
|
||||
|
||||
inx
|
||||
l2:
|
||||
iny
|
||||
lda $0100, x
|
||||
sta (env), y
|
||||
inx
|
||||
bne l2
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#pragma native(setjmp)
|
||||
|
||||
void longjmp(jmp_buf env, int value)
|
||||
{
|
||||
__asm
|
||||
{
|
||||
ldy #0
|
||||
lda (env), y
|
||||
sta __sp + 0
|
||||
iny
|
||||
lda (env), y
|
||||
sta __sp + 1
|
||||
iny
|
||||
|
||||
lda (env), y
|
||||
sta __ip + 0
|
||||
iny
|
||||
lda (env), y
|
||||
sta __ip + 1
|
||||
iny
|
||||
|
||||
lda (env), y
|
||||
sta __fp + 0
|
||||
iny
|
||||
lda (env), y
|
||||
sta __fp + 1
|
||||
iny
|
||||
|
||||
ldx #0
|
||||
l1:
|
||||
lda (env), y
|
||||
sta __sregs, x
|
||||
iny
|
||||
inx
|
||||
cpx #32
|
||||
bne l1
|
||||
|
||||
lda (env), y
|
||||
tax
|
||||
txs
|
||||
|
||||
inx
|
||||
l2:
|
||||
iny
|
||||
lda (env), y
|
||||
sta $0100, x
|
||||
inx
|
||||
bne l2
|
||||
|
||||
lda value
|
||||
sta __accu
|
||||
lda value + 1
|
||||
sta __accu + 1
|
||||
}
|
||||
}
|
||||
|
||||
#pragma native(longjmp)
|
||||
Reference in New Issue
Block a user