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

Last change on this file since 620 was 620, checked in by krille_n_, 2 years ago

Changes:

  • A huge thank you to Jayeson Lee-Steere for adding SST39SF0x0 flash ROM programming support to the configurator (XTIDECFG.COM). This means that there is no longer a need to use a separate program for flashing the Lo-Tech boards and other devices using these flash ROMs.
File size: 16.1 KB
Line 
1; Project name  :   XTIDE Universal BIOS Configurator v2
2; Description   :   "Flash EEPROM" menu structs and functions.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 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_MenupageForFlashMenu:
25istruc MENUPAGE
26    at  MENUPAGE.fnEnter,           dw  FlashMenu_EnterMenuOrModifyItemVisibility
27    at  MENUPAGE.fnBack,            dw  MainMenu_EnterMenuOrModifyItemVisibility
28    at  MENUPAGE.wMenuitems,        dw  7
29iend
30
31g_MenuitemFlashBackToMainMenu:
32istruc MENUITEM
33    at  MENUITEM.fnActivate,        dw  MainMenu_EnterMenuOrModifyItemVisibility
34    at  MENUITEM.szName,            dw  g_szItemCfgBackToMain
35    at  MENUITEM.szQuickInfo,       dw  g_szItemCfgBackToMain
36    at  MENUITEM.szHelp,            dw  g_szItemCfgBackToMain
37    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
38    at  MENUITEM.bType,             db  TYPE_MENUITEM_PAGEBACK
39iend
40
41g_MenuitemFlashStartFlashing:
42istruc MENUITEM
43    at  MENUITEM.fnActivate,        dw  StartFlashing
44    at  MENUITEM.szName,            dw  g_szItemFlashStart
45    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashStart
46    at  MENUITEM.szHelp,            dw  g_szNfoFlashStart
47    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
48    at  MENUITEM.bType,             db  TYPE_MENUITEM_ACTION
49iend
50
51g_MenuitemFlashEepromType:
52istruc MENUITEM
53    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
54    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
55    at  MENUITEM.szName,            dw  g_szItemFlashEepromType
56    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashEepromType
57    at  MENUITEM.szHelp,            dw  g_szNfoFlashEepromType
58    at  MENUITEM.bFlags,            db  FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_BYTEVALUE | FLG_MENUITEM_VISIBLE
59    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
60    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.bEepromType
61    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashEepromType
62    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceEepromType
63    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForEepromType
64    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForEepromType
65iend
66
67g_MenuitemFlashSdpCommand:
68istruc MENUITEM
69    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
70    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
71    at  MENUITEM.szName,            dw  g_szItemFlashSDP
72    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashSDP
73    at  MENUITEM.szHelp,            dw  g_szHelpFlashSDP
74    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_BYTEVALUE
75    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
76    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.bSdpCommand
77    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashSDP
78    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceSdpCommand
79    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForSdpCommand
80    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForSdpCommand
81iend
82
83g_MenuitemFlashPageSize:
84istruc MENUITEM
85    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
86    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
87    at  MENUITEM.szName,            dw  g_szItemFlashPageSize
88    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashPageSize
89    at  MENUITEM.szHelp,            dw  g_szHelpFlashPageSize
90    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_BYTEVALUE
91    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
92    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.bEepromPage
93    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashPageSize
94    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoicePageSize
95    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForPageSize
96    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForPageSize
97iend
98
99g_MenuitemFlashEepromAddress:
100istruc MENUITEM
101    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateHexInputForMenuitemInDSSI
102    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteHexValueStringToBufferInESDIfromItemInDSSI
103    at  MENUITEM.szName,            dw  g_szItemFlashAddr
104    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashAddr
105    at  MENUITEM.szHelp,            dw  g_szNfoFlashAddr
106    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_VISIBLE
107    at  MENUITEM.bType,             db  TYPE_MENUITEM_HEX
108    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.wEepromSegment
109    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashAddr
110    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  0C000h
111    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  0F800h
112iend
113
114g_MenuitemFlashGenerateChecksum:
115istruc MENUITEM
116    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
117    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
118    at  MENUITEM.szName,            dw  g_szItemFlashChecksum
119    at  MENUITEM.szQuickInfo,       dw  g_szNfoFlashChecksum
120    at  MENUITEM.szHelp,            dw  g_szHelpFlashChecksum
121    at  MENUITEM.bFlags,            db  FLG_MENUITEM_PROGRAMVAR | FLG_MENUITEM_VISIBLE | FLG_MENUITEM_FLAGVALUE
122    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
123    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  CFGVARS.wFlags
124    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgFlashChecksum
125    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
126    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
127    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_CFGVARS_CHECKSUM
128iend
129
130g_rgwChoiceToValueLookupForEepromType:
131    dw  EEPROM_TYPE.2816_2kiB
132    dw  EEPROM_TYPE.2864_8kiB
133    dw  EEPROM_TYPE.2864_8kiB_MOD
134    dw  EEPROM_TYPE.28256_32kiB
135    dw  EEPROM_TYPE.28512_64kiB
136    dw  EEPROM_TYPE.SST_39SF
137
138g_rgszValueToStringLookupForEepromType:
139    dw  g_szValueFlash2816
140    dw  g_szValueFlash2864
141    dw  g_szValueFlash2864Mod
142    dw  g_szValueFlash28256
143    dw  g_szValueFlash28512
144    dw  g_szValueFlashSST39SF
145
146g_rgwChoiceToValueLookupForSdpCommand:
147    dw  SDP_COMMAND.none
148    dw  SDP_COMMAND.enable
149    dw  SDP_COMMAND.disable
150g_rgszValueToStringLookupForSdpCommand:
151    dw  g_szValueFlashNone
152    dw  g_szValueFlashEnable
153    dw  g_szValueFlashDisable
154
155g_rgwChoiceToValueLookupForPageSize:
156    dw  EEPROM_PAGE.1_byte
157    dw  EEPROM_PAGE.2_bytes
158    dw  EEPROM_PAGE.4_bytes
159    dw  EEPROM_PAGE.8_bytes
160    dw  EEPROM_PAGE.16_bytes
161    dw  EEPROM_PAGE.32_bytes
162    dw  EEPROM_PAGE.64_bytes
163g_rgszValueToStringLookupForPageSize:
164    dw  g_szValueFlash1byte
165    dw  g_szValueFlash2bytes
166    dw  g_szValueFlash4bytes
167    dw  g_szValueFlash8bytes
168    dw  g_szValueFlash16bytes
169    dw  g_szValueFlash32bytes
170    dw  g_szValueFlash64bytes
171
172
173; Section containing code
174SECTION .text
175
176;--------------------------------------------------------------------
177; MainMenu_EnterMenuOrModifyItemVisibility
178;   Parameters:
179;       SS:BP:  Menu handle
180;   Returns:
181;       Nothing
182;   Corrupts registers:
183;       All, except BP
184;--------------------------------------------------------------------
185ALIGN JUMP_ALIGN
186FlashMenu_EnterMenuOrModifyItemVisibility:
187    push    cs
188    pop     ds
189
190    cmp     WORD [g_cfgVars+CFGVARS.wEepromSegment], 0
191    jne     SHORT .AlreadySet
192
193    push    es
194    push    di
195    call    EEPROM_FindXtideUniversalBiosROMtoESDI
196    mov     ax, es
197    pop     di
198    pop     es
199    jnc     SHORT .StoreEepromSegment
200    mov     ax, DEFAULT_EEPROM_SEGMENT
201.StoreEepromSegment:
202    mov     [g_cfgVars+CFGVARS.wEepromSegment], ax
203
204.AlreadySet:
205    mov     si, g_MenupageForFlashMenu
206    ePUSH_T bx, Menupage_ChangeToNewMenupageInDSSI
207    cmp     WORD [g_cfgVars+CFGVARS.bEepromType], EEPROM_TYPE.SST_39SF
208    jz      SHORT .DisableMenuitemsUnusedBySstFlash
209    ; Fall to .EnableMenuitemsUnusedBySstFlash
210
211;--------------------------------------------------------------------
212; .EnableMenuitemsUnusedBySstFlash
213;   Parameters:
214;       SS:BP:  Menu handle
215;   Returns:
216;       Nothing
217;   Corrupts registers:
218;       AX, BX
219;--------------------------------------------------------------------
220ALIGN JUMP_ALIGN
221.EnableMenuitemsUnusedBySstFlash:
222    mov     bx, g_MenuitemFlashSdpCommand
223    call    EnableMenuitemFromCSBX
224    mov     bx, g_MenuitemFlashPageSize
225    jmp     EnableMenuitemFromCSBX
226
227;--------------------------------------------------------------------
228; .DisableMenuitemsUnusedBySstFlash
229;   Parameters:
230;       SS:BP:  Menu handle
231;   Returns:
232;       Nothing
233;   Corrupts registers:
234;       AX, BX
235;--------------------------------------------------------------------
236ALIGN JUMP_ALIGN
237.DisableMenuitemsUnusedBySstFlash:
238    mov     bx, g_MenuitemFlashSdpCommand
239    call    DisableMenuitemFromCSBX
240    mov     bx, g_MenuitemFlashPageSize
241    jmp     DisableMenuitemFromCSBX
242
243;--------------------------------------------------------------------
244; MENUITEM activation functions (.fnActivate)
245;   Parameters:
246;       SS:BP:  Ptr to MENU
247;   Returns:
248;       Nothing
249;   Corrupts registers:
250;       All, except segments
251;--------------------------------------------------------------------
252ALIGN JUMP_ALIGN
253StartFlashing:
254    call    .MakeSureThatImageFitsInEeprom
255    jc      SHORT .InvalidFlashingParameters
256    cmp     WORD [cs:g_cfgVars+CFGVARS.bEepromType], EEPROM_TYPE.SST_39SF
257    jnz     SHORT .SkipAlignmentCheck
258    call    .MakeSureAddress32KAligned
259    jc      SHORT .InvalidFlashingParameters
260.SkipAlignmentCheck:
261    push    es
262    push    ds
263
264    call    .PrepareBuffersForFlashing
265    mov     cl, FLASHVARS_size + PROGRESS_DIALOG_IO_size
266    call    Memory_ReserveCLbytesFromStackToDSSI
267    call    .InitializeFlashvarsFromDSSI
268    mov     bx, si                          ; DS:BX now points to FLASHVARS
269    cmp     WORD [cs:g_cfgVars+CFGVARS.bEepromType], EEPROM_TYPE.SST_39SF
270    jz      SHORT .FlashWithoutProgressBar
271    add     si, BYTE FLASHVARS_size         ; DS:SI now points to PROGRESS_DIALOG_IO
272    call    Dialogs_DisplayProgressDialogForFlashingWithDialogIoInDSSIandFlashvarsInDSBX
273.FlashComplete:
274    call    .DisplayFlashingResultsFromFlashvarsInDSBX
275
276    add     sp, BYTE FLASHVARS_size + PROGRESS_DIALOG_IO_size
277    pop     ds
278    pop     es
279.InvalidFlashingParameters:
280    ret
281
282.FlashWithoutProgressBar:                   ; Worst case. SST devices will
283    call    FlashSst_WithFlashvarsInDSBX    ; either complete flashing
284    jmp     SHORT .FlashComplete            ; or timeout within 2 seconds. 
285
286;--------------------------------------------------------------------
287; .MakeSureThatImageFitsInEeprom
288;   Parameters:
289;       SS:BP:  Ptr to MENU
290;   Returns:
291;       CF:     Set if EEPROM too small
292;   Corrupts registers:
293;       AX, BX, DX
294;--------------------------------------------------------------------
295ALIGN JUMP_ALIGN
296.MakeSureThatImageFitsInEeprom:
297    call    Buffers_GetSelectedEepromSizeInWordsToAX
298    cmp     ax, [cs:g_cfgVars+CFGVARS.wImageSizeInWords]
299    jae     SHORT .ImageFitsInSelectedEeprom
300    mov     dx, g_szErrEepromTooSmall
301    call    Dialogs_DisplayErrorFromCSDX
302    stc
303ALIGN JUMP_ALIGN, ret
304.ImageFitsInSelectedEeprom:
305.AlignmentIs32K:
306.DoNotGenerateChecksumByte:
307    ret
308
309;--------------------------------------------------------------------
310; .MakeSureAddress32KAligned
311;   Parameters:
312;       SS:BP:  Ptr to MENU
313;   Returns:
314;       CF:     Set if EEPROM segment is not 32K aligned
315;   Corrupts registers:
316;       AX, BX, DX
317;--------------------------------------------------------------------
318ALIGN JUMP_ALIGN
319.MakeSureAddress32KAligned:
320    mov     ax, [cs:g_cfgVars+CFGVARS.wEepromSegment]
321    and     ax, 007FFh
322    jz      SHORT .AlignmentIs32K
323    mov     dx, g_szErrAddrNot32KAligned
324    call    Dialogs_DisplayErrorFromCSDX
325    stc
326    ret
327
328;--------------------------------------------------------------------
329; .PrepareBuffersForFlashing
330;   Parameters:
331;       SS:BP:  Ptr to MENU
332;   Returns:
333;       Nothing
334;   Corrupts registers:
335;       AX, BX, CX, SI, DI
336;--------------------------------------------------------------------
337ALIGN JUMP_ALIGN
338.PrepareBuffersForFlashing:
339    call    EEPROM_LoadFromRomToRamComparisonBuffer
340    call    Buffers_AppendZeroesIfNeeded
341    test    BYTE [cs:g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_CHECKSUM
342    jz      SHORT .DoNotGenerateChecksumByte
343    jmp     Buffers_GenerateChecksum
344
345;--------------------------------------------------------------------
346; .InitializeFlashvarsFromDSSI
347;   Parameters:
348;       DS:SI:  Ptr to FLASHVARS to initialize
349;       SS:BP:  Ptr to MENU
350;   Returns:
351;       Nothing
352;   Corrupts registers:
353;       AX, BX, DX, DI, ES
354;--------------------------------------------------------------------
355ALIGN JUMP_ALIGN
356.InitializeFlashvarsFromDSSI:
357    call    Buffers_GetFileBufferToESDI
358    mov     [si+FLASHVARS.fpNextSourcePage], di
359    mov     [si+FLASHVARS.fpNextSourcePage+2], es
360
361    call    Buffers_GetFlashComparisonBufferToESDI
362    mov     [si+FLASHVARS.fpNextComparisonPage], di
363    mov     [si+FLASHVARS.fpNextComparisonPage+2], es
364
365    mov     ax, [cs:g_cfgVars+CFGVARS.wEepromSegment]
366    mov     WORD [si+FLASHVARS.fpNextDestinationPage], 0
367    mov     [si+FLASHVARS.fpNextDestinationPage+2], ax
368
369    mov     al, [cs:g_cfgVars+CFGVARS.bEepromType]
370    mov     [si+FLASHVARS.bEepromType], al
371
372    mov     al, [cs:g_cfgVars+CFGVARS.bSdpCommand]
373    mov     [si+FLASHVARS.bEepromSdpCommand], al
374
375    mov     ax, SST_PAGE_SIZE
376    cmp     WORD [g_cfgVars+CFGVARS.bEepromType], EEPROM_TYPE.SST_39SF
377    jz      SHORT .UseSstPageSize
378
379    eMOVZX  bx, [cs:g_cfgVars+CFGVARS.bEepromPage]
380    mov     ax, [cs:bx+g_rgwEepromPageToSizeInBytes]
381.UseSstPageSize:
382    mov     [si+FLASHVARS.wEepromPageSize], ax
383
384    call    .GetNumberOfPagesToFlashToAX
385    mov     [si+FLASHVARS.wPagesToFlash], ax
386    ret
387
388;--------------------------------------------------------------------
389; .GetNumberOfPagesToFlashToAX
390;   Parameters:
391;       DS:SI:  Ptr to FLASHVARS to initialize
392;   Returns:
393;       AX:     Number of pages to flash (0 = 65536)
394;   Corrupts registers:
395;       BX, DX
396;--------------------------------------------------------------------
397ALIGN JUMP_ALIGN
398.GetNumberOfPagesToFlashToAX:
399    call    Buffers_GetSelectedEepromSizeInWordsToAX
400    xor     dx, dx
401    eSHL_IM ax, 1       ; Size in bytes to...
402    eRCL_IM dx, 1       ; ...DX:AX
403
404    cmp     WORD [si+FLASHVARS.wEepromPageSize], BYTE 1
405    jbe     SHORT .PreventDivideException
406    div     WORD [si+FLASHVARS.wEepromPageSize]
407.PreventDivideException:
408    ret
409
410;--------------------------------------------------------------------
411; .DisplayFlashingResultsFromFlashvarsInDSBX
412;   Parameters:
413;       DS:BX:  Ptr to FLASHVARS
414;       SS:BP:  Ptr to MENU
415;   Returns:
416;       Nothing
417;   Corrupts registers:
418;       AX, BX, DX
419;--------------------------------------------------------------------
420ALIGN JUMP_ALIGN
421.DisplayFlashingResultsFromFlashvarsInDSBX:
422    eMOVZX  bx, [bx+FLASHVARS.flashResult]
423    jmp     [cs:bx+.rgfnFlashResultMessage]
424
425ALIGN WORD_ALIGN
426.rgfnFlashResultMessage:
427    dw      .DisplayFlashSuccessful
428    dw      .DisplayDeviceDetectionError
429    dw      .DisplayPollingError
430    dw      .DisplayDataVerifyError
431
432
433;--------------------------------------------------------------------
434; .DisplayDeviceDetectionError
435; .DisplayPollingError
436; .DisplayDataVerifyError
437; .DisplayFlashSuccessful
438;   Parameters:
439;       SS:BP:  Ptr to MENU
440;   Returns:
441;       Nothing
442;   Corrupts registers:
443;       AX, DX, DI, ES
444;--------------------------------------------------------------------
445ALIGN JUMP_ALIGN
446.DisplayDeviceDetectionError:
447    mov     dx, g_szErrEepromDetection
448    jmp     Dialogs_DisplayErrorFromCSDX
449
450ALIGN JUMP_ALIGN
451.DisplayPollingError:
452    mov     dx, g_szErrEepromPolling
453    jmp     Dialogs_DisplayErrorFromCSDX
454
455ALIGN JUMP_ALIGN
456.DisplayDataVerifyError:
457    mov     dx, g_szErrEepromVerify
458    jmp     Dialogs_DisplayErrorFromCSDX
459
460ALIGN JUMP_ALIGN
461.DisplayFlashSuccessful:
462    call    Buffers_GetFileBufferToESDI
463    cmp     WORD [es:di+ROMVARS.wRomSign], 0AA55h   ; PC ROM?
464    je      SHORT .DisplayRebootMessageAndReboot
465    mov     dx, g_szForeignFlash
466    jmp     Dialogs_DisplayNotificationFromCSDX
467ALIGN JUMP_ALIGN
468.DisplayRebootMessageAndReboot:
469    mov     dx, g_szPCFlashSuccessful
470    call    Dialogs_DisplayNotificationFromCSDX
471    xor     ax, ax          ; Cold boot flag
472    jmp     Reboot_ComputerWithBootFlagInAX
Note: See TracBrowser for help on using the repository browser.