aboutsummaryrefslogtreecommitdiffstats
path: root/include/reg166.inc
diff options
context:
space:
mode:
Diffstat (limited to 'include/reg166.inc')
-rw-r--r--include/reg166.inc780
1 files changed, 780 insertions, 0 deletions
diff --git a/include/reg166.inc b/include/reg166.inc
new file mode 100644
index 0000000..e15cb73
--- /dev/null
+++ b/include/reg166.inc
@@ -0,0 +1,780 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei REG166.INC *
+;* *
+;* Sinn : enthält SFR-, Makro- und Adreßdefinitionen für 80C166/167 *
+;* OK, der Name fällt aus dem Rahmen, aber STDDEF16.INC war schon *
+;* belegt... *
+;* *
+;* letzte Änderungen : 23. 6.1994 *
+;* 27. 6.1994 Makros *
+;* 28. 6.1994 Bitadressen *
+;* 9. 7.1994 Interrupt-Register-Korrektur *
+;* 10. 7.1994 80C167-Register *
+;* 10.12.1994 Korrekturen/Erweiterungen 80C166 *
+;* (Hinweis von A. Kipper/A.Bergmann) *
+;* *
+;****************************************************************************
+
+ ifndef reg166inc ; verhindert Mehrfacheinbindung
+
+reg166inc equ 1
+
+ if (MOMCPU<>8438118)&&(MOMCPU<>8438119)
+ fatal "Falscher Prozessortyp eingestellt: nur 80C166 oder 80C167 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "80C166/167-SFR-Definitionen (C) 1994 Alfred Arnold"
+ message "binde \{MOMCPU}-SFRs ein"
+ endif
+
+; damit's etwas kürzer wird:
+
+DefIntBits macro BASE,adr,{NoExpand} ; Interruptregister+Bits darin def.
+tmpstr166 set "BASE"
+{tmpstr166}IC equ adr
+{tmpstr166}_GLVL bit {tmpstr166}IC.0 ; Gruppenpriorität
+{tmpstr166}_ILVL bit {tmpstr166}IC.2 ; Interruptpriorität
+{tmpstr166}IE bit {tmpstr166}IC.6 ; Interruptfreigabe
+{tmpstr166}IR bit {tmpstr166}IC.7 ; Interruptanzeige
+ endm
+
+;----------------------------------------------------------------------------
+; Spezialregister:
+; Bitadressen nur für bitadressierbare Register !
+; bei Bitfeldern nur Startbit !
+
+ if MOMCPU=80C167H
+SYSCON equ 0ff12h ; Systemkonfiguration
+WRCFG bit SYSCON.7 ; /WRL und /WRH statt /WR und /BHE
+ROMS1 bit SYSCON.12 ; Lage internes ROM
+ elseif
+SYSCON equ 0ff0ch
+MCTC bit SYSCON.0 ; Speicherzykluslänge
+RWDC bit SYSCON.4 ; Schreib/Lese-Verzögerung
+MTTC bit SYSCON.5 ; Tri-State-Zeit
+BTYP bit SYSCON.6 ; Status der EBC-Pins
+RDYEN bit SYSCON.12 ; /READY freigeben
+ endif
+CLKEN bit SYSCON.8 ; CLKOUT freigeben
+BYTDIS bit SYSCON.9 ; /BHE freigeben
+ROMEN bit SYSCON.10 ; internes ROM freigeben
+SGTDIS bit SYSCON.11 ; Adreßraum auf 64K beschränken
+STKSZ bit SYSCON.13 ; Maximalgröße Stack
+
+ if MOMCPU=80C167H
+RP0H equ 0f108h ; Systemanlaufregister (nur Lesen)
+CSSEL bit RP0H.1 ; Anzahl CS-Leitungen
+SALSEL bit RP0H.3 ; Anzahl Adreßleitungen ab A16
+ endif
+
+PSW equ 0ff10h ; Flagregister
+N bit PSW.0 ; negatives Ergebnis ?
+C bit PSW.1 ; Carry ?
+V bit PSW.2 ; Overflow ?
+Z bit PSW.3 ; Ergebnis Null ?
+E bit PSW.4 ; Tabellenende ?
+MULIP bit PSW.5 ; Multiplikation/Division unterbrochen ?
+USR0 bit PSW.6 ; benutzerdefiniert
+IEN bit PSW.11 ; Interrupts freigeben
+ILVL bit PSW.12 ; mom. bediente Interruptebene
+
+TFR equ 0ffach ; Trap Flagregister
+ILLBUS bit TFR.0 ; externer Bus benutzt, aber nicht konfiguriert
+ILLINA bit TFR.1 ; Codezugriff auf ungerade Adresse
+ILLOPA bit TFR.2 ; Wortzugriff auf ungerade Adresse
+PRTFLT bit TFR.3 ; Schutzverletzung
+UNDOPC bit TFR.7 ; undefinierter Maschinenbefehl
+STKUF bit TFR.13 ; Stack-Unterlauf
+STKOF bit TFR.14 ; Stack-Überlauf
+NMI bit TFR.15 ; nicht maskierbarer Interrupt
+ if MOMCPU=80C167H
+EXICON equ 0f1c0h ; Steuerung externer Interrupt-Controller
+EXI0ES bit EXICON.0 ; Flankensteuerung Interrupt 0
+EXI1ES bit EXICON.2 ; Flankensteuerung Interrupt 1
+EXI2ES bit EXICON.4 ; Flankensteuerung Interrupt 2
+EXI3ES bit EXICON.6 ; Flankensteuerung Interrupt 3
+EXI4ES bit EXICON.8 ; Flankensteuerung Interrupt 4
+EXI5ES bit EXICON.10 ; Flankensteuerung Interrupt 5
+EXI6ES bit EXICON.12 ; Flankensteuerung Interrupt 6
+EXI7ES bit EXICON.14 ; Flankensteuerung Interrupt 7
+ endif
+
+DPP0 equ 0fe00h ; Pagingregister
+DPP1 equ 0fe02h
+DPP2 equ 0fe04h
+DPP3 equ 0fe06h
+
+CSP equ 0fe08h ; Bits 16.. Programmzähler
+
+MDH equ 0fe0ch ; Multiplizier/Dividierregister
+MDL equ 0fe0eh
+MDC equ 0ff0eh ; Steuerung Multiplizierer/Dividierer
+MDRIU bit MDC.4 ; Multiplizierer in Benutzung
+
+CP equ 0fe10h ; Registerkontextzeiger
+
+SP equ 0fe12h ; Stackpointer
+STKOV equ 0fe14h ; obere Grenze Stackpointer
+STKUN equ 0fe16h ; untere Grenze Stackpointer
+
+ZEROS equ 0ff1ch ; konstant Nullen
+ONES equ 0ff1eh ; konstant Einsen
+
+;----------------------------------------------------------------------------
+; Speicher-Interface
+
+ if MOMCPU=80C167H
+ADDRSEL1 equ 0fe18h ; Adreßdekoder Register 1..4
+ADDRSEL2 equ 0fe1ah
+ADDRSEL3 equ 0fe1ch
+ADDRSEL4 equ 0fe1eh
+
+BUSCON0 equ 0ff0ch ; Buskonfiguration Register 0..4
+MCTC0 bit BUSCON0.0 ; Speicherzykluslänge
+RWDC0 bit BUSCON0.4 ; Schreib/Leseverzögerung
+MTTC0 bit BUSCON0.5 ; Tri-State-Zeit
+BTYP0 bit BUSCON0.6 ; Status EBC-Pins
+ALECTL0 bit BUSCON0.9 ; ALE Verlängerung
+BUSACT0 bit BUSCON0.10 ; Bus aktiv-Steuerbit
+RDYEN0 bit BUSCON0.12 ; /READY benutzen
+BUSCON1 equ 0ff14h
+MCTC1 bit BUSCON1.0 ; Speicherzykluslänge
+RWDC1 bit BUSCON1.4 ; Schreib/Leseverzögerung
+MTTC1 bit BUSCON1.5 ; Tri-State-Zeit
+BTYP1 bit BUSCON1.6 ; Status EBC-Pins
+ALECTL1 bit BUSCON1.9 ; ALE Verlängerung
+BUSACT1 bit BUSCON1.10 ; Bus aktiv-Steuerbit
+RDYEN1 bit BUSCON1.12 ; /READY benutzen
+CSREN1 bit BUSCON1.14 ; Arbeitsweise CS-Pins
+CSWEN1 bit BUSCON1.15
+BUSCON2 equ 0ff16h
+MCTC2 bit BUSCON2.0 ; s.o.
+RWDC2 bit BUSCON2.4
+MTTC2 bit BUSCON2.5
+BTYP2 bit BUSCON2.6
+ALECTL2 bit BUSCON2.9
+BUSACT2 bit BUSCON2.10
+RDYEN2 bit BUSCON2.12
+CSREN2 bit BUSCON2.14
+CSWEN2 bit BUSCON2.15
+BUSCON3 equ 0ff18h
+MCTC3 bit BUSCON3.0
+RWDC3 bit BUSCON3.4
+MTTC3 bit BUSCON3.5
+BTYP3 bit BUSCON3.6
+ALECTL3 bit BUSCON3.9
+BUSACT3 bit BUSCON3.10
+RDYEN3 bit BUSCON3.12
+CSREN3 bit BUSCON3.14
+CSWEN3 bit BUSCON3.15
+BUSCON4 equ 0ff1ah
+MCTC4 bit BUSCON4.0
+RWDC4 bit BUSCON4.4
+MTTC4 bit BUSCON4.5
+BTYP4 bit BUSCON4.6
+ALECTL4 bit BUSCON4.9
+BUSACT4 bit BUSCON4.10
+RDYEN4 bit BUSCON4.12
+CSREN4 bit BUSCON4.14
+CSWEN4 bit BUSCON4.15
+
+ DefIntBits XP0,0f186h ; Interruptsteuerung Peripheriegerät 0
+ DefIntBits XP1,0f18eh ; Interruptsteuerung Peripheriegerät 1
+ DefIntBits XP2,0f196h ; Interruptsteuerung Peripheriegerät 2
+ DefIntBits XP3,0f19eh ; Interruptsteuerung Peripheriegerät 3
+ endif
+
+;----------------------------------------------------------------------------
+; Ports:
+
+ if MOMCPU=80C167H
+P0L equ 0ff00h ; Port 0 Datenregister
+P0H equ 0ff02h
+DP0L equ 0f100h ; Port 0 Datenrichtungsregister
+DP0H equ 0f102h
+ elseif
+P0 equ 0ff00h
+DP0 equ 0ff02h
+ endif
+
+ if MOMCPU=80C167H
+P1L equ 0ff04h ; Port 1 Datenregister
+P1H equ 0ff06h
+DP1L equ 0f104h ; Port 1 Datenrichtungsregister
+DP1H equ 0f106h
+ elseif
+P1 equ 0ff04h
+DP1 equ 0ff06h
+ endif
+
+P2 equ 0ffc0h ; Port 2 Datenregister
+DP2 equ 0ffc2h ; Port 2 Datenrichtungsregister
+ if MOMCPU=80C167H
+ODP2 equ 0f1c2h ; Port 2 Open-Drain-Einstellung
+ endif
+
+P3 equ 0ffc4h ; Port 3 Datenregister
+DP3 equ 0ffc6h ; Port 3 Datenrichtungsregister
+ if MOMCPU=80C167H
+ODP3 equ 0f1c6h ; Port 3 Open-Drain-Einstellung
+ endif
+
+ if MOMCPU=80C167H
+P4 equ 0ffc8h ; Port 4 Datenregister
+DP4 equ 0ffcah ; Port 4 Datenrichtungsregister
+ elseif
+P4 equ 0ff08h
+DP4 equ 0ff0ah
+ endif
+
+P5 equ 0ffa2h ; Port 5 Datenregister (nur Eingang)
+
+ if MOMCPU=80C167H
+P6 equ 0ffcch ; Port 6 Datenregister
+DP6 equ 0ffceh ; Port 6 Datenrichtungsregister
+ODP6 equ 0f1ceh ; Port 6 Open-Drain-Einstellung
+
+P7 equ 0ffd0h ; Port 7 Datenregister
+DP7 equ 0ffd2h ; Port 7 Datenrichtungsregister
+ODP7 equ 0f1d2h ; Port 7 Open-Drain-Einstellung
+
+P8 equ 0ffd4h ; Port 8 Datenregister
+DP8 equ 0ffd6h ; Port 8 Datenrichtungsregister
+ODP8 equ 0f1d6h ; Port 8 Open-Drain-Einstellung
+ endif
+
+;----------------------------------------------------------------------------
+; Timer:
+
+T0 equ 0fe50h ; CAPCOM Timer 0
+T0REL equ 0fe54h ; Timer 0 Reload Register
+T01CON equ 0ff50h ; Steuerregister Timer 0+1
+T0I bit T01CON.0 ; Timer 0 Eingangssignalwahl
+T0M bit T01CON.3 ; Timer 0 Modus
+T0R bit T01CON.6 ; Timer 0 starten/stoppen
+T1I bit T01CON.8 ; Timer 1 Eingangssignalwahl
+T1M bit T01CON.11 ; Timer 1 Modus
+T1R bit T01CON.14 ; Timer 1 starten/stoppen
+ DefIntBits T0,0ff9ch ; Timer 0 Interruptsteuerung
+
+T1 equ 0fe52h ; CAPCOM Timer 1
+T1REL equ 0fe56h ; Timer 1 Reload Register
+ DefIntBits T1,0ff9eh ; Timer 1 Interruptsteuerung
+
+T2 equ 0fe40h ; Timer 2
+T2CON equ 0ff40h ; Steuerregister Timer 2
+T2I bit T2CON.0 ; Eingangssignal Timer 2
+T2M bit T2CON.3 ; Modus Timer 2
+T2R bit T2CON.6 ; Timer 2 starten/stoppen
+T2UD bit T2CON.7 ; Timer 2 Zählrichtung
+ if MOMCPU=80C167H
+T2UDE bit T2CON.8 ; Timer 2 externe Zählrichtungswahl
+ endif
+ DefIntBits T2,0ff60h ; Timer 2 Interruptsteuerung
+
+T3 equ 0fe42h ; Timer 3
+T3CON equ 0ff42h ; Steuerregister Timer 3
+T3I bit T3CON.0 ; Eingangssignal Timer 3
+T3M bit T3CON.3 ; Modus Timer 3
+T3R bit T3CON.6 ; Timer 3 starten/stoppen
+T3UD bit T3CON.7 ; Timer 3 Zählrichtung
+T3UDE bit T3CON.8 ; Timer 3 externe Zählrichtungswahl
+T3OE bit T3CON.9 ; Timer 3 Ausgang freischalten
+T3OTL bit T3CON.10 ; Timer 3 übergelaufen ?
+ DefIntBits T3,0ff62h ; Timer 3 Interruptsteuerung
+
+T4 equ 0fe44h ; Timer 4
+T4CON equ 0ff44h ; Steuerregister Timer 4
+T4I bit T4CON.0 ; Eingangssignal Timer 4
+T4M bit T4CON.3 ; Modus Timer 4
+T4R bit T4CON.6 ; Timer 4 starten/stoppen
+T4UD bit T4CON.7 ; Timer 4 Zählrichtung
+ if MOMCPU=80C167H
+T4UDE bit T4CON.8 ; Timer 4 externe Zählrichtungswahl
+ endif
+ DefIntBits T4,0ff64h ; Timer 4 Interruptsteuerung
+
+T5 equ 0fe46h ; Timer 5
+T5CON equ 0ff46h ; Steuerregister Timer 5
+T5I bit T5CON.0 ; Eingangssignal Timer 5
+T5M bit T5CON.3 ; Modus Timer 5
+T5R bit T5CON.6 ; Timer 5 starten/stoppen
+T5UD bit T5CON.7 ; Timer 5 Zählrichtung
+ if MOMCPU=80C167H
+T5UDE bit T5CON.8 ; Timer 5 externe Zählrichtungswahl
+ endif
+CI bit T5CON.12 ; CAPREL Eingangswahl
+T5CLR bit T5CON.14 ; Timer 5 bei Fang löschen ?
+T5SC bit T5CON.15 ; Timer 5 Fangen freigeben
+ DefIntBits T5,0ff66h ; Timer 5 Interruptsteuerung
+
+T6 equ 0fe48h ; Timer 6
+T6CON equ 0ff48h ; Steuerregister Timer 6
+T6I bit T6CON.0 ; Eingangssignal Timer 6
+ if MOMCPU=80C167H
+T6M bit T6CON.3 ; Modus Timer 6
+ endif
+T6R bit T6CON.6 ; Timer 6 starten/stoppen
+T6UD bit T6CON.7 ; Timer 6 Zählrichtung
+ if MOMCPU=80C167H
+T6UDE bit T6CON.8 ; Timer 6 externe Zählrichtungswahl
+ endif
+T6OE bit T6CON.9 ; Timer 6 Ausgang freischalten
+T6OTL bit T6CON.10 ; Timer 6 übergelaufen ?
+T6SR bit T6CON.15 ; Timer 6 Reload
+ DefIntBits T6,0ff68h ; Timer 6 Interruptsteuerung
+
+ if MOMCPU=80C167H
+T7 equ 0f050h ; Timer 7
+T7REL equ 0f054h ; Timer 7 Reload Register
+T78CON equ 0ff20h ; Steuerregister Timer 7+8
+ DefIntBits T7,0f17ah ; Timer 0 Interruptsteuerung
+
+T8 equ 0f052h ; CAPCOM Timer 8
+T8REL equ 0f056h ; Timer 8 Reload Register
+ DefIntBits T8,0f17ch ; Timer 8 Interruptsteuerung
+ endif
+
+;-----------------------------------------------------------------------
+; Capture/Compare-Einheit:
+
+CAPREL equ 0fe4ah ; Capture/Reload-Register
+CC0 equ 0fe80h ; CAPCOM Register
+CC1 equ 0fe82h
+CC2 equ 0fe84h
+CC3 equ 0fe86h
+CC4 equ 0fe88h
+CC5 equ 0fe8ah
+CC6 equ 0fe8ch
+CC7 equ 0fe8eh
+CC8 equ 0fe90h
+CC9 equ 0fe92h
+CC10 equ 0fe94h
+CC11 equ 0fe96h
+CC12 equ 0fe98h
+CC13 equ 0fe9ah
+CC14 equ 0fe9ch
+CC15 equ 0fe9eh
+ if MOMCPU=80C167H
+CC16 equ 0fe60h ; zus. CAPCOM Register
+CC17 equ 0fe62h
+CC18 equ 0fe64h
+CC19 equ 0fe66h
+CC20 equ 0fe68h
+CC21 equ 0fe6ah
+CC22 equ 0fe6ch
+CC23 equ 0fe6eh
+CC24 equ 0fe70h
+CC25 equ 0fe72h
+CC26 equ 0fe74h
+CC27 equ 0fe76h
+CC28 equ 0fe78h
+CC29 equ 0fe7ah
+CC30 equ 0fe7ch
+CC31 equ 0fe7eh
+ endif
+
+CCM0 equ 0ff52h ; CAPCOM Modusregister
+CCMOD0 bit CCM0.0 ; CC0 Modusauswahl
+ACC0 bit CCM0.3 ; CC0 Timer 0/1 zuordnen
+CCMOD1 bit CCM0.4 ; CC1 Modusauswahl
+ACC1 bit CCM0.7 ; CC1 Timer 0/1 zuordnen
+CCMOD2 bit CCM0.8 ; CC2 Modusauswahl
+ACC2 bit CCM0.11 ; CC2 Timer 0/1 zuordnen
+CCMOD3 bit CCM0.12 ; CC3 Modusauswahl
+ACC3 bit CCM0.15 ; CC3 Timer 0/1 zuordnen
+
+CCM1 equ 0ff54h
+CCMOD4 bit CCM1.0 ; CC4 Modusauswahl
+ACC4 bit CCM1.3 ; CC4 Timer 0/1 zuordnen
+CCMOD5 bit CCM1.4 ; CC5 Modusauswahl
+ACC5 bit CCM1.7 ; CC5 Timer 0/1 zuordnen
+CCMOD6 bit CCM1.8 ; CC6 Modusauswahl
+ACC6 bit CCM1.11 ; CC6 Timer 0/1 zuordnen
+CCMOD7 bit CCM1.12 ; CC7 Modusauswahl
+ACC7 bit CCM1.15 ; CC7 Timer 0/1 zuordnen
+
+CCM2 equ 0ff56h
+CCMOD8 bit CCM2.0 ; CC8 Modusauswahl
+ACC8 bit CCM2.3 ; CC8 Timer 0/1 zuordnen
+CCMOD9 bit CCM2.4 ; CC9 Modusauswahl
+ACC9 bit CCM2.7 ; CC9 Timer 0/1 zuordnen
+CCMOD10 bit CCM2.8 ; CC10 Modusauswahl
+ACC10 bit CCM2.11 ; CC10 Timer 0/1 zuordnen
+CCMOD11 bit CCM2.12 ; CC11 Modusauswahl
+ACC11 bit CCM2.15 ; CC11 Timer 0/1 zuordnen
+
+CCM3 equ 0ff58h
+CCMOD12 bit CCM3.0 ; CC12 Modusauswahl
+ACC12 bit CCM3.3 ; CC12 Timer 0/1 zuordnen
+CCMOD13 bit CCM3.4 ; CC13 Modusauswahl
+ACC13 bit CCM3.7 ; CC13 Timer 0/1 zuordnen
+CCMOD14 bit CCM3.8 ; CC14 Modusauswahl
+ACC14 bit CCM3.11 ; CC14 Timer 0/1 zuordnen
+CCMOD15 bit CCM3.12 ; CC15 Modusauswahl
+ACC15 bit CCM3.15 ; CC15 Timer 0/1 zuordnen
+
+CCM4 equ 0ff22h
+CCMOD16 bit CCM4.0 ; CC16 Modusauswahl
+ACC16 bit CCM4.3 ; CC16 Timer 0/1 zuordnen
+CCMOD17 bit CCM4.4 ; CC17 Modusauswahl
+ACC17 bit CCM4.7 ; CC17 Timer 0/1 zuordnen
+CCMOD18 bit CCM4.8 ; CC18 Modusauswahl
+ACC18 bit CCM4.11 ; CC18 Timer 0/1 zuordnen
+CCMOD19 bit CCM4.12 ; CC19 Modusauswahl
+ACC19 bit CCM4.15 ; CC19 Timer 0/1 zuordnen
+
+CCM5 equ 0ff24h
+CCMOD20 bit CCM5.0 ; CC20 Modusauswahl
+ACC20 bit CCM5.3 ; CC20 Timer 0/1 zuordnen
+CCMOD21 bit CCM5.4 ; CC21 Modusauswahl
+ACC21 bit CCM5.7 ; CC21 Timer 0/1 zuordnen
+CCMOD22 bit CCM5.8 ; CC22 Modusauswahl
+ACC22 bit CCM5.11 ; CC22 Timer 0/1 zuordnen
+CCMOD23 bit CCM5.12 ; CC23 Modusauswahl
+ACC23 bit CCM5.15 ; CC23 Timer 0/1 zuordnen
+
+CCM6 equ 0ff26h
+CCMOD24 bit CCM6.0 ; CC24 Modusauswahl
+ACC24 bit CCM6.3 ; CC24 Timer 0/1 zuordnen
+CCMOD25 bit CCM6.4 ; CC25 Modusauswahl
+ACC25 bit CCM6.7 ; CC25 Timer 0/1 zuordnen
+CCMOD26 bit CCM6.8 ; CC26 Modusauswahl
+ACC26 bit CCM6.11 ; CC26 Timer 0/1 zuordnen
+CCMOD27 bit CCM6.12 ; CC27 Modusauswahl
+ACC27 bit CCM6.15 ; CC27 Timer 0/1 zuordnen
+
+CCM7 equ 0ff28h
+CCMOD28 bit CCM7.0 ; CC28 Modusauswahl
+ACC28 bit CCM7.3 ; CC28 Timer 0/1 zuordnen
+CCMOD29 bit CCM7.4 ; CC29 Modusauswahl
+ACC29 bit CCM7.7 ; CC29 Timer 0/1 zuordnen
+CCMOD30 bit CCM7.8 ; CC30 Modusauswahl
+ACC30 bit CCM7.11 ; CC30 Timer 0/1 zuordnen
+CCMOD31 bit CCM7.12 ; CC31 Modusauswahl
+ACC31 bit CCM7.15 ; CC31 Timer 0/1 zuordnen
+
+ DefIntBits CR,0ff6ah ; CAPREL Interruptsteuerregister
+
+ DefIntBits CC0,0ff78h ; Interruptsteuerung CAPCOM-Kanäle
+ DefIntBits CC1,0ff7ah
+ DefIntBits CC2,0ff7ch
+ DefIntBits CC3,0ff7eh
+ DefIntBits CC4,0ff80h
+ DefIntBits CC5,0ff82h
+ DefIntBits CC6,0ff84h
+ DefIntBits CC7,0ff86h
+ DefIntBits CC8,0ff88h
+ DefIntBits CC9,0ff8ah
+ DefIntBits CC10,0ff8ch
+ DefIntBits CC11,0ff8eh
+ DefIntBits CC12,0ff90h
+ DefIntBits CC13,0ff92h
+ DefIntBits CC14,0ff94h
+ DefIntBits CC15,0ff96h
+ if MOMCPU=80C167H
+ DefIntBits CC16,0f160h ; Interruptsteuerung zus. CAPCOM-Kanäle
+ DefIntBits CC17,0f162h
+ DefIntBits CC18,0f164h
+ DefIntBits CC19,0f166h
+ DefIntBits CC20,0f168h
+ DefIntBits CC21,0f16ah
+ DefIntBits CC22,0f16ch
+ DefIntBits CC23,0f16eh
+ DefIntBits CC24,0f170h
+ DefIntBits CC25,0f172h
+ DefIntBits CC26,0f174h
+ DefIntBits CC27,0f176h
+ DefIntBits CC28,0f178h
+ DefIntBits CC29,0f184h
+ DefIntBits CC30,0f18ch
+ DefIntBits CC31,0f194h
+ endif
+
+PECC0 equ 0fec0h ; PEC Kanalsteuerregister
+PECC1 equ 0fec2h
+PECC2 equ 0fec4h
+PECC3 equ 0fec6h
+PECC4 equ 0fec8h
+PECC5 equ 0fecah
+PECC6 equ 0fecch
+PECC7 equ 0feceh
+
+SRCP0 equ 0fde0h ; hoffentlich gilt das auch so für
+SRCP1 equ 0fde4h ; den 167er, ich habe momentan näm-
+SRCP2 equ 0fde8h ; lich nicht das Datenbuch zur Hand...
+SRCP3 equ 0fdech
+SRCP4 equ 0fdf0h
+SRCP5 equ 0fdf4h
+SRCP6 equ 0fdf8h
+SRCP7 equ 0fdfch
+DSTP0 equ 0fde2h
+DSTP1 equ 0fde6h
+DSTP2 equ 0fdeah
+DSTP3 equ 0fdeeh
+DSTP4 equ 0fdf2h
+DSTP5 equ 0fdf6h
+DSTP6 equ 0fdfah
+DSTP7 equ 0fdfeh
+
+;----------------------------------------------------------------------------
+; Pulsweitenmodulator:
+
+ if MOMCPU=80C167H
+PP0 equ 0f038h ; PWM Periode 0
+PT0 equ 0f030h ; PWM Zähler 0
+PW0 equ 0fe30h ; PWM Pulsweite 0
+PP1 equ 0f03ah ; PWM Periode 1
+PT1 equ 0f032h ; PWM Zähler 1
+PW1 equ 0fe30h ; PWM Pulsweite 1
+PP2 equ 0f03ch ; PWM Periode 2
+PT2 equ 0f034h ; PWM Zähler 2
+PW2 equ 0fe30h ; PWM Pulsweite 2
+PP3 equ 0f03eh ; PWM Periode 3
+PT3 equ 0f036h ; PWM Zähler 3
+PW3 equ 0fe30h ; PWM Pulsweite 3
+PWMCON0 equ 0ff30h ; PWM Seuerregister 0
+PTR0 bit PWMCON0.0 ; PT0 laufen lassen
+PTR1 bit PWMCON0.1 ; PT1 laufen lassen
+PTR2 bit PWMCON0.2 ; PT2 laufen lassen
+PTR3 bit PWMCON0.3 ; PT3 laufen lassen
+PTI0 bit PWMCON0.4 ; PT0 Eingangswahl
+PTI1 bit PWMCON0.5 ; PT1 Eingangswahl
+PTI2 bit PWMCON0.6 ; PT2 Eingangswahl
+PTI3 bit PWMCON0.7 ; PT3 Eingangswahl
+PIE0 bit PWMCON0.8 ; PT0 Interupts freigeben
+PIE1 bit PWMCON0.9 ; PT1 Interupts freigeben
+PIE2 bit PWMCON0.10 ; PT2 Interupts freigeben
+PIE3 bit PWMCON0.11 ; PT3 Interupts freigeben
+PIR0 bit PWMCON0.12 ; PT0 Interupt aufgetreten
+PIR1 bit PWMCON0.13 ; PT1 Interupt aufgetreten
+PIR2 bit PWMCON0.14 ; PT2 Interupt aufgetreten
+PIR3 bit PWMCON0.15 ; PT3 Interupt aufgetreten
+PWMCON1 equ 0ff32h ; PWM Seuerregister 1
+PEN0 bit PWMCON1.0 ; PT0 Ausgang freigeben
+PEN1 bit PWMCON1.1 ; PT1 Ausgang freigeben
+PEN2 bit PWMCON1.2 ; PT2 Ausgang freigeben
+PEN3 bit PWMCON1.3 ; PT3 Ausgang freigeben
+PM0 bit PWMCON1.4 ; PT0 Modus
+PM1 bit PWMCON1.5 ; PT1 Modus
+PM2 bit PWMCON1.6 ; PT2 Modus
+PM3 bit PWMCON1.7 ; PT3 Modus
+PB01 bit PWMCON1.12 ; PT0&1 Burst-Modus
+PS2 bit PWMCON1.14 ; PT2 Einzelimpulsmodus
+PS3 bit PWMCON1.15 ; PT3 Einzelimpulsmodus
+ DefIntBits PWM,0f17eh ; PWM Interruptsteuerung
+ endif
+
+;----------------------------------------------------------------------------
+; A/D-Wandler:
+
+ADDAT equ 0fea0h ; A/D-Wandler Ergebnis
+ if MOMCPU=80C167H
+ADDAT2 equ 0f0a0h ; A/D-Wandler Ergebnis 2
+ endif
+ DefIntBits ADC,0ff98h ; A/D-Wandler Interruptsteuerung für Wandlungsende
+ DefIntBits ADE,0ff9ah ; A/D-Wandler Interruptsteuerung für Fehler
+ADCON equ 0ffa0h ; A/D-Wandler Steuerregister
+ADCH bit ADCON.0 ; A/D-Wandler Kanalwahl
+ADM bit ADCON.4 ; A/D-Wandler Modus
+ADST bit ADCON.7 ; A/D-Wandlung starten
+ADBSY bit ADCON.8 ; A/D-Wandler beschäftigt
+ if MOMCPU=80C167H
+ADWR bit ADCON.9 ; A/D-Wandler erst wieder starten, wenn gelesen
+ADCIN bit ADCON.10 ; A/D-Wandler Kanalinjektion (??...)
+ADCRQ bit ADCON.11 ; A/D-Wandler Kanalinjektion angefordert
+ endif
+
+;----------------------------------------------------------------------------
+; Watchdog:
+
+WDT equ 0feaeh ; Watchdog-Zähler
+WDTCON equ 0ffaeh ; Watchdog Steuerregister
+WDTIN bit WDTCON.0 ; Watchdog Eingangsfrequenz
+WDTR bit WDTCON.1 ; Reset durch Watchdog ?
+WDTREL bit WDTCON.8 ; Reload-Wert Watchdog
+
+;----------------------------------------------------------------------------
+; Serielles:
+
+S0TBUF equ 0feb0h ; SIO0 Senderegister
+S0RBUF equ 0feb2h ; SIO0 Empfangsregister
+S0BG equ 0feb4h ; SIO0 Baudrateneinstellung
+ DefIntBits S0T,0ff6ch ; Interruptsteuerung Sendeteil SIO0
+ DefIntBits S0R,0ff6eh ; Interruptsteuerung Empfangsteil SIO0
+ DefIntBits S0E,0ff70h ; Interruptsteuerung Fehlererkennung SIO0
+S0CON equ 0ffb0h ; Steuerregister SIO0
+S0M bit S0CON.0 ; SIO0 Modus
+S0STP bit S0CON.3 ; SIO0 Anzahl Stopbits
+S0REN bit S0CON.4 ; SIO0 Empfänger freigeben
+S0PEN bit S0CON.5 ; SIO0 mit Parität
+S0FEN bit S0CON.6 ; SIO0 mit Rahmenprüfung
+S0OEN bit S0CON.7 ; SIO0 mit Überlaufprüfung
+S0PE bit S0CON.8 ; SIO0 Paritätsfehler
+S0FE bit S0CON.9 ; SIO0 Rahmenfehler
+S0OE bit S0CON.10 ; SIO0 Überlauffehler
+ if MOMCPU=80C167H
+S0ODD bit S0CON.12 ; SIO0 Odd Parity
+S0BRS bit S0CON.13 ; SIO0 Baudratenfaktor
+ endif
+S0LB bit S0CON.14 ; SIO0 Rückkopplung
+S0R bit S0CON.15 ; SIO0 Baudratengenerator freigeben
+
+ if MOMCPU=80C167H
+SSCTB equ 0f0b0h ; SSC Senderegister
+SSCRB equ 0f0b2h ; SSC Empfangsregister
+SSCBR equ 0f0b4h ; SSC Baudrateneinstellung
+ DefIntBits SSCT,0ff72h ; Interruptsteuerung Sendeteil SSC
+ DefIntBits SSCR,0ff74h ; Interruptsteuerung Empfangsteil SSC
+ DefIntBits SSCE,0ff76h ; Interruptsteuerung Fehlererkennung SSC
+SSCCON equ 0ffb2h ; Steuerregister SSC
+SSCBM bit SSCCON.0 ; Wortbreite
+SSCBC bit SSCCON.0 ; Bitzahl
+SSCHB bit SSCCON.4 ; Startbitsteuerung
+SSCPH bit SSCCON.5 ; Taktphase
+SSCP0 bit SSCCON.6 ; Taktpolarität
+SSCTEN bit SSCCON.8 ; Sendefehler freigeben
+SSCTE bit SSCCON.8 ; Sendefehler aufgetreten ?
+SSCREN bit SSCCON.9 ; Empfangsfehler freigeben
+SSCRE bit SSCCON.9 ; Empfangsfehler aufgetreten ?
+SSCPEN bit SSCCON.10 ; Phasenfehler freigeben
+SSCPE bit SSCCON.10 ; Phasenfehler aufgetreten ?
+SSCBEN bit SSCCON.11 ; Baudratenfehler freigeben
+SSCBE bit SSCCON.11 ; Baudratenfehler freigegeben ?
+SSCBSY bit SSCCON.12 ; SSC beschäftigt ?
+SSCMS bit SSCCON.14 ; SSC als Master betreiben
+SSCEN bit SSCCON.15 ; SSC freigeben
+ elseif
+S1TBUF equ 0feb8h ; SIO1 Senderegister
+S1RBUF equ 0febah ; SIO1 Empfangsregister
+S1BG equ 0febch ; SIO1 Baudrateneinstellung
+ DefIntBits S1T,0ff72h ; Interruptsteuerung Sendeteil SIO1
+ DefIntBits S1R,0ff74h ; Interruptsteuerung Empfangsteil SIO1
+ DefIntBits S1E,0ff76h ; Interruptsteuerung Fehlererkennung SIO1
+S1CON equ 0ffb8h ; Steuerregister SIO1
+S1M bit S1CON.0 ; SIO1 Modus
+S1STP bit S1CON.3 ; SIO1 Anzahl Stopbits
+S1REN bit S1CON.4 ; SIO1 Empfänger freigeben
+S1PEN bit S1CON.5 ; SIO1 mit Parität
+S1FEN bit S1CON.6 ; SIO1 mit Rahmenprüfung
+S1OEN bit S1CON.7 ; SIO1 mit Überlaufprüfung
+S1PE bit S1CON.8 ; SIO1 Paritätsfehler
+S1FE bit S1CON.9 ; SIO1 Rahmenfehler
+S1OE bit S1CON.10 ; SIO1 Überlauffehler
+S1LB bit S1CON.14 ; SIO1 Rückkopplung
+S1R bit S1CON.15 ; SIO1 Baudratengenerator freigeben
+ endif
+
+;----------------------------------------------------------------------------
+; Vektoren/Sonderadressen
+
+RESET equ 000h ; Reseteinsprung
+NMITRAP equ 008h ; NMI-Einsprung
+STOTRAP equ 010h ; Einsprung Stacküberlauf
+STUTRAP equ 018h ; Einsprung Stackunterlauf
+BTRAP equ 028h ; undef. Opcode, Protection Fault,
+ ; unerlaubter Wortzugriff, ungültige Instruktionsadresse,
+ ; ungültiger Buszugriff
+CC0INT equ 040h ; Interrupteinsprünge CAPCOM
+CC1INT equ 044h
+CC2INT equ 048h
+CC3INT equ 04ch
+CC4INT equ 050h
+CC5INT equ 054h
+CC6INT equ 058h
+CC7INT equ 05ch
+CC8INT equ 060h
+CC9INT equ 064h
+CC10INT equ 068h
+CC11INT equ 06ch
+CC12INT equ 070h
+CC13INT equ 074h
+CC14INT equ 078h
+CC15INT equ 07ch
+T0INT equ 080h ; Interrupteinsprung Timer 0
+T1INT equ 084h ; Interrupteinsprung Timer 1
+T2INT equ 088h ; Interrupteinsprung Timer 2
+T3INT equ 08ch ; Interrupteinsprung Timer 3
+T4INT equ 090h ; Interrupteinsprung Timer 4
+T5INT equ 094h ; Interrupteinsprung Timer 5
+T6INT equ 098h ; Interrupteinsprung Timer 6
+CRINT equ 09ch ; Interrupteinsprung CAPREL
+ADCINT equ 0a0h ; Interrupteinsprung A/D-Wandlung fertig
+ADEINT equ 0a4h ; Interrupteinsprung A/D-Wandler-Überlauf
+S0TINT equ 0a8h ; Interrupteinsprung SIO0 wieder sendebereit
+S0RINT equ 0ach ; Interrupteinsprung SIO0 hat Zeichen empfangen
+S0EINT equ 0b0h ; Interrupteinsprung SIO0 hat Fehler erkannt
+S1TINT equ 0b4h ; Interrupteinsprung SIO1 wieder sendebereit
+S1RINT equ 0b8h ; Interrupteinsprung SIO1 hat Zeichen empfangen
+S1EINT equ 0bch ; Interrupteinsprung SIO1 hat Fehler erkannt
+
+
+;----------------------------------------------------------------------------
+; Speicherbereiche
+
+ if MOMCPU=80C167H
+IRAM equ 0f600h ; Beginn internes RAM
+ elseif
+IRAM equ 0fa00h
+ endif
+IRAMEND equ 0fdffh ; Ende " "
+
+BITRAM equ 0fd00h ; Beginn bitadressierbarer RAM-Bereich
+BITRAMEND equ 0fdffh ; Ende " " "
+
+ if MOMCPU=80C167H
+PECPTR equ 0fce0h ; Begin PEC-Vektoren (optional)
+PECPTREND equ 0fcffh ; Ende " "
+ elseif
+PECPTR equ 0fde0h
+PECPTREND equ 0fdffh
+ endif
+
+SFRSTART equ 0fe00h ; Beginn SFR-Bereich
+SFREND equ 0ffdfh ; Ende SFR-Bereich
+ if MOMCPU=80C167H
+ESFRSTART equ 0f000h ; Beginn erweiterter SFR-Bereich
+ESFREND equ 0f1dfh ; Ende erweiterter SFR-Bereich
+ endif
+
+IROM equ 0 ; Begin internes ROM
+ if MOMCPU=80C167H
+IROMEND equ 07fffh ; Ende internes ROM (n. voll ausgebaut)
+ elseif
+IROMEND equ 01fffh
+ endif
+
+;----------------------------------------------------------------------------
+; Bequemlichkeitsmakros
+
+clr macro op ; Operand auf 0 setzen
+ and op,#0
+ endm
+
+bchg macro op ; Bit invertieren
+ bmovn op,op
+ endm
+
+dec macro op ; um eins runter
+ sub op,#1
+ endm
+
+inc macro op ; um eins rauf
+ add op,#1
+ endm
+
+swapb macro op ; Bytes tauschen
+ ror op,#8
+ endm
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben