aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/80c50x.inc257
-rw-r--r--include/80c552.inc228
-rw-r--r--include/bitfuncs.inc85
-rw-r--r--include/ctype.inc94
-rw-r--r--include/h8_3048.inc560
-rw-r--r--include/reg166.inc780
-rw-r--r--include/reg251.inc225
-rw-r--r--include/reg29k.inc127
-rw-r--r--include/reg53x.inc344
-rw-r--r--include/reg683xx.inc700
-rw-r--r--include/reg7000.inc120
-rw-r--r--include/reg78k0.inc245
-rw-r--r--include/reg96.inc610
-rw-r--r--include/regavr.inc329
-rw-r--r--include/regcop8.inc242
-rw-r--r--include/reghc12.inc228
-rw-r--r--include/regm16c.inc421
-rw-r--r--include/regmsp.inc227
-rw-r--r--include/regst9.inc624
-rw-r--r--include/regz380.inc68
-rw-r--r--include/stddef04.inc54
-rw-r--r--include/stddef16.inc188
-rw-r--r--include/stddef17.inc116
-rw-r--r--include/stddef18.inc262
-rw-r--r--include/stddef2x.inc53
-rw-r--r--include/stddef37.inc527
-rw-r--r--include/stddef3x.inc96
-rw-r--r--include/stddef47.inc279
-rw-r--r--include/stddef51.inc374
-rw-r--r--include/stddef56k.inc69
-rw-r--r--include/stddef5x.inc109
-rw-r--r--include/stddef60.inc674
-rw-r--r--include/stddef62.inc147
-rw-r--r--include/stddef75.inc699
-rw-r--r--include/stddef87.inc218
-rw-r--r--include/stddef90.inc129
-rw-r--r--include/stddef96.inc170
-rw-r--r--include/stddefxa.inc405
-rw-r--r--include/stddefz8.inc56
39 files changed, 11139 insertions, 0 deletions
diff --git a/include/80c50x.inc b/include/80c50x.inc
new file mode 100644
index 0000000..e4a934b
--- /dev/null
+++ b/include/80c50x.inc
@@ -0,0 +1,257 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei 80C50x.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für die SAB C50x-Prozessoren *
+; (Ableitung aus STDDEF51.INC) *
+;* *
+;* letzte Änderungen : 26. 3.1997 Grundsteinlegung *
+;* 8. 6.1997 Korrekturen von Herrn Schmid *
+;* *
+;****************************************************************************
+
+ ifndef reg50xinc ; verhindert Mehrfacheinbindung
+
+reg50xinc equ 1
+
+ if (MOMCPUNAME<>"80C501")&&(MOMCPUNAME<>"80C502")&&(MOMCPUNAME<>"80C504")
+ fatal "Falscher Prozessortyp eingestellt: nur 80C501, 80C502 oder 80C504 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "SAB C50x-SFR-Definitionen (C) 1993 Alfred Arnold, Steffen Schmid"
+ message "binde \{MOMCPUNAME}-SFRs ein"
+ endif
+
+;----------------------------------------------------------------------------
+; Prozessorkern
+
+ACC SFRB 0e0h ; Akkumulator
+B SFRB 0f0h ; Hilfsakku für MUL/DIV
+SP SFR 81h ; Stapelzeiger
+DPL SFR 82h ; Datenzeiger Bit 0..7
+DPH SFR 83h ; " Bit 8..15
+PSW SFRB 0d0h ; Statuswort
+CY BIT PSW.7
+AC BIT PSW.6
+F0 BIT PSW.5
+RS1 BIT PSW.4
+RS0 BIT PSW.3
+OV BIT PSW.2
+P BIT PSW.0
+SYSCON SFR 0b1h ; Systemkonfiguration
+PCON SFR 87h ; "Power-Management"
+PCON1 SFRB 88h
+EWPD BIT PCON1.7 ; Freigabe Wake-Up durch INT0
+
+ if MOMCPUNAME="80C502"
+XPAGE SFR 91h ; XRAM-Ansteuerung 80C502
+XCON SFR 94h
+DPSEL SFR 92h
+ endif
+
+;----------------------------------------------------------------------------
+; Ports
+
+P0 SFRB 80h ; I/O-Ports
+P1 SFRB 90h
+P2 SFRB 0a0h
+P3 SFRB 0b0h
+T2EX BIT P1.1
+T2 BIT P1.0
+ if MOMCPUNAME="80C504"
+P1ANA SFRB 90h ; Selektion Port 1/3 als analoge Eingabe
+P3ANA SFRB 0b0h
+EAN0 BIT P1ANA.0
+EAN1 BIT P1ANA.1
+EAN2 BIT P1ANA.2
+EAN3 BIT P1ANA.3
+EAN4 BIT P1ANA.2
+EAN5 BIT P1ANA.3
+EAN6 BIT P1ANA.4
+EAN7 BIT P1ANA.5
+ endif
+RD BIT P3.7 ; Port 3: Schreibleitung
+WR BIT P3.6 ; Leseleitung
+T1 BIT P3.5 ; Testleitung 1
+T0 BIT P3.4 ; Testleitung 0
+INT1 BIT P3.3 ; ext. Interrupt 1
+INT0 BIT P3.2 ; ext. Interrupt 0
+TXD BIT P3.1 ; ser. Ausgang
+RXD BIT P3.0 ; ser. Eingang
+
+;----------------------------------------------------------------------------
+; serielles
+
+SCON SFRB 98h ; ser. Schnittstelle: Steuerregister
+SM0 BIT SCON.7 ; Betriebsarten
+SM1 BIT SCON.6
+SM2 BIT SCON.5
+REN BIT SCON.4 ; Empfangssperre
+TB8 BIT SCON.3 ; 9. zu sendendes Bit
+RB8 BIT SCON.2 ; 9. empfangenes Bit
+TI BIT SCON.1 ; Senderinterruptflag
+RI BIT SCON.0 ; Empfängerinterruptflag
+SBUF SFR 99h ; " " Datenregister
+ if MOMCPUNAME="80C502"
+SRELL SFR 0aah ; Wert für Baudratengenerator
+SRELH SFR 0bah
+BAUD SFRB 0d8h
+BD BIT BAUD.7 ; Baudratengenerator aktivieren
+ ENDIF
+
+;----------------------------------------------------------------------------
+; Timer
+
+TCON SFRB 88h ; Timer 0/1 Steuerregister
+TF1 BIT TCON.7 ; Überlauf Timer 1
+TR1 BIT TCON.6 ; Timer 1 laufenlassen
+TF0 BIT TCON.5 ; Überlauf Timer 0
+TR0 BIT TCON.4 ; Timer 0 laufenlassen
+IE1 BIT TCON.3 ; Externer Interrupt 1 aufgetreten
+IT1 BIT TCON.2 ; Einstellung Triggerflanke externer Interrupt 1
+IE0 BIT TCON.1 ; Externer Interrupt 0 aufgetreten
+IT0 BIT TCON.0 ; Einstellung Triggerflanke externer Interrupt 0
+TMOD SFR 89h ; Timer 0/1 Betriebsartenregister
+TL0 SFR 8ah ; Daten Timer 0
+TL1 SFR 8bh
+TH0 SFR 8ch ; Daten Timer 1
+TH1 SFR 8dh
+T2CON SFRB 0c8h ; Steuerregister Timer 2
+TL2 SFR 0cch ; Daten Timer 2
+TH2 SFR 0cdh
+RC2L SFR 0cah ; Capture-Register
+RC2H SFR 0cbh
+TF2 BIT T2CON.7 ; Overflow Timer 2
+EXF2 BIT T2CON.6 ; Reload aufgetreten
+RCLK BIT T2CON.5 ; Timer 2 liefert RxD-Takt
+TCLK BIT T2CON.4 ; Timer 2 liefert TxD-Takt
+EXEN2 BIT T2CON.3 ; externer Enable Timer 2
+TR2 BIT T2CON.2 ; Timer 2 starten
+CT2 BIT T2CON.1 ; Timer 2 als Zähler
+CPRL2 BIT T2CON.0 ; Capture erlauben
+
+;---------------------------------------------------------------------------
+; Watchdog
+
+ if MOMCPU>=80C504h
+WDCON SFRB 0c0h ; Watchdog Steuerung
+SWDT BIT WDCON.0 ; Watchdog starten
+WDT BIT WDCON.1 ; Watchdog zurücksetzen
+WDTS BIT WDCON.2 ; Watchdog-Reset-Flagge
+OWDS BIT WDCON.3 ; dito Oszillator-Watchdog
+WDTREL SFR 86h
+ endif
+
+;---------------------------------------------------------------------------
+; Capture/Compare-Einheit
+
+ if MOMCPUNAME="80C504"
+CT1CON SFR 0e1h ; Steuerung Vergleicher 1
+CCPL SFR 0deh ; Periode Vergleicher 1
+CCPH SFR 0dfh
+CT1OFL SFR 0e6h ; Offset Vergleicher 1
+CT1OFH SFR 0e7h
+CMSEL0 SFR 0e3h ; Modus
+CMSEL1 SFR 0e4h
+COINI SFR 0e2h ; Initialisierung Vergleicherausgang
+TRCON SFR 0cfh ; Trap-Freigabe
+CCL0 SFR 0c2h ; Vergleichs-/Fangwert 0
+CCH0 SFR 0c3h
+CCL1 SFR 0c4h ; Vergleichs-/Fangwert 1
+CCH1 SFR 0c5h
+CCL2 SFR 0c6h ; Vergleichs-/Fangwert 2
+CCH2 SFR 0c7h
+CCIR SFR 0e5h ; Interruptflags
+CCIE SFR 0d6h ; Interruptmasken
+CT2CON SFR 0c1h ; Steuerung Vergleicher 2
+CP2L SFR 0d2h ; Periode Vergleicher 2
+CP2H SFR 0d3h
+CMP2L SFR 0d4h ; Vergleichs-/Fangwert Timer 2
+CMP2H SFR 0d5h
+BCON SFR 0d7h ; Steuerung Blockkommunikation
+ endif
+
+;---------------------------------------------------------------------------
+; A/D-Wandler
+
+ if MOMCPUNAME="80C504"
+ADCON0 SFRB 0d8h ; Konfiguration
+IADC BIT ADCON0.5 ; Interruptflagge (Ende Konversion)
+BSY BIT ADCON0.4 ; Busy-Flag
+ADM BIT ADCON0.3 ; einfache/kontinuierliche Wandlung
+MX2 BIT ADCON0.2 ; Kanalwahl
+MX1 BIT ADCON0.1
+MX0 BIT ADCON0.0
+ADCON1 SFR 0dch
+ADDATH SFR 0d9h ; Daten
+ADDATL SFR 0dah
+ endif
+
+;-------------------------------------------------------------------------
+; Interruptsteuerregister:
+
+IEN0 SFRB 0a8h ; Freigaben
+IE SFRB IEN0
+EA BIT IEN0.7 ; generelle Sperre
+ET2 BIT IEN0.5 ; Timer 2
+ES BIT IEN0.4 ; ser. Schnittstelle
+ET1 BIT IEN0.3 ; Überlauf Timer 1
+EX1 BIT IEN0.2 ; ext. Interrupt 1
+ET0 BIT IEN0.1 ; Timer 0 Überlauf
+EX0 BIT IEN0.0 ; ext. Interrupt 0
+IP0 SFRB 0b8h ; Prioritäten
+IP SFRB IP0
+PT2 BIT IP0.5 ; siehe Freigabebits
+PS BIT IP0.4
+PT1 BIT IP0.3
+PX1 BIT IP0.2
+PT0 BIT IP0.1
+PX0 BIT IP0.0
+ if MOMCPUNAME="80C504"
+IEN1 SFR 0a9h
+IP1 SFR 0b9h
+ITCON SFR 09ah ; Triggerbedingungen
+ endif
+
+;---------------------------------------------------------------------------
+; Da man die Register beim 8051 nicht direkt pushen und poppen kann, muß man
+; dies über direkte Adressen tun. Da dazu die Kenntnis der gewählten Regis-
+; terbank erforderlich ist, steht hier das Makro USING zur Verfügung, wel-
+; ches in den Symbolen AR0..AR7 die momentanen Registeradressen ablegt.
+; USING erwartet als Parameter die gewählte Banknummer.
+
+Bank0 equ 0 ; nur der Schönheit halber...
+Bank1 equ 1
+Bank2 equ 2
+Bank3 equ 3
+
+using macro bank
+ if (bank<0)||(bank>3) ; nur 0..3 erlaubt
+ error "Falsche Banknummer: \{BANK}"
+ endif
+
+ ifdef RegUsage ; Buchführung über benutzte Bänke
+RegUsage set RegUsage|(2^bank)
+ elseif
+RegUsage set 2^bank
+ endif
+
+ar0 set bank*8 ; Symbole besetzen
+ar1 set ar0+1
+ar2 set ar0+2
+ar3 set ar0+3
+ar4 set ar0+4
+ar5 set ar0+5
+ar6 set ar0+6
+ar7 set ar0+7
+ endm
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/80c552.inc b/include/80c552.inc
new file mode 100644
index 0000000..8a24517
--- /dev/null
+++ b/include/80c552.inc
@@ -0,0 +1,228 @@
+; 83C552 processor definition file
+; ================================
+
+; NOTE: 80c552 is not a predefined processor type in AS.
+; to use this file, add '-alias 80c552=8052' to the command line
+; or key file
+
+ if MOMCPUNAME<>"80C552"
+ fatal "80C552.INC: Falscher Prozessortyp, nur 80C552 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "80C552-Registerdefinitionen"
+ message "(C) 1996 Alfred Arnold"
+ endif
+
+;-----------------------------------------------------------------------------
+
+ACC sfrb 0E0H
+B sfrb 0F0H
+SP sfr 081H
+DPL sfr 082H
+DPH sfr 083H
+
+PSW sfrb 0D0H
+P bit PSW.0
+F1 bit PSW.1
+OV bit PSW.2
+RS0 bit PSW.3
+RS1 bit PSW.4
+F0 bit PSW.5
+AC bit PSW.6
+CY bit PSW.7
+
+;-----------------------------------------------------------------------------
+
+PCON sfr 087H
+
+;-----------------------------------------------------------------------------
+
+IEN0 sfrb 0A8H
+EX0 bit IEN0.0
+ET0 bit IEN0.1
+EX1 bit IEN0.2
+ET1 bit IEN0.3
+ES0 bit IEN0.4
+ES1 bit IEN0.5
+EAD bit IEN0.6
+EA bit IEN0.7
+
+IEN1 sfrb 0E8H
+ECT0 bit IEN1.0
+ECT1 bit IEN1.1
+ECT2 bit IEN1.2
+ECT3 bit IEN1.3
+ECM0 bit IEN1.4
+ECM1 bit IEN1.5
+ECM2 bit IEN1.6
+ET2 bit IEN1.7
+
+IP0 sfrb 0B8H
+PX0 bit IP0.0
+PT0 bit IP0.1
+PX1 bit IP0.2
+PT1 bit IP0.3
+PS0 bit IP0.4
+PS1 bit IP0.5
+PAD bit IP0.6
+
+IP1 sfrb 0F8H
+PCT0 bit IP1.0
+PCT1 bit IP1.1
+PCT2 bit IP1.2
+PCT3 bit IP1.3
+PCM0 bit IP1.4
+PCM1 bit IP1.5
+PCM2 bit IP1.6
+PT2 bit IP1.7
+
+;-----------------------------------------------------------------------------
+
+P0 sfrb 080H
+
+P1 sfrb 090H
+CT0I bit P1.0
+CT1I bit P1.1
+CT2I bit P1.2
+CT3I bit P1.3
+T2 bit P1.4
+RT2 bit P1.5
+SCL bit P1.6
+SDA bit P1.7
+
+P2 sfrb 0A0H
+
+P3 sfrb 0B0H
+RXD bit P3.0
+TXD bit P3.1
+INT0 bit P3.2
+INT1 bit P3.3
+T0 bit P3.4
+T1 bit P3.5
+WR bit P3.6
+RD bit P3.7
+
+P4 sfrb 0C0H
+CMSR0 bit P4.0
+CMSR1 bit P4.1
+CMSR2 bit P4.2
+CMSR3 bit P4.3
+CMSR4 bit P4.4
+CMSR5 bit P4.5
+CMT0 bit P4.6
+CMT1 bit P4.7
+
+P5 sfr 0C4H
+
+;-----------------------------------------------------------------------------
+
+TCON sfrb 088H
+IT0 bit TCON.0
+IE0 bit TCON.1
+IT1 bit TCON.2
+IE1 bit TCON.3
+TR0 bit TCON.4
+TF0 bit TCON.5
+TR1 bit TCON.6
+TF1 bit TCON.7
+
+TMOD sfr 089H
+TL0 sfr 08AH
+TL1 sfr 08BH
+TH0 sfr 08CH
+TH1 sfr 08DH
+
+CML0 sfr 0A9H
+CML1 sfr 0AAH
+CML2 sfr 0ABH
+CTL0 sfr 0ACH
+CTL1 sfr 0ADH
+CTL2 sfr 0AEH
+CTL3 sfr 0AFH
+
+TM2IR sfrb 0C8H
+CTI0 bit TM2IR.0
+CTI1 bit TM2IR.1
+CTI2 bit TM2IR.2
+CTI3 bit TM2IR.3
+CMI0 bit TM2IR.4
+CMI1 bit TM2IR.5
+CMI2 bit TM2IR.6
+T2OV bit TM2IR.7
+
+CMH0 sfr 0C9H
+CMH1 sfr 0CAH
+CMH2 sfr 0CBH
+CTH0 sfr 0CCH
+CTH1 sfr 0CDH
+CTH2 sfr 0CEH
+CTH3 sfr 0CFH
+
+TM2CON sfr 0EAH
+CTCON sfr 0EBH
+TML2 sfr 0ECH
+TMH2 sfr 0EDH
+
+;-----------------------------------------------------------------------------
+
+S0CON sfrb 098H
+RI bit S0CON.0
+TI bit S0CON.1
+RB8 bit S0CON.2
+TB8 bit S0CON.3
+REN bit S0CON.4
+SM2 bit S0CON.5
+SM1 bit S0CON.6
+SM0 bit S0CON.7
+
+S0BUF sfr 099H
+
+S1CON sfrb 0D8H
+CR0 bit S1CON.0
+CR1 bit S1CON.1
+AA bit S1CON.2
+SI bit S1CON.3
+ST0 bit S1CON.4
+STA bit S1CON.5
+ENS1 bit S1CON.6
+CR2 bit S1CON.7
+
+S1STA sfr 0D9H
+S1DAT sfr 0DAH
+S1ADR sfr 0DBH
+
+;-----------------------------------------------------------------------------
+
+;-----------------------------------------------------------------------------
+
+ADCON sfr 0C5H
+ADCH sfr 0C6H
+
+;-----------------------------------------------------------------------------
+
+STE sfr 0EEH
+RTE sfr 0EFH
+PWM0 sfr 0FCH
+PWM1 sfr 0FDH
+PWMP sfr 0FEH
+T3 sfr 0FFH
+
+;-----------------------------------------------------------------------------
+
+RESET label 000H
+EXTI0 label 003H
+TIMER0 label 00BH
+EXTI1 label 013H
+TIMER1 label 01BH
+SINT label 023H
+I2CBUS label 02BH
+T2CAP0 label 033H
+T2CAP1 label 03BH
+T2CAP2 label 043H
+T2CAP3 label 04BH
+ADCONV label 053H
+T2CMP0 label 05BH
+T2CMP1 label 063H
+T2CMP2 label 06BH
+T2OVER label 073H
diff --git a/include/bitfuncs.inc b/include/bitfuncs.inc
new file mode 100644
index 0000000..fc9706b
--- /dev/null
+++ b/include/bitfuncs.inc
@@ -0,0 +1,85 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.39 - Datei BITFUNCS.INC *
+;* *
+;* Sinn : enthält Funktionen zur Bitmanipulation *
+;* *
+;* letzte Änderungen : 30. 5.1993 *
+;* 11. 9.1993 Meldung nur im 1.Pass *
+;* *
+;****************************************************************************
+
+ ifndef bitfuncsinc ; verhindert Mehrfacheinbindung
+
+bitfuncsinc equ 1
+
+ if mompass=1
+ message "Standardbitfunktionen (C) 1993 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; erstmal einige Unterfunktionen:
+
+; liefert eine Maske in der ab 'start' 'bits' Bit gesetzt sind, z.B. zum
+; Ausmaskieren einzelner Bits:
+
+mask function start,bits,((1<<bits)-1)<<start
+
+; das gleiche invers zum Löschen von Bitgruppen:
+
+invmask function start,bits,~mask(start,bits)
+
+; liefert die Bits 'start' bis 'start'+'bits'-1 aus 'x':
+
+cutout function x,start,bits,x&mask(start,bits)
+
+;----------------------------------------------------------------------------
+; einige häufig gebrauchte Sondermasken:
+
+; oberes Byte eines 16-Bit-Wortes:
+
+hi function x,(x>>8)&255
+
+; dito unteres Byte:
+
+lo function x,x&255
+
+; obere Hälfte aus einem 32-Bit-Wort:
+
+hiword function x,(x>>16)&65535
+
+; dito untere Hälfte:
+
+loword function x,x&65535
+
+; Boolean-Funktionen, ob eine Zahl gerade oder ungerade ist:
+
+odd function x,(x&1)=1
+even function x,(x&1)=0
+
+; liefert Bit 'n' aus 'x':
+
+getbit function x,n,(x>>n)&1
+
+;----------------------------------------------------------------------------
+; Schiebefunktionen:
+
+; Schieben eines 'size'-Bit-Wortes um 'n' Stellen nach links oder rechts:
+
+shln function x,size,n,(x<<n)&mask(0,size)
+shrn function x,size,n,(x>>n)&mask(0,size-n)
+
+; Rotation eines 'size'-Bit-Wortes um 'n' Stellen nach links oder rechts;
+; der erste Term läßt die restlichen Bits unverändert und kann bei Bedarf
+; gelöscht werden:
+
+rotln function x,size,n,cutout(x,size,32-size)|shln(x,size,n)|shrn(x,size,size-n)
+rotrn function x,size,n,cutout(x,size,32-size)|shrn(x,size,n)|shln(x,size,size-n)
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/ctype.inc b/include/ctype.inc
new file mode 100644
index 0000000..9eee3cd
--- /dev/null
+++ b/include/ctype.inc
@@ -0,0 +1,94 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei CTYPE.INC *
+;* *
+;* Sinn : enthält Funktionen zur Untersuchung von Zeichen *
+;* *
+;* letzte Änderungen : 20. 3.1993 *
+;* 11. 9.1993 Meldung nur im 1.Pass *
+;* 19. 2.1994 Funktionen vervollständigt, *
+;* isascii dem C-Standard angepaßt *
+;* *
+;* ACHTUNG! isalpha berücksichtigt keine landesspezifischen Sonderzeichen! *
+;* *
+;****************************************************************************
+
+ ifndef ctypeinc ; verhindert Mehrfacheinbindung
+
+ctypeinc equ 1
+
+ if mompass=1
+ message "Standardzeichenfunktionen (C) 1993 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument eine Ziffer ist:
+
+isdigit function ch,(ch>='0')&&(ch<='9')
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument eine hexadezimale Ziffer ist:
+
+isxdigit function ch,(isdigit(ch))||((toupper(ch)>='A')&&(toupper(ch)<='F'))
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument im Bereich normaler ASCII-Zeichen liegt:
+
+isascii function ch,(ch>=0)&&(ch<128)
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein Großbuchstabe ist:
+
+isupper function ch,(ch>='A')&&(ch<='Z')
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein Kleinbuchstabe ist:
+
+islower function ch,(ch>='a')&&(ch<='z')
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein Buchstabe ist:
+
+isalpha function ch,(toupper(ch)>='A')&&(toupper(ch)<='Z')
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument Ziffer oder Buchstabe ist:
+
+isalnum function ch,isdigit(ch)||isalpha(ch)
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein Leerzeichen ist:
+; Hinweis: 11=vertikaler Tabulator
+
+isspace function ch,(ch=' ')||(ch=12)||(ch='\n')||(ch='\r')||(ch='\t')||(ch=11)
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein druckbares Zeichen ist:
+; strenggenommen müßte man DEL (127) ausnehmen, aber auf dem PC ist das ein
+; druckbares Zeichen
+
+isprint function ch,(ch>31)&&(ch<255)
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein Steuerzeichen ist:
+
+iscntrl function ch,~~isprint(ch)
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein druckbares, sichtbares Zeichen ist:
+
+isgraph function ch,isprint(ch)&&(~~isspace(ch))
+
+;----------------------------------------------------------------------------
+; liefert TRUE, falls das Argument ein Sonderzeichen ist:
+
+ispunct function ch,isprint(ch)&&(~~isspace(ch))&&(~~isalnum(ch))
+
+ endif
+
+ restore ; wieder erlauben
+
+
diff --git a/include/h8_3048.inc b/include/h8_3048.inc
new file mode 100644
index 0000000..659e4c9
--- /dev/null
+++ b/include/h8_3048.inc
@@ -0,0 +1,560 @@
+ save
+ listing off
+; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REG3048.INC *
+;* *
+;* Sinn : enthält SFR-, Makro- und Adreadefinitionen für H8/3048 *
+;* *
+;* letzte Änderungen : 24.10.1995 *
+;* *
+;****************************************************************************
+
+ ifndef reg3048inc ; verhindert Mehrfacheinbindung
+
+reg532inc equ 1
+
+ if (MOMCPUNAME<>"HD6413309")&&(MOMCPUNAME<>"H8/300H")
+ fatal "Falscher Prozessortyp eingestellt: nur H8/300H erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "H8/3048-SFR-Definitionen, (C) 1995 Christian Stelter"
+ endif
+
+
+;-----------------------------------------------------------------------------
+; MCU-Operating-Modes: (Sec.3 p.55-68 & Sec.20 p.615-628)
+
+
+MDCR equ $fff1 ; Arbeitsmodus CPU
+SYSCR equ $fff2 ; Standby-Modusregister
+MSTCR equ $ff5e ; Module standby control register
+
+;MDCR-Register
+
+MD0 equ 0
+MD1 equ 1
+MD2 equ 2
+
+
+;SYSCR-Register
+
+SSBY equ 7 ; Software-Standby
+STS2 equ 6 ; Standby-Timer Select
+STS1 equ 5
+STS0 equ 4
+UE equ 3 ; User bit enable
+NMIEG equ 2 ; NMI-edge
+RAME equ 0 ; internes RAM freigeben
+
+
+;MSTCR-Register
+
+PSTOP equ 7 ; Phi-clock stop
+MSTOP5 equ 5 ; Module standby
+MSTOP4 equ 4
+MSTOP3 equ 3
+MSTOP2 equ 2
+MSTOP1 equ 1
+MSTOP0 equ 0
+
+
+
+
+
+
+;-----------------------------------------------------------------------------
+; Bus-Controller (Sec.6 p.107-142)
+
+
+ABWCR equ $ffec ; Bus width control register
+
+ASTCR equ $ffed ; Access state control register
+
+WCR equ $ffee ; Wait control register
+WMS0 equ 2 ; Modus
+WMS1 equ 3
+WC0 equ 0 ; Anzahl Waitstates
+WC1 equ 1
+
+WCER equ $ffef ; Wait state controller enable reg.
+
+BRCR equ $fff3 ; Bus release control register
+A23E equ 7 ; Address 23 enable
+A22E equ 6 ; 22
+A21E equ 5 ; 21
+BRLE equ 0 ; Bus release enable
+
+
+CSCR equ $ff5f ; Chip select control register
+CS7E equ 7 ; Chip-select 7 enabel
+CS6E equ 6
+CS5E equ 5
+CS4E equ 4
+
+
+
+
+
+;-----------------------------------------------------------------------------
+; Interrupt-Controller:
+
+ISCR equ $fff4 ; IRQ sense control register
+IER equ $fff5 ; IRQ enable register
+ISR equ $fff6 ; IRQ status register
+IPRA equ $fff8 ; Prioritätssteuerung
+IPRB equ $fff9 ;
+
+
+;-----------------------------------------------------------------------------
+; Lage Exception und Interrupt-Vektoren: (Sec.4 p.69-78)
+;
+
+__defvec macro Name,Num
+Name equ Num<<2
+ endm
+
+ __defvec Reset,0
+ __defvec NMI,7
+ __defvec TRAP0,8
+ __defvec TRAP1,9
+ __defvec TRAP2,10
+ __defvec TRAP3,11
+ __defvec IRQ0,12
+ __defvec IRQ1,13
+ __defvec IRQ2,14
+ __defvec IRQ3,15
+ __defvec IRQ4,16
+ __defvec IRQ5,17
+ __defvec WOVI,20
+ __defvec CMI,21
+ __defvec IMIA0,24
+ __defvec IMIB0,25
+ __defvec OVI0,26
+ __defvec IMIA1,28
+ __defvec IMIB1,29
+ __defvec OVI1,30
+ __defvec IMIA2,32
+ __defvec IMIB2,33
+ __defvec OVI2,34
+ __defvec IMIA3,36
+ __defvec IMIB3,37
+ __defvec OVI3,38
+ __defvec IMIA4,40
+ __defvec IMIB4,41
+ __defvec OVI4,42
+ __defvec DEND0A,44
+ ;__defvec DEND0A,45
+ __defvec DEND1B,46
+ ;__defvec DEND1B,47
+ __defvec ERI0,52
+ __defvec RXI0,53
+ __defvec TXI0,54
+ __defvec TEI0,55
+ __defvec ERI1,56
+ __defvec RXI1,57
+ __defvec TXI1,58
+ __defvec TEI1,59
+ __defvec ADI,60
+
+
+;-----------------------------------------------------------------------------
+; DMA-Controller (Sec.6 p.181-238)
+
+DTEA equ $fff4 ; Freigabe Datentransfers
+DTEB equ $fff5
+DTEC equ $fff6
+DTED equ $fff7
+
+__defdma macro Base,Name
+MAR{Name}AR equ Base ; Memory address register AR
+MAR{Name}ER equ Base+1 ; Memory address register AE
+MAR{Name}AL equ Base+2 ; Memory address register AL
+MAR{Name}AH equ Base+3 ; Memory address register AH
+ETCR{Name}AH equ Base+4 ; Execute transfer count register AH
+ETCR{Name}AL equ Base+5 ; AL
+IOAR{Name}A equ Base+6 ; I/O address register A
+DTCR{Name}A equ Base+7 ; Data transfer control register A
+MAR{Name}BR equ Base+8 ; Memory address register BR
+MAR{Name}BE equ Base+9 ; Memory address register BE
+MAR{Name}BH equ Base+10 ; Memory address register BH
+MAR{Name}BL equ Base+11 ; Memory address register BL
+ETCR{Name}BH equ Base+12 ; Excute transfer count register BH
+ETCR{Name}BL equ Base+13 ; Excute transfer count register BL
+IOAR{Name}B equ Base+14 ; I/O address register B
+DTCR{Name}B equ Base+15 ; Data transfer control register
+ endm
+
+ __defdma $ff20,"0"
+ __defdma $ff30,"1"
+
+
+
+; DTCR-Register
+
+; short address-mode
+DTE equ 7 ; Data transfer enable
+DTSZ equ 6 ; Data transfer size
+DTID equ 5 ; Data transfer inc/dec
+RPE equ 4 ; Repeat enable
+DTIE equ 3 ; Data transfer interrupt enable
+DTS2 equ 2 ; Data transfer select
+DTS1 equ 1
+DTS0 equ 0
+
+; full address mode
+SAID equ 5 ; Source address inc/dec
+SAIE equ 4 ; Source address inc/dec enable
+DTS2A equ 2 ; Data transfer select
+DTS1A equ 1
+DTS0A equ 0
+
+; DTCRB-Register
+DTME equ 7 ; Data transfer master enable
+DAID equ 5 ; Destination address inc/dec bit
+DAIE equ 4 ; enable
+TMS equ 3 ; Transfer mode select
+DTS2B equ 2 ; Data transfer select
+DTS1B equ 1
+DTS0B equ 0
+
+
+
+
+;-----------------------------------------------------------------------------
+; I/O-Ports: (Sec.9 p.239-280)
+
+P1DDR equ $ffc0 ; Datenrichtung Port 1
+P1DR equ $ffc2 ; Daten Port 1
+
+P2DDR equ $ffc1 ; Datenrichtung Port 2
+P2DR equ $ffc3 ; Daten Port 2
+P2PCR equ $ffd8 ; Input pull-up control register port 3
+
+P3DDR equ $ffc4 ; Datenrichtung Port 3
+P3DR equ $ffc6 ; Daten Port 3
+
+P4DDR equ $ffc5 ; Datenrichtung Port 4
+P4DR equ $ffc7 ; Daten Port 4
+P4PCR equ $ffda ; Input pull-up control register port 4
+
+P5DDR equ $ffc8 ; Datenrichtung Port 5
+P5DR equ $ffca ; Daten Port 5
+P5PCR equ $ffcb ; Input pull-up control register port 5
+
+P6DDR equ $ffc9 ; Datenrichtung Port 6
+P6DR equ $ffcb ; Daten Port 6
+
+P8DDR equ $ffcd ; Datenrichtung Port 8
+P8DR equ $ffcf ; Daten Port 8
+
+P9DDR equ $ffd0 ; Datenrichtung Port 9
+P9DR equ $ffd2 ; Daten Port 9
+
+PADDR equ $ffd1 ; Datenrichtung Port A
+PADR equ $ffd3 ; Daten Port A
+
+PBDDR equ $ffd4 ; Datenrichtung Port B
+PBDR equ $ffd6 ; Daten Port B
+
+;------------------------------------------------------------------------------
+;Integrated Timer Unit (ITU): (Sec.10 p.281-380)
+
+
+
+;common
+TSTR equ $ff60 ; Timer start register
+TSNC equ $ff61 ; Timer synchro register
+TMDR equ $ff62 ; Timer mode register
+TFCR equ $ff63 ; Timer function control register
+TOER equ $ff90 ; Timer output master enable register
+TOCR equ $ff91 ; Timer output control register
+
+
+
+__deftimer macro Base,Name
+TCR{Name} equ Base ; Timer control register
+TIOR{Name} equ Base+1 ; Timer I/O control register
+TIER{Name} equ Base+2 ; Timer interrupt enable register
+TSR{Name} equ Base+3 ; Timer status register
+TCNT{Name}H equ Base+4 ; Timer counter H
+TCNT{Name}L equ Base+5 ; Timer counter L
+GRA{Name}H equ Base+6 ; General register A (high)
+GRA{Name}L equ Base+7 ; General register A (low)
+GRB{Name}H equ Base+8 ; General register B (high)
+GRB{Name}L equ Base+9 ; General register B (low)
+ endm
+
+ __deftimer $ff64,"0"
+ __deftimer $ff6e,"1"
+ __deftimer $ff78,"2"
+ __deftimer $ff82,"3"
+
+BRA3H equ $ff8c ; Buffer register A3 (high)
+BRA3L equ $ff8d ; Buffer register A3 (low)
+BRB3H equ $ff8e ; Buffer register B3 (high)
+BRB3L equ $ff8f ; Buffer register B3 (low)
+
+ __deftimer $ff82,"4"
+
+BRA4H equ $ff9c ; Buffer register A4 (high)
+BRA4L equ $ff9d ; Buffer register A4 (low)
+BRB4H equ $ff9e ; Buffer register B4 (high)
+BRB4L equ $ff9f ; Buffer register B4 (low)
+
+
+
+
+;TMDR-Register
+
+MDF equ 6 ; Phase counting mode flag
+FDIR equ 5 ; Flag direction
+PWM4 equ 4 ; PWM mode
+PWM3 equ 3
+PWM2 equ 2
+PWM1 equ 1
+PWM0 equ 0
+
+
+;TFCR-Register
+
+CMD1 equ 5 ; Combination mode
+CMD0 equ 4
+BFB4 equ 3 ; Buffer mode B4
+BFA4 equ 2 ; Buffer mode A4
+BFB3 equ 1 ; Buffer mode B3
+BFA3 equ 0 ; Buffer mode A3
+
+
+;TOER-Register
+
+EXB4 equ 5 ; Master enable TOCXB4
+EXA4 equ 4 ; Master enable TOCXA4
+EB3 equ 3 ; Master enable TIOCB3
+EB4 equ 2 ; Master enable TIOCB4
+EA4 equ 1 ; Master enable TIOCA4
+EA3 equ 0 ; Master enable TIOCA3
+
+
+;TOCR-Register
+
+XTGD equ 4 ; External trigger disable
+OLS4 equ 1 ; Output level select 4
+OLS3 equ 0 ; Output level select 3
+
+
+;TCR-Register
+
+CCLR1 equ 6 ; Counter clear
+CCLR0 equ 5
+CKEG1 equ 4 ; Counter edge
+CKEG0 equ 3
+TPSC2 equ 2 ; Timer prescaler
+TPSC1 equ 1
+TPSC0 equ 0
+
+
+;TIOR-Register
+
+IOB2 equ 6 ; I/O control B2
+IOB1 equ 5 ; I/O control B1
+IOB0 equ 4 ; I/O control B0
+IOA2 equ 2 ; I/O control A2
+IOA1 equ 1 ; I/O control A1
+IOA0 equ 0 ; I/O control A0
+
+
+;TSR-Register
+
+OVF equ 2 ; Overflow flag
+IMFB equ 1 ; Input capture / compare match flag B
+IMFA equ 0 ; Input capture / compare match flag A
+
+
+;TIER-Register
+
+OVIE equ 2 ; Overflow interrupt enable
+IMIEB equ 1 ; Input capture / compare match interrupt enable B
+IMIEA equ 0 ; Input capture / compare match interrupt enable A
+
+;-----------------------------------------------------------------------------
+;Programmable Timing Pattern Controller (Sec.11 p.381-406)
+
+TPMR equ $ffa0 ; TPC output mode register
+TPCR equ $ffa1 ; TPC output control register
+NDERB equ $ffa2 ; Next data enable register B
+NDERA equ $ffa3 ; Next data enable register A
+NDRA equ $ffa5 ; Next data register A
+NDRB equ $ffa4 ; Next data register B
+NDRA1 equ $ffa5 ; Next data register A group 1
+NDRA0 equ $ffa7 ; Next data register A group 0
+NDRB3 equ $ffa4 ; Next data register B group 3
+NDRB2 equ $ffa6 ; Next data register B group 2
+
+;-----------------------------------------------------------------------------
+; Watchdog: (Sec.12 p.407-422)
+
+WDT_TCSR equ $ffa8 ; Timer control/status register
+WDT_TCNT equ $ffa9 ; Timer counter
+WDT_RSTCSR equ $ffab ; Reset control/status register
+WDT_RSTCSRW equ $ffaa ; dito, zum setzen wordzugriffe (p.415)
+
+
+;TCSR-Register
+
+WDT_OVF equ 7 ; Overflow Flag
+WDT_WTIT equ 6 ; Timer mode select
+WDT_TME equ 5 ; Timer enable
+WDT_CKS2 equ 2 ; Clock select
+WDT_CKS1 equ 1
+WDT_CKS0 equ 0
+
+
+;RSTCSR-Register
+
+WDT_WRST equ 7 ; Watchdog timer reset
+WDT_RSTOE equ 6 ; Reset output enable
+
+
+;-----------------------------------------------------------------------------
+; serielle Schnittstelle: (Sec.13 p.423-482)
+__defSCI macro Base,Name
+SMR{Name} equ Base ; Serial mode register
+BRR{Name} equ Base+1 ; Bit rate register
+SCR{Name} equ Base+2 ; Serial control register
+TDR{Name} equ Base+3 ; Transmit data register
+SSR{Name} equ Base+4 ; Serial status register
+RDR{Name} equ Base+5 ; Receive data register
+ endm
+
+ __defSCI $ffb0,"0"
+ __defSCI $ffb8,"1"
+
+;SMR-Register
+
+CA equ 7 ; Communication mode
+CHR equ 6 ; Character length
+PE equ 5 ; Parity enable
+OE equ 4 ; Parity mode
+STOP equ 3 ; Stop bit length
+MP equ 2 ; Multiprocessor mode
+CKS1 equ 1 ; Clock select 1
+CKS0 equ 0
+
+
+;SCR-Register
+
+TIE equ 7 ; Transmit interrupt enable
+RIE equ 6 ; Receive " "
+TE equ 5 ; Transmit enable
+RE equ 4 ; Receive enable
+MPIE equ 3 ; Multiprozessor interrupt enable
+TEIE equ 2 ; Transmit-end interrupt enable
+CKE1 equ 1 ; Clock enable 1
+CKE0 equ 0 ;
+
+
+;SSR-Register
+
+TDRE equ 7 ; Transmit data register empty
+RDRF equ 6 ; Receive data register full
+ORER equ 5 ; Overrun error
+FER equ 4 ; Framing error
+PER equ 3 ; Parity error
+TEND equ 2 ; Transmit end
+MPB equ 1 ; Multiprocessor bit
+MPBT equ 0 ; Multiprocessor bit transfer
+
+
+
+;-----------------------------------------------------------------------------
+;Smart Card interface
+
+
+
+;not implemented yet
+
+
+
+;-----------------------------------------------------------------------------
+; A/D-Wandler: (Sec.15 p.505-526)
+
+ADDRA equ $ffe0
+ADDRAH equ $ffe0 ;
+ADDRAL equ $ffe1 ;
+
+ADDRB equ $ffe2
+ADDRBH equ $ffe2
+ADDRBL equ $ffe3
+
+ADDRC equ $ffe4
+ADDRCH equ $ffe4
+ADDRCL equ $ffe5
+
+
+ADDRD equ $ffe6
+ADDRDH equ $ffe6
+ADDRDL equ $ffe7
+
+
+
+ADCSR equ $ffe8 ; Steuer/Statusregister:
+
+ADF equ 7 ; Wandlung abgeschlossen
+ADIE equ 6 ; Interrupt bei Wandelende?
+ADST equ 5 ; Wandlung starten
+SCAN equ 4 ; Scan-Modus
+CKS equ 3 ; Wandlungszeit
+CH2 equ 2 ; Kanalauswahl
+CH1 equ 1
+CH0 equ 0
+
+
+ADCR equ $ffe9 ; A/D control register
+
+TRGE equ 7 ; Trigger enable
+
+
+;-----------------------------------------------------------------------------
+;D/A-Wandler (Sec.16 p.527-533)
+
+DADR0 equ $ffdc ; D/A data register 0
+DADR1 equ $ffdd ; D/A data register 1
+DACR equ $ffde ; D/A control register
+DASTCR equ $ff5c ; D/A standby control register
+
+
+;DACR-Register
+
+DAOE1 equ 7 ; D/A output enable
+DAOE0 equ 6
+DAE equ 5 ; D/A enable
+
+
+;DASTCR-Register
+
+DASTE equ 0 ; D/A standby enable
+
+
+
+
+;-----------------------------------------------------------------------------
+;Clock-Pulse Generator (Sec.19 p.607-614)
+
+DIVCR equ $ff5d ; Divison control register
+
+
+DIV1 equ 1
+DIV0 equ 0
+
+
+
+;-----------------------------------------------------------------------------
+;-----------------------------------------------------------------------------
+ endif
+ restore
+
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
diff --git a/include/reg251.inc b/include/reg251.inc
new file mode 100644
index 0000000..a1c5210
--- /dev/null
+++ b/include/reg251.inc
@@ -0,0 +1,225 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REG251.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für MCS-251-Prozessoren *
+;* *
+;* letzte Änderungen : 30.12.1995 *
+;* *
+;****************************************************************************
+
+ ifndef reg251inc ; verhindert Mehrfacheinbindung
+
+reg251inc equ 1
+
+ if MOMCPUNAME<>"80C251"
+ fatal "Falscher Prozessortyp eingestellt: nur 80C251 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "MCS-251-SFR-Definitionen (C) 1995 Alfred Arnold"
+ message "binde \{MOMCPU}-SFRs ein"
+ endif
+
+;----------------------------------------------------------------------------
+; CPU-Kern:
+; ACC = A = R11
+; B = R10
+; SP/SPH = SPX = DR60
+; DPL/DPH/DPXL = DPX = DR56
+; CY wird von AS selbst benutzt
+
+ACC port 0e0h ; Akkumulator
+
+B port 0f0h ; B-Register
+
+PSW port 0d0h ; 8051-kompatibles PSW
+CARRY bit PSW.7 ; Carry
+AC bit PSW.6 ; Auxiliary-Carry
+F0 bit PSW.5 ; Flag 0
+RS1 bit PSW.4 ; Register-Bank-Auswahl
+RS0 bit PSW.3
+OV bit PSW.2 ; Overflow-Flag
+UD bit PSW.1 ; User-Flag
+P bit PSW.0 ; Parity-Flag
+
+PSW1 port 0d1h ; erweitertes PSW (Bits 2-4,6-7 wie in PSW)
+N bit PSW1.5 ; Negatives Ergebnis?
+Z bit PSW1.1 ; Ergebnis 0 ?
+
+SP port 81h ; Stackpointer (Bit 0..7)
+SPH port 0bdh ; Stackpointer (Bit 8..15)
+DPL port 082h ; Datenzeiger (Bit 0..7)
+DPH port 083h ; Datenzeiger (Bit 8..15)
+DPXL port 084h ; Datenzeiger (Bit 15..23)
+
+PCON port 087h ; Power-Down-Modi u.a.
+SMOD1 bit PCON.7 ; Verdopplung Baudrate in Modus 1..3
+SMOD0 bit PCON.6 ; Umschaltung SCON.7 als FE/SM0
+POF bit PCON.4 ; war Spannung weg ?
+GF1 bit PCON.3 ; General Flag 1
+GF0 bit PCON.2 ; General Flag 0
+PD bit PCON.1 ; in Powerdown-Modus schalten
+IDL bit PCON.0 ; in Idle-Modus schalten
+
+IE port 0a8h ; Interrupt-Freigaben (eigentlich IE0,
+ ; aber das ist schon belegt
+EA bit IE.7 ; generelle Interruptsperre
+EC bit IE.6 ; PCA-Interrupts freigeben
+ET2 bit IE.5 ; Interrupts Timer 2 freigeben
+ES bit IE.4 ; Interrupts ser. Schnittstelle freigeben
+ET1 bit IE.3 ; Interrupt Timer 1 freigeben
+EX1 bit IE.2 ; externen Interrupt 1 freigeben
+ET0 bit IE.1 ; Interrupt Timer 0 freigeben
+EX0 bit IE.0 ; externen Interrupt 0 freigeben
+
+IPH0 port 0b7h ; Interrupt-Prioritäten
+IPL0 port 0b8h
+
+;----------------------------------------------------------------------------
+; Ports mit Extrafunktionen:
+
+P0 port 080h ; Port 0
+
+P1 port 090h ; Port 1
+T2 bit P1.0 ; Ein/Ausgabe Timer 2
+T2EX bit P1.1 ; Trigger Timer 2
+ECI bit P1.2 ; externer Takt PCA
+CEX0 bit P1.3 ; Ein/Ausgabe PCA-Modul 0
+CEX1 bit P1.4 ; Ein/Ausgabe PCA-Modul 1
+CEX2 bit P1.5 ; Ein/Ausgabe PCA-Modul 2
+CEX3 bit P1.6 ; Ein/Ausgabe PCA-Modul 3
+CEX4 bit P1.7 ; Ein/Ausgabe PCA-Modul 4
+
+P2 port 0a0h ; Port 2
+
+P3 port 0b0h ; Port 3
+RXD bit P3.0 ; serielle Empfangsleitung
+TXD bit P3.1 ; serielle Sendeleitung
+INT0 bit P3.2 ; externer Interrupt 0
+INT1 bit P3.3 ; externer Interrupt 1
+T0 bit P3.4 ; Takteingang Timer 0
+T1 bit P3.5 ; Takteingang Timer 1
+WR bit P3.6 ; Leseleitung
+RD bit P3.7 ; Schreibleitung
+
+;----------------------------------------------------------------------------
+; serieller Port:
+
+SCON port 098h ; Konfiguration
+FE bit SCON.7 ; fehlerhaftes Stopbit ?
+SM0 bit SCON.7 ; Modusauswahl
+SM1 bit SCON.6
+SM2 bit SCON.5
+REN bit SCON.4 ; Empfänger freigeben
+TB8 bit SCON.3 ; Sendedatenbit 8
+RB8 bit SCON.2 ; Empfangsdatenbit 8
+TI bit SCON.1 ; Zeichen vollständig versandt ?
+RI bit SCON.0 ; Zeichen vollständig empfangen ?
+
+SBUF port 099h ; Datenregister
+SADEN port 0b9h ; Slave-Adreßmaske
+SADDR port 0a9h ; Slave-Adresse
+
+;----------------------------------------------------------------------------
+; Zähler/Watchdog:
+
+TL0 port 08ah ; Zählwert Zähler 0
+TH0 port 08ch
+TL1 port 08bh ; Zählwert Zähler 1
+TH1 port 08dh
+
+TCON port 088h ; Steuerung Zähler 0/1
+TF1 bit TCON.7 ; Überlauf Timer 1 ?
+TR1 bit TCON.6 ; Timer 1 starten/stoppen
+TF0 bit TCON.5 ; Überlauf Timer 0 ?
+TR0 bit TCON.4 ; Timer 0 starten/stoppen
+IE1 bit TCON.3 ; externer Interrupt 1 augetreten ?
+IT1 bit TCON.2 ; Flanken/Pegeltriggerung ext. Interrupt 1
+IE0 bit TCON.1 ; externer Interrupt 0 augetreten ?
+IT0 bit TCON.0 ; Flanken/Pegeltriggerung ext. Interrupt 0
+
+TMOD port 089h ; Steuerung/Modus Zähler 0/1
+M00 bit TMOD.0 ; Modus Timer 0
+M10 bit TMOD.1
+CT0 bit TMOD.2 ; Zähler/Timerumschaltung Timer 0
+GATE0 bit TMOD.3 ; Freigabemodus Timer 0
+M01 bit TMOD.4 ; Modus Timer 1
+M11 bit TMOD.5
+CT1 bit TMOD.6 ; Zähler/Timerumschaltung Timer 1
+GATE1 bit TMOD.7 ; Freigabemodus Timer 1
+
+
+TL2 port 0cch ; Zählwert Zähler 2
+TH2 port 0cdh
+
+T2CON port 0c8h ; Steuerung Zähler 2
+TF2 bit T2CON.7 ; Überlauf Timer 2 ?
+EXF2 bit T2CON.6 ; Flanke an T2EX aufgetreten ?
+RCLK bit T2CON.5 ; Timer 2 oder 1 für seriellen Empfangstakt nutzen ?
+TCLK bit T2CON.4 ; Timer 2 oder 1 für seriellen Sendetakt nutzen ?
+EXEN2 bit T2CON.3 ; Fang durch T2EX freigeben
+TR2 bit T2CON.2 ; Timer 2 starten/stoppen
+CT2 bit T2CON.1 ; Zähler/Timerumschaltung Timer 2
+CPRL2 bit T2CON.0 ; Fang oder Neuladen durch T2EX
+
+T2MOD port 0c9h ; Steuerung/Modus Zähler 2
+T2OE bit T2MOD.1 ; Ausgabe Timer 2 an T2 freigeben
+DCEN bit T2MOD.0 ; Zählrichtung Timer 2
+
+RCAP2L port 0cah ; Reload/Capture-Wert Timer 2
+RCAP2H port 0cbh
+WDTRST port 0a6h ; Watchdog zurücksetzen
+
+;----------------------------------------------------------------------------
+; Zählerfeld:
+
+CCON port 0d8h ; Steuerregister
+CF bit CCON.7 ; Überlauf PCA ?
+CR bit CCON.6 ; PCA-Timer starten/stoppen
+CCF4 bit CCON.4 ; Hat PCA-Modul 4..0 angesprochen ?
+CCF3 bit CCON.3
+CCF2 bit CCON.2
+CCF1 bit CCON.1
+CCF0 bit CCON.0
+
+CMOD port 0d9h ; Modusregister
+CIDL bit CMOD.7 ; PCA während Idle-Mode abschalten
+WDTE bit CMOD.6 ; Watchdog-Ausgabe an PCA-Modul 4 freigeben
+CPS1 bit CMOD.2 ; PCA-Taktauswahl
+CPS0 bit CMOD.1
+ECF bit CMOD.0 ; Interruptfreigabe
+
+CL port 0e9h ; Zählwert
+CH port 0f9h
+
+__defpcamodule macro Offset,NUM
+CCAPM{NUM} port 0d0h+Offset ; Modusregister
+ECOM{NUM} bit CCAPM0.6 ; Komparator Modul x einschalten
+CAPP{NUM} bit CCAPM0.5 ; Fangfunktion Modul x einschalten (pos. Flanke)
+CAPN{NUM} bit CCAPM0.4 ; Fangfunktion Modul x einschalten (neg. Flanke)
+MAT{NUM} bit CCAPM0.3 ; Interrupt bei Gleichheit Modul x einschalten
+TOG{NUM} bit CCAPM0.2 ; High-Speed-Output-Modus Modul x einschalten
+PWM{NUM} bit CCAPM0.1 ; PWM-Modus Modul x einschalten
+ECCF{NUM} bit CCAPM0.0 ; Interrupts durch CCFx einschalten
+CCAP{NUM}L port 0e0h+Offset ; Vergleichs/Fangwert Modul x
+CCAP{NUM}H port 0f0h+Offset
+ endm
+
+ __defpcamodule 0ah,"0"
+ __defpcamodule 0bh,"1"
+ __defpcamodule 0ch,"2"
+ __defpcamodule 0dh,"3"
+ __defpcamodule 0eh,"4"
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
+
diff --git a/include/reg29k.inc b/include/reg29k.inc
new file mode 100644
index 0000000..daec680
--- /dev/null
+++ b/include/reg29k.inc
@@ -0,0 +1,127 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REG29K.INC *
+;* *
+;* Sinn : enthält Adreßdefinitionen für die 2924x-Prozessoren *
+;* *
+;* letzte Änderungen : 20. 7.1995 *
+;* *
+;****************************************************************************
+
+ ifndef reg29kinc ; verhindert Mehrfacheinbindung
+
+reg29kinc equ 1
+
+ if (MOMCPU<>168512)&&(MOMCPU<>168515)&&(MOMCPU<>168517)
+ fatal "Falscher Prozessortyp eingestellt: nur AM29240, AM29243 oder AM29245 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "AM2924x-SFR-Definitionen (C) 1995 Alfred Arnold"
+ message "binde AM\{MOMCPU}-SFRs ein"
+ endif
+
+;----------------------------------------------------------------------------
+; Registerbasis
+
+RegBase equ 0x80000000
+
+;----------------------------------------------------------------------------
+; ROM-Controller
+
+RMCT equ RegBase+0x00 ; ROM-Steuerregister
+RMCF equ RegBase+0x04 ; ROM-Konfigurationsregister
+
+;----------------------------------------------------------------------------
+; DRAM-Controller
+
+DRCT equ RegBase+0x08 ; DRAM-Steuerregister
+DRCF equ RegBase+0x0c ; DRAM-Konfigurationsregister
+
+;----------------------------------------------------------------------------
+; PIA
+
+PICT0 equ RegBase+0x20 ; PIA Steuerregister 0
+PICT1 equ RegBase+0x24 ; PIA Steuerregister 1
+
+;----------------------------------------------------------------------------
+; DMA-Controller
+
+DMCT0 equ RegBase+0x30 ; Steuerregister Kanal 0
+DMAD0 equ RegBase+0x34 ; Adreßregister Kanal 0
+TAD0 equ RegBase+0x70 ; Queued-Adreßregister Kanal 0
+DMCN0 equ RegBase+0x38 ; Zählregister Kanal 0
+TCN0 equ RegBase+0x3c ; Queued-Zählregister Kanal 0
+DMCT1 equ RegBase+0x40 ; Steuerregister Kanal 1
+DMAD1 equ RegBase+0x44 ; Adreßregister Kanal 1
+TAD1 equ RegBase+0x74 ; Queued-Adreßregister Kanal 1
+DMCN1 equ RegBase+0x48 ; Zählregister Kanal 1
+TCN1 equ RegBase+0x4c ; Queued-Zählregister Kanal 1
+ if MOMCPU<>0x29245
+DMCT2 equ RegBase+0x50 ; Steuerregister Kanal 2
+DMAD2 equ RegBase+0x54 ; Adreßregister Kanal 2
+TAD2 equ RegBase+0x78 ; Queued-Adreßregister Kanal 2
+DMCN2 equ RegBase+0x58 ; Zählregister Kanal 2
+TCN2 equ RegBase+0x5c ; Queued-Zählregister Kanal 2
+DMCT3 equ RegBase+0x60 ; Steuerregister Kanal 3
+DMAD3 equ RegBase+0x64 ; Adreßregister Kanal 3
+TAD3 equ RegBase+0x7c ; Queued-Adreßregister Kanal 3
+DMCN3 equ RegBase+0x68 ; Zählregister Kanal 3
+TCN3 equ RegBase+0x6c ; Queued-Zählregister Kanal 3
+ endif
+
+;----------------------------------------------------------------------------
+; PIO
+
+POCT equ RegBase+0xd0 ; PIO-Steuerregister
+PIN equ RegBase+0xd4 ; PIO-Eingangsregister
+POUT equ RegBase+0xd8 ; PIO-Ausgangsregister
+POEN equ RegBase+0xdc ; PIO-Richtungssteuerung
+
+;----------------------------------------------------------------------------
+; Parallelport
+
+PPCT equ RegBase+0xc0 ; Steuerregister
+PPST equ RegBase+0xc8 ; Statusrtegister
+PPDT equ RegBase+0xc4 ; Datenregister
+
+;----------------------------------------------------------------------------
+; serielle Ports
+
+SPCTA equ RegBase+0x80 ; Steuerregister Kanal A
+SPSTA equ RegBase+0x84 ; Statusregister Kanal A
+SPTHA equ RegBase+0x88 ; Senderegister Kanal A
+SPRBA equ RegBase+0x8c ; Empfangsregister Kanal A
+BAUDA equ RegBase+0x90 ; Baudratenregister Kanal A
+ if MOMCPU<>0x29245
+SPCTB equ RegBase+0xa0 ; Steuerregister Kanal A
+SPSTB equ RegBase+0xa4 ; Statusregister Kanal A
+SPTHB equ RegBase+0xa8 ; Senderegister Kanal A
+SPRBB equ RegBase+0xac ; Empfangsregister Kanal A
+BAUDB equ RegBase+0xb0 ; Baudratenregister Kanal A
+ endif
+
+;----------------------------------------------------------------------------
+; Video-Interface
+
+ if MOMCPU<>0x29243
+VCT equ RegBase+0xe0 ; Steuerregister
+TOP equ RegBase+0xe4 ; Zeilennummer oberer Rand
+SIDE equ RegBase+0xe8 ; Spaltennummer linker/rechter Rand
+VDT equ RegBase+0xec ; Datenregister
+ endif
+
+;----------------------------------------------------------------------------
+; Interrupt-Steuerung
+
+ICT equ RegBase+0x28 ; Steuerregister
+IMASK equ RegBase+0x2c ; Maskenregister
+
+
+ endif
+
+ restore
diff --git a/include/reg53x.inc b/include/reg53x.inc
new file mode 100644
index 0000000..9a382b8
--- /dev/null
+++ b/include/reg53x.inc
@@ -0,0 +1,344 @@
+ 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
diff --git a/include/reg683xx.inc b/include/reg683xx.inc
new file mode 100644
index 0000000..f2dd8ef
--- /dev/null
+++ b/include/reg683xx.inc
@@ -0,0 +1,700 @@
+ save
+ listing off ; kein Listing über diesen File
+ macexp off ; spart noch ein bißchen Zeit
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei REG96.INC *
+;* *
+;* Sinn : enthält Registeradreßdefinitionen für 68332 und 68340 *
+;* *
+;* letzte Änderungen : 18.11.1994 *
+;* *
+;****************************************************************************
+
+ ifndef reg68332inc ; verhindert Mehrfacheinbindung
+
+reg6833xinc equ 1
+
+ if (MOMCPUNAME<>"68332")&&(MOMCPUNAME<>"68340")&&(MOMCPUNAME<>"68360")
+ fatal "Falscher Prozessortyp eingestellt: nur 68332 oder 68340 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "CPU32-Register-Definitionen (C) 1994 Alfred Arnold"
+ message "binde \{MOMCPU}-Register ein"
+ endif
+
+;-----------------------------------------------------------------------------
+; Basis ist entweder $fffa00 oder $7fa000, das muß man vorher setzen
+; (oder mit dem Default leben :-)
+; beim 68340 kann man ganz frei wählen
+; Da der 68332 A31..A24 nicht herausführt, könnte man evtl. auch die Register
+; ab $fffffa00 erreichen und kurze Adressen verwenden. Das müßte man mal
+; ausprobieren...alternativ kann man man aber auch die Basis auf 0 setzen,
+; bevor man diese Datei einbindet und dann die Symbole registerrelativ
+; verwenden.
+
+ ifndef SIMBase
+ if MOMCPU=$68332
+SIMBase equ $fffa00
+ elseif
+SIMBase equ $000000
+ endif
+ endif
+
+;=============================================================================
+; Da sich 68360, 68340 und 68332 sehr deutlich im Registermodell unterscheiden,
+; habe ich mir keine Mühe gemacht, Register für Register auseinanderzufieseln,
+; was gemeinsam ist und was nicht
+
+ switch MOMCPUNAME
+
+;-----------------------------------------------------------------------------
+
+ case "68360"
+
+;-----------------------------------------------------------------------------
+
+MBAR equ $0003ff00 ; [L] Startadresse Peripherie (CPU-Space!)
+MBARE equ $0003ff04 ; [L] Sperrung/Freigabe MBAR
+
+RegBase equ SIMBase+$1000 ; Startadresse Rgister
+
+MCR equ RegBase+$0000 ; [L] Modulkonfiguration SIM
+
+AVR equ RegBase+$0008 ; [B] Freigabe Autovektor-Interrupts
+RSR equ RegBase+$0009 ; [B] Reset-Status
+CLK0CR equ RegBase+$000c ; [B] Steuerung Taktausgang 2 & 1
+PLLCR equ RegBase+$0010 ; [W] PLL-Steuerung
+CDVCR equ RegBase+$0014 ; [W] Steuerung "langsamer" Takt
+PEPAR equ RegBase+$0016 ; [W] Zuordnung der I/O-Pins Port E
+SYPCR equ RegBase+$0022 ; [B] Systemmonitore, Bustimimg
+SWIV equ RegBase+$0023 ; [B] Interruptvektor Watchdog
+PICR equ RegBase+$0026 ; [W] Interruptebene+ -vektor period. Interrupt
+PITR equ RegBase+$002a ; [W] Zählwert & Vorteiler period. Interrupt
+SWSR equ RegBase+$002f ; [B] Watchdog rücksetzen
+BKAR equ RegBase+$0030 ; [L] Breakpoint-Adresse
+BKCR equ RegBase+$0034 ; [L] Breakpoint-Steuerung
+
+GMR equ RegBase+$0040 ; [L] globale Steuerung Memory-Controller
+MSTAT equ RegBase+$0044 ; [W] Status Memory-Controller
+BR0 equ RegBase+$0050 ; [L] SRAM/DRAM-Basis CS0
+OR0 equ RegBase+$0054 ; [L] Optionen DRAM/SRAM CS0
+BR1 equ RegBase+$0060 ; [L] SRAM/DRAM-Basis CS1
+OR1 equ RegBase+$0064 ; [L] Optionen DRAM/SRAM CS1
+BR2 equ RegBase+$0070 ; [L] SRAM/DRAM-Basis CS2
+OR2 equ RegBase+$0074 ; [L] Optionen DRAM/SRAM CS2
+BR3 equ RegBase+$0080 ; [L] SRAM/DRAM-Basis CS3
+OR3 equ RegBase+$0084 ; [L] Optionen DRAM/SRAM CS3
+BR4 equ RegBase+$0090 ; [L] SRAM/DRAM-Basis CS4
+OR4 equ RegBase+$0094 ; [L] Optionen DRAM/SRAM CS4
+BR5 equ RegBase+$00a0 ; [L] SRAM/DRAM-Basis CS5
+OR5 equ RegBase+$00a4 ; [L] Optionen DRAM/SRAM CS5
+BR6 equ RegBase+$00b0 ; [L] SRAM/DRAM-Basis CS6
+OR6 equ RegBase+$00b4 ; [L] Optionen DRAM/SRAM CS6
+BR7 equ RegBase+$00c0 ; [L] SRAM/DRAM-Basis CS7
+OR7 equ RegBase+$00c4 ; [L] Optionen DRAM/SRAM CS7
+
+;-----------------------------------------------------------------------------
+; Communications Controller:
+
+RAMBase equ SIMBase ; [ ] RAM-Basisadresse
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; IDMA:
+
+IDMA1Base equ RAMBase+$0e70
+IDMA2Base equ RAMBase+$0f70
+
+ICCR equ RegBase+$0500 ; [W] Konfiguration IDMA-Kanäle
+CMR1 equ RegBase+$0504 ; [W] Modus IDMA1
+CMR2 equ RegBase+$0526 ; [W] Modus IDMA2
+__defidma macro NAME,Adr,IDMABase
+SAPR{NAME} equ Adr ; [L] Quelladresse bei Speicherkopieraktionen
+DAPR{NAME} equ Adr+4 ; [L] Zieladresse " "
+BCR{NAME} equ Adr+8 ; [L] Zählregister IDMA
+FCR{NAME} equ Adr+12 ; [B] Funktionscodes
+CMAR{NAME} equ Adr+14 ; [B] Kanalmaske
+CSR{NAME} equ Adr+16 ; [B] Kanalstatus IDMA
+IDMA{NAME}_IBASE equ IDMABase+0 ; [W] Basisadresse Deskriptor
+IDMA{NAME}_IBPTR equ IDMABase+0 ; [W] Pointer Deskriptor
+IDMA{NAME}_ISTATE equ IDMABase+0 ; [L] int. Status
+IDMA{NAME}_ITEMP equ IDMABase+0 ; [L] temp. Speicher
+ endm
+ __defidma "1",RegBase+$508
+ __defidma "2",RegBase+$528
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; SDMA:
+
+SDSR equ RegBase+$051c ; [B] Status SDMA
+SDCR equ RegBase+$051e ; [W] Konfiguration SDMA-Kanäle
+SDAR equ RegBase+$0520 ; [L] SDMA-Adreßregister
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; CPIC:
+
+CICR equ RegBase+$0540 ; [L] Interrupt-Konfiguration
+CIPR equ RegBase+$0544 ; [L] Interrupt-Anzeigen
+CIMR equ RegBase+$0548 ; [L] Interrupt-Masken
+CISR equ RegBase+$054c ; [L] Anzeige, ob Interrupts in Bearbeitung
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; PIO:
+
+PADIR equ RegBase+$0550 ; [W] Datenrichtungsregister Port A
+PAPAR equ RegBase+$0552 ; [W] Zuordnung Port A
+PAODR equ RegBase+$0554 ; [W] Steuerbits Port A als open drain
+PADAT equ RegBase+$0556 ; [W] Datenregister Port A
+
+PCDIR equ RegBase+$0560 ; [W] Datenrichtungsregister Port C
+PCPAR equ RegBase+$0562 ; [W] Zuordnung Port C
+PCSO equ RegBase+$0564 ; [W] Special Options Port C
+PCDAT equ RegBase+$0566 ; [W] Datenregister Port C
+PCINT equ RegBase+$0568 ; [W] Interruptsteuerung Port C
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; TIMER:
+
+TimerBase equ RAMBase+$0db0
+
+TGCR equ RegBase+$0560 ; [W] globale Konfiguration Timer
+TMR1 equ RegBase+$0590 ; [W] Modus Timer 1
+TRR1 equ RegBase+$0594 ; [W] Referenzwert Timer 1
+TCR1 equ RegBase+$0598 ; [W] Fangwert Timer 1
+TCN1 equ RegBase+$059c ; [W] Zählwert Timer 1
+TER1 equ RegBase+$05b0 ; [W] Ereignismeldung Timer 1
+TMR2 equ RegBase+$0592
+TRR2 equ RegBase+$0596
+TCR2 equ RegBase+$059a
+TCN2 equ RegBase+$059e
+TER2 equ RegBase+$05b2
+TMR3 equ RegBase+$05a0
+TRR3 equ RegBase+$05a4
+TCR3 equ RegBase+$05a8
+TCN3 equ RegBase+$05ac
+TER3 equ RegBase+$05b4
+TMR4 equ RegBase+$05a2
+TRR4 equ RegBase+$05a6
+TCR4 equ RegBase+$05aa
+TCN4 equ RegBase+$05ae
+TER4 equ RegBase+$05b6
+TIMER_TM_BASE equ TimerBase+$00 ; [W] Basisadresse Tabelle
+TIMER_TM_ptr equ TimerBase+$02 ; [W] Zeiger Tabelle
+TIMER_R_TMR equ TimerBase+$04 ; [W] Modus
+TIMER_R_TMV equ TimerBase+$06 ; [W] Valid-Register
+TIMER_TM_cmd equ TimerBase+$08 ; [L] Kommandoregister
+TIMER_TM_cnt equ TimerBase+$0c ; [L] interner Zähler
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; CP:
+
+MiscBase equ RAMBase+$0cb0
+
+CR equ RegBase+$05c0 ; [W] Kommandoregister
+RCCR equ RegBase+$05c4 ; [W] Konfiguration RISC-Controller
+RTER equ RegBase+$05d6 ; [W] Timer-Events
+RTMR equ RegBase+$05da ; [W] Timer-Maske
+CP_REV_num equ MiscBase ; [W] Revisionsnummer Mikrocode
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; BRG:
+
+BRGC1 equ RegBase+$05f0 ; [L] Konfiguration Baudratengenerator 1
+BRGC2 equ RegBase+$05f4
+BRGC3 equ RegBase+$05f8
+BRGC4 equ RegBase+$05fc
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; SCC:
+
+SCC1Base equ RAMBase+$0c00
+SCC2Base equ RAMBase+$0d00
+SCC3Base equ RAMBase+$0e00
+SCC4Base equ RAMBase+$0f00
+
+__defscc macro NAME,Adr,SCCBase
+GSMR_L{NAME} equ Adr+0 ; [Q] Modus
+GSMR_H{NAME} equ Adr+4
+PSMR{NAME} equ Adr+8 ; [W] protokollspez. Modus
+TODR{NAME} equ Adr+12 ; [W] Sendestart erzwingen
+DSR{NAME} equ Adr+14 ; [W] Synchronisationsmuster SCCx
+SCCE{NAME} equ Adr+16 ; [W] Ereignisregister UART
+SCCM{NAME} equ Adr+20 ; [W] UART Ereignismaske
+SCCS{NAME} equ Adr+23 ; [B] UART Status
+SCC{NAME}_RBASE equ SCCBase+$00 ; [W] Startadresse Empfangspuffer
+SCC{NAME}_TBASE equ SCCBase+$02 ; [W] Startadresse Sendepuffer
+SCC{NAME}_RFCR equ SCCBase+$04 ; [B] Adreßraum Empfangen
+SCC{NAME}_TFCR equ SCCBase+$05 ; [B] Adreßraum Senden
+SCC{NAME}_MRBLR equ SCCBase+$06 ; [W] Länge Empfangspuffer
+SCC{NAME}_RSTATE equ SCCBase+$08 ; [L] Status Empfänger
+SCC{NAME}_RBPTR equ SCCBase+$10 ; [W] Adreßzeiger Empfangen
+SCC{NAME}_TSTATE equ SCCBase+$18 ; [L] Status Sender
+SCC{NAME}_TBPTR equ SCCBase+$20 ; [W] Adreßzeiger Senden
+SCC{NAME}_RCRC equ SCCBase+$28 ; [L] Empfangs-CRC
+SCC{NAME}_TCRC equ SCCBase+$2c ; [L] Sende-CRC
+SCC{NAME}_MAX_IDL equ SCCBase+$38 ; [W] --UART-- Maximalzahl Idle-Zeichen
+SCC{NAME}_IDLC equ SCCBase+$3a ; [W] temp. Idle-Zähler
+SCC{NAME}_BRKCR equ SCCBase+$3c ; [W] Anzahl Sende-Breaks
+SCC{NAME}_PAREC equ SCCBase+$3e ; [W] Paritätsfehlerzähler
+SCC{NAME}_FRMEC equ SCCBase+$40 ; [W] Rahmungs-Fehlerzähler
+SCC{NAME}_NOSEC equ SCCBase+$42 ; [W] Rauschzähler
+SCC{NAME}_BRKEC equ SCCBase+$44 ; [W] Break-Bedingung
+SCC{NAME}_BRKLN equ SCCBase+$46 ; [W] Länge des letzten Breaks
+SCC{NAME}_UADDR1 equ SCCBase+$48 ; [W] Slave-Adressen
+SCC{NAME}_UADDR2 equ SCCBase+$4a ; [W]
+SCC{NAME}_RTEMP equ SCCBase+$4c ; [W] temp. Speicher
+SCC{NAME}_TOSEQ equ SCCBase+$4e ; [W] out-of-sequence Zeichen
+SCC{NAME}_CHARACTER1 equ SCCBase+$50 ; [W] Zeichen, die Interrupts erzeugen
+SCC{NAME}_CHARACTER2 equ SCCBase+$52 ; [W]
+SCC{NAME}_CHARACTER3 equ SCCBase+$54 ; [W]
+SCC{NAME}_CHARACTER4 equ SCCBase+$56 ; [W]
+SCC{NAME}_CHARACTER5 equ SCCBase+$58 ; [W]
+SCC{NAME}_CHARACTER6 equ SCCBase+$5a ; [W]
+SCC{NAME}_CHARACTER7 equ SCCBase+$5c ; [W]
+SCC{NAME}_CHARACTER8 equ SCCBase+$5e ; [W]
+SCC{NAME}_RCCM equ SCCBase+$60 ; [W] Maske Empfangszeichen
+SCC{NAME}_RCCR equ SCCBase+$62 ; [W] Empfangszeichen
+SCC{NAME}_RLBC equ SCCBase+$64 ; [W] letztes Break-Zeichen
+SCC{NAME}_C_MASK equ SCCBase+$34 ; [L] --HDLC-- CRC-Polynom
+SCC{NAME}_C_PRES equ SCCBase+$38 ; [L] CRC-Startwert
+SCC{NAME}_DISFC equ SCCBase+$3c ; [W] Zähler für verworfene Rahmen
+SCC{NAME}_CRCEC equ SCCBase+$3e ; [W] Zähler für CRC-Fehler
+SCC{NAME}_ABTSC equ SCCBase+$40 ; [W] Zähler für Abbrüche
+SCC{NAME}_NMARC equ SCCBase+$42 ; [W] Zähler für unpassende Adressen
+SCC{NAME}_RETRC equ SCCBase+$44 ; [W] Zähler für Retransmissionen
+SCC{NAME}_MFLR equ SCCBase+$46 ; [W] Maximalrahmenlänge
+SCC{NAME}_MAX_cnt equ SCCBase+$48 ; [W] Längenzähler
+SCC{NAME}_RFTHR equ SCCBase+$4a ; [W] Schwelle für empfangene Rahmenzahl
+SCC{NAME}_RFCNT equ SCCBase+$4c ; [W] empfangene Rahmen
+SCC{NAME}_HMASK equ SCCBase+$4e ; [W] Adreßmaske
+SCC{NAME}_HADDR1 equ SCCBase+$50 ; [W] Adressen
+SCC{NAME}_HADDR2 equ SCCBase+$52 ; [W]
+SCC{NAME}_HADRR3 equ SCCBase+$54 ; [W]
+SCC{NAME}_HADDR4 equ SCCBase+$56 ; [W]
+SCC{NAME}_TMP equ SCCBase+$58 ; [W] Temporärspeicher
+SCC{NAME}_TMP_MB equ SCCBase+$5a ; [W] "
+SCC{NAME}_CRCC equ SCCBase+$34 ; [L] --BISYNC-- temp. Wert CRC
+SCC{NAME}_PRCRC equ SCCBase+$38 ; [W] Empfangs-Vorgabe-CRC
+SCC{NAME}_PTCRC equ SCCBase+$3a ; [W] Sende-Vorgabe-CRC
+SCC{NAME}_B_PAREC equ SCCBase+$3c ; [W] Zähler Empfangs-Paritäts-Fehler
+SCC{NAME}_BSYNC equ SCCBase+$3e ; [W] SYNC-Zeichen
+SCC{NAME}_BDLE equ SCCBase+$40 ; [W] DLE-Zeichen
+SCC{NAME}_B_CHARACTER1 equ SCCBase+$42 ; [W] Steuerzeichen
+SCC{NAME}_B_CHARACTER2 equ SCCBase+$44 ; [W]
+SCC{NAME}_B_CHARACTER3 equ SCCBase+$46 ; [W]
+SCC{NAME}_B_CHARACTER4 equ SCCBase+$48 ; [W]
+SCC{NAME}_B_CHARACTER5 equ SCCBase+$4a ; [W]
+SCC{NAME}_B_CHARACTER6 equ SCCBase+$4c ; [W]
+SCC{NAME}_B_CHARACTER7 equ SCCBase+$4e ; [W]
+SCC{NAME}_B_CHARACTER8 equ SCCBase+$50 ; [W]
+SCC{NAME}_B_RCCM equ SCCBase+$52 ; [W] Empfangssteuerzeichenmaske
+SCC{NAME}_CRC_P equ SCCBase+$30 ; [L] --Transparent-- CRC-Vorgabe
+SCC{NAME}_CRC_C equ SCCBase+$34 ; [L] CRC-Konstante
+SCC{NAME}_E_C_PRES equ SCCBase+$30 ; [L] --Ethernet-- CRC-Vorgabe
+SCC{NAME}_E_C_MASK equ SCCBase+$34 ; [L] CRC-Maske
+SCC{NAME}_E_CRCEC equ SCCBase+$38 ; [L] CRC-Fehlerzähler
+SCC{NAME}_ALEC equ SCCBase+$3c ; [L] Alignment-Fehlerzähler
+SCC{NAME}_E_DISFC equ SCCBase+$40 ; [L] Zähler verworfene Rahmen
+SCC{NAME}_PADS equ SCCBase+$44 ; [W] Padding-Zeichen kurze Rahmen
+SCC{NAME}_RET_Lim equ SCCBase+$46 ; [W] Maximalzahl Retries
+SCC{NAME}_RET_cnt equ SCCBase+$48 ; [W] Momentanzahl Retries
+SCC{NAME}_E_MFLR equ SCCBase+$4a ; [W] Maximalrahmenlänge
+SCC{NAME}_MINFLR equ SCCBase+$4c ; [W] Minimalrahmenlänge
+SCC{NAME}_MAXD1 equ SCCBase+$4e ; [W] Maximallänge DMA1
+SCC{NAME}_MAXD2 equ SCCBase+$50 ; [W] Maximallänge DMA2
+SCC{NAME}_MAXD equ SCCBase+$52 ; [W] Rx Max DMA
+SCC{NAME}_DMA_cnt equ SCCBase+$54 ; [W] DMA-Zähler Empfang
+SCC{NAME}_MAX_b equ SCCBase+$56 ; [W] Max BD Byte Count
+SCC{NAME}_GADDR1 equ SCCBase+$58 ; [W] Group Address Filter
+SCC{NAME}_GADDR2 equ SCCBase+$5a ; [W]
+SCC{NAME}_GADDR3 equ SCCBase+$5c ; [W]
+SCC{NAME}_GADDR4 equ SCCBase+$5e ; [W]
+SCC{NAME}_TBUF0.data0 equ SCCBase+$60 ; [L] Save Areas - current frame
+SCC{NAME}_TBUF0.data1 equ SCCBase+$64 ; [L]
+SCC{NAME}_TBUF0.rba0 equ SCCBase+$68 ; [L]
+SCC{NAME}_TBUF0.crc equ SCCBase+$6c ; [L]
+SCC{NAME}_TBUF0.bcnt equ SCCBase+$70 ; [W]
+SCC{NAME}_PADDR1_H equ SCCBase+$72 ; [W] phys. Adresse
+SCC{NAME}_PADDR1_M equ SCCBase+$74 ; [W]
+SCC{NAME}_PADDR1_L equ SCCBase+$76 ; [W]
+SCC{NAME}_P_Per equ SCCBase+$78 ; [W] Persistenz
+SCC{NAME}_RFBD_ptr equ SCCBase+$7a ; [W] Rx First BD Counter
+SCC{NAME}_TFBD_ptr equ SCCBase+$7c ; [W] Tx First BD Pointer
+SCC{NAME}_TLBD_ptr equ SCCBase+$7e ; [W] Tx Last BD Pointer
+SCC{NAME}_TBUF1.data0 equ SCCBase+$80 ; [L] Save Areas - next frame
+SCC{NAME}_TBUF1.data1 equ SCCBase+$84 ; [L]
+SCC{NAME}_TBUF1.rba0 equ SCCBase+$88 ; [L]
+SCC{NAME}_TBUF1.crc equ SCCBase+$8c ; [L]
+SCC{NAME}_TBUF1.bcnt equ SCCBase+$90 ; [W]
+SCC{NAME}_TX_len equ SCCBase+$92 ; [W] Tx Frame Length Counter
+SCC{NAME}_IADDR1 equ SCCBase+$94 ; [W] Individual address filters
+SCC{NAME}_IADDR2 equ SCCBase+$96 ; [W]
+SCC{NAME}_IADDR3 equ SCCBase+$98 ; [W]
+SCC{NAME}_IADDR4 equ SCCBase+$9a ; [W]
+SCC{NAME}_BOFF_CNT equ SCCBase+$9c ; [W] Backoff Zähler
+SCC{NAME}_TADDR_H equ SCCBase+$9e ; [W] temp. Adresse
+SCC{NAME}_TADDR_M equ SCCBase+$9a ; [W]
+SCC{NAME}_TADDR_L equ SCCBase+$a0 ; [W]
+ endm
+ __defscc "1",RegBase+$0600,SCC1Base
+ __defscc "2",RegBase+$0620,SCC2Base
+ __defscc "3",RegBase+$0640,SCC3Base
+ __defscc "4",RegBase+$0660,SCC4Base
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; SMC:
+
+SMC1Base equ RAMBase+$0e80
+SMC2Base equ RAMBase+$0f80
+
+__defsmc macro NAME,Adr,SMCBase
+SMCMR{NAME} equ Adr+0 ; [W] Transparentmodus
+SMCE{NAME} equ Adr+4 ; [B] Ereignisregister
+SMCM{NAME} equ Adr+8 ; [W] Modus
+SMC{NAME}_RBASE equ SMCBase+$00 ; [W] Empfangspufferdeskriptoradresse
+SMC{NAME}_TBASE equ SMCBase+$02 ; [W] Sendepufferdeskriptoradresse
+SMC{NAME}_RFCR equ SMCBase+$04 ; [B] Empfangs-Funktionscode
+SMC{NAME}_TFCR equ SMCBase+$05 ; [B] Sende-Funktionscode
+SMC{NAME}_MRBLR equ SMCBase+$06 ; [W] Maximallänge Empfangspuffer
+SMC{NAME}_RSTATE equ SMCBase+$08 ; [L] interner Empfängerstatus
+SMC{NAME}_RBPTR equ SMCBase+$10 ; [W] Rx Buffer descriptor pointer
+SMC{NAME}_TSTATE equ SMCBase+$18 ; [L] interner Senderstatus
+SMC{NAME}_TBPTR equ SMCBase+$20 ; [W] Tx Buffer Descriptor Pointer
+SMC{NAME}_MAX_IDL equ SMCBase+$28 ; [W] --UART-- MAximalzahl Idle-Zeichen
+SMC{NAME}_IDLC equ SMCBase+$28 ; [W] Idle-Zähler
+SMC{NAME}_BRKLN equ SMCBase+$28 ; [W] Länge letztes Break-Zeichen
+SMC{NAME}_BRKEC equ SMCBase+$28 ; [W] Receive Break Condition Counter
+SMC{NAME}_BRKCR equ SMCBase+$28 ; [W] Sende-Break-Zähler
+SMC{NAME}_R_mask equ SMCBase+$28 ; [W] temp. Bitmaske
+SMC{NAME}_M_RxBD equ SMCBase+$00 ; [W] --GCI-- Monitor Channel Rx
+SMC{NAME}_M_TxBD equ SMCBase+$02 ; [W] Monitor Channel Tx
+SMC{NAME}_CI_RxBD equ SMCBase+$04 ; [W] C/I Channel Rx
+SMC{NAME}_CI_TxBD equ SMCBase+$06 ; [W] C/I Channel Tx
+SMC{NAME}_M_RxD equ SMCBase+$0c ; [W] Monitor Rx Data
+SMC{NAME}_M_TxD equ SMCBase+$0e ; [W] Monitor Tx Data
+SMC{NAME}_CI_RxD equ SMCBase+$10 ; [W] C/I Rx Data
+SMC{NAME}_CI_TxD equ SMCBase+$12 ; [W] C/I Tx Data
+ endm
+ __defsmc "1",RegBase+$0682,SMC1Base
+ __defsmc "2",RegBase+$0692,SMC2Base
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; SPI:
+
+SPIBase equ RAMBase+$0d80
+
+SPMODE equ RegBase+$06a0 ; [W] Modusregister
+SPIE equ RegBase+$06a6 ; [B] Ereignisregister
+SPIM equ RegBase+$06aa ; [B] Maskenregister
+SPICOM equ RegBase+$06ad ; [B] Kommandoregister
+SPI_RBASE equ SPIBase+$00 ; [W] Empfangsdeskriptoradresse
+SPI_TBASE equ SPIBase+$02 ; [W] Sendedeskriptoradresse
+SPI_RFCR equ SPIBase+$04 ; [B] Empfangsfunktionscode
+SPI_TFCR equ SPIBase+$05 ; [B] Sendefunktionscode
+SPI_MRBLR equ SPIBase+$06 ; [W] Maximallänge Empfangspuffer
+SPI_RSTATE equ SPIBase+$08 ; [L] Empfängerstatus
+SPI_RBPTR equ SPIBase+$10 ; [W] mom. aktiver Empfangsdeskriptor
+SPI_TSTATE equ SPIBase+$18 ; [L] Senderstatus
+SPI_TBPTR equ SPIBase+$20 ; [W] mom. aktiver Sendedeskriptor
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; PIP:
+
+PIPBase equ SMC2Base
+
+PIPC equ RegBase+$06b2 ; [W] Konfigurationsregister
+PTPR equ RegBase+$06b6 ; [W] Timing-Parameter
+PIPE equ SMCE2 ; [B] Ereignisregister, überlagert!!
+PBDIR equ RegBase+$06b8 ; [L] Datenrichtungsregister Port B
+PBPAR equ RegBase+$06bc ; [L] Zuordnung Port B
+PBODR equ RegBase+$06c2 ; [W] Steuerbits Port B als open drain
+PBDAT equ RegBase+$06c4 ; [L] Datenregister Port B
+PIP_RBASE equ PIPBase+$00 ; [W] Empfangsdeskriptoradresse
+PIP_TBASE equ PIPBase+$02 ; [W] Sendedeskriptoradresse
+PIP_CFCR equ PIPBase+$04 ; [B] Funktionscode
+PIP_SMASK equ PIPBase+$05 ; [B] Statusmaske
+PIP_MRBLR equ PIPBase+$06 ; [W] Maximallänge Empfangspuffer
+PIP_RSTATE equ PIPBase+$08 ; [L] Empfängerstatus
+PIP_R_PTR equ PIPBase+$0c ; [L] int. Empfangsdatenzeiger
+PIP_RBPTR equ PIPBase+$10 ; [W] mom. Empfangsdeskriptor
+PIP_R_CNT equ PIPBase+$12 ; [W] Empfangs-Byte-Zähler
+PIP_RTEMP equ PIPBase+$14 ; [L] temp. Speicher
+PIP_TSTATE equ PIPBase+$18 ; [L] Senderstatus
+PIP_T_PTR equ PIPBase+$1c ; [L] mom. Sendedatenzeiger
+PIP_TBPTR equ PIPBase+$20 ; [W] mom. Sendedeskriptor
+PIP_T_CNT equ PIPBase+$22 ; [W] Sende-Byte-Zähler
+PIP_TTEMP equ PIPBase+$24 ; [L] temp. Speicher
+PIP_MAX_SL equ PIPBase+$28 ; [W] max. Ruhezeit
+PIP_SL_CNT equ PIPBase+$2a ; [W] Ruhezähler
+PIP_CHARACTER1 equ PIPBase+$2c ; [W] Steuerzeichen
+PIP_CHARACTER2 equ PIPBase+$2e
+PIP_CHARACTER3 equ PIPBase+$30
+PIP_CHARACTER4 equ PIPBase+$32
+PIP_CHARACTER5 equ PIPBase+$34
+PIP_CHARACTER6 equ PIPBase+$36
+PIP_CHARACTER7 equ PIPBase+$38
+PIP_CHARACTER8 equ PIPBase+$3a
+PIP_RCCM equ PIPBase+$3c ; [W] Steuerzeichenmaske
+PIP_RCCR equ PIPBase+$3e ; [W] Steuerzeichenregister
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; SI:
+
+SIMODE equ RegBase+$06e0 ; [L] Modus serielles Interface
+SIGMR equ RegBase+$06e4 ; [B] globale Moduseinstellung
+SISTR equ RegBase+$06e6 ; [B] Adresse Router-RAM
+SICMR equ RegBase+$06e7 ; [B] Kommandoregister serielles Interface
+SICR equ RegBase+$06ec ; [L] Taktverteilung serielles Interface
+SIRP equ RegBase+$06f2 ; [L] RAM-Zeiger
+SIRAM equ RegBase+$0700 ; [ ] Routing-RAM
+
+;=============================================================================
+
+ case "68340"
+
+;-----------------------------------------------------------------------------
+; die Kommentare fallen hier evtl. etwas spartanischer aus, weil der Technical
+; Summary von Motorola für den 68340 noch nicht so ins Detail geht.
+
+SIMBAR equ $0003ff00 ; [L] Einstellung Peripherieadressen
+
+MCR equ SIMBase+$000 ; [W] Modulkonfiguration SIM
+
+SYNCR equ SIMBase+$004 ; [W] Steuerung Taktfrequenz-Synthi
+AVR equ SIMBase+$006 ; [B] Auto-Vektoren
+RSR equ SIMBase+$007 ; [B] Reset Status
+
+PORTA equ SIMBase+$011 ; [B] Datenregister Port A
+DDRA equ SIMBase+$013 ; [B] Datenrichtungsregister Port A
+PPRA1 equ SIMBase+$015 ; [B] Festlegung der Funktionen der...
+PPRA2 equ SIMBase+$017 ; [B] ...Leitungen von Port A
+PORTB equ SIMBase+$019 ; [B] Datenregister Port B
+PORTB1 equ SIMBase+$01b ; [B] dito
+DDRB equ SIMBase+$01d ; [B] Datenrichtungsregister Port B
+PPRARB equ SIMBase+$01f ; [B] Festlegung Port B-Leitungen
+SWIV equ SIMBase+$020 ; [B] Software-Vektoren
+SYPCR equ SIMBase+$021 ; [B] Systemschutz
+PICR equ SIMBase+$022 ; [W] Steuerung PIT
+PITR equ SIMBase+$024 ; [W] Datenregister PIT
+SWSR equ SIMBase+$027 ; [B] Software Service
+
+;-----------------------------------------------------------------------------
+; Chip Selects:
+
+__cnt set 0
+ rept 4
+__name set "\{__CNT}"
+CS{__name}AM1 set SIMBase+$040+__cnt*8 ; [W] Adressmaske 1 CSn
+CS{__name}AM2 set SIMBase+$042+__cnt*8 ; [W] Adressmaske 2 CSn
+CS{__name}BA1 set SIMBase+$044+__cnt*8 ; [W] Basisadresse 1 CSn
+CS{__name}BA2 set SIMBase+$046+__cnt*8 ; [W] Basisadresse 2 CSn
+__cnt set __cnt+1
+ endm
+
+;-----------------------------------------------------------------------------
+; DMA:
+
+DMABase equ SIMBase+$780
+DMAMCR1 equ DMABase+$000 ; [W] Modulkonfiguration DMA-Kanal 1
+DMAINTR1 equ DMABase+$004 ; [W] Interrupts DMA-Kanal 1
+DMACCR1 equ DMABase+$008 ; [W] Steuerregister DMA-Kanal 1
+DMACSR1 equ DMABase+$00a ; [B] Statusregister DMA-Kanal 1
+DMAFCR1 equ DMABase+$00b ; [B] Funktionscoderegister DMA-Kanal 1
+DMASAR1 equ DMABase+$00c ; [L] Quelladresse DMA-Kanal 1
+DMADAR1 equ DMABase+$010 ; [L] Zieladresse DMA-Kanal 1
+DMABTC1 equ DMABase+$014 ; [L] Bytezähler DMA-Kanal 1
+DMAMCR2 equ DMABase+$020 ; Kanal 2 genauso, nur $20 weiter
+DMAINTR2 equ DMABase+$024
+DMACCR2 equ DMABase+$028
+DMACSR2 equ DMABase+$02a
+DMAFCR2 equ DMABase+$02b
+DMASAR2 equ DMABase+$02c
+DMADAR2 equ DMABase+$030
+DMABTC2 equ DMABase+$034
+
+;-----------------------------------------------------------------------------
+; serielles:
+
+SMBase equ SIMBase+$700
+SMMCR equ SMBase+$000 ; [W] Modulkonfiguration SM
+SMILR equ SMBase+$004 ; [B] Interruptebene
+SMIVR equ SMBase+$005 ; [B] Interruptvektor
+SMIPCR equ SMBase+$014 ; [BR] Anzeige, ob Pegelwechsel an Leitungen
+SMACR equ SMBase+$014 ; [BW] Hilfssteuerregister
+SMISR equ SMBase+$015 ; [BR] Interruptanzeigen
+SMIER equ SMBase+$015 ; [BW] Interuptfreigaben
+SMOPCR equ SMBase+$01d ; [BW] Steuerung Ausgabeports
+SMIP equ SMBase+$01d ; [BR] Status Eingabeports
+SMOPS equ SMBase+$01e ; [BW] Portbits einzeln setzen
+SMOPR equ SMBase+$01f ; [BW] Portbits einzeln zurücksetzen
+SMMR1A equ SMBase+$010 ; [B] Modusregister 1 Kanal A
+SMMR2A equ SMBase+$020 ; [B] Modusregister 2 Kanal A
+SMCSRA equ SMBase+$011 ; [BR] Taktauswahl Kanal A
+SMSRA equ SMBase+$011 ; [BW] Statusregister Kanal A
+SMCRA equ SMBase+$012 ; [BW] Kommandoregister Kanal A
+SMRBA equ SMBase+$013 ; [BR] Empfangsdatenregister Kanal A
+SMTBA equ SMBase+$013 ; [BW] Sendedatenregister Kanal A
+SMMR1B equ SMBase+$018 ; [B] Modusregister 1 Kanal B
+SMMR2B equ SMBase+$021 ; [B] Modusregister 2 Kanal B
+SMCSRB equ SMBase+$019 ; [BR] Taktauswahl Kanal B
+SMSRB equ SMBase+$019 ; [BW] Statusregister Kanal B
+SMCRB equ SMBase+$01a ; [BW] Kommandoregister Kanal B
+SMRBB equ SMBase+$01b ; [BR] Empfangsdatenregister Kanal B
+SMTBB equ SMBase+$01b ; [BW] Sendedatenregister Kanal B
+
+;-----------------------------------------------------------------------------
+; Timer:
+
+TMBase equ SIMBase+$600
+TM1MCR equ TMBase+$000 ; [W] Modulkonfiguration Timer 1
+TM1IR equ TMBase+$004 ; [W] Interruptkonfiguration Timer 1
+TM1CR equ TMBase+$006 ; [W] Steuerung Timer 1
+TM1SR equ TMBase+$008 ; [W] Status/Vorteiler Timer 1
+TM1CNTR equ TMBase+$00a ; [W] Zählregister Timer 1
+TM1PREL1 equ TMBase+$00c ; [W] Vorbelegung 1 Timer 1
+TM1PREL2 equ TMBase+$00e ; [W] Vorbelegung 2 Timer 1
+TM1COM equ TMBase+$010 ; [W] Vergleichsregister Timer 1
+TM2MCR equ TMBase+$040 ; dito Kanal 2
+TM2IR equ TMBase+$044
+TM2CR equ TMBase+$046
+TM2SR equ TMBase+$048
+TM2CNTR equ TMBase+$04a
+TM2PREL1 equ TMBase+$04c
+TM2PREL2 equ TMBase+$04e
+TM2COM equ TMBase+$050
+
+;=============================================================================
+; ab hier 68332-Register
+
+ case "68332"
+
+;-----------------------------------------------------------------------------
+; die fundamentalen SIM-Steuerregister
+
+SIMCR equ SIMBase+$00 ; [W] MCU-Konfiguration
+SIYPCR equ SIMBase+$21 ; [W] Watchdog, Bus-Monitorsteuerung
+SWSR equ SIMBase+$27 ; [B] Watchdog zurücksetzen (mit $55/$aa)
+PICR equ SIMBase+$22 ; [W] Interruptsteuerung Timer
+PITR equ SIMBase+$24 ; [W] Zählwert Timer
+
+;-----------------------------------------------------------------------------
+; der Synthesizer für den Prozessortakt
+
+SYNCR equ SIMBase+$04 ; [W] Taktfrequenz-Synthesizer-Steuerung
+
+;-----------------------------------------------------------------------------
+; die Chip-Select-Ausgänge
+
+CSPAR0 equ SIMBase+$44 ; [W] Steuerung der Ausgänge CSBOOT,CS0..CS5
+CSPAR1 equ SIMBase+$46 ; [W] Steuerung der Ausgänge CS6..CS10
+CSBARBT equ SIMBase+$48 ; [W] Startadresse Boot-ROM
+CSORBT equ SIMBase+$4a ; [W] Optionen Boot-ROM
+__cnt set 0
+ rept 10 ; nur 0..9 so erzeugen, damit keine Hex-Namen
+__name set "\{__CNT}"
+CSBAR{__name} equ SIMBase+$4c+__cnt*4 ; [W] Startadresse CSn
+CSOR{__name} equ SIMBase+$4e+__cnt*4 ; [W] Optionen CSn
+__cnt set __cnt+1
+ endm
+CSBAR10 equ SIMBase+$74 ; [W] Startadresse CS10
+CSOR10 equ SIMBase+$76 ; [W] Optionen CS10
+
+;-----------------------------------------------------------------------------
+; Nutzung der SIM-Bits als einfache I/O-Ports
+
+PORTC equ SIMBase+$41 ; [B] Datenbits Port C
+PORTE0 equ SIMBase+$11 ; [B] Datenbits Port E
+PORTE1 equ SIMBase+$13 ; [B] dito
+DDRE equ SIMBase+$15 ; [B] Datenrichtungsbits Port E
+PEPAR equ SIMBase+$17 ; [B] Steuerung Port E-Pins als Ports oder Bussignale
+PORTF0 equ SIMBase+$19 ; [B] Datenbits Port F
+PORTF1 equ SIMBase+$1b ; [B] dito
+DDRF equ SIMBase+$1d ; [B] Datenrichtungsbits Port F
+PFPAR equ SIMBase+$1f ; [B] Steuerung Port F-Pins als Ports oder Bussignale
+
+;-----------------------------------------------------------------------------
+; Register für den Boundary-Scan-Test des SIM (for Motorola use only...)
+
+SIMTR equ SIMBase+$02 ; [W] Testregister SIM
+SIMTRE equ SIMBase+$08 ; [W] Testregister E-Takt
+TSTMSRA equ SIMBase+$30 ; [W] Schieberegister A (Boundary Scan)
+TSTMSRB equ SIMBase+$32 ; [W] Schieberegister B (Boundary Scan)
+TSTSC equ SIMBase+$34 ; [W] Register Schiebezahl
+TSTRC equ SIMBase+$36 ; [W] Register Wiederholungszahl
+CREG equ SIMBase+$38 ; [W] Steuerregister Boundary Scan
+DREG equ SIMBase+$3a ; [W] verteiltes Register (?!)
+
+;-----------------------------------------------------------------------------
+; programmierbare Zeitgeber:
+
+TPUBase equ SIMBase+$400 ; Basisadresse TPU-Registersatz
+TPUMCR equ TPUBase+$00 ; [W] Basiskonfiguration TPU
+TICR equ TPUBase+$08 ; [W] Interruptsteuerung TPU
+CIER equ TPUBase+$0a ; [W] TPU Interrupt-Freigaben
+CISR equ TPUBase+$20 ; [W] TPU Interrupt-Anzeigen
+CFSR0 equ TPUBase+$0c ; [W] TPU Betriebsarten Kanal 12..15
+CFSR1 equ TPUBase+$0e ; [W] TPU Betriebsarten Kanal 8..11
+CFSR2 equ TPUBase+$10 ; [W] TPU Betriebsarten Kanal 4.. 7
+CFSR3 equ TPUBase+$12 ; [W] TPU Betriebsarten Kanal 0.. 3
+HSQR0 equ TPUBase+$14 ; [W] TPU Sub-Betriebsarten Kanal 8..15
+HSQR1 equ TPUBase+$16 ; [W] TPU Sub-Betriebsarten Kanal 0.. 7
+HSRR0 equ TPUBase+$18 ; [W] TPU Service-Anfragebits Kanal 8..15
+HSRR1 equ TPUBase+$1a ; [W] TPU Service-Anfragebits Kanal 0.. 7
+CPR0 equ TPUBase+$1c ; [W] TPU Priorität Kanal 8..15
+CPR1 equ TPUBase+$1e ; [W] TPU Priorität Kanal 0.. 7
+DSCR equ TPUBase+$04 ; [W] Register für Entwicklung und Test ?!
+DSSR equ TPUBase+$06 ; eine genauere Beschreibung habe ich
+LR equ TPUBase+$22 ; leider nicht...
+SGLR equ TPUBase+$24 ;
+DCNR equ TPUBase+$26 ;
+TCR equ TPUBase+$02 ;
+
+;-----------------------------------------------------------------------------
+; das Kommando-RAM für die TPU:
+
+TPURAMBase equ SIMBase+$100 ; Basisadresse TPURAM-Steuerregister
+TRAMMCR equ TPURAMBase+$00 ; [B] Basiskonfiguration TPURAM
+TRAMTST equ TPURAMBase+$02 ; [W] Testregister TPURAM
+TRAMBAR equ TPURAMBase+$04 ; [W] Basisadresse TPURAM
+
+;-----------------------------------------------------------------------------
+; serielles:
+
+QSMBase equ SIMBase+$200 ; Basisadresse serielle E/A-Einheit
+QSMCR equ QSMBase+$00 ; [W] Basiskonfiguration QSM
+QTEST equ QSMBase+$02 ; [W] QSM Testregister
+QILR equ QSMBase+$04 ; [B] QSM Interruptprioritäten
+QIVR equ QSMBase+$05 ; [B] QSM Interruptvektor
+PORTQS equ QSMBase+$14 ; [W] Datenbits QSM paralleler Port
+PQSPAR equ QSMBase+$16 ; [B] Umschaltung Portbits QSM/paralleler Port
+DDRQS equ QSMBase+$17 ; [B] Datenrichtungsregister Port QSM
+SPCR0 equ QSMBase+$18 ; [W] Steuerregister 0 QSPI
+SPCR1 equ QSMBase+$1a ; [W] Steuerregister 1 QSPI
+SPCR2 equ QSMBase+$1c ; [W] Steuerregister 2 QSPI
+SPCR3 equ QSMBase+$1e ; [B] Steuerregister 3 QSPI
+SPSR equ QSMBase+$1f ; [B] Statusregister QSPI
+__cnt set 0 ; Definition QSPI-RAM
+ rept 16
+__name set "\{__CNT}"
+RR{__name} equ QSMBase+$100+__cnt*2 ; [W] Daten-RAM Empfangsseite
+TR{__name} equ QSMBase+$120+__cnt*2 ; [W] Daten-RAM Sendeseite
+CR{__name} equ QSMBase+$140+__cnt ; [B] Befehls-RAM
+__cnt set __cnt+1
+ endm
+SCCR0 equ QSMBase+$08 ; [W] Steuerregister 0 SCI
+SCCR1 equ QSMBase+$0a ; [W] Steuerregister 1 SCI
+SCSR equ QSMBase+$0c ; [W] Statusregister SCI
+SCDR equ QSMBase+$0e ; [W] Datenregister SCI
+
+;-----------------------------------------------------------------------------
+
+ endcase ; von Prozessorunterscheidung
+
+ endif ; von ifdef ...
+
+ restore ; wieder erlauben
+
+
diff --git a/include/reg7000.inc b/include/reg7000.inc
new file mode 100644
index 0000000..120b86f
--- /dev/null
+++ b/include/reg7000.inc
@@ -0,0 +1,120 @@
+ save
+; listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REG7000.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für die TMS70Cxx-Prozessoren *
+;* *
+;* letzte Änderungen : 15. 2.1997 *
+;* *
+;****************************************************************************
+
+ ifndef reg7000inc ; verhindert Mehrfacheinbindung
+
+reg7000inc equ 1
+
+ switch MOMCPUNAME
+ case "TMS70C40"
+IROM equ 0f000h
+__group equ 1
+ case "TMS70C20"
+IROM equ 0f800h
+__group equ 1
+ case "TMS70C00"
+IROM equ 10000h
+__group equ 1
+ case "TMS70CT40"
+IROM equ 0f000h
+__group equ 2
+ case "TMS70CT20"
+IROM equ 0f800h
+__group equ 2
+ case "TMS70C82"
+IROM equ 0e000h
+__group equ 3
+ case "TMS70C42"
+IROM equ 0f000h
+__group equ 3
+ case "TMS70C02"
+IROM equ 0f800h
+__group equ 3
+ case "TMS70C48"
+IROM equ 0f000h
+__group equ 4
+ case "TMS70C08"
+IROM equ 10000h
+__group equ 4
+ elsecase
+ fatal "Fehler: nur TMS70Cxx-Prozessoren erlaubt!"
+ endcase
+
+ if MOMPASS=1
+ message "TMS7000-Register-Definitionen (C) 1997 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; Speicherbereiche
+
+IRAM equ 0
+IROMEND equ 0ffffh
+ if __group<=2
+IRAMEND equ 127
+ elseif
+IRAMEND equ 255
+ endif
+
+;----------------------------------------------------------------------------
+; Peripherie
+
+IOCNT0 equ p0 ; I/O Control Register 0
+APORT equ p4 ; Port A Data
+BPORT equ p6 ; Port B Data
+CPORT equ p8 ; Port C Data
+CDDR equ p9 ; Port C Data Direction Register
+DPORT equ p10 ; Port D Data
+DDDR equ p11 ; Port D Data Direction Register
+
+ if __group<=2
+T1DATA equ p2 ; Timer 1 Data
+T1CTL equ p3 ; Timer 1 Control
+ endif
+
+ if __group>=3
+IOCNT2 equ p1 ; I/O Control Register 2
+IOCNT1 equ p2 ; I/O Control Register 1
+ADDR equ p5 ; Port A Data Direction Register
+T1MSDATA equ p12 ; Timer 1 MSB Dec. Reload / Readout Latch
+T1LSDATA equ p13 ; Timer 1 LSB Reload / Dec. Value
+T1CTL1 equ p14 ; Timer 1 Control Register 1 / MSB Readout Latch
+T1CTL0 equ p15 ; Timer 1 Control Register 0 / LSB Capture Latch
+T2MSDATA equ p16 ; Timer 2 MSB Dec. Reload / Readout Latch
+T2LSDATA equ p17 ; Timer 2 LSB Reload / Dec. Value
+T2CTL1 equ p18 ; Timer 2 Control Register 1 / MSB Readout Latch
+T2CTL0 equ p19 ; Timer 2 Control Register 0 / LSB Capture Latch
+SMODE equ p20 ; Serial Port Mode Control Register
+SCTL0 equ p21 ; Serial Port Control Register 0
+SSTAT equ p22 ; Serial Port Status Register
+T3DATA equ p23 ; Timer 3 Reload Reg. / Decr. Value
+SCTL1 equ p24 ; Serial Port Control Register 1
+RXBUF equ p25 ; Receiver Buffer
+TXBUF equ p26 ; Transmitter Buffer
+ endif
+
+ if __group=4
+EPORT equ p28 ; Port E Data
+EDDR equ p29 ; Port E Data Direction Register
+FPORT equ p30 ; Port F Data
+FDDR equ p31 ; Port F Data Direction Register
+GPORT equ p32 ; Port G Data
+GDDR equ p33 ; Port G Data Direction Register
+ endif
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
+
diff --git a/include/reg78k0.inc b/include/reg78k0.inc
new file mode 100644
index 0000000..914befa
--- /dev/null
+++ b/include/reg78k0.inc
@@ -0,0 +1,245 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REG78K0.INC *
+;* *
+;* Sinn : enthält Registerdefinitionen für 78K0 (uPD78070A) *
+;* *
+;* letzte Änderungen : 1.10.1996 *
+;* *
+;****************************************************************************
+
+ ifndef regz78k0inc ; verhindert Mehrfacheinbindung
+
+reg8k0inc equ 1
+
+ if (MOMCPUNAME<>"78070")
+ fatal "Falscher Prozessortyp eingestellt: nur 78070 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "78K0-Register-Definitionen (C) 1996 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; CPU-Kern
+
+SP equ 0ff1ch ; Stackpointer
+
+PSW equ 0ff1eh ; Statuswort
+
+;----------------------------------------------------------------------------
+; Taktgenerator
+
+PCC equ 0fffbh ; Steuerung Prozessortakt
+
+OSMS equ 0fff2h ; Taktteiler ein/ausschalten
+
+OSTS equ 0fffah ; Wartezeit, um nach STOP-Auflösung
+
+;----------------------------------------------------------------------------
+; Bus-Interface
+
+EBTS equ 0ff3fh ; Multiplex an/aus (fest auf aus)
+
+IMS equ 0fff0h ; Größe internes RAM (fest 1K)
+
+MM equ 0fff8h ; Wait-State-Steuerung
+
+;----------------------------------------------------------------------------
+; Interrupt-Steuerung
+
+INTM0 equ 0ffech ; Flankenwahl INTP0...INTP2
+INTM1 equ 0ffedh ; Flankenwahl INTP3...INTP6
+SCS equ 0ff47h ; Auswahl Abtastrate INTP0
+
+IF0L equ 0ffe0h ; Interrupts aufgetreten ?
+IF0H equ 0ffe1h
+IF0 equ IF0L
+IF1L equ 0ffe2h
+
+MK0L equ 0ffe4h ; Maskierungsregister
+MK0H equ 0ffe5h
+MK0 equ IF0L
+MK1L equ 0ffe6h
+
+PR0L equ 0ffe8h ; Prioritäten
+PR0H equ 0ffe9h
+PR0 equ IF0L
+PR1L equ 0ffeah
+
+;----------------------------------------------------------------------------
+; Ports
+
+P0 equ 0ff00h ; Datenregister Port 0
+PM0 equ 0ff20h ; Datenrichtungsregister Port 0
+
+P1 equ 0ff01h ; Datenregister Port 1
+PM1 equ 0ff21h ; Datenrichtungsregister Port 1
+
+P2 equ 0ff02h ; Datenregister Port 2
+PM2 equ 0ff22h ; Datenrichtungsregister Port 2
+
+P3 equ 0ff03h ; Datenregister Port 3
+PM3 equ 0ff23h ; Datenrichtungsregister Port 3
+
+P6 equ 0ff06h ; Datenregister Port 6
+PM6 equ 0ff26h ; Datenrichtungsregister Port 6
+
+P7 equ 0ff07h ; Datenregister Port 7
+PM7 equ 0ff27h ; Datenrichtungsregister Port 7
+
+P9 equ 0ff09h ; Datenregister Port 9
+PM9 equ 0ff29h ; Datenrichtungsregister Port 9
+
+P10 equ 0ff0ah ; Datenregister Port 10
+PM10 equ 0ff2ah ; Datenrichtungsregister Port10
+
+P12 equ 0ff0ch ; Datenregister Port 12
+PM12 equ 0ff2ch ; Datenrichtungsregister Port 12
+
+P13 equ 0ff0dh ; Datenregister Port 13
+PM13 equ 0ff2dh ; Datenrichtungsregister Port 13
+
+PUOH equ 0fff3h ; Pull-Up-Register Port 0..7
+PUOL equ 0fff7h ; Pull-Up-Register Port 8..13
+
+;----------------------------------------------------------------------------
+; Timer
+
+TM0 equ 0ff14h ; Zählwert Timer 0
+CR00 equ 0ff10h ; Vergleichs/Fangregister 0 Timer 0
+CR01 equ 0ff12h ; Vergleichs/Fangregister 1 Timer 0
+TCL0 equ 0ff40h ; Taktauswahl Timer 0
+TMC0 equ 0ff48h ; Betriebsart Timer 0
+CRC0 equ 0ff4ch ; Steuerung Fang/Vergleichsregister Timer 0
+TOC0 equ 0ff4eh ; Ausgabesteuerung Timer 0
+
+TM1 equ 0ff18h ; Zählwert Timer 1
+CR10 equ 0ff16h ; Vergleichs/Fangregister Timer 1
+TCL1 equ 0ff41h ; Taktauswahl Timer 1
+TMC1 equ 0ff49h ; Betriebsart Timer 1
+
+TM2 equ 0ff19h ; Zählwert Timer 2
+CR20 equ 0ff17h ; Vergleichs/Fangregister Timer 2
+TCL2 equ 0ff42h ; Taktauswahl Timer 2 / Uhren-Timer / Watchdog / Summer
+TMC2 equ 0ff4ah ; Betriebsart Timer 2 / Uhren-Timer
+
+TMS equ TM1 ; Zählwert Timer 1+2 im 16-Bit-Modus
+TOC1 equ 0ff4fh ; Ausgabesteuerung Timer 1+2
+
+TM5 equ 0ff51h ; Zählwert Timer 5
+CR50 equ 0ff50h ; Vergleichsregister Timer 5
+TCL5 equ 0ff52h ; Taktauswahl Timer 5
+TMC5 equ 0ff53h ; Betriebsart Timer 5
+
+TM6 equ 0ff55h ; Zählwert Timer 6
+CR60 equ 0ff54h ; Vergleichsregister Timer 6
+TCL6 equ 0ff56h ; Taktauswahl Timer 6
+TMC6 equ 0ff57h ; Betriebsart Timer 6
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+WDTM equ 0fff9h ; Betriebsart
+
+;----------------------------------------------------------------------------
+; serielle Schnittstelle
+
+; Kanal 0
+SIO0 equ 0ff1ah ; Datenregister
+SVA equ 0ff62h ; Slave-Adresse
+TCL3 equ 0ff43h ; Taktauswahl Kanal 0/1
+CSIM0 equ 0ff60h ; Betriebsart
+SBIC equ 0ff61h ; Bus-Steuerung
+SINT equ 0ff63h ; Interrupt-Timing
+
+; Kanal 1
+SIO1 equ 0ff1bh ; Datenregister
+ADTP equ 0ff6ah ; Adreßzeiger bei Blockempfang/versand
+CSIM1 equ 0ff68h ; Betriebsart
+ADTC equ 0ff69h ; Steuerung Blockbetrieb
+ADTI equ 0ff6bh ; Geschwindigkeit Blockversand
+
+; Kanal 2
+TXS equ 0ff74h ; Datenregister
+RXB equ 0ff74h
+SIO2 equ TXS
+ASIM equ 0ff70h ; Schnittstellenparameter
+ASIS equ 0ff71h ; Statusregister
+CSIM2 equ 0ff72h ; Betriebsart
+BRGC equ 0ff73h ; Baudratenwahl
+
+;----------------------------------------------------------------------------
+; A/D-Wandler
+
+ADCR equ 0ff1fh ; Ergebnisregister Wandlung
+
+ADM equ 0ff80h ; Betriebsart
+
+ADIS equ 0ff84h ; Umschaltung Ports als Analogeingänge
+
+;----------------------------------------------------------------------------
+; D/A-Wandler
+
+DACS0 equ 0ff90h ; Analogwert Wandler 0
+
+DACS1 equ 0ff91h ; Analogwert Wandler 1
+
+DAM equ 0ff96h ; Betriebsart
+
+;----------------------------------------------------------------------------
+; Echtzeitausgabe
+
+RTBL equ 0ff30h ; Ausgabedaten
+RTBH equ 0ff31h
+RTPM equ 0ff34h ; Betriebsart
+RTPC equ 0ff36h ; Steuerung
+
+;----------------------------------------------------------------------------
+; Vektoradressen
+
+Vec_Reset equ 0000h ; Reset
+Vec_INTWDT equ 0004h ; Watchdog
+Vec_INTP0 equ 0006h ; externe Interrupts
+Vec_INTP1 equ 0008h
+Vec_INTP2 equ 000ah
+Vec_INTP3 equ 000ch
+Vec_INTP4 equ 000eh
+Vec_INTP5 equ 0010h
+Vec_INTP6 equ 0012h
+Vec_INTCSI0 equ 0014h ; serielle Schnittstellen
+Vec_INTCSI1 equ 0016h
+Vec_INTSER equ 0018h
+Vec_INTSR equ 001ah
+Vec_INTCSI2 equ Vec_INTSR
+Vec_INTST equ 001ch
+Vec_INTTM3 equ 001eh ; Uhren-Timer
+Vec_INTTM00 equ 0020h ; Timer
+Vec_INTTM01 equ 0022h
+Vec_INTTM1 equ 0024h ; Vergleicher Timer 1
+Vec_INTTM2 equ 0026h ; Vergleicher Timer 2
+Vec_INTAD equ 0028h ; A/D-Wandler
+Vec_INTTM5 equ 002ah ; Vergleicher Timer 5
+Vec_INTTM6 equ 002ch ; Vergleicher Timer 6
+Vec_BRK equ 003eh ; BRK-Befehl
+
+;----------------------------------------------------------------------------
+; Speicheradressen
+
+BUFRAM equ 0fac0h ; Puffer-RAM
+BUFRAMEND equ 0fadfh
+
+IRAM equ 0fb00h ; internes RAM
+IRAMEND equ 0fedfh ; dahinter sind die Register gemappt!
+
+;----------------------------------------------------------------------------
+
+ endif ; von IFDEF...
+ restore ; wieder erlauben
+
+
+
diff --git a/include/reg96.inc b/include/reg96.inc
new file mode 100644
index 0000000..02b309b
--- /dev/null
+++ b/include/reg96.inc
@@ -0,0 +1,610 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REG96.INC *
+;* *
+;* Sinn : enthält Makro-, SFR- und Adreßdefinitionen für die *
+;* MCS-96-Prozessoren *
+;* OK, der Name fällt aus dem Rahmen, aber STDDEF96.INC war schon *
+;* belegt... *
+;* *
+;* letzte Änderungen : 20. 2.1994 *
+;* 28. 6.1994 80196 (KR) hinzugefügt *
+;* 9. 3.1997 80196N(T), 80296 hinzugefügt *
+;* *
+;****************************************************************************
+
+ ifndef reg96inc ; verhindert Mehrfacheinbindung
+
+reg96inc equ 1
+
+ if (MOMCPUNAME<>"8096")&&(MOMCPUNAME<>"80196")
+ fatal "Falscher Prozessortyp eingestellt: nur 8096, 80196, 80196N oder 80299 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "MCS-96-SFR-Definitionen (C) 1994 Alfred Arnold"
+ message "binde \{MOMCPU}-SFRs ein"
+ endif
+
+;----------------------------------------------------------------------------
+; CPU-Register:
+
+R0 equ 0 ; Nullregister
+ZERO_REG equ R0
+ONES_REG equ 2 ; nur Einsen
+SP equ 18h ; Stackpointer
+ if MOMCPU>=80196h
+WSR equ 14h ; RAM-Window in Registerbank
+ if MOMCPU>=80296h
+WSR1 equ 15h ; RAM-Window in untere Hälfte Registerbank
+ endif
+ endif
+
+ if MOMCPU>=80296h ; Signalprozessorregister
+ACC_00 equ 000ch ; Akkumulator
+ACC_02 equ 000eh
+ACC_04 equ 0006h
+ACC_STAT equ 000bh
+ICB0 equ 1fc3h ; Indexregister
+ICB1 equ 1fc7h
+ICX0 equ 0010h
+ICX1 equ 0016h
+IDX0 equ 1fc0h
+IDX1 equ 1fc4h
+RPT_CNT equ 0004h ; Zählregister
+ endif
+
+;----------------------------------------------------------------------------
+; SFRs:
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; A/D-Wandler
+ switch MOMCPUNAME
+
+ case "80296" ; Warnung unterdrücken
+
+
+ case "80196N"
+AD_RESULT equ 1faah ; Ergebnis Wandlung (wortweise lesbar)
+AD_COMMAND equ 1fach ; Steuerung AD-Wandler
+AD_TEST equ 1faeh ; Justage
+AD_TIME equ 1fafh ; Wandlungsgeschwindigkeit
+
+
+ case "80196"
+AD_Result equ 1faah ; Ergebnis Wandlung (wortweise lesbar)
+AD_Command equ 1fach ; Steuerung AD-Wandler
+AD_Test equ 1faeh ; Justage
+AD_Time equ 1fafh ; Wandlungsgeschwindigkeit
+
+
+ case "8096"
+AD_Command equ 2 ; A/D-Wandler Steuerregister
+AD_Result_Lo equ 2 ; Ergebnis A/D-Wandler
+AD_Result_Hi equ 3 ; NUR byteweise lesen!!
+
+
+ endcase
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; HSI/HSO/EPA
+
+ switch MOMCPUNAME
+
+
+ case "80296"
+EPA_MASK equ 1f9ch ; Interruptmasken
+EPA_PEND equ 1f9eh ; Interruptanzeigen
+__CNT set 0
+ rept 4
+EPA{"\{__CNT}"}_CON equ 1f60h+(__CNT*4) ; Steuerung Vergleicher/Fangeinheiten
+EPA{"\{__CNT}"}_TIME equ 1f62h+(__CNT*4) ; Zeitpunkt " "
+__CNT set __CNT+1
+ endm
+
+
+ case "80196N"
+COMP0_CON equ 1f88h ; Steuerung Vergleicher 0
+COMP0_TIME equ 1f8ah ; Zeitpunkt Vergleicher 0
+
+COMP1_CON equ 1f8ch ; dito
+COMP1_CON equ 1f8eh
+
+EPA_MASK equ 1fa0h ; Interruptmasken
+EPA_MASK1 equ 1fa4h
+EPA_PEND equ 1fa2h ; Interruptanzeigen
+EPA_PEND1 equ 1fa6h
+__CNT set 0
+ rept 10
+EPA{"\{__CNT}"}_CON equ 1f60h+(__CNT*4) ; Steuerung Vergleicher/Fangeinheiten
+EPA{"\{__CNT}"}_TIME equ 1f62h+(__CNT*4) ; Zeitpunkt " "
+__CNT set __CNT+1
+ endm
+EPAIPV equ 1fa8h ; Interrupt-Priorität
+
+
+ case "80196"
+EPA_Mask equ 1fa0h ; (w) EPA Interruptfreigabe 4..9, 0..1, overrun 0..9/0/1
+EPA_Mask1 equ 1fa4h
+EPA_Pend equ 1fa2h ; (w) EPA Interrupt aufgetreten 4..9, 0..1, overrun 0..9/0/1
+EPA_Pend1 equ 1fa6h
+EPAIpv equ 1fa8h ; Priorität EPA-Interrupt
+
+EPA_Control0 equ 1f60h ; Steuerung Capture/Compare Kanal 0..9
+EPA_Time0 equ 1f62h ; (w) gespeicherter Zeitpunkt Kanal 0..9
+EPA_Control1 equ 1f64h
+EPA_Time1 equ 1f66h
+EPA_Control2 equ 1f68h
+EPA_Time2 equ 1f6ah
+EPA_Control3 equ 1f6ch
+EPA_Time3 equ 1f6eh
+EPA_Control4 equ 1f70h
+EPA_Time4 equ 1f72h
+EPA_Control5 equ 1f74h
+EPA_Time5 equ 1f76h
+EPA_Control6 equ 1f78h
+EPA_Time6 equ 1f7ah
+EPA_Control7 equ 1f7ch
+EPA_Time7 equ 1f7eh
+EPA_Control8 equ 1f80h
+EPA_Time8 equ 1f82h
+EPA_Control9 equ 1f84h
+EPA_Time9 equ 1f86h
+Comp_Control0 equ 1f88h ; Steuerung Compare-Kanal 0..1
+Comp_Time0 equ 1f8ah ; Vergleichswert Compare-Kanal 0..1
+Comp_Control1 equ 1f8ch
+Comp_Time1 equ 1f8eh
+
+
+ case "8096"
+HSI_Time equ 4 ; HSI Triggerzeitpunkt (nur Wort)
+HSI_Mode equ 3 ; HSI Modusregister
+HSI_Status equ 6 ; HSI Statusregister
+
+HSO_Time equ 4 ; HSO Zeiteinstellung (nur Wort)
+HSO_Command equ 6 ; HSO Steuerregister
+
+
+ endcase
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; serielles
+
+ switch MOMCPUNAME
+
+
+ case "80296"
+SP_CON equ 1fbbh ; Steuerung SIO
+SP_BAUD equ 1fbch ; (w) Baudrate SIO
+SP_STATUS equ 1fb9h ; Status SIO
+SBUF_RX equ 1fb8h ; Empfangsdaten
+SBUF_TX equ 1fbah ; Sendedaten
+
+
+ case "80196N"
+SP_CON equ 1fbbh ; Steuerung SIO
+SP_BAUD equ 1fbch ; (w) Baudrate SIO
+SP_STATUS equ 1fb9h ; Status SIO
+SBUF_RX equ 1fb8h ; Empfangsdaten
+SBUF_TX equ 1fbah ; Sendedaten
+
+SSIO_BAUD equ 1fb4h ; Baudrate SSIO
+SSIO0_BUF equ 1fb0h ; Datenregister SSIO0
+SSIO1_BUF equ 1fb2h ; Datenregister SSIO1
+SSIO0_CON equ 1fb1h ; Modus SSIO0
+SSIO1_CON equ 1fb3h ; Modus SSIO1
+
+
+ case "80196"
+SSIO_StB0 equ 1fb0h ; Datenpuffer SSIO Kanal 0
+SSIO_StCr0 equ 1fb1h ; Steuerung Sender/Empfänger SSIO Kanal 0
+SSIO_StB1 equ 1fb2h ; Datenpuffer SSIO Kanal 1
+SSIO_StCr1 equ 1fb3h ; Steuerung Sender/Empfänger SSIO Kanal 1
+SSIO_Baud equ 1fb4h ; Baudrate SSIO
+SBuf_RX equ 1fb8h ; Empfangsdaten
+SP_Stat equ 1fb9h ; Zustand SIO
+SBuf_TX equ 1fbah ; Sendedaten
+SP_Con equ 1fbbh ; Steuerung SIO
+SP_Baud equ 1fbch ; (w) Baudrate SIO
+
+
+ case "8096"
+SBUF equ 7 ; UART Datenregister
+SPStat equ 11h ; UART Statusregister
+SPCon equ 11h ; UART Steuerregister
+Baud_Reg equ 0eh ; UART Datenrate
+
+
+ endcase
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Interruptsteuerung
+
+ switch MOMCPUNAME
+
+
+ case "80296"
+INT_MASK equ 08h ; Interruptmasken
+INT_MASK1 equ 13h
+INT_PEND equ 09h ; Interruptanzeigen
+INT_PEND1 equ 12h
+EXTINT_CON equ 1fcch ; Flankenwahl externe Interrupts
+IN_PROG0 equ 1fc8h ; Interruptbearbeitung läuft
+IN_PROG1 equ 1fcah
+INT_CON0 equ 1fe8h ; Prioritätsfestlegung
+INT_CON1 equ 1feah
+INT_CON2 equ 1fech
+INT_CON3 equ 1feeh
+NMI_PEND equ 1fc9h ; NMI angefordert ?
+VECT_ADDR equ 1ff0h ; Vektorbasis
+
+ case "80196N"
+INT_MASK equ 08h ; Interruptmasken
+INT_MASK1 equ 13h
+INT_PEND equ 09h ; Interruptanzeigen
+INT_PEND1 equ 12h
+
+PTSSRV equ 06h ; (w) PTS-Interrupt bedient
+PTSSEL equ 04h ; (w) Quellen PTS freigeben
+
+
+ case "80196"
+Int_Mask_Lo equ 08h ; Interruptfreigabe
+Int_Mask_Hi equ 13h
+Int_Pend_Lo equ 09h ; wartende Interrupts
+Int_Pend_Hi equ 12h
+
+PTS_Srv equ 06h ; w PTS-Interrupt bedient
+PTS_Select equ 04h ; w Quellen PTS freigeben
+
+
+ case "8096"
+INT_Mask equ 8 ; Interruptfreigabe
+INT_Pending equ 9 ; Interrupts aufgetreten ?
+
+
+ endcase
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Timer
+
+Watchdog equ 0ah ; Watchdog zurücksetzen
+
+ switch MOMCPUNAME
+
+
+ case "80296"
+CON_REG0 equ 1fb6h ; Steuerung PWM
+PWM0_CONTROL equ 1fb0h ; Einschaltdauer PWM0
+PWM1_CONTROL equ 1fb2h
+PWM2_CONTROL equ 1fb4h
+
+T1CONTROL equ 1f90h ; Steuerung Timer 1
+TIMER1 equ 1f92h ; (w) Daten Timer 1
+T2CONTROL equ 1f94h ; Steuerung Timer 2
+TIMER22 equ 1f96h ; (w) Daten Timer 2
+
+
+ case "80196N"
+T1CONTROL equ 1f98h ; Steuerung Timer 1
+TIMER1 equ 1f9ah ; (w) Daten Timer 1
+T2CONTROL equ 1f9ch ; Steuerung Timer 2
+TIMER22 equ 1f9eh ; (w) Daten Timer 2
+
+
+ case "80196"
+Timer1_Control equ 1f98h ; Steuerung Timer 1
+Timer1 equ 1f9ah ; (w) Daten Timer 1
+Timer2_Control equ 1f9ch ; Steuerung Timer 2
+Timer2 equ 1f9eh ; (w) Daten Timer 2
+
+
+ case "8096"
+Timer1 equ 0ah ; Timer 1 (nur Wort)
+Timer2 equ 0ch ; Timer 2 (nur Wort)
+
+PWM_Control equ 17h ; Einstellung Pulsweite PWM
+
+
+ endcase
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Ports
+
+ switch MOMCPUNAME
+
+
+ case "80296"
+
+P1_DIR equ 1fd2h ; Richtungsregister Port 1
+P1_MODE equ 1fd0h ; Auswahl Port 1 Spezialfunktion/IO-Port
+P1_PIN equ 1fd6h ; Status Port 1 Pins
+P1_REG equ 1fd4h ; Port 1 Ausgabedaten
+
+P2_DIR equ 1fd3h ; Rest sinngemäß
+P2_MODE equ 1fd1h
+P2_PIN equ 1fd7h
+P2_REG equ 1fd5h
+
+P3_DIR equ 1fdah
+P3_MODE equ 1fd8h
+P3_PIN equ 1fdeh
+P3_REG equ 1fdch
+
+P4_DIR equ 1fdbh
+P4_MODE equ 1fd9h
+P4_PIN equ 1fdfh
+P4_REG equ 1fddh
+
+EP_DIR equ 1fe3h
+EP_MODE equ 1fe1h
+EP_PIN equ 1fe7h
+EP_REG equ 1fe5h
+
+
+ case "80196N"
+P0_PIN equ 1fdah ; Daten Port 0
+
+P1_DIR equ 1fd2h ; Richtungsregister Port 1
+P1_MODE equ 1fd0h ; Auswahl Port 1 Spezialfunktion/IO-Port
+P1_PIN equ 1fd6h ; Status Port 1 Pins
+P1_REG equ 1fd4h ; Port 1 Ausgabedaten
+
+P2_DIR equ 1fcbh ; Rest sinngemäß
+P2_MODE equ 1fc9h
+P2_PIN equ 1fcfh
+P2_REG equ 1fcdh
+
+P3_PIN equ 1ffeh
+P3_REG equ 1ffch
+
+P4_PIN equ 1fffh
+P4_REG equ 1ffdh
+
+P34_DRV equ 1ff4h ; Umschaltung Port 3/4 als open-drain oder push-pull
+
+P5_DIR equ 1ff3h
+P5_MODE equ 1ff1h
+P5_PIN equ 1ff7h
+P5_REG equ 1ff5h
+
+P6_DIR equ 1fd3h
+P6_MODE equ 1fd1h
+P6_PIN equ 1fd7h
+P6_REG equ 1fd5h
+
+EP_DIR equ 1fe3h
+EP_MODE equ 1fe1h
+EP_PIN equ 1fe7h
+EP_REG equ 1fe5h
+
+
+ case "80196"
+P0PIn equ 1fdah ; Daten Port 0
+
+P1SSel equ 1fd0h ; Spezialfunktionen auf Port 1 ?
+P1IO equ 1fd2h ; Port 1 Datenrichtungsregister
+P1Reg equ 1fd4h ; Port 1 Datenausgabe
+P1PIn equ 1fd6h ; Eingangszustand Port 1
+
+P2SSel equ 1fc9h ; Rest sinngemäß
+P2IO equ 1fcbh
+P2Reg equ 1fcdh
+P2PIn equ 1fcfh
+
+P3Reg equ 1ffch
+P3PIn equ 1ffeh
+
+P4Reg equ 1ffdh
+P4PIn equ 1fffh
+
+P5SSel equ 1ff1h
+P5IO equ 1ff3h
+P5Reg equ 1ff5h
+P5PIn equ 1ff7h
+
+P6SSel equ 1fd1h
+P6IO equ 1fd3h
+P6Reg equ 1fd5h
+P6PIn equ 1fd7h
+
+
+ case "8096"
+Port0 equ 0eh ; Port 0
+Port1 equ 0fh ; Port 1
+Port2 equ 10h ; Port 2
+Port3 equ 1ffeh ; Port 3 (falls kein ext. Speicher)
+Port4 equ 1fffh ; Port 4 (falls kein ext. Speicher)
+
+IOS0 equ 15h ; I/O-Statusregister 0
+IOS1 equ 16h ; I/O-Statusregister 1
+IOC0 equ 15h ; I/O-Statusregister 0
+IOC1 equ 16h ; I/O-Statusregister 1
+
+
+ endcase
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Slave-Port
+
+ switch MOMCPUNAME
+
+
+ case "80296" ; Warnung unterdrücken
+
+
+ case "80196N"
+SLP_CMD equ 1ffah ; Kommandoregister
+SLP_CON equ 1ffbh
+SLP_STAT equ 1ff8h
+
+
+ case "80196" ; Warnung unterdrücken
+
+
+ case "8096"
+SlpStat equ 1ff8h ; Status Slave-Port
+SlpCmd equ 1ffah ; Kommandoregister Slave-Port
+SlpFunReg equ 1ffbh ; Slave-Port Steuerung
+
+
+ endcase
+
+;----------------------------------------------------------------------------
+; Vektoren/Sonderadressen
+
+ if MOMCPU>=80196h
+EPAIntX_Vec equ 2000h ; Kanal 4...9/0/1 EPA
+EPAInt3_Vec equ 2002h ; Kanal 3 EPA
+EPAInt2_Vec equ 2004h ; Kanal 2 EPA
+EPAInt1_Vec equ 2006h ; Kanal 1 EPA
+EPAInt0_Vec equ 2008h ; Kanal 0 EPA
+AD_Complete_Vec equ 200ah ; A/D-Wandlung abgeschlossen
+OBE_Slp_Vec equ 200ch ; Ausgabepuffer leer
+IBF_Slp_Vec equ 200eh ; Eingabepuffer voll
+Trap_Vec equ 2010h ; Software-Trap
+Ill_Opcode_Vec equ 2012h ; undefinierter Opcode
+CMD_Full_Vec equ 2030h ; Kommandopuffer voll
+SSIO0_Trans_Vec equ 2032h ; Transfer SSIO0 abgeschlossen
+SSIO1_Trans_Vec equ 2034h ; Transfer SSIO1 abgeschlossen
+SIO_TrInt_Vec equ 2036h ; SIO hat Zeichen versandt
+SIO_RcInt_Vec equ 2038h ; SIO hat Zeichen empfangen
+ExtInt_Vec equ 203ch ; externer Interrupt
+NMI_Vec equ 203eh ; nicht mask. Interrupt
+ elseif
+TOverInt_Vec equ 2000h ; Vektor Timerüberlauf
+ADInt_Vec equ 2002h ; Vektor A/D-Wandlung beendet
+HSIDataInt_Vec equ 2004h ; Vektor HSI-Daten verfügbar
+HSOInt_Vec equ 2006h ; Vektor HSO
+HSI0Int_Vec equ 2008h ; Vektor HSI.0
+TimeInt_Vec equ 200ah ; Vektor für Timer
+SerialInt_Vec equ 200ch ; Vektor serieller Interrupt
+ExtInt_Vec equ 200eh ; Vektor externer Interrupt
+SoftInt_Vec equ 2010h ; TRAP Interruptvektor
+Self_Jump equ 201ah ; Endlosschleife
+ endif
+
+;----------------------------------------------------------------------------
+; Speicherbereiche, Spezialregister
+
+ switch MOMCPUNAME
+
+
+ case "80296"
+IRAM equ 1ah ; Beginn internes RAM
+IRAMEND equ 1ffh ; Ende internes RAM
+CODERAM equ 0f800h ; Beginn Code-RAM
+CODERAMEND equ 0ffffh ; Ende Code-RAM
+EXTMEM1 equ 400h ; Beginn externer Speicher Bereich 1
+EXTMEM1END equ 1bffh ; Ende externer Speicher Bereich 1
+EXTMEM2 equ 02000h ; Beginn externer Speicher Bereich 2
+EXTMEM2END equ 0f7ffh ; Ende externer Speicher Bereich 2
+EXTMEM3 equ 0ff0400h ; Beginn externer Speicher Bereich 3
+EXTMEM3END equ 0fff7ffh ; Ende externer Speicher Bereich 3
+CCB0 equ 0ff2018h ; Chip-Konfiguration
+CCB1 equ 0ff201ah ; erw. Chip-Konfiguration
+Reset_Location equ 0ff2080h ; Startadresse nach Reset
+
+
+ case "80196N"
+IRAM equ 1ah ; Beginn internes RAM
+IRAMEND equ 3ffh ; Ende internes RAM
+IROM equ 0ff2000h ; Beginn internes Programm-ROM
+IROMEND equ 0ff9fffh ; Ende internes Programm-ROM
+EXTMEM1 equ 600h ; Beginn externer Speicher Bereich 1
+EXTMEM1END equ 1effh ; Ende externer Speicher Bereich 1
+EXTMEM2 equ 0a000h ; Beginn externer Speicher Bereich 2
+EXTMEM2END equ 0ffffh ; Ende externer Speicher Bereich 2
+EXTMEM3 equ 0ff0100h ; Beginn externer Speicher Bereich 3
+EXTMEM3END equ 0ff03ffh ; Ende externer Speicher Bereich 3
+EXTMEM4 equ 0ff0600h ; Beginn externer Speicher Bereich 4
+EXTMEM4END equ 0ff1fffh ; Ende externer Speicher Bereich 4
+EXTMEM5 equ 0ffa000h ; Beginn externer Speicher Bereich 5
+EXTMEM5END equ 0ffffffh ; Ende externer Speicher Bereich 5
+CCB0 equ 0ff2018h ; Chip-Konfiguration
+CCB1 equ 0ff201ah ; erw. Chip-Konfiguration
+CCB2 equ 0ff201ch
+Security_Key equ 0ff2020h ; Schlüssel
+Reset_Location equ 0ff2080h ; Startadresse nach Reset
+USFR equ 1ff6h ; ???
+IRAM_CON equ 1fe0h ; Konfiguration Code-RAM
+
+
+ case "80196"
+IRAM equ 1ah ; Beginn internes RAM
+IRAMEND equ 1ffh ; Ende internes RAM
+PDRAM equ IRAM ; Beginn Power-Down-RAM
+PDRAMEND equ 1ffh ; Ende Power-Down-RAM
+CODERAM equ 400h ; Beginn Code-RAM (KEIN Windowing!)
+CODERAMEND equ 4ffh ; Ende Code-RAM
+IROM equ 2000h ; Beginn internes Programm-ROM
+IROMEND equ 3fffh ; Ende internes Programm-ROM
+EXTMEM1 equ 500h ; Beginn externer Speicher Bereich 1
+EXTMEM1END equ 1effh ; Ende externer Speicher Bereich 1
+EXTMEM2 equ 4000h ; Beginn externer Speicher Bereich 2
+EXTMEM2END equ 0ffffh ; Ende externer Speicher Bereich 2
+CCB equ 2018h ; Chip-Konfiguration
+CCB1 equ 201ah ; erw. Chip-Konfiguration
+Security_Key equ 2020h ; Schlüssel
+Reset_Location equ 2080h ; Startadresse nach Reset
+USFR equ 1ff6h ; ???
+
+
+ case "8096"
+IRAM equ 1ah ; Beginn internes RAM
+IRAMEND equ 0ffh ; Ende internes RAM
+PDRAM equ 0f0h ; Beginn Power-Down-RAM
+PDRAMEND equ 0ffh ; Ende Power-Down-RAM
+IROM equ 2000h ; Beginn internes Programm-ROM
+IROMEND equ 3fffh ; Ende internes Programm-ROM
+EXTMEM1 equ 100h ; Beginn externer Speicher Bereich 1
+EXTMEM1END equ 1effh ; Ende externer Speicher Bereich 1
+EXTMEM2 equ 4000h ; Beginn externer Speicher Bereich 2
+EXTMEM2END equ 0ffffh ; Ende externer Speicher Bereich 2
+CCB equ 2018h ; Chip-Konfiguration
+Security_Key equ 2020h ; Schlüssel
+Reset_Location equ 2080h ; Startadresse nach Reset
+
+
+ endcase
+
+Security_Key_End equ Security_Key+15
+
+;--------------------------------------------------------------------------
+; lange Sprünge
+
+__DefLongJmp macro new,old
+new macro Adr,{NoExpand}
+ old Skip
+ ljmp Adr
+Skip:
+ endm
+ endm
+
+ __DefLongJmp bc,jnc
+ __DefLongJmp be,jne
+ __DefLongJmp bge,jlt
+ __DefLongJmp bgt,jle
+ __DefLongJmp bh,jnh
+ __DefLongJmp ble,jgt
+ __DefLongJmp blt,jge
+ __DefLongJmp bnc,jc
+ __DefLongJmp bne,je
+ __DefLongJmp bnh,jh
+ __DefLongJmp bnst,jst
+ __DefLongJmp bnv,jv
+ __DefLongJmp bnvt,jvt
+ __DefLongJmp bst,jnst
+ __DefLongJmp bv,jnv
+ __DefLongJmp bvt,jnvt
+
+;--------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/regavr.inc b/include/regavr.inc
new file mode 100644
index 0000000..2414557
--- /dev/null
+++ b/include/regavr.inc
@@ -0,0 +1,329 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REGAVR.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für die AVR-Prozessoren *
+;* *
+;* letzte Änderungen : 6. 7.1996 *
+;* letzte Änderungen : 8. 6.1997 Anpassung an die endgültigen Versionen *
+;* *
+;****************************************************************************
+
+ ifndef regavrinc ; verhindert Mehrfacheinbindung
+
+regavrinc equ 1
+
+ if (MOMCPUNAME<>"AT90S1200")&&(MOMCPUNAME<>"AT90S2313")&&(MOMCPUNAME<>"AT90S4414")&&(MOMCPUNAME<>"AT90S8515")
+ fatal "Falscher Prozessortyp eingestellt: nur AT90S1200, AT90S2313, AT90S4414 oder AT90S8515 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "Atmel-AVR-SFR-Definitionen (C) 1996 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; Prozessorkern
+
+sreg port $3f ; Statusregister:
+c equ 0 ; Carry
+z equ 1 ; Ergebnis Null
+n equ 2 ; Ergebnis negativ
+v equ 3 ; Zweierkomplement-Überlauf
+s equ 4 ; Vorzeichen
+h equ 5 ; Halfcarry
+t equ 6 ; Bitspeicher
+i equ 7 ; globale Interruptsperre
+
+ if MOMCPU>=$902313
+spl equ $3d ; Stapelzeiger (MSB)
+ if MOMCPU>=$904414
+sph equ $3e ; (LSB)
+ endif
+ endif
+
+;----------------------------------------------------------------------------
+; Chip-Konfiguration
+
+mcucr port $35 ; CPU-Steuerung:
+isc00 equ 0 ; Flankenwahl INT0
+isc01 equ 1 ; Flanken/Pegeltriggerung INT0
+ if MOMCPU>=$902313
+isc10 equ 2 ; Flankenwahl INT1
+isc11 equ 3 ; Flanken/Pegeltriggerung INT1
+ endif
+sm equ 4 ; Idle/Powerdown-Modus wählen
+se equ 5 ; Sleep-Modus freigeben
+ if MOMCPU>=$904414
+srw equ 6 ; Wait-State-Wahl externes SRAM
+sre equ 7 ; Freigabe externes SRAM
+ endif
+
+;----------------------------------------------------------------------------
+; Interrupt-Steuerung
+
+gimsk port $3b ; generelle Interrupt-Maske:
+int0 equ 6 ; externer Interrupt 0
+ if MOMCPU>=$902313
+int1 equ 7 ; externer Interrupt 1
+ endif
+
+ if MOMCPU>=$902313
+gifr port $3a ; generelle Interrupt-Flags:
+intf0 equ 6 ; externer Interrupt 0
+intf1 equ 7 ; externer Interrupt 1
+ endif
+
+timsk port $39 ; Timer-Interrupt-Maske:
+toie0 equ 1 ; Überlauf Timer 0
+ if MOMCPU>=$902313
+ if MOMCPU>=$904414
+ocie1b equ 5 ; Vergleich B Timer 1
+ endif
+ocie1a equ 6 ; Vergleich Timer 1
+toie1 equ 7 ; Überlauf Timer 1
+ticie1 equ 3 ; Fang Timer 1
+ endif
+
+tifr port $38 ; Timer-Interrupt-Flags:
+tov0 equ 1 ; Überlauf Timer 0
+ if MOMCPU>=$902313
+ if MOMCPU>=$904414
+ocf1b equ 5 ; Vergleich B Timer 1
+ endif
+ocf1a equ 6 ; Vergleich A Timer 1
+tov1 equ 7 ; Überlauf Timer 1
+icf1 equ 3 ; Fang Timer 1
+ endif
+
+;----------------------------------------------------------------------------
+; parallele Ports
+
+ if MOMCPU>=$904414
+porta port $1b ; Datenregister Port A
+ddra port $1a ; Datenrichtungsregister Port A
+pina port $19 ; Leseregister Port A
+ endif
+
+portb port $18 ; Datenregister Port B
+ddrb port $17 ; Datenrichtungsregister Port B
+pinb port $16 ; Leseregister Port B
+
+ if MOMCPU>=$904414
+portc port $15 ; Datenregister Port C
+ddrc port $14 ; Datenrichtungsregister Port C
+pinc port $13 ; Leseregister Port C
+ endif
+
+portd port $12 ; Datenregister Port D
+ddrd port $11 ; Datenrichtungsregister Port D
+pind port $10 ; Leseregister Port D
+
+;----------------------------------------------------------------------------
+; Timer
+
+tccr0 port $33 ; Steuerregister Timer 0:
+cs00 equ 0 ; Vorteilereinstellung
+cs01 equ 1
+cs02 equ 2
+
+tcnt0 port $32 ; Zählregister Timer 0
+
+ if MOMCPU>=$902313
+tccr1a port $2f ; Steuerregister A Timer 1:
+pwm10 equ 0 ; Modus Pulsweitenmodulator
+pwm11 equ 1
+com1a0 equ 6 ; Vergleichsmodus A
+com1a1 equ 7
+ if MOMCPU>=$904414
+com1b0 equ 4 ; Vergleichsmodus B
+com1b1 equ 5
+ endif
+
+tccr1b port $2e ; Steuerregister B Timer 1:
+cs10 equ 0 ; Vorteilereinstellung
+cs11 equ 1
+cs12 equ 2
+ctc1 equ 3 ; nach Gleichheit zurücksetzen ?
+ices1 equ 6 ; Flankenwahl Fang
+icnc1 equ 7 ; Rauschfilter für Fangfunktion
+
+tcnt1l port $2c ; Zählregister Timer 1 (LSB)
+tcnt1h port $2d ; (MSB)
+
+ if MOMCPU>=$904414
+ocr1al port $2a ; Vergleichsregister A Timer 1 (LSB)
+ocr1ah port $2b ; (MSB)
+ocr1bl port $28 ; Vergleichsregister B Timer 1 (LSB)
+ocr1bh port $29 ; (MSB)
+ elseif
+ocr1l port $2a ; Vergleichsregister Timer 1 (LSB)
+ocr1h port $2b ; (MSB)
+ endif
+
+icr1l port $24 ; Fangwert Timer 1 (LSB)
+icr1h port $25 ; (MSB)
+ endif
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+wdtcr port $21 ; Watchdog-Steuerregister:
+wdp0 equ 0 ; Vorteiler
+wdp1 equ 1
+wdp2 equ 2
+wde equ 3 ; Freigabe
+ if MomCPU>=$902313
+wdttoe equ 4 ; zur Sperre gebraucht
+ endif
+
+;----------------------------------------------------------------------------
+; serielle Ports
+
+ if MOMCPU>=$902312
+udr port $0c ; Datenregister UART
+
+usr port $0b ; Statusregister UART:
+or equ 3 ; Empfängerüberlauf
+fe equ 4 ; Framing-Fehler
+udre equ 5 ; Datenregister wieder frei
+txc equ 6 ; Sendung komplett
+rxc equ 7 ; Empfang komplett
+
+ucr port $0a ; Steuerregister UART:
+txb8 equ 0 ; Sendebit 8
+rxb8 equ 1 ; Empfangsbit 8
+chr9 equ 2 ; auf 9-Bit-Datenwerte umschalten
+txen equ 3 ; Sender freigeben
+rxen equ 4 ; Empfänger freigeben
+udrie equ 5 ; Interrupts bei freiem Datenregister freigeben
+txcie equ 6 ; Interrupts nach Versand freigeben
+rxcie equ 7 ; Interrupts nach Empfang freigeben
+
+ubrr port $09 ; Baudratengenerator
+ endif
+
+ if MOMCPU>=$904414
+spcr port $0d ; SPI Steuerregister:
+spr0 equ 0 ; Wahl Taktfrequenz
+spr1 equ 1
+cpha equ 2 ; Taktphase
+cpol equ 3 ; Taktpolarität
+mstr equ 4 ; Master/Slave-Wahl
+dord equ 5 ; Bitreihenfolge
+spe equ 6 ; SPI freigeben
+spie equ 7 ; Interruptfreigabe SPI
+
+spsr port $0e ; SPI Statusregister:
+wcol equ 6 ; Schreibkollision ?
+spif equ 7 ; SPI-Interrupt aufgetreten ?
+
+spdr port $0f ; SPI Datenregister
+ endif
+
+;----------------------------------------------------------------------------
+; Analogkomparator
+
+acsr port $08 ; Komparator-Steuer/Statusregister:
+acis0 equ 0 ; Interrupt-Modus
+acis1 equ 1
+ if MomCPU>=$902313
+acic equ 2 ; Komparator als Fangsignal für Timer 1 benutzen
+ endif
+acie equ 3 ; Interrupt freigeben
+aci equ 4 ; Interrupt aufgetreten ?
+aco equ 5 ; Komparatorausgang
+acd equ 7 ; Strom abschalten
+
+;----------------------------------------------------------------------------
+; EEPROM
+
+ if MomCPU>=$908515
+eearl port $1e ; Adreßregister
+eearh port $1f
+ elseif
+eear port $1e
+ endif
+
+eedr port $1d ; Datenregister
+
+eecr port $1c ; Steuerregister:
+eere equ 0 ; Lesefreigabe
+eewe equ 1 ; Schreibfreigabe
+ if MomCPU>=$902313
+eemwe equ 2
+ endif
+
+;----------------------------------------------------------------------------
+; Vektoren
+; Leider verschieben sich Vektoren bei den höheren Prozessoren.
+; Warum nur, Atmel, warum ?
+
+vec_reset label 0 ; Reset-Einsprung
+vec_int0 label 1 ; Einsprung ext. Interrupt 0
+ switch MOMCPUNAME
+ case "AT90S1200"
+vec_tm0ovf label 2 ; Einsprung Überlauf Timer 0
+vec_anacomp label 3 ; Einsprung Analog-Komparator
+ case "AT90S2313"
+vec_int1 label 2 ; Einsprung ext. Interrupt 2
+vec_tm1capt label 3 ; Einsprung Fang Timer 1
+vec_tm1comp label 4 ; Einsprung Vergleich Timer 1
+vec_tm1ovf label 5 ; Einsprung Überlauf Timer 1
+vec_tm0ovf label 6 ; Einsprung Überlauf Timer 0
+vec_uartrx label 7 ; Einsprung UART Empfang komplett
+vec_uartudre label 8 ; Einsprung UART Datenregister leer
+vec_uarttx label 9 ; Einsprung UART Sendung komplett
+vec_anacomp label 10 ; Einsprung Analog-Komparator
+ case "AT90S4414","AT90S8515"
+vec_int1 label 2 ; Einsprung ext. Interrupt 2
+vec_tm1capt label 3 ; Einsprung Fang Timer 1
+vec_tm1compa label 4 ; Einsprung Vergleich A Timer 1
+vec_tm1compb label 5 ; Einsprung Vergleich A Timer 1
+vec_tm1ovf label 6 ; Einsprung Überlauf Timer 1
+vec_tm0ovf label 7 ; Einsprung Überlauf Timer 0
+vec_spi label 8 ; Einsprung SPI-Interrupt
+vec_uartrx label 9 ; Einsprung UART Empfang komplett
+vec_uartudre label 10 ; Einsprung UART Datenregister leer
+vec_uarttx label 11 ; Einsprung UART Sendung komplett
+vec_anacomp label 12 ; Einsprung Analog-Komparator
+ endcase
+
+;----------------------------------------------------------------------------
+; Speicheradressen
+
+eestart equ 0 ; Startadresse internes EEPROM
+iram equ 96,data ; Startadresse internes SRAM
+ ; (hinter gemapptem I/O)
+irom label 0 ; Startadresse internes EPROM
+
+ switch MOMCPUNAME
+ case "AT90S1200"
+eeend equ 63 ; Endadresse EEPROM
+iramend equ 95,data ; Endadresse SRAM
+iromend label 1023 ; Endadresse EPROM
+ case "AT90S2313"
+eeend equ 127
+iramend equ $df,data
+iromend label 2047
+ case "AT90S4414"
+eeend equ 255
+iramend equ $15f,data
+iromend label 4095
+ case "AT90S8515"
+eeend equ 511
+iramend equ $25f,data
+iromend label 8191
+ endcase
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
+
+
diff --git a/include/regcop8.inc b/include/regcop8.inc
new file mode 100644
index 0000000..cbf8292
--- /dev/null
+++ b/include/regcop8.inc
@@ -0,0 +1,242 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REGCOP8.INC *
+;* *
+;* Sinn : enthält Registerdefinitionen für die COP8-Familie *
+;* *
+;* letzte Änderungen : 2. 9.1996 *
+;* 8. 2.1997 MOmPass=1... *
+;* *
+;****************************************************************************
+
+ ifndef regcop8inc ; verhindert Mehrfacheinbindung
+
+regcop8inc equ 1
+
+ if MOMPASS=1
+ switch MOMCPUNAME
+ case "COP87L84"
+ message "including COP87L84-registers"
+ elsecase
+ fatal "invalid processor type: only COP87L84 allowed!"
+ endcase
+ endif
+
+;----------------------------------------------------------------------------
+; Prozessorkern
+
+__REG set 0
+ rept 10
+R{"\{__REG}"} equ __REG+0xf0
+__REG set __REG+1,data
+ endm
+ rept 6
+R1{"\{__REG-10}"} equ __REG+0xf0
+__REG set __REG+1,data
+ endm
+
+psw sfr 0xef ; Flags
+gie equ 0 ; globale Interruptfreigabe
+exen equ 1 ; externe Interruptfreigabe
+busy equ 2 ; Microwire busy ?
+expnd equ 3 ; externer Interrupt angefordert ?
+t1ena equ 4 ; Timer 1 Interruptfreigabe
+t1pnda equ 5 ; Timer 1 Interrupt angefordert ?
+c equ 6 ; Carry
+hc equ 7 ; Halfcarry
+x sfr 0xfc ; X-Register
+sp sfr 0xfd ; Stackpointer
+b sfr 0xfe ; B-Register
+
+;----------------------------------------------------------------------------
+; Peripherie-Steuerregister
+
+cntrl sfr 0xee ; globale Steuerung
+sl0 equ 0 ; Taktteiler Microwire
+sl1 equ 1
+iedg equ 2 ; Flankenwahl externer Interrupt
+msel equ 3 ; G4/G5 für Microwire benutzen
+t1c0 equ 4 ; Timer 1 Interrupt/Start-Stop
+t1c1 equ 5 ; Moduswahl Timer 1
+t1c2 equ 6
+t1c3 equ 7
+
+icntrl sfr 0xe8 ; Fortsetzung...
+t1enb equ 0 ; Freigabe Fang-Interrupt Timer 1
+t1pndb equ 1 ; Fang-Interrupt Timer 1 aufgetreten ?
+uwen equ 2 ; Freigabe MicroWire-Interrupt
+uwpnd equ 3 ; MicroWire-Interrupt aufgetreten ?
+t0en equ 4 ; Freigabe Interrupt Timer 0
+t0pndb equ 5 ; Timer 0-Interrupt aufgetreten ?
+lpen equ 6 ; Freigabe Port L-Interrupt
+
+;----------------------------------------------------------------------------
+; Timer
+
+t1rblo sfr 0xe6 ; Autoload-Wert B Timer 1
+t1rbhi sfr 0xe7
+
+tmr1lo sfr 0xea ; Zählwert Timer 0
+tmr1hi sfr 0xeb
+
+t1ralo sfr 0xec ; Autoload-Wert A Timer 1
+t1rahi sfr 0xed
+
+;----------------------------------------------------------------------------
+; PWM
+
+pscal sfr 0xa0 ; Vorteiler PWM
+
+rlon sfr 0xa1 ; On-Anteil PWM
+
+pwmcon sfr 0xa2 ; Steuerregister PWM
+pwen0 equ 0 ; PWM0 auf I/O-Port geben
+pwen1 equ 1 ; PWM1 auf I/O-Port geben
+pwon equ 2 ; PWM starten/stoppen
+pwmd equ 3 ; PWM-Modus
+pwie equ 4 ; Interrupt-Freigabe PWM
+pwpnd equ 5 ; Interrupt PWM aufgetreten ?
+esel equ 6 ; Flankenwahl PWM
+
+;----------------------------------------------------------------------------
+; MicroWire-Interface
+
+wkedg sfr 0xc8
+wken sfr 0xc9
+wkpnd sfr 0xca
+
+sior sfr 0xe9 ; Schieberegister
+
+;----------------------------------------------------------------------------
+; CAN Interface
+
+txd1 sfr 0xb0 ; Sendedaten (Byte 1,3,5,7,...)
+txd2 sfr 0xb1 ; Sendedaten (Byte 2,4,6,8,...)
+
+tdlc sfr 0xb2 ; Sendelängen-/Identifier(L)-Register
+tdlc0 equ 0 ; Sendelänge
+tdlc1 equ 1
+tdlc2 equ 2
+tdlc3 equ 3
+tid0 equ 4 ; Sendeidentifikation (Bit 0..3)
+tid1 equ 5
+tid2 equ 6
+tid3 equ 7
+
+tid sfr 0xb3 ; Sendeidentifikationsregister
+tid4 equ 0 ; Sendeidentifikation (Bit 4..10)
+tid5 equ 1
+tid6 equ 2
+tid7 equ 3
+tid8 equ 4
+tid9 equ 5
+tid10 equ 6
+trtr equ 7 ; Senderahmen remote ?
+
+rxd1 sfr 0xb4 ; Empfangsdaten (Byte 1,3,5,7,...)
+rxd2 sfr 0xb5 ; Empfangsdaten (Byte 2,4,6,8,...)
+
+ridl sfr 0xb6 ; Empfangslängen/Identifier(L)-Register
+rdlc0 equ 0 ; Empfangslänge
+rdlc1 equ 1
+rdlc2 equ 2
+rdlc3 equ 3
+rid0 equ 4 ; Empfangsidentifikation (Bit 0..3)
+rid1 equ 5
+rid2 equ 6
+rid3 equ 7
+
+rid sfr 0xb7 ; Empfangsidentifikationsregister
+rid4 equ 0 ; Empfangsidentifikation (Bit 4..10)
+rid5 equ 1
+rid6 equ 2
+rid7 equ 3
+rid8 equ 4
+rid9 equ 5
+rid10 equ 6
+
+cscal sfr 0xb8 ; Vorteiler CAN-Takt
+
+ctim sfr 0xb9 ; CAN-Bus-Timing-Register
+ps0 equ 2 ; Phase Segment
+ps1 equ 3
+ps2 equ 4
+pps0 equ 5 ; Propagation Segment
+pps1 equ 6
+pps2 equ 7
+
+cbus sfr 0xba ; CAN-Bus-Timing-Register
+fmod equ 1 ; Fault Confinement Mode
+rxred0 equ 2 ; Referenzspannung an Rx0 anlegen
+rxref1 equ 3 ; Referenzspannung an Tx0 anlegen
+txen0 equ 4 ; TxD Ausgangstreiber freigeben
+txen1 equ 5
+riaf equ 6 ; Empfangsfilter freigeben
+
+tcntl sfr 0xbb ; CAN-Bus-Steuer/Statusregister
+txss equ 0 ; Sender starten/stoppen
+rie equ 1 ; Freigabe Empfangs-Interrupt
+tie equ 2 ; Freigabe Sende-Interrupt
+ceie equ 3 ; Freigabe CAN-Interrupt
+rerr equ 4 ; Empfangsfehler
+terr equ 5 ; Sendefehler
+ns0 equ 6 ; Knoten-Status
+ns1 equ 7
+
+rtstat sfr 0xbc ; CAN-Bus-Sender/Empfängerstatus
+rbf equ 0 ; Empfangspuffer voll ?
+rcv equ 1 ; Empfang läuft ?
+rfv equ 2 ; empfangener Rahmen gültig ?
+rorn equ 3 ; Empfängerüberlauf ?
+rold equ 4 ; Empfängerrahmenüberlauf ?
+rrtr equ 5 ; Remote-Bit in empfangenem Rahmen gesetzt ?
+txpnd equ 6 ; Sendung läuft ?
+tbe equ 7 ; Sendepuffer leer ?
+
+tec sfr 0xbd ; Sendefehlerzähler
+rec sfr 0xbe ; Empfangsfehlerzähler
+
+;----------------------------------------------------------------------------
+; Komparatoren
+
+cmpsl sfr 0xd3 ; Steuerregister Komparatoren
+cmp1en equ 1 ; Komparator 1 aktivieren
+cmp1rd equ 2 ; Ausgangswert Komparator 1
+cmp1oe equ 3 ; Ausgang Komparator 1 herausgeben
+cmp2en equ 4 ; Komparator 2 aktivieren
+cmp2rd equ 5 ; Ausgangswert Komparator 2
+cmp2oe equ 6 ; Ausgang Komparator 2 herausgeben
+cmp2sel equ 7 ; Ausgabe Komparator 2 auf L3/L5
+
+;----------------------------------------------------------------------------
+; Ports
+
+portld sfr 0xd0 ; Ausgaberegister Port L
+portlc sfr 0xd1 ; Konfigurationsregister Port L
+portlp sfr 0xd2 ; Leseregister Port L
+
+portgd sfr 0xd4 ; Ausgaberegister Port G
+portgc sfr 0xd5 ; Konfigurationsregister Port G
+portgp sfr 0xd6 ; Leseregister Port G
+
+portd sfr 0xdc ; Ausgaberegister Port D
+
+;----------------------------------------------------------------------------
+; Vektoradressen
+
+;----------------------------------------------------------------------------
+; Speicheradressen
+
+iram sfr 0x00 ; Bereich internes RAM
+iramend sfr 0x2f
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; Listing wieder an
+
+
diff --git a/include/reghc12.inc b/include/reghc12.inc
new file mode 100644
index 0000000..1a35ad8
--- /dev/null
+++ b/include/reghc12.inc
@@ -0,0 +1,228 @@
+ save
+ listing off
+
+;*****************************************************************************
+; REGHC12.INC
+; Register Definitions for HC812A4 & HC912B32
+; Source: MC68HC812A4, MC68HC912B32 Technical Summary (Motorola 1996)
+; 27.01.1997
+; Oliver Thamm (othamm@aol.com)
+;*****************************************************************************
+
+ ifndef reghc12inc ; verhindert Mehrfacheinbindung
+
+reghc12inc equ 1
+
+ if (MOMCPUNAME<>"68HC12")
+ fatal "Falscher Prozessortyp eingestellt: nur 68HC12 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "68HC812A4/68HC912B32-Registerdefinitionen"
+ message "(C) 1996,1997 Oliver Thamm"
+ endif
+
+;-----------------------------------------------------------------------------
+
+REGBASE equ $0000 ; Below: [A=HC812A4|B=HC912B32]
+
+PORTA equ REGBASE+$0000 ; [A|B] Port A Register
+PORTB equ REGBASE+$0001 ; [A|B] Port B Register
+DDRA equ REGBASE+$0002 ; [A|B] Port A Data Direction Register
+DDRB equ REGBASE+$0003 ; [A|B] Port B Data Direction Register
+PORTC equ REGBASE+$0004 ; [A|-] Port C Register
+PORTD equ REGBASE+$0005 ; [A|-] Port D Register
+DDRC equ REGBASE+$0006 ; [A|-] Port C Data Direction Register
+DDRD equ REGBASE+$0007 ; [A|-] Port D Data Direction Register
+PORTE equ REGBASE+$0008 ; [A|B] Port E Register
+DDRE equ REGBASE+$0009 ; [A|B] Port E Data Direction Register
+PEAR equ REGBASE+$000a ; [A|B] Port E Assignment Register
+MODE equ REGBASE+$000b ; [A|B] Mode Register
+PUCR equ REGBASE+$000c ; [A|B] Pull Up Control Register
+RDRIV equ REGBASE+$000d ; [A|B] Reduced Drive of I/O Lines
+
+INITRM equ REGBASE+$0010 ; [A|B] Initialization of Internal RAM Position Register
+INITRG equ REGBASE+$0011 ; [A|B] Initialization of Internal Register Position Register
+INITEE equ REGBASE+$0012 ; [A|B] Initialization of Internal EEPROM Position Register
+MISC equ REGBASE+$0013 ; [A|B] Miscellaneous Mapping Register
+RTICTL equ REGBASE+$0014 ; [A|B] Real-Time Interrupt Control Register
+RTIFLG equ REGBASE+$0015 ; [A|B] Real-Time Interrupt Flag Register
+COPCTL equ REGBASE+$0016 ; [A|B] COP Control Register
+COPRST equ REGBASE+$0017 ; [A|B] Arm/Reset COP Timer Register
+ITST0 equ REGBASE+$0018 ; [A|B] Reserved
+ITST1 equ REGBASE+$0019 ; [A|B] Reserved
+ITST2 equ REGBASE+$001a ; [A|B] Reserved
+ITST3 equ REGBASE+$001b ; [A|B] Reserved
+
+INTCR equ REGBASE+$001e ; [A|B] Interrupt Control Register
+HPRIO equ REGBASE+$001f ; [A|B] Highest Priority I Interrupt
+KWIED equ REGBASE+$0020 ; [A|-] Key Wakeup Port D Interrupt Enable Register
+BRKCT0 equ REGBASE+$0020 ; [-|B] Breakpoint Control Register 0
+KWIFD equ REGBASE+$0021 ; [A|-] Key Wakeup Port D Flag Register
+BRKCT1 equ REGBASE+$0021 ; [-|B] Breakpoint Control Register 1
+BRKAH equ REGBASE+$0022 ; [-|B] Breakpoint Address Register (High Byte)
+BRKAL equ REGBASE+$0023 ; [-|B] Breakpoint Address Register (Low Byte)
+PORTH equ REGBASE+$0024 ; [A|-] Port H Register
+BRKDH equ REGBASE+$0024 ; [-|B] Breakpoint Data Register (High Byte)
+DDRH equ REGBASE+$0025 ; [A|-] Port H Data Direction Register
+BRKDL equ REGBASE+$0025 ; [-|B] Breakpoint Data Register (Low Byte)
+KWIEH equ REGBASE+$0026 ; [A|-] Key Wakeup Port H Interrupt Enable Register
+KWIFH equ REGBASE+$0027 ; [A|-] Key Wakeup Port H Flag Register
+PORTJ equ REGBASE+$0028 ; [A|-] Port J Register
+DDRJ equ REGBASE+$0029 ; [A|-] Port J Data Direction Register
+KWIEJ equ REGBASE+$002a ; [A|-] Key Wakeup Port J Interrupt Enable Register
+KWIFJ equ REGBASE+$002b ; [A|-] Key Wakeup Port J Flag Register
+KPOLJ equ REGBASE+$002c ; [A|-] Key Wakeup Port J Polarity Register
+PUPSJ equ REGBASE+$002d ; [A|-] Key Wakeup Port J Pull-Up/Pulldown Select Register
+PULEJ equ REGBASE+$002e ; [A|-] Key Wakeup Port J Pull-Up/Pulldown Enable Register
+
+PORTF equ REGBASE+$0030 ; [A|-] Port F Register
+PORTG equ REGBASE+$0031 ; [A|-] Port G Register
+DDRF equ REGBASE+$0032 ; [A|-] Port F Data Direction Register
+DDRG equ REGBASE+$0033 ; [A|-] Port G Data Direction Register
+DPAGE equ REGBASE+$0034 ; [A|-] Data Page Register
+PPAGE equ REGBASE+$0035 ; [A|-] Program Page Register
+EPAGE equ REGBASE+$0036 ; [A|-] Extra Page Register
+WINDEF equ REGBASE+$0037 ; [A|-] Window Definition Register
+MXAR equ REGBASE+$0038 ; [A|-] Memory Expansion Assignment Register
+
+CSCTL0 equ REGBASE+$003c ; [A|-] Chip Select Control Register 0
+CSCTL1 equ REGBASE+$003d ; [A|-] Chip Select Control Register 1
+CSSTR0 equ REGBASE+$003e ; [A|-] Chip Select Stretch Register 0
+CSSTR1 equ REGBASE+$003f ; [A|-] Chip Select Stretch Register 1
+LDV equ REGBASE+$0040 ; [A|-] Loop Divider Registers (Word)
+PWCLK equ REGBASE+$0040 ; [-|B] PWM Clocks and Concatenate
+PWPOL equ REGBASE+$0041 ; [-|B] PWM Clock Select and Polarity
+RDV equ REGBASE+$0042 ; [A|-] Reference Divider Register (Word)
+PWEN equ REGBASE+$0042 ; [-|B] PWM Enable
+PWPRES equ REGBASE+$0043 ; [-|B] PWM Prescale Counter
+PWSCAL0 equ REGBASE+$0044 ; [-|B] PWM Scale Register 0
+PWSCNT0 equ REGBASE+$0045 ; [-|B] PWM Scale Counter 0 Value
+PWSCAL1 equ REGBASE+$0046 ; [-|B] PWM Scale Register 1
+CLKCTL equ REGBASE+$0047 ; [A|-] Clock Control Register
+PWSCNT1 equ REGBASE+$0047 ; [-|B] PWM Scale Counter 1 Value
+PWCNT0 equ REGBASE+$0048 ; [-|B] PWM Channel 0 Counter
+PWCNT1 equ REGBASE+$0049 ; [-|B] PWM Channel 1 Counter
+PWCNT2 equ REGBASE+$004a ; [-|B] PWM Channel 2 Counter
+PWCNT3 equ REGBASE+$004b ; [-|B] PWM Channel 3 Counter
+PWPER0 equ REGBASE+$004c ; [-|B] PWM Channel 0 Period Register
+PWPER1 equ REGBASE+$004d ; [-|B] PWM Channel 1 Period Register
+PWPER2 equ REGBASE+$004e ; [-|B] PWM Channel 2 Period Register
+PWPER3 equ REGBASE+$004f ; [-|B] PWM Channel 3 Period Register
+PWDTY0 equ REGBASE+$0050 ; [-|B] PWM Channel 0 Duty Register
+PWDTY1 equ REGBASE+$0051 ; [-|B] PWM Channel 1 Duty Register
+PWDTY2 equ REGBASE+$0052 ; [-|B] PWM Channel 2 Duty Register
+PWDTY3 equ REGBASE+$0053 ; [-|B] PWM Channel 3 Duty Register
+PWCTL equ REGBASE+$0054 ; [-|B] PWM Control Register
+PWTST equ REGBASE+$0055 ; [-|B] PWM Special Mode Register
+PORTP equ REGBASE+$0056 ; [-|B] Port P Data Register
+DDRP equ REGBASE+$0057 ; [-|B] Port P Data Direction Register
+
+ATDCTL0 equ REGBASE+$0060 ; [A|B] Reserved
+ATDCTL1 equ REGBASE+$0061 ; [A|B] Reserved
+ATDCTL2 equ REGBASE+$0062 ; [A|B] ATD Control Register 2
+ATDCTL3 equ REGBASE+$0063 ; [A|B] ATD Control Register 3
+ATDCTL4 equ REGBASE+$0064 ; [A|B] ATD Control Register 4
+ATDCTL5 equ REGBASE+$0065 ; [A|B] ATD Control Register 5
+ATDSTAT equ REGBASE+$0066 ; [A|B] ATD Status Register (Word)
+ATDTEST equ REGBASE+$0068 ; [A|B] ATD Test Register (Word)
+
+PORTAD equ REGBASE+$006f ; [A|B] Port AD Data Input Register
+
+ADR0H equ REGBASE+$0070 ; [A|B] A/D Converter Result Register 0
+
+ADR1H equ REGBASE+$0072 ; [A|B] A/D Converter Result Register 1
+
+ADR2H equ REGBASE+$0074 ; [A|B] A/D Converter Result Register 2
+
+ADR3H equ REGBASE+$0076 ; [A|B] A/D Converter Result Register 3
+
+ADR4H equ REGBASE+$0078 ; [A|B] A/D Converter Result Register 4
+
+ADR5H equ REGBASE+$007a ; [A|B] A/D Converter Result Register 5
+
+ADR6H equ REGBASE+$007c ; [A|B] A/D Converter Result Register 6
+
+ADR7H equ REGBASE+$007e ; [A|B] A/D Converter Result Register 7
+
+TIOS equ REGBASE+$0080 ; [A|B] Timer Input Capture/Output Compare Select
+CFORC equ REGBASE+$0081 ; [A|B] Timer Compare Force Register
+OC7M equ REGBASE+$0082 ; [A|B] Output Compare 7 Mask Register
+OC7D equ REGBASE+$0083 ; [A|B] Output Compare 7 Data Register
+TCNT equ REGBASE+$0084 ; [A|B] Timer Count Register (Word)
+TSCR equ REGBASE+$0086 ; [A|B] Timer System Control Register
+TQCR equ REGBASE+$0087 ; [A|B] Reserved
+TCTL1 equ REGBASE+$0088 ; [A|B] Timer Control Register 1
+TCTL2 equ REGBASE+$0089 ; [A|B] Timer Control Register 2
+TCTL3 equ REGBASE+$008a ; [A|B] Timer Control Register 3
+TCTL4 equ REGBASE+$008b ; [A|B] Timer Control Register 4
+TMSK1 equ REGBASE+$008c ; [A|B] Timer Interrupt Mask 1
+TMSK2 equ REGBASE+$008d ; [A|B] Timer Interrupt Mask 2
+TFLG1 equ REGBASE+$008e ; [A|B] Timer Interrupt Flag 1
+TFLG2 equ REGBASE+$008f ; [A|B] Timer Interrupt Flag 2
+TC0 equ REGBASE+$0090 ; [A|B] Timer Input Capture/Output Compare Register 0 (Word)
+TC1 equ REGBASE+$0092 ; [A|B] Timer Input Capture/Output Compare Register 1 (Word)
+TC2 equ REGBASE+$0094 ; [A|B] Timer Input Capture/Output Compare Register 2 (Word)
+TC3 equ REGBASE+$0096 ; [A|B] Timer Input Capture/Output Compare Register 3 (Word)
+TC4 equ REGBASE+$0098 ; [A|B] Timer Input Capture/Output Compare Register 4 (Word)
+TC5 equ REGBASE+$009a ; [A|B] Timer Input Capture/Output Compare Register 5 (Word)
+TC6 equ REGBASE+$009c ; [A|B] Timer Input Capture/Output Compare Register 6 (Word)
+TC7 equ REGBASE+$009e ; [A|B] Timer Input Capture/Output Compare Register 7 (Word)
+PACTL equ REGBASE+$00a0 ; [A|B] Pulse Accumulator Control Register
+PAFLG equ REGBASE+$00a1 ; [A|B] Pulse Accumulator Flag Register
+PACNT equ REGBASE+$00a2 ; [A|B] 16-bit Pulse Accumulator Count Register (Word)
+
+TIMTST equ REGBASE+$00ad ; [A|B] Timer Test Register
+PORTT equ REGBASE+$00ae ; [A|B] Port T Register
+DDRT equ REGBASE+$00af ; [A|B] Port T Data Direction Register
+
+SC0BDH equ REGBASE+$00c0 ; [A|B] SCI 0 Baud Rate Control Register High
+SC0BDL equ REGBASE+$00c1 ; [A|B] SCI 0 Baud Rate Control Register Low
+SC0CR1 equ REGBASE+$00c2 ; [A|B] SCI 0 Control Register 1
+SC0CR2 equ REGBASE+$00c3 ; [A|B] SCI 0 Control Register 2
+SC0SR1 equ REGBASE+$00c4 ; [A|B] SCI 0 Status Register 1
+SC0SR2 equ REGBASE+$00c5 ; [A|B] SCI 0 Status Register 2
+SC0DRH equ REGBASE+$00c6 ; [A|B] SCI 0 Data Register High
+SC0DRL equ REGBASE+$00c7 ; [A|B] SCI 0 Data Register Low
+SC1BDH equ REGBASE+$00c8 ; [A|-] SCI 1 Baud Rate Control Register High
+SC1BDL equ REGBASE+$00c9 ; [A|-] SCI 1 Baud Rate Control Register Low
+SC1CR1 equ REGBASE+$00ca ; [A|-] SCI 1 Control Register 1
+SC1CR2 equ REGBASE+$00cb ; [A|-] SCI 1 Control Register 2
+SC1SR1 equ REGBASE+$00cc ; [A|-] SCI 1 Status Register 1
+SC1SR2 equ REGBASE+$00cd ; [A|-] SCI 1 Status Register 2
+SC1DRH equ REGBASE+$00ce ; [A|-] SCI 1 Data Register High
+SC1DRL equ REGBASE+$00cf ; [A|-] SCI 1 Data Register Low
+SP0CR1 equ REGBASE+$00d0 ; [A|B] SPI Control Register 1
+SP0CR2 equ REGBASE+$00d1 ; [A|B] SPI Control Register 2
+SP0BR equ REGBASE+$00d2 ; [A|B] SPI Baud Rate Register
+SP0SR equ REGBASE+$00d3 ; [A|B] SPI Status Register
+
+SP0DR equ REGBASE+$00d5 ; [A|B] SPI Data Register
+PORTS equ REGBASE+$00d6 ; [A|B] Port S Register
+DDRS equ REGBASE+$00d7 ; [A|B] Port S Data Direction Register
+
+PURDS equ REGBASE+$00db ; [-|B] Pullup and Reduced Drive for Port S
+
+EEMCR equ REGBASE+$00f0 ; [A|B] EEPROM Module Configuration
+EEPROT equ REGBASE+$00f1 ; [A|B] EEPROM Block Protect
+EETST equ REGBASE+$00f2 ; [A|B] EEPROM Test
+EEPROG equ REGBASE+$00f3 ; [A|B] EEPROM Control
+FEELCK equ REGBASE+$00f4 ; [-|B] Flash EEPROM Lock Control Register
+FEEMCR equ REGBASE+$00f5 ; [-|B] Flash EEPROM Module Configuration Register
+FEETST equ REGBASE+$00f6 ; [-|B] Flash EEPROM Module Test Register
+FEECTL equ REGBASE+$00f7 ; [-|B] Flash EEPROM Control Register
+BCR1 equ REGBASE+$00f8 ; [-|B] BDLC Control Register 1
+BSVR equ REGBASE+$00f9 ; [-|B] BDLC State Vector Register
+BCR2 equ REGBASE+$00fa ; [-|B] BDLC Control Register 2
+BDR equ REGBASE+$00fb ; [-|B] BDLC Data Register
+BARD equ REGBASE+$00fc ; [-|B] BDLC Analog Roundtrip Delay Register
+DLCSCR equ REGBASE+$00fd ; [-|B] Port DLC Control Register
+PORTDLC equ REGBASE+$00fe ; [-|B] Port DLC Data Register
+DDRDLC equ REGBASE+$00ff ; [-|B] Port DLC Data Direction Register
+
+;-----------------------------------------------------------------------------
+
+ endif ; von IFDEF...
+ restore ; wieder erlauben
+
+
diff --git a/include/regm16c.inc b/include/regm16c.inc
new file mode 100644
index 0000000..1ac7b35
--- /dev/null
+++ b/include/regm16c.inc
@@ -0,0 +1,421 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REGM16C.INC *
+;* *
+;* Sinn : enthält Registerdefinitionen für den M16C, Modell M30600M8 *
+;* *
+;* letzte Änderungen : 30. 8.1996 *
+;* 8. 2.1997 if MomPass... *
+;* 7. 7.1999 added two more M16C family CPU entries *
+;* *
+;****************************************************************************
+
+ ifndef regm16cinc ; verhindert Mehrfacheinbindung
+
+regm16cinc equ 1
+
+ if MOMPASS=1
+ switch MOMCPUNAME
+ case "M16C"
+ fatal "please be more specific; do not use the generic processor type for this header file!"
+ case "M30600M8"
+ message "including M30600M8-registers"
+ case "M30610"
+ message "including M30610 registers"
+ case "M30620"
+ message "including M30620 registers"
+ elsecase
+ fatal "invalid processor type: only M30600M8, M30610, or M30620 allowed!"
+ endcase
+ endif
+
+;----------------------------------------------------------------------------
+; benötigte Makros
+
+__bitreg macro Name,Adr,Mask
+Name equ Adr
+ irp BIT,0,1,2,3,4,5,6,7
+ if Mask&(1<<BIT)
+Name{"BIT"} equ Adr<<3+BIT
+ endif
+ endm
+ endm
+
+;----------------------------------------------------------------------------
+; Prozessorsteuerung
+
+ __bitreg PM,0004h,0ffh ; CPU-Modusregister
+ __bitreg CM0,0006h,0ffh ; Systemtaktsteuerung 0
+ __bitreg CM1,0007h,02bh ; Systemtaktsteuerung 1
+PRCR equ 000ah ; Schutzregister
+PRC0 equ PRCR<<3+0 ; Schreibschutz CM0/CM1
+PRC1 equ PRCR<<3+1 ; Schreibschutz PM
+PRC2 equ PRCR<<3+2 ; Schreibschutz PD9
+
+;----------------------------------------------------------------------------
+; Ports
+
+P0 equ 03e0h ; Datenregister Port 0
+PD0 equ 03e2h ; Datenrichtungsregister Port 0
+
+P1 equ 03e1h ; Datenregister Port 1
+PD1 equ 03e3h ; Datenrichtungsregister Port 1
+
+P2 equ 03e4h ; Datenregister Port 2
+PD2 equ 03e6h ; Datenrichtungsregister Port 2
+
+P3 equ 03e5h ; Datenregister Port 3
+PD3 equ 03e7h ; Datenrichtungsregister Port 3
+
+P4 equ 03e8h ; Datenregister Port 4
+PD4 equ 03eah ; Datenrichtungsregister Port 4
+
+P5 equ 03e9h ; Datenregister Port 5
+PD5 equ 03ebh ; Datenrichtungsregister Port 5
+
+P6 equ 03ech ; Datenregister Port 6
+PD6 equ 03eeh ; Datenrichtungsregister Port 6
+
+P7 equ 03edh ; Datenregister Port 7
+PD7 equ 03efh ; Datenrichtungsregister Port 7
+
+P8 equ 03f0h ; Datenregister Port 8
+PD8 equ 03f2h ; Datenrichtungsregister Port 8
+
+P9 equ 03f1h ; Datenregister Port 9
+PD9 equ 03f3h ; Datenrichtungsregister Port 9
+
+P10 equ 03f4h ; Datenregister Port 10
+PD10 equ 03f6h ; Datenrichtungsregister Port 10
+
+PUR0 equ 03fch ; Pull-Up-Register
+PUR1 equ 03fdh
+PUR2 equ 03feh
+PUR3 equ 03ffh
+
+;----------------------------------------------------------------------------
+; Interruptsteuerung
+
+DM0IC equ 004bh ; DMA-Kanal 0
+DM1IC equ 004ch ; DMA-Kanal 1
+KUPIC equ 004dh ; Keyboard input
+ADIC equ 004eh ; A/D-Wandler
+S0TIC equ 0051h ; Senden UART0
+S0RIC equ 0052h ; Empfang UART0
+S1TIC equ 0053h ; Senden UART1
+S1RIC equ 0054h ; Empfang UART1
+TA0IC equ 0055h ; Timer A0
+TA1IC equ 0056h ; Timer A1
+TA2IC equ 0057h ; Timer A2
+TA3IC equ 0058h ; Timer A3
+TA4IC equ 0059h ; Timer A4
+TB0IC equ 005ah ; Timer B0
+TB1IC equ 005bh ; Timer B1
+TB2IC equ 005ch ; Timer B2
+INT0IC equ 005dh ; externer Imterrupt 0
+INT1IC equ 005eh ; externer Interrupt 1
+INT2IC equ 005fh ; externer Interrupt 2
+
+_ILVL0 equ 0 ; Prioritätsebene
+_ILVL1 equ 1
+_ILVL2 equ 2
+_IR equ 3 ; Interrupt aufgetreten ?
+_POL equ 4 ; Polaritätswahl (nur INTxIC)
+_LVS equ 5 ; Pegel/Flankentriggerung (nur INTxIC)
+
+;----------------------------------------------------------------------------
+; Chip-Selects
+
+CSR equ 0008h
+CS0 equ CSR<<3+0 ; Freigabe Chip-Selects
+CS1 equ CSR<<3+1
+CS2 equ CSR<<3+2
+CS3 equ CSR<<3+3
+CS0W equ CSR<<3+4 ; mit / ohne Wait-State ?
+CS1W equ CSR<<3+5
+CS2W equ CSR<<3+6
+CS3W equ CSR<<3+7
+
+;----------------------------------------------------------------------------
+; Adreßvergleicher
+
+RMAD0 equ 0010h ; Vergleichsadresse 0
+RMAD1 equ 0014h ; Vergleichsadresse 1
+ __bitreg AIER,0009h,03h ; Interrupt-Freigaben
+
+;----------------------------------------------------------------------------
+; DMA-Controller
+
+DM0SL equ 03b8h ; Request-Auswahl Kanal 0
+DM1SL equ 03bah ; Request-Auswahl Kanal 1
+_DSEL0 equ 0 ; Request-Grund
+_DSEL1 equ 1
+_DSEL2 equ 2
+_DSEL3 equ 3
+_DSR equ 7 ; Software-Trigger
+
+DM0CON equ 002ch ; Steuerregister Kanal 0
+DM1CON equ 003ch ; Steuerregister Kanal 1
+_DMBIT equ 0 ; Transfereinheit (1/2 Byte)
+_DMASL equ 1 ; Einzel/Blocktransfer
+_DMAS equ 2 ; Request-Anzeige
+_DMAE equ 3 ; Freigabe
+_DSD equ 4 ; feste/wandernde Quelladresse
+_DAD equ 5 ; feste/wandernde Zieladresse
+
+SAR0 equ 0020h ; Quelladresse Kanal 0
+DAR0 equ 0024h ; Zieladresse Kanal 0
+TCR0 equ 0028h ; Zähler Kanal 0
+SAR1 equ 0030h ; Quelladresse Kanal 1
+DAR1 equ 0034h ; Zieladresse Kanal 1
+TCR1 equ 0038h ; Zähler Kanal 1
+
+;----------------------------------------------------------------------------
+; Timer
+
+TA0MR equ 0396h ; Modusregister Timer A0
+TA1MR equ 0397h ; Modusregister Timer A1
+TA2MR equ 0398h ; Modusregister Timer A2
+TA3MR equ 0399h ; Modusregister Timer A3
+TA4MR equ 039ah ; Modusregister Timer A4
+TB0MR equ 039bh ; Modusregister Timer B0
+TB1MR equ 039ch ; Modusregister Timer B1
+TB2MR equ 039dh ; Modusregister Timer B2
+_TMOD0 equ 0 ; Moduswahl
+_TMOD1 equ 1
+_MR0 equ 2 ; Sub-Funktionsauswahl
+_MR1 equ 3
+_MR2 equ 4
+_MR3 equ 5
+_TCK0 equ 6 ; Zählquellenwahl
+_TCK1 equ 7
+
+TA0 equ 0386h ; Zählregister Timer A0
+TA1 equ 0388h ; Zählregister Timer A1
+TA2 equ 038ah ; Zählregister Timer A2
+TA3 equ 038ch ; Zählregister Timer A3
+TA4 equ 038eh ; Zählregister Timer A4
+TB0 equ 0390h ; Zählregister Timer B0
+TB1 equ 0392h ; Zählregister Timer B1
+TB2 equ 0394h ; Zählregister Timer B2
+
+TABSR equ 0380h ; Start/Stop-Register:
+TA0S equ TABSR<<3+0 ; Timer A0
+TA1S equ TABSR<<3+1 ; Timer A1
+TA2S equ TABSR<<3+2 ; Timer A2
+TA3S equ TABSR<<3+3 ; Timer A3
+TA4S equ TABSR<<3+4 ; Timer A4
+TB0S equ TABSR<<3+5 ; Timer B0
+TB1S equ TABSR<<3+6 ; Timer B1
+TB2S equ TABSR<<3+7 ; Timer B2
+
+CPSRF equ 0381h ; Vorteilerregister:
+CPSR equ CPSRF<<3+7 ; Vorteiler zurücksetzen
+
+ONSF equ 0382h ; Monoflop-Triggerbits
+TA0OS equ ONSF<<3+0 ; Timer A0
+TA1OS equ ONSF<<3+1 ; Timer A1
+TA2OS equ ONSF<<3+2 ; Timer A2
+TA3OS equ ONSF<<3+3 ; Timer A3
+TA4OS equ ONSF<<3+4 ; Timer A4
+TA0TGL equ ONSF<<3+6 ; Triggerwahl Timer A0
+TA0TGH equ ONSF<<3+7
+
+TRGSR equ 0383h ; Triggerwahlregister
+TA1TGL equ TRGSR<<3+0 ; Triggerwahl Timer A1
+TA1TGH equ TRGSR<<3+1
+TA2TGL equ TRGSR<<3+2 ; Triggerwahl Timer A2
+TA2TGH equ TRGSR<<3+3
+TA3TGL equ TRGSR<<3+4 ; Triggerwahl Timer A3
+TA3TGH equ TRGSR<<3+5
+TA4TGL equ TRGSR<<3+6 ; Triggerwahl Timer A4
+TA4TGH equ TRGSR<<3+7
+
+UDF equ 0384h ; Zählrichtungen(A) / Zweiphasenmodi(A2-4)
+TA0UD equ UDF<<3+0 ; Timer A0
+TA1UD equ UDF<<3+1 ; Timer A1
+TA2UD equ UDF<<3+2 ; Timer A2
+TA3UD equ UDF<<3+3 ; Timer A3
+TA4UD equ UDF<<3+4 ; Timer A4
+TA2P equ UDF<<3+5 ; Timer A2
+TA3P equ UDF<<3+6 ; Timer A3
+TA4P equ UDF<<3+7 ; Timer A4
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+WDTS equ 000eh ; Startwert
+ __bitreg WDC,000fh,80h ; Vorteilerwahl / obere Zähler-Bits
+
+;----------------------------------------------------------------------------
+; serielle Ports:
+
+U0TB equ 03a2h ; Senderegister UART0
+U1TB equ 03aah ; Senderegister UART1
+
+U0RB equ 03a6h ; Empfangsregister UART0
+U1RB equ 03aeh ; Empfangsregister UART1
+_OER equ 4 ; Overrun-Fehler ?
+_FER equ 5 ; Framing-Fehler ?
+_PER equ 6 ; Paritäts-Fehler ?
+_SUM equ 7 ; Summenfehler ?
+
+U0BRG equ 03a1h ; Baudratengenerator UART0
+U1BRG equ 03a9h ; Baudratengenerator UART1
+
+U0MR equ 03a0h ; Modusregister UART0
+U1MR equ 03a8h ; Modusregister UART1
+_SMD0 equ 0 ; Modus
+_SMD1 equ 1
+_SMD2 equ 2
+_CKDIR equ 3 ; interner/externer Takt
+_STPS equ 4 ; Anzahl Stopbits
+_PRY equ 5 ; Paritätswahl
+_PRYE equ 6 ; Paritätsart
+_SLEP equ 7 ; Sleep-Modus
+
+U0C0 equ 03a4h ; Steuerregister 0 UART0
+U1C0 equ 03ach ; Steuerregister 1 UART0
+_CLK0 equ 0 ; Taktquelle Baudratengenerator
+_CLK1 equ 1
+_CRS equ 2 ; RTS/CTS-Auswahl
+_TXEPT equ 3 ; Senderegister voll ?
+_CRD equ 4 ; CTS/RTS-Auswahl
+_NCH equ 5 ; TXD als Open-Collector ?
+_CKPOL equ 6 ; Taktpolaritätswahl
+_UFORM equ 7 ; Bitreihenfolge
+
+U0C1 equ 03a5h ; Steuerregister 1 UART0
+U1C1 equ 03adh ; Steuerregister 1 UART1
+_TE equ 0 ; Senderfreigabe
+_TI equ 1 ; Sendepuffer leer ?
+_RE equ 2 ; Empfängerfreigabe
+_RI equ 3 ; Empfangspuffer voll ?
+
+UCON equ 03b0h ; Steuerregister 2 UART0+1
+U0IRS equ UCON<<3+0 ; Interruptgrund Sender UART0
+U1IRS equ UCON<<3+1 ; Interruptgrund Sender UART1
+U0RRM equ UCON<<3+2 ; kontinuierlicher Empfangsmodus UART0
+U1RRM equ UCON<<3+3 ; kontinuierlicher Empfangsmodus UART1
+CLKMD0 equ UCON<<3+4 ; Taktausgabe an CLK1/CLKS1
+CLKMD1 equ UCON<<3+5
+RCSP equ UCON<<3+6 ; RTS/CTS gemeinsam/einzeln
+
+;----------------------------------------------------------------------------
+; CRC-Generator
+
+CRCD equ 03bch ; Ergebnis CRC-Berechnung
+
+CRCIN equ 03beh ; Datumseingabe CRC-Berechnung
+
+;----------------------------------------------------------------------------
+; A/D-Wandler
+
+AD0 equ 03c0h ; Datenregister Kanal 0
+AD1 equ 03c2h ; Datenregister Kanal 1
+AD2 equ 03c4h ; Datenregister Kanal 2
+AD3 equ 03c6h ; Datenregister Kanal 3
+AD4 equ 03c8h ; Datenregister Kanal 4
+AD5 equ 03cah ; Datenregister Kanal 5
+AD6 equ 03cch ; Datenregister Kanal 6
+AD7 equ 03ceh ; Datenregister Kanal 7
+
+ADCON0 equ 03d6h ; A/D-Steuerregister 0
+CH0 equ ADCON0<<3+0 ; Kanalwahl
+CH1 equ ADCON0<<3+1
+CH2 equ ADCON0<<3+2
+MD0 equ ADCON0<<3+3 ; Modus
+MD1 equ ADCON0<<3+4
+TRG equ ADCON0<<3+5 ; Soft/Hardwaretrigger
+ADST equ ADCON0<<3+6 ; Konversion starten
+CKS0 equ ADCON0<<3+7 ; Frequenzwahl
+
+ADCON1 equ 03d7h ; A/D-Steuerregister 1
+SCAN0 equ ADCON1<<3+0 ; Sweep-Modus
+SCAN1 equ ADCON1<<3+1
+MD2 equ ADCON1<<3+2 ; Modus
+BITS equ ADCON1<<3+3 ; Breitenwahl (8/10 Bit)
+VCUT equ ADCON1<<3+5
+OPA0 equ ADCON1<<3+6
+OPA1 equ ADCON1<<3+7
+
+ADCON2 equ 03d4h
+SMP equ ADCON2<<3+0 ; A-D Conversion method bit
+
+;----------------------------------------------------------------------------
+; D/A-Wandler
+
+DA0 equ 03d8h ; Wert D/A-Wandler 0
+DA1 equ 03dah ; Wert D/A-Wandler 1
+
+DACON equ 03dch ; Steuerregister D/A-Wandler
+DA0E equ DACON<<3+0 ; D/A-Wandler 0 freigeben
+DA1E equ DACON<<3+1 ; D/A-Wandler 1 freigeben
+
+;----------------------------------------------------------------------------
+; feste Vektoren
+
+Vec_UndefInstr equ 0fffdch ; UND ausgeführt
+Vec_Overflow equ 0fffe0h ; INTO+Overflow ausgeführt
+Vec_BRK equ 0fffe4h ; BRK ausgeführt
+Vec_AddrMatch equ 0fffe8h ; Adressengleichheit aufgetreten
+Vec_SingleStep equ 0fffech ; Einzelschrittverarbeitung
+Vec_WDT equ 0ffff0h ; Watchdog hat zugeschlagen
+Vec_DBC equ 0ffff4h
+Vec_NMI equ 0ffff8h ; nichtmaskierbarer Interrupt
+Vec_Reset equ 0ffffch
+
+;----------------------------------------------------------------------------
+; Variable Vektoren; hier Offset zu INTB
+
+Vec_BRK2 equ 0 ; BRK ausgeführt (falls fester Vektor abgeschaltet)
+Vec_DMA0 equ 44
+Vec_DMA1 equ 48
+Vec_KeyInp equ 52
+Vec_AD equ 56
+Vec_UART0T equ 68
+Vec_UART0R equ 72
+Vec_UART1T equ 76
+Vec_UART1R equ 80
+Vec_TA0 equ 84
+Vec_TA1 equ 88
+Vec_TA2 equ 92
+Vec_TA3 equ 96
+Vec_TA4 equ 100
+Vec_TB0 equ 104
+Vec_TB1 equ 108
+Vec_TB2 equ 112
+Vec_INT0 equ 116
+Vec_INT1 equ 120
+Vec_INT2 equ 124
+
+;----------------------------------------------------------------------------
+; Speicherbereiche
+
+ switch MOMCPUNAME
+ case "M30600M8"
+IROM equ 0f0000h ; 64K ROM am Ende des Speicherraums
+IROMEND equ 0fffffh
+IRAM equ 000400h ; 10K RAM hinter SFRs
+IRAMEND equ 002c00h
+ case "M30610" ; 128k ROM
+IROM equ 0e0000h
+IROMEND equ 0fffffh
+IRAM equ 000400h
+IRAMEND equ 002c00h ; 10k RAM
+ case "M30620"
+IROM equ 0e0000h
+IROMEND equ 0fffffh
+IRAM equ 000400h
+IRAMEND equ 002c00h ; 10k RAM
+ endcase
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; Listing wieder an
+
diff --git a/include/regmsp.inc b/include/regmsp.inc
new file mode 100644
index 0000000..d5a6f92
--- /dev/null
+++ b/include/regmsp.inc
@@ -0,0 +1,227 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REGMSP.INC *
+;* *
+;* Sinn : enthält Makro- und Registerdefinitionen für den MSP430 *
+;* *
+;* letzte Änderungen : 11. 9.1996 *
+;* *
+;****************************************************************************
+
+ ifndef regmspinc ; verhindert Mehrfacheinbindung
+
+regmspinc equ 1
+
+ if (MOMCPUNAME<>"MSP430")
+ fatal "Falscher Prozessortyp eingestellt: nur MSP430 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "MSP430-Register+Befehlsdefinitionen (C) 1996 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; Arithmetik
+
+adc macro op
+ addc.attribute #0,op
+ endm
+
+dadc macro op
+ dadd.attribute #0,op
+ endm
+
+dec macro op
+ sub.attribute #1,op
+ endm
+
+decd macro op
+ sub.attribute #2,op
+ endm
+
+inc macro op
+ add.attribute #1,op
+ endm
+
+incd macro op
+ add.attribute #2,op
+ endm
+
+sbc macro op
+ subc.attribute #0,op
+ endm
+
+;----------------------------------------------------------------------------
+; Logik
+
+inv macro op
+ xor.attribute #-1,op
+ endm
+
+rla macro op
+ add.attribute op,op
+ endm
+
+rlc macro op
+ addc.attribute op,op
+ endm
+
+;----------------------------------------------------------------------------
+; Daten bewegen ;-)
+
+clr macro op
+ mov.attribute #0,op
+ endm
+
+clrc macro
+ bic #1,sr
+ endm
+
+clrn macro
+ bic #4,sr
+ endm
+
+clrz macro
+ bic #2,sr
+ endm
+
+pop macro op
+ mov @sp+,op
+ endm
+
+setc macro
+ bis #1,sr
+ endm
+
+setn macro
+ bis #4,sr
+ endm
+
+setz macro
+ bis #2,sr
+ endm
+
+tst macro op
+ cmp.attribute #0,op
+ endm
+
+;----------------------------------------------------------------------------
+; Sprungbefehle
+
+br macro op
+ mov op,pc
+ endm
+
+dint macro
+ bic #8,sr
+ endm
+
+eint macro
+ bis #8,sr
+ endm
+
+nop macro
+ .word 04303h ; den symbolischen Befehl würde AS zurückweisen
+ endm
+
+ret macro
+ mov @sp+,pc
+ endm
+
+;----------------------------------------------------------------------------
+; Taktgenerator
+
+SCFQCTL equ 052h ; Multiplikator Quarzfrequenz
+SCFI0 equ 050h ; Integrator
+SCFI1 equ 051h
+CBCTL equ 053h ; Puffersteuerung
+EPCTL equ 054h ; EPROM-Steuerung
+
+;----------------------------------------------------------------------------
+; Module
+
+IE1 equ 000h ; Interrupt-Freigaben
+IE2 equ 001h
+IFG1 equ 002h ; Interrupt-Anzeigen
+IFG2 equ 003h
+ME1 equ 004h ; Modul-Freigaben
+ME2 equ 005h
+
+;----------------------------------------------------------------------------
+; Timer
+
+BTCTL equ 040h ; Basis-Steuerregister Timer 1
+
+BTCNT1 equ 046h ; Zählregister
+BTCNT2 equ 047h
+
+TCCTL equ 042h
+
+TCPLD equ 043h ; Vorladewert
+
+TCDAT equ 044h ; Zählwert
+
+TPCTL equ 04bh ; Timer/Port Steuerregister
+
+TPCNT1 equ 04ch ; Zählregister
+TPCNT2 equ 04dh
+
+TPD equ 04eh ; Datenregister
+
+TPE equ 04fh ; Freigaberegister
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+WDTCTL equ 0120h
+
+;----------------------------------------------------------------------------
+; PWM
+
+PWMCTL equ 058h ; Zählwert
+PWMDTB equ 059h ; Pulsweite (Puffer)
+PWMDTR equ 05ah ; Pulsweite
+PWMCNT equ 05bh ; Steuerung
+
+;----------------------------------------------------------------------------
+; Ports
+
+P0IN equ 010h ; Leseregister (Pinzustand)
+P0OUT equ 011h ; Schreibregister (Latches)
+P0DIR equ 012h ; Richtungsregister
+P0IFG equ 013h ; Interrupt-Flags
+P0IES equ 014h ; Interrupf-Flankenwahl
+P0IE equ 015h ; Interrupt-Freigaben
+
+;----------------------------------------------------------------------------
+; LCD-Interface
+
+LCDCTL equ 030h ; Steuerung
+LCD_Start equ 031h ; Startadresse
+LCD_Stop equ 03fh ; Endadresse
+__TMP set 1 ; Einzeldefinitionen
+ rept 9
+LCD{"\{__TMP}"} equ 030h+__TMP
+__TMP set __TMP+1
+ endm
+ rept 6
+LCD1{"\{__TMP-10}"} equ 030h+__TMP
+__TMP set __TMP+1
+ endm
+
+;----------------------------------------------------------------------------
+; A/D-Wandler
+
+AIN equ 0110h ; Eingaberegister
+AEN equ 0112h ; Eingabefreigaben
+ACTL equ 0114h ; Steuerung
+ADAT equ 0118h ; Daten
+
+;----------------------------------------------------------------------------
+
+ endif ; von IFDEF...
+ restore ; wieder erlauben
+
diff --git a/include/regst9.inc b/include/regst9.inc
new file mode 100644
index 0000000..c6b87d9
--- /dev/null
+++ b/include/regst9.inc
@@ -0,0 +1,624 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REGST9.INC *
+;* *
+;* Sinn : enthält SFR-, Makro- und Adreßdefinitionen für die ST9-Familie *
+;* *
+;* letzte Änderungen : 6. 2.1997 *
+;* *
+;****************************************************************************
+
+ ifndef regst9inc ; verhindert Mehrfacheinbindung
+
+regst9inc equ 1
+
+ if (MOMCPUNAME<>"ST9020")&&(MOMCPUNAME<>"ST9030")&&(MOMCPUNAME<>"ST9040")&&(MOMCPUNAME<>"ST9050")
+ fatal "Falscher Prozessortyp eingestellt: nur ST9020,ST9030,ST9040 oder ST9050 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "ST9-SFR-Definitionen (C) 1997 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; Registerbänke
+
+__CNT set 0
+ rept 16
+BK{"\{__CNT}"}0 equ __CNT*2
+BK{"\{__CNT}"}1 equ __CNT*2+1
+__CNT set __CNT+1
+ endm
+
+BK_SYS equ BKE0 ; Group system definition
+BK_F equ BKF0 ; page register definition
+
+;----------------------------------------------------------------------------
+; Definition eines Bits:
+; dies nutzt die interne Definition von Bitsymbolen aus: rrrrbbbi
+
+__defbit macro NAME,REG,BITPOS
+NAME bit ((REG&15)<<4)+(BITPOS<<1)
+{"NAME"}m equ 1<<BITPOS
+ endm
+
+;----------------------------------------------------------------------------
+; Systemgruppe
+
+FCW reg RR230 ; flag and control word
+CICR reg R230 ; central interrupt control register
+ __defbit gcen,CICR,7 ; global counter enable
+ __defbit tlip,CICR,6 ; top level interrupt pending bit
+ __defbit tli,CICR,5 ; top level interrupt bit
+ __defbit ien,CICR,4 ; interrupt enable flag
+ __defbit iam,CICR,3 ; interrupt arbitration mode
+ __defbit cpl2,CICR,2 ; current priority level bit 2
+ __defbit cpl1,CICR,1 ; current priority level bit 1
+ __defbit cpl0,CICR,0 ; current priority level bit 0
+cplm equ cpl2m|cpl1m|cpl0m ; current priority level
+
+FLAGR reg R231 ; flags register
+ __defbit c,FLAGR,7 ; carry flag
+ __defbit z,FLAGR,6 ; zero flag
+ __defbit s,FLAGR,5 ; sign flag
+ __defbit v,FLAGR,4 ; overflow flag
+ __defbit d,FLAGR,3 ; decimal adjust flag
+ __defbit h,FLAGR,2 ; half carry flag
+ __defbit uf,FLAGR,1 ; user flag 1
+ __defbit dp,FLAGR,0 ; data/program memory flag
+
+RPP reg RR232 ; register pointer pair
+
+RP0R reg R232 ; register pointer #0
+ __defbit rp0s,RP0R,2 ; register pointer selector
+
+RP1R reg R233 ; register pointer #1
+ __defbit rp1s,RP1R,2 ; register pointer selector
+
+PPR reg R234 ; page pointer register
+
+MODER reg R235 ; mode register
+ __defbit ssp,MODER,7 ; system stack pointer flag (int/ext)
+ __defbit usp,MODER,6 ; user stack pointer flag (int/ext)
+ __defbit div2,MODER,5 ; external clock divided by 2
+ __defbit prs2,MODER,4 ; internal clock prescaling bit 2
+ __defbit prs1,MODER,3 ; internal clock prescaling bit 1
+ __defbit prs0,MODER,2 ; internal clock prescaling bit 0
+ __defbit brqen,MODER,1 ; bus request enable
+ __defbit himp,MODER,0 ; high impedance enable
+prsm equ prs2m|prs1m|prs0m ; internal clock prescaler
+
+USPR reg RR236 ; user stack pointer
+USPHR reg R236
+USPLR reg R237
+
+SSPR reg RR238 ; system stack pointer
+SSPHR reg R238
+SSPLR reg R239
+
+;----------------------------------------------------------------------------
+; EEPROM
+
+ if MOMCPUNAME="ST9040"
+
+EEP_PG equ 0 ; EEPROM register page
+
+EECR reg R241 ; EEPROM control register
+ __defbit verify,EECR,6 ; EEPROM verify mode
+ __defbit eestby,EECR,5 ; EEPROM stand-by
+ __defbit eeien,EECR,4 ; EEPROM interrupt enable
+ __defbit pllst,EECR,3 ; Parallel write start
+ __defbit pllen,EECR,2 ; Parallel write enable
+ __defbit eebusy,EECR,1 ; EEPROM busy
+ __defbit eewen,EECR,0 ; EEPROM write enable
+
+ endif
+
+;----------------------------------------------------------------------------
+; Interrupts
+
+EXINT_PG equ 0 ; EXTERNAL interrupt register page
+
+EITR reg R242 ; External interrupt trigger level register
+ __defbit tea0,EITR,0 ; Trigger Event A0 bit
+ __defbit tea1,EITR,1 ; Trigger Event A1 bit
+ __defbit teb0,EITR,2 ; Trigger Event B0 bit
+ __defbit teb1,EITR,3 ; Trigger Event B1 bit
+ __defbit tec0,EITR,4 ; Trigger Event C0 bit
+ __defbit tec1,EITR,5 ; Trigger Event C1 bit
+ __defbit ted0,EITR,6 ; Trigger Event D0 bit
+ __defbit ted1,EITR,7 ; Trigger Event D1 bit
+
+EIPR reg R243 ; External interrupt pending register
+ __defbit ipa0,EIPR,0 ; Interrupt Pending bit Channel A0
+ __defbit ipa1,EIPR,1 ; Interrupt Pending bit " A1
+ __defbit ipb0,EIPR,2 ; Interrupt Pending bit " B0
+ __defbit ipb1,EIPR,3 ; Interrupt Pending bit " B1
+ __defbit ipc0,EIPR,4 ; Interrupt Pending bit " C0
+ __defbit ipc1,EIPR,5 ; Interrupt Pending bit " C1
+ __defbit ipd0,EIPR,6 ; Interrupt Pending bit " D0
+ __defbit ipd1,EIPR,7 ; Interrupt Pending bit " D1
+
+EIMR reg R244 ; External interrupt mask register
+ __defbit ima0,EIMR,0 ; Int. A0 bit
+ __defbit ima1,EIMR,1 ; Int. A1 bit
+ __defbit imb0,EIMR,2 ; Int. B0 bit
+ __defbit imb1,EIMR,3 ; Int. B1 bit
+ __defbit imc0,EIMR,4 ; Int. C0 bit
+ __defbit imc1,EIMR,5 ; Int. C1 bit
+ __defbit imd0,EIMR,6 ; Int. D0 bit
+ __defbit imd1,EIMR,7 ; Int. D1 bit
+
+EIPLR reg R245 ; Ext. interrupt priority level register
+
+EIVR reg R246 ; External interrupt vector register
+ __defbit ewen,EIVR,0 ; External wait enable
+ __defbit ia0s,EIVR,1 ; Interrupt A0 selection
+ __defbit tlis,EIVR,2 ; Top level input selection
+ __defbit tltev,EIVR,3 ; Top level trigger event
+
+NICR reg R247 ; Nested interrupt control register
+
+ __defbit tlnm,NICR,7 ; Top level not maskable
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+WDT_PG equ 0 ; Timer Watchdog page
+
+WDTR reg RR248 ; TWD timer constant register.
+WDTHR reg R248 ; TWD timer high constant register
+WDTLR reg R249 ; TWD timer low constant register
+
+WDTPR reg R250 ; TWD timer prescaler constant register
+
+WDTCR reg R251 ; TWD timer control register
+ __defbit WD_stsp8,WDTCR,7 ; TWD start stop.
+ __defbit WD_sc,WDTCR,6 ; TWD single continuous mode.
+ __defbit WD_inmd1,WDTCR,5 ; Input mode 1
+ __defbit WD_inmd2,WDTCR,4 ; Input mode 2
+ __defbit WD_inen,WDTCR,3 ; TWD input section enable/disable.
+ __defbit WD_outmd,WDTCR,2 ; TWD output mode.
+ __defbit WD_wrout,WDTCR,1 ; TWD output bit.
+ __defbit WD_outen,WDTCR,0 ; TWD output enable.
+inm_evc equ 0 ; TWD input mode event counter.
+inm_g equ 010h ; TWD input mode gated.
+inm_t equ 020h ; TWD input mode triggerable.
+inm_r equ 030h ; TWD input mode retriggerable.
+
+WCR reg R252 ; Wait control register
+ __defbit WD_wden,WCR,6 ; TWD timer enable.
+wdm2 equ 1 << 5 ; Data Memory Wait Cycle
+wdm1 equ 1 << 4
+wdm0 equ 1 << 3
+wpm2 equ 1 << 2 ; Program Memory Wait Cycle
+wpm1 equ 1 << 1
+wpm0 equ 1 << 0
+dmwc1 equ wdm0 ; 1 wait cycle on Data M.
+dmwc2 equ wdm1 ; 2 wait cycles on Data M.
+dmwc3 equ wdm1|wdm0 ; 3 wait cycles on Data M.
+dmwc4 equ wdm2 ; 4 wait cycles on Data M.
+dmwc5 equ wdm2|wdm0 ; 5 wait cycles on Data M.
+dmwc6 equ wdm2|wdm1 ; 6 wait cycles on Data M.
+dmwc7 equ wdm2|wdm1|wdm0 ; 7 wait cycles on Data M.
+pmwc1 equ wpm0 ; 1 wait cycle on Prog M.
+pmwc2 equ wpm1 ; 2 wait cycles on Prog M.
+pmwc3 equ wpm1|wpm0 ; 3 wait cycles on Prog M.
+pmwc4 equ wpm2 ; 4 wait cycles on Prog M.
+pmwc5 equ wpm2|wpm0 ; 5 wait cycles on Prog M.
+pmwc6 equ wpm2|wpm1 ; 6 wait cycles on Prog M.
+pmwc7 equ wpm2|wpm1|wpm0 ; 7 wait cycles on Prog M.
+
+;----------------------------------------------------------------------------
+; SPI
+
+SPI_PG equ 0 ; SPI register page
+SPIDR reg R253 ; SPI Data register
+
+SPICR reg R254 ; SPI Control register
+ __defbit SP_spen,SPICR,7 ; Serial Peripheral Enable.
+ __defbit SP_bms,SPICR,6 ; SBUS/I2C bus Mode Selector.
+ __defbit SP_arb,SPICR,5 ; Arbitration flag bit.
+ __defbit SP_busy,SPICR,4 ; SPI busy flag.
+ __defbit SP_cpol,SPICR,3 ; SPI transmission clock polarity
+ __defbit SP_cpha,SPICR,2 ; SPI transmission clock phase
+ __defbit SP_spr1,SPICR,1 ; SPI rate bit 1
+ __defbit SP_spr0,SPICR,0 ; SPI rate bit 0
+
+SP_8 equ 0 ; SPI clock divider 8 = 1500 kHz (12MHz)
+SP_16 equ 1 ; SPI clock divider 16 = 750 kHz (12MHz)
+SP_128 equ 2 ; SPI clock divider 128 = 93.75 kHz (12MHz)
+SP_256 equ 3 ; SPI clock divider 256 = 46.87 kHz (12MHz)
+RW_PG equ 0 ; R/W signal programming page
+
+;----------------------------------------------------------------------------
+; Read/Write Register
+
+ if MOMCPUNAME="ST9050"
+
+RWR reg R255 ; R/W signal programming register
+ __defbit RW_rw,RWR,0 ; R/W bit
+ __defbit RW_bs,RWR,1 ; Bank switch port timing
+
+ endif
+
+;----------------------------------------------------------------------------
+; Ports
+
+P0C_PG equ 2 ; Port 0 control registers page
+
+P0DR reg R224 ; Port 0 data register
+P0C0R reg R240 ; Port 0 control register 0
+P0C1R reg R241 ; Port 0 control register 1
+P0C2R reg R242 ; Port 0 control register 2
+
+P1C_PG equ 2 ; Port 1 control registers page
+P1DR reg R225 ; Port 1 data register
+P1C0R reg R244 ; Port 1 control register 0
+P1C1R reg R245 ; Port 1 control register 1
+P1C2R reg R246 ; Port 1 control register 2
+
+P2C_PG equ 2 ; Port 2 control registers page
+P2DR reg R226 ; Port 2 data register
+BS_DSR reg R226 ; Bank Switch data segment register
+P2C0R reg R248 ; Port 2 control register 0
+BS_DDSR reg R248 ; Bank Switch Data DMA segment register
+P2C1R reg R249 ; Port 2 control register 1
+BS_PDSR reg R249 ; Bank Switch Program DMA segment Register
+P2C2R reg R250 ; Port 2 control register 2
+
+P3C_PG equ 2 ; Port 3 control registers page
+P3DR reg R227 ; Port 3 data register
+BS_PSR reg R227 ; Bank Switch Program Segment Register
+P3C0R reg R252 ; Port 3 control register 0
+P3C1R reg R253 ; Port 3 control register 1
+P3C2R reg R254 ; Port 3 control register 2
+
+P4C_PG equ 3 ; Port 4 control registers page
+P4DR reg R228 ; Port 4 data register
+P4C0R reg R240 ; Port 4 control register 0
+P4C1R reg R241 ; Port 4 control register 1
+P4C2R reg R242 ; Port 4 control register 2
+
+P5C_PG equ 3 ; Port 5 control registers page
+P5DR reg R229 ; Port 5 data register
+P5C0R reg R244 ; Port 5 control register 0
+P5C1R reg R245 ; Port 5 control register 1
+P5C2R reg R246 ; Port 5 control register 2
+
+P6C_PG equ 3 ; Port 6 control registers page
+P6D_PG equ 3 ; Port 6 data register page
+P6DR reg R251 ; Port 6 data register
+P6C0R reg R248 ; Port 6 control register 0
+P6C1R reg R249 ; Port 6 control register 1
+P6C2R reg R250 ; Port 6 control register 2
+
+P7C_PG equ 3 ; Port 7 control registers page
+P7D_PG equ 3 ; Port 7 data register page
+P7DR reg R255 ; Port 7 data register
+P7C0R reg R252 ; Port 7 control register 0
+P7C1R reg R253 ; Port 7 control register 1
+P7C2R reg R254 ; Port 7 control register 2
+
+P8C_PG equ 43 ; Port 8 control registers page
+P8D_PG equ 43 ; Port 8 data register page
+P8DR reg R251 ; Port 8 data register
+P8C0R reg R248 ; Port 8 control register 0
+P8C1R reg R249 ; Port 8 control register 1
+P8C2R reg R250 ; Port 8 control register 2
+
+P9C_PG equ 43 ; Port 9 control registers page
+P9D_PG equ 43 ; Port 9 data register page
+P9DR reg R255 ; Port 9 data register
+P9C0R reg R252 ; Port 9 control register 0
+P9C1R reg R253 ; Port 9 control register 1
+P9C2R reg R254 ; Port 9 control register 2
+
+HDCTL2R reg R251 ; Port 2 handshake DMA control register
+HDCTL3R reg R255 ; Port 3 handshake DMA control register
+HDCTL4R reg R243 ; Port 4 handshake DMA control register
+HDCTL5R reg R247 ; Port 5 handshake DMA control register
+
+;Handshake DMA control register configuration.
+hsdis equ 0E0h ; Handshake disabled mask
+hso2 equ 0C0h ; Handshake output 2 lines mask
+hso1 equ 040h ; Handshake output 1 line mask
+hsi2 equ 0A0h ; Handshake input 2 lines mask
+hsi1 equ 020h ; Handshake input 1 line mask
+hsb equ 000h ; Handshake bidirectional mask
+den equ 000h ; DMA enable mask
+ddi equ 010h ; DMA disable mask
+ddw equ 000h ; Data direction output mask (write)
+ddr equ 008h ; Data direction input mask (read)
+dst equ 004h ; DMA strobe on chip event mask
+dcp0 equ 000h ; DMA channel capture0 mask
+dcm0 equ 002h ; DMA channel compare0 mask
+
+;----------------------------------------------------------------------------
+; Multi function timer
+
+T0D_PG equ 10 ; MFTimer 0 data registers page
+T0C_PG equ 9 ; MFTimer 0 control registers page
+T1D_PG equ 8 ; MFTimer 1 data registers page
+T1C_PG equ 9 ; MFTimer 1 control registers page
+T2D_PG equ 14 ; MFTimer 2 data registers page
+T2C_PG equ 13 ; MFTimer 2 control registers page
+T3D_PG equ 12 ; MFTimer 3 data registers page
+T3C_PG equ 13 ; MFTimer 3 control registers page
+
+T_REG0R reg RR240 ; MFTimer REG0 load and capture register.
+T_REG0HR reg R240 ; Register 0 high register
+T_REG0LR reg R241 ; Register 0 low register
+T_REG1R reg RR242 ; MFTimer REG1 load constant
+T_REG1HR reg R242 ; Register 1 high register
+T_REG1LR reg R243 ; Register 1 low register
+T_CMP0R reg RR244 ; MFTimer CMP0 store compare constant.
+T_CMP0HR reg R244 ; Compare 0 high register
+T_CMP0LR reg R245 ; Compare 0 low register
+T_CMP1R reg RR246 ; MFTimer CMP1 store compare constant.
+T_CMP1HR reg R246 ; Compare 1 high register
+T_CMP1LR reg R247 ; Compare 1 low register
+
+T_TCR reg R248 ; MFTimer Control Register.
+ __defbit T_cs,T_TCR,0 ; Counter status
+ __defbit T_of0,T_TCR,1 ; over/underflow on CAP on REG0
+ __defbit T_udcs,T_TCR,2 ; up/down count status
+ __defbit T_udc,T_TCR,3 ; up/down count
+ __defbit T_ccl,T_TCR,4 ; Counter clear
+ __defbit T_ccmp0,T_TCR,5 ; Clear on compare 0
+ __defbit T_ccp0,T_TCR,6 ; Clear on capture
+ __defbit T_cen,T_TCR,7 ; Counter enable
+
+T_TMR reg R249 ; MFTimer Mode Register.
+ __defbit T_co,T_TMR,0 ; Continuous/one shot bit
+ __defbit T_ren,T_TMR,1 ; retrigger enable bit
+ __defbit T_eck,T_TMR,2 ; Enable clocking mode bit
+ __defbit T_rm0,T_TMR,3 ; register 0 mode bit
+ __defbit T_rm1,T_TMR,4 ; register 1 mode bit
+ __defbit T_bm,T_TMR,5 ; bivalue mode bit
+ __defbit T_oe0,T_TMR,6 ; output 0 enable bit
+ __defbit T_oe1,T_TMR,7 ; output 1 enable bit
+
+T_ICR reg R250 ; MFTimer External Input Control Register.
+
+exb_f equ 01h ; External B falling edge sensitive mask
+exb_r equ 02h ; External B rising edge sensitive mask
+exb_rf equ 03h ; External B falling and rising edge mask
+exa_f equ 04h ; External A falling edge sensitive mask
+exa_r equ 08h ; External A rising edge sensitive mask
+exa_rf equ 0Ch ; External A falling and rising edge mask
+ab_ii equ 00h ; A I/O B I/O mask
+ab_it equ 10h ; A I/O B trigger mask
+ab_gi equ 20h ; A gate B I/O mask
+ab_gt equ 30h ; A gate B trigger mask
+ab_ie equ 40h ; A I/O B external clock mask
+ab_ti equ 50h ; A trigger B I/O mask
+ab_ge equ 60h ; A gate B external clock mask
+ab_tt equ 70h ; A trigger B trigger mask
+ab_cucd equ 80h ; A clock up B clock down mask
+ab_ue equ 90h ; A clock up/down B external clock mask
+ab_tutd equ 0A0h ; A trigger up B trigger down mask
+ab_ui equ 0B0h ; A up/down clock B I/O mask
+ab_aa equ 0C0h ; A autodiscr. B autodiscr. mask
+ab_te equ 0D0h ; A trigger B external clock mask
+ab_et equ 0E0h ; A external clock B trigger mask
+ab_tg equ 0F0h ; A trigger B gate mask
+
+T_PRSR reg R251 ; MFTimer prescaler register
+
+T_OACR reg R252 ; MFTimer Output A Control Register.
+
+cev equ 02h ; on chip event bit on COMPARE 0 mask
+
+T_OBCR reg R253 ; MFTimer Output B Control Register.
+
+op equ 01h ; output preset bit mask
+oev equ 02h ; on chip event bit on OVF/UDF mask
+ou_set equ 00h ; overflow underflow set mask
+ou_tog equ 04h ; overflow underflow toggle mask
+ou_res equ 08h ; overflow underflow reset mask
+ou_nop equ 0Ch ; overflow underflow nop mask
+c1_set equ 00h ; Compare 1 set mask
+c1_tog equ 10h ; Compare 1 toggle mask
+c1_res equ 20h ; Compare 1 reset mask
+c1_nop equ 30h ; Compare 1 nop mask
+c0_set equ 00h ; Compare 0 set mask
+c0_tog equ 40h ; Compare 0 toggle mask
+c0_res equ 80h ; Compare 0 reset mask
+c0_nop equ 0C0h ; Compare 0 nop mask
+
+T_FLAGR reg R254 ; MFTimer Flags Register.
+ __defbit T_ao,T_FLAGR,0 ; and/or on capture interrupt
+ __defbit T_ocm0,T_FLAGR,1 ; overrun compare 0
+ __defbit T_ocp0,T_FLAGR,2 ; overrun capture 0
+ __defbit T_ouf,T_FLAGR,3 ; overflow underflow flag
+ __defbit T_cm1,T_FLAGR,4 ; successful compare 1
+ __defbit T_cm0,T_FLAGR,5 ; successful compare 0
+ __defbit T_cp1,T_FLAGR,6 ; successful capture 1
+ __defbit T_cp0,T_FLAGR,7 ; successful capture 0
+
+T_IDMR equ R255 ; MFTimer Interrupt DMA Mask Register.
+ __defbit T_oui,T_IDMR,0 ; overflow underflow interrupt
+ __defbit T_cm1i,T_IDMR,1 ; Compare 1 interrupt
+ __defbit T_cm0i,T_IDMR,2 ; Compare 0 interrupt
+ __defbit T_cm0d,T_IDMR,3 ; Compare 0 DMA
+ __defbit T_cp1i,T_IDMR,4 ; Capture 1 interrupt
+ __defbit T_cp0i,T_IDMR,5 ; Capture 0 interrupt
+ __defbit T_cp0d,T_IDMR,6 ; Capture 0 DMA
+ __defbit T_gtien,T_IDMR,7 ; global timer interrupt enable
+
+T0_DCPR reg R240 ; MFTimer 0 DMA Counter Pointer Register.
+T1_DCPR reg R244 ; MFTimer 1 DMA Counter Pointer Register.
+T0_DAPR reg R241 ; MFTimer 0 DMA Address Pointer Register.
+T1_DAPR reg R245 ; MFTimer 1 DMA Address Pointer Register.
+T0_IVR reg R242 ; MFTimer 0 Interrupt Vector Register.
+T1_IVR reg R246 ; MFTimer 1 Interrupt Vector Register.
+T0_IDCR reg R243 ; MFTimer 0 Interrupt/DMA Control Register.
+T1_IDCR reg R247 ; MFTimer 1 Interrupt/DMA Control Register.
+T2_DCPR reg R240 ; MFTimer 2 DMA Counter Pointer Register.
+T3_DCPR reg R244 ; MFTimer 3 DMA Counter Pointer Register.
+T2_DAPR reg R241 ; MFTimer 2 DMA Address Pointer Register.
+T3_DAPR reg R245 ; MFTimer 3 DMA Address Pointer Register.
+T2_IVR reg R242 ; MFTimer 2 Interrupt Vector Register.
+T3_IVR reg R246 ; MFTimer 3 Interrupt Vector Register.
+T2_IDCR reg R243 ; MFTimer 2 Interrupt/DMA Control Register.
+T3_IDCR reg R247 ; MFTimer 3 Interrupt/DMA Control Register.
+
+plm equ 07h ; Priority level mask
+swen equ 08h ; Swap function enable mask
+dctd equ 10h ; DMA compare transaction destination mask
+dcts equ 20h ; DMA capture transaction source mask
+cme equ 40h ; Compare 0 end of block mask
+cpe equ 80h ; Capture 0 end of block mask
+
+T_IOCR reg R248 ; MFTimer I/O connection register
+
+sc0 equ 01h ; TxOUTA and TxINA connection bit (even)
+
+sc1 equ 02h ; TxOUTA and TxINA connection bit (odd)
+
+;----------------------------------------------------------------------------
+; A/D-Wandler
+
+ if MOMCPUNAME<>"ST9020"
+
+AD0_PG equ 63 ; A/D converter registers page
+AD1_PG equ 62 ; second A/D unit
+
+AD_D0R reg R240 ; Channel 0 data register
+AD_D1R reg R241 ; Channel 1 data register
+AD_D2R reg R242 ; Channel 2 data register
+AD_D3R reg R243 ; Channel 3 data register
+AD_D4R reg R244 ; Channel 4 data register
+AD_D5R reg R245 ; Channel 5 data register
+AD_D6R reg R246 ; Channel 6 data register
+AD_D7R reg R247 ; Channel 7 data register
+AD_LT6R reg R248 ; Channel 6 lower threshold register
+AD_LT7R reg R249 ; Channel 7 lower threshold register
+AD_UT6R reg R250 ; Channel 6 upper threshold register
+AD_UT7R reg R251 ; Channel 7 upper threshold register
+
+AD_CRR reg R252 ; Compare result register
+ __defbit AD_c6l,AD_CRR,4 ; Compare channel 6 lower bit
+ __defbit AD_c7l,AD_CRR,5 ; Compare channel 7 lower bit
+ __defbit AD_c6u,AD_CRR,6 ; Compare channel 6 upper bit
+ __defbit AD_c7u,AD_CRR,7 ; Compare channel 7 upper bit
+
+AD_CLR reg R253 ; Control logic register
+ __defbit AD_st,AD_CLR,0 ; start/stop bit
+ __defbit AD_cont,AD_CLR,1 ; Continuous mode
+ __defbit AD_pow,AD_CLR,2 ; power up/down control
+ __defbit AD_intg,AD_CLR,3 ; internal trigger
+ __defbit AD_extg,AD_CLR,4 ; External trigger
+
+sch equ 0E0h ; scan channel selection mask
+
+AD_ICR reg R254 ; interrupt control register
+ __defbit AD_awdi,AD_ICR,4 ; analog watch-dog interrupt
+ __defbit AD_eci,AD_ICR,5 ; End of count interrupt
+ __defbit AD_awd,AD_ICR,6 ; analog watch-dog pending flag
+ __defbit AD_ecv,AD_ICR,7 ; End of conversion pending flag
+
+AD_prl equ 07h ; priority level mask
+
+AD_IVR reg R255 ; interrupt vector register
+
+ endif
+
+;----------------------------------------------------------------------------
+; Serielle Schnittstelle
+
+SCI1_PG equ 24 ; SCI1 control registers page
+SCI2_PG equ 25 ; SCI2 control registers page
+SCI3_PG equ 26 ; SCI3 control registers page
+SCI4_PG equ 27 ; SCI4 control registers page
+
+S_RDCPR reg R240 ; receive DMA counter pointer register
+S_RDAPR reg R241 ; receive DMA address pointer register
+S_TDCPR reg R242 ; transmit DMA counter pointer register
+S_TDAPR reg R243 ; transmit DMA address pointer register
+S_IVR reg R244 ; interrupt vector register
+S_ACR reg R245 ; address compare register
+
+S_IMR reg R246 ; interrupt mask register
+ __defbit S_txdi,S_IMR,0 ; transmitter data interrupt
+ __defbit S_rxdi,S_IMR,1 ; receiver data interrupt
+ __defbit S_rxb,S_IMR,2 ; receiver break
+ __defbit S_rxa,S_IMR,3 ; receiver address
+ __defbit S_rxe,S_IMR,4 ; receiver error
+ __defbit S_txeob,S_IMR,5 ; transmit end of block
+ __defbit S_rxeob,S_IMR,6 ; receive end of block
+ __defbit S_hsn,S_IMR,7 ; Holding or shift register empty.
+
+S_ISR reg R247 ; interrupt status register
+ __defbit S_txsem,S_ISR,0 ; transmit shift register empty
+ __defbit S_txhem,S_ISR,1 ; transmit hold register empty
+ __defbit S_rxdp,S_ISR,2 ; received data pending bit
+ __defbit S_rxbp,S_ISR,3 ; received break pending bit
+ __defbit S_rxap,S_ISR,4 ; received address pending bit
+ __defbit S_pe,S_ISR,5 ; parity error pending bit
+ __defbit S_fe,S_ISR,6 ; framing error pending bit
+ __defbit S_oe,S_ISR,7 ; overrun error pending bit
+
+S_RXBR reg R248 ; receive buffer register
+S_TXBR reg R248 ; transmit buffer register
+
+S_IDPR reg R249 ; interrupt/DMA priority register
+ __defbit S_txd,S_IDPR,3 ; transmitter DMA
+ __defbit S_rxd,S_IDPR,4 ; receiver DMA
+ __defbit S_sa,S_IDPR,5 ; set address
+ __defbit S_sb,S_IDPR,6 ; set break
+ __defbit S_amen,S_IDPR,7 ; address mode enable
+S_pri equ 07h ; interrupt/DMA priority mask
+
+S_CHCR reg R250 ; Character configuration register
+
+wl5 equ 000h ; 5 bits data word mask
+wl6 equ 001h ; 6 bits data word mask
+wl7 equ 002h ; 7 bits data word mask
+wl8 equ 003h ; 8 bits data word mask
+sb10 equ 000h ; 1.0 stop bit mask
+sb15 equ 004h ; 1.5 stop bit mask
+sb20 equ 008h ; 2.0 stop bit mask
+sb25 equ 00Ch ; 2.5 stop bit mask
+ab equ 010h ; address bit insertion mask
+pen equ 020h ; parity enable mask
+ep equ 040h ; Even parity mask
+oddp equ 000h ; odd parity mask
+am equ 080h ; address mode mask
+
+S_CCR reg R251 ; Clock configuration register
+ __defbit S_stpen,S_CCR,0 ; stick parity enable
+ __defbit S_lben,S_CCR,1 ; loop back enable
+ __defbit S_aen,S_CCR,2 ; auto echo enable
+ __defbit S_cd,S_CCR,3 ; Clock divider
+ __defbit S_xbrg,S_CCR,4 ; External baud rate generator source
+ __defbit S_xrx,S_CCR,5 ; External receiver source
+ __defbit S_oclk,S_CCR,6 ; output clock selection
+ __defbit S_txclk,S_CCR,7 ; transmit clock selection
+
+S_BRGR reg RR252 ; baud rate generator register
+S_BRGHR reg R252 ; baud rate generator reg. high
+S_BRGLR reg R253 ; baud rate generator reg. low
+
+;----------------------------------------------------------------------------
+; Security Register:
+
+SEC_PG equ 59 ; Security register page
+
+SECR reg R255
+ __defbit tlck,SECR,0 ; test lock bit
+ __defbit wf1,SECR,1 ; write fuse 1 bit
+ __defbit hlck,SECR,2 ; hardware lock bit
+ __defbit wf2,SECR,3 ; write fuse 2 bit
+ __defbit f2tst,SECR,4 ; select fuse 2 bit
+ __defbit slck,SECR,7 ; software lock bit
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; Listing wieder an
diff --git a/include/regz380.inc b/include/regz380.inc
new file mode 100644
index 0000000..83c428d
--- /dev/null
+++ b/include/regz380.inc
@@ -0,0 +1,68 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei REGZ380.INC *
+;* *
+;* Sinn : enthält Registerdefinitionen für den Z380 *
+;* Diese Register sind nur mit den Befehlen IN0,OUT0 und TSTIO *
+;* erreichbar!! *
+;* *
+;* letzte Änderungen : 12.11.1994 *
+;* 2. 1.1996 Register 0..16h *
+;* (Info von Leonhard Schneider) *
+;* *
+;****************************************************************************
+
+ ifndef regz380inc ; verhindert Mehrfacheinbindung
+
+reg380inc equ 1
+
+ if (MOMCPU<>896)
+ fatal "Falscher Prozessortyp eingestellt: nur Z380 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "Z380-Register-Definitionen (C) 1994 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+
+LMCS0 port 00h ; Lower Memory Chip Select Register
+LMCS1 port 01h
+UMCS0 port 02h ; Upper Memory Chip Select Register
+UMCS1 port 03h
+MMCS0 port 04h ; Midrange Memory Chip Select Register
+MMCS1 port 05h
+MMCS2 port 06h
+MMCS3 port 07h
+LMWR port 08h ; Lower Memory Waits Register
+UMWR port 09h ; Upper Memory Waits Register
+MMWR0 port 0ah ; Midrange Memory Waits Register
+MMWR1 port 0bh
+MMWR2 port 0ch
+MMWR3 port 0dh
+IOWR port 0eh ; I/O Waits Register
+RFWR port 0fh ; Refresh Waits Register
+MSMER port 10h ; Memory Select Master Enable Register
+IOCR0 port 11h ; I/O Bus Control Register
+IOCR1 port 12h
+RFSHR0 port 13h ; Refresh Register
+RFSHR1 port 14h
+RFSHR2 port 15h
+SMCR port 16h ; Standby Mode Control Register
+IER port 17h ; Interrupt-Freigaben
+AVBR port 18h ; Offset Interruptvektoren ?!
+TRPBK port 19h ; zeigt an, ob Trap oder Break ausgetreten
+
+CHIPVERSION port 0ffh ; Chipversion (00=Z380MPU)
+
+
+;----------------------------------------------------------------------------
+
+ endif ; von IFDEF...
+ restore ; wieder erlauben
+
+
diff --git a/include/stddef04.inc b/include/stddef04.inc
new file mode 100644
index 0000000..d4e2550
--- /dev/null
+++ b/include/stddef04.inc
@@ -0,0 +1,54 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.39 - Datei STDDEF04.INC *
+;* *
+;* Sinn : enthält SFR-Definitionen für den 6804-Prozessor *
+;* Falls Sie noch ein paar schöne Makros suchen, schauen Sie sich *
+;* einmal in STDDEF62.INC um ! *
+;* *
+;* letzte Änderungen : 28.11.1993 *
+;* *
+;****************************************************************************
+
+ ifndef stddef04inc ; verhindert Mehrfacheinbindung
+
+stddef04inc equ 1
+
+ if (MOMCPU<>26628)
+ fatal "Falscher Prozessortyp eingestellt: nur 6804 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "6804-SFR-Definitionen (C) 1993 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; erstmal die Sachen, die es überall gibt :
+
+XP SFR $80 ; Registeradressen (die kennt AS aber
+YP SFR $81 ; auch schon intern, nur der Voll-
+RegA SFR $ff ; ständigkeit halber)
+
+PA SFR $00 ; Port A
+DDRA SFR $04
+PB SFR $01 ; Port B
+DDRB SFR $05
+PC SFR $02
+DDRC SFR $06
+
+TSCR SFR $09 ; Timer : Steuerung/Status
+TCR SFR $fe ; Daten
+TPR SFR $fd ; Vorteiler
+
+USERROM SFR $20 ; benutzerdefiniertes ROM (bis $5f)
+USERRAM SFR $82 ; freies RAM (bis $9f)
+
+;---------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef16.inc b/include/stddef16.inc
new file mode 100644
index 0000000..10b11d7
--- /dev/null
+++ b/include/stddef16.inc
@@ -0,0 +1,188 @@
+ 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
+
diff --git a/include/stddef17.inc b/include/stddef17.inc
new file mode 100644
index 0000000..4cd71ea
--- /dev/null
+++ b/include/stddef17.inc
@@ -0,0 +1,116 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.39 - Datei STDDEF17.INC *
+;* *
+;* Sinn : enthält SFR-Definitionen für die PIC 17C4x-Familie *
+;* Die Makrodefinitionen kann man bei Bedarf aus STDDEF16.INC *
+;* kopieren *
+;* *
+;* letzte Änderungen : 24. 4.1993 *
+;* 5. 6.1993 SAVE & RESTORE *
+;* Prozessorsperre (Idee von Matthias) *
+;* 11. 9.1993 Meldung nur im 1.Pass *
+;* *
+;****************************************************************************
+
+ ifndef stddef17inc ; verhindert Mehrfacheinbindung
+
+stddef17inc equ 1
+
+ if (MOMCPU<>97346)
+ fatal "Falscher Prozessortyp eingestellt: nur 17C42 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "PIC17C4x-Definitionen (C) 1993 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; CPU-Register
+
+Indirect0 SFR 0 ; indirekte Adressierung 1
+FSR0 SFR 1
+Indirect1 SFR 8 ; indirekte Adressierung 2
+FSR1 SFR 9
+PCL SFR 2 ; Bit 0..7 Programmzähler
+PCLATH SFR 3 ; Hilfsregister PC Bit 8..15
+W SFR 10 ; Akkumulator
+TBLPTRL SFR 13 ; Hilfsregister, um Daten
+TBLPTRH SFR 14 ; aus Codebereich zu lesen
+ALUSTA SFR 4 ; Flags, FSR-Modi
+CPUSTA SFR 6 ; CPU-Status
+INTSTA SFR 7 ; Interrupt-Status
+
+;------------------------------------------------------------------------------
+; Zähler
+
+RTCSTA SFR 5 ; Steuerregister
+RTCCL SFR 11 ; Daten
+RTCCH SFR 12
+
+;------------------------------------------------------------------------------
+
+BSR SFR 15 ; Bankauswahl Rest
+
+;------------------------------------------------------------------------------
+; Interruptsteuerung
+
+PIR SFR $16 ; Interrupt-Anforderungen
+PIE SFR $17 ; Interrupt-Freigaben
+
+;------------------------------------------------------------------------------
+; Ports
+
+PORTA SFR $10 ; Datenregister
+PORTB SFR $12
+PORTC SFR $11
+PORTD SFR $13
+PORTE SFR $15
+
+DDRB SFR $11 ; Richtungsregister
+DDRC SFR $10
+DDRD SFR $12
+DDRE SFR $14
+
+;------------------------------------------------------------------------------
+; serieller Port
+
+RCSTA SFR $13 ; Empfängerstatus
+RCREG SFR $14 ; Empfängerdaten
+TXSTA SFR $15 ; Senderstatus
+TXREG SFR $16 ; Sendedaten
+SPBRG SFR $17 ; Teiler für SIO
+
+;------------------------------------------------------------------------------
+; Timer
+
+TMR1 SFR $10 ; Daten Timer 1
+TMR2 SFR $11 ; Daten Timer 2
+TMR3L SFR $12 ; Daten Timer 3
+TMR3H SFR $13
+
+PR1 SFR $14 ; Periode Timer 1
+PR2 SFR $15 ; Periode Timer 2
+PR3L SFR $16 ; Periode Timer 3
+PR3H SFR $17
+
+CA1L SFR $16 ; Fangwert 1
+CA1H SFR $17
+CA2L SFR $14 ; Fangwert 1
+CA2H SFR $15
+
+PW1DCL SFR $10 ; PWM 1 Daten
+PW1DCH SFR $12
+PW2DCL SFR $11 ; PWM 2 Daten
+PW2DCH SFR $13
+
+TCON1 SFR $16 ; Steuerregister 1
+TCON2 SFR $17 ; Steuerregister 2
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef18.inc b/include/stddef18.inc
new file mode 100644
index 0000000..672c76a
--- /dev/null
+++ b/include/stddef18.inc
@@ -0,0 +1,262 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF18.INC *
+;* *
+;* Sinn : enthält die SFR-Definitionen für die PIC 16C8x-Familie *
+;* Die Makrodefinitionen kann man bei Bedarf aus STDDEF16.INC *
+;* kopieren *
+;* *
+;* letzte Änderungen : 14.11.1993 *
+;* 27. 2.1993 PIC16C64-Register *
+;* IND0-->INDF umbenannt *
+;* *
+;****************************************************************************
+
+ ifndef stddef18inc ; verhindert Mehrfacheinbindung
+
+stddef18inc equ 1
+
+ if (MOMCPU<93316)&&(MOMCPU<>93284)
+ fatal "Falscher Prozessortyp eingestellt: nur 16C84 oder 16C64 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "PIC16C8x-Definitionen (C) 1993 Alfred Arnold"
+ message "binde \{MOMCPU}-Register ein"
+ endif
+
+;----------------------------------------------------------------------------
+; erstmal die Spezialregister :
+
+INDF SFR 0 ; indirekte Adressierung
+PCL SFR 2 ; PC Bits 0..7
+PCLATH SFR 10 ; obere Hälfte Programmzähler
+Status SFR 3 ; Status-Register
+FSR SFR 4 ; File-Select-Register
+OPTION SFR $81 ; Chipkonfiguration
+ if MOMCPU=$16C64
+PCON SFR $8e
+ endif
+
+;----------------------------------------------------------------------------
+; Ports
+
+PortA SFR 5 ; Datenregister Port A
+TrisA SFR $85 ; Datenrichtungsregister Port A
+PortB SFR 6 ; Datenregister Port C
+TrisB SFR $86 ; Datenrichtungsregister Port B
+ if MOMCPU=$16C64
+PortC SFR 7 ; Datenregister Port C
+TrisC SFR $87 ; Datenrichtungsregister Port C
+PortD SFR 8 ; Datenregister Port D
+TrisD SFR $88 ; Datenrichtungsregister Port D
+PortE SFR 9 ; Datenregister Port E
+TrisE SFR $89 ; Datenrichtungsregister Port E
+ endif
+
+;----------------------------------------------------------------------------
+; Timer
+
+ if MOMCPU=$16C64
+TMR0 SFR 1 ; Zähler 0
+TMR1L SFR 14 ; Zähler 1
+TMR1H SFR 15
+TMR2 SFR 17 ; Zähler 2
+CCPR1L SFR $15 ; Vergleichs/Pulsweitenregister
+CCPR1H SFR $16
+T1CON SFR 16 ; Steuerung Zähler 1
+T2CON SFR 18 ; Steuerung Zähler 2
+PR2 SFR $92 ; Periode Zähler 2
+CCP1CON SFR $17 ; Modus Vergleicher
+ elseif
+RTCC SFR 1 ; Zähler
+ endif
+
+;----------------------------------------------------------------------------
+; serielle Schnittstelle
+
+ if MOMCPU=$16C64
+SSPBuf SFR $13 ; serielles Datenregister
+SSPCon SFR $14 ; Konfiguration
+SSPAD0 SFR $93 ; I2C-Adreßregister
+SSPSTAT SFR $94 ; Schnittstellenstatus
+ endif
+
+;----------------------------------------------------------------------------
+; EEPROM
+
+ if MOMCPU=$16C84
+EEData SFR 8 ; EEPROM Datenregister
+EEAdr SFR 9 ; EEPROM Adreßregister
+EECON1 SFR $88 ; Konfiguration EEPROM
+EECON2 SFR $89
+ endif
+
+;----------------------------------------------------------------------------
+; Interrupts
+
+INTCON SFR 11 ; Interruptsteuerung
+ if MOMCPU=$16C64
+PIR SFR 12 ; Interrupts aufgetreten ?
+PIE SFR $8c ; Interruptfreigabe
+ endif
+
+;============================================================================
+; Bits im Statusregister
+
+Flag_C EQU 0 ; Carry
+Flag_DC EQU 1 ; Digit-Carry
+Flag_Z EQU 2 ; Zero
+Flag_PD EQU 3 ; Aufgewacht aus SLEEP-Befehl ?
+Flag_TO EQU 4 ; Durch Watchdog zurückgesetzt ?
+Flag_RP0 EQU 5 ; Registerbank Bit 8
+ if MOMCPU=$16C84
+Flag_RP1 EQU 6 ; Registerbank Bit 9
+Flag_IRP EQU 7 ; Registerbnak Bit 9 (indirekt)
+ endif
+
+;----------------------------------------------------------------------------
+; Bits in TrisE
+
+ if MOMCPU=$16C64
+TRISE0 EQU 0 ; Datenrichtung RE0
+TRISE1 EQU 1 ; Datenrichtung RE1
+TRISE2 EQU 2 ; Datenrichtung RE2
+PSPMODE EQU 4 ; Modus Port D&E
+IBOV EQU 5 ; Überlauf Eingabepuffer
+OBF EQU 6 ; Ausgabepuffer voll
+IBF EQU 7 ; Eingabepuffer voll
+ endif
+
+;----------------------------------------------------------------------------
+; Bits in T1CON
+
+ if MOMCPU=$16C64
+TMR1ON EQU 0 ; Timer 1 starten
+TMR1CS EQU 1 ; Timer 1 mit internem/externem Takt
+T1INSYNC EQU 2 ; Timer 1 extern synchronisieren
+T1OSCEN EQU 3 ; Oszillator Timer 1 freigeben
+T1CKPS0 EQU 4 ; Vorteilerwahl Timer 1
+T1CKPS1 EQU 5
+ endif
+
+; Bits in T2CON
+
+ if MOMCPU=$16C64
+T2CKPS0 EQU 0 ; Vorteilerwahl Timer 2
+T2CKPS1 EQU 1
+TMR2ON EQU 2 ; Timer 2 ein/ausschalten
+TOUTPS0 EQU 3 ; Nachteilerwahl Timer 2
+TOUTPS1 EQU 4
+TOUTPS2 EQU 5
+TOUTPS3 EQU 7
+ endif
+
+; Bits in CCP1CON
+
+ if MOMCPU=$16C64
+CCP1M0 EQU 0 ; Modus CCP1
+CCP1M1 EQU 1
+CCP1M2 EQU 2
+CCP1M3 EQU 3
+CCP1Y EQU 4 ; PWM Bits 0,1
+CCP1X EQU 5
+ endif
+
+;----------------------------------------------------------------------------
+; Bits in SSPSTAT
+
+ if MOMCPU=$16C64
+BF EQU 0 ; Puffer voll ?
+UA EQU 1 ; neue Adresse muß in SSPADD geschrieben werden
+RW EQU 2 ; I2C lesen/schreiben ?
+S EQU 3 ; Startbit gefunden ?
+P EQU 4 ; Stopbit gefunden
+DA EQU 5 ; I2C Datum/Adresse empfangen ?
+ endif
+
+; Bits in SSPCON
+
+ if MOMCPU=$16C64
+SSPM0 EQU 0 ; Schnittstellenmodus
+SSPM1 EQU 1
+SSPM2 EQU 2
+SSPM3 EQU 3
+CKP EQU 4 ; Taktpolarität
+SSPEN EQU 5 ; Portfreigabe
+SSPOV EQU 6 ; Empfägerüberlauf
+WCOL EQU 7 ; Senderkollision
+ endif
+
+;----------------------------------------------------------------------------
+; Bits in INTCON
+
+RBIF EQU 0 ; auf 1, falls Pegelwechsel an PB4..7
+INTF EQU 1 ; Interrupt aufgetreten
+RTIF EQU 2 ; RTCC-Interrupt
+RBIE EQU 3 ; Interrupts durch Bit 0 freigeben
+INTE EQU 4 ; Interrupts durch Bit 1 freigeben
+RTIE EQU 5 ; Interrupts durch Bit 2 freigeben
+ if MOMCPU=$16C84
+EEIE EQU 6 ; Interrupts vom EEPROM freigeben
+ elseif
+PEIE EQU 6 ; Peripherie-Interrupts freigeben
+ endif
+GIE EQU 7 ; globale Interruptsperre
+
+; Bits in PIE1
+
+ if MOMCPU=$16C64
+TMR1IE EQU 0 ; Interrupts Timer 1 freigeben
+TMR2IE EQU 1 ; Interrupts Timer 2 freigeben
+CCP1IE EQU 2 ; Interrupts CCP1 freigeben
+SSPIE EQU 3 ; Interrupts serielle Schnittstelle freigeben
+PSPIE EQU 7 ; Interrupts Parallelport freigeben
+ endif
+
+; Bits in PIR1
+
+ if MOMCPU=$16C64
+TMR1IF EQU 0 ; Interrupt Timer 1 aufgetreten
+TMR2IF EQU 1 ; Interrupt Timer 2 aufgetreten
+CCP1IF EQU 2 ; Interrupt CCP1 aufgetreten
+SSPIF EQU 3 ; Interrupt serielle Schnittstelle aufgetreten
+PSPIF EQU 7 ; Interrupt Parallelport aufgetreten
+ endif
+
+;----------------------------------------------------------------------------
+; Bits in OPTION
+
+PS0 EQU 0 ; Einstellung Vorteiler
+PS1 EQU 1
+PS2 EQU 2
+PSA EQU 3 ; Vorteile-Zuordnung
+RTE EQU 4 ; Triggerflanke RTCC
+RTS EQU 5 ; RTCC-Signalquelle
+INTEDG EQU 6 ; INT-Triggerflanke
+RBPU EQU 7 ; Pull-Ups an Port B freigeben
+
+;Bits in PCON
+
+ if MOMCPU=$16C64
+POR EQU 1 ; 0=Power-On-Reset aufgetreten
+ endif
+
+;----------------------------------------------------------------------------
+; Bits in EECON1
+
+ if MOMCPU=$16C84
+RD EQU 0 ; Lesezyklus starten
+WR EQU 1 ; Schreibzyklus starten
+WREN EQU 2 ; Schreibsperre
+WRERR EQU 3 ; Schreibvorgang abgebrochen
+EEIF EQU 4 ; signalisiert Schreibende
+ endif
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef2x.inc b/include/stddef2x.inc
new file mode 100644
index 0000000..5a774de
--- /dev/null
+++ b/include/stddef2x.inc
@@ -0,0 +1,53 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF2X.INC *
+;* *
+;* Sinn : enthält die globalen Register-Definitionen für die *
+;* TMS320C2x Prozessoren *
+;* *
+;* letzte Änderungen : 27.02.1994 *
+;* *
+;****************************************************************************
+
+ ifndef stddef2xinc ; verhindert Mehrfacheinbindung
+
+stddef2xinc equ 1
+
+ if (MOMCPUNAME<>"320C25") && (MOMCPUNAME<>"320C26") && (MOMCPUNAME<>"320C28")
+ fatal "Falscher Prozessortyp eingestellt: nur 320C25, 320C26 und 320C28 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "TMS320C2x Register-Definitionen (C) 1994 Thomas Sailer"
+ endif
+
+;----------------------------------------------------------------------------
+ segment data
+ org 0
+
+DRR res 1
+DXR res 1
+TIM res 1
+PRD res 1
+IMR res 1
+GREG res 1
+
+ if (MOMCPUNAME="320C26")
+B2_D equ 60h
+B0_D equ 200h
+B1_D equ 400h
+B3_D equ 600h
+B0_P equ 0fa00h
+B1_P equ 0fc00h
+B3_P equ 0fe00h
+ endif
+
+;---------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef37.inc b/include/stddef37.inc
new file mode 100644
index 0000000..7498f82
--- /dev/null
+++ b/include/stddef37.inc
@@ -0,0 +1,527 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF37.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für die TMS370-Prozessoren *
+;* *
+;* letzte Änderungen : 12. 5.1993 *
+;* *
+;****************************************************************************
+
+ ifndef stddef37inc ; verhindert Mehrfacheinbindung
+
+stddef37inc equ 1
+
+ if (MOMCPU<>57720848)&&(MOMCPU<>57720864)&&(MOMCPU<>57720880)&&(MOMCPU<>57720896)&&(MOMCPU<>57720912)
+ fatal "Falscher Prozessortyp eingestellt: nur 370C010, 370C020, 370C030, 370C040 oder 370C050 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "TMS370-Register-Definitionen (C) 1994 Alfred Arnold"
+ message "binde \{MOMCPU}-SFRs ein"
+ endif
+
+; Das mit diesen langen Namen ist ja wohl nicht ernst gemeint ???
+
+;----------------------------------------------------------------------------
+; Systemsteuerung
+
+sccr0 equ p010
+cold_start dbit 7,sccr0 ; Kaltstart ?
+osc_power dbit 6,sccr0 ; Stromaufnahme Oszillator reduzieren
+pf_auto_wait dbit 5,sccr0 ; Wartezyklen für externe Peripherie
+osc_flt_flag dbit 4,sccr0 ; Fehler in Oszillatorschaltung ?
+mc_pin_wpo dbit 3,sccr0 ; Spannung an MC hoch genug ?
+mc_pin_data dbit 2,sccr0 ; Zustand des MC-Anschlusses
+up_uc_mode dbit 0,sccr0 ; Mikroprozessor/Mikrokontroller-Modus
+
+sccr1 equ p011
+auto_wait_disable dbit 4,sccr1 ; Wartezyklen für externen Speicher
+memory_disable dbit 2,sccr1 ; int. ROM abschalten
+
+sccr2 equ p012
+halt_standby dbit 7,sccr2 ; Halt oder /Standby-Modus
+pwrdwn_idle dbit 6,sccr2 ; /Idle oder Halt/Standby-Modus
+bus_stest dbit 4,sccr2 ; Bus-Selbsttest ??
+cpu_stest dbit 3,sccr2 ; Prozessor-Selbsttest ??
+int1_nmi dbit 1,sccr2 ; Interrupt 1 maskierbar/nicht maskierbar
+privilege_disable dbit 0,sccr2 ; privilegierten Modus verlassen
+
+;----------------------------------------------------------------------------
+; digitaler IO
+
+aport1 equ p020
+aport2 equ p021
+adata equ p022 ; Port A Datenregister
+adir equ p023 ; Port A Datenrichtungsregister
+
+ if (MOMCPU=370C020h)||(MOMCPU>370C030h)
+bport1 equ p024
+bport2 equ p025
+bdata equ p026 ; Port B Datenregister
+bdir equ p027 ; Port B Datenrichtungsregister
+ endif
+
+ if (MOMCPU=370C020h)||(MOMCPU=370C050h)
+cport1 equ p028
+cport2 equ p029
+cdata equ p02a ; Port C Datenregister
+cdir equ p02b ; Port C Datenrichtungsregister
+ endif
+
+dport1 equ p02c
+dport2 equ p02d
+ddata equ p02e ; Port D Datenregister
+ddir equ p02f ; Port D Datenrichtungsregister
+
+;----------------------------------------------------------------------------
+; Interrupts
+
+int1 equ p017
+int1_enable dbit 0,int1 ; Freigabe externer Interrupt 1
+int1_priority dbit 1,int1 ; Priorität externer Interrupt 1
+int1_polarity dbit 2,int1 ; Polarität externer Interrupt 1
+int1_pin_data dbit 6,int1 ; Zustand Interrupt 1-Pin
+int1_flag dbit 7,int1 ; externer Interrupt 1 aufgetreten
+
+int2 equ p018
+int2_enable dbit 0,int2 ; Freigabe externer Interrupt 2
+int2_priority dbit 1,int2 ; Priorität externer Interrupt 2
+int2_polarity dbit 2,int2 ; Polarität externer Interrupt 2
+int2_data_out dbit 3,int2 ; Ausgabewert Interrupt 2-Pin
+int2_data_dir dbit 4,int2 ; Datenrichtung Interrupt 2-Pin
+int2_pin_data dbit 6,int2 ; Zustand Interrupt 2-Pin
+int2_flag dbit 7,int2 ; externer Interrupt 2 aufgetreten
+
+int3 equ p019
+int3_enable dbit 0,int3 ; Freigabe externer Interrupt 3
+int3_priority dbit 1,int3 ; Priorität externer Interrupt 3
+int3_polarity dbit 2,int3 ; Polarität externer Interrupt 3
+int3_data_out dbit 3,int3 ; Ausgabewert Interrupt 3-Pin
+int3_data_dir dbit 4,int3 ; Datenrichtung Interrupt 3-Pin
+int3_pin_data dbit 6,int3 ; Zustand Interrupt 3-Pin
+int3_flag dbit 7,int3 ; externer Interrupt 3 aufgetreten
+
+;----------------------------------------------------------------------------
+; (E)EPROM
+
+deectl equ p01a
+ee_busy dbit 7,deectl ; EEPROM nicht zugreifbar
+ap dbit 2,deectl ; Blockprogrammierung freigeben
+w1w0 dbit 1,deectl ; Einsen oder Nullen programmieren ?
+ee_exe dbit 0,deectl ; Vorgang ausführen
+
+epctl0 equ p01c
+ep0_busy dbit 7,epctl0 ; EPROM Teil 1 nicht zugreifbar
+ep0_vpps dbit 6,epctl0 ; Brennspannung freigeben
+ep0_w0 dbit 1,epctl0 ; Schreiben von Nullen freigeben
+ep0_exe dbit 0,epctl0 ; Schreibvorgang ausführen
+
+epctl1 equ p01e
+ep1_busy dbit 7,epctl1 ; EPROM Teil 2 nicht zugreifbar
+ep1_vpps dbit 6,epctl1 ; Brennspannung freigeben
+ep1_w0 dbit 1,epctl1 ; Schreiben von Nullen freigeben
+ep1_exe dbit 0,epctl1 ; Schreibvorgang ausführen
+
+;----------------------------------------------------------------------------
+; Timer 1
+
+t1ctl1 equ p049 ; steuern auch Watchdog
+t1ctl2 equ p04a
+
+ if MOMCPU<>370C030h
+t1cntrh equ p040 ; Zählerregister
+t1cntrl equ p041
+
+t1ch equ p042 ; Vergleichsregister
+t1cl equ p043
+
+t1cch equ p044 ; Vergleichs/Fangregister
+t1ccl equ p045
+
+t1_input_select0 dbit 0,t1ctl1 ; Taktquelle
+t1_input_select1 dbit 1,t1ctl1
+t1_input_select2 dbit 2,t1ctl1
+
+t1_sw_reset dbit 0,t1ctl2 ; Zähler zurücksetzen
+t1_ovrfl_int_flag dbit 3,t1ctl2 ; Overflow aufgetreten ?
+t1_ovrfl_int_ena dbit 4,t1ctl2 ; Overflow-Interrupts freigeben
+
+t1ctl3 equ p04b
+t1c1_int_ena dbit 0,t1ctl3 ; Interrupts Vergleichsregister freigeben
+t1c2_int_ena dbit 1,t1ctl3 ; Interrupts Vergleichs(/Fang)register freigeben
+t1edge_int_ena dbit 2,t1ctl3 ; Interrupts bei Flanke an T1IC/CR freigeben
+t1c1_int_flag dbit 5,t1ctl3 ; Interrupt durch Vergleichsregister ?
+t1c2_int_flag dbit 6,t1ctl3 ; Interrupt durch Vergleichs(/Fang)register ?
+t1edge_int_flag dbit 7,t1ctl3 ; Interrupt durch Flanke an T1IC/CR ?
+
+t1ctl4 equ p04c
+t1edge_det_ena dbit 0,t1ctl4 ; Flankendetektor an T1IC/CR freigeben
+t1cr_rst_ena dbit 1,t1ctl4 ; externen Reset freigeben
+t1edge_polarity dbit 2,t1ctl4 ; Flankenwahl T1IC/CR
+t1cr_out_ena dbit 3,t1ctl4 ; Umschaltung PWM durch T1IC/CR freigeben
+t1c1_rst_ena dbit 4,t1ctl4 ; Rücksetzen durch Vergleicher freigeben
+t1c2_out_ena dbit 5,t1ctl4 ; Umschaltung PWM durch Vergleichs(/Fang)register freigeben
+t1c1_out_ena dbit 6,t1ctl4 ; Umschaltung PWM durch Vergleichsregister freigeben
+t1_mode dbit 7,t1ctl4 ; Modus Timer 1
+
+t1pc1 equ p04d
+t1evt_data_dir dbit 0,t1pc1 ; Timer 1 Event-Pin Datenrichtung
+t1evt_function dbit 1,t1pc1 ; Timer 1 Event-Pin Funktionsumschaltung
+t1evt_data_out dbit 2,t1pc1 ; Timer 1 Event-Pin Datenausgang
+t1evt_data_in dbit 3,t1pc1 ; Timer 1 Event-Pin Dateneingang
+
+t1pc2 equ p04e
+t1iccr_data_dir dbit 0,t1pc2 ; T1IC/CR-Pin Datenrichtung
+t1iccr_function dbit 1,t1pc2 ; T1IC/CR-Pin Funktionsumschaltung
+t1iccr_data_out dbit 2,t1pc2 ; T1IC/CR-Pin Datenausgang
+t1iccr_data_in dbit 3,t1pc2 ; T1IC/CR-Pin Dateneingang
+t1pwm_data_dir dbit 4,t1pc2 ; T1PWM-Pin Datenrichtung
+t1pwm_function dbit 5,t1pc2 ; T1PWM-Pin Funktionsumschaltung
+t1pwm_data_out dbit 2,t1pc2 ; T1PWM-Pin Datenausgang
+t1pwm_data_in dbit 7,t1pc2 ; T1PWM-Pin Dateneingang
+
+t1pri equ p04f
+t1_priority dbit 6,t1pri ; Priorität Interrupts Timer 1
+t1_stest dbit 7,t1pri ; Selbsttest Timer 1
+ endif
+
+;----------------------------------------------------------------------------
+; Timer 2
+
+ if MOMCPU>370C030H
+t2cntrh equ p060 ; Zählerregister
+t2cntrl equ p061
+
+t2ch equ p062 ; Vergleichsregister
+t2cl equ p063
+
+t2cch equ p064 ; Vergleichs/Fangregister
+t2ccl equ p065
+
+t2ich equ p066 ; Fangregister
+t2icl equ p067
+
+t2ctl1 equ p06a
+t2_sw_reset dbit 0,t2ctl1 ; Zähler zurücksetzen
+t2_input_select0 dbit 1,t2ctl1 ; Taktquelle
+t2_input_select1 dbit 2,t2ctl1
+t2_ovrfl_int_flag dbit 3,t2ctl1 ; Overflow aufgetreten ?
+t2_ovrfl_int_ena dbit 4,t2ctl1 ; Overflow-Interrupts freigeben
+
+t2ctl2 equ p06b
+t2c1_int_ena dbit 0,t2ctl2 ; Interrupts Vergleichsregister freigeben
+t2c2_int_ena dbit 1,t2ctl2 ; Interrupts Vergleichs(/Fang)register freigeben
+t2edge1_int_ena dbit 2,t2ctl2 ; Interrupts bei Flanke an T2IC1/CR freigeben
+t2c1_int_flag dbit 5,t2ctl2 ; Interrupt durch Vergleichsregister ?
+t2c2_int_flag dbit 6,t2ctl2 ; Interrupt durch Vergleichs(/Fang)register ?
+t2edge1_int_flag dbit 7,t2ctl2 ; Interrupt durch Flanke an T2IC1/CR ?
+
+t2ctl3 equ p06c
+t2edge1_det_ena dbit 0,t2ctl3 ; Flankendetektor an T2IC1/CR freigeben
+t2edge1_rst_ena dbit 1,t2ctl3 ; externen Reset freigeben
+t2edge2_det_ena dbit 1,t2ctl3 ; Flankendetektor an T2IC2/CR freigeben
+t2edge1_polarity dbit 2,t2ctl3 ; Flankenwahl T2IC1/CR
+t2edge1_out_ena dbit 3,t2ctl3 ; Umschaltung PWM durch T2IC1/CR freigeben
+t2edge2_polarity dbit 3,t2ctl3 ; Flankenwahl T2IC2/CR
+t2c1_rst_ena dbit 4,t2ctl3 ; Rücksetzen durch Vergleicher freigeben
+t2c2_out_ena dbit 5,t2ctl3 ; Umschaltung PWM durch Vergleichs(/Fang)register freigeben
+t2c1_out_ena dbit 6,t2ctl3 ; Umschaltung PWM durch Vergleichsregister freigeben
+t2_mode dbit 7,t2ctl3 ; Modus Timer 2
+
+t2pc1 equ p06d
+t2evt_data_dir dbit 0,t2pc1 ; Timer 2 Event-Pin Datenrichtung
+t2evt_function dbit 1,t2pc1 ; Timer 2 Event-Pin Funktionsumschaltung
+t2evt_data_out dbit 2,t2pc1 ; Timer 2 Event-Pin Datenausgang
+t2evt_data_in dbit 3,t2pc1 ; Timer 2 Event-Pin Dateneingang
+
+t2pc2 equ p06e
+t2ic1cr_data_dir dbit 0,t1pc2 ; T2IC1/CR-Pin Datenrichtung
+t2ic1cr_function dbit 1,t1pc2 ; T2IC1/CR-Pin Funktionsumschaltung
+t2ic1cr_data_out dbit 2,t1pc2 ; T2IC1/CR-Pin Datenausgang
+t2ic1cr_data_in dbit 3,t1pc2 ; T2IC1/CR-Pin Dateneingang
+t2ic2cr_data_dir dbit 4,t1pc2 ; T2IC2/CR-Pin Datenrichtung
+t2ic2cr_function dbit 5,t1pc2 ; T2IC2/CR-Pin Funktionsumschaltung
+t2ic2cr_data_out dbit 6,t1pc2 ; T2IC2/CR-Pin Datenausgang
+t2ic2cr_data_in dbit 7,t1pc2 ; T2IC2/CR-Pin Dateneingang
+t2pwm_data_dir dbit 4,t1pc2 ; T2PWM-Pin Datenrichtung
+t2pwm_function dbit 5,t1pc2 ; T2PWM-Pin Funktionsumschaltung
+t2pwm_data_out dbit 6,t1pc2 ; T2PWM-Pin Datenausgang
+t2pwm_data_in dbit 7,t1pc2 ; T2PWM-Pin Dateneingang
+
+t2pri equ p06f
+t2_priority dbit 6,t2pri ; Priorität Interrupts Timer 2
+t2_stest dbit 7,t2pri ; Selbsttest Timer 2
+ endif
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+ if MOMCPU<>370C030h
+wdcntrh equ p046 ; Zählregister
+wdcntrl equ p047
+
+wdrst equ p048 ; Rücksetz-Schlüsselregister
+
+wd_input_select0 dbit 4,t1ctl1 ; Taktquelle
+wd_input_select1 dbit 5,t1ctl1
+wd_input_select2 dbit 6,t1ctl1
+wd_ovrfl_tap_sel dbit 7,t1ctl1 ; 15- oder 16-bittig zählen
+wd_ovrfl_int_flag dbit 5,t1ctl2 ; Watchdog-Reset aufgetreten ?
+wd_ovrfl_int_ena dbit 6,t1ctl2 ; Watchdog-Interrupts freigeben
+wd_ovrfl_rst_ena dbit 7,t1ctl2 ; Watchdog-Resets freigeben
+ endif
+
+;----------------------------------------------------------------------------
+; SCI
+
+ if (MOMCPU=370C020h)||(MOMCPU>370C030h)
+sciccr equ p050
+sci_char0 dbit 0,sciccr ; Zeichenlänge
+sci_char1 dbit 1,sciccr
+sci_char2 dbit 2,sciccr
+address_idle_wup dbit 3,sciccr ; Multiprozessormodus
+async_iosync dbit 4,sciccr ; Betriebsart: synchron/asynchron
+parity_enable dbit 5,sciccr ; mit/ohne Parität
+even_odd_parity dbit 6,sciccr ; gerade/ungerade Parität
+stop_bits dbit 7,sciccr ; Anzahl Stopbits
+
+scictl equ p051
+rxena dbit 0,scictl ; Empfängerfreigabe
+txena dbit 1,scictl ; Senderfreigabe
+sleep dbit 2,scictl ; Sleep-Modus SCI
+txwake dbit 3,scictl ; Sender aufwecken
+clock dbit 4,scictl ; interner/externer Takt SCI
+sci_sw_reset dbit 5,scictl ; Software-Reset
+
+baud_msb equ p052 ; Baudratengenerator
+baud_lsb equ p053
+
+txctl equ p054
+sci_tx_int_ena dbit 0,txctl ; Interrupts durch Sender freigeben
+tx_empty dbit 6,txctl ; Sender komplett leer ?
+txrdy dbit 7,txctl ; neues Datum kann geschrieben werden
+
+rxctl equ p055
+sci_rx_int_ena dbit 0,rxctl ; Interrupts durch Empfänger freigeben
+rxwake dbit 1,rxctl ; Ist Empfänger aufgeweckt worden ?
+sci_pe dbit 2,rxctl ; Paritätsfehler ?
+sci_oe dbit 3,rxctl ; Überlauffehler ?
+sci_fe dbit 4,rxctl ; kein korrektes Stopbit ?
+brkdt dbit 5,rxctl ; Break aufgetreten ?
+rxrdy dbit 6,rxctl ; Zeichen empfangen ?
+rx_error dbit 7,rxctl ; Empfangsfehler aufgetreten ?
+
+rxbuf equ p057 ; Datenregister
+txbuf equ p059
+
+scipc1 equ p05d
+sciclk_data_dir dbit 0,scipc1 ; SCICLK-Pin Datenrichtung
+sciclk_function dbit 1,scipc1 ; SCICLK-Pin Funktionsumschaltung
+sciclk_data_out dbit 2,scipc1 ; SCICLK-Pin Datenausgang
+sciclk_data_in dbit 3,scipc1 ; SCICLK-Pin Dateneingang
+
+scipc2 equ p05e
+scirxd_data_dir dbit 0,scipc2 ; SCIRXD-Pin Datenrichtung
+scirxd_function dbit 1,scipc2 ; SCIRXD-Pin Funktionsumschaltung
+scirxd_data_out dbit 2,scipc2 ; SCIRXD-Pin Datenausgang
+scirxd_data_in dbit 3,scipc2 ; SCIRXD-Pin Dateneingang
+scitxd_data_dir dbit 4,scipc2 ; SCITXD-Pin Datenrichtung
+scitxd_function dbit 5,scipc2 ; SCITXD-Pin Funktionsumschaltung
+scitxd_data_out dbit 6,scipc2 ; SCITXD-Pin Datenausgang
+scitxd_data_in dbit 7,scipc2 ; SCITXD-Pin Dateneingang
+
+scipri equ p05f
+sci_espen dbit 4,scipri ; SCI emulator suspend ?!
+scirx_priority dbit 5,scipri ; SCI Empfangsinterrupt Priorität
+scitx_priority dbit 6,scipri ; SCI Sendeinterrupt Priorität
+sci_test dbit 7,scipri ; SCI Selbsttest
+ endif
+
+;----------------------------------------------------------------------------
+; SPI
+
+ if (MOMCPU<370C030h)||(MOMCPU=370C050h)
+spiccr equ p030
+spi_char0 dbit 0,spiccr ; Zeichenlänge
+spi_char1 dbit 1,spiccr
+spi_char2 dbit 2,spiccr
+spi_bit_rate0 dbit 3,spiccr ; Bitrate
+spi_bit_rate1 dbit 4,spiccr
+spi_bit_rate2 dbit 5,spiccr
+clock_polarity dbit 6,spiccr ; Polarität Taktsignal
+spi_sw_reset dbit 7,spiccr ; Software-Reset
+
+spictl equ p031
+spi_int_ena dbit 0,spictl ; Interrupt-Freigabe
+talk dbit 1,spictl ; Slave/Master-Senderfreigabe
+master_slave dbit 2,spictl ; Slave/Master-Umschaltung
+spi_int_flag dbit 6,spictl ; Interrupt aufgetreten ?
+receiver_overrun dbit 7,spictl ; EMpfängerüberlauf ?
+
+spibuf equ p037 ; Empfängerpuffer
+spidat equ p039 ; Senderegister
+
+spipc1 equ p03d
+spiclk_data_dir dbit 0,spipc1 ; SPICLK-Pin Datenrichtung
+spiclk_function dbit 1,spipc1 ; SPICLK-Pin Funktionsumschaltung
+spiclk_data_out dbit 2,spipc1 ; SPICLK-Pin Datenausgang
+spiclk_data_in dbit 3,spipc1 ; SPICLK-Pin Dateneingang
+
+spipc2 equ p03e
+spisomi_data_dir dbit 0,spipc2 ; SPISOMI-Pin Datenrichtung
+spisomi_function dbit 1,spipc2 ; SPISOMI-Pin Funktionsumschaltung
+spisomi_data_out dbit 2,spipc2 ; SPISOMI-Pin Datenausgang
+spisomi_data_in dbit 3,spipc2 ; SPISOMI-Pin Dateneingang
+spimosi_data_dir dbit 4,spipc2 ; SPIMOSI-Pin Datenrichtung
+spimosi_function dbit 5,spipc2 ; SPIMOSI-Pin Funktionsumschaltung
+spimosi_data_out dbit 6,spipc2 ; SPIMOSI-Pin Datenausgang
+spimosi_data_in dbit 7,spipc2 ; SPIMOSI-Pin Dateneingang
+
+spipri equ p03f
+spi_espen dbit 5,spipri ; Emulator unterdrücken ?!
+spi_priority dbit 6,spipri ; Interrupt-Priorität
+spi_stest dbit 7,spipri ; Selbsttest
+ endif
+
+;----------------------------------------------------------------------------
+; A/D-Wandler
+
+ if MOMCPU>370C030h
+adctl equ p070
+ad_input_select0 dbit 0,adctl ; Kanalauswahl
+ad_input_select1 dbit 1,adctl
+ad_input_select2 dbit 2,adctl
+ref_volt_select0 dbit 3,adctl ; Auswahl Referenzspannung
+ref_volt_select1 dbit 4,adctl
+ref_volt_select2 dbit 5,adctl
+sample_start dbit 6,adctl ; Sample-Phase beginnen (wird autom. gelöscht)
+convert_start dbit 7,adctl ; Wandlungs-Phase beginnen
+
+adstat equ p071
+ad_int_ena dbit 0,adstat ; Interrupt-Freigabe
+ad_int_flag dbit 1,adstat ; Interrupt aufgetreten ?
+ad_ready dbit 2,adstat ; AD-Wandler bereit ?
+
+addata equ p072 ; Wandlungsergebnis
+adin equ p07d ; digitale Eingangsdaten, wenn nicht analog genutzt
+adena equ p07e ; Analogeingänge freischalten
+
+adpri equ p07f
+ad_espen dbit 5,adpri ; Emulator unterdrücken ?!
+ad_priority dbit 6,adpri ; Interrupt-Priorität
+ad_stest dbit 7,adpri ; Selbsttest
+ endif
+
+;----------------------------------------------------------------------------
+; PACT
+
+ if MOMCPU=370C030h
+pact_scr equ p040
+pact_prescale_select0 dbit 0,pact_scr ; Vorteilerauswahl
+pact_prescale_select1 dbit 1,pact_scr
+pact_prescale_select2 dbit 2,pact_scr
+pact_prescale_select3 dbit 3,pact_scr
+fast_mode_select dbit 4,pact_scr ; Vorteiler durch 8 aus
+cmd_def_area_ena dbit 5,pact_scr ; Zugriff auf Dual-Port-RAM freigeben
+deftim_ovrfl_int_flag dbit 6,pact_scr ; Timerüberlauf aufgetreten ?
+deftim_ovrfl_int_ena dbit 7,pact_scr ; Interrupts bei Timerüberlauf freigeben
+
+cdstart equ p041
+cmd_def_area2 dbit 2,cdstart ; Startadresse Kommando/Definitionsbereich
+cmd_def_area3 dbit 3,cdstart
+cmd_def_area4 dbit 4,cdstart
+cmd_def_area5 dbit 5,cdstart
+cmd_def_area_int_ena dbit 7,cdstart ; Interrupts aus dem Bereich freigeben
+
+cdend equ p042
+cmd_def_area_end2 dbit 2,cdend ; Endadresse Kommando/Definitionsbereich
+cmd_def_area_end3 dbit 3,cdend
+cmd_def_area_end4 dbit 4,cdend
+cmd_def_area_end5 dbit 5,cdend
+cmd_def_area_end6 dbit 6,cdend
+
+bufptr equ p043
+buffer_pointer1 dbit 1,bufptr ; Adresse Pufferzeiger
+buffer_pointer2 dbit 2,bufptr
+buffer_pointer3 dbit 3,bufptr
+buffer_pointer4 dbit 4,bufptr
+buffer_pointer5 dbit 5,bufptr
+
+scictlp equ p045
+sci_sw_reset dbit 0,scictlp ; Software Reset
+sci_tx_int_ena dbit 2,scictlp ; Sendeinterrupts freigeben
+sci_rx_int_ena dbit 3,scictlp ; Empfängerinterrupts freigeben
+pact_fe dbit 4,scictlp ; Rahmenfehler ?
+pact_parity dbit 5,scictlp ; Paritätsfehler ?
+pact_txrdy dbit 6,scictlp ; Sender leer ?
+pact_rxrdy dbit 7,scictlp ; Empfangspuffer voll ?
+
+rxbufp equ p046 ; Mini-SCI Empfangspuffer
+txbufp equ p047 ; Mini-SCI Sendepuffer
+
+opstate equ p048 ; Status Ausgabepins
+cdflags equ p049 ; Interrupts durch Kommandos 0..7 aufgetreten ?
+
+cpctl1 equ p04a
+cp1_capt_falling_edge dbit 0,cpctl1 ; Fangen bei fallender Flanke an CP1
+cp1_capt_rising_edge dbit 1,cpctl1 ; Fangen bei steigender Flanke an CP1
+cp1_int_flag dbit 2,cpctl1 ; Flanke an CP1 aufgetreten ?
+cp1_int_ena dbit 3,cpctl1 ; Interrupts durch CP1 freigeben
+cp2_capt_falling_edge dbit 4,cpctl1 ; Fangen bei fallender Flanke an CP2
+cp2_capt_rising_edge dbit 5,cpctl1 ; Fangen bei steigender Flanke an CP2
+cp2_int_flag dbit 6,cpctl1 ; Flanke an CP2 aufgetreten ?
+cp2_int_ena dbit 7,cpctl1 ; Interrupts durch CP2 freigeben
+
+cpctl2 equ p04b
+cp3_capt_falling_edge dbit 0,cpctl2 ; Fangen bei fallender Flanke an CP3
+cp3_capt_rising_edge dbit 1,cpctl2 ; Fangen bei steigender Flanke an CP3
+cp3_int_flag dbit 2,cpctl2 ; Flanke an CP3 aufgetreten ?
+cp3_int_ena dbit 3,cpctl2 ; Interrupts durch CP3 freigeben
+cp4_capt_falling_edge dbit 4,cpctl2 ; Fangen bei fallender Flanke an CP4
+cp4_capt_rising_edge dbit 5,cpctl2 ; Fangen bei steigender Flanke an CP4
+cp4_int_flag dbit 6,cpctl2 ; Flanke an CP4 aufgetreten ?
+cp4_int_ena dbit 7,cpctl2 ; Interrupts durch CP4 freigeben
+
+cpctl3 equ p04c
+cp5_capt_falling_edge dbit 0,cpctl3 ; Fangen bei fallender Flanke an CP5
+cp5_capt_rising_edge dbit 1,cpctl3 ; Fangen bei steigender Flanke an CP5
+cp5_int_flag dbit 2,cpctl3 ; Flanke an CP5 aufgetreten ?
+cp5_int_ena dbit 3,cpctl3 ; Interrupts durch CP5 freigeben
+cp6_capt_falling_edge dbit 4,cpctl3 ; Fangen bei fallender Flanke an CP6
+cp6_capt_rising_edge dbit 5,cpctl3 ; Fangen bei steigender Flanke an CP6
+cp6_int_flag dbit 6,cpctl3 ; Flanke an CP6 aufgetreten ?
+cp6_int_ena dbit 7,cpctl3 ; Interrupts durch CP6 freigeben
+
+cppre equ p04d
+op_set_clr_select dbit 0,cppre ; Ausgabepins per Sofware löschen/setzen?
+event_counter_sw_reset dbit 1,cppre ; Ereigniszähler zurücksetzen
+cp6_event_only dbit 2,cppre ; CP6 nur für Ereigniszähler
+input_capt_prescale_select0 dbit 3,cppre; Vorteiler für CP3..CP6
+input_capt_prescale_select1 dbit 4,cppre
+input_capt_prescale_select2 dbit 5,cppre
+buffer_half_full_int_flag dbit 6,cppre ; Interrupts, daß Puffer halb/ganz voll ?
+buffer_half_full_int_ena dbit 7,cppre ; obige Interrupts freischalten
+
+wdrst equ p04e
+
+pactpri equ p04f
+wd_prescale_select0 dbit 0,pactpri ; Vorteiler Watchdog
+wd_prescale_select1 dbit 1,pactpri
+pact_mode_select dbit 2,pactpri ; PACT in Modus A oder B
+pact_group_3_priority dbit 3,pactpri ; Prioritäten der Interruptgruppen
+pact_group_2_priority dbit 4,pactpri
+pact_group_1_priority dbit 5,pactpri
+pact_stest dbit 7,pactpri ; Selbsttest
+ endif
+
+;----------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef3x.inc b/include/stddef3x.inc
new file mode 100644
index 0000000..d364bf6
--- /dev/null
+++ b/include/stddef3x.inc
@@ -0,0 +1,96 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF3X.INC *
+;* *
+;* Sinn : enthält Register- und Adreßdefinitionen für die TMS320C3x-CPUs *
+;* *
+;* letzte Änderungen : 27. 9.1994 *
+;* *
+;****************************************************************************
+
+ ifndef stddef3xinc ; verhindert Mehrfacheinbindung
+
+stddef3xinc equ 1
+
+ if (MOMCPU<>3279920)&&(MOMCPU<>3279921)
+ fatal "Falscher Prozessortyp eingestellt: nur 320C30/320C31 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "TMS320C3x-Definitionen (C) 1994 Alfred Arnold"
+ endif
+
+;------------------------------------------------------------------------------
+; Timer
+
+T0CTRL equ 808020h
+T0CNT equ 808024h
+T0PERIOD equ 808028h
+
+T1CTRL equ 808030h
+T1CNT equ 808034h
+T1PERIOD equ 808038h
+
+;------------------------------------------------------------------------------
+; serielle Ports
+
+S0CTRL equ 808040h
+S0TXPORTCTRL equ 808042h
+S0RXPORTCTRL equ 808043h
+S0TIMERCTRL equ 808044h
+S0TIMERCNT equ 808045h
+S0TIMERPERIOD equ 808046h
+S0TBUF equ 808048h
+S0RBUF equ 80804ch
+
+ if MOMCPU=320C30h
+S1CTRL equ 808050h
+S1TXPORTCTRL equ 808052h
+S1RXPORTCTRL equ 808053h
+S1TIMERCTRL equ 808054h
+S1TIMERCNT equ 808055h
+S1TIMERPERIOD equ 808056h
+S1TBUF equ 808058h
+S1RBUF equ 80805ch
+ endif
+
+;------------------------------------------------------------------------------
+; DMA
+
+DMACTRL equ 808000h
+DMASRCADR equ 808004h
+DMADESTADR equ 808006h
+DMACNT equ 808008h
+
+;------------------------------------------------------------------------------
+; Adressen Interrupt-Vektoren
+
+INTVEC_RESET equ 0
+INTVEC_INT0 equ 1
+INTVEC_INT1 equ 2
+INTVEC_INT2 equ 3
+INTVEC_INT3 equ 4
+INTVEC_XINT0 equ 5
+INTVEC_RINT0 equ 6
+ if MOMCPU=320C30h
+INTVEC_XINT1 equ 7
+INTVEC_RINT1 equ 8
+ endif
+INTVEC_TINT0 equ 9
+INTVEC_TINT1 equ 0ah
+INTVEC_DINT equ 0bh
+__TMPINTVEC set 0
+ rept 28
+INTVEC_TRAP{"\{__TMPINTVEC}"} equ __TMPINTVEC+20h
+__TMPINTVEC set __TMPINTVEC+1
+ endm
+
+ endif
+
+ restore ; Listing wieder erlauben
+
+
diff --git a/include/stddef47.inc b/include/stddef47.inc
new file mode 100644
index 0000000..44ac1ae
--- /dev/null
+++ b/include/stddef47.inc
@@ -0,0 +1,279 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF47.INC *
+;* *
+;* Sinn : enthält den "erweiterten Befehlssatz für die *
+;* TLCS-47(0(A*))-Reihe *
+;* *
+;* Author Alfred Arnold *
+;* *
+;* letzte Änderungen : 22.1.1994 *
+;* *
+;****************************************************************************
+
+ ifndef stddef47inc ; verhindert Mehrfacheinbindung
+
+stddef47inc equ 1
+
+ if (MOMCPU<>293888)&&(MOMCPU<>4656128)&&(MOMCPU<>74492928)
+ fatal "Falscher Prozessortyp eingestellt: nur 47C00, 470C00, oder 470AC00 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "TLCS-47-Makrodefinitionen"
+ message "(C) 1994 Alfred Arnold"
+ message "Zielprozessor: \{MOMCPU}"
+ endif
+
+;----------------------------------------------------------------------------
+; hier geht's los...
+
+; bedingte Sprünge
+
+
+bz macro adr ; Sprung, falls ZF=1
+ testp zf
+ b adr
+ endm
+
+
+bnz macro adr ; Sprung, falls ZF=0
+ testp zf
+ b s1
+ b adr
+s1:
+ endm
+
+
+bc macro adr ; Sprung, falls CF=1
+ testp cf
+ b adr
+ endm
+
+
+bnc macro adr ; Sprung, falls CF=0
+ test cf
+ b adr
+ endm
+
+
+be macro dest,src,adr ; Vergleich & Sprung, falls =
+ cmpr dest,src
+ testp zf
+ b adr
+ endm
+
+
+bne macro dest,src,adr ; Vergleich & Sprung, falls <>
+ cmpr dest,src
+ if UpString("DEST")<>"A"
+ testp zf
+ b s1
+ endif
+ b adr
+s1:
+ endm
+
+
+bge macro dest,src,adr ; Vergleich & Sprung, falls >=
+ cmpr dest,src
+ testp zf
+ b adr
+ test cf
+ b adr
+ endm
+
+
+bgt macro dest,src,adr ; Vergleich und Sprung, falls >
+ cmpr dest,src
+ test cf
+ b adr
+ endm
+
+
+ble macro dest,src,adr ; Vergleich und Sprung, falls <=
+ cmpr dest,src
+ testp cf
+ b adr
+ endm
+
+
+blt macro dest,src,adr ; Vergleich und Sprung, falls <
+ cmpr dest,src
+ testp zf
+ b s1
+ testp cf
+ b adr
+s1:
+ endm
+
+
+; Unterprogrammaufrufe
+
+
+callss macro vector ; per Vektor
+ if vector=0
+ calls 86h
+ elseif
+ calls (vector<<3)+6
+ endif
+ endm
+
+
+callz macro adr ; falls ZF=1
+ testp zf
+ b s1
+ b s2
+s1: call adr
+s2:
+ endm
+
+
+callnz macro adr ; falls ZF=0
+ testp zf
+ b s1
+ call adr
+s1:
+ endm
+
+
+callc macro adr ; falls CF=1
+ test cf
+ b s1
+ call adr
+s1:
+ endm
+
+
+callnc macro adr ; falls CF=0
+ testp cf
+ b s1
+ call adr
+s1:
+ endm
+
+
+; Unterprogrammrücksprünge
+
+
+retz macro ; falls ZF=1
+ testp zf
+ b s1
+ b s2
+s1: ret
+s2:
+ endm
+
+
+retnz macro ; falls ZF=0
+ testp zf
+ b s1
+ ret
+s1:
+ endm
+
+
+retc macro ; falls CF=1
+ test cf
+ b s1
+ ret
+s1:
+ endm
+
+
+retnc macro ; falls CF=0
+ testp cf
+ b s1
+ ret
+s1:
+ endm
+
+
+; Interruptrücksprünge
+
+
+retiz macro ; falls ZF=1
+ testp zf
+ b s1
+ b s2
+s1: reti
+s2:
+ endm
+
+
+retinz macro ; falls ZF=0
+ testp zf
+ b s1
+ reti
+s1:
+ endm
+
+
+retic macro ; falls CF=1
+ test cf
+ b s1
+ reti
+s1:
+ endm
+
+
+retinc macro ; falls CF=0
+ testp cf
+ b s1
+ reti
+s1:
+ endm
+
+
+; erweiterte Schiebebefehle
+
+
+shl macro op,cnt ; log. Linksshift
+ if UpString("OP")<>"A"
+ xch a,op
+ endif
+ rept cnt
+ test cf
+ rolc a
+ endm
+ if UpString("OP")<>"A"
+ xch a,op
+ endif
+ endm
+
+shr macro op,cnt ; log. Rechtsshift
+ if UpString("OP")<>"A"
+ xch a,op
+ endif
+ rept cnt
+ test cf
+ rorc a
+ endm
+ if UpString("OP")<>"A"
+ xch a,op
+ endif
+ endm
+
+
+; Interruptsperren
+
+
+ei macro
+ eiclr il,3fh
+ endm
+
+di macro
+ diclr il,3fh
+ endm
+
+;---------------------------------------------------------------------------
+; das war's...
+
+ endif
+
+ restore
+
+
diff --git a/include/stddef51.inc b/include/stddef51.inc
new file mode 100644
index 0000000..bcc53e0
--- /dev/null
+++ b/include/stddef51.inc
@@ -0,0 +1,374 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei STDDEF51.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für die MCS-51-Prozessoren *
+;* *
+;* letzte Änderungen : 7. 1.1993 *
+;* 14. 1.1993 USING-Makro hinzugefügt *
+;* 26. 1.1993 REGUSAGE-Variable ergänzt *
+;* 21. 1.1993 Erzeugerhinweis *
+;* 5. 6.1993 IPC & IEC hinzugefügt *
+;* SAVE & RESTORE *
+;* Prozessorsperre (Idee von Matthias) *
+;* 11. 9.1993 Meldung nur im 1.Pass *
+;* 12. 5.1994 DS80C320-Register hinzugefügt *
+;* 25. 6.1995 87C750 hinzugefügt *
+;* 22. 3.1996 SFR's fur 80517 eingefügt *
+;* (von Gabriel Jager) *
+;* 14. 6.1996 80517-Korrekturen wg. Klammerung *
+;* 26. 3.1997 Abfrage auf MOMCPU *
+;* *
+;****************************************************************************
+
+ ifndef stddef51inc ; verhindert Mehrfacheinbindung
+
+stddef51inc equ 1
+
+ if (MOMCPUNAME<>"87C750")&&(MOMCPUNAME<>"8051")&&(MOMCPUNAME<>"8052")&&(MOMCPUNAME<>"80C320")&&(MOMCPUNAME<>"80515")&&(MOMCPUNAME<>"80517")
+ fatal "Falscher Prozessortyp eingestellt: nur 87C750, 8051, 8052, 80C320, 80515 oder 80517 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "MCS-51-SFR-Definitionen (C) 1993 Alfred Arnold/Gabriel Jager"
+ message "binde \{MOMCPU}-SFRs ein"
+ endif
+
+;----------------------------------------------------------------------------
+; erstmal die Sachen, die es (fast) überall gibt :
+
+P0 SFRB 80h ; I/O-Ports
+P1 SFRB 90h
+P2 SFRB 0a0h
+P3 SFRB 0b0h
+RD BIT P3.7 ; Port 3: Schreibleitung
+WR BIT P3.6 ; Leseleitung
+T1 BIT P3.5 ; Testleitung 1
+T0 BIT P3.4 ; Testleitung 0
+INT1 BIT P3.3 ; ext. Interrupt 1
+INT0 BIT P3.2 ; ext. Interrupt 0
+TXD BIT P3.1 ; ser. Ausgang
+RXD BIT P3.0 ; ser. Eingang
+ if MOMCPU=80C320H
+TXD1 BIT P1.3 ; zweiter ser. Ausgang
+RXD1 BIT P1.2 ; zweiter ser. Eingang
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+SP SFR 81h ; Stapelzeiger
+DPL SFR 82h ; Datenzeiger Bit 0..7
+DPH SFR 83h ; " Bit 8..15
+ if MOMCPU=80C320H
+DPL0 SFR DPL
+DPH0 SFR DPH
+DPL1 SFR 84h ; zweiter Datenzeiger 80C320
+DPH1 SFR DPL1+1
+DPS SFR 86h ; Bit 0=Umschaltung DPTR0<-->DPTR1
+ endif
+PSW SFRB 0d0h ; Statuswort
+CY BIT PSW.7
+AC BIT PSW.6
+F0 BIT PSW.5
+RS1 BIT PSW.4
+RS0 BIT PSW.3
+OV BIT PSW.2
+P BIT PSW.0
+ACC SFRB 0e0h ; Akkumulator
+B SFRB 0f0h ; Hilfsakku für MUL/DIV
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+SCON SFRB 98h ; ser. Schnittstelle: Steuerregister
+SM0 BIT SCON.7 ; Betriebsarten
+SM1 BIT SCON.6
+SM2 BIT SCON.5
+REN BIT SCON.4 ; Empfangssperre
+TB8 BIT SCON.3 ; 9. zu sendendes Bit
+RB8 BIT SCON.2 ; 9. empfangenes Bit
+TI BIT SCON.1 ; Senderinterruptflag
+RI BIT SCON.0 ; Empfängerinterruptflag
+SBUF SFR 99h ; " " Datenregister
+
+ if MOMCPU=80C320H ; Register zweite serielle Schnittstelle
+SCON0 SFR SCON
+SBUF0 SFR SBUF
+SCON1 SFR 0c0h ; Steuerregister
+SBUF1 SFR 0c1h ; Datenregister
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+PCON SFR 87h ; "Power-Management"
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+TCON SFRB 88h ; Timer 0/1 Steuerregister
+TF1 BIT TCON.7 ; Überlauf Timer 1
+TR1 BIT TCON.6 ; Timer 1 laufenlassen
+TF0 BIT TCON.5 ; Überlauf Timer 0
+TR0 BIT TCON.4 ; Timer 0 laufenlassen
+IE1 BIT TCON.3 ; Externer Interrupt 1 aufgetreten
+IT1 BIT TCON.2 ; Einstellung Triggerflanke externer Interrupt 1
+IE0 BIT TCON.1 ; Externer Interrupt 0 aufgetreten
+IT0 BIT TCON.0 ; Einstellung Triggerflanke externer Interrupt 0
+TMOD SFR 89h ; Timer 0/1 Betriebsartenregister
+TL0 SFR 8ah ; Daten Timer 0
+TL1 SFR 8bh
+TH0 SFR 8ch ; Daten Timer 1
+TH1 SFR 8dh
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; kein Timer 2 beim 8051
+
+ if MOMCPU<>8051h
+T2CON SFRB 0c8h ; Steuerregister Timer 2
+TL2 SFR 0cch ; Daten Timer 2
+TH2 SFR 0cdh
+ if MOMCPU=8052h
+RCAP2L SFR 0cah ; Capture-Register
+RCAP2H SFR 0cbh
+TF2 BIT T2CON.7 ; Overflow Timer 2
+EXF2 BIT T2CON.6 ; Reload aufgetreten
+RCLK BIT T2CON.5 ; Timer 2 liefert RxD-Takt
+TCLK BIT T2CON.4 ; Timer 2 liefert TxD-Takt
+EXEN2 BIT T2CON.3 ; externer Enable Timer 2
+TR2 BIT T2CON.2 ; Timer 2 starten
+CT2 BIT T2CON.1 ; Timer 2 als Zähler
+CPRL2 BIT T2CON.0 ; Capture erlauben
+ elseif
+CRCL SFR 0cah ; andere Namen beim 80515 !!
+CRCH SFR 0cbh
+T2PS BIT T2CON.7
+I3FR BIT T2CON.6
+I2FR BIT T2CON.5
+T2R1 BIT T2CON.4
+T2R0 BIT T2CON.3
+T2CM BIT T2CON.2
+T2I1 BIT T2CON.1
+T2I0 BIT T2CON.0
+ endif
+ endif
+
+ if MOMCPU=80C320H ; Taktauswahl beim 80C320
+CKCON SFR 8eh ; Bit 3,4,5 <--> Timer 0,1,2
+ endif ; Bit 6,7 <--> Watchdog-Timeout
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; 80C320-Watchdog
+
+ if MOMCPU=80C320h
+WDCON SFRB 0d8h
+RWT BIT WDCON.0 ; Watchdog zurücksetzen
+EWT BIT WDCON.1 ; Watchdog freigeben
+WTRF BIT WDCON.2 ; Watchdog-Reset aufgetreten
+WDIF BIT WDCON.3 ; Interrupt 512 Takte bis Reset aufgetreten
+PFI BIT WDCON.4 ; Power-Fail-Interrupt aufgetreten ?
+EPFI BIT WDCON.5 ; Power-Fail-Interrupt freigeben
+POR BIT WDCON.6
+WD_SMOD BIT WDCON.7
+TA SFR 0c7h ; nacheinander AA 55 schreiben, um Zugriff auf
+ endif ; Spezialregister zu bekommen
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+;
+
+ if MOMCPU=80C320H
+SADDR0 SFR 0a9h ; Slave-Adresse für seriellen Port 0
+SADDR1 SFR 0aah ; Slave-Adresse für seriellen Port 1
+SADEN0 SFR 0b9h ; Bits in SADDR0 freigeben
+SADEN1 SFR 0bah ; Bits in SADDR1 freigeben
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; zusätzliche 80515/80517-Register
+
+ if (MOMCPU=80515h)||(MOMCPU=80517h)
+P4 SFRB 0e8h
+P5 SFRB 0f8h
+
+CCEN SFR 0c1h
+CCH3 SFR 0c7h
+CCL3 SFR 0c6h
+CCH2 SFR 0c5h
+CCL2 SFR 0c4h
+CCH1 SFR 0c3h
+CCL1 SFR 0c2h
+
+ADCON SFRB 0d8h ; andere Namen beim 80515/80517
+BD BIT ADCON.7
+CLK BIT ADCON.6
+BSY BIT ADCON.4
+ADM BIT ADCON.3
+MX2 BIT ADCON.2
+MX1 BIT ADCON.1
+MX0 BIT ADCON.0
+ADDAT SFR 0d9h
+DAPR SFR 0dah
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; zusätzliche 80517-Register
+
+ if MOMCPU=80517h
+
+DPSEL SFR 92h ;Datenpointer Select
+ADCON1 SFR 0dch ;Kontrolle 1 über A/D-Wandler
+CTCON SFR 0e1h ;Kontrolle über Compare-Timer
+IEN2 SFR 9ah
+ARCON SFR 0efh
+MD0 SFR 0e9h ;] Multiplikations-
+MD1 SFR 0eah ;] und
+MD2 SFR 0ebh ;] Divisionsregister
+MD3 SFR 0ech ;]
+MD4 SFR 0edh ;] 1 - 5
+MD5 SFR 0eeh ;]
+CC4EN SFR 0c9h
+CCH4 SFR 0cfh
+CCL4 SFR 0ceh
+CMEN SFR 0f6h
+CMH0 SFR 0d3h
+CMH1 SFR 0d5h
+CMH2 SFR 0d7h
+CMH3 SFR 0e3h
+CMH4 SFR 0e5h
+CMH5 SFR 0e7h
+CMH6 SFR 0f3h
+CMH7 SFR 0f5h
+CML0 SFR 0d2h
+CML1 SFR 0d4h
+CML2 SFR 0d6h
+CML3 SFR 0e2h
+CML4 SFR 0e4h
+CML5 SFR 0e6h
+CML6 SFR 0f8h
+CML7 SFR 0f4h
+CMSEL SFR 0f7h
+CTRELH SFR 0dfh
+CTRELL SFR 0deh
+P6 SFR 0fah ; ??? bitadressierbar
+P7 SFR 0dbh ; ??? bitadressierbar
+P8 SFR 0ddH ; ??? bitadressierbar
+ADCON0 SFR 0d8h ;Kontrolle 1 über A/D-Wandler
+S0BUF SFR 99h ;] Kontrolle
+S0CON SFR 98h ;] für
+S1BUF SFR 9ch ;] die
+S1CON SFR 9bh ;] serielle
+S1REL SFR 9dh ;] Schnittstelle
+WDTREL SFR 86h ;] 0 und 1
+
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+; Interruptsteuerregister: nicht kompatibel zwischen 8051/52 und 80515/80517 !!!
+
+ if (MOMCPU=80515h)||(MOMCPU=80517h)
+IEN0 SFRB 0a8h
+EAL BIT IEN0.7
+WDT BIT IEN0.6
+ET2 BIT IEN0.5
+ES BIT IEN0.4
+ET1 BIT IEN0.3
+EX1 BIT IEN0.2
+ET0 BIT IEN0.1
+EX0 BIT IEN0.0
+IEN1 SFRB 0b8h
+EXEN2 BIT IEN1.7
+SWDT BIT IEN1.6
+EX6 BIT IEN1.5
+EX5 BIT IEN1.4
+EX4 BIT IEN1.3
+EX3 BIT IEN1.2
+EX2 BIT IEN1.1
+EADC BIT IEN1.0
+IP0 SFR 0a9h
+IP1 SFR 0b9h
+IRCON SFRB 0c0h
+EXF2 BIT IRCON.7
+TF2 BIT IRCON.6
+IEX6 BIT IRCON.5
+IEX5 BIT IRCON.4
+IEX4 BIT IRCON.3
+IEX3 BIT IRCON.2
+IEX2 BIT IRCON.1
+IADC BIT IRCON.0
+ elseif
+IE SFRB 0a8h ; Interruptfreigaben
+IEC SFRB IE
+EA BIT IE.7 ; generelle Interruptsperre
+ES BIT IE.4 ; Interrupts ser. Schnittstelle freigeben
+ET1 BIT IE.3 ; Interrupt Timer 1 freigeben
+EX1 BIT IE.2 ; externen Interrupt 1 freigeben
+ET0 BIT IE.1 ; Interrupt Timer 0 freigeben
+EX0 BIT IE.0 ; externen Interrupt 0 freigeben
+IP SFRB 0b8h ; Interruptprioritäten
+IPC SFRB IP
+PS BIT IP.4 ; Priorität serieller Interrupt
+PT1 BIT IP.3 ; Priorität Interrupt Timer 1
+PX1 BIT IP.2 ; Priorität externer Interrupt 1
+PT0 BIT IP.1 ; Priorität Interrupt Timer 0
+PX0 BIT IP.0 ; Priorität externer Interrupt 0
+ if MOMCPU=8052h
+ET2 BIT IE.5 ; Interrupt Timer 2 freigeben
+PT2 BIT IP.5 ; Priorität Interrupt Timer 2
+ endif
+ endif
+
+ if MOMCPU=80C320H ; erweiterte Interrupts 80C320
+EIE SFRB 0e8h
+EWDI BIT EIE.4 ; Watchdog-Interrupt freigeben
+EX5 BIT EIE.3 ; externe Interrupts 2..5 freigeben
+EX4 BIT EIE.2
+EX3 BIT EIE.1
+EX2 BIT EIE.0
+EIP SFRB 0f8h
+PWDI BIT EIP.4 ; Priorität Watchdog-Interrupt
+PX5 BIT EIP.3 ; Priorität externer Interrupts 2..5
+PX4 BIT EIP.2
+PX3 BIT EIP.1
+PX2 BIT EIP.0
+EXIF SFR 91h ; erweitertes Interrupt-Flag-Register
+ endif
+
+
+;---------------------------------------------------------------------------
+; Da man die Register beim 8051 nicht direkt pushen und poppen kann, muß man
+; dies über direkte Adressen tun. Da dazu die Kenntnis der gewählten Regis-
+; terbank erforderlich ist, steht hier das Makro USING zur Verfügung, wel-
+; ches in den Symbolen AR0..AR7 die momentanen Registeradressen ablegt.
+; USING erwartet als Parameter die gewählte Banknummer.
+
+Bank0 equ 0 ; nur der Schönheit halber...
+Bank1 equ 1
+Bank2 equ 2
+Bank3 equ 3
+
+using macro bank
+ if (bank<0)||(bank>3) ; nur 0..3 erlaubt
+ error "Falsche Banknummer: \{BANK}"
+ endif
+
+ ifdef RegUsage ; Buchführung über benutzte Bänke
+RegUsage set RegUsage|(2^bank)
+ elseif
+RegUsage set 2^bank
+ endif
+
+ar0 set bank*8 ; Symbole besetzen
+ar1 set ar0+1
+ar2 set ar0+2
+ar3 set ar0+3
+ar4 set ar0+4
+ar5 set ar0+5
+ar6 set ar0+6
+ar7 set ar0+7
+ endm
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef56k.inc b/include/stddef56k.inc
new file mode 100644
index 0000000..d47fab7
--- /dev/null
+++ b/include/stddef56k.inc
@@ -0,0 +1,69 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF56.INC *
+;* *
+;* Sinn : enthält SFR-Definitionen für den DSP56000-Prozessor *
+;* *
+;* letzte Änderungen : 30.12.1993 *
+;* *
+;****************************************************************************
+
+ ifndef stddef56inc ; verhindert Mehrfacheinbindung
+
+stddef56inc equ 1
+
+ if (MOMCPU<>352256)
+ fatal "Falscher Prozessortyp eingestellt: nur 56000 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "DSP56000-SFR-Definitionen (C) 1993 Alfred Arnold"
+ endif
+
+;---------------------------------------------------------------------------
+
+pbc xsfr $ffe0 ; Port B Bussteuerregister
+pbddr xsfr $ffe2 ; Port B Datenrichtungsregister
+pbd xsfr $ffe4 ; Port B Datenregister
+
+pcc xsfr $ffe1 ; Port C Steuerregister
+pcddr xsfr $ffe3 ; Port C Datenrichtungsregister
+pcd xsfr $ffe5 ; Port C Datenregister
+
+hcr xsfr $ffe8 ; Host-Steuerregister
+hsr xsfr $ffe9 ; Host-Statusregister
+htx xsfr $ffeb ; Host-Senderegister
+hrx xsfr htx ; Host-Empfangsregister
+
+cra xsfr $ffec ; SSI Steuerregister A
+crb xsfr $ffed ; SSI Steuerregister B
+tsr xsfr $ffee ; SSI Status/Zeitschlitzregister
+
+tx xsfr $ffef ; SCI Senderegister
+rx xsfr tx ; SCI Empfangsregister
+scr xsfr $fff0 ; SCI Schnittstellensteuerregister
+ssr xsfr $fff1 ; SCI Schittstellenstatusregister
+sccr xsfr $fff2 ; SCI Steuerregister
+stxa xsfr $fff3 ; SCI Sendedatenadreßregister
+srx xsfr $fff4 ; SCI Empfangsregister Basisadresse
+stx xsfr srx ; SCI Senderegister Basisadresse
+srx_lo xsfr srx ; SCI Empfangsregister in Bit 0..7
+stx_lo xsfr stx ; SCI Senderegister in Bit 0..7
+srx_mid xsfr srx+1 ; SCI Empfangsregister in Bit 8..15
+stx_mid xsfr stx+1 ; SCI Senderegister in Bit 8..15
+srx_hi xsfr srx+2 ; SCI Empfangsregister in Bit 16..23
+stx_hi xsfr stx+2 ; SCI Senderegister in Bit 16..23
+
+bcr xsfr $fffe ; Bussteuerregister
+ipr xsfr $ffff ; Interrupt-Prioritätenregister
+
+;---------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
+
diff --git a/include/stddef5x.inc b/include/stddef5x.inc
new file mode 100644
index 0000000..5f4e227
--- /dev/null
+++ b/include/stddef5x.inc
@@ -0,0 +1,109 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF2X.INC *
+;* *
+;* Sinn : enthält die globalen Register-Definitionen für die *
+;* TMS320C5x Prozessoren *
+;* *
+;* letzte Änderungen : 03.11.1995 *
+;* *
+;****************************************************************************
+
+ ifndef stddef5xinc ; verhindert Mehrfacheinbindung
+
+stddef5xinc equ 1
+
+ if (MOMCPU<>3279952) && (MOMCPU<>3279953) && (MOMCPU<>3279955)
+ fatal "Falscher Prozessortyp eingestellt: nur 320C50, 320C51 und 320C53 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "TMS320C5x Register-Definitionen (C) 1995 Thomas Sailer"
+ endif
+
+;----------------------------------------------------------------------------
+ segment data
+
+ org 4
+ ;Core Processor Memory Mapped Registers
+IMR res 1
+GREG res 1
+IFR res 1
+PMST res 1
+RPTC res 1
+BRCR res 1
+PASR res 1
+PAER res 1
+TREG0 res 1
+TREG1 res 1
+TREG2 res 1
+DBMR res 1
+AR0 res 1
+AR1 res 1
+AR2 res 1
+AR3 res 1
+AR4 res 1
+AR5 res 1
+AR6 res 1
+AR7 res 1
+INDX res 1
+ARCR res 1
+CBSR1 res 1
+CBER1 res 1
+CBSR2 res 1
+CBER2 res 1
+CBCR res 1
+BMAR res 1
+
+ org 32
+ ;Peripherial memory mapped registers
+DRR res 1
+DXR res 1
+SPC res 1
+
+ org 36
+TIM res 1
+PRD res 1
+TCR res 1
+
+ org 40
+PDWSR res 1
+IOWSR res 1
+CWSR res 1
+
+ org 48
+TRCV res 1
+TDXR res 1
+TSPC res 1
+TCSR res 1
+TRTA res 1
+TRAD res 1
+
+ org 80
+PA0 res 1
+PA1 res 1
+PA2 res 1
+PA3 res 1
+PA4 res 1
+PA5 res 1
+PA6 res 1
+PA7 res 1
+PA8 res 1
+PA9 res 1
+PA10 res 1
+PA11 res 1
+PA12 res 1
+PA13 res 1
+PA14 res 1
+PA15 res 1
+
+
+;---------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef60.inc b/include/stddef60.inc
new file mode 100644
index 0000000..22d1613
--- /dev/null
+++ b/include/stddef60.inc
@@ -0,0 +1,674 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF60.INC *
+;* *
+;* Sinn : enthält Makrodefinitionen für den PowerPC *
+;* *
+;* letzte Änderungen : 29. 5.1994 *
+;* 26.12.1994 PPC403-Erweiterungen *
+;* 28.12.1994 MPC505-Erweiterungen *
+;* 10. 3.1999 PPC403G[BC]-Erweiterungen *
+;* 28. 3.1999 Korrektur: MMU erst ab PPC403GC *
+;* *
+;****************************************************************************
+
+ ifndef stddef60inc ; verhindert Mehrfacheinbindung
+
+stddef60inc equ 1
+
+ if (MOMCPU<>1537)&&(MOMCPU<>24576)&&(MOMCPU<>1027)&&(MOMCPU<>1285)&&(MOMCPU<>16443)&&(MOMCPU<>16444)
+ fatal "Falscher Prozessortyp eingestellt: nur MPC601, MPC505, PPC403 oder RS6000 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "PowerPC-Makro-Definitionen (C) 1994 Alfred Arnold"
+ switch MOMCPU
+ case 0x6000
+ message "Zielsystem RS6000"
+ case 0x601
+ message "Zielsystem MPC601"
+ case 0x505
+ message "Zielsystem MPC505"
+ case 0x403,0x403c
+ message "Zielsystem PPC403Gx"
+ endcase
+ endif
+
+
+;============================================================================
+; Device-Control-Register
+
+__defdcr macro NAME,val,{NoExpand}
+NAME equ val
+mt{"NAME"} macro reg
+ mtdcr NAME,reg
+ endm
+mf{"NAME"} macro reg
+ mfdcr reg,NAME
+ endm
+ endm
+
+ if (MOMCPU=0x403)||(MOMCPU=0x403c)
+ __defdcr BEAR,0x90 ; Adresse Busfehler
+ __defdcr BESR,0x91 ; Syndrom Busfehler
+ __defdcr BR0,0x80 ; Bank-Register 0..7
+ __defdcr BR1,0x81
+ __defdcr BR2,0x82
+ __defdcr BR3,0x83
+ __defdcr BR4,0x84
+ __defdcr BR5,0x85
+ __defdcr BR6,0x86
+ __defdcr BR7,0x87
+ __defdcr DMACC0,0xc4 ; DMA Kettenzähler (?)
+ __defdcr DMACR0,0xc0 ; DMA Steuerregister Kanal 0..3
+ __defdcr DMACR1,0xc8
+ __defdcr DMACR2,0xd0
+ __defdcr DMACR3,0xd8
+ __defdcr DMACT0,0xc1 ; DMA Zählregister Kanal 0..3
+ __defdcr DMACT1,0xc9
+ __defdcr DMACT2,0xd1
+ __defdcr DMACT3,0xd9
+ __defdcr DMADA0,0xc2 ; DMA Zieladresse Kanal 0..3
+ __defdcr DMADA1,0xca
+ __defdcr DMADA2,0xd2
+ __defdcr DMADA3,0xda
+ __defdcr DMASA0,0xc3 ; DMA Quelladresse Kanal 0..3
+ __defdcr DMASA1,0xcb
+ __defdcr DMASA2,0xd3
+ __defdcr DMASA3,0xdb
+ __defdcr DMASR,0xe0 ; DMA Statusregister
+ __defdcr EXISR,0x40 ; Anzeige externer Interrupts
+ __defdcr EXIER,0x42 ; Freigabe externer Interrupts
+ __defdcr IOCR,0xa0 ; I/O-Konfiguration
+ endif
+
+;============================================================================
+; Special-Purpose-Register
+
+__defspr macro NAME,val,{NoExpand}
+NAME equ val
+mt{"NAME"} macro reg
+ mtspr NAME,reg
+ endm
+mf{"NAME"} macro reg
+ mfspr reg,NAME
+ endm
+ endm
+
+ __defspr XER,0x001 ; Integer Exception Register
+ __defspr LR,0x008 ; Rücksprungadresse
+ __defspr CTR,0x009 ; Zählregister
+ __defspr SRR0,0x01a ; Save/Restore-Register
+ __defspr SRR1,0x01b
+ __defspr SPRG0,0x110 ; Special Purpose-Register
+ __defspr SPRG1,0x111
+ __defspr SPRG2,0x112
+ __defspr SPRG3,0x113
+ switch MOMCPU
+ case 0x403,0x403c
+ __defspr DAC1,0x3f6 ; Datenadresse Vergleichsregister
+ __defspr DAC2,0x3f7
+ __defspr DBCR,0x3f2 ; Debug-Steuerregister
+ __defspr DBSR,0x3f0 ; Debug-Statusregister
+ __defspr DCCR,0x3fa ; Steuerung Daten-Cache
+ __defspr DEAR,0x3d5 ; Exception-Adresse Datenzugriff
+ __defspr ESR,0x3d4 ; Exception-Syndrom Datenzugriff
+ __defspr EVPR,0x3d6 ; Exception-Vektor-Präfix
+ __defspr IAC1,0x3f4 ; Codeadresse Vergleichsregister
+ __defspr IAC2,0x3f5
+ __defspr ICCR,0x3fb ; Steuerung Code-Cache
+ __defspr PBL1,0x3fc ; Untergrenzen
+ __defspr PBL2,0x3fe
+ __defspr PBU1,0x3fd ; Obergrenzen
+ __defspr PBU2,0x3ff
+ __defspr PIT,0x3db ; Timer
+ __defspr PVR,0x11f ; Prozessorversion
+ __defspr SRR2,0x3de ; Save/Restore-Register
+ __defspr SRR3,0x3df
+ __defspr TBHI,0x3dc ; Zeitbasis
+ __defspr TBLO,0x3dd
+ __defspr TCR,0x3da ; Timer Steuerregister
+ __defspr TSR,0x3d8 ; Timer Statusregister
+ __defspr SGR,0x3b9 ; ????
+ case 0x505
+ __defspr TBL,268 ; Zeitbasis
+ __defspr TBU,269
+ __defspr DSISR,18 ; zeigt Grund von Alignment-Exceptions an
+ __defspr DAR,19 ; Fehlerhafte Datenadresse nach Exception
+ __defspr DEC,22 ; zählt mit 1 MHz
+ __defspr EIE,80 ; Freigabe externer Interrupts
+ __defspr EID,81 ; Sperre externer Interrupts
+ __defspr NRE,82 ; Non-recoverable Exception
+ __defspr TBL_S,284 ; nochmal Zeitbasis ?!
+ __defspr TBU_S,285
+ __defspr PVR,287 ; Prozessorversion
+ __defspr ICCST,560 ; Steuerung & Status Instruktionscache
+ __defspr ICADR,561 ; Instruktionscache Adreßregister
+ __defspr ICDAT,562 ; Instruktionscache Datenregister
+ __defspr FPECR,1022 ; Gleitkommaexception
+ __defspr CMPA,144 ; Vergleicherwert A..D
+ __defspr CMPB,145
+ __defspr CMPC,146
+ __defspr CMPD,147
+ __defspr ECR,148 ; Grund der Debug-Exception
+ __defspr DER,149 ; Freigabe Debug-Features
+ __defspr COUNTA,150 ; Breakpoint Zähler
+ __defspr COUNTB,151
+ __defspr CMPE,152 ; Vergleicherwert E..G
+ __defspr CMPF,153
+ __defspr CMPG,154
+ __defspr CMPH,155
+ __defspr LCTRL1,156 ; Debug-Steuerung Vergleicher L-Bus
+ __defspr LCTRL2,157
+ __defspr ICTRL,158 ; Debug-Steuerung I-Bus
+ __defspr BAR,159 ; Breakpoint-Adresse
+ __defspr DPDR,630 ; Development-Port Daten
+ __defspr DPIR,631 ; " " Instruktionen
+ case 0x601
+ __defspr RTCU,0x004 ; Zähler
+ __defspr RTCL,0x005
+ __defspr DEC,0x006
+ __defspr DSISR,0x012
+ __defspr DAR,0x013
+ __defspr DEC2,0x016
+ __defspr SDR1,0x019
+ __defspr EAR,0x11a
+ __defspr BAT0U,0x210
+ __defspr BAT0L,0x211
+ __defspr BAT1U,0x212
+ __defspr BAT1L,0x213
+ __defspr BAT2U,0x214
+ __defspr BAT2L,0x215
+ __defspr BAT3U,0x216
+ __defspr BAT3L,0x217
+ __defspr HID0,0x3f0
+ __defspr HID1,0x3f1
+ __defspr HID2,0x3f2
+ __defspr HID5,0x3f5
+ __defspr HID15,0x3ff
+ case 0x6000
+ __defspr MQ,0x000 ; obere Hälfte Divident/Produkt
+ endcase
+ if MOMCPU=0x403c
+ __defspr pid, 0x3b1
+ endif
+
+;============================================================================
+; serieller Port PPC403:
+
+ if (MOMCPU=0x403)||(MOMCPU=0x403c)
+spls equ 0x40000000 ; Leitungsstatus
+sphs equ 0x40000002 ; Status Handshake-Leitungen
+brdh equ 0x40000004 ; Baudratenteiler
+brdl equ 0x40000005
+spctl equ 0x40000006 ; Steuerregister
+sprc equ 0x40000007 ; Kommandoregister Empfänger
+sptc equ 0x40000008 ; Kommandoregister Sender
+sprb equ 0x40000009 ; Sende/Empfangspuffer
+sptb equ sprb
+ endif
+
+;============================================================================
+; SIU MPC505:
+; erinnert irgendwie an die vom 6833x...
+
+ if MOMCPU=0x505
+siumcr equ 0x8007fc00 ; Basissteuerregister
+siutest1 equ 0x8007fc04
+memmap equ 0x8007fc20 ; Speicherlayout
+specaddr equ 0x8007fc24 ; erlauben Sperren spekulativer
+specmask equ 0x8007fc28 ; Ladevorgänge
+termstat equ 0x8007fc2c
+picsr equ 0x8007fc40 ; Steuerung periodische Interrupts
+pit equ 0x8007fc44 ; Zählwert periodischer Interrupt-Timer
+bmcr equ 0x8007fc48 ; Steuerung Bus-Monitor
+rsr equ 0x8007fc4c ; Reset-Status
+sccr equ 0x8007fc50 ; Steuerung Systemtakt
+sccsr equ 0x8007fc54 ; Status Systemtakt
+portbase equ 0x8007fc60
+ddrm equ portbase+0x00 ; Datenrichtungsregister Port M
+pmpar equ portbase+0x04 ; Pinzuordnung Port M
+portm equ portbase+0x08 ; Datenregister Port M
+papar equ portbase+0x24 ; Pinzuordnung Port A+B
+pbpar equ papar
+porta equ portbase+0x28 ; Datenregister Port A+B
+portb equ porta
+ddri equ portbase+0x38 ; Datenrichtungsregister Port I..L
+ddrj equ ddri
+ddrk equ ddri
+ddrl equ ddri
+pipar equ portbase+0x38 ; Pinzuordnung Port I..L
+pjpar equ pipar
+pkpar equ pipar
+plpar equ pipar
+porti equ portbase+0x40 ; Datenregister Port I..L
+portj equ porti
+portk equ porti
+portl equ porti
+csbase equ 0x8007fd00
+csbtbar equ csbase+0xf8 ; Basisadresse Boot-EPROM
+csbtsbbar equ csbase+0xf0
+csbar1 equ csbase+0xe0 ; Basisadressen /CS1../CS5
+csbar2 equ csbase+0xd8
+csbar3 equ csbase+0xd0
+csbar4 equ csbase+0xc8
+csbar5 equ csbase+0xc0
+csbtor equ csbase+0xfc ; Optionen Boot-EPROM
+csbtsbor equ csbase+0xf4
+csor0 equ csbase+0xec ; Optionen /CS1../CS11
+csor1 equ csbase+0xe4
+csor2 equ csbase+0xdc
+csor3 equ csbase+0xd4
+csor4 equ csbase+0xcc
+csor5 equ csbase+0xc4
+csor6 equ csbase+0xbc
+csor7 equ csbase+0xb4
+csor8 equ csbase+0xac
+csor9 equ csbase+0xa4
+csor10 equ csbase+0x9c
+csor11 equ csbase+0x94
+ endif
+
+;----------------------------------------------------------------------------
+; Peripheral Control Unit MPC505:
+
+ if MOMCPU=0x505
+pcubase equ 0x8007ef80
+pcumcr equ pcubase+0x00 ; Basiskonfiguration
+tstmsra equ pcubase+0x10
+tstmsrb equ tstmsra
+tstcntrab equ pcubase+0x14
+tstreps equ tstcntrab
+tstcreg1 equ pcubase+0x18
+tstcreg2 equ tstcreg1
+tstdreg equ pcubase+0x1c
+irqpend equ pcubase+0x20 ; auszuführende Interrupts
+irqand equ pcubase+0x24 ; freigegebene&auszuführende Interrupts
+irqenable equ pcubase+0x28 ; freigegebene Interrupts
+pitqil equ pcubase+0x2c ; Interruptebene PortQ/PIT
+swsr equ pcubase+0x40 ; Reload Watchdog auslösen
+swcr equ pcubase+0x44 ; Steuerung Watchdog
+swtc equ swcr
+swr equ pcubase+0x48
+pqedgdat equ pcubase+0x50 ; Flankenauswahl PortQ
+pqpar equ pcubase+0x54 ; Pinzuordnung PortQ
+ endif
+
+;----------------------------------------------------------------------------
+; SRAM-Modul MPC505:
+
+ if MOMCPU=0x505
+srammcr equ 0x8007f00 ; Basiskonfiguration SRAM
+ endif
+
+;============================================================================
+; SUBI geht sowohl mit 2 als auch 3 Argumenten
+
+subi macro dest,src,VAL
+ if "VAL"=""
+ addi dest,dest,-src
+ elseif
+ addi dest,src,-VAL
+ endif
+ endm
+
+;----------------------------------------------------------------------------
+; Vergleiche
+
+cmpw macro cr,REG1,REG2
+ if "REG2"=""
+ cmp 0,0,cr,REG1
+ elseif
+ cmp cr,0,REG1,REG2
+ endif
+ endm
+
+cmpwi macro cr,REG1,IMM
+ if "IMM"=""
+ cmpi 0,0,cr,IMM
+ elseif
+ cmpi cr,0,REG1,imm
+ endif
+ endm
+
+cmplw macro cr,REG1,REG2
+ if "REG2"=""
+ cmpl 0,0,cr,REG1
+ elseif
+ cmpl cr,0,REG1,REG2
+ endif
+ endm
+
+cmplwi macro cr,REG1,IMM
+ if "IMM"=""
+ cmpli 0,0,cr,IMM
+ elseif
+ cmpli cr,0,REG1,IMM
+ endif
+ endm
+
+;----------------------------------------------------------------------------
+; erweiterte Befehle Bedingungsregister
+
+crset macro bx
+ creqv bx,bx,bx
+ endm
+
+crnot macro bx,by
+ crnor bx,by,by
+ endm
+
+crmove macro bx,by
+ cror bx,by,by
+ endm
+
+;----------------------------------------------------------------------------
+; erweiterte Befehle Logik
+
+not macro dest,SRC
+ if "SRC"=""
+ nor dest,dest
+ elseif
+ nor dest,SRC,SRC
+ endif
+ endm
+
+not. macro dest,SRC
+ if "SRC"=""
+ nor. dest,dest
+ elseif
+ nor. dest,SRC,SRC
+ endif
+ endm
+
+mr macro dest,src
+ or dest,src,src
+ endm
+
+mr. macro dest,src
+ or. dest,src,src
+ endm
+
+nop macro
+ ori 0,0,0
+ endm
+
+;----------------------------------------------------------------------------
+; vereinfachte Einschiebebefehle
+
+inslwi macro ra,rs,n,b
+ rlwimi ra,rs,32-b,b,b+n-1
+ endm
+inslwi. macro ra,rs,n,b
+ rlwimi. ra,rs,32-b,b,b+n-1
+ endm
+
+insrwi macro ra,rs,n,b
+ rlwimi ra,rs,32-b-n,b,b+n-1
+ endm
+insrwi. macro ra,rs,n,b
+ rlwimi. ra,rs,32-b-n,b,b+n-1
+ endm
+
+__defins1 macro NAME,par1,par2,par3,{NoExpand}
+{"NAME"} macro ra,rs,n
+ rlwinm ra,rs,par1,par2,par3
+ endm
+{"NAME"}. macro ra,rs,n
+ rlwinm. ra,rs,par1,par2,par3
+ endm
+ endm
+
+__defins2 macro NAME,par1,par2,par3,{NoExpand}
+{"NAME"} macro ra,rs,b,n
+ rlwinm ra,rs,par1,par2,par3
+ endm
+{"NAME"}. macro ra,rs,b,n
+ rlwinm. ra,rs,par1,par2,par3
+ endm
+ endm
+
+ __defins1 clrlwi,0,n,31
+ __defins2 clrlslwi,n,b-n,31-n
+ __defins1 clrrwi,0,0,31-n
+ __defins2 extlwi,b,0,n-1
+ __defins2 extrwi,b+n,32-n,31
+ __defins1 rotlwi,n,0,31
+ __defins1 rotrwi,32-n,0,31
+ __defins1 slwi,n,0,31-n
+ __defins1 srwi,32-n,n,31
+
+rotlw macro ra,rs,rb
+ rlwnm ra,rs,rb,0,31
+ endm
+rotlw. macro ra,rs,rb
+ rlwnm. ra,rs,rb,0,31
+ endm
+
+;----------------------------------------------------------------------------
+; vereinfachte Sprünge
+
+__defjmp1 macro NAME,m1,m2,{NoExpand}
+{"NAME"} macro adr
+ bc m1,m2,adr
+ endm
+{"NAME"}a macro adr
+ bca m1,m2,adr
+ endm
+{"NAME"}l macro adr
+ bcl m1,m2,adr
+ endm
+{"NAME"}la macro adr
+ bcla m1,m2,adr
+ endm
+ endm
+
+ __defjmp1 bdnz,16,0
+ __defjmp1 bdz,18,0
+
+__defjmp2 macro NAME,m1,{NoExpand}
+{"NAME"} macro cr,adr
+ bc m1,cr,adr
+ endm
+{"NAME"}a macro cr,adr
+ bca m1,cr,adr
+ endm
+{"NAME"}l macro cr,adr
+ bcl m1,cr,adr
+ endm
+{"NAME"}la macro cr,adr
+ bcla m1,cr,adr
+ endm
+ endm
+
+ __defjmp2 bdnzf,0
+ __defjmp2 bdnzt,8
+ __defjmp2 bdzf,2
+ __defjmp2 bdzt,10
+ __defjmp2 bf,4
+ __defjmp2 bt,12
+
+__defjmp3 macro NAME,mask,ofs,{NoExpand}
+{"NAME"} macro cr,ADR
+ if "ADR"=""
+ bc mask,ofs,cr
+ elseif
+ bc mask,cr*4+ofs,adr
+ endif
+ endm
+{"NAME"}a macro cr,ADR
+ if "ADR"=""
+ bca mask,ofs,cr
+ elseif
+ bca mask,cr*4+ofs,adr
+ endif
+ endm
+{"NAME"}l macro cr,ADR
+ if "ADR"=""
+ bcl mask,ofs,cr
+ elseif
+ bcl mask,cr*4+ofs,adr
+ endif
+ endm
+{"NAME"}la macro cr,ADR
+ if "ADR"=""
+ bcla mask,ofs,cr
+ elseif
+ bcla mask,cr*4+ofs,adr
+ endif
+ endm
+{"NAME"}ctr macro CR
+ if "CR"=""
+ bcctr mask,ofs
+ elseif
+ bc mask,CR*4+ofs
+ endif
+ endm
+{"NAME"}ctrl macro CR
+ if "CR"=""
+ bcl mask,ofs
+ elseif
+ bcl mask,CR*4+ofs
+ endif
+ endm
+{"NAME"}lr macro CR
+ if "CR"=""
+ bclr mask,ofs
+ elseif
+ bclr mask,4*CR+ofs
+ endif
+ endm
+{"NAME"}lrl macro CR
+ if "CR"=""
+ bclrl mask,ofs
+ elseif
+ bclrl mask,4*CR+ofs
+ endif
+ endm
+ endm
+
+ __defjmp3 beq,12,2
+ __defjmp3 bge,4,0
+ __defjmp3 bgt,12,1
+ __defjmp3 ble,4,1
+ __defjmp3 blt,12,0
+ __defjmp3 bne,4,2
+ __defjmp3 bng,4,1
+ __defjmp3 bnl,4,0
+ __defjmp3 bns,4,3
+ __defjmp3 bnu,4,3
+ __defjmp3 bso,12,3
+ __defjmp3 bun,12,3
+
+bctr macro
+ bcctr 20,0
+ endm
+bctrl macro
+ bcctrl 20,0
+ endm
+
+__defjmp4 macro NAME,mask,{NoExpand}
+{"NAME"} macro cr
+ bcctr mask,cr
+ endm
+{"NAME"}l macro cr
+ bcctrl mask,cr
+ endm
+ endm
+
+ __defjmp4 bfctr,4
+ __defjmp4 btctr,12
+
+__defjmp6 macro NAME,mask,bit,{NoExpand}
+{"NAME"} macro
+ bclr mask,bit
+ endm
+{"NAME"}l macro
+ bclrl mask,bit
+ endm
+ endm
+
+ __defjmp6 blr,20,0
+ __defjmp6 bdnzlr,16,0
+ __defjmp6 bdzlr,18,0
+
+__defjmp7 macro NAME,mask,{NoExpand}
+{"NAME"} macro cr
+ bclr mask,cr
+ endm
+{"NAME"}l macro cr
+ bclrl mask,cr
+ endm
+ endm
+
+ __defjmp7 bdnzflr,0
+ __defjmp7 bdnztlr,8
+ __defjmp7 bdzflr,2
+ __defjmp7 bdztlr,10
+ __defjmp7 bflr,4
+ __defjmp7 btlr,12
+
+;-------------------------------------------------------------------------
+; Traps
+
+trap macro ra,rb
+ tw 31,ra,rb
+ endm
+
+__deftrap macro NAME,mask,{NoExpand}
+{"NAME"} macro ra,rb
+ tw mask,ra,rb
+ endm
+{"NAME"}i macro ra,im
+ twi mask,ra,im
+ endm
+ endm
+
+ __deftrap tweq,4
+ __deftrap twge,12
+ __deftrap twgt,8
+ __deftrap twle,20
+ __deftrap twlge,5
+ __deftrap twlgt,1
+ __deftrap twlle,6
+ __deftrap twllt,2
+ __deftrap twlng,6
+ __deftrap twlnl,5
+ __deftrap twlt,16
+ __deftrap twne,24
+ __deftrap twng,20
+ __deftrap twnl,12
+
+;-------------------------------------------------------------------------
+; MMU-Makros PPC403G[BC]
+
+ if (MOMCPU=0x403c)||(MOMCPU=0x403c)
+
+tlbrehi macro rt,ra
+ tlbre rt,ra,0
+ endm
+
+tlbrelo macro rt,ra
+ tlbre rt,ra,1
+ endm
+
+tlbwehi macro rt,ra
+ tlbwe rt,ra,0
+ endm
+
+tlbwelo macro rt,ra
+ tlbwe rt,ra,1
+ endm
+
+ endif
+
+;=========================================================================
+
+ endif
+
+ restore ; Listing wieder erlauben
+
diff --git a/include/stddef62.inc b/include/stddef62.inc
new file mode 100644
index 0000000..1bac205
--- /dev/null
+++ b/include/stddef62.inc
@@ -0,0 +1,147 @@
+ 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
+
diff --git a/include/stddef75.inc b/include/stddef75.inc
new file mode 100644
index 0000000..85cb366
--- /dev/null
+++ b/include/stddef75.inc
@@ -0,0 +1,699 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF75.INC *
+;* *
+;* Sinn : enthält SFR-Definitionen für die µPD75K0-Familie *
+;* *
+;* letzte Änderungen : 2.12.1994 *
+;* *
+;****************************************************************************
+
+ ifndef stddef75inc ; verhindert Mehrfacheinbindung
+
+stddef75inc equ 1
+
+;----------------------------------------------------------------------------
+; Bequemlichkeit
+
+__message macro msg,{NoExpand}
+ if MOMPASS=1
+ message msg
+ endif
+ endm
+
+ __message "µPD75K0-Registerdefinitionen, (C) 1994 Alfred Arnold"
+
+;----------------------------------------------------------------------------
+; Die Prozessoren zu Gruppen zusammenfassen
+
+ switch MOMCPU
+ case 480258
+ __message "Binde µPD75402-Register ein"
+__family equ 400
+
+ case 479236,479238,479240
+ __message "Binde µPD750xx-Register ein"
+__family equ 000
+
+ case 479848
+ __message "Binde µPD75268-Register ein"
+__family equ 260
+
+ case 480004,480006,480008,480018,480022
+ __message "Binde µPD753xx-Register ein"
+__family equ 300
+
+ case 480040
+ __message "Binde µPD75328-Register ein"
+__family equ 320
+
+ case 479492,479494,479496,479506,479510
+ __message "Binde µPD751xx-Register ein"
+__family equ 100
+
+ case 479750,479752,479762,479766
+ __message "Binde µPD752xx-Register ein"
+__family equ 200
+
+ case 480530,480534
+ __message "Binde µPD755xx-Register ein"
+__family equ 500
+
+ elsecase
+ fatal "Fehler: Keine CPU aus der µPD75xxx-Familie definiert"
+ endcase
+
+;----------------------------------------------------------------------------
+; da alle Interrupt-Register gleich sind, dafür ein Makro bauen
+
+__defint macro NAME,base,{NoExpand}
+__tmpnam set "NAME"
+I{__tmpnam} sfr base
+IE{__tmpnam} bit base.1
+IRQ{__tmpnam} bit base.0
+ endm
+
+;----------------------------------------------------------------------------
+; gemeinsame Register:
+
+SP sfr 0f80h ; [8W] Stack-Pointer
+BTM sfr 0f85h ; [4W] Modus Basis-Timer
+BT sfr 0f86h ; [8R] Zählwert Basis-Timer
+IM0 sfr 0fb4h ; [4W] INT0 Modusregister
+ __defint BT,0fb8h ; [4] Freigabe/Anzeige Interrupt BT
+PORT0 sfr 0ff0h ; [4R] Datenregister Port 0
+PORT1 sfr 0ff1h ; [4R] Datenregister Port 1
+PORT2 sfr 0ff2h ; [4] Datenregister Port 2
+PORT3 sfr 0ff3h ; [4] Datenregister Port 3
+PORT5 sfr 0ff5h ; [4] Datenregister Port 5
+PORT6 sfr 0ff6h ; [4] Datenregister Port 6
+
+RESET label 0000h ; Resetvektor
+VIBT label 0002h ; Interruptvektoradresse INTBT
+ ; z.T. auch INT4
+VI0 label 0004h ; Interruptvektoradresse INT0
+ ; z.T. auch INT1
+
+;----------------------------------------------------------------------------
+
+ if __family=400
+IME bit 0fb2h.3 ; [8] Interruptsperre (mit EI/DI ansprechen)
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+ __defint CSI,0fbdh ; [4] Freigabe/Anzeige Interrupt CSI
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+ __defint 2,0fbeh ; [4] Freigabe/Anzeige Interrupt 2
+CLOM sfr 0fd0h ; [4W] Taktausgabe Modusregister
+POGA sfr 0fdch ; [8W] Steuerung Pull-Ups Port A
+CSIM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+CSIE bit CSIM+1.3
+COI bit CSIM+1.2
+WUP bit CSIM+1.1
+SBIC sfr 0fe2h ; [1] Steuerung SBI
+CMDD bit SBIC.3
+RELD bit SBIC.2
+CMDT bit SBIC.1
+RELT bit SBIC.0
+BSYE bit SBIC+1.3
+ACKD bit SBIC+1.2
+ACKE bit SBIC+1.1
+ACKT bit SBIC+1.0
+SIO sfr 0fe4h ; [8] Datenregister SIO
+SVA sfr 0fe6h ; [8W] Knotenadresse auf seriellem Bus
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PMGB sfr 0fech ; [8W] " "
+
+VICSI label 0008h ; Interruptvektoradresse INTCSI
+
+RAMEnd sfr 64 ; RAM-Größe
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=000
+WM sfr 0f98h ; [8] Modus Watchdog
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+TOE0 bit 0fa2h.3 ; [1W] Freigabe Ausgabe Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+PSW sfr 0fb0h ; [4] Programmstatus
+IST0 bit PSW.2
+MBE bit PSW.1
+IME bit 0fb2h.3 ; [8] Interruptsperre (mit EI/DI ansprechen)
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+IM2 sfr 0fb6h ; [4W] INT2 Modusregister
+SCC sfr 0fb7h ; [1W] Steuerung Systemtakt
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+ __defint W,0fbah ; [4] Freigabe/Anzeige Interrupt W
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+ __defint CSI,0fbdh ; [4] Freigabe/Anzeige Interrupt CSI
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+BSB0 sfr 0fc0h ; [4] bitsequentielle Puffer
+BSB1 sfr 0fc1h
+BSB2 sfr 0fc2h
+BSB3 sfr 0fc3h
+CLOM sfr 0fd0h ; [4W] Taktausgabe Modusregister
+POGA sfr 0fdch ; [8W] Steuerung Pull-Ups Port A
+POGB sfr 0fdeh ; [8W] Steuerung Pull-Ups Port B
+CSIM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+CSIE bit CSIM+1.3
+COI bit CSIM+1.2
+WUP bit CSIM+1.1
+SBIC sfr 0fe2h ; [1] Steuerung SBI
+CMDD bit SBIC.3
+RELD bit SBIC.2
+CMDT bit SBIC.1
+RELT bit SBIC.0
+BSYE bit SBIC+1.3
+ACKD bit SBIC+1.2
+ACKE bit SBIC+1.1
+ACKT bit SBIC+1.0
+SIO sfr 0fe4h ; [8] Datenregister SIO
+SVA sfr 0fe6h ; [8W] Knotenadresse auf seriellem Bus
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PM7 bit PMGB+1.3
+PMGC sfr 0feeh ; [8W] " "
+PM8 bit PMGC.0
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+KR0 sfr PORT6.0
+KR1 sfr PORT6.1
+KR2 sfr PORT6.2
+KR3 sfr PORT6.3
+PORT7 sfr 0ff7h ; [4] Datenregister Port 7
+KR4 sfr PORT7.0
+KR5 sfr PORT7.1
+KR6 sfr PORT7.2
+KR7 sfr PORT7.3
+PORT8 sfr 0ff8h ; [4] Datenregister Port 8
+
+VI1 label 0006h ; Interruptvektoradresse INT1
+VICSI label 0008h ; Interruptvektoradresse INTCSI
+VIT0 label 000ah ; Interruptvektoradresse INTT0
+
+RAMEnd sfr 512 ; RAM-Größe
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=260
+DSPM sfr 0f88h ; [4W] Modus Display
+DIMS sfr 0f89h ; [4W] Dimmereinstellung Display
+DIGS sfr 0f8ah ; [4] Stellenauswahl Display
+KSF bit DIGS.3
+WM sfr 0f98h ; [8] Modus Watchdog
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+PSW sfr 0fb0h ; [4] Programmstatus
+IST0 bit PSW.2
+MBE bit PSW.1
+IME bit 0fb2h.3 ; [8] Interruptsperre (mit EI/DI ansprechen)
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+SCC sfr 0fb7h ; [1W] Steuerung Systemtakt
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+ __defint W,0fbah ; [4] Freigabe/Anzeige Interrupt W
+IEKS bit 0fbbh.3 ; [1] Freigabe/Anzeige Tastatur
+IRQKS bit 0fbbh.2
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+ __defint SIO,0fbdh ; [4] Freigabe/Anzeige Interrupt SIO
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+SIOM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+SIO sfr 0fe4h ; [8] Datenregister SIO
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+SSTART sfr 01c0h ; Beginn Anzeigespeicher
+KS0 sfr 01fch ; [8] Tastaturregister
+KS1 sfr 01feh ; [4]
+PORTH sfr 01ffh ; [4] Datenregister Port H
+
+VI1 label 0006h ; Interruptvektoradresse INT1
+VISIO label 0008h ; Interruptvektoradresse INTSIO
+VIT0 label 000ah ; Interruptvektoradresse INTT0
+VIKS label 000eh ; Interruptvektoradresse INTKS
+
+RAMEnd sfr 512 ; RAM-Größe
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=300
+LCDM sfr 0f8ch ; [8W] Modus LC-Display
+LCDC sfr 0f8eh ; [4W] Steuerung LC-Display
+WM sfr 0f98h ; [8] Modus Watchdog
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+TOE0 bit 0fa2h.3 ; [1W] Freigabe Ausgabe Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+PSW sfr 0fb0h ; [4] Programmstatus
+IST0 bit PSW.2
+MBE bit PSW.1
+IME bit 0fb2h.3 ; [8] Interruptsperre (mit EI/DI ansprechen)
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+IM2 sfr 0fb6h ; [4W] INT2 Modusregister
+SCC sfr 0fb7h ; [1W] Steuerung Systemtakt
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+ __defint W,0fbah ; [4] Freigabe/Anzeige Interrupt W
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+ __defint CSI,0fbdh ; [4] Freigabe/Anzeige Interrupt CSI
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+BSB0 sfr 0fc0h ; [4] bitsequentielle Puffer
+BSB1 sfr 0fc1h
+BSB2 sfr 0fc2h
+BSB3 sfr 0fc3h
+CLOM sfr 0fd0h ; [4W] Taktausgabe Modusregister
+POGA sfr 0fdch ; [8W] Steuerung Pull-Ups Port A
+CSIM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+CSIE bit CSIM+1.3
+COI bit CSIM+1.2
+WUP bit CSIM+1.1
+SBIC sfr 0fe2h ; [1] Steuerung SBI
+CMDD bit SBIC.3
+RELD bit SBIC.2
+CMDT bit SBIC.1
+RELT bit SBIC.0
+BSYE bit SBIC+1.3
+ACKD bit SBIC+1.2
+ACKE bit SBIC+1.1
+ACKT bit SBIC+1.0
+SIO sfr 0fe4h ; [8] Datenregister SIO
+SVA sfr 0fe6h ; [8W] Knotenadresse auf seriellem Bus
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PM7 bit PMGB+1.3
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+KR0 sfr PORT6.0
+KR1 sfr PORT6.1
+KR2 sfr PORT6.2
+KR3 sfr PORT6.3
+PORT7 sfr 0ff7h ; [4] Datenregister Port 7
+KR4 sfr PORT7.0
+KR5 sfr PORT7.1
+KR6 sfr PORT7.2
+KR7 sfr PORT7.3
+
+VI1 label 0006h ; Interruptvektoradresse INT1
+VICSI label 0008h ; Interruptvektoradresse INTCSI
+VIT0 label 000ah ; Interruptvektoradresse INTT0
+
+RAMEnd sfr 512 ; RAM-Größe
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=320
+LCDM sfr 0f8ch ; [8W] Modus LC-Display
+LCDC sfr 0f8eh ; [4W] Steuerung LC-Display
+WM sfr 0f98h ; [8] Modus Watchdog
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+TOE0 bit 0fa2h.3 ; [1W] Freigabe Ausgabe Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+PSW sfr 0fb0h ; [4] Programmstatus
+IST0 bit PSW.2
+MBE bit PSW.1
+IME bit 0fb2h.3 ; [8] Interruptsperre (mit EI/DI ansprechen)
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+IM2 sfr 0fb6h ; [4W] INT2 Modusregister
+SCC sfr 0fb7h ; [1W] Steuerung Systemtakt
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+ __defint W,0fbah ; [4] Freigabe/Anzeige Interrupt W
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+ __defint CSI,0fbdh ; [4] Freigabe/Anzeige Interrupt CSI
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+BSB0 sfr 0fc0h ; [4] bitsequentielle Puffer
+BSB1 sfr 0fc1h
+BSB2 sfr 0fc2h
+BSB3 sfr 0fc3h
+CLOM sfr 0fd0h ; [4W] Taktausgabe Modusregister
+ADM sfr 0fd8h ; [1] Steuerung A/D-Wandler
+SOC sfr ADM.3
+EOC sfr ADM.2
+SA sfr 0fdah
+POGA sfr 0fdch ; [8W] Steuerung Pull-Ups Port A
+POBG sfr 0fdeh ; [8W] Steuerung Pull-Ups Port B
+CSIM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+CSIE bit CSIM+1.3
+COI bit CSIM+1.2
+WUP bit CSIM+1.1
+SBIC sfr 0fe2h ; [1] Steuerung SBI
+CMDD bit SBIC.3
+RELD bit SBIC.2
+CMDT bit SBIC.1
+RELT bit SBIC.0
+BSYE bit SBIC+1.3
+ACKD bit SBIC+1.2
+ACKE bit SBIC+1.1
+ACKT bit SBIC+1.0
+SIO sfr 0fe4h ; [8] Datenregister SIO
+SVA sfr 0fe6h ; [8W] Knotenadresse auf seriellem Bus
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PM7 bit PMGB+1.3
+PMGC sfr 0feeh ; [8W] " "
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+KR0 sfr PORT6.0
+KR1 sfr PORT6.1
+KR2 sfr PORT6.2
+KR3 sfr PORT6.3
+PORT7 sfr 0ff7h ; [4] Datenregister Port 7
+KR4 sfr PORT7.0
+KR5 sfr PORT7.1
+KR6 sfr PORT7.2
+KR7 sfr PORT7.3
+PORT8 sfr 0ff8h ; [4] Datenregister Port 8
+
+VI1 label 0006h ; Interruptvektoradresse INT1
+VICSI label 0008h ; Interruptvektoradresse INTCSI
+VIT0 label 000ah ; Interruptvektoradresse INTT0
+
+RAMEnd sfr 512 ; RAM-Größe
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=100
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+TOE0 bit 0fa2h.3 ; [1W] Freigabe Ausgabe Timer 0
+TO0 bit 0fa2h.2 ; [1W] Ausgabe Timer 0
+TOF0 bit 0fa2h.1 ; [1W] Ausgabeflipflop Timer 0
+TI0 bit 0fa2h.0 ; [1W] Eingabe Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+TM1 sfr 0fa8h ; [8] Modus Timer 1
+TOE1 bit 0faah.3 ; [1W] Freigabe Ausgabe Timer 1
+TO1 bit 0faah.2 ; [1W] Ausgabe Timer 1
+TOF1 bit 0faah.1 ; [1W] Ausgabeflipflop Timer 1
+TI1 bit 0faah.0 ; [1W] Eingabe Timer 1
+T1 sfr 0fach ; [8R] Zählwert Timer 1
+TMOD1 sfr 0faeh ; [8W] Moduloregister Timer 1
+PSW sfr 0fb0h ; [4] Programmstatus
+IST1 bit PSW.3
+IST0 bit PSW.2
+MBE bit PSW.1
+RBE bit PSW.0
+IPS sfr 0fb2h ; [4W] Interruptprioritäten
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+IET1 bit IT0.3
+IRQT1 bit IT0.2
+ __defint SIO,0fbdh ; [4] Freigabe/Anzeige Interrupt SIO
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+IE3 bit I2.3 ; Freigabe/Anzeige Interrupt 3
+IRQ3 bit I2.2
+BSB0 sfr 0fc0h ; [4] bitsequentielle Puffer
+BSB1 sfr 0fc1h
+BSB2 sfr 0fc2h
+BSB3 sfr 0fc3h
+CLOM sfr 0fd0h ; [4W] Taktausgabe Modusregister
+PONF bit 0fd1h.0 ; [1] Power-on-Flag
+PTHM sfr 0fd6h ; [8] Schwellwerteinstellung
+SIOM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+SIO sfr 0fe4h ; [8] Datenregister SIO
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PM7 bit PMGB+1.3
+PMGC sfr 0feeh ; [8W] " "
+PM8 bit PMGC.0
+PM9 bit PMGC.1
+PM12 bit PMGC+1.0
+PM13 bit PMGC+1.1
+PM14 bit PMGC+1.2
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+PORT7 sfr 0ff7h ; [4] Datenregister Port 7
+PORT8 sfr 0ff8h ; [4] Datenregister Port 8
+PORT9 sfr 0ff9h ; [4] Datenregister Port 9
+PORT12 sfr 0ffch ; [4] Datenregister Port 12
+PORT13 sfr 0ffdh ; [4] Datenregister Port 13
+PORT14 sfr 0ffeh ; [4] Datenregister Port 14
+
+VISIO label 0006h ; Interruptvektoradresse INTSIO
+VIT0 label 0008h ; Interruptvektoradresse INTT0
+VIT1 label 000ah ; Interruptvektoradresse INTT1
+
+ if MOMCPU<75108h ; RAM-Größe
+RAMEnd sfr 320
+ elseif
+RAMEnd sfr 512
+ endif
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=200
+DSPM sfr 0f88h ; [4W] Modus Display
+DIMS sfr 0f89h ; [4W] Dimmereinstellung Display
+DIGS sfr 0f8ah ; [4] Stellenauswahl Display
+KSF bit DIGS.3
+TPGM sfr 0f90h ; [8W] Modus Pulsgenerator
+MODL sfr 0f94h ; [8] Modulo-Wert Pulsgenerator
+MODH sfr 0f96h ; [8]
+WM sfr 0f98h ; [8] Modus Watchdog
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+PSW sfr 0fb0h ; [4] Programmstatus
+IST1 bit PSW.3
+IST0 bit PSW.2
+MBE bit PSW.1
+RBE bit PSW.0
+IPS sfr 0fb2h ; [4W] Interruptprioritäten
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+SCC sfr 0fb7h ; [1W] Steuerung Systemtakt
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+ __defint W,0fbah ; [4] Freigabe/Anzeige Interrupt W
+ __defint TPG,0fbbh ; [4] Freigabe/Anzeige Interrupt TPG
+IEKS bit ITPG.3 ; Freigabe/Anzeige Interrupt KS
+IRQKS bit ITPG.2
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+ __defint SIO,0fbdh ; [4] Freigabe/Anzeige Interrupt SIO
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+PONF bit 0fd1h.0 ; [1] Power-on-Flag
+SIOM sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+SIO sfr 0fe4h ; [8] Datenregister SIO
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+SSTART sfr 01c0h ; Beginn Anzeigespeicher
+KS0 sfr 01fch ; [8] Tastaturregister
+KS1 sfr 01feh ; [4]
+PORTH sfr 01ffh ; [4] Datenregister Port H
+
+VI1 label 0006h ; Interruptvektoradresse INT1
+VISIO label 0008h ; Interruptvektoradresse INTSIO
+VIT0 label 000ah ; Interruptvektoradresse INTT0
+VITPG label 000ch ; Interruptvektoradresse INTTPG
+VIKS label 000eh ; Interruptvektoradresse INTKS
+
+ if MOMCPU<75108h ; RAM-Größe
+RAMEnd sfr 396
+ elseif MOMCPU<75212h
+RAMEnd sfr 497
+ elseif
+RAMEnd sfr 512
+ endif
+ endif
+
+;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ if __family=500
+TPGM sfr 0f90h ; [8W] Modus Pulsgenerator
+MODL sfr 0f94h ; [8] Modulo-Wert Pulsgenerator
+MODH sfr 0f96h ; [8]
+WM sfr 0f98h ; [8] Modus Watchdog
+TM0 sfr 0fa0h ; [8] Modus Timer 0
+TOE0 bit 0fa2h.3 ; [1W] Freigabe Ausgabe Timer 0
+T0 sfr 0fa4h ; [8R] Zählwert Timer 0
+TMOD0 sfr 0fa6h ; [8W] Moduloregister Timer 0
+PSW sfr 0fb0h ; [4] Programmstatus
+IST1 bit PSW.3
+IST0 bit PSW.2
+MBE bit PSW.1
+RBE bit PSW.0
+IPS sfr 0fb2h ; [4W] Interruptprioritäten
+PCC sfr 0fb3h ; [4W] Steuerung Prozessortakt
+IM1 sfr 0fb5h ; [4W] INT1 Modusregister
+IM2 sfr 0fb6h ; [4W] INT2 Modusregister
+SCC sfr 0fb7h ; [1W] Steuerung Systemtakt
+IE4 bit IBT.3 ; Freigabe/Anzeige Interrupt 4
+IRQ4 bit IBT.2
+EOT bit 0fb9h.0
+ __defint W,0fbah ; [4] Freigabe/Anzeige Interrupt W
+ __defint TPG,0fbbh ; [4] Freigabe/Anzeige Interrupt TPG
+ __defint T0,0fbch ; [4] Freigabe/Anzeige Interrupt T0
+ __defint CSIO,0fbdh ; [4] Freigabe/Anzeige Interrupt CSIO
+ __defint 0,0fbeh ; [4] Freigabe/Anzeige Interrupt 0
+IE1 bit I0.3 ; Freigabe/Anzeige Interrupt 1
+IRQ1 bit I0.2
+ __defint 2,0fbfh ; [4] Freigabe/Anzeige Interrupt 2
+BSB0 sfr 0fc0h ; [4] bitsequentielle Puffer
+BSB1 sfr 0fc1h
+BSB2 sfr 0fc2h
+BSB3 sfr 0fc3h
+CSIM1 sfr 0fc8h ; [8W] Betriebsart serielle Schnittstelle
+CSIE1 bit CSIM1+1.3
+SIO1 sfr 0fcch ; [8] Datenregister SIO
+CLOM sfr 0fd0h ; [4W] Taktausgabe Modusregister
+ADM sfr 0fd8h ; [1] Steuerung A/D-Wandler
+SOC sfr ADM.3
+EOC sfr ADM.2
+SA sfr 0fdah
+POGA sfr 0fdch ; [8W] Steuerung Pull-Ups Port A
+CSIM0 sfr 0fe0h ; [8W] Betriebsart serielle Schnittstelle
+CSIE bit CSIM+1.3
+COI bit CSIM+1.2
+WUP bit CSIM+1.1
+SBIC sfr 0fe2h ; [1] Steuerung SBI
+CMDD bit SBIC.3
+RELD bit SBIC.2
+CMDT bit SBIC.1
+RELT bit SBIC.0
+BSYE bit SBIC+1.3
+ACKD bit SBIC+1.2
+ACKE bit SBIC+1.1
+ACKT bit SBIC+1.0
+SIO0 sfr 0fe4h ; [8] Datenregister SIO
+SVA sfr 0fe6h ; [8W] Knotenadresse auf seriellem Bus
+PMGA sfr 0fe8h ; [8W] Betriebsart Ports
+PM33 bit PMGA.3
+PM32 bit PMGA.2
+PM31 bit PMGA.1
+PM30 bit PMGA.0
+PM63 bit PMGA+1.3
+PM62 bit PMGA+1.2
+PM61 bit PMGA+1.1
+PM60 bit PMGA+1.0
+PMGB sfr 0fech ; [8W] " "
+PM2 bit PMGB.2
+PM4 bit PMGB+1.0
+PM5 bit PMGB+1.1
+PM7 bit PMGB+1.3
+PMGC sfr 0feeh ; [8W] " "
+PM8 bit PMGC.0
+PM9 bit PMGC.1
+PM12 bit PMGC+1.0
+PM13 bit PMGC+1.1
+PM14 bit PMGC+1.2
+PORT4 sfr 0ff4h ; [4] Datenregister Port 4
+PORT7 sfr 0ff7h ; [4] Datenregister Port 7
+PORT8 sfr 0ff8h ; [4R] Datenregister Port 8
+PORT9 sfr 0ff9h ; [4] Datenregister Port 9
+PORT10 sfr 0ffah ; [4] Datenregister Port 10
+PORT11 sfr 0ffbh ; [4] Datenregister Port 11
+PORT12 sfr 0ffch ; [4] Datenregister Port 12
+PORT13 sfr 0ffdh ; [4] Datenregister Port 13
+PORT14 sfr 0ffeh ; [4] Datenregister Port 14
+PORT15 sfr 0fffh ; [4R] Datenregister Port 15
+
+VI1 label 0006h ; Interruptvektoradresse INT1
+VICSIO label 0008h ; Interruptvektoradresse INTCSIO
+VIT0 label 000ah ; Interruptvektoradresse INTT0
+VITPG label 000ch ; Interruptvektoradresse INTTPG
+
+RAMEnd sfr 512 ; RAM-Größe
+ endif
+
+ endif
+
+ restore ; wieder erlauben
+
diff --git a/include/stddef87.inc b/include/stddef87.inc
new file mode 100644
index 0000000..4435c98
--- /dev/null
+++ b/include/stddef87.inc
@@ -0,0 +1,218 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.40 - Datei STDDEF87.INC *
+;* *
+;* Sinn : enthält Register- und Speicheradressen für TLCS-870-Prozessoren *
+;* Port- bzw. Registernamen nach Toshiba-Konvention *
+;* aus dem Handbuch zur Prozessorfamilie TLCS-870 *
+;* *
+;* Author Alfred Arnold *
+;* *
+;* letzte Änderungen : 9.1.1994 *
+;* *
+;****************************************************************************
+
+ ifndef stddef87inc ; verhindert Mehrfacheinbindung
+
+stddef87inc equ 1
+
+ if (MOMCPU<>556032)&&(MOMCPU<>556064)&&(MOMCPU<>556096)&&(MOMCPU<>556144)
+ fatal "Falscher Prozessortyp eingestellt: nur 87C00, 87C20, 87C40 oder 87C70 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "TLCS-870-Adreßdefinitionen"
+ message "(C) 1994 Alfred Arnold"
+ message "Zielprozessor: \{MOMCPU}"
+ endif
+
+;----------------------------------------------------------------------------
+; hier geht's los...
+
+; Ports
+
+P0 equ 00h
+P1 equ 01h
+P2 equ 02h
+P3 equ 03h
+P4 equ 04h
+P5 equ 05h
+P6 equ 06h
+ if MOMCPU<>87C20h
+P7 equ 07h
+ endif
+ if MOMCPU=87C70h
+P8 equ 08h
+P9 equ 09h
+ endif
+P0CR equ 0Ah
+P1CR equ 0BH
+ if MOMCPU=87C70h
+P4CR equ 0Ch
+ endif
+ if (MOMCPU=87C00h)||(MOMCPU=87C40h)
+P6CR equ 0Ch
+P7CR equ 0Dh
+ endif
+ if MOMCPU=87C20h
+P6CR equ 29h
+ endif
+
+; Tastaturinterface
+
+ if MOMCPU=87C70h
+KEYDR equ P4
+KEYSR equ 2Ah
+ endif
+
+; Vergleicher
+
+ if MOMCPU=87C70h
+CMPCR equ 0Eh
+CMPDR equ 0Fh
+ endif
+
+; Timer: hier geht es ziemlich durcheinander
+
+ if MOMCPU=87C70h
+TREG1 equ 10h
+TREG1L equ TREG1
+TREG1H equ TREG1+1
+ elseif
+TREG1A equ 10h
+TREG1AL equ TREG1A
+TREG1AH equ TREG1A+1
+TREG1B equ 12h
+ if MOMCPU<>87C20h
+TREG1BL equ TREG1B
+TREG1BH equ TREG1B+1
+ elseif
+TC1CR equ 13h
+ endif
+ endif
+ if MOMCPU=87C20h
+TREG5 equ 1Dh
+TC5CR equ 1Eh
+TREG6 equ 16h
+TC6CR equ 17h
+ elseif
+TC1CR equ 14h
+TC2CR equ 15h
+ if MOMCPU<>87C70h
+TREG2 equ 16h
+TREG2L equ TREG2
+TREG2H equ TREG2+1
+ endif
+ endif
+TREG3A equ 18h
+TREG3B equ 19h
+TC3CR equ 1Ah
+TREG4 equ 1Bh
+TC4CR equ 1Ch
+
+; Seriell: auch nicht viel übersichtlicher
+
+ if (MOMCPU=87C00h)||(MOMCPU=87C40h)
+SIO1SR equ 20h
+ if MOMCPU=87C40h
+SIO1CR1 equ 20h
+SIO1CR2 equ 21h
+SIO2CR1 equ 22h
+SIO2CR2 equ 23h
+SIO2SR equ 22h
+ elseif
+SIO2SR equ 21h
+SIO1CR equ 20h
+SIO2CR equ 21h
+SIOBCR equ 22h
+SIOWCR equ 23h
+ endif
+SIO1_BUFFER equ 0FF0h
+SIO2_BUFFER equ 0FF8h
+ elseif
+SIOSR equ 20h
+SIOCR1 equ 20h
+SIOCR2 equ 21h
+SIO_BUFFER equ 0FF0h
+ endif
+
+
+; High-Speed-seriell
+
+ if MOMCPU=87C70h
+HSOSR equ 24h
+HSOCR equ 24h
+HSO_BUFFER equ 0FF8H
+ endif
+
+; AD-Wandler
+
+ if MOMCPU=87C40h
+ADCCR equ 0Eh
+ADCDR equ 0Fh
+ endif
+
+; LCD
+
+ if MOMCPU=87C20h
+LCDCR equ 28h
+LCD_BUFFER equ 0F80h
+ endif
+
+; Fluoreszenz-Display
+
+ if MOMCPU=87C70h
+VFTCR1 equ 28h
+VFTSR equ 29h
+VFTCR2 equ 29h
+ endif
+
+; Watchdog
+
+WDTCR1 equ 34h
+WDTCR2 equ 35h
+
+; Systemsteuerung
+
+TBTCR equ 36h
+SYSCR1 equ 38h
+SYSCR2 equ 39h
+GPSW equ 3Fh
+GRBS equ 3Fh
+
+; Interrupt
+
+EINTCR equ 37h
+EIR equ 3Ah
+EIRL equ EIR
+EIRH equ EIR+1
+IL equ 3ch
+ILL equ EIR
+ILH equ EIR+1
+
+; feste Speicherbereiche
+
+IRAM equ 000C0H ; Internal RAM 256/512/512/512 Byte...
+ if MOMCPU=87C00h
+IRAMEND equ 0013FH
+ elseif
+IRAMEND equ 0023FH
+ endif
+IEAREA equ 0FFC0H ; Interrupt Entry Area...
+IEAREAEND equ 0FFFFH ; ...up to 007FH
+IROM equ 0E000H ; Internal (P)ROM 8K...
+IROMEND equ 0FFFFH ;
+EXTMEM equ IRAMEND+1 ; External Memory
+MEMEND equ IROM-1 ; ...up to ROM-Start
+
+;---------------------------------------------------------------------------
+; das war's...
+
+ endif
+
+ restore
+
+
diff --git a/include/stddef90.inc b/include/stddef90.inc
new file mode 100644
index 0000000..89eb17b
--- /dev/null
+++ b/include/stddef90.inc
@@ -0,0 +1,129 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.39 - Datei STDDEF90.INC *
+;* *
+;* Sinn : enthält Register- und Speicheradressen für TLCS-90-Prozessoren *
+;* Port- bzw. Registernamen nach Toshiba-Konvention *
+;* aus dem Handbuch zur Prozessorfamilie TLCS-90 *
+;* *
+;* Author Alfred Arnold *
+;* *
+;* letzte Änderungen : 1.11.1993 *
+;* *
+;****************************************************************************
+
+ ifndef stddef90inc ; verhindert Mehrfacheinbindung
+
+stddef90inc equ 1
+
+ if (MOMCPU<>9486657)
+ fatal "Falscher Prozessortyp eingestellt: nur 90C141 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "TLCS-90-Adreßdefinitionen"
+ message "(C) 1993 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; hier geht's los...
+
+;Ports
+
+P0 equ 0ffc0h
+P1 equ 0ffc1h
+P01CR equ 0ffc2h ; ==IRFL !!
+
+P2 equ 0ffc4h
+P2CR equ 0ffc5h
+
+P3 equ 0ffc6h
+P3CR equ 0ffc7h
+
+P4 equ 0ffc8h
+P4CR equ 0ffc9h
+
+P5 equ 0ffcah
+
+P6 equ 0ffcch
+P7 equ 0ffcdh
+P67CR equ 0ffceh
+
+P8 equ 0ffd0h
+P8CR equ 0ffd1h
+
+; Timer
+
+TMOD equ 0ffdah
+TCLK equ 0ffd8h
+TRUN equ 0ffdbh
+TFFCR equ 0ffd9h
+T4MOD equ 0ffe4h
+T4FFCR equ 0ffe5h
+TREG0 equ 0ffd4h
+TREG1 equ 0ffd5h
+TREG2 equ 0ffd6h
+TREG3 equ 0ffd7h
+TREG4L equ 0ffe0h
+TREG4H equ 0ffe1h
+TREG5L equ 0ffe2h
+TREG5H equ 0ffe3h
+CAP1L equ 0ffdch
+CAP1H equ 0ffddh
+CAP2L equ 0ffdeh
+CAL2H equ 0ffdfh
+
+; Pattern
+
+SMMOD equ 0ffcbh
+SMCR equ 0ffcfh
+
+; Seriell
+
+SCMOD equ 0ffe9h ; Betriebsart
+SCCR equ 0ffeah ; Steuerregister
+SCBUF equ 0ffebh ; Datenregister
+
+; Watchdog, Misc
+
+BX equ 0ffech ; Bank-Register IX
+BY equ 0ffedh ; IY
+
+WDMOD equ 0ffd2h ; Watchdog, Halt-Modus
+WDCR equ 0ffd3h ; Steuerregister
+
+; AD-Wandler
+
+ADMOD equ 0ffefh ; Betriebsart
+ADREG equ 0ffeeh ; Datenregister
+
+; Interrupt
+
+IRFL equ 0ffc2h ; Request Flip-Flops
+IRFH equ 0ffc3h
+INTEL equ 0ffe6h ; Freigabe Interrupts
+INTEH equ 0ffe7h
+DMAEH equ 0ffe8h ; Freigabe Micro-DMA
+
+; feste Speicherbereiche
+
+IRAM equ 0fec0H ; Internal RAM 256 Byte...
+IRAMEND equ 0ffbfH
+IEAREA equ 00000H ; Interrupt Entry Area...
+IEAREAEND equ 0007FH ; ...up to 007FH
+IROM equ 00000H ; Internal (P)ROM 8K...
+IROMEND equ 01FFFH ;
+EXTMEM equ IROMEND+1 ; External Memory
+MEMEND equ IRAM-1 ; ...up to FFFFH
+
+;---------------------------------------------------------------------------
+; das war's...
+
+ endif
+
+ restore
+
+
diff --git a/include/stddef96.inc b/include/stddef96.inc
new file mode 100644
index 0000000..e6330e0
--- /dev/null
+++ b/include/stddef96.inc
@@ -0,0 +1,170 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.39 - Datei STDDEF96.INC *
+;* *
+;* Sinn : enthält Register- und Speicheradressen für TLCS-900-Prozessoren *
+;* Port- bzw. Registernamen nach Toshiba-Konvention *
+;* aus dem Handbuch zur Prozessorfamilie TLCS-900 *
+;* *
+;* Original von Ernst Ahlers, Oktober 1993 *
+;* für AS angepaßt von Alfred Arnold *
+;* *
+;* letzte Änderungen : 30.10.1993 *
+;* *
+;****************************************************************************
+
+ ifndef stddef96inc ; verhindert Mehrfacheinbindung
+
+stddef96inc equ 1
+
+ if (MOMCPU<>9879873)&&(MOMCPU<>9683265)
+ fatal "Falscher Prozessortyp eingestellt: nur 96C141 oder 93C141 erlaubt"
+ endif
+
+ if MOMPASS=1
+ message "TLCS-900(L)-Adreßdefinitionen"
+ message "(C) 1993 Ernst Ahlers, Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; hier geht's los...
+
+P0 equ 0000H ; Port 0 Register
+P0CR equ 0002H ; Port 0 Control
+
+P1 equ 0001H ; Port 1 Register
+P1CR equ 0004H ; Port 1 Control
+P1FC equ 0005H ; Port 1 Function
+
+P2 equ 0006H ; Port 2 Register
+P2CR equ 0008H ; Port 2 Control
+P2FC equ 0009H ; Port 2 Function
+
+P3 equ 0007H ; Port 3 Register
+P3CR equ 000AH ; Port 3 Control
+P3FC equ 000BH ; Port 3 Function
+
+P4 equ 000CH ; Port 4 Register
+P4CR equ 000EH ; Port 4 Control
+P4FC equ 0010H ; Port 4 Function
+
+P5 equ 000DH ; Port 5 Register
+
+P6 equ 0012H ; Port 6 Register
+P6CR equ 0014H ; Port 6 Control
+P6FC equ 0016H ; Port 6 Function
+
+P7 equ 0013H ; Port 7 Register
+P7CR equ 0015H ; Port 7 Control
+P7FC equ 0017H ; Port 7 Function
+
+P8 equ 0018H ; Port 8 Register
+P8CR equ 001AH ; Port 8 Control
+P8FC equ 001CH ; Port 8 Function
+
+P9 equ 0019H ; Port 9 Register
+P9CR equ 001BH ; Port 9 Control
+P9FC equ 001DH ; Port 9 Function
+
+TRUN equ 0020H ; Timer Operation Control
+TREG0 equ 0022H ; Timer Register 0
+TREG1 equ 0023H ; Timer Register 1
+TMOD equ 0024H ; Timer Mode Control
+TFFCF equ 0025H ; Timer Flip-Flop Control
+TREG2 equ 0026H ; Timer Register 2
+TREG3 equ 0027H ; Timer Register 3
+P0MOD equ 0028H ; 8-Bit PWM 0 Mode Control
+P1MOD equ 0029H ; 8-Bit PWM 1 Mode Control
+PFFCR equ 002AH ; 8-Bit PWM Flip-Flop Control
+
+TREG4L equ 0030H ; Timer 4 Low Byte
+TREG4H equ 0031H ; Timer 4 High Byte
+TREG5L equ 0032H ; Timer 5 Low Byte
+TREG5H equ 0033H ; Timer 5 High Byte
+CAP1L equ 0034H ; Capture 1 Low Byte
+CAP1H equ 0035H ; Capture 1 High Byte
+CAP2L equ 0036H ; Capture 2 Low Byte
+CAP2H equ 0037H ; Capture 2 High Byte
+T4MOD equ 0038H ; 16-Bit Timer 4 Mode Control
+T4FFCR equ 0039H ; 16-Bit Timer 4 Flip-Flop Control
+T45CR equ 003AH ; 16-Bit Timer 4/5 Control
+
+TREG6L equ 0040H ; Timer 6 Low Byte
+TREG6H equ 0041H ; Timer 6 High Byte
+TREG7L equ 0042H ; Timer 7 Low Byte
+TREG7H equ 0043H ; Timer 7 High Byte
+CAP3L equ 0044H ; Capture 3 Low Byte
+CAP3H equ 0045H ; Capture 3 High Byte
+CAP4L equ 0046H ; Capture 4 Low Byte
+CAP4H equ 0047H ; Capture 4 High Byte
+T5MOD equ 0048H ; 16-Bit Timer 4 Mode Control
+T5FFCR equ 0049H ; 16-Bit Timer 4 Flip-Flop Control
+
+PG0REG equ 004CH ; Pattern Generator 0
+PG1REG equ 004DH ; Pattern Generator 1
+PG01CR equ 004EH ; Pattern Generator 0/1 Control
+
+SC0BUF equ 0050H ; Serial Channel 0 Buffer Data
+SC0CR equ 0051H ; Serial Channel 0 Control
+SC0MOD equ 0052H ; Serial Channel 0 Mode Control
+BR0CR equ 0053H ; Bit Rate Ser. Channel 0 Control
+SC1BUF equ 0054H ; Serial Channel 1 Buffer Data
+SC1CR equ 0055H ; Serial Channel 1 Control
+SC1MOD equ 0056H ; Serial Channel 1 Mode Control
+BR1CR equ 0057H ; Bit Rate Ser. Channel 1 Control
+
+ODE equ 0058H ; Port 9 Open Drain Enable
+WDMOD equ 005CH ; Watchdog Timer Mode
+WDCR equ 005DH ; Watchdog Timer Control
+
+ADMOD equ 005EH ; A/D Control
+ADREG0L equ 0060H ; A/D Result Channel 0 Bit 7..6 = AD1..0
+ADREG0H equ 0061H ; A/D Result Channel 0 Bit 7..0 = AD9..2
+ADREG1L equ 0062H ; A/D Result Channel 1 Bit 7..6 = AD1..0
+ADREG1H equ 0063H ; A/D Result Channel 1 Bit 7..0 = AD9..2
+ADREG2L equ 0064H ; A/D Result Channel 2 Bit 7..6 = AD1..0
+ADREG2H equ 0065H ; A/D Result Channel 2 Bit 7..0 = AD9..2
+ADREG3L equ 0066H ; A/D Result Channel 3 Bit 7..6 = AD1..0
+ADREG3H equ 0067H ; A/D Result Channel 3 Bit 7..0 = AD9..2
+
+B0CS equ 0068H ; Block 0 CS/WAIT Control
+B1CS equ 0069H ; Block 1 CS/WAIT Control
+B2CS equ 006AH ; Block 2 CS/WAIT Control
+
+INTE0AD equ 0070H ; Interrupt Enable/Level AD/Timer 0
+INTE45 equ 0071H ; Interrupt Enable/Level IRQ 5/4
+INTE67 equ 0072H ; Interrupt Enable/Level IRQ 7/6
+INTET10 equ 0073H ; Interrupt Enable/Level Timer 1/0
+INTEPW10 equ 0074H ; Interrupt Enable/Level Timer 3/2 (PWM 1/0)
+INTET54 equ 0075H ; Interrupt Enable/Level TREG 5/4
+INTET76 equ 0076H ; Interrupt Enable/Level TREG 7/6
+INTES0 equ 0077H ; Interrupt Enable/Level Serial Channel 0
+INTES1 equ 0078H ; Interrupt Enable/Level Serial Channel 1
+IIMC equ 007BH ; Interrupt Input Mode Control
+
+DMA0V equ 007CH ; fDMA 0 Start Vector
+DMA1V equ 007DH ; fDMA 1 Start Vector
+DMA2V equ 007EH ; fDMA 2 Start Vector
+DMA3V equ 007FH ; fDMA 3 Start Vector
+
+; feste Speicherbereiche
+
+IRAM equ 000080H ; Internal RAM 1K...
+IRAMEND equ 00047FH ; ...up to 00047FH
+IEAREA equ 008000H ; Interrupt Entry Area...
+IEAREAEND equ 0081FFH ; ...up to 0081FFH
+IROM equ 008200H ; Internal (P)ROM 31.5K...
+IROMEND equ 00FFFFH ; ...up to 00FFFFH
+EXTMEM equ 010000H ; External Memory
+MEMEND equ 0FFFFFFH ; ...up to FFFFFFH
+
+;---------------------------------------------------------------------------
+; das war's...
+
+ endif
+
+ restore
+
diff --git a/include/stddefxa.inc b/include/stddefxa.inc
new file mode 100644
index 0000000..e13dd10
--- /dev/null
+++ b/include/stddefxa.inc
@@ -0,0 +1,405 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.41 - Datei STDDEFXA.INC *
+;* *
+;* Sinn : enthält SFR- und Bitdefinitionen für die XA-Prozessoren *
+;* *
+;* letzte Änderungen : 29. 6.1996 *
+;* 18. 8.1998 bei P_51, F0_51 und F1_51 den Postfix *
+;* wieder entfernt, da diese sich mit kei- *
+;* nen XA-Bits namensmaessig "beissen" *
+;* *
+;****************************************************************************
+
+ ifndef stddefxainc ; verhindert Mehrfacheinbindung
+
+stddefxainc equ 1
+
+ if (MOMCPUNAME<>"XAG3")&&(MOMCPUNAME<>"XAG1")&&(MOMCPUNAME<>"XAG1")
+ fatal "Falscher Prozessortyp eingestellt: nur XAG1, XAG2 oder XAG3 erlaubt!"
+ endif
+
+
+ if MOMPASS=1
+ message "Philips-XA-SFR-Definitionen (C) 1996 Alfred Arnold"
+ endif
+
+;----------------------------------------------------------------------------
+; Prozessorkern
+
+cs port 443h ; Code-Segment
+ds port 441h ; Daten-Segment
+es port 442h ; Extra-Segment
+
+ssel port 403h ; Auswahl-Bits, ob [R0..R6] mit ES/DS arbeiten
+r0seg bit ssel.0
+r1seg bit ssel.1
+r2seg bit ssel.2
+r3seg bit ssel.3
+r4seg bit ssel.4
+r5seg bit ssel.5
+r6seg bit ssel.6
+eswen bit ssel.7 ; Schreibzugriffe über ES erlauben/sperren (Usermode)
+
+pswl port 400h ; Prozessorstatus(L):
+z bit pswl.0 ; Zero-Flag
+n bit pswl.1 ; Negativ-Flag
+v bit pswl.2 ; Overflow-Flag
+ac bit pswl.6 ; Hilfs-Carry (für DAA)
+c bit pswl.7 ; Carry
+
+pswh port 401h ; Prozessorstatus(H):
+im0 bit pswh.0 ; Interrupt-Maske Bit 0
+im1 bit pswh.1 ; Interrupt-Maske Bit 1
+im2 bit pswh.2 ; Interrupt-Maske Bit 2
+im3 bit pswh.3 ; Interrupt-Maske Bit 3
+rs0 bit pswh.4 ; Register-Bank-Auswahl Bit 0
+rs1 bit pswh.5 ; Register-Bank-Auswahl Bit 1
+tm bit pswh.6 ; CPU im Einzelschritt-Modus
+sm bit pswh.7 ; CPU im Supervisor-Mode
+
+psw51 port 402h ; emuliertes 8051-PSW:
+p bit psw51.0 ; Paritätsbit
+f1 bit psw51.1 ; User-Flag 1
+v_51 bit psw51.2 ; Overflow-Flag
+rs0_51 bit psw51.3 ; Register-Bank-Auswahl Bit 0
+rs1_51 bit psw51.4 ; Register-Bank-Auswahl Bit 1
+f0 bit psw51.5 ; User-Flag 0
+ac_51 bit psw51.6 ; Hilfs-Carry (für DAA)
+c_51 bit psw51.7 ; Carry
+
+pcon port 404h ; Steuerung Power-Modi
+idl bit pcon.0 ; Idle-Modus aktivieren
+pd bit pcon.1 ; Powerdown-Modus aktivieren
+
+;----------------------------------------------------------------------------
+; Chip-Konfiguration
+
+scr port 440h ; Systemkonfiguration
+;pz bit scr.0 ; Adreßräume auf 64K begrenzen
+;cm bit scr.1 ; 8051-kompatibles Registermapping
+;pt0 bit scr.2 ; Vorteiler-Einstellung
+;pt1 bit scr.3
+
+bcr port 46ah ; Bus-Konfiguration
+;bc0 bit bcr.0 ; Einstellung 12/16/20/24 Adreßleitungen
+;bc1 bit bcr.1
+;bc2 bit bcr.2 ; Einstellung 8/16 Datenleitungen
+;busd bit bcr.3 ; Bus komplett abschalten
+;waitd bit bcr.4 ; WAIT-Pin ignorieren
+
+btrl port 468h ; Einstellung Bus-Timing(L)
+;dra0 bit btrl.0 ; Gesamtlänge Lesezyklus
+;dra1 bit btrl.1
+;dr0 bit btrl.2 ; Länge Lesezyklus ohne ALE
+;dr1 bit btrl.3
+;dwa0 bit btrl.4 ; Gesamtlänge Schreibzyklus
+;dwa1 bit btrl.5
+;dw0 bit btrl.6 ; Länge Schreibzyklus ohne ALE
+;dw1 bit btrl.7
+
+btrh port 469h ; Einstellung Bus-Timing(L)
+;cra0 bit btrl.0 ; Gesamtlänge Codelesezyklus
+;cra1 bit btrl.1
+;cr0 bit btrl.2 ; Länge Codelesezyklus ohne ALE
+;cr1 bit btrl.3
+;alew bit btrl.5 ; Länge ALE-Puls
+;wm0 bit btrl.6 ; Länge WR-Puls
+;wm1 bit btrl.7
+
+;----------------------------------------------------------------------------
+; Interrupt-Steuerung
+
+iel port 426h ; Interruptfreigabe(L):
+ex0 bit iel.0 ; externer Interrupt 0
+et0 bit iel.1 ; Timer 0
+ex1 bit iel.2 ; externer Interrupt 1
+et1 bit iel.3 ; Timer 1
+et2 bit iel.4 ; Timer 2
+ea bit iel.7 ; global
+
+ieh port 427h ; Interruptfreigabe(H):
+eri0 bit ieh.0 ; Empfang UART0
+eti0 bit ieh.1 ; Versand UART0
+eri1 bit ieh.2 ; Empfang UART1
+eti1 bit ieh.3 ; Versand UART1
+
+ipa0 port 4a0h ; Interruptprioritäten(0):
+;px0 bit ipa0.0 ; externer Interrupt 0 (4 Bits)
+;pt0 bit ipa0.4 ; Timer 0 (4 Bits)
+
+ipa1 port 4a1h ; Interruptprioritäten(1):
+;px1 bit ipa1.0 ; externer Interrupt 1 (4 Bits)
+;pt1 bit ipa1.4 ; Timer 1 (4 Bits)
+
+ipa2 port 4a2h ; Interruptprioritäten(2):
+;pt2 bit ipa1.0 ; Timer 2 (4 Bits)
+
+ipa4 port 4a4h ; Interruptprioritäten(4):
+;pri0 bit ipa4.0 ; Empfang UART0 (4 Bits)
+;pti0 bit ipa4.4 ; Versand UART0 (4 Bits)
+
+ipa5 port 4a5h ; Interruptprioritäten(4):
+;pri1 bit ipa5.0 ; Empfang UART1 (4 Bits)
+;pti1 bit ipa5.4 ; Versand UART1 (4 Bits)
+
+swe port 403h ; Freigabe Software-Interrupts
+swe1 bit swe.0
+swe2 bit swe.1
+swe3 bit swe.2
+swe4 bit swe.3
+swe5 bit swe.4
+swe6 bit swe.5
+swe7 bit swe.6
+
+swr port 42ah ; Auslösung Software-Interrupts
+swr1 bit swr.0
+swr2 bit swr.1
+swr3 bit swr.2
+swr4 bit swr.3
+swr5 bit swr.4
+swr6 bit swr.5
+swr7 bit swr.6
+
+;----------------------------------------------------------------------------
+; Ports
+
+p0 port 430h ; Datenregister Port 0
+ad0 bit p0.0 ; Datenbit 0/Adreßbit 4
+ad1 bit p0.1 ; Datenbit 1/Adreßbit 5
+ad2 bit p0.2 ; Datenbit 2/Adreßbit 6
+ad3 bit p0.3 ; Datenbit 3/Adreßbit 7
+ad4 bit p0.4 ; Datenbit 4/Adreßbit 8
+ad5 bit p0.5 ; Datenbit 5/Adreßbit 9
+ad6 bit p0.6 ; Datenbit 6/Adreßbit 10
+ad7 bit p0.7 ; Datenbit 7/Adreßbit 11
+
+p1 port 431h ; Datenregister Port 1
+a0 bit p1.0 ; Adreßleitung 0 (8-Bit-Modus)
+wrh bit p1.0 ; Schreibimpuls D8-D15 (16-Bit-Modus)
+a1 bit p1.1 ; Adreßleitung 1
+a2 bit p1.2 ; Adreßleitung 2
+a3 bit p1.3 ; Adreßleitung 3
+rxd1 bit p1.4 ; Empfangsleitung UART1
+txd1 bit p1.5 ; Sendeleitung UART1
+t2 bit p1.6 ; Timer 2 Ein/Ausgang
+t2ex bit p1.7 ; Trigger Timer 2
+
+p2 port 432h ; Datenregister Port 2
+ad8 bit p2.0 ; Datenbit 8/Adreßbit 12
+ad9 bit p2.1 ; Datenbit 9/Adreßbit 13
+ad10 bit p2.2 ; Datenbit 10/Adreßbit 14
+ad11 bit p2.3 ; Datenbit 11/Adreßbit 15
+ad12 bit p2.4 ; Datenbit 12/Adreßbit 16
+ad13 bit p2.5 ; Datenbit 13/Adreßbit 17
+ad14 bit p2.6 ; Datenbit 14/Adreßbit 18
+ad15 bit p2.7 ; Datenbit 15/Adreßbit 19
+
+p3 port 433h ; Datenregister Port 3
+rxd0 bit p3.0 ; Empfangsleitung UART0
+txd0 bit p3.1 ; Sendeleitung UART0
+int0 bit p3.2 ; externer Interrupt 0
+int1 bit p3.3 ; externer Interrupt 1
+t0 bit p3.4 ; Timer 0 Ein/Ausgang
+t1 bit p3.5 ; Timer 1 Ein/Ausgang
+wr bit p3.6 ; Schreibimpuls D0-7
+rd bit p3.7 ; Leseimpuls D0-15
+
+p0cfga port 470h ; Konfigurationsbits A für Port 0
+p1cfga port 471h ; Konfigurationsbits A für Port 1
+p2cfga port 472h ; Konfigurationsbits A für Port 2
+p3cfga port 473h ; Konfigurationsbits A für Port 3
+
+p0cfgb port 4f0h ; Konfigurationsbits B für Port 0
+p1cfgb port 4f1h ; Konfigurationsbits B für Port 1
+p2cfgb port 4f2h ; Konfigurationsbits B für Port 2
+p3cfgb port 4f3h ; Konfigurationsbits B für Port 3
+
+;----------------------------------------------------------------------------
+; Timer
+
+tl0 port 450h ; Zählregister Timer 0
+th0 port 451h
+rtl0 port 454h ; Reload Timer 0
+rth0 port 455h
+
+tl1 port 452h ; Zählregister Timer 1
+th1 port 453h
+rtl1 port 456h ; Reload Timer 1
+rth1 port 457h
+
+tmod port 45ch ; Modusregister Timer 0/1
+;t0_m0 bit tmod.0 ; Betriebsart Timer 0
+;t0_m1 bit tmod.1
+;ct_t0 bit tmod.2 ; Timer 0 als Timer oder Zähler
+;t0_gate bit tmod.3 ; Freigabe Timer 0
+;t1_m0 bit tmod.4 ; Betriebsart Timer 1
+;t1_m1 bit tmod.5
+;ct_t1 bit tmod.6 ; Timer 1 als Timer oder Zähler
+;t1_gate bit tmod.7 ; Freigabe Timer 1
+
+tcon port 410h ; Timer-Steuerregister 0/1
+it0 bit tcon.0 ; Flanken/Zustandstriggerung Interrupt 0
+ie0 bit tcon.1 ; Flankendetektor Interrupt 0
+it1 bit tcon.2 ; Flanken/Zustandstriggerung Interrupt 1
+ie1 bit tcon.3 ; Flankendetektor Interrupt 1
+tr0 bit tcon.4 ; Timer 0 einschalten/stoppen
+tf0 bit tcon.5 ; Überlauf Timer 0 ?
+tr1 bit tcon.6 ; Timer 1 einschalten/stoppen
+tf1 bit tcon.7 ; Überlauf Timer 1 ?
+
+tstat port 411h ; Timer-Status 0/1
+t0oe bit tstat.0 ; Takt von Timer 0 an T0 ausgeben
+t1oe bit tstat.1 ; Takt von Timer 1 an T1 ausgeben
+
+tl2 port 458h ; Zählregister Timer 2
+th2 port 459h
+
+t2capl port 45ah ; Fangwert Timer 2
+t2caph port 45bh
+
+t2mod port 419h ; Modus Timer 2
+dcen bit t2mod.0 ; Zählrichtung Timer 2 auf/durch T2EX bestimmt
+t2oe bit t2mod.1 ; Takt von Timer 2 an T2 ausgeben
+tclk1 bit t2mod.4 ; UART1 benutzt Timer2 statt Timer 1 zum Senden
+rclk1 bit t2mod.5 ; UART1 benutzt Timer2 statt Timer 1 zum Empfangen
+
+t2con port 418h ; Timer-Steurregister 2
+cp_rl2 bit t2con.0 ; Timer 2 Fang/Neuladen ?
+ct_t2 bit t2con.1 ; Timer 2 als Timer oder Zähler
+tr2 bit t2con.2 ; Timer 2 einschalten/stoppen
+exen2 bit t2con.3 ; Capture/Reload über T2EX erlauben
+tclk0 bit t2con.4 ; UART0 benutzt Timer2 statt Timer 1 zum Senden
+rclk0 bit t2con.5 ; UART0 benutzt Timer2 statt Timer 1 zum Empfangen
+exf2 bit t2con.6 ; Capture/Reload aufgetreten ?
+tf2 bit t2con.7 ; Überlauf Timer 2 ?
+
+;----------------------------------------------------------------------------
+; Watchdog
+
+wdcon port 41fh ; Konfiguration Watchdog
+wdtof bit wdcon.1 ; Timeout aufgetreten ?
+wdrun bit wdcon.2 ; Watchdog einschalten
+pre0 bit wdcon.5 ; Vorteiler
+pre1 bit wdcon.6
+pre2 bit wdcon.7
+
+wdl port 45fh ; Reload-Wert
+
+wfeed1 port 45dh ; Rücksetzregister 1 (a5h)
+wfeed2 port 45eh ; Rücksetzregister 2 (5ah)
+
+;----------------------------------------------------------------------------
+; serielle Ports
+
+s0buf port 460h ; Datenregister UART0
+
+s0addr port 461h ; Slave-Adresse UART0
+s0aden port 462h ; Adreßmaske UART0
+
+s0stat port 421h ; Status UART0
+stint0 bit s0stat.0 ; Interruptfreigabe UART0
+oe0 bit s0stat.1 ; Empfängerüberlauf UART0
+br0 bit s0stat.2 ; Break auf UART0 empfangen?
+fe0 bit s0stat.3 ; kein gültiges Stopbit auf UART0 ?
+
+s0con port 420h ; Steuerung UART0
+ri_0 bit s0con.0 ; Zeichen auf UART0 empfangen ?
+ti_0 bit s0con.1 ; Zeichen auf UART0 verschickt ?
+rb8_0 bit s0con.2 ; auf UART0 empfangenes, 9. Bit
+tb8_0 bit s0con.3 ; auf UART0 verschicktes, 9. Bit
+ren_0 bit s0con.4 ; Empfänger UART0 freigeben
+sm2_0 bit s0con.5 ; Multiprozessormodus auf UART0 freigeben
+sm1_0 bit s0con.6 ; Moduseinstellung UART0
+sm0_0 bit s0con.7
+
+s1stat port 421h ; Status UART1
+stint1 bit s1stat.0 ; Interruptfreigabe UART1
+oe1 bit s1stat.1 ; Empfängerüberlauf UART1
+br1 bit s1stat.2 ; Break auf UART1 empfangen?
+fe1 bit s1stat.3 ; kein gültiges Stopbit auf UART1 ?
+
+s1con port 424h ; Steuerung UART1
+ri_1 bit s1con.0 ; Zeichen auf UART1 empfangen ?
+ti_1 bit s1con.1 ; Zeichen auf UART1 verschickt ?
+rb8_1 bit s1con.2 ; auf UART1 empfangenes, 9. Bit
+tb8_1 bit s1con.3 ; auf UART1 verschicktes, 9. Bit
+ren_1 bit s1con.4 ; Empfänger UART1 freigeben
+sm2_1 bit s1con.5 ; Multiprozessormodus auf UART1 freigeben
+sm1_1 bit s1con.6 ; Moduseinstellung UART1
+sm0_1 bit s1con.7
+
+s1buf port 464h ; Datenregister UART1
+
+s1addr port 465h ; Slave-Adresse UART1
+s1aden port 466h ; Adreßmaske UART1
+
+
+;----------------------------------------------------------------------------
+; Vektoren
+
+vec_reset label 0000h ; Resetadresse
+vec_bkpt label 0004h ; Breakpoint-Befehl
+vec_trace label 0008h ; Einzelschrittverfolgung
+vec_stkover label 000ch ; Stapelüberlauf
+vec_divzero label 0010h ; Division durch 0
+vec_reti label 0014h ; Privilegverletzung (RETI im User-Mode)
+vec_trap0 label 0040h ; TRAP 0
+vec_trap1 label 0044h ; TRAP 1
+vec_trap2 label 0048h ; TRAP 2
+vec_trap3 label 004ch ; TRAP 3
+vec_trap4 label 0050h ; TRAP 4
+vec_trap5 label 0054h ; TRAP 5
+vec_trap6 label 0058h ; TRAP 6
+vec_trap7 label 005ch ; TRAP 7
+vec_trap8 label 0060h ; TRAP 8
+vec_trap9 label 0064h ; TRAP 9
+vec_trap10 label 0068h ; TRAP 10
+vec_trap11 label 006ch ; TRAP 11
+vec_trap12 label 0070h ; TRAP 12
+vec_trap13 label 0074h ; TRAP 13
+vec_trap14 label 0078h ; TRAP 14
+vec_trap15 label 007ch ; TRAP 15
+
+vec_ie0 label 0080h ; externer Interrupt 0
+vec_tf0 label 0084h ; Interrupt durch Timer 0
+vec_ie1 label 0088h ; externer Interrupt 1
+vec_tf1 label 008ch ; Interrupt durch Timer 1
+vec_tf2 label 0090h ; Interrupt durch Timer 2
+vec_ri0 label 00a0h ; Empfang auf UART0
+vec_ti0 label 00a4h ; Sendung auf UART0
+vec_ri1 label 00a8h ; Empfang auf UART1
+vec_ti1 label 00ach ; Sendung auf UART1
+
+vec_swr1 label 0100h ; Software-Interrupt 1
+vec_swr2 label 0104h ; Software-Interrupt 2
+vec_swr3 label 0108h ; Software-Interrupt 3
+vec_swr4 label 010ch ; Software-Interrupt 4
+vec_swr5 label 0110h ; Software-Interrupt 5
+vec_swr6 label 0114h ; Software-Interrupt 6
+vec_swr7 label 0118h ; Software-Interrupt 7
+
+;----------------------------------------------------------------------------
+; Speicheradressen
+
+irom label 0 ; Beginn internes ROM
+ switch MOMCPUNAME ; Ende internes ROM
+ case "XAG3"
+iromend label 7fffh ; XA-G3: 32K ROM
+ case "XAG2"
+iromend label 3fffh ; XA-G2: 16K ROM
+ case "XAG1"
+iromend label 1fffh ; XA-G1: 8K ROM
+ endcase
+
+iram equ 0,data ; Beginn internes RAM
+iramend equ 1ffh,data ; Ende internes RAM: immer 512 Byte
+
+ endif
+
+ restore ; wieder erlauben
+
+
diff --git a/include/stddefz8.inc b/include/stddefz8.inc
new file mode 100644
index 0000000..c245058
--- /dev/null
+++ b/include/stddefz8.inc
@@ -0,0 +1,56 @@
+ save
+ listing off ; kein Listing über diesen File
+
+;****************************************************************************
+;* *
+;* AS 1.39 - Datei Z8.INC *
+;* *
+;* Sinn : enthält Registerkürzel für den Z8-Prozessor *
+;* *
+;* letzte Änderungen : 16.12.1993 Rüdiger Mersiovsky *
+;* 25.12.1993 Copyrightvermerk *
+;* *
+;****************************************************************************
+
+ ifndef stddefz8inc ; verhindert Mehrfacheinbindung
+
+stddefz8inc equ 1
+
+ if (MOMCPU<>34305)
+ fatal "Falscher Prozessortyp eingestellt: nur Z8601 erlaubt!"
+ endif
+
+ if MOMPASS=1
+ message "Z8-Kürzel-Definitionen"
+ message "(C) 1993 Rüdiger Mersiovsky"
+ endif
+
+;----------------------------------------------------------------------------
+
+P0 EQU 00H ; Port 0
+P1 EQU 01H ; Port 1
+P2 EQU 02H ; Port 2
+P3 EQU 03H ; Port 3
+SIO EQU 0F0H ; serielles Ein-Ausgaberegister
+FLAGS EQU 0FCH ; Flagregister
+SPH EQU 0FEH ; Stackpointer, Highteil
+SPL EQU 0FFH ; Stackpointer, Lowteil
+TMR EQU 0F1H ; Zähler/Zeitgeberbetriebsart
+T0 EQU 0F4H ; Zähler/Zeitgeberregister Kanal 0
+T1 EQU 0F2H ; Zähler/Zeitgeberregister Kanal 1
+PRE0 EQU 0F5H ; T0-Vorteilerregister
+PRE1 EQU 0F3H ; T1-Vorteilerregister
+P01M EQU 0F8H ; Tor 0, Tor 1 Betriebsart
+P2M EQU 0F6H ; Tor 2 Betriebsart
+P3M EQU 0F7H ; Tor 3 Betriebsart
+IMR EQU 0FBH ; Interrupt-Maskierungsregister
+IPR EQU 0F9H ; Interrupt-Prioritätsregister
+IRQ EQU 0FAH ; Interrupt-Anmelderegister
+RP EQU 0FDH ; Registerpointer
+
+;---------------------------------------------------------------------------
+
+ endif
+
+ restore ; wieder erlauben
+