source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/BiosFile.asm@ 124

Last change on this file since 124 was 118, checked in by Tomi Tilli, 14 years ago

Changes to Configurator v2:

  • Warm boot flag is now reset when rebooting.
  • Checksum generation no longer corrupts images when image size is less than EEPROM size.
  • Configuration and flashing menu items are now displayed when loading BIOS from EEPROM.
File size: 5.3 KB
Line 
1; Project name : XTIDE Univeral BIOS Configurator v2
2; Description : Functions for loading and saving BIOS image file.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; BiosFile_LoadFileFromDSSItoRamBuffer
9; Parameters:
10; DS:SI: Name of file to open
11; SS:BP: Menu handle
12; Returns:
13; Nothing
14; Corrupts registers:
15; AX, BX, CX, DX, SI, DI
16;--------------------------------------------------------------------
17ALIGN JUMP_ALIGN
18BiosFile_LoadFileFromDSSItoRamBuffer:
19 push ds
20
21 call .OpenFileForLoadingFromDSSIandGetSizeToDXCX
22 jc SHORT .DisplayErrorMessage
23 call .LoadFileWithNameInDSSIhandleInBXandSizeInDXCXtoRamBuffer
24 jc SHORT .DisplayErrorMessage
25
26 mov ax, FLG_CFGVARS_FILELOADED
27 call Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration
28 call DisplayFileLoadedSuccesfully
29 call FileIO_CloseUsingHandleFromBX
30 jmp SHORT .Return
31
32.DisplayErrorMessage:
33 call FileIO_CloseUsingHandleFromBX
34 call DisplayFailedToLoadFile
35ALIGN JUMP_ALIGN
36.Return:
37 pop ds
38 ret
39
40;--------------------------------------------------------------------
41; .OpenFileForLoadingFromDSSIandGetSizeInBytesToDXCX
42; Parameters:
43; DS:SI: Name of file to open
44; Returns:
45; BX: File handle (if succesfull)
46; DX:CX: File size (if succesfull)
47; CF: Clear if successfull
48; Set if error
49; Corrupts registers:
50; AX
51;--------------------------------------------------------------------
52ALIGN JUMP_ALIGN
53.OpenFileForLoadingFromDSSIandGetSizeToDXCX:
54 mov al, FILE_ACCESS.ReadOnly
55 call FileIO_OpenWithPathInDSSIandFileAccessInAL
56 jc SHORT .FileError
57 call FileIO_GetFileSizeToDXAXusingHandleFromBXandResetFilePosition
58 jc SHORT .FileError
59
60 cmp dx, MAX_EEPROM_SIZE_IN_BYTES >> 16
61 ja SHORT .FileTooBig
62 jb SHORT .FileNotTooBig
63 cmp ax, MAX_EEPROM_SIZE_IN_BYTES & 0FFFFh
64 ja SHORT .FileTooBig
65.FileNotTooBig:
66 xchg cx, ax
67 clc
68 ret
69.FileTooBig:
70 call DisplayFileTooBig
71 stc
72.FileError:
73 ret
74
75;--------------------------------------------------------------------
76; .LoadFileWithNameInDSSIhandleInBXandSizeInDXCXtoRamBuffer
77; Parameters:
78; BX: File Handle
79; DX:CX: File size
80; DS:SI: File name
81; Returns:
82; CF: Clear if successfull
83; Set if error
84; Corrupts registers:
85; AX, SI, DI, DS
86;--------------------------------------------------------------------
87ALIGN JUMP_ALIGN
88.LoadFileWithNameInDSSIhandleInBXandSizeInDXCXtoRamBuffer:
89 push es
90
91 call Buffers_GetFileBufferToESDI
92 call Registers_ExchangeDSSIwithESDI
93 call FileIO_ReadDXCXbytesToDSSIusingHandleFromBX
94 jnc SHORT .StoreFileNameToCfgvarsFromESDI
95
96 pop es
97 ret
98
99ALIGN JUMP_ALIGN
100.StoreFileNameToCfgvarsFromESDI:
101 push cx
102
103 call Registers_CopyESDItoDSSI ; File name in DS:SI
104 push cs
105 pop es
106 mov di, g_cfgVars+CFGVARS.szOpenedFile
107 cld
108 call String_CopyDSSItoESDIandGetLengthToCX
109
110 pop cx
111 pop es
112 clc
113 ret
114
115
116;--------------------------------------------------------------------
117; BiosFile_SaveUnsavedChanges
118; Parameters:
119; SS:BP: Menu handle
120; Returns:
121; Nothing
122; Corrupts registers:
123; AX, BX, CX, SI, DI
124;--------------------------------------------------------------------
125ALIGN JUMP_ALIGN
126BiosFile_SaveUnsavedChanges:
127 push ds
128
129 push cs
130 pop ds
131 mov si, g_cfgVars+CFGVARS.szOpenedFile
132 call BiosFile_SaveRamBufferToFileInDSSI
133
134 pop ds
135 ret
136
137
138;--------------------------------------------------------------------
139; BiosFile_SaveRamBufferToFileInDSSI
140; Parameters:
141; DS:SI: Name of file to save
142; SS:BP: Menu handle
143; Returns:
144; Nothing
145; Corrupts registers:
146; AX, BX, CX, SI, DI
147;--------------------------------------------------------------------
148ALIGN JUMP_ALIGN
149BiosFile_SaveRamBufferToFileInDSSI:
150 push es
151 push ds
152
153 mov al, FILE_ACCESS.WriteOnly
154 call FileIO_OpenWithPathInDSSIandFileAccessInAL
155 jc SHORT .DisplayErrorMessage
156
157 call Buffers_GenerateChecksum
158 call Buffers_GetFileBufferToESDI
159 call Registers_CopyESDItoDSSI
160 mov ax, [cs:g_cfgVars+CFGVARS.wImageSizeInWords]
161 call EEPROM_GetSmallestEepromSizeInWordsToCXforImageWithWordSizeInAX
162 xor dx, dx
163 shl cx, 1
164 rcl dx, 1 ; WORDs to BYTEs
165 call FileIO_WriteDXCXbytesFromDSSIusingHandleFromBX
166 jc SHORT .DisplayErrorMessage
167
168 call Buffers_ClearUnsavedChanges
169 call DisplayFileSavedSuccesfully
170 jmp SHORT .Return
171
172.DisplayErrorMessage:
173 call FileIO_CloseUsingHandleFromBX
174 call DisplayFailedToSaveFile
175ALIGN JUMP_ALIGN
176.Return:
177 pop ds
178 pop es
179 ret
180
181
182;--------------------------------------------------------------------
183; DisplayFileLoadedSuccesfully
184; DisplayFileSavedSuccesfully
185; DisplayFailedToLoadFile
186; DisplayFailedToSaveFile
187; DisplayFileTooBig
188; Parameters:
189; SS:BP: Menu handle
190; Returns:
191; Nothing
192; Corrupts registers:
193; AX, DX
194;--------------------------------------------------------------------
195ALIGN JUMP_ALIGN
196DisplayFileLoadedSuccesfully:
197 mov dx, g_szDlgMainLoadFile
198 jmp Dialogs_DisplayNotificationFromCSDX
199
200ALIGN JUMP_ALIGN
201DisplayFileSavedSuccesfully:
202 mov dx, g_szDlgMainSaveFile
203 jmp Dialogs_DisplayNotificationFromCSDX
204
205DisplayFailedToLoadFile:
206 mov dx, g_szDlgMainLoadErr
207 jmp Dialogs_DisplayErrorFromCSDX
208
209DisplayFailedToSaveFile:
210 mov dx, g_szDlgMainSaveErr
211 jmp Dialogs_DisplayErrorFromCSDX
212
213DisplayFileTooBig:
214 mov dx, g_szDlgMainFileTooBig
215 jmp Dialogs_DisplayErrorFromCSDX
Note: See TracBrowser for help on using the repository browser.