| Einleitung | Die wichtigsten Parametrisierungen | Programmierpraxis | Registertabelle mit Erläuterungen | Die MOS 6381 Hardware |
-
Erzeugung von
Tönen
mit dem Commodore 64 und Basic

MOS Technology 6581 SID
zusammengestellt von Christian Riedel/ MH, x3works, dopeconnection.net
Das
Sound Interface
Device des Commodore 64 besteht aus 3
Tongeneratoren, welche über die 29 Register
54272 bis 54300 kontrolliert werden können. Ein
Register hat dabei eine
Länge von einem Byte bzw. acht Bits:
|
1 Byte Register |
|||||||
|
High-Nibble |
Low-Nibble |
||||||
|
Bit |
Bit |
Bit |
Bit |
Bit |
Bit |
Bit |
Bit |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Um Register zu setzen gibt es unter C64 Basic den Befehl : POKE Register , Wert
|
Der
Commodore 64 ist in der Lage ein breites Spektrum an Tönen zu
erzeugen. In
der folgenden Tabelle sind die wichtigsten Parametrisierungen
zusammengestellt: |
||||||||||||||||||||||||||||||||||
|
Frequenz Register $00 und $01 |
Die
Ton-Frequenzen der chromatischen Tonleiter können
nach folgendem Schema berechnet werden: FREQUENZ = 2^( NR / 12 ) * 16.35
Hz Dabei entspricht
NR=0 dem Ton
C-0, NR=1 dem Ton C#,
NR=2 dem Ton D, NR = 3 dem Ton D#, NR = 4 dem Ton
E, NR=5 dem Ton F …usw… Um das C eine Oktave höher zu
transponieren muss 12 zu NR addiert
werden. Der Ton D-3 hat
also die NR=2+36=38. Der zu
berechnende 16bit WERT ist = FREQUENZ
* 2^24 / TAKTFREQUENZ Die TAKTFREQUENZ kennt regionale Unterschiede: Europäischer
C64: TAKTFREQUENZ = 17734472 / 18 Hz Amerikanischer
C64: TAKTFREQUENZ = 14318180 / 14 Hz Der 16bit WERT wird aufgespalten in 8bit-LOWBYTE und 8bit-HIGHBYTE
und so jeweils in die Register $00 und $01
(Stimme 1) geschrieben. HIGHBYTE
= INT( WERT / 256 )
, LOWBYTE = WERT
– 256 * HIGHBYTE Zur
Erleichterung ist sinnvoll sich eine Tabelle mit den
benötigten Tönen anzulegen. z.B.:
Selbst rechnen
ist müßig…siehe C64
NotenTabelle.txt |
|||||||||||||||||||||||||||||||||
|
Lautstärkeverlauf |
|
|||||||||||||||||||||||||||||||||
|
Wellenform Register $04, $11 und $18 |
Im Highbyte
des Register $04 wird die Wellenform
gesetzt. Es gibt zur Auswahl: |
|||||||||||||||||||||||||||||||||
|
10002
= Rauschen
|
01002
= Sägezahnwelle
|
00102
= Recheckwelle
|
00012
= Dreieck
|
|||||||||||||||||||||||||||||||
|
Startbit auf 1
setzen |
Setzen des Bit 0 von Register $04 auf 1 (ungerade
Integerzahl) : Der
SID Chip spielt die Attack und Decayphase. |
|||||||||||||||||||||||||||||||||
|
Startbit auf 0
setzen |
Die
Sustainphase bleibt erhalten, bis Bit 0 von
Register $04 zurück auf 0
gesetzt wird und die Releasephase
den Ton ausblendet. |
|||||||||||||||||||||||||||||||||
|
Im folgenden soll veranschaulicht werden, wie man in Basic einen Ton mit
Tongenerator 1 erzeugen kann. |
||
|
|
||
|
10 POKE
54296,15 |
REM: Kein Filter, maximale
Lautstärke=15 |
|
|
20
POKE 54272, 196 |
REM: LOWBYTE, Note D-3,
Oszillatorfrequenz 146.8Hz |
|
|
30
POKE 54273, 9 |
REM: HIGHBYTE, Note D-3,
Oszillatorfrequenz 146.8Hz |
|
|
40
POKE 54277, 105 |
REM: Attackphase 1s, Decayphase
= 750ms |
|
|
60 POKE 54278,
252 |
REM:
Sustainlautstärke = 10, Releasezeit = 2,4s |
|
|
70 POKE 54276,
33 |
REM:
Rechteckform gewählt, Steuerbit gesetzt, abspielen beginnt |
|
|
80 FOR I= 1 TO 1700:NEXT |
REM: Das
Timing der Sustainphase+Attackphase+Decayphase muss selbst
überbrückt werden! Z.B.: durch eine Schleife (ca.850 Durchläufe / Sekunde) |
|
|
90 POKE
54276,34 |
REM:
Rechteckkurve gewählt, Steuerbit nullgesetzt, Releasephase
beginnt, abspielen des Tons endet danach. |
|
|
|
Download
d64 Image : SIDchip.zip |
|
|
Erzeugt wird
ein D mit einer Frequenz von 146.8Hz und eingeprägter
Rechtecksform. Die Lautstärke steigt in 1s auf volle
Lautstärke, klingt dann in 750ms auf 2/3 dieser
Lautstärke ab. Der Ton wird bis zum Ende der FOR-Schleife
gehalten und in 24ms Releasezeit ausgeblendet.
Die genaue Funktion der mit dem Poke-Befehl beschriebenen Register kann der folgenden Tabelle entnommen werden. |
||
|
Die folgende
Tabelle stellt die Funktionen aller 29 Register des MOS 6581 dar. Angaben zur
Berechnung der C64 Basic Poke-Codes sind in der Zeile Poke it! zusammengefasst. Damit ist man
in der Lage jeden beliebigen Ton mit dem C64 zu erzeugen, also viel
Spaß bei ausprobieren! Möchten
sie ganze Musikstücke mit dem C64 komponieren, vereinfachen
sogenannte Tracker (z.B.: asterion sid tracker)
die Arbeit. |
|
OSC |
54272+ REG |
Bit
7 |
Bit
6 |
Bit
5 |
Bit
4 |
Bit
3 |
Bit
2 |
Bit
1 |
Bit
0 |
Poke
it ! |
R/W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
S T I M M E E I N S |
$ 00 |
Oszillator-Frequenz
LOWBYTE FREQUENZ=2^(NR/12)*16.35 Änderung
von NR um 1 bewirkt Halbtonschritt,
NR+12 erhöht um eine Oktave NR=0,
C NR=1,
C# NR=3,
D
usw… WERT=FREQUENZ*2^24/TAKTFREQUENZ (Europa TAKTFREQUENZ =
17734472/18, Amerika TAKTFREQUENZ 14318180/14) LOWBYTE=WERT-256*HIGHBYTE |
Poke
54272,LOWBYTE Calculation: LOWBYTE= WERT-256*HIGHBYTE |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 01 |
Oszillator-Frequenz
HIGHBYTE HIGHBYTE
= INT(WERT /256) |
Poke
54273,HIGHBYTE Calculation: HIGHBYTE
= INT(WERT /256) |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 02 |
Pulsbreite bei
Rechteckwelle LOWBYTE WERT = 0 bis 255 |
Poke 54274, WERT |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 03 |
unbenutzt |
unbenutzt |
unbenutzt |
unbenutzt |
Pulsbreite bei
Rechteckwelle HIGHNIBBEL, WERT = 0 bis 15 |
Poke
54275,WERT |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 04 |
Rauschen |
Sägezahn |
Rechteck |
Dreieck |
Eine
Doppelauswahl von Rauschen und einer andren Schwingungsform kann den
Rauschgenerator blockieren. Mit setzen des
Bit3=1 wird diese Blockade gelöst. |
1: Dreiecksschwingungsausgang von Oszillator 1 gibt an Oszilator 1 die Ringmodulation (Multiplikation) der Signale an Osz. 1 und 3 aus. ![]() Ringmodulation mit fRechteck = 6 mal fDreieck |
1: Synchronisieren Synchronisiert
die Grundfrequenz von
Oszillator 1 mit Osc. 3. Um einen hörbaren Effekt zu erziehlen
muss Osc.3 auf eine niedrigere Frequenz (!=0) als Osc.1 gesetzt sein. |
Steuerbit 1:Attack 0:Release Phase einleiten |
Poke 54276,WERT Calculation: Bsp.: WERT
11000001=193, binär umformen! [ gerader WERT=Attack Ungerader WERT=Release ] |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Es ist
möglich mehrere Wellenformen gleichzeitig zu aktivieren. Das Ergebnis
entspricht dann einer logischen AND Verknüpfung der Signale. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 05 |
Dauer
Attackphase
(ATTACKZEIT = 0–15)
|
Dauer
Decayphase
(DECAYZEIT=0-15)
|
Poke 54277, WERT Calculation: WERT = 16*ATTACKZEIT +DECAYZEIT |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 06 |
Sustainpegel SUSTAINPEGEL =
0 bis 15 |
Releasezeit
|
Poke
54278, WERT Calculation: WERT
= 16*SUSTAINPEGEL +RELEASEZEIT |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
S T I M M E Z W E I & D R E I |
$ 07 |
Oszillator-Frequenz
LOWBYTE FREQUENZ=2^(NR/12)*16.35 Änderung
von NR um 1 bewirkt Halbtonschritt,
NR+12 erhöht um eine Oktave NR=0,
C NR=1,
C# NR=3,
D
usw… WERT=FREQUENZ*2^24/TAKTFREQUENZ (Europa TAKTFREQUENZ =
17734472/18, Amerika TAKTFREQUENZ 14318180/14) LOWBYTE=WERT-256*HIGHBYTE |
Poke
54279, LOWBYTE Calculation: LOWBYTE= WERT-256*HIGHBYTE |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 08 |
Oszillator-Frequenz
HIGHBYTE HIGHBYTE
= INT(WERT /256) |
Poke
54280, HIGHBYTE Calculation: HIGHBYTE
= INT(WERT /256) |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 09 |
Pulsbreite bei
Rechteckwelle LOWBYTE WERT = 0 bis 255 |
Poke 54281, WERT |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 10 |
unbenutzt |
unbenutzt |
unbenutzt |
unbenutzt |
Pulsbreite bei
Rechteckwelle HIGHNIBBEL, WERT = 0 bis 15 |
Poke
54282, WERT |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 11 |
Rauschen |
Sägezahn |
Rechteck |
Dreieck |
Eine Doppelauswahl von Rauschen und einer anderen
Schwingungsform kann den Rauschgenerator blockieren. Mit setzen des
Bit 3 wird diese Blockade gelöst. |
1: Dreiecksschwingungsausgang von Oszillator 1 gibt an Oszilator 1 die Ringmodulation (Multiplikation) der Signale an Osz. 1 und 2 aus. |
1: Synchronisieren Synchronisiert die Grundfrequenz von Oszillator 1 mit Osc. 2. Um einen hörbaren Effekt zu erziehlen muss Osc.2 auf eine niedrigere Frequenz (!=0) als Osc.1 gesetzt sein. |
Steuerbit 1 : Attack 0 : Release Phase einleiten |
Poke 54283, WERT Calculation: Bsp.: WERT
11000001=193, einfach binär umformen [ gerader WERT=Attack Ungerader WERT=Release ] |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Es ist
möglich mehrere Wellenformen gleichzeitig zu aktivieren. Das Ergebnis
entspricht dann einer logischen AND Verknüpfung der Signale. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 12 |
Dauer
Attackphase (ATTACK =
0–15)
|
Dauer Decayphase (DECAY=0-15)
|
Poke 54284, WERT Calculation: WERT =
16*ATTACKZEIT +DECAYZEIT |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$
13 |
Sustainpegel SUSTAINPEGEL =
0 bis 15 |
Releasezeit
|
Poke
54285, WERT Calculation: |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
S T I M M E D R E I |
$ 14 |
Oszillator-Frequenz
LOWBYTE FREQUENZ=2^(NR/12)*16.35 Änderung
von NR um 1 bewirkt Halbtonschritt,
NR+12 erhöht um eine Oktave NR=0,
C NR=1,
C# NR=3,
D
usw… WERT=FREQUENZ*2^24/TAKTFREQUENZ
(Europa TAKTFREQUENZ = 17734472/18, Amerika
TAKTFREQUENZ 14318180/14) LOWBYTE=WERT-256*HIGHBYTE |
Poke
54286, LOWBYTE Calculation: Lowbyte= WERT-256*Highbyte |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 15 |
Oszillator-Frequenz
HIGHBYTE HIGHBYTE
= INT(WERT /256) |
Poke
54287, HIGHBYTE Calculation: Highbyte
= INT(WERT /256) |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 16 |
Pulsbreite bei
Rechteckwelle LOWBYTE WERT = 0 bis 255 |
Poke 54288, WERT |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 17 |
unbenutzt |
unbenutzt |
unbenutzt |
unbenutzt |
Pulsbreite bei
Rechteckwelle HIGHNIBBEL, Wert = 0 bis 15 |
Poke
54289,WERT |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 18 |
Rauschen |
Sägezahn |
Rechteck |
Dreieck |
Eine
Doppelauswahl von Rauschen und einer andren Schwingungsform kann den
Rauschgenerator blockieren. Mit setzen des
Bit 3 wird diese Blockade gelöst. |
1: Dreiecksschwingungsausgang von Oszillator 1 gibt an Oszilator 1 die Ringmodulation (Multiplikation) der Signale an Osz. 2 und 3 aus. |
1: Synchronisieren Synchronisiert die Grundfrequenz von Oszillator 2 mit Osc. 3. Um einen hörbaren Effekt zu erziehlen muss Osc.3 auf eine niedrigere Frequenz (!=0) als Osc.2 gesetzt sein. |
Steuerbit 1 : Attack 0 : Release Phase einleiten |
Poke 54290, WERT Calculation: Bsp.: WERT
11000001=193, einfach binär umformen [ gerader WERT=Attack ungerader WERT=Release ] |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Es ist
möglich mehrere Wellenformen gleichzeitig zu aktivieren. Das Ergebnis
entspricht dann einer logischen AND Verknüpfung der Signale. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 19 |
Dauer
Attackphase (ATTACK =
0–15)
|
Dauer Decayphase (DECAY=0-15)
|
Poke 54291, WERT Calculation: WERT =
16*ATTACKZEIT +DECAYZEIT |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$
20 |
Sustainpegel SUSTAINPEGEL =
0 bis 15 |
Releasezeit
|
Poke
54292, WERT Calculation: |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
F I L T E R |
$
21 |
unbenutzt |
unbenutzt |
unbenutzt |
unbenutzt |
unbenutzt |
unbenutzt |
Filterfrequenz LOWBYTE (2 bits) |
Poke
54293, LOWBYTE Calculation: LOWBYTE=WERT-256*HIGHBYTE |
W |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$
22 |
Filterfrequenz, HIGHBYTE WERT =
(FREQUENZ-30)/5.8182 Max.WERT = 2^11 ($21 und $ 22, zusammen 11
Bits !) = 2048 |
Poke
54294, HIGHBYTE Calculation: HIGHBYTE
= INT(WERT /256) |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$
23 |
Resonanz des Filters, RESONANZ Von 0 (
Niedrigere Resonanz) bis
15 (hohe Resonanz) |
Externe
Signalquelle filtern |
Stimme
3 über Filter |
Stimme
2 über Filter |
Stimme
1 über Filter |
Poke 54295, WERT Calculation: WERT = 16 * RESONANZ + FILTERMODUS |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$
24 |
Stimme 3 nicht
hörbar. Sinnvoll wenn
Stimme 3 nur zur Parametergewinnung genutzt wird. |
Hochpasszweig Frequenzen
< Filterfrequenz werden um
12dB/octave reduziert |
Bandpasszweig Frequenzen
<> Filterfrequenz werden um
6dB/octave reduziert |
Tiefpasszweig Frequenzen
> Filterfrequenz werden um
12dB/octave reduziert |
Gesamtlautstärke LOWNIBBEL = 0
bis 15 |
Poke
54296, WERT Calculation: WERT
= PASSMODUS*16+LOWNIBBEL |
W |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A/D |
$ 25 |
A/D
Wandler 1, Control
Port 1 (Input, read only)
|
|
|
A=PEEK(54297) PRINT
A |
R |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
$ 26 |
A/D
Wandler 2 Control
Port 1 (Input, read only) Der AD Wandler2
ist ein Eingang. Das Register enthält einen Wert, proportional
zu einem zwischen +5V und POT Y angelegten elektrischen
Wiederstand (min. 300 Ohm). |
A=PEEK(54298) PRINT
A |
R |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
RND |
$
27 |
Oszillator 3
gibt eine Zufallszahl welche dem
Rauschen des Rauschgenerators entspricht.
Generator 3 muss eingeschaltet sein, jedoch kann man
die Stimme 3 mit $24 unterdrücken. (read
only) |
A=PEEK(54299) PRINT
A |
R |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
$ 28 |
Hüllkurvengenerator 3, entspricht
der relativen Lautstärke von Stimme 3. (read
only) |
A=PEEK(54300) PRINT
A |
R |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
V-08-11,
zusammengestellt von Christian
Riedel/ MH, x3works, dopeconnection.net |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die
MOS 6581 SID Hardware:
Diese Abbildung soll nur einen kurzen Überblick über
die Art der Pinanschlüsse des MOS6581 geben.
PIN
NAME
Erläuterungen

