source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/FlashMenu.asm @ 65

Last change on this file since 65 was 65, checked in by aitotat, 13 years ago

Changes to XTIDE Universal BIOS Configurator v2:

  • All necessary features should now be implemented.
File size: 12.5 KB
Line 
1; File name     :   FlashMenu.asm
2; Project name  :   XTIDE Universal BIOS Configurator v2
3; Created date  :   19.11.2010
4; Last update   :   5.12.2010
5; Author        :   Tomi Tilli
6; Description   :   "Flash EEPROM" menu structs and functions.
7
8; Section containing initialized data
9SECTION .data
10
11ALIGN WORD_ALIGN
12g_MenupageForFlashMenu:
13istruc MENUPAGE
14    at  MENUPAGE.fnEnter,           dw  FlashMenu_EnterMenuOrModifyItemVisibility
15    at  MENUPAGE.fnBack,            dw  MainMenu_EnterMenuOrModifyItemVisibility
16    at  MENUPAGE.wMenuitems,        dw  7
17iend
18
19g_MenuitemFlashBackToMainMenu:
20istruc MENUITEM
21    at  MENUITEM.fnActivate,        dw  MainMenu_EnterMenuOrModifyItemVisibility
22    at  MENUITEM.szName,            dw  g_szItemCfgBackToMain
23    at  MENUITEM.szQuickInfo,       dw  g_szItemCfgBackToMain
24    at  MENUITEM.szHelp,            dw  g_szItemCfgBackToMain
25    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
26    at  MENUITEM.bType,             db  TYPE_MENUITEM_PAGEBACK
27iend
28
29g_MenuitemFlashStartFlashing:
30istruc MENUITEM
31    at  MENUITEM.fnActivate,        dw  StartFlashing
32    at  MENUITEM.szName,            dw  g_szItemFlashStart
33    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashStart
34    at  MENUITEM.szHelp,            dw  g_szNfoFlashStart
35    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
36    at  MENUITEM.bType,             db  TYPE_MENUITEM_ACTION
37iend
38
39g_MenuitemFlashEepromType:
40istruc MENUITEM
41    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiseSelectionForMenuitemInDSSI
42    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
43    at  MENUITEM.szName,            dw  g_szItemFlashEepromType
44    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashEepromType
45    at  MENUITEM.szHelp,            dw  g_szNfoFlashEepromType
46    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_VISIBLE
47    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOISE
48    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.bEepromType
49    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashEepromType
50    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoise,              dw  g_szMultichoiseEepromType
51    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiseToValueLookup,     dw  g_rgwChoiseToValueLookupForEepromType
52    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForEepromType
53iend
54
55g_MenuitemFlashSdpCommand:
56istruc MENUITEM
57    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiseSelectionForMenuitemInDSSI
58    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
59    at  MENUITEM.szName,            dw  g_szItemFlashSDP
60    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashSDP
61    at  MENUITEM.szHelp,            dw  g_szHelpFlashSDP
62    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_VISIBLE
63    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOISE
64    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.bSdpCommand
65    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashSDP
66    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoise,              dw  g_szMultichoiseSdpCommand
67    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiseToValueLookup,     dw  g_rgwChoiseToValueLookupForSdpCommand
68    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForSdpCommand
69iend
70
71g_MenuitemFlashPageSize:
72istruc MENUITEM
73    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiseSelectionForMenuitemInDSSI
74    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
75    at  MENUITEM.szName,            dw  g_szItemFlashPageSize
76    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashPageSize
77    at  MENUITEM.szHelp,            dw  g_szHelpFlashPageSize
78    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_VISIBLE
79    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOISE
80    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.bEepromPage
81    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashPageSize
82    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoise,              dw  g_szMultichoisePageSize
83    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiseToValueLookup,     dw  g_rgwChoiseToValueLookupForPageSize
84    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForPageSize
85iend
86
87g_MenuitemFlashEepromAddress:
88istruc MENUITEM
89    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateHexInputForMenuitemInDSSI
90    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteHexValueStringToBufferInESDIfromItemInDSSI
91    at  MENUITEM.szName,            dw  g_szItemFlashAddr
92    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashAddr
93    at  MENUITEM.szHelp,            dw  g_szNfoFlashAddr
94    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_VISIBLE
95    at  MENUITEM.bType,             db  TYPE_MENUITEM_HEX
96    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.wEepromSegment
97    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashAddr
98    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  0C000h
99    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  0F800h
100iend
101
102g_MenuitemFlashGenerateChecksum:
103istruc MENUITEM
104    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiseSelectionForMenuitemInDSSI
105    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
106    at  MENUITEM.szName,            dw  g_szItemFlashChecksum
107    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashChecksum
108    at  MENUITEM.szHelp,            dw  g_szHelpFlashChecksum
109    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_VISIBLE | FLG_MENUITEM_FLAGVALUE
110    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOISE
111    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.wFlags
112    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashChecksum
113    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoise,              dw  g_szMultichoiseBooleanFlag
114    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
115    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_CFGVARS_CHECKSUM
116iend
117
118g_rgwChoiseToValueLookupForEepromType:
119    dw  EEPROM_TYPE.2816_2kiB
120    dw  EEPROM_TYPE.2864_8kiB
121    dw  EEPROM_TYPE.28256_32kiB
122    dw  EEPROM_TYPE.28512_64kiB
123g_rgszValueToStringLookupForEepromType:
124    dw  g_szValueFlash2816
125    dw  g_szValueFlash2864
126    dw  g_szValueFlash28256
127    dw  g_szValueFlash28512
128
129g_rgwChoiseToValueLookupForSdpCommand:
130    dw  SDP_COMMAND.none
131    dw  SDP_COMMAND.enable
132    dw  SDP_COMMAND.disable
133g_rgszValueToStringLookupForSdpCommand:
134    dw  g_szValueFlashNone
135    dw  g_szValueFlashEnable
136    dw  g_szValueFlashDisable
137
138g_rgwChoiseToValueLookupForPageSize:
139    dw  EEPROM_PAGE.1_byte
140    dw  EEPROM_PAGE.2_bytes
141    dw  EEPROM_PAGE.4_bytes
142    dw  EEPROM_PAGE.8_bytes
143    dw  EEPROM_PAGE.16_bytes
144    dw  EEPROM_PAGE.32_bytes
145    dw  EEPROM_PAGE.64_bytes
146g_rgszValueToStringLookupForPageSize:
147    dw  g_szValueFlash1byte
148    dw  g_szValueFlash2bytes
149    dw  g_szValueFlash4bytes
150    dw  g_szValueFlash8bytes
151    dw  g_szValueFlash16bytes
152    dw  g_szValueFlash32bytes
153    dw  g_szValueFlash64bytes
154
155
156; Section containing code
157SECTION .text
158
159;--------------------------------------------------------------------
160; MainMenu_EnterMenuOrModifyItemVisibility
161;   Parameters:
162;       SS:BP:  Menu handle
163;   Returns:
164;       Nothing
165;   Corrupts registers:
166;       All, except BP
167;--------------------------------------------------------------------
168ALIGN JUMP_ALIGN
169FlashMenu_EnterMenuOrModifyItemVisibility:
170    push    cs
171    pop     ds
172    mov     si, g_MenupageForFlashMenu
173    jmp     Menupage_ChangeToNewMenupageInDSSI
174
175
176;--------------------------------------------------------------------
177; MENUITEM activation functions (.fnActivate)
178;   Parameters:
179;       SS:BP:  Ptr to MENU
180;   Returns:
181;       Nothing
182;   Corrupts registers:
183;       All, except segments
184;--------------------------------------------------------------------
185ALIGN JUMP_ALIGN
186StartFlashing:
187    push    es
188    push    ds
189
190    call    .PrepareBuffersForFlashing
191    mov     cx, FLASHVARS_size + PROGRESS_DIALOG_IO_size
192    call    Memory_ReserveCXbytesFromStackToDSSI
193    call    .InitializeFlashvarsFromDSSI
194    mov     bx, si                          ; DS:BX now points to FLASHVARS
195    add     si, BYTE FLASHVARS_size         ; DS:SI now points to PROGRESS_DIALOG_IO
196    call    Dialogs_DisplayProgressDialogForFlashingWithDialogIoInDSSIandFlashvarsInDSBX
197    call    .DisplayFlashingResultsFromFlashvarsInDSBX
198
199    add     sp, BYTE FLASHVARS_size + PROGRESS_DIALOG_IO_size
200    pop     ds
201    pop     es
202    ret
203
204;--------------------------------------------------------------------
205; .PrepareBuffersForFlashing
206;   Parameters:
207;       SS:BP:  Ptr to MENU
208;   Returns:
209;       Nothing
210;   Corrupts registers:
211;       AX, BX, CX, SI, DI
212;--------------------------------------------------------------------
213ALIGN JUMP_ALIGN
214.PrepareBuffersForFlashing:
215    call    EEPROM_LoadFromRomToRamComparisonBuffer
216    call    Buffers_AppendZeroesIfNeeded
217    test    WORD [cs:g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_CHECKSUM
218    jz      SHORT .DoNotGenerateChecksumByte
219    jmp     Buffers_GenerateChecksum
220.DoNotGenerateChecksumByte:
221    ret
222
223;--------------------------------------------------------------------
224; .InitializeFlashvarsFromDSSI
225;   Parameters:
226;       DS:SI:  Ptr to FLASHVARS to initialize
227;       SS:BP:  Ptr to MENU
228;   Returns:
229;       Nothing
230;   Corrupts registers:
231;       AX, BX, DX, DI, ES
232;--------------------------------------------------------------------
233ALIGN JUMP_ALIGN
234.InitializeFlashvarsFromDSSI:
235    call    Buffers_GetFileBufferToESDI
236    mov     [si+FLASHVARS.fpNextSourcePage], di
237    mov     [si+FLASHVARS.fpNextSourcePage+2], es
238
239    call    Buffers_GetFlashComparisonBufferToESDI
240    mov     [si+FLASHVARS.fpNextComparisonPage], di
241    mov     [si+FLASHVARS.fpNextComparisonPage+2], es
242
243    mov     ax, [cs:g_cfgVars+CFGVARS.wEepromSegment]
244    mov     WORD [si+FLASHVARS.fpNextDestinationPage], 0
245    mov     [si+FLASHVARS.fpNextDestinationPage+2], ax
246
247    mov     al, [cs:g_cfgVars+CFGVARS.bEepromType]
248    mov     [si+FLASHVARS.bEepromType], al
249
250    mov     al, [cs:g_cfgVars+CFGVARS.bSdpCommand]
251    mov     [si+FLASHVARS.bEepromSdpCommand], al
252
253    eMOVZX  bx, BYTE [cs:g_cfgVars+CFGVARS.bEepromPage]
254    mov     ax, [cs:bx+g_rgwEepromPageToSizeInBytes]
255    mov     [si+FLASHVARS.wEepromPageSize], ax
256
257    call    .GetNumberOfPagesToFlashToAX
258    mov     [si+FLASHVARS.wPagesToFlash], ax
259    ret
260
261;--------------------------------------------------------------------
262; .GetNumberOfPagesToFlashToAX
263;   Parameters:
264;       DS:SI:  Ptr to FLASHVARS to initialize
265;   Returns:
266;       AX:     Number of pages to flash (0 = 65536)
267;   Corrupts registers:
268;       BX, DX
269;--------------------------------------------------------------------
270ALIGN JUMP_ALIGN
271.GetNumberOfPagesToFlashToAX:
272    eMOVZX  bx, BYTE [si+FLASHVARS.bEepromType]
273    mov     ax, [cs:bx+g_rgwEepromTypeToSizeInWords]
274    xor     dx, dx
275    shl     ax, 1       ; Size in bytes to...
276    rcl     dx, 1       ; ...DX:AX
277
278    cmp     WORD [si+FLASHVARS.wEepromPageSize], BYTE 1
279    jbe     SHORT .PreventDivideException
280    div     WORD [si+FLASHVARS.wEepromPageSize]
281.PreventDivideException:
282    ret
283
284
285;--------------------------------------------------------------------
286; .DisplayFlashingResultsFromFlashvarsInDSBX
287;   Parameters:
288;       DS:BX:  Ptr to FLASHVARS
289;       SS:BP:  Ptr to MENU
290;   Returns:
291;       Nothing
292;   Corrupts registers:
293;       AX, BX, DX
294;--------------------------------------------------------------------
295ALIGN JUMP_ALIGN
296.DisplayFlashingResultsFromFlashvarsInDSBX:
297    eMOVZX  bx, BYTE [bx+FLASHVARS.flashResult]
298    jmp     [cs:bx+.rgfnFlashResultMessage]
299
300ALIGN WORD_ALIGN
301.rgfnFlashResultMessage:
302    dw      .DisplayFlashSuccessful
303    dw      .DisplayPollingError
304    dw      .DisplayDataVerifyError
305
306
307;--------------------------------------------------------------------
308; .DisplayPollingError
309; .DisplayDataVerifyError
310; .DisplayFlashSuccessful
311;   Parameters:
312;       SS:BP:  Ptr to MENU
313;   Returns:
314;       Nothing
315;   Corrupts registers:
316;       AX, DX, DI, ES
317;--------------------------------------------------------------------
318ALIGN JUMP_ALIGN
319.DisplayPollingError:
320    mov     dx, g_szErrEepromPolling
321    jmp     Dialogs_DisplayErrorFromCSDX
322
323ALIGN JUMP_ALIGN
324.DisplayDataVerifyError:
325    mov     dx, g_szErrEepromVerify
326    jmp     Dialogs_DisplayErrorFromCSDX
327
328ALIGN JUMP_ALIGN
329.DisplayFlashSuccessful:
330    call    Buffers_GetFileBufferToESDI
331    cmp     WORD [es:di+ROMVARS.wRomSign], 0AA55h   ; PC ROM?
332    je      SHORT .DisplayRebootMessageAndReboot
333    mov     dx, g_szForeignFlash
334    jmp     Dialogs_DisplayNotificationFromCSDX
335ALIGN JUMP_ALIGN
336.DisplayRebootMessageAndReboot:
337    mov     dx, g_szPCFlashSuccessfull
338    call    Dialogs_DisplayNotificationFromCSDX
339    ; Fall to .RebootComputer
340
341
342;--------------------------------------------------------------------
343; .RebootComputer
344;   Parameters:
345;       Nothing
346;   Returns:
347;       Nothing, function never returns
348;   Corrupts registers:
349;       Doesn't matter
350;--------------------------------------------------------------------
351.RebootComputer:
352    mov     al, 0FEh                ; System reset (AT+ keyboard controller)
353    out     64h, al                 ; Reset computer (AT+)
354    nop
355    jmp     WORD 0F000h:0FFF0h      ; XT reset
Note: See TracBrowser for help on using the repository browser.