home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / WATTCP / MSWATTCP.ZIP / ELIB / TIMEOUT.ASM < prev   
Encoding:
Assembly Source File  |  1993-03-25  |  2.8 KB  |  122 lines

  1. ;
  2. ;  Timer routines - use set_*timeout to receive a clock value which
  3. ;                   can later be tested by calling chk_timeout with
  4. ;                   that clock value to determine if a timeout has
  5. ;                   occurred.  chk_timeout returns 0 if NOT timed out.
  6. ;
  7. ;
  8. ;  Usage :
  9. ;           long set_timeout( int seconds );
  10. ;           long set_ttimeout( int pc_ticks );
  11. ;           int chk_timeout( long value );
  12. ;
  13. ;  (c) 1990 University of Waterloo,
  14. ;           Faculty of Engineering,
  15. ;           Engineering Microcomputer Network Development Office
  16. ;
  17. ;  version
  18. ;
  19. ;    0.1    7-Nov -1990   E. P. Engelke
  20. ;
  21. ;  modified 
  22. ;
  23. ;    10-Feb -1992 G. Mercaldo
  24. ;
  25.         include masmdefs.hsm
  26.         include model.hsm
  27.  
  28. BIOSCLK    equ    046ch
  29. HI_MAX    equ    018h
  30. LO_MAX    equ     0b0h
  31.  
  32. codedef TIMEOUT
  33. datadef
  34.  
  35. cstart  TIMEOUT
  36.  
  37.         ; code segment variables
  38.  
  39. date    dw 0,0
  40. oldhour db 0
  41.  
  42. cpublic set_ttimeout
  43.         xor     DX, DX
  44.         mov     ES, DX
  45.         mov     AX, +@AB [BP]
  46.         pushf
  47.         cli
  48.         add     AX, ES:[ BIOSCLK ];
  49.         adc     DX, ES:[ BIOSCLK+2];
  50.         add     AX, CS: date            ; date extend
  51.         adc     DX, CS: date + 2
  52.         popf
  53. creturn set_ttimeout
  54.  
  55. cpublic set_timeout
  56.     xor    AX, AX            ; reference low memory
  57.     mov    ES, AX
  58.  
  59.         mov     AX, +@AB [BP]           ; seconds
  60.  
  61.     mov    DX, 1165
  62.     mul    DX            ; 1165/64 = 18.203...
  63.  
  64.     mov    CX, 2            ; 10-feb92 gm only 2 triples cycles
  65. tmp:
  66.     shr    DX, 1            ; because it could be
  67.     rcr    AX, 1            ; better for prefetch
  68.     shr    DX, 1
  69.     rcr    AX, 1
  70.     shr    DX, 1
  71.     rcr    AX, 1
  72.     loop    tmp
  73.  
  74.         pushf
  75.         cli
  76.         add     AX, ES:[ BIOSCLK ]
  77.     adc    DX, ES:[ BIOSCLK + 2 ]
  78.         add     AX, CS: date            ; date extend
  79.         adc     DX, CS: date + 2
  80.         popf
  81. creturn set_timeout
  82. cpublic    chk_timeout
  83.     xor    AX, AX
  84.     mov    ES, AX
  85.         pushf
  86.         cli
  87.     mov    CX, ES:[BIOSCLK]
  88.     mov    BX, ES:[BIOSCLK+2]
  89.         popf
  90.  
  91.         ; see if new date
  92.         cmp     BL, CS:oldhour          ; is it earlier modulo one day
  93.         je      samehr
  94.         jge     sameday
  95.  
  96.         ; update the new date stuff
  97.         add     CS:date, LO_MAX
  98.         adc     CS:date+2, HI_MAX
  99.  
  100. sameday:mov     CS:oldhour, BL          ; save new hour for next time
  101.  
  102. samehr :add     CX, CS: date            ; date extend current time
  103.         adc     BX, CS: date + 2
  104.  
  105.         mov     AX, +@AB + 0 [BP]       ; get supplied timeout value
  106.     mov    DX, +@AB + 2 [BP]
  107.         
  108.         cmp     DX, BX                  ; if timeout < clock has expired
  109.         jb      ret_tru
  110.         ja      ret_fal
  111.         cmp     AX, CX                  ; still checking timeout < clock
  112.         jb      ret_tru
  113.  
  114. ret_fal:xor     AX, AX                  ; false
  115.         jmp     retern
  116.  
  117. ret_tru:mov     AX, 1
  118. retern:
  119. creturn chk_timeout
  120. cend    TIMEOUT
  121.         end
  122.