Vierter Teil: Im ersten Teil von NEWIRQ wird der Dar- stellungsmodus geprüft und, abhängig da von, entweder sieben oder acht Sprite eingeschaltet. Im AM/PM-Modus wird das 8 Sprite nämlich zur Darstellung von A oder PM verwendet. Als Nächstes prüft NEWIRQ, was die Inter ruptquelle des IRQs war. Ist Bit 2 im IC von CIA1 gesetzt, so war es der Alarm IRQ. Wenn dieser der Auslöser war, s wird der voreingestellte Piepton einge schaltet und für die Dauer der folgende Warteschleife gespielt. Anschließend wir er wieder abgeschaltet und NEWIRQ fähr mit der Zeitausgabe fort. Sicherlich is die Tonausgabe mit einer Warteschleif nicht unbedingt die eleganteste Art un Weise dieses Problem zu lösen, jedoc genügt Sie für den Zweck als Beispielpro gramm. Sehen Sie sich doch einfach gefor dert, und versuchen Sie eine eigen Alarm-Routine zu schreiben, die läuft ohne den IRQ zu verzögern. Es folgt nun die Routine TIMEREF, die di Ausgabe der Uhrzeit erledigt. Hierzu müs sen wir zunächst einmal herausfinden, o die Stunden in AM/PM- oder in 24h Darstellung erscheinen soll. Demensprech end muß nämlich dann die Stundenzahl mo difiziert werden. Das geschieht am Anfan von TIMEREF. Das Sprite für AM/PM wir übrigens immer mitgesetzt, selbst wen die 24h-Darstellung gewählt wurde. I diesem Fall ist es jedoch nicht zu sehen weil es am Anfang von NEWIRQ abgeschalte wurde. Wenn das Programm herausfindet, daß di Uhr 12 Uhr AM anzeigt, was ja nach unse rer Definition keine logische Uhrzei ist, so lädt es 0 in den Akku, um späte bei der Ausgabe ein "00" als Stunde er scheinen zu lassen. Wenn es Nachmittag ist, stellt TIMERE zunächst einmal den Spritepointer für da AM/PM-Sprite auf "PM", indem es das X Register um 1 erhöht. Anschließend lösch es das 7. Bit der Stundenzahl, da diese ja nur angibt, daß Nachmittag ist, un später bei der Umwandlung in eine Ziffe stören würde. Wenn die AM/PM-Darstellun aktiv ist, wird direkt zu dieser Umwand lung weiterverzweigt. Andernfalls prüf TIMEREF, ob es nicht gerade 12 Uhr P ist, da bei der 24h-Darstellung in diese Fall ja NICHT der Wert 12 zu der Stunden zahl addiert werden soll. Ist dies nich der Fall, so müssen wir den Wert 12 doc noch zur Stundenzahl hinzuaddieren, wobe wir den BCD-Modus des Prozessors benut zen. Nun ist die Stundenzahl berechne und kann an die Umwandlungsroutine wei tergegeben werden. Der restliche Teil von NEWIRQ erklär sich von selbst. Damit wissen Sie nun, wie man eine CIA Echtzeituhr programmiert. Die übrige Programmteile von CLOCK (die schon erwän ten Routinen SETIT und GETNUM) möchte ic hier aussparen, da sie mit dem Thema un seres Kurses wenig zu tun haben und all gemeingültige Probleme lösen. Nichts de sto trotz können Sie sie sich ja einma im Source-Code-Listing auf dieser MD an schauen. Probieren Sie CLOCK doch einmal aus. Wen Sie es starten so werden Sie zunächs nach Uhr und Alarmzeit gefragt. Anschlie ßend können Sie die Uhr am unteren Bild schirmrand beobachten. Wenn Sie CLOC starten, so müßte die Zeit in der 24h Darstellung erscheinen, da die Speicher stelle 3 in der Regel einen Wert ungleic 0 enthält. Schalten Sie dann doch einfac einmal mit "POKE 3,0" und "POKE 3,1" zwi schen den beiden Modi um. Sie werden se hen, daß CLOCK durch die IRQ Programmierung immer direkt auf Ihre Ein gaben reagiert. So. Das war es dann mal wieder für diese Monat. Sie können ja einmal versuche eine noch komfortablere Uhr zu program mieren - wie es geht wissen Sie jetzt ja Wie wäre es zum Beispiel mit einer Funk tion, die stündlich einen Piepton aus gibt? Oder sogar gleich eine ganze Reih von Intervall-Tönen, wie man es vo Quartz-Weckern her kennt? Ich hoffe, Ihnen damit einige Öbungsanre gungen gegeben zu haben und verabschied mich nun bis nächsten Monat. Dann werde wir uns mit einem der Hauptanwendungsge biete der CIAs beschäftigen: der Ein- un Ausgabe. Bis dahin wünsche ich Ihnen viel Zeit un Piep,
Ihr Uli Basters (ub)