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

Last change on this file since 629 was 625, checked in by Krister Nordvall, 19 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.