source: xtideuniversalbios/trunk/Configurator/Src/MenuPageItem.asm @ 2

Last change on this file since 2 was 2, checked in by aitotat, 14 years ago
File size: 11.6 KB
Line 
1; File name     :   MenuPageItem.asm
2; Project name  :   XTIDE Univeral BIOS Configurator
3; Created date  :   15.4.2010
4; Last update   :   1.5.2010
5; Author        :   Tomi Tilli
6; Description   :   Functions to access MENUPAGEITEM structs.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; Prints MenuPageItem information string to bottom of menu window.
13;
14; MenuPageItem_PrintInfo
15;   Parameters:
16;       DS:DI:  Ptr to MENUPAGEITEM
17;       SS:BP:  Ptr to MENUVARS
18;   Returns:
19;       Nothing
20;   Corrupts registers:
21;       AX, BX, CX, DX, DI, ES
22;--------------------------------------------------------------------
23ALIGN JUMP_ALIGN
24MenuPageItem_PrintInfo:
25    push    cs
26    pop     es
27    eMOVZX  cx, BYTE [bp+MENUVARS.bInfoH]   ; Info line count to CX
28    call    MenuPageItem_PrintCommonInfoLines
29    mov     di, [di+MENUPAGEITEM.szInfo]    ; ES:DI now points to info string
30    jmp     MenuDraw_MultilineStr
31
32;--------------------------------------------------------------------
33; Prints information lines that are common for all menuitems.
34;
35; MenuPageItem_PrintCommonInfoLines
36;   Parameters:
37;       ES:     String segment
38;       SS:BP:  Ptr to MENUVARS
39;   Returns:
40;       Nothing
41;   Corrupts registers:
42;       AX, BX, DX
43;--------------------------------------------------------------------
44ALIGN JUMP_ALIGN
45MenuPageItem_PrintCommonInfoLines:
46    push    di
47    push    cx
48    mov     di, g_szCommonInfo      ; ES:DI now points common info string
49    call    MenuDraw_MultilineStr   ; Draw title string
50    call    MenuDraw_NewlineStr     ; Next line
51    call    MenuDraw_NewlineStr     ; Next line
52    pop     cx
53    pop     di
54    ret
55
56
57;--------------------------------------------------------------------
58; Displays MenuPageItem help dialog.
59;
60; MenuPageItem_DisplayHelpDialog
61;   Parameters:
62;       DS:DI:  Ptr to MENUPAGEITEM
63;       SS:BP:  Ptr to MENUVARS
64;   Returns:
65;       Nothing
66;   Corrupts registers:
67;       AX, BX, CX, DX, DI, ES
68;--------------------------------------------------------------------
69ALIGN JUMP_ALIGN
70MenuPageItem_DisplayHelpDialog:
71    mov     di, [di+MENUPAGEITEM.szHelp]    ; ES:DI now points to help string
72    push    cs
73    pop     es
74    mov     bl, WIDTH_DLG                   ; Dialog width
75    jmp     Menu_ShowMsgDlg
76
77
78;--------------------------------------------------------------------
79; Displays message for special function menupageitem.
80;
81; MenuPageItem_DisplaySpecialFunctionDialog
82;   Parameters:
83;       DS:DI:  Ptr to MENUPAGEITEM
84;       SS:BP:  Ptr to MENUVARS
85;   Returns:
86;       Nothing
87;   Corrupts registers:
88;       AX, BX, DX
89;--------------------------------------------------------------------
90ALIGN JUMP_ALIGN
91MenuPageItem_DisplaySpecialFunctionDialog:
92    push    es
93    push    di
94    push    cx
95
96    mov     di, [di+MENUPAGEITEM.szDialog]
97    push    cs
98    pop     es
99    mov     bl, WIDTH_DLG                   ; Dialog width
100    call    Menu_ShowMsgDlg
101
102    pop     cx
103    pop     di
104    pop     es
105    ret
106
107
108;--------------------------------------------------------------------
109; Asks unsigned byte from user.
110;
111; MenuPageItem_GetByteFromUser
112; MenuPageItem_GetByteFromUserWithoutMarkingUnsaved
113;   Parameters:
114;       DS:DI:  Ptr to MENUPAGEITEM
115;       SS:BP:  Ptr to MENUVARS
116;   Returns:
117;       CF:     Set if user data inputted succesfully
118;               Cleared if cancel
119;   Corrupts registers:
120;       AX, BX, CX, DX, ES
121;--------------------------------------------------------------------
122ALIGN JUMP_ALIGN
123MenuPageItem_GetByteFromUser:
124    call    MenuPageItem_GetByteFromUserWithoutMarkingUnsaved
125    jc      SHORT MenuPageItem_MarkSettingsAsUnsaved
126    ret
127ALIGN JUMP_ALIGN
128MenuPageItem_GetByteFromUserWithoutMarkingUnsaved:
129    mov     cx, 10                              ; Numeric base
130    mov     bx, [di+MENUPAGEITEM.szDialog]      ; Dialog string
131    call    MenuPageItem_ShowWordDialog
132    jnc     SHORT .Return                       ; Return if cancel
133
134    ; Limit to min or max and store value
135    MAX_U   ax, [di+MENUPAGEITEM.wValueMin]
136    MIN_U   ax, [di+MENUPAGEITEM.wValueMax]
137    mov     bx, [di+MENUPAGEITEM.pValue]
138    mov     [bx], al
139    stc
140.Return:
141    ret
142
143
144;--------------------------------------------------------------------
145; Asks unsigned word from user.
146;
147; MenuPageItem_GetWordFromUser
148; MenuPageItem_GetWordFromUserWithoutMarkingUnsaved
149;   Parameters:
150;       DS:DI:  Ptr to MENUPAGEITEM
151;       SS:BP:  Ptr to MENUVARS
152;   Returns:
153;       CF:     Set if user data inputted succesfully
154;               Cleared if cancel
155;   Corrupts registers:
156;       AX, BX, CX, DX, ES
157;--------------------------------------------------------------------
158ALIGN JUMP_ALIGN
159MenuPageItem_GetWordFromUser:
160    call    MenuPageItem_GetWordFromUserWithoutMarkingUnsaved
161    jc      SHORT MenuPageItem_MarkSettingsAsUnsaved
162    ret
163ALIGN JUMP_ALIGN
164MenuPageItem_GetWordFromUserWithoutMarkingUnsaved:
165    mov     cx, 10                              ; Numeric base
166    mov     bx, [di+MENUPAGEITEM.szDialog]      ; Dialog string
167    call    MenuPageItem_ShowWordDialog
168    jnc     SHORT .Return                       ; Return if cancel
169
170    ; Limit to min or max and store value
171    MAX_U   ax, [di+MENUPAGEITEM.wValueMin]
172    MIN_U   ax, [di+MENUPAGEITEM.wValueMax]
173    mov     bx, [di+MENUPAGEITEM.pValue]
174    mov     [bx], ax
175    stc
176.Return:
177    ret
178
179
180;--------------------------------------------------------------------
181; Asks hexadecimal byte from user.
182;
183; MenuPageItem_GetHexByteFromUser
184; MenuPageItem_GetHexByteFromUserWithoutMarkingUnsaved
185;   Parameters:
186;       DS:DI:  Ptr to MENUPAGEITEM
187;       SS:BP:  Ptr to MENUVARS
188;   Returns:
189;       CF:     Set if user data inputted succesfully
190;               Cleared if cancel
191;   Corrupts registers:
192;       AX, BX, CX, DX, ES
193;--------------------------------------------------------------------
194ALIGN JUMP_ALIGN
195MenuPageItem_GetHexByteFromUser:
196    call    MenuPageItem_GetHexByteFromUserWithoutMarkingUnsaved
197    jc      SHORT MenuPageItem_MarkSettingsAsUnsaved
198    ret
199ALIGN JUMP_ALIGN
200MenuPageItem_GetHexByteFromUserWithoutMarkingUnsaved:
201    mov     cx, 16                              ; Numeric base
202    mov     bx, [di+MENUPAGEITEM.szDialog]      ; Dialog string
203    call    MenuPageItem_ShowWordDialog
204    jnc     SHORT .Return                       ; Return if cancel
205
206    ; Store value
207    mov     bx, [di+MENUPAGEITEM.pValue]
208    mov     [bx], al
209.Return:
210    ret
211
212
213;--------------------------------------------------------------------
214; Asks hexadecimal word from user.
215;
216; MenuPageItem_GetHexWordFromUser
217; MenuPageItem_GetHexWordFromUserWithoutMarkingUnsaved
218;   Parameters:
219;       DS:DI:  Ptr to MENUPAGEITEM
220;       SS:BP:  Ptr to MENUVARS
221;   Returns:
222;       CF:     Set if user data inputted succesfully
223;               Cleared if cancel
224;   Corrupts registers:
225;       AX, BX, CX, DX, ES
226;--------------------------------------------------------------------
227ALIGN JUMP_ALIGN
228MenuPageItem_GetHexWordFromUser:
229    call    MenuPageItem_GetHexWordFromUserWithoutMarkingUnsaved
230    jc      SHORT MenuPageItem_MarkSettingsAsUnsaved
231    ret
232ALIGN JUMP_ALIGN
233MenuPageItem_GetHexWordFromUserWithoutMarkingUnsaved:
234    mov     cx, 16                              ; Numeric base
235    mov     bx, [di+MENUPAGEITEM.szDialog]      ; Dialog string
236    call    MenuPageItem_ShowWordDialog
237    jnc     SHORT .Return                       ; Return if cancel
238
239    ; Store value
240    mov     bx, [di+MENUPAGEITEM.pValue]
241    mov     [bx], ax
242.Return:
243    ret
244
245
246;--------------------------------------------------------------------
247; Called when any BIOS setting is modified.
248;
249; MenuPageItem_MarkSettingsAsUnsaved
250;   Parameters:
251;       SS:BP:  Ptr to MENUVARS
252;   Returns:
253;       CF:     Set since user data inputted succesfully
254;   Corrupts registers:
255;       AX, BX, CX, DX
256;--------------------------------------------------------------------
257ALIGN JUMP_ALIGN
258MenuPageItem_MarkSettingsAsUnsaved:
259    or      WORD [cs:g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_UNSAVED
260    call    FormatTitle_RedrawMenuTitle
261    stc
262    ret
263
264
265;--------------------------------------------------------------------
266; Shows dialog that asks WORD from user.
267;
268; MenuPageItem_ShowWordDialog
269;   Parameters:
270;       CX:     Numberic base (10=dec, 16=hex)
271;       DS:BX:  Ptr to dialog string
272;       SS:BP:  Ptr to MENUVARS
273;   Returns:
274;       AX:     16-bit unsigned word inputted by user
275;       CF:     Set if user data inputted succesfully
276;               Cleared if cancel
277;   Corrupts registers:
278;       BX, CX, DX, ES
279;--------------------------------------------------------------------
280ALIGN JUMP_ALIGN
281MenuPageItem_ShowWordDialog:
282    push    di
283
284    push    cs
285    pop     es
286    mov     di, bx              ; Dialog string now in ES:DI
287    mov     bl, WIDTH_DLG       ; Dialog width
288    call    Menu_ShowDWDlg
289
290    pop     di
291    ret
292
293
294;--------------------------------------------------------------------
295; Asks boolean value (Y/N) from user.
296;
297; MenuPageItem_GetBoolFromUser
298; MenuPageItem_GetBoolFromUserWithoutMarkingUnsaved
299;   Parameters:
300;       DS:DI:  Ptr to MENUPAGEITEM
301;       SS:BP:  Ptr to MENUVARS
302;   Returns:
303;       CF:     Set if user data inputted succesfully
304;               Cleared if cancel
305;   Corrupts registers:
306;       AX, BX, CX, DX, ES
307;--------------------------------------------------------------------
308ALIGN JUMP_ALIGN
309MenuPageItem_GetBoolFromUser:
310    call    MenuPageItem_GetBoolFromUserWithoutMarkingUnsaved
311    jc      SHORT MenuPageItem_MarkSettingsAsUnsaved
312    ret
313ALIGN JUMP_ALIGN
314MenuPageItem_GetBoolFromUserWithoutMarkingUnsaved:
315    push    di
316    push    cs
317    pop     es
318    mov     di, [di+MENUPAGEITEM.szDialog]      ; Dialog string
319    mov     bl, WIDTH_DLG                       ; Dialog width
320    call    Menu_ShowYNDlg
321    pop     di
322    jz      SHORT .Cancelled                    ; Return if cancelled
323    mov     bx, [di+MENUPAGEITEM.pValue]
324    mov     ax, [di+MENUPAGEITEM.wValueMask]
325    jc      SHORT .UserSelectedY
326
327    ; User selected 'N'
328    not     ax
329    and     [bx], ax
330    stc
331    ret
332ALIGN JUMP_ALIGN
333.UserSelectedY:
334    or      [bx], ax
335    stc
336    ret
337.Cancelled:
338    clc
339    ret
340
341
342;--------------------------------------------------------------------
343; Activates new submenu for getting lookup value selected by user.
344;
345; MainPageItem_ActivateSubmenuForGettingLookupValue
346; MainPageItem_ActivateSubmenuForGettingLookupValueWithoutMarkingUnsaved
347;   Parameters:
348;       DS:SI   Ptr to MENUPAGE
349;       DS:DI   Ptr to MENUPAGEITEM
350;       SS:BP:  Ptr to MENUVARS
351;   Returns:
352;       CF:     Set if menuitem changed
353;               Cleared if no changes
354;   Corrupts registers:
355;       AX, BX, CX, DX
356;--------------------------------------------------------------------
357ALIGN JUMP_ALIGN
358MainPageItem_ActivateSubmenuForGettingLookupValue:
359    call    MainPageItem_ActivateSubmenuForGettingLookupValueWithoutMarkingUnsaved
360    jc      SHORT MenuPageItem_MarkSettingsAsUnsaved
361    ret
362ALIGN JUMP_ALIGN
363MainPageItem_ActivateSubmenuForGettingLookupValueWithoutMarkingUnsaved:
364    call    MainPageItem_ActivateSubmenu
365    cmp     cx, BYTE 0
366    jl      SHORT .Return                       ; User cancellation
367    push    si
368    mov     si, [di+MENUPAGEITEM.pSubMenuPage]  ; DS:SI points to value MENUPAGE
369    mov     bx, [si+MENUPAGE.prgbItemToVal]     ; Load offset to lookup table
370    add     bx, cx                              ; Add menuitem index
371    mov     al, [bx]                            ; Load value
372    mov     bx, [di+MENUPAGEITEM.pValue]        ; Load pointer to value
373    mov     [bx], al                            ; Store value
374    pop     si
375    stc                                         ; Changes so redraw
376    ret
377.Return:
378    clc
379    ret
380
381
382;--------------------------------------------------------------------
383; Activates new submenu.
384;
385; MainPageItem_ActivateSubmenu
386;   Parameters:
387;       DS:SI   Ptr to MENUPAGE
388;       DS:DI   Ptr to MENUPAGEITEM
389;       SS:BP:  Ptr to MENUVARS
390;   Returns:
391;       CX:     Index of last pointed Menuitem (not necessary selected with ENTER)
392;               FFFFh if cancelled with ESC
393;       CF:     Set if menuitem changed
394;               Cleared if no changes
395;   Corrupts registers:
396;       AX, BX, CX, DX
397;--------------------------------------------------------------------
398ALIGN JUMP_ALIGN
399MainPageItem_ActivateSubmenu:
400    push    di
401    push    si
402    mov     si, [di+MENUPAGEITEM.pSubMenuPage]  ; DS:SI points to new MENUPAGE
403    call    Main_EnterMenu
404    call    Menu_RefreshMenu
405    pop     si
406    pop     di
407    clc
408    ret
409
410
411;--------------------------------------------------------------------
412; Leaves submenu.
413;
414; MainPageItem_ActivateLeaveSubmenu
415;   Parameters:
416;       DS:SI   Ptr to MENUPAGE
417;       DS:DI   Ptr to MENUPAGEITEM
418;       SS:BP:  Ptr to MENUVARS
419;   Returns:
420;       CF:     Cleared since no need to redraw
421;   Corrupts registers:
422;       AX, BX, CX, DX
423;--------------------------------------------------------------------
424ALIGN JUMP_ALIGN
425MainPageItem_ActivateLeaveSubmenu:
426    call    Menu_Exit
427    clc
428    ret
Note: See TracBrowser for help on using the repository browser.