
Proc            GetCurrentTime

                Push    DS
                Push    ES

                Push    CS
                Pop     DS
                        Assume DS:Disk

                Cmp     TimerData, 0
                JE      GetCurrentTimeEnd

                Mov     ES, TimerData
                Mov     DI, NumTimerData
                ShL     DI, 3

                Mov     AH, 2Ah
                Int     21h             ; Get Date
                Mov     AX, CX          ; Now to get date in yyyyyyym mmmddddd
                Sub     AX, 1980
                ShL     AX, 9           ; Year
                Or      AL, DL          ; Day
                Xor     DL, DL
                ShR     DX, 3
                Or      AX, DX          ; Month
                StosW

                Mov     AH, 2Ch
                Int     21h             ; Get time
                Mov     AX, CX          ; Now to get time in hhhhhmmm mmmsssss
                ShL     AL, 2           ; AX = ...hhhhh mmmmmm..
                ShL     AX, 3           ; AX = hhhhhmmm mmm.....
                ShR     DH, 1           ; DH = ...sssss
                Or      AL, DH
                StosW

GetCurrentTimeEnd:
                Pop     ES
                Pop     DS
                Ret

EndP            GetCurrentTime
                Assume DS:Nothing

;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Proc            CheckTimerData
                Assume DS:Disk

                Cmp     TimerData, 0
                JNE     CheckTimerData1

                Mov     NumTimerData, 0
                Mov     AH, 48h
                Mov     BX, 1
                Int     21h
                JC      CheckTimerData1

                Mov     TimerData, AX
                Call    GetCurrentTime

CheckTimerData1:
                Ret

EndP            CheckTimerData
                Assume DS:Nothing

;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

Proc            ReleaseTimerData

                Mov     AX, CS:TimerData
                Test    AX, AX
                JZ      ReleaseTimerData1

                Mov     ES, AX
                Mov     AH, 49h
                Int     21h
                Xor     AX, AX

ReleaseTimerData1:
                Mov     CS:TimerData, AX
                Mov     CS:NumTimerData, AX

                Ret

EndP            ReleaseTimerData

;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
