diff options
Diffstat (limited to 'include/reg166.inc')
-rw-r--r-- | include/reg166.inc | 780 |
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 |