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

Last change on this file since 525 was 525, checked in by krille_n_@…, 11 years ago

Changes:

  • Made some improvements to the stack switching in Int13h.asm.
  • Added a tail-call optimized variant of the CALL_MENU_LIBRARY macro (JMP_MENU_LIBRARY).
  • Other optimizations and fixes.
File size: 9.2 KB
RevLine 
[57]1; Project name  :   XTIDE Universal BIOS Configurator v2
2; Description   :   Main menu structs and functions.
3
[376]4;
[525]5; XTIDE Universal BIOS and Associated Tools
[376]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.
[525]12;
[376]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
[525]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[525]18;
[376]19
[57]20; Section containing initialized data
21SECTION .data
22
23ALIGN WORD_ALIGN
24g_MenupageForMainMenu:
25istruc MENUPAGE
26    at  MENUPAGE.fnEnter,           dw  MainMenu_EnterMenuOrModifyItemVisibility
[206]27    at  MENUPAGE.fnBack,            dw  ExitToDosFromBackButton
[371]28    at  MENUPAGE.wMenuitems,        dw  9
[57]29iend
30
[525]31g_MenuitemMainMenuLicense:
[57]32istruc MENUITEM
[336]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
[525]37    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
[206]38    at  MENUITEM.bType,             db  TYPE_MENUITEM_ACTION
[57]39iend
[525]40
[57]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
[59]73    at  MENUITEM.fnActivate,        dw  ConfigurationMenu_EnterMenuOrModifyItemVisibility
[57]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
[59]83    at  MENUITEM.fnActivate,        dw  FlashMenu_EnterMenuOrModifyItemVisibility
[57]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
[525]91g_MenuitemMainMenuSaveFile:
[371]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
[525]99iend
[371]100
[336]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
[57]110
[525]111g_MenuitemMainMenuHomePage:
[336]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
[525]117    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
[336]118    at  MENUITEM.bType,             db  TYPE_MENUITEM_ACTION
[525]119iend
[336]120
121
[57]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
[525]141    call    .EnableOrDisableSave
[57]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    jnc     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    WORD [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
[371]213;--------------------------------------------------------------------
214; .EnableOrDisableSave
215;   Parameters:
216;       DS:     CFGVARS segment
217;   Returns:
218;       Nothing
219;   Corrupts registers:
220;       Nothing
221;--------------------------------------------------------------------
[525]222ALIGN JUMP_ALIGN
223.EnableOrDisableSave:
[371]224    test    WORD [g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_FILELOADED
225    jz      SHORT .DisableSave
226    or      BYTE [g_MenuitemMainMenuSaveFile+MENUITEM.bFlags], FLG_MENUITEM_VISIBLE
227    ret
[57]228
[525]229ALIGN JUMP_ALIGN
[371]230.DisableSave:
231    and     BYTE [g_MenuitemMainMenuSaveFile+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
232    ret
[525]233
[57]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
[206]244ExitToDosSelectedFromMenu:
[525]245    JMP_MENU_LIBRARY CloseMenuIfExitEventAllows
[57]246
247
248ALIGN JUMP_ALIGN
249LoadBiosFromFile:
[59]250    call    Buffers_SaveChangesIfFileLoaded
[57]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    MainMenu_EnterMenuOrModifyItemVisibility
260.CancelFileLoading:
261    add     sp, BYTE FILE_DIALOG_IO_size
[525]262ExitToDosFromBackButton:
[57]263    ret
264
265
266ALIGN JUMP_ALIGN
267LoadXtideUniversalBiosFromRom:
[59]268    call    Buffers_SaveChangesIfFileLoaded
[68]269    call    EEPROM_LoadXtideUniversalBiosFromRomToRamBufferAndReturnSizeInDXCX
[57]270    mov     ax, FLG_CFGVARS_ROMLOADED
[68]271    call    Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration
272    mov     dx, g_szDlgMainLoadROM
[118]273    call    Dialogs_DisplayNotificationFromCSDX
274    jmp     MainMenu_EnterMenuOrModifyItemVisibility
[57]275
276
277ALIGN JUMP_ALIGN
278LoadOldSettingsFromEeprom:
[59]279    call    Buffers_SaveChangesIfFileLoaded
[57]280    call    EEPROM_LoadOldSettingsFromRomToRamBuffer
281    and     WORD [g_cfgVars+CFGVARS.wFlags], ~FLG_CFGVARS_UNSAVED
[68]282    mov     dx, g_szDlgMainLoadStngs
283    jmp     Dialogs_DisplayNotificationFromCSDX
[336]284
Note: See TracBrowser for help on using the repository browser.