source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MainMenu.asm@ 595

Last change on this file since 595 was 592, checked in by Krister Nordvall, 6 years ago

Changes:

  • The problem with NASM in the previous revision (r591) has been fixed.
  • The colors used by the boot menu and hotkey bar can now be customized by selecting one of a number of pre-defined color themes. Suggestions for additional themes are more than welcome!
  • Large builds are now 10 KB. Small builds are still 8 KB with the exception of the Tiny build which is now 4 KB. In other words, builds are now as small as possible to make it easier to combine them with other BIOSes.
  • Added code to the library to improve drive error handling. XTIDECFG can now handle "Drive Not Ready" errors.
  • Fixed a couple of potential bugs in AtaID.asm (AtaID_GetMaxPioModeToAXandMinCycleTimeToCX); 1) ATA1.bPioMode was treated as a WORD variable. 2) ATA2.bPIOSupp was assumed to be non-zero which would result in PIO mode 3 being returned if the assumption was wrong.
  • Made the same changes in the equivalent function used by BIOSDRVS (DisplayPioModeInformationUsingAtaInfoFromDSBX in AtaInfo.asm).
  • Fixed a bug from r587 in PDC20x30.asm in PDC20x30_GetMaxPioModeToALandMinPioCycleTimeToBX.
  • Fixed a bug from r523 in XTIDECFG where Auto Configure would only set the IRQ on one IDE interface on AT-builds.
  • XTIDECFG will now restore the default settings for the "Serial port virtual device" when reselecting it in the list of device types. This makes it behave consistently for all device types.
  • The eAAM macro is now used regardless if USE_UNDOC_INTEL is defined or not because it is apparently supported on all processors including the NEC V20/V30 CPUs.
  • Renamed the EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS define to EXCLUDE_FROM_XUB.
  • Added a define to exclude unused library code from BIOSDRVS (EXCLUDE_FROM_BIOSDRVS). This makes it a lot smaller than in previous revisions.
  • All unnecessary CLD-instructions are now under a new define 'CLD_NEEDED' which is only enabled for the BIOS. It is disabled for XTIDECFG and BIOSDRVS but can be enabled if needed by adding this define to the respective makefile. This change was made because these unnecessary instructions are wasteful and should never be needed. In fact, they only serve to hide bugs (in other peoples code) which I strongly believe should be avoided. I recommend people making their own BIOSes from source to not use this define as it's extremely unlikely to be needed.
  • Updated the copyright info in SerDrive and changed an URL to point to the new site.
  • Updated the copyright info and version number in BIOSDRVS.
  • Updated the copyright info in XTIDECFG.
  • Optimizations in general.
