source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuEvents.asm@ 521

Last change on this file since 521 was 505, checked in by krille_n_@…, 11 years ago

Changes:

  • Reverted the changes to MenuEvents.inc done in r492 since they broke the F1 key function in XTIDECFG.
  • Added a tail-call optimized variant of the CALL_DISPLAY_LIBRARY macro (JMP_DISPLAY_LIBRARY).
  • Put a block size limit in AH1Eh_ChangeXTCFmodeBasedOnControlRegisterInAL. I think it's needed but if not, it's easy to remove.
  • Other optimizations and fixes.
File size: 6.7 KB
Line 
1; Project name : XTIDE Universal BIOS Configurator v2
2; Description : Menu event handling.
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; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; MenuEvents_DisplayMenu
25; Parameters:
26; Nothing
27; Returns:
28; Nothing
29; Corrupts registers:
30; All, except segments
31;--------------------------------------------------------------------
32ALIGN JUMP_ALIGN
33MenuEvents_DisplayMenu:
34 mov bx, MenuEventHandler
35 CALL_MENU_LIBRARY DisplayWithHandlerInBXandUserDataInDXAX
36 ret
37
38
39;--------------------------------------------------------------------
40; MenuEventHandler
41; Common parameters for all events:
42; BX: Menu event (anything from MENUEVENT struct)
43; SS:BP: Menu library handle
44; Common return values for all events:
45; CF: Set if event processed
46; Cleared if event not processed
47; Corrupts registers:
48; All
49;--------------------------------------------------------------------
50ALIGN JUMP_ALIGN
51MenuEventHandler:
52 cmp bx, MENUEVENT.RefreshItemFromCX ; Above last supported item?
53 ja SHORT .EventNotHandled
54 jmp [cs:bx+.rgfnEventSpecificHandlers]
55.EventNotHandled:
56.IdleProcessing:
57 clc
58 ret
59
60ALIGN WORD_ALIGN
61.rgfnEventSpecificHandlers:
62 dw .InitializeMenuinitFromDSSI
63 dw .ExitMenu
64 dw .IdleProcessing
65 dw .ItemHighlightedFromCX
66 dw .ItemSelectedFromCX
67 dw .KeyStrokeInAX
68 dw .RefreshTitle
69 dw .RefreshInformation
70 dw .RefreshItemFromCX
71
72
73; Parameters:
74; DS:SI: Ptr to MENUINIT struct to initialize
75; Returns:
76; DS:SI: Ptr to initialized MENUINIT struct
77ALIGN JUMP_ALIGN
78.InitializeMenuinitFromDSSI:
79 push ds
80 push cs
81 pop ds
82 mov di, g_MenupageForMainMenu
83 call Menupage_SetActiveMenupageFromDSDI
84 call Menupage_GetVisibleMenuitemsToAXfromDSDI
85 pop ds
86
87 mov WORD [si+MENUINIT.wItems], ax
88 mov WORD [si+MENUINIT.bTitleLines], TITLE_LINES_IN_MENU
89 mov WORD [si+MENUINIT.bInfoLines], INFO_LINES_IN_MENU
90 mov BYTE [si+MENUINIT.bWidth], MENU_WIDTH
91 CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
92 mov [si+MENUINIT.bHeight], ah
93 call MainMenu_EnterMenuOrModifyItemVisibility
94 stc
95 ret
96
97
98; Parameters:
99; None
100; Returns:
101; CF: Set to exit menu
102; Clear to cancel exit
103ALIGN JUMP_ALIGN
104.ExitMenu:
105 call Menupage_GetActiveMenupageToDSDI
106 mov si, [di+MENUPAGE.fnBack]
107 cmp si, ExitToDosFromBackButton
108 je SHORT .QuitProgram
109 call si ; Back to previous menu
110 clc
111 ret
112
113ALIGN JUMP_ALIGN
114.QuitProgram:
115 call Dialogs_DisplayQuitDialog
116 jz SHORT .ExitToDOS
117 clc
118 ret
119.ExitToDOS:
120 call Buffers_SaveChangesIfFileLoaded
121 CALL_MENU_LIBRARY Close
122 stc
123 ret
124
125
126; Parameters:
127; CX: Index of new highlighted item
128; DX: Index of previously highlighted item or NO_ITEM_HIGHLIGHTED
129ALIGN JUMP_ALIGN
130.ItemHighlightedFromCX:
131 CALL_MENU_LIBRARY ClearInformationArea
132 CALL_MENU_LIBRARY RefreshInformation
133 stc
134 ret
135
136
137; Parameters:
138; CX: Index of selected item
139ALIGN JUMP_ALIGN
140.ItemSelectedFromCX:
141 call Menupage_GetActiveMenupageToDSDI
142 call Menupage_GetCXthVisibleMenuitemToDSSIfromDSDI
143 call [si+MENUITEM.fnActivate]
144 stc
145 ret
146
147
148; Parameters:
149; AL: ASCII character for the key
150; AH: Keyboard library scan code for the key
151ALIGN JUMP_ALIGN
152.KeyStrokeInAX:
153 cmp ah, KEY_DISPLAY_ITEM_HELP
154 jne SHORT .EventNotHandled
155
156;ALIGN JUMP_ALIGN
157;.DisplayHelp:
158 call Menupage_GetActiveMenupageToDSDI
159 CALL_MENU_LIBRARY GetHighlightedItemToAX
160 xchg cx, ax
161 call Menupage_GetCXthVisibleMenuitemToDSSIfromDSDI
162 call Menuitem_DisplayHelpMessageFromDSSI
163 stc
164 ret
165
166
167; Parameters:
168; CX: Index of item to refresh
169; Cursor has been positioned to the beginning of item line
170ALIGN JUMP_ALIGN
171.RefreshItemFromCX:
172 cmp cx, NO_ITEM_HIGHLIGHTED
173 je SHORT .NothingToRefresh
174 call Menupage_GetActiveMenupageToDSDI
175 call Menupage_GetCXthVisibleMenuitemToDSSIfromDSDI
176 jnc SHORT .NothingToRefresh
177 call MenuitemPrint_NameWithPossibleValueFromDSSI
178.NothingToRefresh:
179 stc
180 ret
181
182
183; Parameters:
184; CX: Index of highlighted item
185; Cursor has been positioned to the beginning of first line
186ALIGN JUMP_ALIGN
187.RefreshInformation:
188 cmp cx, NO_ITEM_HIGHLIGHTED
189 je SHORT .NothingToRefresh
190 call Menupage_GetActiveMenupageToDSDI
191 call Menupage_GetCXthVisibleMenuitemToDSSIfromDSDI
192 call MenuitemPrint_PrintQuickInfoFromDSSI
193 stc
194 ret
195
196
197; Parameters:
198; CX: Index of highlighted item
199; Cursor has been positioned to the beginning of first line
200ALIGN JUMP_ALIGN
201.RefreshTitle:
202 call .PrintProgramName
203 call .PrintLoadStatus
204 call .PrintStatusOfUnsavedChanges
205 stc
206.ReturnSinceNothingToPrint:
207 ret
208
209ALIGN JUMP_ALIGN
210.PrintProgramName:
211 mov si, g_szProgramTitle
212 JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
213
214ALIGN JUMP_ALIGN
215.PrintLoadStatus:
216 mov ax, [g_cfgVars+CFGVARS.wFlags]
217 test ax, FLG_CFGVARS_FILELOADED
218 jnz SHORT .PrintNameOfLoadedFile
219 test ax, FLG_CFGVARS_ROMLOADED
220 jnz SHORT .PrintLoadedEeprom
221 ; Fall to .PrintNothingLoaded
222
223.PrintNothingLoaded:
224 mov si, g_szBiosIsNotLoaded
225 JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
226
227ALIGN JUMP_ALIGN
228.PrintNameOfLoadedFile:
229 mov si, g_cfgVars+CFGVARS.szOpenedFile
230 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
231 jmp SHORT .PrintTypeOfLoadedBios
232
233ALIGN JUMP_ALIGN
234.PrintLoadedEeprom:
235 mov si, g_szEEPROM
236 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
237 ; Fall to .PrintTypeOfLoadedBios
238
239ALIGN JUMP_ALIGN
240.PrintTypeOfLoadedBios:
241 mov si, g_szSourceAndTypeSeparator
242 CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
243 call Buffers_IsXtideUniversalBiosLoaded
244 jne SHORT .PrintUnidentifiedType
245
246 call Buffers_GetFileBufferToESDI
247 mov bx, es
248 lea si, [di+ROMVARS.szVersion]
249 JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromBXSI
250
251ALIGN JUMP_ALIGN
252.PrintUnidentifiedType:
253 mov si, g_szUnidentified
254 JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
255
256ALIGN JUMP_ALIGN
257.PrintStatusOfUnsavedChanges:
258 test WORD [g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_UNSAVED
259 jz SHORT .ReturnSinceNothingToPrint
260 mov si, g_szUnsaved
261 JMP_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
Note: See TracBrowser for help on using the repository browser.