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

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

Changes:

  • Added a new define (USE_UNDOC_INTEL) that enables optimizations possible by using undocumented instructions available on all Intel processors and truly compatible clones. AFAIK the only exceptions are the NEC V-series and the Sony CXQ70108 processors so this option should be safe for use on the AT builds.
  • Building BIOSDRVS or the BIOS without MODULE_STRINGS_COMPRESSED would fail due to the recent code exclusions so I changed them a bit. Also fixed the mistaken change to Main.asm
  • Changed the Tandy specific info in Configuration_FullMode.txt so it matches the info in the Wiki.
  • Optimizations and fixes in general.
File size: 3.8 KB
Line 
1; Project name : Assembly Library
2; Description : Menu timeouts other time related functions.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
12;
13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16; GNU General Public License for more details.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
20
21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; MenuTime_StartSelectionTimeoutWithTicksInAX
26; Parameters
27; AX: Timeout ticks
28; SS:BP: Ptr to MENU
29; Returns:
30; Nothing
31; Corrupts registers:
32; AX, BX
33;--------------------------------------------------------------------
34%ifndef EXCLUDE_FROM_XTIDECFG
35ALIGN MENU_JUMP_ALIGN
36MenuTime_StartSelectionTimeoutWithTicksInAX:
37 push ds
38 call PointDSBXtoTimeoutCounter
39 call TimerTicks_InitializeTimeoutFromAX
40 or BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
41 pop ds
42 ret
43%endif
44
45
46;--------------------------------------------------------------------
47; MenuTime_StopSelectionTimeout
48; Parameters
49; SS:BP: Ptr to MENU
50; Returns:
51; Nothing
52; Corrupts registers:
53; AX, BX, DX, SI, DI
54;--------------------------------------------------------------------
55ALIGN MENU_JUMP_ALIGN
56MenuTime_StopSelectionTimeout:
57 test BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
58 jz SHORT TimeoutAlreadyStopped
59 and BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
60 jmp MenuBorders_RedrawBottomBorderLine
61
62
63;--------------------------------------------------------------------
64; MenuTime_UpdateSelectionTimeout
65; Parameters
66; SS:BP: Ptr to MENU
67; Returns:
68; CF: Set if timeout
69; Cleared if time left
70; Corrupts registers:
71; AX, BX, SI, DI
72;--------------------------------------------------------------------
73ALIGN MENU_JUMP_ALIGN
74MenuTime_UpdateSelectionTimeout:
75 test BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
76 jz SHORT .ReturnSinceTimeoutDisabled
77
78 push ds
79 call PointDSBXtoTimeoutCounter
80 call TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
81 pop ds
82 jnc SHORT .RedrawSinceNoTimeout
83 and BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
84 stc
85 ret
86
87ALIGN MENU_JUMP_ALIGN
88.RedrawSinceNoTimeout:
89 call MenuBorders_RedrawBottomBorderLine
90 clc
91.ReturnSinceTimeoutDisabled:
92TimeoutAlreadyStopped:
93 ret
94
95
96;--------------------------------------------------------------------
97; MenuTime_GetTimeoutSecondsLeftToAX
98; Parameters
99; SS:BP: Ptr to MENU
100; Returns:
101; AX: Seconds until timeout
102; Corrupts registers:
103; Nothing
104;--------------------------------------------------------------------
105ALIGN MENU_JUMP_ALIGN
106MenuTime_GetTimeoutSecondsLeftToAX:
107 push ds
108 push dx
109 push cx
110 push bx
111
112 call PointDSBXtoTimeoutCounter
113 call TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
114 jc SHORT .TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero
115
116 xchg dx, ax
117 call TimerTicks_GetSecondsToAXfromTicksInDX
118 SKIP2B dx
119.TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero:
120 xor ax, ax
121
122 pop bx
123 pop cx
124 pop dx
125 pop ds
126 ret
127
128
129;--------------------------------------------------------------------
130; PointDSBXtoTimeoutCounter
131; Parameters
132; SS:BP: Ptr to MENU
133; Returns:
134; DS:BX: Ptr to timeout counter
135; Corrupts registers:
136; Nothing
137;--------------------------------------------------------------------
138ALIGN MENU_JUMP_ALIGN
139PointDSBXtoTimeoutCounter:
140 push ss
141 pop ds
142 lea bx, [bp+MENU.wTimeoutCounter]
143 ret
Note: See TracBrowser for help on using the repository browser.