RTC Alarm Clock Question 
Author Message
 RTC Alarm Clock Question

Hi everyone, newbie to the group here.  I'm trying to utilize the BIOS
Alarm clock services (1Ah, 70h, and 4Ah).  According to several sources I
have, the method is to set the 4Ah vector to your alarm service routine,
then use 1Ah (function 6) to set the count down timer (in BCD).  When the
count down timer expires an int 4Ah (to your service routine) is supposed
to occur.

I've can hook the 4A vector, and prove that it works (by forcing a soft
int 4Ah).  But I never seem to get the RTC Alarm clock to work as
expected.  Anybody done this successfully?  Is there a trick?

Here's my psuedo code...

Disable Alarm Clock (1Ah Function 7)
Save 4A Vector (21h Function 35h)
Set new 4A Vector (21h Function 25h)
Set Alarm Clock (1Ah Function 6)  (5 seconds)
Wait forever (at least until new Alarm hanlder goes)
Restore 4A Vector
Exit

See attached for the real code, just plain old ASCII text.

In 14 years of being a profesional software engineer I've never
succesfully performed this operation.  Now I'm teaching a class in
assembly at the local JC, so it's probably time I learned this technique
;-)  TIA

[ PROG6.ASM 2K ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PROGRAM : PROG6
; DATE    : 960316
; PURPOSE : This module performs the following steps
;
;               1.  Call CS26_HEADER(6) to display header on screen
;               2.  Displays menu allowing user to...
;                       1.  Add
;                       2.  Subtract
;                       3.  Multiply
;                       4.  Exit
;               3.  Prompts user for appropriate inputs based upon
;                   user's choice
;               4.  Performs indicated operation
;               5.  Returns to step 2 (if Exit was not choosen).
;
;                              Change Log
;Date   Who Description
;------ --- --------------------------------------------------------------------
;960316 GBP File creation
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

include CS26.INC

extrn   PUTSTRNG:far

;
;                            Constants
;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                              Stack Segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S_SEG           segment stack 'stack'

                db      256 dup (0)

S_SEG           ends

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                              Data Segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D_SEG           segment

BeenThere       db      0
MadeIt          db      'Made it!!!!'
Org4AOff        dw      0
Org4ASeg        dw      0

D_SEG           ends

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                             Code Segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
C_SEG   segment

        assume  cs:C_SEG,ds:D_SEG,ss:S_SEG

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                PROG6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROG6   proc                                    ;Code entry point

        mov             AX,D_SEG                ;Init DS
        mov             DS,AX

        mov             AX,354Ah                ;Get IV for int 4A
        int             21h
        mov             Org4AOff,BX
        mov             BX,ES
        mov             Org4ASeg,BX

        mov             AH,07h                  ;Disable Alarm Clock
        int             1Ah

        push            DS
        mov             AX,254Ah                ;Set new IV for int 4A
        mov             DX,seg RTCIntHand
        mov             DS,DX
        mov             DX,offset RTCIntHand
        int             21h
        pop             DS

        mov             AH,06                   ;Set Alarm for 5 seconds
        mov             CX,0
        mov             DH,5
        int             1Ah

        mov             AH,02h
Loop1:  int             1Ah
        cmp             BeenThere,0             ;Delay forever
        je              Loop1

        mov             AH,07h                  ;Disable Alarm Clock
        int             1Ah

        push            DS
        mov             AX,254Ah                ;Restore int 4A IV
        mov             DX,Org4AOff
        mov             BX,Org4ASeg
        mov             DS,BX
        int             21h
        pop             DS

EXIT:   mov             AH,4Ch                  ;4.  Exit
        int             21h

PROG6   endp

RTCIntHand      proc    far
                PUTSTRING MadeIt 11
                iret
RTCIntHand      endp

C_SEG   ends
        end     PROG6                           ;Specify code entry point



Sat, 26 Sep 1998 03:00:00 GMT  
 
 [ 1 post ] 

 Relevant Pages 

1. Fire The Boss And Break the Alarm Clock!

2. Alarm clock applet for System 3

3. TSR alarm clock

4. 'alarm clock' problem

5. Tk based alarm clock

6. Question about the RTC

7. clock scan [clock format [clock seconds]] fails

8. change TOD clock with set and store clock

9. How to do IP clock balance with external clock

10. How to Generate 1MHz clock from 44MHz Clock??

11. Problem with clocking logic usign a derived clock

12. Gated Clock(double rate clock)?

 

 
Powered by phpBB® Forum Software