diff src/varargs.inc @ 0:11d4fc797f74

init
author heinrichsweikamp
date Wed, 24 Apr 2013 19:22:45 +0200
parents
children ca4556fb60b9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/varargs.inc	Wed Apr 24 19:22:45 2013 +0200
@@ -0,0 +1,63 @@
+;=============================================================================
+;
+;    File varargs.inc
+;
+;    Utilities to pass multiple arguments in compact code stream.
+;
+;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
+;=============================================================================
+; HISTORY
+;  2011-05-27 : [jDG] Creation.
+;
+
+VARARGS_BEGIN   macro
+        movff   TOSL, TBLPTRL
+        movff   TOSH, TBLPTRH
+        movff   TOSU, TBLPTRU
+        endm
+
+VARARGS_GET8    macro   register
+        tblrd*+
+        movff   TABLAT, register
+        endm
+
+VARARGS_GET16   macro   register
+        tblrd*+
+        movff   TABLAT, register+0
+        tblrd*+
+        movff   TABLAT, register+1
+        endm
+
+VARARGS_GET24   macro   register
+        tblrd*+
+        movff   TABLAT, register+0
+        tblrd*+
+        movff   TABLAT, register+1
+        tblrd*+
+        movff   TABLAT, register+2
+        endm
+
+VARARGS_ALIGN   macro
+        local   no_tblptr_align
+
+        btfss   TBLPTRL,0
+        bra     no_tblptr_align
+        incf    TBLPTRL
+        movlw   0
+        addwfc  TBLPTRH
+        addwfc  TBLPTRU
+no_tblptr_align:
+        endm
+
+VARARGS_END macro
+        ; Compute string length (modulo 256):
+        movf    TOSL,W
+        subwf   TBLPTRL,W
+        
+		; Then 24bit add to return address
+		addwf	TOSL,F
+		movlw	0			            ; Clear WREG, but keep carry
+		addwfc	TOSH,F
+		addwfc	TOSU,F
+		endm
+