From 3afdab19a14296cccdb2fdf1ccdd1b85854256a1 Mon Sep 17 00:00:00 2001 From: nickysn Date: Sun, 26 Apr 2020 13:30:13 +0000 Subject: [PATCH] + implemented fpc_setjmp and fpc_longjmp for the Z80 git-svn-id: branches/z80@45095 - --- rtl/z80/setjump.inc | 40 +++++++++++++++++++++++++++++++++++++++- rtl/z80/setjumph.inc | 3 ++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/rtl/z80/setjump.inc b/rtl/z80/setjump.inc index 272e090e28..2801c8af23 100644 --- a/rtl/z80/setjump.inc +++ b/rtl/z80/setjump.inc @@ -16,11 +16,49 @@ function fpc_setjmp(var S : jmp_buf) : shortint;assembler;[Public, alias : 'FPC_SETJMP'];nostackframe;compilerproc; asm + push ix + ld ix, 0 + add ix,sp + + ld l, (ix+4) { (S) } + ld h, (ix+5) { (S+1) } + + ld iy, 0 + add iy, sp + push iy + pop bc + ld (hl), c + inc hl + ld (hl), b + inc hl + + ld l, 0 + + pop ix end; -procedure fpc_longjmp(var S : jmp_buf;value : shortint);assembler;[Public, alias : 'FPC_LONGJMP'];compilerproc; +procedure fpc_longjmp(var S : jmp_buf;value : shortint);assembler;[Public, alias : 'FPC_LONGJMP'];nostackframe;compilerproc; asm + push ix + ld ix, 0 + add ix, sp + + ld d, (ix+6) { (value) } + + ld l, (ix+4) { (S) } + ld h, (ix+5) { (S+1) } + ld c, (hl) + inc hl + ld b, (hl) + inc hl + push bc + pop iy + ld sp, iy + + ld l, d + + pop ix end; diff --git a/rtl/z80/setjumph.inc b/rtl/z80/setjumph.inc index 4cc02b596e..2e60fae7ac 100644 --- a/rtl/z80/setjumph.inc +++ b/rtl/z80/setjumph.inc @@ -16,7 +16,8 @@ type jmp_buf = packed record - f,a,b,c,e,d,l,h,ixlo,ixhi,iylo,iyhi,splo,sphi,pclo,pchi : byte; + sp: word; +{ f,a,b,c,e,d,l,h,ixlo,ixhi,iylo,iyhi,splo,sphi,pclo,pchi : byte;} end; pjmp_buf = ^jmp_buf;