C 64
Tips und Tricks

Wie spät ist es bitte?

Haben Sie auch schon beim Programmieren jedes Zeitgefühl verloren und vielleicht einen Termin verpaßt? Mit diesem Uhr-Programm dürfte das nicht mehr passieren. Zusätzlich zur ständigen Zeitanzeige kann noch eine Alarmfunktion aufgerufen werden.

Mit »Piep Piep Piep« erinnert Sie dieses Programm daran, daß es schon wieder nach Mitternacht ist. Es ist vielleicht besser, die neueste Version zu speichern und ins Bett zu gehen. Aber genug der Vorrede, gehen wir »in medias res«.

Das Programm CIA-Uhr wird bei jedem Interrupt des C 64 einmal abgearbeitet, also 60mal pro Sekunde. Dabei wird die Echtzeituhr des C 64 abgefragt, die Alarmzeit überprüft und die Uhrzeit auf den Bildschirm gedruckt. Im Gegensatz zu Tl oder Tl$ hat die Echtzeituhr eine große Ganggenauigkeit. Die Variable Tl wird nämlich nur bei jedem Interrupt hochgezählt. Ein Interrupt muß aber nicht jede 60stel Sekunde stattfinden. Beispielsweise werden beim Speichern oder Laden von Programmen wesentlich weniger Interrupts pro Sekunde vom Computer ausgelöst als im READY-Modus.

Was bedeutet Interrupt?

Der C 64 unterbricht etwa jede 60stel Sekunde das laufende Programm und überprüft, ob eine Taste (vielleicht RUN/STOP-RESTORE) gedrückt wurde oder ob ein angeschlossenes Gerät Daten empfangen oder senden kann.

Wird ein Interrupt ausgelöst, sieht der C 64 in zwei Adressen ($314, $315) der Zeropage nach, bei welcher Adresse das Interrupt-Programm beginnt. Im Normalfall bei $EA31. Da die Zeropage zum RAM-Speicher gehört, kann der C 64 auf eigene Interrupt-Routinen umgelenkt werden. Im Normalfall endet ein eigenes Interrupt-Programm mit dem Assemblerbefehl JMP $EA31, was heißt, daß der Computer mit der »serienmäßigen« Routine weitermachen soll.

Die CIAs 6526 (Complex Interface Adapter, vielseitiger Ein-/Ausgabe-Baustein) regeln beim C 64 alles was mit Ein- und Ausgaben zusammenhängt. Dieser Baustein hat zwei Timer eingebaut. Einer davon steuert in der CIA auch eine 24-Stunden-Uhr (AM/PM) mit einer Auflösung von ⅒ Sekunde. Die Uhr wird mit TOD (Time Of Day) bezeichnet. Die Zeit steht im BCD-Fbrmat in den Registern 8, 9, 10 und 11 der CIA 1. Die Ganggenauigkeit des Timer ergibt sich aus der Tatsache, daß er mit Netzfrequenz geregelt wird.

Der Trick mit dem Interrupt

»CIA-Uhr« steht im Speicher von $C000 (49152) bis $C230 (49712). Das Programm wird mit SYS 49152, "Uhrzeit im HHMMSS-Format", "Alarmzeit" initialisiert. Dabei wird der Interrupt-Vektor (Inhalt der Adressen $314, $315) des C 64 so verändert, daß er auf $C036 zeigt. Danach wird die angegebene Uhrzeit und Alarmzeit gesetzt. Pro Interrupt wird nun die Uhrzeit rechts oben am Bildschirm gedruckt und mit der Alarmzeit verglichen. Stimmen die Zeiten überein, fängt der Computer an zu piepen. Und zwar so lange, bis der Alarm mit SYS 49704 abgeschaltet wird.

Das Programm unterscheidet zwischen Vor- und Nachmittag, obwohl die Uhrzeit nur im 12-Stunden-Format ausgegeben wird. Setzt man beispielsweise die Uhrzeit auf 1 Uhr und die Alarmzeitauf 13 Uhr, erscheint in der Anzeige 01:00:00;0. Der Alarm wird aber erst 12 Stunden später ausgelöst. Die »0« hinter dem Strichpunkt gibt die 10tel Sekunden an.

Das Programm »CIA-Uhr« kann mit allen Basic-Erweiterungen benutzt werden, die den Interruptvektor nicht verändern und nicht den Speicherbereich von Adresse $C000 bis $C023 belegen.

Die Anzeige der Uhr erfolgt rechts oben am Bildschirm. Mit POKE 49311,0 kann sie auf die linke Seite verlagert werden.

Tips zur Eingabe und Benutzung

Das Programm muß mit dem MSE eingegeben werden. Nach dem Laden mit LOAD"UHR",8,1 (1,1) muß NEW eingegeben werden, damit kein OUT OF MEMORY ERROR auftritt. Bei RUN/STOP-RESTORE verschwindet die Anzeige vom Bildschirm, während die Uhr intern aber weiterläuft. Mit SYS 49152 wird die Anzeige wieder aktiviert. Das Maschinenprogramm kann auch in andere Speicherbereiche verschoben werden. Man sollte dazu wissen, daß in den Bereichen $C0A3 bis $C0A6 und $C137 bis $C14D Tabellen stehen.

