                save
                listing off   ; kein Listing über diesen File

;****************************************************************************
;*                                                                          *
;*   AS 1.39 - Datei STDDEF16.INC                                           *
;*   								            *
;*   Sinn : enthält SFR- und Makrodefinitionen für die PIC 16C5x-Familie    *
;* 									    *
;*   letzte Änderungen : 13. 4.1993                                         *
;*                        5. 6.1993 SAVE & RESTORE                          *
;*                                  Prozessorsperre (Idee von Matthias)     *
;*                       11. 9.1993 Meldung nur im 1.Pass                   *
;*									    *
;****************************************************************************

		ifndef  stddef16inc     ; verhindert Mehrfacheinbindung

stddef16inc     equ     1

                if      (MOMCPU<93268)&&(MOMCPU>93271)
		 fatal  "Falscher Prozessortyp eingestellt: nur 16C54..16C57 erlaubt"
		endif

                if      MOMPASS=1
		 message "PIC16C5x-Definitionen (C) 1993 Alfred Arnold"
		endif

;----------------------------------------------------------------------------
; erstmal die Spezialregister :

Indirect	SFR	0		; indirekte Adressierung
PCLo            SFR     2               ; PC Bits 0..7
RTCC            SFR     1               ; Zähler
Status		SFR	3		; Status-Register
FSR		SFR	4		; File-Select-Register
Port_A		SFR	5		; Ports
Port_B		SFR	6
Port_C		SFR	7

;----------------------------------------------------------------------------
; Bits im Statusregister

Flag_C		EQU	0		; Carry
Flag_DC		EQU	1		; Digit-Carry
Flag_Z		EQU	2		; Zero

PA1		EQU	5		; Bank-Select Bit 9
PA2		EQU	6		;  "     "     "  10


;----------------------------------------------------------------------------
; Flags setzen/löschen:

clrc		macro			; Carry löschen
		bcf	Status,Flag_C
		endm

setc		macro			; Carry setzen
		bsf	Status,Flag_C
		endm

clrdc		macro			; Digit-Carry löschen
		bcf	Status,Flag_DC
		endm

setdc		macro			; Digit_Carry setzen
		bsf	Status,Flag_DC
		endm

clrz		macro			; Zero-Flag löschen
		bcf	Status,Flag_Z
		endm

setz		macro			; Zero-Flag setzen
                bsf     Status,Flag_Z
		endm

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; einfachere Skip-Befehle

skpc		macro			; Sprung, falls C=1
		btfss	Status,Flag_C
		endm

skpnc		macro			; Sprung, falls C=0
		btfsc	Status,Flag_C
		endm

skpdc		macro			; Sprung, falls DC=1
		btfss	Status,Flag_DC
		endm

skpndc		macro			; Sprung, falls DC=0
		btfsc	Status,Flag_DC
		endm

skpz		macro			; Sprung, falls Z=1
		btfss	Status,Flag_Z
		endm

skpnz		macro			; Sprung, falls Z=0
		btfsc	Status,Flag_Z
		endm

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; bedingte Sprünge:
; VORSICHT: Mehrbyteanweisungen, nicht skip-bar!!!!

b		macro	target		; unbedingter Sprung
		goto	target
		endm

bc		macro	target		; Sprung, falls C=1
		btfsc	Status,Flag_C
		goto	target
		endm

bnc		macro	target		; Sprung, falls C=0
		btfss	Status,Flag_C
		goto	target
		endm

bdc		macro	target		; Sprung, falls DC=1
		btfsc	Status,Flag_DC
		goto	target
		endm

bndc		macro	target		; Sprung, falls DC=0
		btfss	Status,Flag_DC
		goto	target
		endm

bz		macro	target		; Sprung, falls Z=1
		btfss	Status,Flag_Z
		goto	target
		endm

bnz		macro	target		; Sprung, falls Z=0
		btfsc	Status,Flag_Z
		goto	target
		endm


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Carry-Arithmetik
; wieder VORSICHT!!!

addcf		macro	reg,dest	; Carry zu Register addieren
		btfsc	Status,Flag_C
		incf	reg,dest
		endm

adddcf		macro	reg,dest	; Digit-Carry zu Register addieren
		btfsc	Status,Flag_DC
		incf	reg,dest
		endm

subcf		macro	reg,dest	; Carry von Register subtrahieren
		btfsc	Status,Flag_C
		decf	reg,dest
		endm

subdcf		macro	reg,dest	; Digit-Carry von Register subtrahieren
		btfsc	Status,Flag_DC
		decf	reg,dest
		endm

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; vermischtes...

movfw		macro	reg		; Transfer Register-->W
		movf	reg,0
		endm

negf		macro	reg,dest	; Zweierkomplement
		comf	reg,1
		incf	reg,dest
		endm

tstf		macro	reg		; Flags entspr. Register bilden
		movf	reg,1
		endm

		endif

                restore                 ; wieder erlauben

