;************************************************************** banco x
banco	macro	x
	if x == 0
		bcf	STATUS,RP0
		bcf	STATUS,RP1
	endif
	if x == 1
		bsf	STATUS,RP0
		bcf	STATUS,RP1
	endif
	if x == 2
		bcf	STATUS,RP0
		bsf	STATUS,RP1
	endif
	if x == 3
		bsf	STATUS,RP0
		bsf	STATUS,RP1
	endif
	endm

;************************************************************** pagina
pagina	macro	x
	if x == 0
		bcf	PCLATH,3
		bcf	PCLATH,4
	endif
	if x == 1
		bsf	PCLATH,3
		bcf	PCLATH,4
	endif
	if x == 2
		bcf	PCLATH,3
		bsf	PCLATH,4
	endif
	if x == 3
		bsf	PCLATH,3
		bsf	PCLATH,4
	endif
	endm

;************************************************************** mov
mov	macro	registro,literal
	movlw	literal
	movwf	registro
	endm

;************************************************************** movr
movr	macro	registro1,registro2
	movf	registro2,0
	movwf	registro1
	endm

;************************************ compara y salta si no es igual
cjne	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0
	btfss	STATUS,Z
	goto	direcc
	endm

;************************************ compara y salta si es igual
cje	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0
	btfsc	STATUS,Z
	goto	direcc
	endm

;*************************** decrementa, compara y salta si no es igual
dcjne	macro	registro,dato,direcc
	decf	registro,1
	movlw	dato
	subwf	registro,0
	btfss	STATUS,Z
	goto	direcc
	endm

;*************************** compara y salta si es menor
cjl	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfss	STATUS,C	; ¿C='1'?
	goto	direcc
	endm

;********************* compara y salta si es menor igual
cjle	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfss	STATUS,C	; ¿C='1'?
	goto	direcc
	btfsc	STATUS,Z	; ¿Z='0'?
	goto	direcc
	endm

;************************ compara y salta si no es menor
cjnl	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfsc	STATUS,C	; ¿C='0'?
	goto	direcc
	endm

;********************** compara y salta si es mayor o igual
cjge	macro	registro,dato,direcc
	movlw	dato
	subwf	registro,0	; W = REGISTRO - W
	btfsc	STATUS,C	; ¿C='0'?
	goto	direcc
	endm

;************************************************* esuno
esuno	MACRO	REGISTRO,BIT
	local	no_es_uno_1
no_es_uno_1	
	btfss	REGISTRO,BIT
	goto	no_es_uno_1
	endm

;************************************************* escero
escero	MACRO	REGISTRO,BIT
	local	no_es_cero_1
no_es_cero_1
	btfsc	REGISTRO,BIT
	goto	no_es_cero_1
	endm

;*************************************************	
jmp	MACRO	Direccion
	goto	Direccion
	endm

;*************************************************
jz	MACRO	Direccion
	btfsc	STATUS,Z
	goto	Direccion	
	endm

;*************************************************
jnz	MACRO	Direccion
	btfss	STATUS,Z
	goto	Direccion
	endm

;*************************************************
jc	MACRO	Direccion
	btfsc	STATUS,C
	goto	Direccion
	endm

;*************************************************
jnc	MACRO	Direccion
	btfss	STATUS,C
	goto	Direccion
	endm

;*************************************************
jbs	MACRO	Reg, Bit, Adr	;saltar si bit esta seteado
	btfsc	Reg, Bit
	goto	Adr	
	endm

;*************************************************
jbc	MACRO	Reg, Bit, Adr	;saltar si bit esta aclarado
	btfss	Reg, Bit
	goto	Adr	
	endm

;*************************************************
sbs	macro Reg, Bit		;obviar si bit esta seteado
	btfss	Reg, Bit
	endm

;*************************************************
sbc	macro Reg, Bit		;obviar si bit esta aclarado
	btfsc	Reg, Bit
	endm

;*************************************************
compara	macro	reg1, constante
	movlw	constante
	xorwf	reg1,W
	endm
;*************************************************
;************************************ compara y salta si no es igual
cjner	macro	registro1,registro2,direcc
	movf	registro2,0
	subwf	registro1,0
	btfss	STATUS,Z
	goto	direcc
	endm
;*************************************************	
_mensaje	macro	NombreMensaje,LargoMensaje
	movlw	LOW NombreMensaje
	movwf	MENSAJEADDRESS+0
	movlw	HIGH NombreMensaje
	movwf	MENSAJEADDRESS+1
	movlw	LargoMensaje
	movwf	OFFSETEND		;Leera la cantidad de bytes (del 0 al LargoMensaje)
	;pagesel	_MENSAJESTART
	call	_MENSAJESTART
	endm	


