where : ibrtses embedded

AVR macros

pointer stuff

assumes temp:=reg 16-25

.MACRO CopyZtoX
	mov	XL,ZL
	mov	XH,ZH
.ENDMACRO

.MACRO CopyXtoZ
	mov	ZL,XL
	mov	ZH,XH
.ENDMACRO

.MACRO CopyZtoY
	mov	YL,ZL
	mov	YH,ZH
.ENDMACRO

.MACRO CopyYtoZ
	mov	ZL,YL
	mov	ZH,YH
.ENDMACRO

.MACRO CopyYtoX
	mov	XL,YL
	mov	XH,YH
.ENDMACRO

.MACRO CopyXtoY
	mov	YL,XL
	mov	YH,XH
.ENDMACRO

.MACRO m_SwapReg      ; Swap value in register (Assume: @0=a, @0=b)
        eor @0,@1     ; @0 := @0 xor @1    (@0: a -> ab
        eor @1,@0     ; @1 := @1 xor @0    (@1: b -> bab -> a)
        eor @0,@1     ; @0 := @0 xor @1    (@0  ab -> aba ->b)
.ENDMACRO 

.MACRO m_SwapXY
    eor YL,XL  ; assembler does not allow using m_SwapReg in macro
    eor XL,YL
    eor YL,XL
    eor YH,XH  ; assembler does not allow using m_SwapReg in macro
    eor XH,YH
    eor YH,XH
.ENDMACRO 

The previous two were shown to me by Axel Heider and are a bit faster
than my solutions below, beside using less registers.

.MACRO SwapXY
	push	temp
	mov	temp,YL
	mov	YL,XL
	mov	XL,temp
	mov	temp,YH
	mov	YH,XH
	mov	XH,temp
	pop	temp
.ENDMACRO

.MACRO SwapXZ	
	push	temp
	mov	temp,ZL
	mov	ZL,XL
	mov	XL,temp
	mov	temp,ZH
	mov	ZH,XH
	mov	XH,temp
	pop	temp
.ENDMACRO

.MACRO SwapYZ
	push	temp
	mov	temp,YL
	mov	YL,ZL
	mov	ZL,temp
	mov	temp,YH
	mov	YH,ZH
	mov	ZH,temp
	pop	temp
.ENDMACRO

.MACRO SetZPtr ;(adress)
	ldi	ZL,low(@0)
	ldi	ZH,high(@0)
.ENDMACRO

.MACRO SetXPtr ;(adress)
	ldi	XL,low(@0)
	ldi	XH,high(@0)
.ENDMACRO

.MACRO SetYPtr ;(adress)
	ldi	YL,low(@0)
	ldi	YH,high(@0)
.ENDMACRO

.MACRO PushX
	push	XL
	push	XH
.ENDMACRO

.MACRO PopX
	pop	XH
	pop	XL
.ENDMACRO

.MACRO PushY
	push	YL
	push	YH
.ENDMACRO

.MACRO PopY
	pop	YH
	pop	YL
.ENDMACRO

.MACRO PushZ
	push	ZL
	push	ZH
.ENDMACRO

.MACRO PopZ
	pop	ZH
	pop	ZL
.ENDMACRO

16bit - from App note 202

.MACRO Add16	; Add16 UL,UH,VL,VH      U:=U+V
	add	@0,@2
	adc	@1,@3
.ENDMACRO

.MACRO Addi16	; Addi16 UL,UH,immediate   U:=U+immediate
	subi	@0,low(-@2)
	sbci	@1,high(-@2)
.ENDMACRO

.MACRO Sub16	; Sub16 UL,UH,VL,VH	U:=U-V
	sub	@0,@2
	sbc	@1,@3
.ENDMACRO

.MACRO Subi16	; Subi16 UL,UH,immediate  U:=U-immediate
	subi	@0,low(@2)
	sbci	@1,high(@2)
.ENDMACRO

.MACRO Cp16	; CP16 UL,UH,VL,VH	U-V
	cp	@0,@2
	cpc	@1,@3
.ENDMACRO

.MACRO Cpi16	; CP16 UL,UH,immediate	U-immediate
	cpi	@0,low(@2)
	ldi	temp,high(@2)
	cpc	@1,temp
.ENDMACRO

.MACRO Neg16	; Neg16 UL,UH
	com	@0
	com	@1
	subi	@0,low(-1)
	sbci	@1,high(-1)
.ENDMACRO




Questions ?
Suggestions?
Feedback ?






sponsored links




AVR index
embedded software pages
home

last updated: 1.jan.00



Copyright (99,2001) Ing.Büro R.Tschaggelar