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

Last change on this file since 285 was 181, checked in by krille_n_@…, 13 years ago

Changes to all parts of the project:

  • Size optimizations.
  • Added a define (EXCLUDE_FROM_XTIDECFG) to exclude unused library code from XTIDECFG.
  • Tried to minimize time spent with interrupts disabled.
  • Some minor attempts to improve speed (reordering instructions etc).
  • Tried to improve readability, did some cleanup and fixed some errors in comments.
File size: 5.4 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 FileIO_CloseUsingHandleFromBX
29 call DisplayFileLoadedSuccesfully
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 jc SHORT .ReturnError
95
96 ; Store filename to Cfgvars from ESDI
97 push cx
98
99 call Registers_CopyESDItoDSSI ; File name in DS:SI
100 push cs
101 pop es
102 mov di, g_cfgVars+CFGVARS.szOpenedFile
103 cld
104 call String_CopyDSSItoESDIandGetLengthToCX
105 clc
106
107 pop cx
108ALIGN JUMP_ALIGN
109.ReturnError:
110 pop es
111 ret
112
113
114;--------------------------------------------------------------------
115; BiosFile_SaveUnsavedChanges
116; Parameters:
117; SS:BP: Menu handle
118; Returns:
119; Nothing
120; Corrupts registers:
121; AX, BX, CX, SI, DI
122;--------------------------------------------------------------------
123ALIGN JUMP_ALIGN
124BiosFile_SaveUnsavedChanges:
125 push ds
126
127 push cs
128 pop ds
129 mov si, g_cfgVars+CFGVARS.szOpenedFile
130 call BiosFile_SaveRamBufferToFileInDSSI
131
132 pop ds
133 ret
134
135
136;--------------------------------------------------------------------
137; BiosFile_SaveRamBufferToFileInDSSI
138; Parameters:
139; DS:SI: Name of file to save
140; SS:BP: Menu handle
141; Returns:
142; Nothing
143; Corrupts registers:
144; AX, BX, CX, SI, DI
145;--------------------------------------------------------------------
146ALIGN JUMP_ALIGN
147BiosFile_SaveRamBufferToFileInDSSI:
148 push es
149 push ds
150
151 call Buffers_GenerateChecksum
152 call Buffers_GetFileBufferToESDI
153 mov ax, [cs:g_cfgVars+CFGVARS.wImageSizeInWords]
154 call EEPROM_GetSmallestEepromSizeInWordsToCXforImageWithWordSizeInAX
155 xor dx, dx
156 shl cx, 1
157 rcl dx, 1 ; WORDs to BYTEs
158
159 mov al, FILE_ACCESS.WriteOnly
160 call FileIO_OpenWithPathInDSSIandFileAccessInAL
161 jc SHORT .DisplayErrorMessage
162
163 call Registers_CopyESDItoDSSI
164 call FileIO_WriteDXCXbytesFromDSSIusingHandleFromBX
165 jc SHORT .DisplayErrorMessage
166
167 call FileIO_CloseUsingHandleFromBX
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.