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

Last change on this file since 625 was 625, checked in by krille_n_, 13 months ago

Changes:

  • Added a configuration option to let the BIOS store RamVars to an UMB when Full operating mode is enabled. This is primarily for XT class machines with RAM in the UMA (which apparently is a common thing these days).
  • Added two new builds specifically for IBM PS/2 machines. This is for support of the new McIDE adapter from the guys at zzxio.com. Note that the additional hardware specific code (under the USE_PS2 define) is for the PS/2 machines themselves and not for the McIDE adapters, so any controller in an IBM PS/2 machine can be used with the USE_PS2 define.
  • Moved pColorTheme out of the range of ROMVARS being copied over when doing "Load old settings from EEPROM" in XTIDECFG. This fixed a serious bug from r592 where loading a BIOS from file and then loading the old settings from ROM would corrupt 7 bytes of code somewhere in the loaded BIOS.
  • Optimizations (speed and size) to the library. Browsing the menus in XTIDECFG should now feel a little less sluggish.
  • Hopefully fixed a problem with the PostCommitHook script where it sometimes wouldn't find the CommitInProgress file. I say hopefully because testing this is a nightmare.
File size: 11.1 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-2023 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     cl, FILE_DIALOG_IO_size
252    call    Memory_ReserveCLbytesFromStackToDSSI
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    call    MainMenu_EnterMenuOrModifyItemVisibility
261.CancelFileLoading:
262    add     sp, BYTE FILE_DIALOG_IO_size
263ExitToDosFromBackButton:
264    ret
265
266
267ALIGN JUMP_ALIGN
268LoadXtideUniversalBiosFromRom:
269    call    Buffers_SaveChangesIfFileLoaded
270    call    EEPROM_LoadXtideUniversalBiosFromRomToRamBufferAndReturnSizeInDXCX
271    mov     al, FLG_CFGVARS_ROMLOADED
272    call    Buffers_NewBiosWithSizeInDXCXandSourceInALhasBeenLoadedForConfiguration
273    mov     dx, g_szDlgMainLoadROM
274    call    Dialogs_DisplayNotificationFromCSDX
275    call    LoadColorTheme
276    jmp     MainMenu_EnterMenuOrModifyItemVisibility
277
278
279ALIGN JUMP_ALIGN
280LoadOldSettingsFromEeprom:
281    call    Buffers_SaveChangesIfFileLoaded
282    call    EEPROM_LoadOldSettingsFromRomToRamBuffer
283    call    Buffers_SetUnsavedChanges
284    mov     dx, g_szDlgMainLoadStngs
285    call    Dialogs_DisplayNotificationFromCSDX
286    call    EEPROM_FindXtideUniversalBiosROMtoESDI
287    call    LoadColorTheme.FromROM          ; Returns the color theme index in AX
288    test    BYTE [g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_FILELOADED
289    jz      SHORT .FileNotLoaded
290    ; A file has been loaded so we need to copy the theme to that as well
291    call    Buffers_GetFileBufferToESDI
292    add     di, ROMVARS.pColorTheme
293    call    WriteColorTheme
294    ; We did not copy over wFlags but we did copy over wRamVars so we
295    ; must ensure that the Full Operating Mode setting matches wRamVars.
296    cmp     WORD [es:ROMVARS.wRamVars], LITE_MODE_RAMVARS_SEGMENT
297    jne     SHORT .SetFullOperatingMode     ; All builds supports FOM
298    call    Buffers_IsXTbuildLoaded
299    jz      SHORT .ClearFullOperatingMode
300    ; The loaded file is an AT build and we just copied the settings from
301    ; an XT build in ROM configured for Lite mode. Resolve the conflict
302    ; by clearing wRamVars thereby setting it to the default for FOM.
303    mov     WORD [es:ROMVARS.wRamVars], 0
304    ; Tell the user there was a change in the configuration
305    mov     dx, g_szDlgFomEnabled
306    call    Dialogs_DisplayNotificationFromCSDX
307    ; We don't need to set the FOM flag but fall through anyway
308.SetFullOperatingMode:
309    or      BYTE [es:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
310    jmp     SHORT .Done
311
312.ClearFullOperatingMode:
313    and     BYTE [es:ROMVARS.wFlags], ~FLG_ROMVARS_FULLMODE
314
315.Done:
316.FileNotLoaded:
317    jmp     MainMenu_EnterMenuOrModifyItemVisibility
318
319
320;--------------------------------------------------------------------
321; LoadColorTheme
322;   Parameters:
323;       ES:     ROMVARS segment (only when loading theme from ROM)
324;   Returns:
325;       Nothing
326;   Corrupts registers:
327;       AX, BX, CX, SI, DI, ES
328;--------------------------------------------------------------------
329ALIGN JUMP_ALIGN
330LoadColorTheme:
331    call    Buffers_GetFileBufferToESDI
332    call    Buffers_IsXtideUniversalBiosSignatureInESDI
333    jnz     SHORT .Return
334.FromROM:
335    mov     ax, [es:ROMVARS.pColorTheme]
336    jmp     ReadColorTheme
337.Return:
338    ret
339
Note: See TracBrowser for help on using the repository browser.