(Jörg Dorchain/hm)
PROGRAMM : UHR            C000 C230
-----------------------------------
C000 : 78 A9 36 8D 14 03 A9 C0   0E
C008 : 8D 15 03 58 AD 0F DC 29   05
C010 : 7F 8D 0F DC A9 85 8D 0D   CC
C018 : DC AD 0E DC 09 80 8D 0E   D1
C020 : DC 4C EB C1 AD 0D DC 29   5E
C028 : 04 F0 03 20 BB C0 AD 43   68
C030 : C1 F0 03 20 C1 C0 A0 00   D3
C038 : AD 0B DC AE 08 DC 29 10   A4
C040 : 18 4A 4A 4A 4A 20 9B C0   EF
C048 : AD 0B DC AE 08 DC 29 0F   B2
C050 : A2 00 20 9B C0 BD A3 C0   78
C058 : 20 9B C0 E8 AD 0A DC 29   84
C060 : F0 4A 4A 4A 4A 20 9B C0   E7
C068 : AD 0A DC 29 0F 20 9B C0   58
C070 : BD A3 C0 20 9B C0 E8 AD   F2
C078 : 09 DC 29 F0 4A 4A 4A 4A   0C
C080 : 20 9B C0 AD 09 DC 29 0F   8E
C088 : 20 9B C0 BD A3 C0 20 9B   56
C090 : C0 E8 AD 08 DC 20 9B C0   EF
C098 : 4C 31 EA 18 69 B0 99 1E   F9
C0A0 : 04 C8 60 0A FE 0B A9 20   91
C0A8 : 8D 04 D4 A9 07 8D 05 D4   3C
C0B0 : A9 F4 8D 06 D4 A9 0F 8D   E9
C0B8 : 18 D4 60 A9 09 8D 43 C1   15
C0C0 : 60 6C 37 C1 A9 14 8D 00   CE
C0C8 : D4 A9 1A 8D 01 D4 A9 21   49
C0D0 : 8D 04 D4 A0 14 4C 10 C1   10
C0D8 : A9 20 8D 04 D4 A0 0A 4C   88
C0E0 : 10 C1 A9 CF 8D 00 D4 A9   B5
C0E8 : 22 8D 01 D4 A9 21 8D 04   8E
C0F0 : D4 A0 14 4C 10 C1 A9 20   99
C0F8 : 8D 04 D4 A0 0A 4C 10 C1   97
C100 : A0 00 8C 41 C1 A9 C4 8D   83
C108 : 37 C1 A9 C0 8D 38 C1 60   05
C110 : 8C 42 C1 A9 1D 8D 37 C1   01
C118 : A9 C1 8D 38 C1 CE 42 C1   2B
C120 : D0 14 AC 41 C1 B9 39 C1   A0
C128 : 8D 37 C1 C8 B9 39 C1 8D   62
C130 : 38 C1 C8 8C 41 C1 60 C4   3A
C138 : C0 D8 C0 E2 C0 F3 C0 00   9F
C140 : C1 00 00 00 10 00 00 00   03
C148 : 00 00 00 00 00 00 20 A6   16
C150 : C0 20 06 E2 20 FD AE 20   EB
C158 : 9E AD 20 8F AD 20 A3 B6   9F
C160 : 86 14 84 15 C9 06 F0 0A   59
C168 : A9 00 AA A8 18 D8 B8 4C   95
C170 : 48 B2 A0 FF C8 B1 14 38   14
C178 : E9 30 90 EC 99 45 C1 C0   87
C180 : 05 D0 F1 A0 FF C8 B1 14   B3
C188 : C9 3A B0 DC C0 05 D0 F5   99
C190 : A0 FF A2 00 C8 B9 45 C1   CB
C198 : 0A 0A 0A 0A 8D 44 C1 C8   FF
C1A0 : B9 45 C1 0D 44 C1 9D 4B   6D
C1A8 : C1 E8 E0 03 D0 E6 A2 00   45
C1B0 : A0 0B F8 BD 4B C1 F0 B0   B3
C1B8 : C9 24 D0 03 A9 00 18 B0   84
C1C0 : A7 C9 12 90 04 E9 12 09   CC
C1C8 : 80 99 00 DC E8 88 BD 4B   11
C1D0 : C1 C9 60 B0 93 99 00 DC   64
C1D8 : E8 88 BD 4B C1 C9 60 B0   2A
C1E0 : 87 99 00 DC D8 A9 00 8D   C5
C1E8 : 08 DC 60 20 4E C1 20 0C   06
C1F0 : C2 AD 0F DC 09 80 8D 0F   D1
C1F8 : DC 20 51 C1 20 0C C2 78   CF
C200 : A9 24 8D 14 03 A9 C0 8D   3D
C208 : 15 03 58 60 A0 FF C8 B9   62
C210 : 45 C1 F0 FA C0 09 D0 03   6F
C218 : 4C 0B E2 A0 FF A9 00 C8   95
C220 : 99 45 C1 C0 08 D0 F8 60   90
C228 : A9 00 8D 43 C1 4C A6 C0   38
Listing zur CIA-Uhr.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →