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 + +