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

Last change on this file since 67 was 65, checked in by Tomi Tilli, 14 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.