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

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

Changes:

  • Added some missing PIO mode timings to ATA_ID.inc (based on info from http://www.singlix.net/specs/cfspc4_0.pdf)
  • Updated Configuration_FullMode.txt but it may need additional changes as the Tandy info doesn't match the wiki.
  • Optimizations.
  • Excluded some unused code from XTIDECFG.
File size: 3.2 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;--------------------------------------------------------------------
17%ifndef EXCLUDE_FROM_XTIDECFG
18ALIGN MENU_JUMP_ALIGN
19MenuTime_StartSelectionTimeoutWithTicksInAX:
20    push    ds
21    call    PointDSBXtoTimeoutCounter
22    call    TimerTicks_InitializeTimeoutFromAX
23    or      BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
24    pop     ds
25    ret
26%endif
27
28
29;--------------------------------------------------------------------
30; MenuTime_StopSelectionTimeout
31;   Parameters
32;       SS:BP:  Ptr to MENU
33;   Returns:
34;       Nothing
35;   Corrupts registers:
36;       AX, BX, DX, SI, DI
37;--------------------------------------------------------------------
38ALIGN MENU_JUMP_ALIGN
39MenuTime_StopSelectionTimeout:
40    test    BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
41    jz      SHORT TimeoutAlreadyStopped
42    and     BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
43    jmp     MenuBorders_RedrawBottomBorderLine
44
45
46;--------------------------------------------------------------------
47; MenuTime_UpdateSelectionTimeout
48;   Parameters
49;       SS:BP:  Ptr to MENU
50;   Returns:
51;       CF:     Set if timeout
52;               Cleared if time left
53;   Corrupts registers:
54;       AX, BX, SI, DI
55;--------------------------------------------------------------------
56ALIGN MENU_JUMP_ALIGN
57MenuTime_UpdateSelectionTimeout:
58    test    BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
59    jz      SHORT .ReturnSinceTimeoutDisabled
60
61    push    ds
62    call    PointDSBXtoTimeoutCounter
63    call    TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
64    pop     ds
65    jnc     SHORT .RedrawSinceNoTimeout
66    and     BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
67    stc
68    ret
69
70ALIGN MENU_JUMP_ALIGN
71.RedrawSinceNoTimeout:
72    call    MenuBorders_RedrawBottomBorderLine
73    clc
74.ReturnSinceTimeoutDisabled:
75TimeoutAlreadyStopped:
76    ret
77
78
79;--------------------------------------------------------------------
80; MenuTime_GetTimeoutSecondsLeftToAX
81;   Parameters
82;       SS:BP:  Ptr to MENU
83;   Returns:
84;       AX:     Seconds until timeout
85;   Corrupts registers:
86;       AX
87;--------------------------------------------------------------------
88ALIGN MENU_JUMP_ALIGN
89MenuTime_GetTimeoutSecondsLeftToAX:
90    push    ds
91    push    dx
92    push    cx
93    push    bx
94
95    call    PointDSBXtoTimeoutCounter
96    call    TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
97    jc      SHORT .TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero
98
99    xchg    dx, ax
100    call    TimerTicks_GetSecondsToAXfromTicksInDX
101    SKIP2B  f   ; cmp ax, <next instruction>
102.TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero:
103    xor     ax, ax
104
105    pop     bx
106    pop     cx
107    pop     dx
108    pop     ds
109    ret
110
111
112;--------------------------------------------------------------------
113; PointDSBXtoTimeoutCounter
114;   Parameters
115;       SS:BP:  Ptr to MENU
116;   Returns:
117;       DS:BX:  Ptr to timeout counter
118;   Corrupts registers:
119;       Nothing
120;--------------------------------------------------------------------
121ALIGN MENU_JUMP_ALIGN
122PointDSBXtoTimeoutCounter:
123    push    ss
124    pop     ds
125    lea     bx, [bp+MENU.wTimeoutCounter]
126    ret
Note: See TracBrowser for help on using the repository browser.