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

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

Changes to Configurator v2:

  • Menu selection timeout is now specified in timer ticks.
  • File was not closed when saving changes.
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 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 FileIO_CloseUsingHandleFromBX
169 call Buffers_ClearUnsavedChanges
170 call DisplayFileSavedSuccesfully
171 jmp SHORT .Return
172
173.DisplayErrorMessage:
174 call FileIO_CloseUsingHandleFromBX
175 call DisplayFailedToSaveFile
176ALIGN JUMP_ALIGN
177.Return:
178 pop ds
179 pop es
180 ret
181
182
183;--------------------------------------------------------------------
184; DisplayFileLoadedSuccesfully
185; DisplayFileSavedSuccesfully
186; DisplayFailedToLoadFile
187; DisplayFailedToSaveFile
188; DisplayFileTooBig
189; Parameters:
190; SS:BP: Menu handle
191; Returns:
192; Nothing
193; Corrupts registers:
194; AX, DX
195;--------------------------------------------------------------------
196ALIGN JUMP_ALIGN
197DisplayFileLoadedSuccesfully:
198 mov dx, g_szDlgMainLoadFile
199 jmp Dialogs_DisplayNotificationFromCSDX
200
201ALIGN JUMP_ALIGN
202DisplayFileSavedSuccesfully:
203 mov dx, g_szDlgMainSaveFile
204 jmp Dialogs_DisplayNotificationFromCSDX
205
206DisplayFailedToLoadFile:
207 mov dx, g_szDlgMainLoadErr
208 jmp Dialogs_DisplayErrorFromCSDX
209
210DisplayFailedToSaveFile:
211 mov dx, g_szDlgMainSaveErr
212 jmp Dialogs_DisplayErrorFromCSDX
213
214DisplayFileTooBig:
215 mov dx, g_szDlgMainFileTooBig
216 jmp Dialogs_DisplayErrorFromCSDX
Note: See TracBrowser for help on using the repository browser.