source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/ConfigurationMenu.asm@ 182

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

Changes to all parts of the project:

  • Size optimizations.
  • Added a define (EXCLUDE_FROM_XTIDECFG) to exclude unused library code from XTIDECFG.
  • Tried to minimize time spent with interrupts disabled.
  • Some minor attempts to improve speed (reordering instructions etc).
  • Tried to improve readability, did some cleanup and fixed some errors in comments.
File size: 10.0 KB
Line 
1; Project name : XTIDE Universal BIOS Configurator v2
2; Description : "Configure XTIDE Universal BIOS" menu structs and functions.
3
4; Section containing initialized data
5SECTION .data
6
7ALIGN WORD_ALIGN
8g_MenupageForConfigurationMenu:
9istruc MENUPAGE
10 at MENUPAGE.fnEnter, dw ConfigurationMenu_EnterMenuOrModifyItemVisibility
11 at MENUPAGE.fnBack, dw MainMenu_EnterMenuOrModifyItemVisibility
12 at MENUPAGE.wMenuitems, dw 9
13iend
14
15g_MenuitemConfigurationBackToMainMenu:
16istruc MENUITEM
17 at MENUITEM.fnActivate, dw MainMenu_EnterMenuOrModifyItemVisibility
18 at MENUITEM.szName, dw g_szItemCfgBackToMain
19 at MENUITEM.szQuickInfo, dw g_szItemCfgBackToMain
20 at MENUITEM.szHelp, dw g_szItemCfgBackToMain
21 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
22 at MENUITEM.bType, db TYPE_MENUITEM_PAGEBACK
23iend
24
25g_MenuitemConfigurationPrimaryIdeController:
26istruc MENUITEM
27 at MENUITEM.fnActivate, dw PrimaryIdeController
28 at MENUITEM.szName, dw g_szItemCfgIde1
29 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
30 at MENUITEM.szHelp, dw g_szNfoCfgIde
31 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
32 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
33iend
34
35g_MenuitemConfigurationSecondaryIdeController:
36istruc MENUITEM
37 at MENUITEM.fnActivate, dw SecondaryIdeController
38 at MENUITEM.szName, dw g_szItemCfgIde2
39 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
40 at MENUITEM.szHelp, dw g_szNfoCfgIde
41 at MENUITEM.bFlags, db NULL
42 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
43iend
44
45g_MenuitemConfigurationTertiaryIdeController:
46istruc MENUITEM
47 at MENUITEM.fnActivate, dw TertiaryIdeController
48 at MENUITEM.szName, dw g_szItemCfgIde3
49 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
50 at MENUITEM.szHelp, dw g_szNfoCfgIde
51 at MENUITEM.bFlags, db NULL
52 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
53iend
54
55g_MenuitemConfigurationQuaternaryIdeController:
56istruc MENUITEM
57 at MENUITEM.fnActivate, dw QuaternaryIdeController
58 at MENUITEM.szName, dw g_szItemCfgIde4
59 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
60 at MENUITEM.szHelp, dw g_szNfoCfgIde
61 at MENUITEM.bFlags, db NULL
62 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
63iend
64
65g_MenuitemConfigurationBootMenuSettings:
66istruc MENUITEM
67 at MENUITEM.fnActivate, dw BootMenuSettingsMenu_EnterMenuOrModifyItemVisibility
68 at MENUITEM.szName, dw g_szItemCfgBootMenu
69 at MENUITEM.szQuickInfo, dw g_szNfoCfgBootMenu
70 at MENUITEM.szHelp, dw g_szNfoCfgBootMenu
71 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
72 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
73iend
74
75g_MenuitemConfigurationFullOperatingMode:
76istruc MENUITEM
77 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
78 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
79 at MENUITEM.szName, dw g_szItemCfgFullMode
80 at MENUITEM.szQuickInfo, dw g_szNfoCfgFullMode
81 at MENUITEM.szHelp, dw g_szHelpCfgFullMode
82 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
83 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
84 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw ROMVARS.wFlags
85 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgCfgFullMode
86 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBooleanFlag
87 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFlagBooleans
88 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw FLG_ROMVARS_FULLMODE
89iend
90
91g_MenuitemConfigurationKiBtoStealFromRAM:
92istruc MENUITEM
93 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
94 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
95 at MENUITEM.szName, dw g_szItemCfgStealSize
96 at MENUITEM.szQuickInfo, dw g_szNfoCfgStealSize
97 at MENUITEM.szHelp, dw g_szHelpCfgStealSize
98 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE | FLG_MENUITEM_BYTEVALUE
99 at MENUITEM.bType, db TYPE_MENUITEM_UNSIGNED
100 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw ROMVARS.bStealSize
101 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgCfgStealSize
102 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
103 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw 255
104iend
105
106g_MenuitemConfigurationIdeControllers:
107istruc MENUITEM
108 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
109 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
110 at MENUITEM.szName, dw g_szItemCfgIdeCnt
111 at MENUITEM.szQuickInfo, dw g_szNfoCfgIdeCnt
112 at MENUITEM.szHelp, dw g_szNfoCfgIdeCnt
113 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_BYTEVALUE
114 at MENUITEM.bType, db TYPE_MENUITEM_UNSIGNED
115 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw ROMVARS.bIdeCnt
116 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgCfgIdeCnt
117 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
118 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw 4
119iend
120
121
122; Section containing code
123SECTION .text
124
125;--------------------------------------------------------------------
126; MainMenu_EnterMenuOrModifyItemVisibility
127; Parameters:
128; SS:BP: Menu handle
129; Returns:
130; Nothing
131; Corrupts registers:
132; All, except BP
133;--------------------------------------------------------------------
134ALIGN JUMP_ALIGN
135ConfigurationMenu_EnterMenuOrModifyItemVisibility:
136 push cs
137 pop ds
138 call .DisableAllIdeControllerMenuitems
139 call .EnableIdeControllerMenuitemsBasedOnConfiguration
140 call .EnableOrDisableKiBtoStealFromRAM
141 call .EnableOrDisableIdeControllerCount
142 mov si, g_MenupageForConfigurationMenu
143 jmp Menupage_ChangeToNewMenupageInDSSI
144
145;--------------------------------------------------------------------
146; .DisableAllIdeControllerMenuitems
147; .EnableIdeControllerMenuitemsBasedOnConfiguration
148; Parameters:
149; SS:BP: Menu handle
150; Returns:
151; Nothing
152; Corrupts registers:
153; AX, BX, CX
154;--------------------------------------------------------------------
155ALIGN JUMP_ALIGN
156.DisableAllIdeControllerMenuitems:
157 mov cx, MAX_ALLOWED_IDE_CONTROLLERS-1
158 mov bx, g_MenuitemConfigurationSecondaryIdeController
159ALIGN JUMP_ALIGN
160.DisableNextIdeControllerMenuitem:
161 call .DisableMenuitemFromCSBX
162 add bx, BYTE MENUITEM_size
163 loop .DisableNextIdeControllerMenuitem
164 ret
165
166ALIGN JUMP_ALIGN
167.EnableIdeControllerMenuitemsBasedOnConfiguration:
168 call .GetIdeControllerCountToCX
169 dec cx ; Primary always enabled
170 jz .PrimaryControllerAlreadyEnabled
171 mov bx, g_MenuitemConfigurationSecondaryIdeController
172ALIGN JUMP_ALIGN
173.EnableNextIdeControllerMenuitem:
174 call .EnableMenuitemFromCSBX
175 add bx, BYTE MENUITEM_size
176 loop .EnableNextIdeControllerMenuitem
177.PrimaryControllerAlreadyEnabled:
178 ret
179
180;--------------------------------------------------------------------
181; .GetIdeControllerCountToCX
182; Parameters:
183; SS:BP: Menu handle
184; Returns:
185; CX: Number of IDE controllers to configure
186; Corrupts registers:
187; AX, BX
188;--------------------------------------------------------------------
189ALIGN JUMP_ALIGN
190.GetIdeControllerCountToCX:
191 call Buffers_GetRomvarsFlagsToAX
192 test ax, FLG_ROMVARS_FULLMODE
193 mov al, 1 ; Assume lite mode
194 jz SHORT .AllowOnlyOneIdeControllerInLiteMode
195
196 mov bx, ROMVARS.bIdeCnt
197 call Buffers_GetRomvarsValueToAXfromOffsetInBX
198ALIGN JUMP_ALIGN
199.AllowOnlyOneIdeControllerInLiteMode:
200 cbw ; A maximum of 127 controllers should be sufficient
201 xchg cx, ax
202 ret
203
204;--------------------------------------------------------------------
205; .EnableOrDisableKiBtoStealFromRAM
206; Parameters:
207; SS:BP: Menu handle
208; Returns:
209; Nothing
210; Corrupts registers:
211; AX, BX, CX
212;--------------------------------------------------------------------
213ALIGN JUMP_ALIGN
214.EnableOrDisableKiBtoStealFromRAM:
215 call Buffers_GetRomvarsFlagsToAX
216 mov bx, g_MenuitemConfigurationKiBtoStealFromRAM
217 test ax, FLG_ROMVARS_FULLMODE
218 jz SHORT .DisableMenuitemFromCSBX
219 jmp SHORT .EnableMenuitemFromCSBX
220
221;--------------------------------------------------------------------
222; .EnableOrDisableKiBtoStealFromRAM
223; Parameters:
224; SS:BP: Menu handle
225; Returns:
226; Nothing
227; Corrupts registers:
228; AX, BX
229;--------------------------------------------------------------------
230ALIGN JUMP_ALIGN
231.EnableOrDisableIdeControllerCount:
232 call Buffers_GetRomvarsFlagsToAX
233 mov bx, g_MenuitemConfigurationIdeControllers
234 test ax, FLG_ROMVARS_FULLMODE
235 jnz SHORT .EnableMenuitemFromCSBX
236
237 ; Limit controller count for lite mode
238 call Buffers_GetFileBufferToESDI
239 mov BYTE [es:di+ROMVARS.bIdeCnt], MAX_LITE_MODE_CONTROLLERS
240 jmp SHORT .DisableMenuitemFromCSBX
241
242;--------------------------------------------------------------------
243; .EnableMenuitemFromCSBX
244; .DisableMenuitemFromCSBX
245; Parameters:
246; CS:BX: Ptr to MENUITEM
247; Returns:
248; Nothing
249; Corrupts registers:
250; Nothing
251;--------------------------------------------------------------------
252ALIGN JUMP_ALIGN
253.EnableMenuitemFromCSBX:
254 or BYTE [cs:bx+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
255 ret
256
257ALIGN JUMP_ALIGN
258.DisableMenuitemFromCSBX:
259 and BYTE [cs:bx+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
260 ret
261
262
263
264;--------------------------------------------------------------------
265; MENUITEM activation functions (.fnActivate)
266; Parameters:
267; SS:BP: Ptr to MENU
268; Returns:
269; Nothing
270; Corrupts registers:
271; All, except segments
272;--------------------------------------------------------------------
273ALIGN JUMP_ALIGN
274PrimaryIdeController:
275 mov bx, ROMVARS.ideVars0
276 jmp SHORT DisplayIdeControllerMenu
277
278ALIGN JUMP_ALIGN
279SecondaryIdeController:
280 mov bx, ROMVARS.ideVars1
281 jmp SHORT DisplayIdeControllerMenu
282
283ALIGN JUMP_ALIGN
284TertiaryIdeController:
285 mov bx, ROMVARS.ideVars2
286 jmp SHORT DisplayIdeControllerMenu
287
288ALIGN JUMP_ALIGN
289QuaternaryIdeController:
290 mov bx, ROMVARS.ideVars3
291 ; Fall to DisplayIdeControllerMenu
292
293ALIGN JUMP_ALIGN
294DisplayIdeControllerMenu:
295 call IdeControllerMenu_InitializeToIdevarsOffsetInBX
296 jmp IdeControllerMenu_EnterMenuOrModifyItemVisibility
Note: See TracBrowser for help on using the repository browser.