source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuTime.asm @ 369

Last change on this file since 369 was 369, checked in by gregli@…, 12 years ago

Removed align directives for initalization code and added define for align in boot-time calls to the assembly library (defaulting to 1), resulting in a significant savings for the AT and 386 builds. Fixed a bug with switch command line handling in the serial server. Put in CR characters in licesnse.txt, so that it properly displays on Windows. In the configurator, added default values for user supplied CHS and LBA values, defaulting to values within range when those features are enabled. Updated the copyright message in the configurator as the literal word Copyright is important.

File size: 3.1 KB
Line 
1; Project name  :   Assembly Library
2; Description   :   Menu timeouts other time related functions.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; MenuTime_StartSelectionTimeoutWithTicksInAX
9;   Parameters
10;       AX:     Timeout ticks
11;       SS:BP:  Ptr to MENU
12;   Returns:
13;       Nothing
14;   Corrupts registers:
15;       AX, BX
16;--------------------------------------------------------------------
17ALIGN MENU_JUMP_ALIGN
18MenuTime_StartSelectionTimeoutWithTicksInAX:
19    push    ds
20    call    PointDSBXtoTimeoutCounter
21    call    TimerTicks_InitializeTimeoutFromAX
22    or      BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
23    pop     ds
24    ret
25
26
27;--------------------------------------------------------------------
28; MenuTime_StopSelectionTimeout
29;   Parameters
30;       SS:BP:  Ptr to MENU
31;   Returns:
32;       Nothing
33;   Corrupts registers:
34;       AX, BX, DX, SI, DI
35;--------------------------------------------------------------------
36ALIGN MENU_JUMP_ALIGN
37MenuTime_StopSelectionTimeout:
38    test    BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
39    jz      SHORT TimeoutAlreadyStopped
40    and     BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
41    jmp     MenuBorders_RedrawBottomBorderLine
42
43
44;--------------------------------------------------------------------
45; MenuTime_UpdateSelectionTimeout
46;   Parameters
47;       SS:BP:  Ptr to MENU
48;   Returns:
49;       CF:     Set if timeout
50;               Cleared if time left
51;   Corrupts registers:
52;       AX, BX, SI, DI
53;--------------------------------------------------------------------
54ALIGN MENU_JUMP_ALIGN
55MenuTime_UpdateSelectionTimeout:
56    test    BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
57    jz      SHORT .ReturnSinceTimeoutDisabled
58
59    push    ds
60    call    PointDSBXtoTimeoutCounter
61    call    TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
62    pop     ds
63    jnc     SHORT .RedrawSinceNoTimeout
64    and     BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
65    stc
66    ret
67
68ALIGN MENU_JUMP_ALIGN
69.RedrawSinceNoTimeout:
70    call    MenuBorders_RedrawBottomBorderLine
71    clc
72.ReturnSinceTimeoutDisabled:
73TimeoutAlreadyStopped:
74    ret
75
76
77;--------------------------------------------------------------------
78; MenuTime_GetTimeoutSecondsLeftToAX
79;   Parameters
80;       SS:BP:  Ptr to MENU
81;   Returns:
82;       AX:     Seconds until timeout
83;   Corrupts registers:
84;       AX
85;--------------------------------------------------------------------
86ALIGN MENU_JUMP_ALIGN
87MenuTime_GetTimeoutSecondsLeftToAX:
88    push    ds
89    push    dx
90    push    cx
91    push    bx
92
93    call    PointDSBXtoTimeoutCounter
94    call    TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
95    jc      SHORT .TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero
96
97    xchg    dx, ax
98    call    TimerTicks_GetSecondsToAXfromTicksInDX
99    SKIP2B  f   ; cmp ax, <next instruction>
100.TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero:
101    xor     ax, ax
102
103    pop     bx
104    pop     cx
105    pop     dx
106    pop     ds
107    ret
108
109
110;--------------------------------------------------------------------
111; PointDSBXtoTimeoutCounter
112;   Parameters
113;       SS:BP:  Ptr to MENU
114;   Returns:
115;       DS:BX:  Ptr to timeout counter
116;   Corrupts registers:
117;       Nothing
118;--------------------------------------------------------------------
119ALIGN MENU_JUMP_ALIGN
120PointDSBXtoTimeoutCounter:
121    push    ss
122    pop     ds
123    lea     bx, [bp+MENU.wTimeoutCounter]
124    ret
Note: See TracBrowser for help on using the repository browser.