Blame | Last modification | View Log | Download
;--------------------------------------------------------------------------; setjmp.s;; Copyright (C) 2011-2014, Philipp Klaus Krause;; This library is free software; you can redistribute it and/or modify it; under the terms of the GNU General Public License as published by the; Free Software Foundation; either version 2, or (at your option) any; later version.;; This library is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License; along with this library; see the file COPYING. If not, write to the; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,; MA 02110-1301, USA.;; As a special exception, if you link this library with other files,; some of which are compiled with SDCC, to produce an executable,; this library does not by itself cause the resulting executable to; be covered by the GNU General Public License. This exception does; not however invalidate any other reasons why the executable file; might be covered by the GNU General Public License.;--------------------------------------------------------------------------.area _CODE.globl ___setjmp___setjmp:pop hlpop iypush afpush hl; Store return address.ld 0(iy), lld 1(iy), h; Store stack pointer.xor a, ald l, ald h, aadd hl, spld 2(iy), lld 3(iy), h; Store frame pointer.push ixpop hlld 4(iy), lld 5(iy), h; Return 0.ld l, ald h, aret.globl _longjmp_longjmp:pop afpop iypop de; Ensure that return value is non-zero.ld a, eor a, djr NZ, jumpinc dejump:; Restore frame pointer.ld l, 4(iy)ld h, 5(iy)push hlpop ix; Adjust stack pointer.ld l, 2(iy)ld h, 3(iy)ld sp, hlpop hl; Move return value into hl.ex de, hl; Jump.ld c, 0(iy)ld b, 1(iy)push bcret