Wenn sie mehr über die
Elektronik hinter dem MOS 6581 erfahren wollen,
dann können sie dem offiziellen Datenblatt zum Chip
ausführlichere Informationen entnehmen.
(Dieses kann z.B.: bei http://sid.kubarth.com/specifications.html
gefunden werden)

Hier befindet sich der SID im C64.
(Die Position variiert bei den einzelnen Versionen des C64)01
CAP 1A
Anschlüsse
für externe Kondensatoren. Die
Kapazitäten
(min. 1000pF) werden vom Frequenzfilter als Integratoren
benötigt. Angeschlossen wird je ein Kondensator zwischen Pin 0 und
1 sowie zwischen Pin 3 und 4.
Der Kapazitätswert beeinflusst das Klangbild des MOS 6581 SID. Die
Mit je 1000pF können höhere Töne erzeugt werden. 2000pF
Kondensatoren ermöglichen eine bessere Bass-Dynamik.
02
CAP 1A
03
CAP 1A
04
CAP 1A
05
-RES
Reset. Der SID Chip setzt die Register
zurück, wenn ein Low-Signal anliegt. (TTL Signal, Low-Time min. 10 Zyklen)
06
S2
Über diesen Pin bezieht der SID Chip
den I/O-Takt des Prozessors. Die nominale Frequenz liegt bei 1MHz, im High-Takt (5V-TTL) werden die Daten transferriert. Der Takt dient auch als Basis
für die durch ihn abgeleiteten Stimmfrequenzen. (siehe $0,$1)
07
R/W
Read/Write. Bei anliegendem TTL Low Signal wird ins Register geschrieben, bei High gelesen.
08
-CS
Chip Select. Wenn der Prozessor eine Adresse
im Registerbereich des SID Chips auf den Adressbus
legt wird dieser Eingang Low.
09
A0
Adressbits
A0-A4. Mit 00000 wird $1 angesprochen, mit 00010 $2, mit 00011
$3, usw. (binär umformen). TTL-Level, kommend vom MOS 6510 Mikroprozessor.
10
A1
11
A2
12
A3
13
A4
14
GND
Hat der Sid gegenüber den anderen Schaltungen eine eigene Masse, so lässt sich das Klangbild verbessern.
15
D0
Datenbits
D0 bis D7.
Der Datenfluss ist bidirektional. Wird -CS low, entscheidet R/W ob das durch A0 bis A4 adressierte
Register die Datenbits gelesen oder geschrieden werden.
Es liegt 5V-TTL-Level an, verbunden sind die Datenleitungen mit dem MOS 6510 Mikroprozessor.
16
D1
17
D2
18
D3
19
D4
20
D5
21
D6
22
D7
23
POTY
Eingang für A/D Wandler 2, siehe $26
24
POTX
Eingang für A/D Wandler 1, Der Wert des
Registers wird bestimmt durch einen zwischen +5V und POT X angelegten
elektrischen Wiederstands
(min. 300 Ohm bis 400 kOhm). Die
max. mögliche Abtastrate beträgt ~2000Hz. (siehe $25)
25
V5V
5 Volt Betriebsspannung, max 100mA / 500mW
26
EXT-IN
EXT IN ist ein
Signaleingang für Singale bis max. 3V
z.B. von einem Mikrophon, einer Stereoanlage oder etwa einem zweiten
SID Chip. Der Pin 26 ist verbunden mit dem Kontakt 5 der 8-poligen
AudioVideobuchse.
27
AUDIO OUT
Audio Out mit maximal 2V Spannung.
28
V12V
12 Volt Betriebsspannung, bis zu 40mA / 480mW
total:
max. 1000mW SID Power (Yeah!)
| Zusatzbeispiel : C64 Guitar Tuner | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Das rechts abgebildete Programm ist ein einfach gehaltener Gitarren-Stimmer. Die Saiten einer Gitarre entsprechen von oben nach unten den Noten E2,A2,D3,G3,H3 und E4. Das Programm soll nur kurz erläutert werden:
|
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Quellen :
64 Intern, (Brückmann, Englisch, Felt, Gelfand, Gerits, Krsnik) , 5.Auflage, Data Becker, 1986
Links
:
Der Autor
übernimmt keine Verantwortung für Fehler oder
Irrtümer.