                save
;                listing off   ; kein Listing über diesen File

;****************************************************************************
;*                                                                          *
;*   AS 1.41 - Datei REG53x.INC                                             *
;*   								            *
;*   Sinn : enthält Register- und Adreßdefinitionen für H8/53x              *
;* 									    *
;*   letzte Änderungen : 12.11.1995                                         *
;*                                                                          *
;****************************************************************************

		ifndef  reg53xinc       ; verhindert Mehrfacheinbindung

reg53xinc       equ     1

                if      (MOMCPUNAME<>"HD6475328")&&(MOMCPUNAME<>"HD6475348")&&(MOMCPUNAME<>"HD6475368")&&(MOMCPUNAME<>"HD6475388")
                 fatal  "Falscher Prozessortyp eingestellt: nur HD6475328, HD6475348, HD6475368 oder HD6475388 erlaubt!"
		endif


                if      MOMPASS=1
		 message "H8/53x-Definitionen (C) 1994 Alfred Arnold"
		endif

__cpunum        equ     MOMCPU-$6475000 ; ist halt bequemer...

		if	__cpunum=$328	; Peripherie verschiebt sich beim
__regbase	 equ	$ff00		; H8/532 um eine Seite nach oben
                elseif
__regbase	 equ	$fe00
		endif

;----------------------------------------------------------------------------
; Adressen:

		if 	__cpunum=$328
IRAM		 equ	$fb80		; Anfang internes RAM (1 kByte)
IRAMEND		 equ	$ff7f		; Ende internes RAM
                elseif
IRAM		 equ	$f680		; Anfang internes RAM (2 kByte)
IRAMEND		 equ	$fe7f		; Ende internes RAM
		endif

IROM		equ	$0000		; Anfang internes ROM
                if	__cpunum=$368
IROMEND		 equ	$f67f		; Ende internes ROM (62 kByte)
                elseif
IROMEND		 equ	$7fff		; Ende internes ROM (32 kByte)
		endif


;----------------------------------------------------------------------------
; CPU-Konfiguration:

		if	__cpunum=$328
__sysbase	 equ	$fff8
                elseif
__sysbase	 equ	$ff10
		endif

WCR		equ	__sysbase+0		; Wait-state control register
WC0		equ	0		; Anzahl Wartezyklen (rw)
WC1		equ	1
WMS0		equ	2		; Wartemodus (rw)
WMS1		equ	3

RAMCR		equ	__sysbase+1	; RAM control register
RAME		equ	7		; Freigabe internes RAM

MDCR		equ	__sysbase+2	; Mode control register
MDS0		equ	0		; Modusauswahl (r)
MDS1		equ	1
MDS2		equ	2

SBYCR		equ	__sysbase+3	; Software standby control register
SSBY		equ	7		; Sleep/Standby-Moduswahl (rw)

;----------------------------------------------------------------------------
; Interruptsteuerung:

		if	__cpunum=$328
IPRA		 equ	$fff0		; Interrupt-Priorität IRQ1 / IRQ0 (rw)
IPRB		 equ	$fff1		; Interrupt-Priorität FRT2 / FRT1 (rw)
IPRC		 equ	$fff2		; Interrupt-Priorität 8-Bit-Timer / FRT3 (rw)
IPRD		 equ	$fff3		; Interrupt-Priorität AD-Wandler / SCI (rw)
                elseif
IPRA		 equ	$ff00		; Interrupt-Priorität IRQ1 / IRQ0|I.-Timer (rw)
IPRB		 equ	$ff01		; Interrupt-Priorität IRQ5|IRQ4 / IRQ3|IRQ2 (rw)
IPRC		 equ	$ff02		; Interrupt-Priorität FRT2 / FRT1 (rw)
IPRD		 equ	$ff03		; Interrupt-Priorität 8-Bit-Timer / FTR3 (rw)
IPRE		 equ	$ff04		; Interrupt-Priorität SCI2 / SCI1 (rw)
IPRF		 equ	$ff05		; Interrupt-Priorität - / AD-Wandler
                endif

;----------------------------------------------------------------------------
; Data Transfer Controller:

		if	__cpunum=$328
