Vierter Teil:
Im ersten Teil von NEWIRQ wird der Darstellungsmodus 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/ PModer in 24 h
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 24 h-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 24 h-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 24 h
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 Einun
Ausgabe.
Bis dahin wünsche ich Ihnen viel Zeit un
Piep,
Ihr Uli Basters (ub)