source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuInit.asm @ 390

Last change on this file since 390 was 390, checked in by aitotat@…, 10 years ago

Changes to Assembly Library:

  • Menu library now stores and restores display context.
  • Added couple of new eCMOVx macros.
File size: 6.2 KB
Line 
1; Project name  :   Assembly Library
2; Description   :   Functions for initializing menu system.
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; MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX
26;   Parameters
27;       DX:AX:  User specified data
28;       BX:     Menu event handler
29;   Returns:
30;       AX:     Index of selected item or NO_ITEM_SELECTED
31;   Corrupts registers:
32;       All except segments
33;--------------------------------------------------------------------
34ALIGN MENU_JUMP_ALIGN
35MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX:
36    push    es
37    push    ds
38    xchg    cx, ax          ; Backup user data
39    CALL_DISPLAY_LIBRARY    PushDisplayContext
40
41    ; Create MENU struct to stack
42    mov     ax, MENU_size
43    eENTER_STRUCT   ax
44    xchg    ax, cx          ; Restore user data to AX
45    call    Memory_ZeroSSBPwithSizeInCX
46
47    ; Display menu
48    call    EnterMenuWithHandlerInBXandUserDataInDXAX
49
50    ; Get menu selection and destroy menu variables from stack
51    mov     dx, [bp+MENUINIT.wHighlightedItem]
52    eLEAVE_STRUCT   MENU_size
53
54    CALL_DISPLAY_LIBRARY    PopDisplayContext
55    xchg    ax, dx          ; Return highlighted item in AX
56    pop     ds
57    pop     es
58    ret
59
60
61;--------------------------------------------------------------------
62; EnterMenuWithHandlerInBXandUserDataInDXAX
63;   Parameters
64;       DX:AX:  User specified data
65;       BX:     Menu event handler
66;       SS:BP:  Ptr to MENU
67;   Returns:
68;       Nothing
69;   Corrupts registers:
70;       All, except SS:BP
71;--------------------------------------------------------------------
72ALIGN MENU_JUMP_ALIGN
73EnterMenuWithHandlerInBXandUserDataInDXAX:
74    mov     [bp+MENU.fnEventHandler], bx
75    mov     [bp+MENU.dwUserData], ax
76    mov     [bp+MENU.dwUserData+2], dx
77
78    mov     ax, CURSOR_HIDDEN
79    CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
80    call    MenuEvent_InitializeMenuinit    ; User initialization
81%ifndef USE_186
82    call    MenuInit_RefreshMenuWindow
83    jmp     MenuLoop_Enter
84%else
85    push    MenuLoop_Enter
86    ; Fall to MenuInit_RefreshMenuWindow
87%endif
88
89
90;--------------------------------------------------------------------
91; MenuInit_RefreshMenuWindow
92;   Parameters
93;       SS:BP:  Ptr to MENU
94;   Returns:
95;       Nothing
96;   Corrupts registers:
97;       AX, BX, CX, DX, SI, DI
98;--------------------------------------------------------------------
99ALIGN MENU_JUMP_ALIGN
100MenuInit_RefreshMenuWindow:
101    call    MenuBorders_RefreshAll          ; Draw borders
102    call    MenuText_RefreshTitle           ; Draw title strings
103    call    MenuText_RefreshAllItems        ; Draw item strings
104    jmp     MenuText_RefreshInformation     ; Draw information strings
105
106
107;--------------------------------------------------------------------
108; MenuInit_CloseMenuIfExitEventAllows
109;   Parameters
110;       SS:BP:  Ptr to MENU
111;   Returns:
112;       Nothing
113;   Corrupts registers:
114;       AX, BX, DX
115;--------------------------------------------------------------------
116%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
117ALIGN MENU_JUMP_ALIGN
118MenuInit_CloseMenuIfExitEventAllows:
119    call    MenuEvent_ExitMenu
120    jc      SHORT MenuInit_CloseMenuWindow
121    ret
122%endif
123
124
125;--------------------------------------------------------------------
126; MenuInit_CloseMenuWindow
127;   Parameters
128;       SS:BP:  Ptr to MENU
129;   Returns:
130;       Nothing
131;   Corrupts registers:
132;       Nothing
133;--------------------------------------------------------------------
134ALIGN MENU_JUMP_ALIGN
135MenuInit_CloseMenuWindow:
136    or      BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
137    ret
138
139
140;--------------------------------------------------------------------
141; MenuInit_HighlightItemFromAX
142;   Parameters
143;       AX:     Item to highlight
144;       SS:BP:  Ptr to MENU
145;   Returns:
146;       Nothing
147;   Corrupts registers:
148;       AX, BX, CX, DX, SI, DI
149;--------------------------------------------------------------------
150ALIGN MENU_JUMP_ALIGN
151MenuInit_HighlightItemFromAX:
152    sub     ax, [bp+MENUINIT.wHighlightedItem]
153    jmp     MenuScrollbars_MoveHighlightedItemByAX
154
155;--------------------------------------------------------------------
156; MenuInit_GetHighlightedItemToAX
157;   Parameters
158;       SS:BP:  Ptr to MENU
159;   Returns:
160;       AX:     Index of highlighted item or NO_ITEM_HIGHLIGHTED
161;   Corrupts registers:
162;       Nothing
163;--------------------------------------------------------------------
164%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
165ALIGN MENU_JUMP_ALIGN
166MenuInit_GetHighlightedItemToAX:
167    mov     ax, [bp+MENUINIT.wHighlightedItem]
168    ret
169%endif
170
171
172;--------------------------------------------------------------------
173; MenuInit_SetTitleHeightFromAL
174; MenuInit_SetInformationHeightFromAL
175; MenuInit_SetTotalItemsFromAX
176;   Parameters
177;       AX/AL:  Parameter
178;       SS:BP:      Ptr to MENU
179;   Returns:
180;       Nothing
181;   Corrupts registers:
182;       Nothing
183;--------------------------------------------------------------------
184%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
185ALIGN MENU_JUMP_ALIGN
186MenuInit_SetTitleHeightFromAL:
187    mov     [bp+MENUINIT.bTitleLines], al
188    ret
189
190ALIGN MENU_JUMP_ALIGN
191MenuInit_SetInformationHeightFromAL:
192    mov     [bp+MENUINIT.bInfoLines], al
193    ret
194
195ALIGN MENU_JUMP_ALIGN
196MenuInit_SetTotalItemsFromAX:
197    mov     [bp+MENUINIT.wItems], ax
198    ret
199%endif
200
201
202;--------------------------------------------------------------------
203; MenuInit_SetUserDataFromDSSI
204; MenuInit_GetUserDataToDSSI
205;   Parameters
206;       DS:SI:  User data (MenuInit_SetUserDataFromDSSI)
207;       SS:BP:  Ptr to MENU
208;   Returns:
209;       DS:SI:  User data (MenuInit_GetUserDataToDSSI)
210;   Corrupts registers:
211;       Nothing
212;--------------------------------------------------------------------
213%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
214ALIGN MENU_JUMP_ALIGN
215MenuInit_SetUserDataFromDSSI:
216    mov     [bp+MENU.dwUserData], si
217    mov     [bp+MENU.dwUserData+2], ds
218    ret
219
220ALIGN MENU_JUMP_ALIGN
221MenuInit_GetUserDataToDSSI:
222    lds     si, [bp+MENU.dwUserData]
223    ret
224%endif
Note: See TracBrowser for help on using the repository browser.