Idee: Thorsten Schmitt
Einer der häufigsten Wünsche von PC-Benutzern ist die ständige Anzeige der aktuellen Uhrzeit auf dem Bildschirm. Verständlich, erleichtert Ihnen dies es doch, einen wichtigen Termin oder das Abendessen nicht zu verpassen. CLOCK.DEB blendet daher in der rechten oberen Ecke die Stunden und Minuten ein. Das speicherresidente Programm, das sich in den Timer-Interrupt 1Ch einklinkt, ermittelt über den PC-internen Zeitzähler 18,2 mal pro Sekunde die momentane Uhrzeit. Da die Anzeige aus Geschwindigkeitsgründen über direkte Schreibzugriffe in den Bildschirmspeicher erfolgt, funktioniert CLOCK in keinem Grafik-Modus – dafür aber in allen möglichen Text-Modi. Das Programm berücksichtigt automatisch die aktive Bildschirmseite und funktioniert bei CGA-Karten wie bei Hercules-Adaptern. Die eingestellte Bildbreite, ob 80 oder 40 Zeichen, spielt keine Rolle. Bei älteren CGA-Karten kann ein leichtes »Schneien« sichtbar sein.
Einiges zur Funktion: Das BIOS verwaltet in den Speicherzellen 40h:6Ch bis 6Fh einen 32-Bit-Zeitzähler mit einer Auflösung von 1/18,2 Sekunden. Wenn der PC über eine batteriegepufferte Echtzeituhr verfügt, setzt der verantwortliche Gerätetreiber diesen Zähler beim Systemstart auf einen der Echtzeituhr entsprechenden Wert. Nimmt man geringe Rechenungenauigkeiten zugunsten von Geschwindigkeit und und Kürze des Programms in Kauf, können Sie die Stunden direkt aus dem 3. Byte des Zeitzählers (Wertigkeit: 65536 * 1/18,2 Sekunden ≈ 3600,879 Sekunden) entnehmen. Die Minuten ergeben sich aus den beiden niederwertigen Bytes des Zählers (hier als » n « bezeichnet) angenähert zu n/1096. 1096 Ticks zu je 1/18,2 Sekunden ergeben etwa 60,220 Sekunden, also rund eine Minute. Je älter der Tag, desto ungenauer die Uhr – um 23:59 Uhr kann die Differenz rund 14 Sekunden betragen. Da aber kaum eine PC-Uhr auf die Sekunde genau eingestellt ist, geschweige denn längerfristig so genau läuft, ist der Zeitunterschied irrelevant.
Name: | CLOCK.DEB |
Funktion: | Blendet in der rechten oberen Bildschirmecke die aktuelle Uhrzeit ein. |
Übersetzung: | DEBUG <CLOCK.DEB |
Prüfsumme: | D1BF |
Anwendung: | CLOCK |
Einschränkungen: | Das Programm funktioniert nur im Text-Modus. Auf altenCGA-Karten ist ein leichtes »Schneien« möglich. Die Uhr läßt sich nicht mehr abschalten. Leichte Rechenunge- nauigkeiten lassen die Uhrzeit wenige Sekunden von der
wirklichen Zeit abweichen. |
A MOV AX,351C ;100 INT 21 ;103 MOV [15F],BX ;105 MOV [161],ES ;109 MOV AX,251C ;10D MOV DX,11A ;110 INT 21 ;113 MOV DX,177 ;115 INT 27 ;118 PUSH AX ;11A PUSH DI ;11B PUSH DS ;11C PUSH ES ;11D CS:LDS DI,[173] ;11E MOV AL,[10] ;123 AND AL,3 ;126 CMP AL,3 ;128 JZ 12F ;12A MOV DI,B800 ;12C MOV ES,DI ;12F MOV DI,[4A] ;131 ADD DI,DI ;135 SUB DI,A ;137 ADD DI,[4E] ;13A CLD ;13E MOV AL,[6E] ;13F CALL 163 ;142 MOV AX,F03A ;145 STOSW ;148 MOV AX,[6C] ;149 SHR AX,1 ;14C SHR AX,1 ;14E SHR AX,1 ;150 CS:DIV By[172] ;152 CALL 163 ;157 POP ES ;15A POP DS ;15B POP DI ;15C POP AX ;15D JMP 0:0 ;15E AAM ;163 CALL 168 ;165 XCHG AH,AL ;168 PUSH AX ;16A ADD AL,30 ;16B MOV AH,70 ;16D STOSW ;16F POP AX ;170 RET ;171 DB 89,0,b0,40,0 RCX 77 NCLOCK.COM W Q
Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot