Der POKEY

Hauptkategorie: 8-Bitter
Erstellt: 16 Februar 2014
Zugriffe: 1810


                                 D E R    P O K E Y
                                 ------------------


















            1) ALLGEMEINES

            2) TONERZEUGUNG

            3) TASTATURABFRAGE

            4) PADDLESTEUERUNG

            5) SERIELLE EIN-/AUSGABE

            Der POTentiometer and KEYboard-Controller-Chip ist der drit-
            te  Spezialbaustein im Atari 600XL/800XL.  Er übernimmt  zum
            Einen fast die gesamte Tonsteuerung, zweitens ist er für die
            Kommunikation  mit extern anzuschließenden Geräten zuständig
            und als letztes übernimmt er das Einlesen der Paddle-Kanäle.

            Als  Verbindung  zur CPU stehen ihm  die  8  Datenleitungen,
            Takt- Schreib-/Leseleitung,  eine Interrupt- und vier Adreß-
            leitungen  zur Verfügung.  Über  eine  Hardware-Resetleitung
            verfügt der POKEY nicht.

            Mit  seinen vier Adreßleitungen können im POKEY 16 verschie-
            dene  Daten- beziehungsweise  Steuer-Register   angesprochen
            werden.

            Diese  16  Register  teilen sich hauptsächlich in  9  Tonre-
            gister,  4 Übertragungsregister,  ein nicht belegtes und ein
            Interruptverarbeitungsregister auf.







            ********************
            *                  *
            *                  *
            *   TONERZEUGUNG   *
            *   ------------   *
            *                  *
            ********************


            Der  POKEY besitzt die Möglichkeit,  maximal vier  Tonkanäle
            gleichzeitig oder in Kombination miteinander zu verwalten.

            Jeder  Ton,  den wir hören können,  setzt sich aus  mehreren
            Komponenten  zusammen.  Da ist zum Einen  die  Tonhöhe,  die
            technisch  als  Frequenz bezeichnet wird und in  Hz  (Hertz,
            nach dem bekannten Physiker Heinrich Hertz) gemessen wird.

            Ein Hz ist nun eine komplette Schwingung pro Sekunde,  wobei
            'komplett' bedeutet,  daß bei immer wiederkehrenden Schwing-
            ungsbildern  man sich einen beliebigen Punkt der  Schwingung
            sucht  und  dann  so lange wartet,  bis genau  dieser  Punkt
            wieder erreicht wird. Der Bereich zwischen den beiden gefun-
            denen  Punkten ist dann eine komplette Schwingung.  Hat  man
            nun  1000 Schwingungen pro Sekunde,  so besitzt  das  Signal
            eine Frequenz von 1000Hz, oder auch 1kHz.

            Je größer die Frequenz des Signals ist, umso höher empfinden
            wir den Ton, beziehungsweise das Geräusch.

            Eine  weiteres  Charakteristikum  einer Schwingung  ist  die
            Schwingungsform.  Als  Extrema  wären hier  z.B.  die  reine
            Sinus-Schwingung oder, als Gegenstück dazu, die reine Recht-
            eck-Schwingung zu nennen.  Dies sind jedoch Sonderfälle, die
            sich zwar heutzutage mit elektronischen Mitteln recht sicher
            und  gut herstellen lassen,  die jedoch wegen  ihrer  Ausge-
            prägtheit im Klang derart 'nervend' sind,  daß sie sich kaum
            jemand  länger anhören kann.  Wer das nicht  glaubt,  sollte
            sich  einmal den 440Hz-Normton (Kammerton a) am Telefon fünf
            Minuten lang anhören.

            Alle  Geräusche und Töne,  die wir heutzutage um uns  haben,
            sind Mischformen unterschiedlichster Signalformen.  Aus  der
            jeweiligen  Signalzusammensetzung können wir,  in Verbindung
            mit den sogenannten Hüllkurven, unterschiedliche Signalquel-
            len recht sicher voneinander unterscheiden.  So dürfte  eine
            Verwechselung  zwischen  einem  Waldhorn und  einem  Klavier
            einigermaßen selten vorkommen.

            Die  Hüllkurve beschreibt nun,  wie sich die Lautstärke  des
            jeweiligen Tones im Verhältnis zur Zeit verändert.  Da  gibt
            es z.B. Signale, die sehr schnell laut sind, um dann langsam
            und  gleichmäßig abzuklingen (Klavier),  die Violine dagegen
            erreicht wesentlich langsamer Ihr Lautstärkemaximum.

            Als  letzte wesentliche Eigenschaft jedes Tones  verarbeiten
            wir mehr oder weniger unbewußt den Frequenzbereich,  in  dem
            sich das Signalgemisch ungefähr befindet.  Es hört sich ein-
            fach anders an, wenn man Musik direkt aus der HiFi-Stereoan-

            lage  hört,  als wenn man dies über das Telefon  tut.  Nicht
            unbedingt  wegen eventueller Störungen und  Knack-Geräusche,
            sondern  wegen  des enorm eingeschränkten übertragenen  Fre-
            quenzbereichs.  Der  ist von der Post so bestimmt,  daß  die
            übertragenen  Töne hauptsächlich die  Tonhöhen  durchlassen,
            die zur Übermittlung von Sprache wesentlich sind.

            Im POKEY sind nun vier Register enthalten, die nichts weiter
            tun,  als  ein vorgegebenes Taktsignal  mit bestimmter  Fre-
            quenz  durch einen bestimmten,  ebenfalls vorzugebenden Wert
            zu teilen.  Dadurch entsteht dann eben ein niedrigerer  Ton.
            Da das jedoch zu primitiv wäre, und sich damit nach dem oben
            gesagten keine vernünftigen Klänge erzeugen ließen,  gibt es
            nun  noch  weitere Möglichkeiten.  Als erstes kann man  z.B.
            zwei solcher Zähler aneinanderhängen,  das heißt  also,  den
            Ausgang  des  einen Zählers mit dem Eingang des  zweiten  zu
            verbinden.  So  kann Zähler 2 an Zähler 1 angehängt  werden,
            genauso  wie Zähler 4 an Zähler 3.  Dieses Anhängen hat fol-
            genden Zweck:

            Durch die Größe der einzelnen Zählregister von 8 Bit  ergibt
            sich ein mögliches Teilerverhältnis im Bereich von 1 bis 256
            (intern wird auf den Registerwert eine %1 addiert). Hängt man
            nun  zwei  Zähler aneinander,  so erhält man  ein  mögliches
            Verhältnis  von 1 bis 65536,  da ja nun 16 Bit zur Verfügung
            stehen.

            Es gibt somit die Möglichkeit,  vier 8bit-Kanäle oder  einen
            16bit-Kanal  und zwei 8bit-Kanäle oder,  als  letztes,  zwei
            16bit-Kanäle zu betreiben. Alles dies wird über entsprechen-
            de Satusbits festgelegt.

            Die  eigentlichen  Teilerverhältniswerte werden in die  ent-
            sprechenden Register AUDIFREQ1 bis AUDIFREQ4 geschrieben.

            Als  Takt  kann für jedes der Register  ein  64kHz-,  15kHz-
            oder,  und das gilt nur für Kanal 1 und 3, ein  1,77MHz-Takt
            gewählt werden.  Je höher der Takt gewählt wird, desto höher
            ist bei gleichem Teilerverhältnis das Ausgangssignal.

            Aus der Kombination der Takteingangsfrequenzen und der  Tei-
            lerverhältnisse  lassen sich nun sämtliche  Frequenzbereiche
            von 0 bis 1,77/2 MHz= 887kHz  erreichen.  Die letzte Teilung
            durch  den Faktor zwei ist immer gegeben und hat den  Zweck,
            immer nur symmetrische Signale auszugeben. Hat man ein Digi-
            talsignal als letztes durch den Faktor zwei geteilt,  so ist
            dieses  Signal genauso lange 'an' wie 'aus',  also  zeitlich
            symmetrisch. Diese Bedingung ist wesentlich, denn ein unsym-
            metrisches  Signal  hört sich völlig anders an als ein  sym-
            metrisches,  so  daß sich bei Veränderung  von  Teilerwerten
            nicht  nur die Frequenz,  sondern auch die  Signalform,  und
            somit  der  Klang  ändern würde,  wenn nicht zum Schluß  das
            Signal immer in ein symmetrisches abgeändert würde.

            Neben  der  Frequenz läßt sich auch noch die  Art  und  Form
            eventueller  Verzerrung  einstellen.  Dazu wird das  normale
            Ausgangssignal,  das  von den Zählregistern geliefert  wird,
            logisch verknüpft mit zyklisch auftretenden 'Störungen'.

            Diese  Störungen werden über sogenannte Schieberegister  er-
            zeugt,  die wie eine lange Röhre funktionieren.  Schiebt man
            in das eine Ende der Röhre Signale hinein,  kommt irgendwann
            einmal am anderen Ende eben dieses Signal heraus.  Nimmt man
            dieses  Signal dann wieder,  um es am vorderen  Ende  wieder
            hineinzutun, hat man einen Zyklus, der endlos weitergeht. Um
            nun  nicht einen völlig 'langweiligen',  einmaligen Rhythmus
            herauszubekommen,  wendet man noch einen weiteren Trick  an:
            Die  Röhre wird an einigen Stellen 'angebohrt',  und die  an
            der  Stelle anliegenden Signale zusammen mit dem  End-Signal
            auf den Röhreneingang gelegt. Dadurch ist immer noch sicher-
            gestellt,  daß  es sich bei dem ganzen Vorgang um einen zyk-
            lischen  handelt,  aber dessen Wiederholrate ist  wesentlich
            geringer.

            Es sind nun im POKEY drei dieser rückgekoppelten  Schiebere-
            gister, die als Polynom-Zähler bezeichnet werden, vorhanden.
            Es gibt einen 4 Bit langen,  einen mit 5 Bit und einen,  der
            umschaltbar entweder 17 oder 9 Bit Länge aufweist.

            Die  Frequenz wurde,  wie schon erwähnt,  durch die Werte in
            den Frequenzregistern AUDIFREQ1 bis AUDIFREQ4 festgelegt.

            Die Verzerrung und die 16 stufige Lautstärke werden hingegen
            über  die Kontrollregister AUDICNTL1 bis AUDICNTL4  program-
            miert. Die einzelnen Bits dieser Kontrollregister bedeuten:


                      Bit            Bedeutung
                      -------------------------------------------------
                       0             Diese vier Bit sind
                       1             zuständig für die Lautstärke.
                       2             Es sind Werte zwischen $00 und
                       3             $0f möglich (%0000 bis %1111).

                       4             VOLUME_ONLY

                       5             Diese drei Bit werden zur
                       6             Auswahl einer der sechs Verzer-
                       7             rungsmöglichkeiten benutzt (s.Tab).




            Tabelle für die Wertigkeiten der Bits 5,6 und 7 der Register
            AUDICNTLn:



            Bit  7    6    5         Signalmischung
            -----------------------------------------------------------

                 0    0    0         Das vom Zählregister stammende Sig-
                                     nal wird zuerst mit dem  5bit-Poly-
                                     nom,  dann  mit  dem  17bit-Polynom
                                     verknüpft,  bevor es auf die letzte
                                     Teilerstufe  durch den Faktor  zwei
                                     geschickt wird.

                 0    x    1         Es  findet nur eine Verknüpfung mit
                                     dem  5bit-Polynom  statt  vor   der
                                     letzten Division.

            Bit  7    6    5         Signalmischung (Fortsetzung)
            -----------------------------------------------------------
                 0    1    0         Das vom Zählregister stammende Sig-
                                     nal  wird zuerst mit dem 5bit-Poly-
                                     nom,   dann  mit  dem  4bit-Polynom
                                     verknüpft,  bevor es auf die letzte
                                     Teilerstufe  durch den Faktor  zwei
                                     geschickt wird.

                 1    0    0         Die  Ausgangsfrequenz wird mit  dem
                                     Signal des 17bit-Polynoms verknüpft
                                     und  dieses Signal auf  die  letzte
                                     Teilerstufe geschickt.

                 1    x    1         Diese 2 Kombinationen ergeben einen
                                     reinen  Ton,  da keinerlei Verknüp-
                                     fung des Ausgangssignals mit  einem
                                     der Polynome geschieht, sondern nur
                                     die letzte Justage-Division.

                 1    1    0         Es erfolgt nur eine Verknüpfung der
                                     Ausgangsfrequenz  mit dem vier  bit
                                     breiten  Polynom.  Danach wird  das
                                     Ergebnis,  genau  wie alle anderen,
                                     noch  einmal  durch den  Wert  zwei
                                     geteilt.

            Das  'x'  in der Tabelle bedeutet,  daß hier  '0'  oder  '1'
            stehen darf.

            Das  VOLUME_ONLY-Bit  aus jedem der vier  AUDICNTLn-Register
            schaltet  die gesamte interne Zähl-,  Verzerrungs- und  Ver-
            knüpfungsmaschinerie aus und bestimmt,  daß als Ausgangssig-
            nal  genau die der Lautstärke entsprechende Spannung  ausge-
            sendet  werden soll.  Ist also VOLUME_ONLY gesetzt  und  die
            Lautstärke auf 16 (volle Lautstärke), so wird die im Fernse-
            her/Monitor  befindliche  Lautsprechermembran  so  weit  wie
            möglich aus ihrer Ruheposition herausgelenkt. Setzt man dann
            die Lautstärke wieder auf Null zurück,  so fällt die Membran
            ebenfalls wieder in ihre Ruheposition zurück, es ergibt sich
            ein Knacken im Lautsprecher.

            Die   Aufgabe dieser Zusatzeinrichtung ist natürlich  nicht,
            nur ein Knackgeräusch zu erzeugen. Mit dieser Methode unter-
            liegt der Programmierer annähernd keiner Beschränkung bezüg-
            lich Signalform und Frequenz,  da jede einzelne Membranbewe-
            gung  des  Lautsprechers programmiert werden  kann.  Es  ist
            jedoch  bei allzu schnellen Amplitudenänderungen (Amplitude=
            Höhe des Ausschlags bei einer Schwingung) darauf zu  achten,
            daß  zwar  der Atari diese Signale herausgeben  kann,  harte
            Kurven  jedoch durch die dann folgende  Modulation/Demodula-
            tion im Fernseher erheblich abgerundet werden.  Dies  dürfte
            jedoch im Normalfall keine Einschränkung darstellen,  da ein
            Fernseher heutzutage oft schon HiFi-Qualitäten besitzt.

            Im  Großen und Ganzen jedoch kann gesagt werden,  daß zumin-
            dest  mit entsprechendem Softwareaufwand der Atari ohne  Zu-
            satzgeräte alle gewünschten Akustikeffekte erzeugen kann.

            Man  denke da z.B.  an Softwarepakete,  die schon die  alten
            400/800 ohne zusätzliche Hardware haben sprechen lassen. Die
            Sprache war sogar mittelmäßig verständlich.

            Neben  diesen vier,  auf jeden Kanal einzeln  bezogenen  Re-
            gistern  existiert noch ein weiteres,  für die  Tonerzeugung
            wesentliches Register: AUDIOCOM.

            Diese Adresse beinhaltet die folgenden 8 Steuerbits:


                      BIT       Erläuterung
                      -------------------------------------------------

                       0        Schaltet  den  Haupttakt  für  die  vier
                                Frequenzregister  von  64kHz  auf  15kHz
                                zurück, wenn es gesetzt wird.

                       1        Ist  dieses  Bit gesetzt,  wird  in  den
                                Ausgang  von  Kanal 2 ein  Hochtonfilter
                                eingesetzt,  dessen  Characteristik  von
                                Kanal 4 bestimmt wird.

                      BIT       Erläuterung (Fortsetzung)
                      -------------------------------------------------


                       2        In den Ausgang von Kanal 1 wird ein  von
                                Kanal 2 gesteuertes Hochtonfilter einge-
                                fügt.

                       3        Durch Setzen dieses Bits wird Kanal 4 an
                                Kanal  3  angehängt,  so daß ein  16bit-
                                Register entsteht.

                       4        Ist dieses Bit gesetzt,  wird Kanal 2 an
                                Kanal 1 gehängt.

                       5        Dieses  Bit  bewirkt,  daß Kanal  3  mit
                                einer  Grundfrequenz von  ca.  1,77  MHz
                                betrieben wird.

                       6        Das gleiche wie bei Bit 5 für Kanal 1.

                       7        Beim  Setzen dieses Bits wird das 17bit-
                                Polynom in ein 9bit langes Polynom  ver-
                                wandelt.




            Als  allgemeine Berechnungsgrundlage für das Verhältnis  von
            Ein- zu Ausgangsfrequenz kann die Gleichung

            Ausgangsfrequenz = Eingangsfrequenz / 2 ( AUDIFREQn + Off)

            verwendet werden,  wobei Off den Wert 4 erhält, wenn es sich
            bei dem Teiler um einen 8bit-Teiler handelt.  Ist es dagegen
            ein  16bit-Teiler,  muß  Off aus technischen Gründen  mit  7
            angesetzt werden.

            Neben  den Tonerzeugungsaufgaben besitzen diese Zähler  noch
            eine weitere Aufgabe.

            Wenn  einer  der Zähler 1,  2 oder 4 auf Null  zurückgezählt
            hat, wird automatisch vom POKEY ein Interrupt ausgelöst. Die
            Zähler können also genauso gut als Timerbausteine fungieren.

            Um alle Frequenzregister auf die Werte zu setzen,  die  Pro-
            grammiert  wurden  (vor  allem  sinnvoll  beim  Betrieb  als
            Timer!),  wird  einfach  irgend ein Wert in  Adresse  STIMER
            geschrieben.

            Als  'Abfallprodukt' der Polynomzähler entsteht in  Register
            RANDOM eine 8bit-Zufallszahl, die dort entsprechend ausgele-
            sen werden kann.  Sie besteht aus den höchsten 8 Bit des 17-
            /9-bit Polynomzählers.

            Abschließend  zu diesem Thema folgt noch eine  Tabelle,  aus
            der die Teilerverhältnisse der Frequenzregister bei bestimm-
            ten Notenwerten hervorgehen.  Dazu sind folgende Werte  vor-
            auszusetzen:

            AUDIOCOM  = $00      ; also nichts 'Besonderes'

            AUDICNTLn = $Ax      ; x ist die Lautstärke von 0..15

            Mit den genannten Daten,  die nur ein Beispiel sein  sollen,
            ergeben sich die auf der umseitig gedruckten Tabelle folgen-
            de Werte für AUDIOFREQn:

            Es  lassen sich aber auch praktisch alle anderen  Frequenzen
            und somit Notenwerte mit dem Atari erreichen. Dies wird auch
            in  Vergleichen  zwischen den einzelnen  Mikrocomputern  oft
            falsch  dargestellt.  Der Atari verfügt nicht nur über 3 1/2
            Oktaven Frequenzumfang.  Die höchsten erzeugbaren Frequenzen
            liegen weit über der höchsten wahrnehmbaren  Frequenz.  Auch
            die tiefste erzeugbare Frequenz ist nicht mehr hörbar.

            Note           AUDIFREQn Hexadezimal    Dezimal
            -----------------------------------------------------------

            C (tiefes)               $f3            243
            Cis oder Des             $e6            230
            D                        $d9            217
            Dis oder Es              $cc            204
            E                        $c1            193
            F                        $b6            182
            Fis oder Ges             $ad            173
            G                        $a2            162
            Gis oder As              $99            153
            A                        $90            144
            Ais oder B               $88            136
            H                        $80            128
            c (mittleres)            $79            121
            cis oder des             $72            114
            d                        $6c            108
            dis oder es              $66            102
            e                        $60             96
            f                        $5b             91
            fis oder ges             $55             85
            g                        $51             81
            gis oder as              $4c             76
            a                        $48             72
            ais oder b               $44             68
            h                        $40             64
            c'                       $3c             60
            cis' oder des'           $39             57
            d'                       $35             53
            dis' oder es'            $32             50
            e'                       $2f             47
            f'                       $2d             45
            fis' oder ges'           $2a             42
            g'                       $28             40
            gis' oder as'            $25             37
            a'                       $23             35
            ais' oder b'             $21             33
            h'                       $1f             31
            c''                      $1d             29

            ***********************
            *                     *
            *                     *
            *   TASTATURABFRAGE   *
            *   ---------------   *
            *                     *
            ***********************


            Wird  irgend  eine Taste auf der  Tastatur  des  600XL/800XL
            gedrückt,  die  nicht eine der seitlich montierten  Spezial-
            tasten  oder SHIFT oder CONTROL ist,  wird ein Interrupt vom
            POKEY ausgelöst,  der dem Betriebssystem Mitteilung von  dem
            Tastendruck  machen soll.  Von der entsprechenden Interrupt-
            routine wird dann der Tastaturkode aus Register KBCODE  aus-
            gelesen  und für die weitere Verarbeitung im Vertical  Blank
            Interrupt gesichert.

            Eine  Ausnahme hiervon stellt die BREAK-Taste dar:  Wird sie
            gedrückt,  so  erfährt das Bertiebssystem davon  durch  eine
            andere  Statusmeldung  des  POKEY  und  reagiert  dann  ent-
            sprechend durch die Break-Routine darauf.

            Ist es jedoch eine der normalen Tasten, wird das Drücken vom
            POKEY  dadurch bemerkt,  daß er ständig eine Matrix  abfragt
            (pollt), in deren Kreuzungspunkte die einzelnen Tastenschal-
            ter liegen.  Ist nun ein solcher Taster geschlossen, bemerkt
            der  POKEY  dies und erkennt an  seinen  Registern,  welcher
            Schnittpunkt, also welcher Schalter das ist.

            Darüberhinaus besitzt er zwei Signalleitungen,  die ihm mit-
            teilen,  wenn  die  SHIFT- oder CONTROL-Taste gedrückt  ist.
            Alleine  das Drücken dieser beiden Tasten löst  noch  keinen
            Interrupt aus,  verändert jedoch bei einem richtigen Tasten-
            druck dessen Kode.

            Es  sind  maximal 64 Tasten im System erlaubt.  Sie  belegen
            somit die Kodes 0 bis 63 ($00 bis $3f).  Ist die SHIFT-Taste
            gedrückt,  verschiebt sich der generierte Kode um  64,  also
            auf den Bereich 64 bis 127 ($40 bis $7f).

            Im  Falle  der gedrückten CONTROL-Taste würde sich der  Kode
            dann  nochmal um 64 verschieben,  also um insgesamt 128  auf
            den Bereich von 128 bis 191 ($80 bis $bf). Werden SHIFT- und
            CONTROL-Taste gleichzeitig gedrückt,  hat die  CONTROL-Taste
            Vorrang,  so  daß  also insgesamt 192 Tastenkodes  entstehen
            können.

            Um  nun diesen Matrix-Nummern einen sinnvollen  ATASCII-Kode
            zuweisen zu können,  wird eine Tabelle benutzt.  Der  Anfang
            der Tabelle liegt ab (KEYDEFPTR),  also im Initialisierungs-
            zustand  ab Adresse KEYDEF.  Die 192 Byte große Tabelle  be-
            sitzt die folgenden Einträge,  bei denen nur diejenige Funk-
            tion  eingetragen  ist,  die sich ohne SHIFT- oder  CONTROL-
            Taste ergibt:



                    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
                    ----------------------------------------------

            $00:    L  J  ; /1//2/ K  +  *  O     P  U /C/ I  -  =

            $10:    V     C /3//4/ B  X  Z  4     3  6 /E/ 5  2  1

            $20:    , /S/ .  N     M  / /A/ R     E  Y /T/ T  W  Q

            $30:    9     0  7 /B/ 8    F  H  D    /P/ G  S  A



            /C/ ist die RETURN-Taste
            /S/ ist die Leertaste
            /A/ ist die ATARI-Logo-Taste
            /E/ ist die ESCape-Taste
            /T/ ist die TABulator-Taste
            /B/ ist die BackSpace-Taste
            /P/ ist die CAPS-Taste
            /1/ bis /4/ sind die zwar nicht hardwaremäßig,  aber dennoch
                softwaremäßig vorhandenen Funktionstasten des 1200XL  F1
                bis F4.


            Ob  die SHIFT-Taste gedrückt ist,  besagt Bit 3 von  SKSTAT.
            Ist das Bit Null, ist die SHIFT-Taste gedrückt.

            Eine  genauere  Beschreibung  des Registers  SKSTAT  erfolgt
            noch später.





            ***********************
            *                     *
            *                     *
            *   PADDLESTEUERUNG   *
            *   ---------------   *
            *                     *
            ***********************


            Paddles sind Eingabegeräte,  die nicht nur digitale  Signale
            liefern wie z.B.  Joysticks, sondern die einen analogen Wert
            liefern,  in diesem speziellen Fall handelt es sich um einen
            Widerstandswert.

            Da der Atari bekanntlich nur digitale Signale richtig verar-
            beiten kann,  stellt sich für ihn,  genauer:  Für den POKEY,
            das Problem, aus diesem Widerstandswert eine Zahl zu machen.

            Diesen  Vorgang  nennt man schlichtweg  Analog/Digital-Wand-
            lung,  was  sich englischsprachig abgekürzt A/D-C  schreibt,
            wobei das 'C' für Converting steht.

            Dieser  gesamte Komplex der Analog/Digital-Wandlung und  der
            artverwandten  Digital/Analog-Wandlung  ist  bis  heute  die
            große Schwachstelle an jedem Computersystem.  Nicht, daß die
            Techniker nicht wüßten, nach welchem Verfahren man die Wand-
            lung vornehmen soll.  Da gibt es einige wenige, die sich als
            sinnvoll  in den letzten Jahren herauskristallisiert  haben.

            Dagegen  ist es wesentlich schwieriger,  einen Kompromiß  zu
            finden  aus mittlerer Wandlungsgeschwindigkeit und  Genauig-
            keit des Systems.

            Es ist für einen elektronischen Schaltkreis relativ einfach,
            festzustellen,  ob  er größer oder kleiner/gleich einer Ver-
            gleichsspannung ist.  Es gibt jedoch schon Justierungsaufga-
            ben,  wenn derselbe Baustein feststellen soll,  ob sich  die
            Eingangsspannung innerhalb eines bestimmten Bereichs,  eines
            sogenannten Fensters, befindet.

            Soll der Baustein nun herausfinden, in welchem der z.B. 4096
            Fenster  sich der Eingangsspannungswert befindet,  dann  ist
            das eine langwierige und schwierige Angelegenheit.

            Der  POKEY  ist  nun ein  Baustein,  der  gleichzeitig  acht
            solcher  Kanäle überwacht und ausmißt.  Damit er das  einige
            Male  pro  Sekunde tun kann,  betrachtet er nicht  allzuviel
            mögliche Fenster, sondern nur 228 Stück. Die einzelnen Werte
            der POT-Eingänge (POT steht für Potentiometer, ein veränder-
            barer  elektrischer  Widerstand)  können aus  den  Registern
            POT0 bis POT7 ausgelesen werden.

            Es ist zu beachten,  daß der 600XL/800XL nur insgesamt  vier
            der acht möglichen Kanäle benutzen kann, da er nur über zwei
            Joystickbuchsen verfügt.

            Beim  Vergleich  der Adressenliste für den POKEY fällt  auf,
            daß die Adressen AUDI....n und POTn gleich sind.  Das berei-
            tet auch keinerlei Probleme,  da die AUDI....n-Werte nur  zu
            schreiben und die POTn-Werte nur zu lesen sind.

            Die  eigentliche  Meßprozedur läßt sich über  zwei  mögliche
            Register  starten.  Das eine Register ist SKCNTL,  in dessen
            Bit 2 festgelegt wird,  ob es sich um eine normale oder eine
            sogenannte Schnellmessung handelt.  Ist es eine  Schnellmes-
            sung, so ist sie allerdings recht ungenau.

            Das  andere  Register nennt sich POTGO und wird einfach  mit
            irgendwelchen Daten beschrieben, um eine Messung zu initiie-
            ren.

            Jeder  Kanal besitzt ein Bit in dem  Statusregister  ALLPOT,
            das Auskunft darüber gibt, ob der Kanalwert des entsprechen-
            den  Kanals 'fertig' ist oder nicht.  Ist das  entsprechende
            Bit  gesetzt,  so gilt der Wert nicht,  die Messung ist noch
            nicht fertig.






            *****************************
            *                           *
            *                           *
            *   SERIELLE EIN-/AUSGABE   *
            *   ---------------------   *
            *                           *
            *****************************



            Unter   serieller  Ein-/Ausgabe  versteht  man  das   Senden
            und/oder Empfangen von Daten über hauptsächlich eine einzige
            Datenleitung.  Die serielle Ein-/Ausgabe steht im  Gegensatz
            zur  parallelen Ein-/Ausgabe,  bei der z.B.  komplette Bytes
            auf  nebeneinander verlaufenden elektrischen Leitungen  oder
            anderen Informationsstrecken gesendet oder empfangen  werden
            können.  Solch  eine parallele Übertragungsstrecke ist  z.B.
            der  vielleicht  von Druckern her bekannte  Centronics-Stan-
            dard.

            Steht zur Datenübertragung nur eine einzige Datenleitung zur
            Verfügung,  so muß man sich überlegen, wie die Daten darüber
            zu transportieren sind.

            Will  man  nur  senden oder nur  empfangen,  ist  schon  ein
            Problem gelöst. Soll jedoch sowohl empfangen als auch gesen-
            det  werden  können,  stellt sich die Frage,  ob man  diesen
            Datentransport  nur  über eine Leitung  laufen  läßt  (Halb-
            Duplex),  oder  ob  dafür zwei Leitungen installiert  werden
            (Voll-Duplex).

            Wird das Halb-Duplex-Übertragungsverfahren gewählt,  hat man
            das Problem,  erkennen zu müssen,  ob und welches der  ange-
            schlossenen Geräte gerade senden will.

            Bei Verwendung des Voll-Duplex-Übertragungsverfahrens treten
            an Stelle der oben beschriebenen Übertragungsprobleme höhere
            Leitungskosten auf.

            Da  die Leitungskosten jedoch bei solch kurzen  Verbindungen
            wie  denen des Atari-Systems vernachlässigbar gering sind im
            Gegensatz zu dem Halb-Duplex-Umschaltaufwand,  hat sich  die
            Firma  Atari  für  das für den  Programmierer  und  Anwender
            wesentlich angenehmere Zwei-Leitungsverfahren entschieden.

            Ist  vom  Entwickler diese Frage  entschieden,  stellt  sich
            gleich die nächste: Synchrone oder asynchrone Übertragung?

            Da es sich beim Atari jedoch im Prinzip um selten auftreten-
            de  Übertragungsprozesse handelt,  wird man hier gleich  auf
            die asynchrone Übertragungsweise zurückgreifen.

            Unter  asynchroner Übertragung verstehen wir ein  Verfahren,
            bei dem der Empfänger ständig darauf wartet,  daß einmal ein
            Zeichen übertragen wird.  Anfang und Ende eines solchen Zei-
            chens sind durch ein,  dem Zeichen  vorangehendes,  Startbit
            sowie  durch  ein,  eineinhalb oder zwei Stopbits,  die  dem
            Zeichen folgen müssen, gekennzeichnet.

            Richtig,  das  ist  kein Druckfehler:  Im Gegensatz  zu  der
            Auffassung,  daß  ein Bit die kleinste darstellbare Informa-
            tionseinheit sei,  gibt es nun bei der Datenübertragung auch
            halbe Bits.  Wie dies zustandekommt,  wird leicht klar, wenn
            man sich etwas näher ansieht, wie die Zeichen mit den Start-
            und Stopbits durch die Leitung kommen.

            Bei diesem Übertragungsverfahren wird davon ausgegangen, daß
            immer nur genau ein Zeichen gesendet wird, das in Start- und
            Stopbits  'eingepackt'  ist und außerdem  vom  Programmierer
            sowohl  beim  Empfänger  als auch beim  Sender  die  gleiche
            Übertragungsgeschwindigkeit eingestellt ist. Diese Geschwin-
            digkeit ist das Her(t)z jeder seriellen Übertragung. Während

            bei  einer parallelen Strecke eine Leitung sagt "Hallo  Emp-
            fänger, jetzt kommt ein Byte!" und der Empfänger nach Erken-
            nen  des  Zeichens die Meldung  bringt  "Hallo  Sender,  das
            Zeichen wurde gelesen und verarbeitet", gibt sich hier diese
            Möglichkeit  nicht,  so daß man davon ausgehen muß,  daß der
            Empfänger genau dann ein Bit zu lesen versucht,  wenn es der
            Sender zur Verfügung stellt.


            Genau  diesen  Effekt erreicht man  durch  den  kurzzeitigen
            Gleichlauf  von Sender und Empfänger,  wenn man beiden  mit-
            teilt,  daß  jedes Bit eine ganz bestimmte Zeit anliegt.  Da
            dieser Gleichlauf nur immer ein Zeichen lang existieren  muß
            (denn dann kommt eine neue Synchronisation durch das nächste
            Startbit!), ist das technisch recht einfach lösbar.

            Im  Laufe  der  letzten 30 Jahre haben sich  ganz  bestimmte
            Übertragungsgeschwindigkeiten  durchgesetzt.   Von  Grundge-
            schwindigkeiten  ausgehend,  hat man es durch immer  bessere
            Technik  immer  wieder geschafft,  die  Übertragungsrate  zu
            verdoppeln.  So  existieren  heute die  folgenden  allgemein
            verwendeten Übertragungsraten


                       45,45   Bit/Sekunde (nur in den USA)
                       50      Bit/s     z.B. bei BTX
                      100         "
                      150         "
                      300         "
                      600         "
                    1.200         "      z.B. bei BTX
                    2.400         "
                    4.800         "
                    9.600         "
                   19.200         "
                   38.400         "


            Höhere  Übertragungsraten sind bei seriellen  Schnittstellen
            sehr selten, da es dabei technische Probleme gibt.

            Hat  man es nun also geschafft,  den Sender  beziehungsweise
            Empfänger auf eine bestimmte Übertragungsrate  einzustellen,
            so ist bekannt,  wie lang ein Bit auf der Übrtragungsleitung
            anliegt:

            Ist z.B.  die Übertragungsrate auf 19.200 Bit/s eingestellt,
            ist  jedes Bit 1/19.200 Sekunden,  also ca.  52  millionstel
            Sekunden  lang.  Das ist nicht sehr viel,  aber dem Computer
            genügt es.

            Um nun ein Stopbit zu senden,  wird einfach die Sendeleitung
            für die Dauer eines Bits in den Ruhezustand versetzt. Dieser
            Ruhezustand  kann jedoch auch länger dauern,  z.B.  die 1,5-
            fache Dauer eines Bits; also 1,5 Stopbit!

            Nach dieser etwas technischen Einleitung dürfte eine  Zeich-
            nung von zwei zu übertragenden Zeichen ganz hilfreich sein:

            Es  sollen die Bytes $53 und $8a übertragen werden mit einem
            Startbit und einem Stopbit:

            $53 = %0101 0011
            $8a = %1000 1010

            f   = Leitung im Ruhezustand (SPACE, frei)
            S   = Startbit, immer MARK
            s   = Stopbit, immer SPACE


            -----    --  --    -------- --  --      --  --  ------ SPACE
                 ----  --  ----           --  ------  --  --       MARK

            ffff S 0 1 0 1 0 0 1 1 s ffff S 1 0 0 0 1 0 1 0 s ffff


            Die  Bereiche ffff können beliebig lang sein bei  der  asyn-
            chronen Datenübertragung (daher der Name:  Asynchron,  nicht
            zeitlich festgelegt).

            Nachdem  alle diese Dinge entschieden sind,  ist man nun  in
            der Lage,  einzelne Zeichen (Bytes) zu übertragen,  und zwar
            sowohl zu senden, als auch zu empfangen.

            Um  nun  jedoch eine richtige Datenübertragung  zustande  zu
            bekommen,  ist  es weiterhin noch notwendig,  sich ein soge-
            nanntes Protokoll zu überlegen,  nach dem die einzelnen  Ge-
            räte an der seriellen Leitung angesprochen werden sollen und
            anhand dessen dann komplette Datenblöcke (durch zum Beispiel
            NEWLINE  abgeschlossene  Zeilen oder  Blöcke  fester  Länge)
            gehandhabt werden können.

            Bei Atari sind fast alle an der seriellen Leitung  hängenden
            Geräte  intelligent,  das heißt,  daß sie einen eigenen Kon-
            trollbaustein besitzen,  der die Kommunikation mit dem Host-
            system, also dem Atari 600XL/800XL übernimmt.

            Das einzige nicht intelligente Gerät ist der Cassettenrecor-
            der.  Er wird vom Benutzer ein- und ausgeschaltet,  wenn der
            Computer dies durch Huptöne empfiehlt.

            Andere  Geräte,  wie zum Beispiel der Drucker oder die  ver-
            schiedenen Diskettenstationen lauschen ständig die am  seri-
            ellen  Bus  liegenden Informationen sowie die eine  Leitung,
            genannt KOMMANDO:L,  ab.  Liegt KOMMANDO:L auf dem logischen
            Pegel Null,  bedeutet dies, daß jetzt ein Gerät angesprochen
            werden soll.  Dann sendet das Hostsystem die  Geräteart-Ken-
            nung  und die Gerätenummer sowie die Blocknummer bei Disket-
            tenstationen zusammen mit dem Kommando über den Bus,  um das
            richtige  Gerät  'aufzuwecken'.  Ist das  adressierte  Gerät
            vorhanden  und bereit für die Berabeitung dieses  Kommandos,
            so  wird es sich zurückmelden mit einer Acknowledge-Meldung:
            Es  sendet  ein  'A' und eine  kurze  Statusinformation  mit
            Checksumme. Ist das Gerät beziehungsweise das Kommando dage-
            gen nicht in Ordnung,  wird ein 'N' (=Negative  Acknowledge)
            zurückgesendet.

            Ist das Gerät bereit, beginnt der eigentliche Datentransfer,
            bei  dem  die  zu schreibenden oder zu lesenden  Zeichen  im
            Block gesendet werden,  wobei die KOMMANDO:L-Leitung  wieder
            auf Eins gesetzt wird.

            Sind  alle  Zeichen übertragen,  oder glaubt  zumindest  der
            Sender,  alle  Zeichen übertragen zu haben,  sendet er unter
            Umständen  noch eine Prüfsumme.  Ist das Peripheriegerät zum
            Beispiel  eine Diskettenstation mit dem  Befehl,  einen  be-
            stimmten  Block zu schreiben,  so beginnt es mit der eigent-
            lichen Arbeit (dem Schreiben des Blockes), nachdem es die zu
            schreibenden Daten vom Hostsystem erhalten hat.  Stellt sich
            nun jedoch heraus,  daß der zu schreibende Block defekt ist,
            sendet die Diskettenstation ein 'E' als Error-Meldung an das
            Hostsystem zurück.  Geht die Operation im ganzen gut, sendet
            das Gerät ein 'C' für 'Completed' zurück.

            Das  Hostsystem wartet während der gesamten Zeit der  Verar-
            beitung  auf  eine positive oder  negative  Rückmeldung  des
            Gerätes. Erscheint sie nach einigen (im Normalfall 7) Sekun-
            den  immer  noch nicht,  wird die Operation  vom  Hostsystem
            dadurch abgebrochen, daß ein Timeout eintritt.

            In  diesem Fall wiederholt das Betriebssystem die  Operation
            so  oft,  wie es der Wert in CRETRY vorgibt  (im  Normalfall
            noch 1 mal).

            Es ist dann Aufgabe des Hauptprogramms, sicherzustellen, daß
            eine  eventuelle  Fehlermeldung über die Statusregister  des
            CIO oder SIO richtig interpretiert wird.

            Viel einfacher ist dies alles beim Cassettenrecorder.

            Dabei werden die Daten einfach nur nach einer kurzen  Warte-
            zeit  gesendet und davon ausgegangen,  daß sie schon richtig
            ankommen werden.  Beim Lesen wird allerdings eine eigentlich
            sehr sinnvolle,  leider nur sehr ungenaue Kontrolle  vollzo-
            gen: Die Lesegeschwindigkeit stellt sich automatisch auf die
            empfangene Datenrate ein.  Dies wird dadurch realisiert, daß
            jeder  Block auf der Cassette mit zwei ganz bestimmten  Byte
            beginnen muß.  Sie haben beide den Wert $aa, was binär %1010
            1010  darstellt und sich an sich sehr gut für die Synchroni-
            sation eignet.

            Wer das Cassettenformat einmal verbessern will, kann auspro-
            bieren,  ob die Übertragung sicherer wird, wenn nicht diese,

            sondern zwei andere Byte verwendet werden: %1100 1100. Damit
            müßten  sich mit entsprechender Softwareänderung  wesentlich
            genauere Meßergebnisse herstellen lassen.

            Außerdem  gibt es bei der Cassette noch einem  weiteren  we-
            sentlichen  Unterschied  im Übertragungsverfahren  zu  allen
            anderen  bislang  bekannten Geräten:  Der  Cassettenrecorder
            'versteht' keine reinen Digitalsignale,  sondern er benötigt
            zum korrekten Arbeiten zwei unterschiedliche Töne.  Ein tie-
            ferer  Ton aus Tonkanal 2 stellt die logische Null  dar  und
            ein  höherer  Ton aus Tonkanal 1 stellt demzufolge  die  lo-
            gische  1  dar.  Diese Töne haben gegenüber Logikpegeln  den
            Vorteil,  daß sie direkt auf dem Magnetband gespeichert wer-
            den können.  Bei Pegeln (die sich theoretisch auch speichern
            lassen)  gibt es bei Cassettenrecordern  dieser  Preisklasse
            und  derart geringen Übertragungsraten erhebliche technische
            Schwierigkeiten. Nicht umsonst sind die echten Computerband-
            maschinen  immer noch recht große,  teure  Schränke,  können
            dagegen  jedoch auch in der Übertragungsrate leicht mit  den
            heutigen Atari-Diskettensystemen konkurrieren.


            Der POKEY hat nun bei alledem eine ganze Reihe von Aufgaben:

            Erstens übernimmt er die Erzeugung der Sende beziehungsweise
            Lesetakte.  Ist der POKEY der Erzeuger der  Taktsignale,  so
            gibt er sie über die Leitung CLOCK OUT aus.

            Der  Sendetakt kann durch die Taktrate in Kanal 2,  Kanal  4
            oder  durch  einen externen Takt über die Leitung  CLOCK  IN
            bestimmt werden.

            Für den Lesetakt gilt das gleiche wie für den Sendetakt. Die
            Sendedaten  wechseln  jeweils bei der steigenden Flanke  des
            Taktsignals,  wohingegen  die  Lesedaten bei  der  fallenden
            Flanke  gelesen werden.  Dies soll sicherstellen,  daß  beim
            Lesen ein halber Takt gewartet wird,  um dem Signal Zeit zum
            Einschwingen zu geben.

            Als Zweites hält der POKEY die zu sendenden Daten im  SEROUT
            und  die gerade empfangenen Daten im SERIN Register für  die
            weitere Verarbeitung fest.

            Wird in das SEROUT-Register ein Wert geschrieben, so wird er
            sofort  in das parallel/seriell-Wandlungsregister  geschrie-
            ben,  wenn  dieses  frei ist.  Danach gibt der  POKEY  einen
            Interrupt, in dem er ankündigt, daß das SEROUT-Register leer
            sei,  und  der  POKEY damit bereit sei,  ein  neues  Zeichen
            anzunehmen,  obwohl  der Baustein selbst noch mit dem Senden
            des alten Datums beschäftigt ist.

            Wird  kein  neuer Wert in das  SEROUT-Register  geschrieben,
            erfolgt nach dem Entleeren des parallel/seriell-Wandlungsre-
            gisters ein weiterer Interrupt, der angibt, daß die Übertra-
            gung des letzten Zeichens beendet sei.

            Beim  Lesen  gibt der POKEY einen  Interrupt,  wenn  er  ein
            komplettes Zeichen gelesen hat. Das Zeichen übergibt er dann
            im SERIN-Register und setzt jedoch noch einige Statusbits im
            SKSTAT-Register.  Es  kann zum Beispiel passieren,  daß  der
            Computer  nicht  rechtzeitig  die in SERIN  stehenden  Daten
            liest,  und  der POKEY ein neues Byte empfängt,  nach  SERIN
            schreibt  und somit die alte  Information  überschreibt.  In
            diesem Fall ist das Bit 6 'serieller Überlauf' gesetzt.

            Stimmt  dagegen  etwas mit den Start/Stopbits  des  Zeichens
            nicht,  so  wird das 'Framing-Fehler'-Bit Nummer 7  gesetzt.
            Dieser  Framing- (Rahmen-) Fehler kann auftreten,  wenn  zum
            Beispiel  ein BREAK-Zeichen über die serielle  Schnittstelle
            gesendet  wird.  Dies ist kein eigentliches Zeichen, sondern
            ein  Synchronisations- und  Resetmechanismus,  bei  dem  die
            Sendeleitung für ungefähr eine viertel Sekunde auf LOW (also
            aktiv,  MARK)  gezogen wird.  Dabei wird der POKEY natürlich
            ein Zeichen $00 erkennen,  danach jedoch die beiden Stopbits
            vermissen.

            Will man genau wissen,  welchen Pegel die Sende/Empfangslei-
            tung besitzt, so kann man Bit 4 von SKSTAT testen.

            Dieses  Bit ist eine Hardwarekopie des  Eingangssignals  und
            bietet  neben dieser (noch nicht programmierten) Möglichkeit
            der BREAK-Erkennung diejenige,  die Übertragungsgeschwindig-
            keit festzustellen,  ohne direkt die  seriell/parallel-Wand-
            lung des POKEY initialisieren zu müssen.

            Ist einmal ein Fehler aufgetreten, so wird das entsprechende
            Bit  dadurch  zurückgesetzt,  daß  ein  beliebiger  Wert  in
            SKRESET geschrieben wird.

            Die einzelnen Bits des SKSTAT haben die folgende Bedeutung:

            Bit       Bedeutung
            ------------------------------------------------------------
            7    MSB  Framing-Fehler bei der seriellen Übertragung

            6         Overrun-Fehler  bei der seriellen Übertragung.  Es
                      wurde wenigstens ein Zeichen verloren.

            5         Overrun-Fehler bei der Tastatureingabe.  Es  wurde
                      wenigstens ein Tastendruck verloren.

            4         Dies  ist die direkte Hardwarekopie des  seriellen
                      Eingangs.  Dieses  Bit wird nur für  Spezialanwen-
                      dungen wie Synchronisation abgefragt.

            3         Die SHIFT-Taste auf der Tastatur ist gedrückt.

            2         Die letzte Taste ist immer noch gedrückt

            1         Das  Schieberegister der parallel/seriell-Wandlung
                      arbeitet immer noch,  das heißt, die Datenübertra-
                      gung ist noch nicht abgeschlossen. Dieses Bit sagt
                      zwar  nichts darüber aus,  ob nicht  ein  weiteres
                      Datenbyte  in das SEROUT-Register geschrieben wer-
                      den darf,  aber wenn man keine genauen Informatio-
                      nen über den Status der seriellen Ausgabe hat,  so
                      sollte  man unbedingt das Einswerden  dieses  Bits
                      abwarten.

            0    LSB  Dieses Bit ist nicht benutzt und ist immer auf 1.

            MSB = Most Significant Bit = höchstwertiges Bit
            LSB = Least Significant Bit = geringstwertiges Bit

            Die  Bits  in SKSTAT sind im Ruhezustand immer auf Eins  und
            besitzen die angegebene Aussage, wenn sie auf Null gehen.


            Das  Register  SKCNTL beschreibt neben  den  Übertragungsge-
            schwindigkeiten noch die folgenden Funktionen:

            Bit       Bedeutung
            ------------------------------------------------------------

            7   MSB   Abbrechen  der  seriellen Ausgabe und  Senden  von
                      SPACE  bei  Eins.  Dient  zum  Initialisieren  der
                      Sendeleitungen  und  Senden  von  mehr  als  einem
                      Stopbit.

            6         Die drei Bit dienen der Festlegung
            5         der Übertragungsgeschwindigkeiten
            4         des Senders und Empfängers.

            3         Wird  dieses  Bit auf Eins  gesetzt,  erfolgt  die
                      Ausgabe der Bits im Zweitonverfahren.

            2         Durch das Setzten dieses Bits wird der Schnellgang
                      der  Paddlesteuerung  eingeschaltet.  Die  Messung
                      erfolgt   dann  nicht  wie  üblich  innerhalb  von
                      maximal  20ms,  sondern in der Zeit von  nur  zwei
                      Bildzeilen (ca. 128us).

            1         Dieses   Bit  wird  für  die  Tastaturverarbeitung
                      intern benutzt.

            0    LSB  Sind  Bit  1 und Bit 0 auf Null,  so  erfolgt  ein
                      Software-Reset des POKEY.


            Das SKCNTL hat ein Schattenregister SKCNTL@.

            Die Kombinationsmöglichkeiten der drei Bits 4,  5 und 6  des
            SKCNTL lassen sechs technisch mögliche Zustände zu:

            Bit  7    6    5    Bedeutung
            ------------------------------------------------------------

                 0    0    0    Alle  Takte werden von  außen  bestimmt.
                                Die internen Takte gehen auf Null.

                 0    0    1    Die  Senderate wird durch einen externen
                                Takt bestimmt, die Eingangsrate wird von
                                Kanal 4 (oder dem  16bit-Zähler,  beste-
                                hend aus Kanal 3 und Kanal 4) geliefert.
                                Es erfolgt asynchrones  Lesen der Daten.

                 0    1    0    Sowohl die Sende- als auch die Empfangs-
                                frequenzen  werden  von Kanal 4  festge-
                                legt.

                 0    1    1    Nicht nutzbar,  da der Ausgangstakt sich
                                beim  Lesen eines  Zeichens  verschieben
                                würde  (Synchronisation asynchroner  Da-
                                ten).

                 1    0    0    Die Senderate liegt bei diesem Verfahren
                                durch  die  Programmierung des Kanals  4
                                fest,  die Eingangsrate wird durch einen
                                externen Takt bestimmt.

                 1    0    1    Auch diese Taktform ist nicht nutzbar.

                 1    1    0    Hier bestimmt Kanal 2 die Senderate  und
                                Kanal 4 die Empfangssrate.  Der Takt von
                                Kanal  4 liegt an der externen  Taktaus-
                                gangsleitung an.

                 1    1    1    Die  Ausgangsrate wird wie bei 110 durch
                                Kanal 2 bestimmt, die diesmal asynchrone
                                Leserate  durch Kanal  4.  Der  Taktein-
                                /Ausgang  ist  nicht benutzt  und  liegt
                                offen.

            Die  Verfahren 110 und 111 sind zwar die komplexesten,  aber
            sie  beinhalten eine Einschränkung:  Da  zur  Taktbestimmung
            Kanal 2 benutzt werden muß,  kann hier keine Zweitonübertra-
            gung stattfinden!


            Als letztes Register des POKEY ist das Interruptregister  zu
            besprechen.

            Auch  dieses  Register ist in zwei Teile  aufgespalten:  Ein
            Leseregister IRQSTAT und das Schreibregister IRQEN.

            Gibt  der POKEY einen der unten beschriebenen Interrupts  an
            die CPU,  so prüft deren Interrupthandler über IRQSTAT, wel-
            che  der Interruptquellen es genau war und verzweigt zu  den
            entsprechenden Routinen.

            Sind alle Bits in IRQSTAT auf Eins,  so ist der POKEY  nicht
            die Unterbrechungsquelle.

            Bit       Bedeutung (IRQSTAT)
            ------------------------------------------------------------

            7    MSB  Unterbrechung aufgrund BREAK-Tastendruck

            6         Irgend eine andere Taste ist gedrückt

            5         Der serielle Eingang hat Daten gelesen und sie  in
                      SERIN bereitgestellt

            4         Das letzte in SEROUT eingetragene Zeichen wurde in
                      das   POKEY-interne  parallel/seriell-Wandlungsre-
                      gister übertragen und es kann das nächste  Zeichen
                      nach SEROUT transportiert werden.

            3         Das  parallel/seriell-Wandlungsregister des  POKEY
                      ist  leer  und in das SEROUT-Register  wurde  auch
                      kein  neuer Wert eingetragen.  Die Übertragung ist
                      somit für den POKEY beendet.

            Bit       Bedeutung (IRQSTAT)      (Fortsetzung)
            ------------------------------------------------------------

            2         Unterbrechung durch Nullwerden von Timer 4

            1         Unterbrechung durch Nullwerden von Timer 2

            0    LSB  Unterbrechung durch Nullwerden von Timer 1



            Sämtliche  Interrupts  können einzeln erlaubt oder  disabled
            werden. Eine Unterbrechung durch ein bestimmtes Ereignis ist
            dann erlaubt, wenn das zu dem Interrupt gehörige Bit gesetzt
            (auf  1)  ist.  Ein in IRQSTAT auf Null stehendes  Bit  wird
            wieder  auf 1 gesetzt,  wenn das Pendant in IRQEN  ebenfalls
            zumindest kurzzeitig auf Null gesetzt wird.

            Die  Zuordnung  der  Bits zu den  Interruptquellen  ist  bei
            IRQSTAT und IRQEN gleich:


            Bit       Bedeutung (IRQEN)
            ------------------------------------------------------------

            7    MSB  Unterbrechung aufgrund BREAK-Tastendruck erlaubt

            6         Beliebiger Tasteninterrupt erlaubt

            5         Serielle Eingangsunterbrechung erlaubt

            4         SEROUT-Interrupt enabled

            3         Übertragungsendunterbrechung gestattet

            2         Unterbrechung durch Nullwerden von Timer 4 erlaubt

            1         Unterbrechung durch Nullwerden von Timer 2 erlaubt

            0    LSB  Unterbrechung durch Nullwerden von Timer 1 erlaubt

            Zu  beachten  ist auch hier das Schattenregister für  IRQEN,
            IRQEN@. Wird ein Interrupt neu erlaubt oder verboten, so ist
            dies  sowohl  im Schatten- als auch im  Hardwareregister  zu
            tun.  Ist die Abschaltung nicht so eilig,  kann sie also  im
            nächsten Vertical Blank Interrupt geschehen;  so muß nur das
            Schattenregister korrigiert werden.

            Die Korrektur erfolgt durch 'EinODERn' beziehungsweise 'Her-
            aus-UNDen' des oder der jeweiligen Bits.
            *** ATARI INTERN                                   POKEY ***