File size: 10.0 KB
Line 
1; Project name : XTIDE Universal BIOS Configurator v2
2; Description : Main menu structs and functions.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 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_MenupageForMainMenu:
25istruc MENUPAGE
26 at MENUPAGE.fnEnter, dw MainMenu_EnterMenuOrModifyItemVisibility
27 at MENUPAGE.fnBack, dw ExitToDosFromBackButton
28 at MENUPAGE.wMenuitems, dw 9
29iend
30
31g_MenuitemMainMenuLicense:
32istruc MENUITEM
33 at MENUITEM.fnActivate, dw Menuitem_DisplayHelpMessageFromDSSI
34 at MENUITEM.szName, dw g_szItemMainLicense
35 at MENUITEM.szQuickInfo, dw g_szNfoMainLicense
36 at MENUITEM.szHelp, dw g_szHelpMainLicense
37 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
38 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
39iend
40
41g_MenuitemMainMenuLoadBiosFromFile:
42istruc MENUITEM
43 at MENUITEM.fnActivate, dw LoadBiosFromFile
44 at MENUITEM.szName, dw g_szItemMainLoadFile
45 at MENUITEM.szQuickInfo, dw g_szNfoMainLoadFile
46 at MENUITEM.szHelp, dw g_szNfoMainLoadFile
47 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
48 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
49iend
50
51g_MenuitemMainMenuLoadXtideUniversalBiosFromRom:
52istruc MENUITEM
53 at MENUITEM.fnActivate, dw LoadXtideUniversalBiosFromRom
54 at MENUITEM.szName, dw g_szItemMainLoadROM
55 at MENUITEM.szQuickInfo, dw g_szNfoMainLoadROM
56 at MENUITEM.szHelp, dw g_szNfoMainLoadROM
57 at MENUITEM.bFlags, db NULL
58 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
59iend
60
61g_MenuitemMainMenuLoadOldSettingsFromEeprom:
62istruc MENUITEM
63 at MENUITEM.fnActivate, dw LoadOldSettingsFromEeprom
64 at MENUITEM.szName, dw g_szItemMainLoadStngs
65 at MENUITEM.szQuickInfo, dw g_szNfoMainLoadStngs
66 at MENUITEM.szHelp, dw g_szNfoMainLoadStngs
67 at MENUITEM.bFlags, db NULL
68 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
69iend
70
71g_MenuitemMainMenuConfigureXtideUniversalBios:
72istruc MENUITEM
73 at MENUITEM.fnActivate, dw ConfigurationMenu_EnterMenuOrModifyItemVisibility
74 at MENUITEM.szName, dw g_szItemMainConfigure
75 at MENUITEM.szQuickInfo, dw g_szNfoMainConfigure
76 at MENUITEM.szHelp, dw g_szNfoMainConfigure
77 at MENUITEM.bFlags, db NULL
78 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
79iend
80
81g_MenuitemMainMenuFlashEeprom:
82istruc MENUITEM
83 at MENUITEM.fnActivate, dw FlashMenu_EnterMenuOrModifyItemVisibility
84 at MENUITEM.szName, dw g_szItemMainFlash
85 at MENUITEM.szQuickInfo, dw g_szNfoMainFlash
86 at MENUITEM.szHelp, dw g_szNfoMainFlash
87 at MENUITEM.bFlags, db NULL
88 at MENUITEM.bType, db TYPE_MENUITEM_PAGENEXT
89iend
90
91g_MenuitemMainMenuSaveFile:
92istruc MENUITEM
93 at MENUITEM.fnActivate, dw BiosFile_SaveUnsavedChanges
94 at MENUITEM.szName, dw g_szItemMainSave
95 at MENUITEM.szQuickInfo, dw g_szNfoMainSave
96 at MENUITEM.szHelp, dw g_szNfoMainSave
97 at MENUITEM.bFlags, db NULL
98 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
99iend
100
101g_MenuitemMainMenuExitToDos:
102istruc MENUITEM
103 at MENUITEM.fnActivate, dw ExitToDosSelectedFromMenu
104 at MENUITEM.szName, dw g_szItemMainExitToDOS
105 at MENUITEM.szQuickInfo, dw g_szNfoMainExitToDOS
106 at MENUITEM.szHelp, dw g_szNfoMainExitToDOS
107 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
108 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
109iend
110
111g_MenuitemMainMenuHomePage:
112istruc MENUITEM
113 at MENUITEM.fnActivate, dw Menuitem_DisplayHelpMessageFromDSSI
114 at MENUITEM.szName, dw g_szItemMainHomePage
115 at MENUITEM.szQuickInfo, dw g_szNfoMainHomePage
116 at MENUITEM.szHelp, dw g_szNfoMainHomePage
117 at MENUITEM.bFlags, db FLG_MENUITEM_VISIBLE
118 at MENUITEM.bType, db TYPE_MENUITEM_ACTION
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
135MainMenu_EnterMenuOrModifyItemVisibility:
136 push cs
137 pop ds
138 call .EnableOrDisableXtideRomItems
139 call .EnableOrDisableConfigureXtideUniversalBios
140 call .EnableOrDisableFlashEeprom
141 call .EnableOrDisableSave
142 mov si, g_MenupageForMainMenu
143 jmp Menupage_ChangeToNewMenupageInDSSI
144
145;--------------------------------------------------------------------
146; .EnableOrDisableXtideRomItems
147; Parameters:
148; DS: CFGVARS segment
149; Returns:
150; Nothing
151; Corrupts registers:
152; AX, BX, CX, SI, DI, ES
153;--------------------------------------------------------------------
154ALIGN JUMP_ALIGN
155.EnableOrDisableXtideRomItems:
156 call EEPROM_FindXtideUniversalBiosROMtoESDI
157 jc SHORT .DisableAllRomItems
158 or BYTE [g_MenuitemMainMenuLoadXtideUniversalBiosFromRom+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
159 call Buffers_IsXtideUniversalBiosLoaded
160 jne SHORT .DisableLoadSettingFromRom
161 or BYTE [g_MenuitemMainMenuLoadOldSettingsFromEeprom+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
162 ret
163
164ALIGN JUMP_ALIGN
165.DisableAllRomItems:
166 and BYTE [g_MenuitemMainMenuLoadXtideUniversalBiosFromRom+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
167.DisableLoadSettingFromRom:
168 and BYTE [g_MenuitemMainMenuLoadOldSettingsFromEeprom+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
169 ret
170
171;--------------------------------------------------------------------
172; .EnableOrDisableConfigureXtideUniversalBios
173; Parameters:
174; DS: CFGVARS segment
175; Returns:
176; Nothing
177; Corrupts registers:
178; CX, SI, DI, ES
179;--------------------------------------------------------------------
180ALIGN JUMP_ALIGN
181.EnableOrDisableConfigureXtideUniversalBios:
182 call Buffers_IsXtideUniversalBiosLoaded
183 jne SHORT .DisableConfigureXtideUniversalBios
184 or BYTE [g_MenuitemMainMenuConfigureXtideUniversalBios+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
185 ret
186
187ALIGN JUMP_ALIGN
188.DisableConfigureXtideUniversalBios:
189 and BYTE [g_MenuitemMainMenuConfigureXtideUniversalBios+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
190 ret
191
192;--------------------------------------------------------------------
193; .EnableOrDisableFlashEeprom
194; Parameters:
195; DS: CFGVARS segment
196; Returns:
197; Nothing
198; Corrupts registers:
199; Nothing
200;--------------------------------------------------------------------
201ALIGN JUMP_ALIGN
202.EnableOrDisableFlashEeprom:
203 test BYTE [g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_FILELOADED | FLG_CFGVARS_ROMLOADED
204 jz SHORT .DisableFlashEeprom
205 or BYTE [g_MenuitemMainMenuFlashEeprom+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
206 ret
207
208ALIGN JUMP_ALIGN
209.DisableFlashEeprom:
210 and BYTE [g_MenuitemMainMenuFlashEeprom+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
211 ret
212
213;--------------------------------------------------------------------
214; .EnableOrDisableSave
215; Parameters:
216; DS: CFGVARS segment
217; Returns:
218; Nothing
219; Corrupts registers:
220; Nothing
221;--------------------------------------------------------------------
222ALIGN JUMP_ALIGN
223.EnableOrDisableSave:
224 test BYTE [g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_FILELOADED
225 jz SHORT .DisableSave
226 or BYTE [g_MenuitemMainMenuSaveFile+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
227 ret
228
229ALIGN JUMP_ALIGN
230.DisableSave:
231 and BYTE [g_MenuitemMainMenuSaveFile+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
232 ret
233
234;--------------------------------------------------------------------
235; MENUITEM activation functions (.fnActivate)
236; Parameters:
237; SS:BP: Ptr to MENU
238; Returns:
239; Nothing
240; Corrupts registers:
241; All, except segments
242;--------------------------------------------------------------------
243ALIGN JUMP_ALIGN
244ExitToDosSelectedFromMenu:
245 JMP_MENU_LIBRARY CloseMenuIfExitEventAllows
246
247
248ALIGN JUMP_ALIGN
249LoadBiosFromFile:
250 call Buffers_SaveChangesIfFileLoaded
251 mov cx, FILE_DIALOG_IO_size
252 call Memory_ReserveCXbytesFromStackToDSSI
253 call Dialogs_DisplayFileDialogWithDialogIoInDSSI
254 cmp BYTE [si+FILE_DIALOG_IO.bUserCancellation], TRUE
255 je SHORT .CancelFileLoading
256
257 add si, BYTE FILE_DIALOG_IO.szFile
258 call BiosFile_LoadFileFromDSSItoRamBuffer
259 call LoadColorTheme
260 ; *FIXME* Will load themes even from unrecognized versions of the BIOS which isn't really a problem but still 'unexpected behaviour' and therefore a bug.
261 call MainMenu_EnterMenuOrModifyItemVisibility
262.CancelFileLoading:
263 add sp, BYTE FILE_DIALOG_IO_size
264ExitToDosFromBackButton:
265 ret
266
267
268ALIGN JUMP_ALIGN
269LoadXtideUniversalBiosFromRom:
270 call Buffers_SaveChangesIfFileLoaded
271 call EEPROM_LoadXtideUniversalBiosFromRomToRamBufferAndReturnSizeInDXCX
272 mov ax, FLG_CFGVARS_ROMLOADED
273 call Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration
274 mov dx, g_szDlgMainLoadROM
275 call Dialogs_DisplayNotificationFromCSDX
276 call LoadColorTheme
277 jmp MainMenu_EnterMenuOrModifyItemVisibility
278
279
280ALIGN JUMP_ALIGN
281LoadOldSettingsFromEeprom:
282 call Buffers_SaveChangesIfFileLoaded
283 call EEPROM_LoadOldSettingsFromRomToRamBuffer
284 call Buffers_SetUnsavedChanges
285 mov dx, g_szDlgMainLoadStngs
286 call Dialogs_DisplayNotificationFromCSDX
287 call EEPROM_FindXtideUniversalBiosROMtoESDI
288 call LoadColorTheme.FromROM
289 jmp MainMenu_EnterMenuOrModifyItemVisibility
290
291
292;--------------------------------------------------------------------
293; LoadColorTheme
294; Parameters:
295; ES: ROMVARS segment (only when loading theme from ROM)
296; Returns:
297; Nothing
298; Corrupts registers:
299; AX, BX, DI, ES
300;--------------------------------------------------------------------
301ALIGN JUMP_ALIGN
302LoadColorTheme:
303 call Buffers_GetFileBufferToESDI
304.FromROM:
305 mov ax, [es:ROMVARS.pColorTheme]
306 jmp ReadColorTheme
307
Note: See TracBrowser for help on using the repository browser.