;Bügelt die lästige C-Inversion bei Subtraktion
;und verwendet die modernen bra-Sprünge, nicht goto
#define skpb skpnc ;Aussetzen wenn Subtraktion Überlauf generierte
#define skpnb skpc ;Aussetzen wenn Subtraktion keinen Überlauf generierte
brb macro lbl ;Springen wenn Subtraktion Überlauf generierte
skpnb
bra lbl
endm
brc macro lbl ;Springen wenn Addition Überlauf generierte
skpnc
bra lbl
endm
brnb macro lbl ;Springen wenn Subtraktion keinen Überlauf generierte
skpb
bra lbl
endm
brnc macro lbl ;Springen wenn Addition keinen Überlauf generierte
skpc
bra lbl
endm
brz macro lbl ;Springen wenn Null
skpnz
bra lbl
endm
brnz macro lbl ;Springen wenn nicht Null
skpz
bra lbl
endm
loop macro reg,lbl ;Schleifenfuß
decfsz reg,f
bra lbl
endm
movlwf macro co,reg ;Konstante in Register laden
movlw co
movwf reg
endm
movlwf2 macro co,reg ;16-Bit-Konstante laden, erst H, dann L
movlwf high(co),reg+1
movlwf low(co),reg
endm
addlwf2 macro co,d ;16-Bit-Konstante + W laden
addlw low(co)
movwf d
movlwf high(co),d+1
skpnc
incf d+1,f
endm
movfwf macro s,d
movfw s
movwf d
endm
movfwf2 macro s,d ;wichtig: Erst H, dann L
movfwf s+1,d+1
movfwf s,d
endm
addwf2 macro d ;w (8 Bit vzl.) auf 16-Bit-Wert addieren
addwf d,f
skpnc
incf d+1,f
endm
addlf2 macro co,d ;d += co: Konstante addieren (via w)
movlw low(co)
addwf d,f
movfw high(co)
addwfc d+1,f
endm
addff2 macro s,d ;d += s
movfw s
addwf d,f
movfw s+1
addwfc d+1,f
endm
subff2 macro s,d ;d -= s
movfw s
subwf d,f
movfw s+1
subwfb d+1,f
endm
clrf2 macro d ;d = 0
clrf d+1
clrf d
endm
| Vorgefundene Kodierung: UTF-8 | 0
|