DTEA		 equ	$fff4		; Umschaltung normaler/DTC-Interrupt
DTEB		 equ	$fff5		; (Belegung der Nibbles analog zu IPRx)
DTEC		 equ	$fff6
DTED		 equ	$fff7
                elseif
DTEA		 equ	$ff08
DTEB		 equ	$ff09
DTEC		 equ	$ff0a
DTED		 equ	$ff0b
DTEE		 equ	$ff0c
DTEF		 equ	$ff0d
                endif

;----------------------------------------------------------------------------
; Ports:

__portbase	equ	__regbase+$80

P1DR		equ	__portbase+2	; Datenregister Port 1 (rw/r)
P1DDR		equ	__portbase+0	; Datenrichtungsregister Port 1 (w)
		if	__cpunum=$328
P1CR		 equ	$fffc		; Steuerregister Port 1 (rw)
                elseif
SYSCR1		 equ	$fefc		; Systemsteuerregister 1 (rw)
		endif
BRLE		equ	3		; P1CR/SYSCR1: Bus-Release-Modus
NMIEG		equ	4		;              Flanke, auf die NMI-Eingang triggert
IRQ0E		equ	5		;              Nutzung P15 als IRQ0 ?
IRQ1E		equ	6		;              Nutzung P16 als IRQ1 ?

P2DR		equ	__portbase+3	; Datenregister Port 2 (rw)
P2DDR		equ	__portbase+1	; Datenrichtungsregister Port 2 (w)

P3DR		equ	__portbase+6	; Datenregister Port 3 (rw)
P3DDR		equ	__portbase+4	; Datenrichtungsregister Port 3 (w)

P4DR		equ	__portbase+7	; Datenregister Port 4 (rw)
P4DDR		equ	__portbase+5	; Datenrichtungsregister Port 4 (w)

P5DR		equ	__portbase+10	; Datenregister Port 5 (rw)
P5DDR		equ	__portbase+8	; Datenrichtungsregister Port 5 (w)

P6DR		equ	__portbase+11	; Datenregister Port 6 (rw)
P6DDR		equ	__portbase+9	; Datenrichtungsregister Port 6 (w)
		if	__cpunum<>$328
SYSCR2		 equ	$fefd		; Systemsteuerregister 2 (w)
P9SCI2E		 equ	0		; P92..P94 für SCI2 nutzen ?
P9PWME		 equ	1		; P92..P94 für PWM nutzen ?
P6PWME		 equ	2		; P61..P63 als PWM-Ausgang nutzen ?
IRQ2E		 equ	3		; Nutzung P60 als IRQ2 ?
IRQ3E		 equ	4		; Nutzung P61 als IRQ3 ?
IRQ4E		 equ	5		; Nutzung P62 als IRQ4 ?
IRQ5E		 equ	6		; Nutzung P63 als IRQ5 ?
                endif

P7DR            equ     __portbase+14   ; Datenregister Port 7 (rw)
P7DDR		equ	__portbase+12	; Datenrichtungsregister Port 7 (w)

P8DR		equ	__portbase+15	; Datenregister Port 8 (r)

                if      __cpunum=$388
P9DR             equ    __portbase+18   ; Datenregister Port 9 (r)

PADR             equ    __portbase+19   ; Datenregister Port A (rw)
PADDR            equ    __portbase+17   ; Datenrichtungsregister Port A (w)

PBDR             equ    __portbase+22   ; Datenregister Port B (rw)
PBDDR            equ    __portbase+20   ; Datenrichtungsregister Port B (w)
PBPCR            equ    __portbase+24   ; Pullup-Register Port B (w)

PCDR             equ    __portbase+23   ; Datenregister Port C (rw)
PCDDR            equ    __portbase+21   ; Datenrichtungsregister Port C (w)
PCPCR            equ    __portbase+25   ; Pullup-Register Port C (w)
                elseif  __cpunum=$328
P9DR             equ    __portbase+$7f  ; Datenregister Port 9 (rw)
P9DDR            equ    __portbase+$7e  ; Datenrichtungsregister Port 9 (w)
                elseif
