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

Last change on this file since 378 was 376, checked in by gregli@…, 13 years ago

WIDE checkin... Added copyright and license information to sorce files, as per the GPL instructions for usage.

File size: 13.0 KB
Line 
1; Project name : XTIDE Universal BIOS Configurator v2
2; Description : "Configure XTIDE Universal BIOS" menu structs and functions.
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 initialized data
21SECTION .data
22
23ALIGN WORD_ALIGN
24g_MenupageForConfigurationMenu:
25istruc MENUPAGE
26 at MENUPAGE.fnEnter, dw ConfigurationMenu_EnterMenuOrModifyItemVisibility
27 at MENUPAGE.fnBack, dw MainMenu_EnterMenuOrModifyItemVisibility
28 at MENUPAGE.wMenuitems, dw 9
29iend
30
31g_MenuitemConfigurationBackToMainMenu:
32istruc MENUITEM
33 at MENUITEM.fnActivate, dw MainMenu_EnterMenuOrModifyItemVisibility
34 at MENUITEM.szName, dw g_szItemCfgBackToMain
35 at MENUITEM.szQuickInfo, dw g_szItemCfgBackToMain
36 at MENUITEM.szHelp, dw g_szItemCfgBackToMain
37 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
38 at MENUITEM.bType, db TYPE_MENUITEM_PAGEBACK
39iend
40
41g_MenuitemConfigurationPrimaryIdeController:
42istruc MENUITEM
43 at MENUITEM.fnActivate, dw PrimaryIdeController
44 at MENUITEM.szName, dw g_szItemCfgIde1
45 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
46 at MENUITEM.szHelp, dw g_szNfoCfgIde
47 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
48 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
49iend
50
51g_MenuitemConfigurationSecondaryIdeController:
52istruc MENUITEM
53 at MENUITEM.fnActivate, dw SecondaryIdeController
54 at MENUITEM.szName, dw g_szItemCfgIde2
55 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
56 at MENUITEM.szHelp, dw g_szNfoCfgIde
57 at MENUITEM.bFlags, db NULL
58 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
59iend
60
61g_MenuitemConfigurationTertiaryIdeController:
62istruc MENUITEM
63 at MENUITEM.fnActivate, dw TertiaryIdeController
64 at MENUITEM.szName, dw g_szItemCfgIde3
65 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
66 at MENUITEM.szHelp, dw g_szNfoCfgIde
67 at MENUITEM.bFlags, db NULL
68 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
69iend
70
71g_MenuitemConfigurationQuaternaryIdeController:
72istruc MENUITEM
73 at MENUITEM.fnActivate, dw QuaternaryIdeController
74 at MENUITEM.szName, dw g_szItemCfgIde4
75 at MENUITEM.szQuickInfo, dw g_szNfoCfgIde
76 at MENUITEM.szHelp, dw g_szNfoCfgIde
77 at MENUITEM.bFlags, db NULL
78 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
79iend
80
81g_MenuitemConfigurationBootMenuSettings:
82istruc MENUITEM
83 at MENUITEM.fnActivate, dw BootMenuSettingsMenu_EnterMenuOrModifyItemVisibility
84 at MENUITEM.szName, dw g_szItemCfgBootMenu
85 at MENUITEM.szQuickInfo, dw g_szNfoCfgBootMenu
86 at MENUITEM.szHelp, dw g_szNfoCfgBootMenu
87 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
88 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
89iend
90
91g_MenuitemConfigurationFullOperatingMode:
92istruc MENUITEM
93 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
94 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
95 at MENUITEM.szName, dw g_szItemCfgFullMode
96 at MENUITEM.szQuickInfo, dw g_szNfoCfgFullMode
97 at MENUITEM.szHelp, dw g_szHelpCfgFullMode
98 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
99 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
100 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw ROMVARS.wFlags
101 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgCfgFullMode
102 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBooleanFlag
103 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFlagBooleans
104 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw FLG_ROMVARS_FULLMODE
105iend
106
107g_MenuitemConfigurationKiBtoStealFromRAM:
108istruc MENUITEM
109 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
110 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
111 at MENUITEM.szName, dw g_szItemCfgStealSize
112 at MENUITEM.szQuickInfo, dw g_szNfoCfgStealSize
113 at MENUITEM.szHelp, dw g_szHelpCfgStealSize
114 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE | FLG_MENUITEM_BYTEVALUE
115 at MENUITEM.bType, db TYPE_MENUITEM_UNSIGNED
116 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw ROMVARS.bStealSize
117 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgCfgStealSize
118 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
119 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw 255
120iend
121
122g_MenuitemConfigurationIdeControllers:
123istruc MENUITEM
124 at MENUITEM.fnActivate, dw ActivateInputForNumberOfIdeControllersMenuitemInDSSI
125 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
126 at MENUITEM.szName, dw g_szItemCfgIdeCnt
127 at MENUITEM.szQuickInfo, dw g_szNfoCfgIdeCnt
128 at MENUITEM.szHelp, dw g_szNfoCfgIdeCnt
129 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_BYTEVALUE
130 at MENUITEM.bType, db TYPE_MENUITEM_UNSIGNED
131 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw ROMVARS.bIdeCnt
132 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgCfgIdeCnt
133 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
134 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw MAX_ALLOWED_IDE_CONTROLLERS
135iend
136
137
138; Section containing code
139SECTION .text
140
141;--------------------------------------------------------------------
142; MainMenu_EnterMenuOrModifyItemVisibility
143; Parameters:
144; SS:BP: Menu handle
145; Returns:
146; Nothing
147; Corrupts registers:
148; All, except BP
149;--------------------------------------------------------------------
150ALIGN JUMP_ALIGN
151ConfigurationMenu_EnterMenuOrModifyItemVisibility:
152 push cs
153 pop ds
154 call .DisableAllIdeControllerMenuitems
155 call .EnableIdeControllerMenuitemsBasedOnConfiguration
156 call .EnableOrDisableKiBtoStealFromRAM
157 call LimitIdeControllersForLiteMode
158 mov si, g_MenupageForConfigurationMenu
159 jmp Menupage_ChangeToNewMenupageInDSSI
160
161;--------------------------------------------------------------------
162; .DisableAllIdeControllerMenuitems
163; .EnableIdeControllerMenuitemsBasedOnConfiguration
164; Parameters:
165; SS:BP: Menu handle
166; Returns:
167; Nothing
168; Corrupts registers:
169; AX, BX, CX, DI, ES
170;--------------------------------------------------------------------
171ALIGN JUMP_ALIGN
172.DisableAllIdeControllerMenuitems:
173 mov cx, MAX_ALLOWED_IDE_CONTROLLERS-1
174 mov bx, g_MenuitemConfigurationSecondaryIdeController
175ALIGN JUMP_ALIGN
176.DisableNextIdeControllerMenuitem:
177 call .DisableMenuitemFromCSBX
178 add bx, BYTE MENUITEM_size
179 loop .DisableNextIdeControllerMenuitem
180 ret
181
182ALIGN JUMP_ALIGN
183.EnableIdeControllerMenuitemsBasedOnConfiguration:
184 call Buffers_GetIdeControllerCountToCX
185 dec cx ; Primary always enabled
186 jz SHORT .PrimaryControllerAlreadyEnabled
187 mov bx, g_MenuitemConfigurationSecondaryIdeController
188ALIGN JUMP_ALIGN
189.EnableNextIdeControllerMenuitem:
190 call .EnableMenuitemFromCSBX
191 add bx, BYTE MENUITEM_size
192 loop .EnableNextIdeControllerMenuitem
193.PrimaryControllerAlreadyEnabled:
194 ret
195
196
197;--------------------------------------------------------------------
198; .EnableOrDisableKiBtoStealFromRAM
199; Parameters:
200; SS:BP: Menu handle
201; Returns:
202; Nothing
203; Corrupts registers:
204; AX, BX, CX
205;--------------------------------------------------------------------
206ALIGN JUMP_ALIGN
207.EnableOrDisableKiBtoStealFromRAM:
208 call Buffers_GetRomvarsFlagsToAX
209 mov bx, g_MenuitemConfigurationKiBtoStealFromRAM
210 test ax, FLG_ROMVARS_FULLMODE
211 jz SHORT .DisableMenuitemFromCSBX
212 ; Fall to .EnableMenuitemFromCSBX
213
214
215;--------------------------------------------------------------------
216; .EnableMenuitemFromCSBX
217; .DisableMenuitemFromCSBX
218; Parameters:
219; CS:BX: Ptr to MENUITEM
220; Returns:
221; Nothing
222; Corrupts registers:
223; Nothing
224;--------------------------------------------------------------------
225ALIGN JUMP_ALIGN
226.EnableMenuitemFromCSBX:
227 or BYTE [cs:bx+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
228 ret
229
230ALIGN JUMP_ALIGN
231.DisableMenuitemFromCSBX:
232 and BYTE [cs:bx+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
233 ret
234
235
236
237;--------------------------------------------------------------------
238; MENUITEM activation functions (.fnActivate)
239; Parameters:
240; SS:BP: Ptr to MENU
241; Returns:
242; Nothing
243; Corrupts registers:
244; All, except segments
245;--------------------------------------------------------------------
246ALIGN JUMP_ALIGN
247PrimaryIdeController:
248 mov bx, ROMVARS.ideVars0
249 jmp SHORT DisplayIdeControllerMenu
250
251ALIGN JUMP_ALIGN
252SecondaryIdeController:
253 mov bx, ROMVARS.ideVars1
254 jmp SHORT DisplayIdeControllerMenu
255
256ALIGN JUMP_ALIGN
257TertiaryIdeController:
258 mov bx, ROMVARS.ideVars2
259 jmp SHORT DisplayIdeControllerMenu
260
261ALIGN JUMP_ALIGN
262QuaternaryIdeController:
263 mov bx, ROMVARS.ideVars3
264 ; Fall to DisplayIdeControllerMenu
265
266ALIGN JUMP_ALIGN
267DisplayIdeControllerMenu:
268 call IdeControllerMenu_InitializeToIdevarsOffsetInBX
269 jmp IdeControllerMenu_EnterMenuOrModifyItemVisibility
270
271
272ALIGN JUMP_ALIGN
273ActivateInputForNumberOfIdeControllersMenuitemInDSSI:
274 call Menuitem_ActivateUnsignedInputForMenuitemInDSSI
275 ; Fall to LimitIdeControllersForLiteMode
276
277;--------------------------------------------------------------------
278; LimitIdeControllersForLiteMode
279; Parameters:
280; SS:BP: Menu handle
281; Returns:
282; Nothing
283; Corrupts registers:
284; AX, CX, DI
285;--------------------------------------------------------------------
286ALIGN JUMP_ALIGN
287LimitIdeControllersForLiteMode:
288 push es
289 call Buffers_GetIdeControllerCountToCX
290 mov [es:di+ROMVARS.bIdeCnt], cl
291 CALL_MENU_LIBRARY GetHighlightedItemToAX
292 CALL_MENU_LIBRARY RefreshItemFromAX
293 pop es
294 ; Fall to ConfigurationMenu_CheckAndMoveSerialDrivesToBottom
295
296;----------------------------------------------------------------------
297; ConfigurationMenu_CheckAndMoveSerialDrivesToBottom
298;
299; Checks to ensure that serial adapters are at the end of the
300; IDEVARS structures list, as serial floppies (if present) need to be
301; the last drives detected by the BIOS. If there are other controllers
302; after a serial controller, the other controllers are moved up on the list
303; and the serial controller is placed at the end of the list.
304;
305; Parameters:
306; SS:BP: Menu handle
307; Returns:
308; Nothing
309; Corrupts registers:
310; All
311;----------------------------------------------------------------------
312ConfigurationMenu_CheckAndMoveSerialDrivesToBottom:
313 push es
314 push ds
315 push di
316 push si
317
318 call Buffers_GetIdeControllerCountToCX ; will also set ES:DI to point to file buffer
319 push es
320 pop ds
321 mov ch, 0 ; clearing high order of CX and notification flag
322 mov dx, cx ; (probably unncessary, CX should be less than 127, but just to be sure)
323 jcxz .done ; probably unnecessary, but make sure there is at least one controller
324
325 add di, ROMVARS.ideVars0 ; add in offset of first idevars
326 mov bx, di
327
328.outerLoop:
329 mov di, bx ; start of idevars
330 xor si, si ; first serial found
331 xor ax, ax ; first non-serial found
332 mov cl, dl ; idevars count
333 mov ch, 0
334
335.loop:
336 cmp byte [di+IDEVARS.bDevice], DEVICE_SERIAL_PORT
337 jnz .notSerial
338
339 test si, si ; record the first serial controllert that we find
340 jnz .next
341 mov si, di
342 jmp .next
343
344.notSerial:
345 mov ax, di ; record the *last* non-serial controller that we find
346
347.next:
348 add di, IDEVARS_size
349 loop .loop
350
351 test si,si ; no serial drives, nothing to do
352 jz .done
353 cmp si,ax ; serial port is already later on the list than any other controllers
354 ja .done ; (also takes care of the case where ther are no other controllers)
355
356;
357; move serial to end of list, others up
358;
359 cld
360
361 mov ax, di ; save end pointer of list after scan
362
363 sub sp, IDEVARS_size ; copy serial to temporary space on stack
364
365 mov di, sp
366
367 mov cx, IDEVARS_size
368 push ss
369 pop es
370
371 rep movsb
372
373 mov di, si ; move up all the idevars below the serial, by one slot
374 sub di, IDEVARS_size
375
376 mov cx, ax ; restore end pointer of list, subtract off end of serial idevars
377 sub cx, si
378
379 push ds
380 pop es
381
382 rep movsb
383
384 mov si, sp ; place serial (currently on the stack) at bottom of list
385 push ss
386 pop ds
387 mov cx, IDEVARS_size
388 ; di is already at last IDEVARS position
389
390 rep movsb
391
392 add sp, IDEVARS_size
393
394 push es
395 pop ds
396
397 mov dh, 1 ; set flag that we have done a relocation
398
399 jmp .outerLoop
400
401.done:
402 pop si
403 pop di
404 pop ds
405 pop es
406
407 test dh, dh
408 jz .noWorkDone
409
410 mov dx, g_szSerialMoved
411 call Dialogs_DisplayNotificationFromCSDX
412
413.noWorkDone:
414 ret
Note: See TracBrowser for help on using the repository browser.