[Back to TSR SWAG index] [Back to Main SWAG index] [Original]

    {
    > H E L P!!!  I need help with the timer Interrupt... I guess?  Here
    > is what I would like to do, I want to have the Time in the upper right
    > hand corner updated by the second.  I was told that I need to "hook in
    > to the timmer interrupt" but, how do I do that?  Any help would be
    > appreciated.  And if possible make it as non technical as possable.

    Here is just the program your looking for!
    }
    Program Clock_demo;
    {$M $400 ,0 ,0}                       { Stack Size $400 , No Heap      }
    {$F+}
    Uses Dos ,Crt;
    Var
        Count:Byte;                       { Counts Seconds                }
        Time:Longint  Absolute $40:$6C;   { Bios Keeps Clock Time Here    }
        Old1Cint:Procedure;               { Linkage To Old 1C Interrupt   }

    { Every 18 Pulses Shows Time At The Left Corner Of Screen }
    Procedure Get_Time;Interrupt;
    Var X ,Y:Byte;
        Hour ,Minute ,Sec:Word;
    Begin
      Inc(Count);
      If Count =18 Then                        { Every Second 18.2 Pulses      }
        Begin
          Count:=0;
          X:=Wherex;                           { Save Cursor Place             }
          Y:=Wherey;
          Hour:=Time Div 65520;                { Calculate Hours. In Each Hour }
                                               { 18.2 * 60 * 60 Pulses         }
          Minute:=Time Mod 65520 Div 1092;     { Calculate Minutes. In Each    }
                                               { Minute 18.2 * 60 Pulses       }
          Sec:=Round((Time Mod 65520 Mod 1092) / 18.2) Mod 60; { Seconds       }
          Gotoxy(70 ,1);                       { Left Corner Of Screen         }
                                               { Write time                    }
          If Hour<10 Then
            Write(0,Hour,':')
          Else
            Write(Hour,':');
          If Minute<10 Then
            Write(0,Minute,':')
          Else
            Write(Minute,':');
          If Sec<10 Then
            Write(0,Sec)
          Else
            Write(Sec);
          Gotoxy(X ,Y);                        { Restore Cursor Position       }
        End;
      Inline($9C);                             { Pushf - Push Flags            }
      Old1Cint;                                { Link Old 1C Procedure         }
    End;

    Begin                          { Of Main Program                     }
      Count:=0;                    { Clock Pulses Counter                }
      Getintvec($1C ,@Old1Cint);   { Save Old 1C Interrupt Vector        }
      Setintvec($1C ,@Get_Time);   { Insert Current Interurupt Procedure }
      Keep(0);                     { Terminate And Stay Resident - Tsr   }
    End.

[Back to TSR SWAG index] [Back to Main SWAG index] [Original]