P9DR             equ    __portbase+$ff  ; Datenregister Port 9 (rw)
P9DDR            equ    __portbase+$fe  ; Datenrichtungsregister Port 9 (w)
                endif

;----------------------------------------------------------------------------
; Timer:

__deftimer      macro   Base,NAME
TCR{NAME}	equ	Base+0		; Steuerregister (rw)
TCSR{NAME}	equ	Base+1		; Steuer/Statusregister (rw/r)
FRC{NAME}	equ	Base+2		; Zählerregister (rw, 16 Bit)
OCRA{NAME}	equ	Base+4		; Vergleicher A (rw, 16 Bit)
OCRB{NAME}	equ	Base+6		; Vergleicher B (rw, 16 Bit)
ICR{NAME}	equ	Base+8		; Eingabe-Fangregister (r, 16 Bit)
		endm

		__deftimer __regbase+$90,"1"
		__deftimer __regbase+$a0,"2"
		__deftimer __regbase+$b0,"3"

CKS0		equ	0		; TCRx: Taktquellenwahl (rw)
CKS1		equ	1
OEA		equ	2		;       Vergleichsergebnis OCRA ausgeben ? (rw)
OEB		equ	3		;       Vergleichsergebnis OCRB ausgeben ? (rw)
OVIE		equ	4		;       Interrupt bei FRC-Überlauf auslösen? (rw)
OCIEA		equ	5		;       Interrupt bei Gleichheit mit OCRA auslösen? (rw)
OCIEB		equ	6		;       Interrupt bei Gleichheit mit OCRB auslösen? (rw)
ICIE		equ	7		;       Interrupt bei ICR-Fang auslösen? (rw)

CCLRA		equ	0		; TCSRx: FRC bei Gleichheit mit OCRA rücksetzen ? (rw)
IEDG		equ	1		;	 Eingabefang bei welcher Flanke ? (rw)
OLVLA		equ	2		;	 Polarität für OCRA-Ausgangssignal (rw)
OLVLB		equ	3		;	 Polarität für OCRB-Ausgangssignal (rw)
OVF		equ	4		;	 FRC-Überlauf aufgetreten ? (r)
OCFA		equ	5		;        war FRC=OCRA ? (r)
OCFB		equ	6		;        war FRC=OCRB ? (r)
ICF		equ	7		;        Eingabe-Fang aufgetreten ? (r)

; 8-Bit-Timer:

__tcntbase	equ	__regbase+$d0

TCR4		equ	__tcntbase+0	; Steuerregister (rw)
CKS2		equ	2		; Taktauswahl (Rest identisch zu FRCx)
CCLR0		equ	3		; Rücksetzmodus
CCLR1		equ	4
OVIE_4		equ	5		; Interrupt bei Überlauf auslösen ?
CMIEA		equ	6		; Interrupt bei TCNT=TCORA?
CMIEB		equ	7		; Interrupt bei TCNT=TCORB?

TCSR4		equ	__tcntbase+1	; Steuer/Statusregister (rw/r)
OS0		equ	0		; Auswirkung von TCORA=TCNT auf TMO
OS1		equ	1
OS2		equ	2		; Auswirkung von TCORB=TCNT auf TMO
OS3		equ	3
OVF_4		equ	5		; Überlauf aufgetreten
CMFA		equ	6		; TCNT=TCORA aufgetreten
CMFB		equ	7		; TCNT=TCORB aufgetreten

TCORA		equ	__tcntbase+2	; Zeitkonstante 1 (rw)
TCORB		equ	__tcntbase+3	; Zeitkonstante 2 (rw)
TCNT		equ	__tcntbase+4	; Zählwert (rw)

;----------------------------------------------------------------------------
; Pulsweitenmodulatoren:

__defpwm        macro   Base,NAME
PW{NAME}_TCR	equ	Base		; Steuerregister (rw)
PW{NAME}_DTR	equ	Base+1		; Pulsweitenregister (rw)
PW{NAME}_TCNT	equ	Base+2		; Zählwert (rw)
		endm

		__defpwm __regbase+$c0,"1"
		__defpwm __regbase+$c4,"2"
		__defpwm __regbase+$c8,"3"

