source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Dialogs.asm @ 621

Last change on this file since 621 was 621, checked in by krille_n_, 2 months ago

Changes:

  • Fixed three different bugs all causing the boot menu to show drives using IRQs even though the BIOS had been built without MODULE_IRQ.
  • Fixed two bugs in XTIDECFG where loading a BIOS from file and then loading the old settings from EEPROM would
    • overwrite ROMVARS.wFlags in the loaded BIOS file (in RAM). The possibly resulting mismatch of module flags could make it impossible to change settings for modules included in the BIOS or allow changing settings for modules not included in the BIOS.
    • not copy the color theme over to the loaded BIOS.
  • Also fixed two very minor bugs in XTIDECFG in BiosFile_LoadFileFromDSSItoRamBuffer and BiosFile_SaveRamBufferToFileInDSSI where the error handling in these routines would close whatever file handle that happened to match the error code returned by DOS in AX.
  • Made significant changes to the new flash ROM programming routines to reduce the size. Also fixed a minor bug that would cause the second verification to be skipped and return success when programming a 64 KB block of data.
  • Changed the custom BIOS build file names to the 8.3 format.
  • Changed some help strings in XTIDECFG to clarify things.
  • Other minor optimizations and fixes.
File size: 5.8 KB
Line 
1; Project name  :   XTIDE Univeral BIOS Configurator v2
2; Description   :   Functions for displaying dialogs.
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 code
21SECTION .text
22
23
24;--------------------------------------------------------------------
25; Dialogs_DisplayNotificationFromCSDX
26; Dialogs_DisplayErrorFromCSDX
27;   Parameters:
28;       CS:DX:  Ptr to notification/error string to display
29;       SS:BP:  Menu handle
30;   Returns:
31;       ZF:     Cleared
32;   Corrupts registers:
33;       AX
34;--------------------------------------------------------------------
35ALIGN JUMP_ALIGN
36Dialogs_DisplayNotificationFromCSDX:
37    push    di
38    mov     di, g_szNotificationDialog
39    jmp     SHORT DisplayMessageDialogWithMessageInCSDXandDialogInputInDSSI
40
41ALIGN JUMP_ALIGN
42Dialogs_DisplayErrorFromCSDX:
43    push    di
44    mov     di, g_szErrorDialog
45    SKIP1B  al
46    ; Fall to DisplayMessageDialogWithMessageInCSDXandDialogInputInDSSI
47
48;--------------------------------------------------------------------
49; Dialogs_DisplayHelpFromCSDXwithTitleInCSDI
50;   Parameters:
51;       CS:DX:  Ptr to help string to display
52;       CS:DI:  Ptr to title string for help dialog
53;       SS:BP:  Menu handle
54;   Returns:
55;       ZF:     Cleared
56;   Corrupts registers:
57;       AX
58;--------------------------------------------------------------------
59Dialogs_DisplayHelpFromCSDXwithTitleInCSDI:
60    push    di
61
62DisplayMessageDialogWithMessageInCSDXandDialogInputInDSSI:
63    push    ds
64    push    si
65    push    cx
66
67    mov     cl, DIALOG_INPUT_size
68    call    Memory_ReserveCLbytesFromStackToDSSI
69    call    InitializeDialogInputFromDSSI
70    mov     [si+DIALOG_INPUT.fszTitle], di
71    mov     [si+DIALOG_INPUT.fszItems], dx
72    CALL_MENU_LIBRARY DisplayMessageWithInputInDSSI
73
74    add     sp, BYTE DIALOG_INPUT_size  ; Clears ZF
75    pop     cx
76    pop     si
77    pop     ds
78
79    pop     di
80    ret
81
82
83;--------------------------------------------------------------------
84; Dialogs_DisplayFileDialogWithDialogIoInDSSI
85;   Parameters:
86;       DS:SI:  Ptr to FILE_DIALOG_IO
87;       SS:BP:  Menu handle
88;   Returns:
89;       Nothing
90;   Corrupts registers:
91;       AX, DI
92;--------------------------------------------------------------------
93ALIGN JUMP_ALIGN
94Dialogs_DisplayFileDialogWithDialogIoInDSSI:
95    push    es
96
97    call    Buffers_GetFileDialogItemBufferToESDI
98    mov     WORD [si+FILE_DIALOG_IO.fszTitle], g_szDlgFileTitle
99    mov     [si+FILE_DIALOG_IO.fszTitle+2], cs
100    mov     [si+FILE_DIALOG_IO.fszItemBuffer], di
101    mov     [si+FILE_DIALOG_IO.fszItemBuffer+2], es
102    mov     BYTE [si+FILE_DIALOG_IO.bDialogFlags], FLG_FILEDIALOG_DRIVES
103    mov     BYTE [si+FILE_DIALOG_IO.bFileAttributes], FLG_FILEATTR_DIRECTORY | FLG_FILEATTR_ARCHIVE
104    mov     WORD [si+FILE_DIALOG_IO.fpFileFilterString], g_szDlgFileFilter
105    mov     [si+FILE_DIALOG_IO.fpFileFilterString+2], cs
106    CALL_MENU_LIBRARY GetFileNameWithIoInDSSI
107
108    pop     es
109    ret
110
111
112;--------------------------------------------------------------------
113; Dialogs_DisplayYesNoResponseDialogWithTitleStringInBX
114;   Parameters:
115;       BX:     Offset to dialog title string
116;       SS:BP:  Menu handle
117;   Returns:
118;       ZF:     Set if user wants to do the action
119;               Cleared if user wants to cancel
120;   Corrupts registers:
121;       AX, CX
122;--------------------------------------------------------------------
123ALIGN JUMP_ALIGN
124Dialogs_DisplayYesNoResponseDialogWithTitleStringInBX:
125    push    ds
126
127    mov     cl, DIALOG_INPUT_size
128    call    Memory_ReserveCLbytesFromStackToDSSI
129    call    InitializeDialogInputFromDSSI
130    mov     [si+DIALOG_INPUT.fszTitle], bx
131    mov     WORD [si+DIALOG_INPUT.fszItems], g_szMultichoiceBooleanFlag
132    CALL_MENU_LIBRARY GetSelectionToAXwithInputInDSSI
133    add     sp, BYTE DIALOG_INPUT_size
134    dec     ax              ; -1 = NO, 0 = YES
135
136    pop     ds
137    ret
138
139
140;--------------------------------------------------------------------
141; Dialogs_DisplayProgressDialogForFlashingWithDialogIoInDSSIandFlashvarsInDSBX
142;   Parameters:
143;       DS:BX:  Ptr to FLASHVARS
144;       DS:SI:  Ptr to PROGRESS_DIALOG_IO
145;       SS:BP:  Menu handle
146;   Returns:
147;       Nothing
148;   Corrupts registers:
149;       AX, DX, DI
150;--------------------------------------------------------------------
151ALIGN JUMP_ALIGN
152Dialogs_DisplayProgressDialogForFlashingWithDialogIoInDSSIandFlashvarsInDSBX:
153    ; Initialize progress dialog I/O in DS:SI with flashvars in DS:BX
154    call    InitializeDialogInputFromDSSI
155    mov     WORD [si+DIALOG_INPUT.fszTitle], g_szFlashTitle
156
157    xor     ax, ax
158    mov     [si+PROGRESS_DIALOG_IO.wCurrentProgressValue], ax
159    mov     dx, [bx+FLASHVARS.wPagesToFlash]
160    mov     [si+PROGRESS_DIALOG_IO.wMaxProgressValue], dx
161    mov     [si+PROGRESS_DIALOG_IO.wMinProgressValue], ax
162    mov     WORD [si+PROGRESS_DIALOG_IO.fnTaskWithParamInDSSI], Flash_EepromWithFlashvarsInDSSI
163    mov     [si+PROGRESS_DIALOG_IO.fnTaskWithParamInDSSI+2], cs
164    ; Init done
165
166    mov     dx, ds
167    mov     ax, bx
168    JMP_MENU_LIBRARY StartProgressTaskWithIoInDSSIandParamInDXAX
169
170
171;--------------------------------------------------------------------
172; InitializeDialogInputFromDSSI
173;   Parameters:
174;       DS:SI:  Ptr to DIALOG_INPUT
175;   Returns:
176;       Nothing
177;   Corrupts registers:
178;       Nothing
179;--------------------------------------------------------------------
180ALIGN JUMP_ALIGN
181InitializeDialogInputFromDSSI:
182    mov     [si+DIALOG_INPUT.fszTitle+2], cs
183    mov     [si+DIALOG_INPUT.fszItems+2], cs
184    mov     WORD [si+DIALOG_INPUT.fszInfo], g_szGenericDialogInfo
185    mov     [si+DIALOG_INPUT.fszInfo+2], cs
186    ret
Note: See TracBrowser for help on using the repository browser.