; Macros for automatic banks handling ; Written by Wojciech M. Zabolotny (wzab@ise.pw.edu.pl) ; Please consider the code below to be in public domain ; ; If anybody knows how to make it compilable under GPASM ; or how to fix GPASM to compile it, I'd be glad to hear ; about it... ; ; HOW DOES IT WORK? ; ; 1. The xb_cur variable holds the current bank number ; 2. The xbank_inv informs that current bank number is unknown ; (it should be used at the entry point of each subroutine ; or at the labels beeing the targets of "goto") ; 3. The xmovwf, xincf and so on are the versions of standard ; instructions which perform at the begining the check of ; current bank and if necessary change the RP0,RP1 bits ; ; TO DO ; a. Not all x... instructions are implemented ; b. The bank management for FSR/INDF access is not handled ; (up to that time I didn't need it ;-) ) xb_cur set 0 ;Macro invalidating the bank setting xbank_inv macro xb_cur set 255 ENDM xbank_set macro xb_new IF xb_cur == 255 xb_cur set xb_new ^ 3 ENDIF IF (xb_new & 1) && !(xb_cur & 1) bsf STATUS,RP0 ENDIF IF (xb_cur & 1) && !(xb_new & 1) bcf STATUS,RP0 ENDIF IF (xb_new & 2) && !(xb_cur & 2) bsf STATUS,RP1 ENDIF IF (xb_cur & 2) && !(xb_new & 2) bcf STATUS,RP1 ENDIF xb_cur set xb_new ENDM xbank_vset macro xvar xbank_set (xvar/0x80) ENDM xmovwf macro xvar xbank_vset xvar movwf xvar endm xmovfw macro xvar xbank_vset xvar movfw xvar endm xclrf macro xvar xbank_vset xvar clrf xvar endm xbsf macro xvar,xbit xbank_vset xvar bsf xvar,xbit endm xincf macro xvar,xdest xbank_vset xvar incf xvar,xdest endm xbcf macro xvar,xbit xbank_vset xvar bcf xvar,xbit endm xbtfsc macro xvar,xbit xbank_vset xvar btfsc xvar,xbit endm xbtfss macro xvar,xbit xbank_vset xvar btfss xvar,xbit endm xrrf macro xvar,xdest xbank_vset xvar rrf xvar,xdest endm xxorwf macro xvar,xdest xbank_vset xvar xorwf xvar,xdest endm xandwf macro xvar,xdest xbank_vset xvar andwf xvar,xdest endm xsubwf macro xvar,xdest xbank_vset xvar subwf xvar,xdest endm