                save
                listing off   ; kein Listing über diesen File

;****************************************************************************
;*                                                                          *
;*   AS 1.39 - Datei STDDEF62.INC                                           *
;*   								            *
;*   Sinn : enthält SFR- und Makrodefinitionen für die ST62xx-Prozessoren   *
;* 									    *
;*   letzte Änderungen :  7. 8.1993                                         *
;*                       11. 9.1993 Meldung nur im 1.Pass                   *
;*                       21.11.1993 ROMWIN eingebaut                        *
;*                                                                          *
;****************************************************************************

		ifndef  stddef62inc     ; verhindert Mehrfacheinbindung

stddef62inc     equ     1

                if      (MOMCPU<>25104)&&(MOMCPU<>25109)&&(MOMCPU<>25120)&&(MOMCPU<>25125)
		 fatal  "Falscher Prozessortyp eingestellt: nur ST6210, ST6215, ST6220 oder ST6225 erlaubt!"
		endif

                if      MOMPASS=1
		 message "ST62xx-SFR-Definitionen (C) 1993 Alfred Arnold"
		 message "Zielprozessor: ST\{MOMCPU}"
		endif

;----------------------------------------------------------------------------
; erstmal die Sachen, die es überall gibt :

RegX            SFR     80h             ; Registeradressen (die kennt AS aber
RegY            SFR     81h             ; auch schon intern, nur der Voll-
RegV            SFR     82h             ; ständigkeit halber)
RegW            SFR     83h
RegA            SFR     0ffh

RomBase         SFR     40h             ; Basisadresse ROM-Fenster (besser
RDW             SFR     0c9h            ; aber das ASSUME-Feature nutzen)

PA              SFR     0c0h            ; Port A
DDRA            SFR     0c4h
OPTA            SFR     0cch
PB              SFR     0c1h            ; Port B
DDRB            SFR     0c5h
OPTB            SFR     0cdh

IOPT            SFR     0c8h            ; Interrupt-Steuerung

ADDATA          SFR     0d0h            ; A/D-Wandler
ADCTRL          SFR     0d1h

TPSC            SFR     0d2h            ; Timer
TDATA           SFR     0d3h
TSCR            SFR     0d4h

WDOG            SFR     0d8h            ; Watchdog

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Port C nur mit den 28-Pinnern:

                if      (MOMCPU=6215H)||(MOMCPU=6225H)
PC               SFR    0c2h            ; Port C
DDRC             SFR    0c6h
OPTC             SFR    0ceh
                endif

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; hiermit versuche ich, etwas die Leerstellen im Befehlssatz aufzufangen.
; das ist nur ein Angebot an Ihre Bequemlichkeit, niemand zwingt Sie, diese
; Makros zu benutzen, wenn Sie es im Einzelfall kürzer können!

; Addition/Subtraktion mit Carry: erster Operand muß A (Akku) sein!

adc             macro   dst,src
		jrnc    NoCarry
		inc     dst
NoCarry:        add     dst,src         ; Rest normal addieren
		endm

sbc             macro   dst,src
		jrnc    NoCarry
		dec     dst
NoCarry:        sub     dst,src
		endm

; ODER-Verknüpfung:
; arbeitet nach der Regel von De Morgan: A OR B = /((/A) AND (/B))
; verwendet W-Register
; dst muß A (Akku) sein!

or              macro   dst,src
		com     dst
		ld      w,dst
		ld      dst,src
		com     dst
		and     dst,w
		com     dst
		endm

; EXOR-Verknüpfung:
; arbeitet nach dem Prinzip der 4 NAND-Gatter, muß also selber nicht auf
; das OR-Makro zugreifen
; verwendet V- und W-Register
; dst muß A (Akku) sein!

xor             macro   dst,src
		ld      v,dst           ; Op1 retten
		and     dst,src         ; Hilfsergebnis A NAND B bilden
		com     dst
		ld      w,dst           ; in W retten
		ld      dst,v           ; Op1 nochmal holen
		and     dst,w           ; 1. Teilergebnis A NAND W bilden
		com     dst
		ld      v,dst           ; in V retten
		ld      dst,src         ; 2. Teilergebnis B NAND W bilden
		and     dst,w
		com     dst
		and     dst,v
		com     dst
		endif
		endm

; rechts mit Carry rotieren
; ok, das ist brute force, aber mir ist nix besseres eingefallen...
; dst muß Akku (A) sein

rrc             macro   dst
		rept    7
		 rlc    dst
		endm
		endm

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Für diejenigen, die auf einmal den ROMWIN-Befehl vermissen, hier eine
; kleine Überbrückungshilfe:

romwin		macro	adr
		assume	rombase:adr>>6
		endm

;---------------------------------------------------------------------------

		endif

		restore                 ; wieder erlauben

