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

Last change on this file since 491 was 491, checked in by krille_n_@…, 11 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
RevLine 
[41]1; Project name  :   Assembly Library
2; Description   :   Menu timeouts other time related functions.
3
[376]4;
[491]5; XTIDE Universal BIOS and Associated Tools
[376]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.
[491]12;
[376]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
[491]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
[491]20
[41]21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
[60]25; MenuTime_StartSelectionTimeoutWithTicksInAX
[41]26;   Parameters
[60]27;       AX:     Timeout ticks
[41]28;       SS:BP:  Ptr to MENU
29;   Returns:
30;       Nothing
31;   Corrupts registers:
[60]32;       AX, BX
[41]33;--------------------------------------------------------------------
[370]34%ifndef EXCLUDE_FROM_XTIDECFG
[369]35ALIGN MENU_JUMP_ALIGN
[60]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
[41]42    ret
[370]43%endif
[41]44
45
46;--------------------------------------------------------------------
[60]47; MenuTime_StopSelectionTimeout
[41]48;   Parameters
49;       SS:BP:  Ptr to MENU
50;   Returns:
51;       Nothing
52;   Corrupts registers:
[60]53;       AX, BX, DX, SI, DI
[41]54;--------------------------------------------------------------------
[369]55ALIGN MENU_JUMP_ALIGN
[60]56MenuTime_StopSelectionTimeout:
57    test    BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
[105]58    jz      SHORT TimeoutAlreadyStopped
[60]59    and     BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
60    jmp     MenuBorders_RedrawBottomBorderLine
[41]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:
[60]71;       AX, BX, SI, DI
[41]72;--------------------------------------------------------------------
[369]73ALIGN MENU_JUMP_ALIGN
[41]74MenuTime_UpdateSelectionTimeout:
[60]75    test    BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN
76    jz      SHORT .ReturnSinceTimeoutDisabled
77
[41]78    push    ds
[45]79    call    PointDSBXtoTimeoutCounter
[60]80    call    TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
[41]81    pop     ds
[60]82    jnc     SHORT .RedrawSinceNoTimeout
83    and     BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN
84    stc
[41]85    ret
86
[369]87ALIGN MENU_JUMP_ALIGN
[60]88.RedrawSinceNoTimeout:
[62]89    call    MenuBorders_RedrawBottomBorderLine
[60]90    clc
[41]91.ReturnSinceTimeoutDisabled:
[105]92TimeoutAlreadyStopped:
[41]93    ret
94
95
96;--------------------------------------------------------------------
[60]97; MenuTime_GetTimeoutSecondsLeftToAX
[41]98;   Parameters
99;       SS:BP:  Ptr to MENU
100;   Returns:
[45]101;       AX:     Seconds until timeout
[41]102;   Corrupts registers:
[491]103;       Nothing
[41]104;--------------------------------------------------------------------
[369]105ALIGN MENU_JUMP_ALIGN
[60]106MenuTime_GetTimeoutSecondsLeftToAX:
107    push    ds
108    push    dx
109    push    cx
110    push    bx
111
[45]112    call    PointDSBXtoTimeoutCounter
[60]113    call    TimerTicks_GetTimeoutTicksLeftToAXfromDSBX
[62]114    jc      SHORT .TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero
[60]115
[45]116    xchg    dx, ax
[60]117    call    TimerTicks_GetSecondsToAXfromTicksInDX
[491]118    SKIP2B  dx
[62]119.TimeoutHasOccurredSoMakeSureTicksAreNotBelowZero:
[60]120    xor     ax, ax
[133]121
[60]122    pop     bx
123    pop     cx
124    pop     dx
125    pop     ds
126    ret
[41]127
128
129;--------------------------------------------------------------------
[45]130; PointDSBXtoTimeoutCounter
[41]131;   Parameters
132;       SS:BP:  Ptr to MENU
133;   Returns:
134;       DS:BX:  Ptr to timeout counter
135;   Corrupts registers:
[45]136;       Nothing
[41]137;--------------------------------------------------------------------
[369]138ALIGN MENU_JUMP_ALIGN
[45]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.