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

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

Size optimizations in various files in the Assembly Library. Also a very small change to a string in XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm

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