From e1385c925a57702621b29e3d24c293643c2ca8a8 Mon Sep 17 00:00:00 2001 From: cuz Date: Mon, 25 Nov 2002 12:38:38 +0000 Subject: [PATCH] New functions to swap register variables git-svn-id: svn://svn.cc65.org/cc65/trunk@1629 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/runtime/Makefile | 3 +++ libsrc/runtime/regswap.s | 28 ++++++++++++++++++++++++++++ libsrc/runtime/regswap1.s | 22 ++++++++++++++++++++++ libsrc/runtime/regswap2.s | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 libsrc/runtime/regswap.s create mode 100644 libsrc/runtime/regswap1.s create mode 100644 libsrc/runtime/regswap2.s diff --git a/libsrc/runtime/Makefile b/libsrc/runtime/Makefile index ede6e7512..4e0a20bfa 100644 --- a/libsrc/runtime/Makefile +++ b/libsrc/runtime/Makefile @@ -159,6 +159,9 @@ OBJS = add.o \ pushlysp.o \ pushw.o \ pushwsp.o \ + regswap.o \ + regswap1.o \ + regswap2.o \ return0.o \ return1.o \ rsub.o \ diff --git a/libsrc/runtime/regswap.s b/libsrc/runtime/regswap.s new file mode 100644 index 000000000..28e0441af --- /dev/null +++ b/libsrc/runtime/regswap.s @@ -0,0 +1,28 @@ +; +; Ullrich von Bassewitz, 25.11.2002 +; +; CC65 runtime: Swap x bytes of register variable space +; + + .export regswap + .importzp sp, regbank, tmp1 + +.proc regswap + + sta tmp1 ; Store count +@L1: lda regbank,x ; Get old value + pha ; Save it + lda (sp),y ; Get stack loc + sta regbank,x ; Store new value + pla + sta (sp),y ; Store old value + inx + iny + dec tmp1 + bne @L1 + + rts + +.endproc + + diff --git a/libsrc/runtime/regswap1.s b/libsrc/runtime/regswap1.s new file mode 100644 index 000000000..e2410f96d --- /dev/null +++ b/libsrc/runtime/regswap1.s @@ -0,0 +1,22 @@ +; +; Ullrich von Bassewitz, 25.11.2002 +; +; CC65 runtime: Swap 1 byte of register variable space +; + + .export regswap1 + .importzp sp, regbank + +.proc regswap1 + + lda regbank,x ; Get old value + pha ; Save it + lda (sp),y ; Get stack loc + sta regbank,x ; Store new value + pla + sta (sp),y ; Store old value + rts + +.endproc + + diff --git a/libsrc/runtime/regswap2.s b/libsrc/runtime/regswap2.s new file mode 100644 index 000000000..50eb6c2a4 --- /dev/null +++ b/libsrc/runtime/regswap2.s @@ -0,0 +1,35 @@ +; +; Ullrich von Bassewitz, 25.11.2002 +; +; CC65 runtime: Swap 2 bytes of register variable space +; + + .export regswap2 + .importzp sp, regbank + +.proc regswap2 + +; First byte + + lda regbank,x ; Get old value + pha ; Save it + lda (sp),y ; Get stack loc + sta regbank,x ; Store new value + pla + sta (sp),y ; Store old value + +; Second byte + + iny + lda regbank+1,x ; Get old value + pha ; Save it + lda (sp),y ; Get stack loc + sta regbank+1,x ; Store new value + pla + sta (sp),y ; Store old value + + rts + +.endproc + + -- 2.39.5