OS		equ	6		; PWx_TCR: Logik des Ausgangs
OE		equ	7		;          Ausgang freischalten

;----------------------------------------------------------------------------
; Watchdog:

__wdtbase	equ	__regbase+$ec

WDT_TCSR_R	equ	__wdtbase+0	; Steuer/Statusregister (unterschied-
WDT_TCSR_W	equ	__wdtbase+1	; liche Schreib/Leseadressen)
TME		equ	5		; Timer freigeben
WTIT		equ	6		; Watchdog/Timermodus
WDT_OVF		equ	7		; Watchdog-Überlauf ?

WDT_TCNT	equ	__wdtbase+1	; Zählregister (rw)

		if	__cpunum<>$328
RSTCSR_W	 equ	$ff14		; Reset-Register (unterschiedliche
RSTCSR_R	 equ	$ff15		; Schreib/Leseadressen)
RSTOE		 equ	6		; Watchdog-Reset nach außen geben ?
WRST		 equ	7               ; Reset durch Watchdog ?
                endif

;----------------------------------------------------------------------------
; serielle Schnittstelle:

__defsci        macro   Base,NAME
SMR{NAME}	equ	Base+0		; Modusregister (rw)
BRR{NAME}	equ	Base+1		; Bitratenregister (rw)
SCR{NAME}	equ	Base+2		; Steuerregister (rw)
TDR{NAME}	equ	Base+3		; Sendedaten (rw)
SSR{NAME}	equ	Base+4		; Statusregister (rw)
RDR{NAME}	equ	Base+5		; Empfangsdaten (r)
		endm

		if	__cpunum=$328
		 __defsci __regbase+$d8,""
                elseif
		 __defsci __regbase+$d8,"1"
		 __defsci __regbase+$f0,"2"
		endif

STOP		equ	3		; SMRx: #Stopp-Bits
O_E		equ	4		;       odd/even Parity
PE		equ	5		;       mit/ohne Parität
CHR		equ	6		;       7/8 Datenbits
C_A		equ	7		;       synchron/asynchron

CKE0		equ	0		; SCRx: bei synchroner Kommunikation Takt an SCK ausgeben ?
CKE1		equ	1		;       Takt intern/extern (-->SCK Ein-oder Ausgang) ?
RE		equ	4		;       Empfänger freigeben
TE		equ	5		;       Sender freigeben
RIE		equ	6		;       Empfangs-Interrupt freigeben
TIE		equ	7		;       Sende-Interrupt freigeben

PER		equ	3		; SSRx: Paritäts-Fehler
FER		equ	4		;       ungültiger Rahmen
ORER		equ	5		;       Empfänger-Überlauf
RDRF		equ     6		;       Empfänger voll ?
TDRE		equ	7		;       Sender leer ?

;----------------------------------------------------------------------------
; A/D-Wandler

__adbase	equ	__regbase+$e0

ADDRA		equ	__adbase+0	; Wandelergebnis Kanal A (r, 16Bit)
ADDRB		equ	__adbase+2	; Wandelergebnis Kanal B (r, 16Bit)
ADDRC		equ	__adbase+4	; Wandelergebnis Kanal C (r, 16Bit)
ADDRD		equ	__adbase+6	; Wandelergebnis Kanal D (r, 16Bit)

ADCSR		equ	__adbase+8	; Steuer/Statusregister (rw)
CH0		equ	0		; Kanalauswahl
CH1		equ	1
CH2		equ	2
CKS		equ	3		; Wandelzeit 274/138 Takte
SCAN		equ	4		; Single Channel/Scan-Modus
ADST		equ	5		; Wandler starten/stoppen
ADIE		equ	6		; Interrupt bei Wandelende auslösen ?
ADF		equ	7		; Wandlung abgeschlossen ?

		if	__cpunum<>$328
ADCR		 equ	__adbase+9	; Steuerregister (rw)
TRGE             equ    7               ; externer Trigger ?
		endif

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

		endif

		restore                 ; wieder erlauben
