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

Last change on this file since 592 was 592, checked in by krille_n_, 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.