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

Last change on this file since 521 was 484, checked in by aitotat@…, 12 years ago

Changes to Configurator v2:

  • Large builds are now saved to correct size.
File size: 5.9 KB
RevLine 
[57]1; Project name : XTIDE Univeral BIOS Configurator v2
2; Description : Functions for loading and saving BIOS image file.
3
[376]4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 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
[57]20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; BiosFile_LoadFileFromDSSItoRamBuffer
25; Parameters:
26; DS:SI: Name of file to open
27; SS:BP: Menu handle
28; Returns:
29; Nothing
30; Corrupts registers:
31; AX, BX, CX, DX, SI, DI
32;--------------------------------------------------------------------
33ALIGN JUMP_ALIGN
34BiosFile_LoadFileFromDSSItoRamBuffer:
35 push ds
36
[68]37 call .OpenFileForLoadingFromDSSIandGetSizeToDXCX
[57]38 jc SHORT .DisplayErrorMessage
[68]39 call .LoadFileWithNameInDSSIhandleInBXandSizeInDXCXtoRamBuffer
[57]40 jc SHORT .DisplayErrorMessage
41
42 mov ax, FLG_CFGVARS_FILELOADED
[68]43 call Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration
[136]44 call FileIO_CloseUsingHandleFromBX
[293]45 call DisplayFileLoadedSuccessfully
[57]46 jmp SHORT .Return
47
48.DisplayErrorMessage:
49 call FileIO_CloseUsingHandleFromBX
50 call DisplayFailedToLoadFile
51ALIGN JUMP_ALIGN
52.Return:
53 pop ds
54 ret
55
56;--------------------------------------------------------------------
[68]57; .OpenFileForLoadingFromDSSIandGetSizeInBytesToDXCX
[57]58; Parameters:
59; DS:SI: Name of file to open
60; Returns:
[293]61; BX: File handle (if successful)
62; DX:CX: File size (if successful)
63; CF: Clear if successful
[57]64; Set if error
65; Corrupts registers:
[68]66; AX
[57]67;--------------------------------------------------------------------
68ALIGN JUMP_ALIGN
[68]69.OpenFileForLoadingFromDSSIandGetSizeToDXCX:
[57]70 mov al, FILE_ACCESS.ReadOnly
71 call FileIO_OpenWithPathInDSSIandFileAccessInAL
72 jc SHORT .FileError
73 call FileIO_GetFileSizeToDXAXusingHandleFromBXandResetFilePosition
74 jc SHORT .FileError
75
[68]76 cmp dx, MAX_EEPROM_SIZE_IN_BYTES >> 16
[57]77 ja SHORT .FileTooBig
[68]78 jb SHORT .FileNotTooBig
79 cmp ax, MAX_EEPROM_SIZE_IN_BYTES & 0FFFFh
80 ja SHORT .FileTooBig
81.FileNotTooBig:
[57]82 xchg cx, ax
83 clc
84 ret
85.FileTooBig:
86 call DisplayFileTooBig
87 stc
88.FileError:
89 ret
90
91;--------------------------------------------------------------------
[68]92; .LoadFileWithNameInDSSIhandleInBXandSizeInDXCXtoRamBuffer
[57]93; Parameters:
94; BX: File Handle
[68]95; DX:CX: File size
[57]96; DS:SI: File name
97; Returns:
[293]98; CF: Clear if successful
[57]99; Set if error
100; Corrupts registers:
101; AX, SI, DI, DS
102;--------------------------------------------------------------------
103ALIGN JUMP_ALIGN
[68]104.LoadFileWithNameInDSSIhandleInBXandSizeInDXCXtoRamBuffer:
[57]105 push es
106
107 call Buffers_GetFileBufferToESDI
108 call Registers_ExchangeDSSIwithESDI
[68]109 call FileIO_ReadDXCXbytesToDSSIusingHandleFromBX
[181]110 jc SHORT .ReturnError
[57]111
[181]112 ; Store filename to Cfgvars from ESDI
[57]113 push cx
114
[107]115 call Registers_CopyESDItoDSSI ; File name in DS:SI
[57]116 push cs
117 pop es
118 mov di, g_cfgVars+CFGVARS.szOpenedFile
119 cld
120 call String_CopyDSSItoESDIandGetLengthToCX
[181]121 clc
[57]122
123 pop cx
[181]124ALIGN JUMP_ALIGN
125.ReturnError:
[57]126 pop es
127 ret
128
129
130;--------------------------------------------------------------------
131; BiosFile_SaveUnsavedChanges
132; Parameters:
133; SS:BP: Menu handle
134; Returns:
135; Nothing
136; Corrupts registers:
137; AX, BX, CX, SI, DI
138;--------------------------------------------------------------------
139ALIGN JUMP_ALIGN
140BiosFile_SaveUnsavedChanges:
141 push ds
142
143 push cs
144 pop ds
145 mov si, g_cfgVars+CFGVARS.szOpenedFile
146 call BiosFile_SaveRamBufferToFileInDSSI
147
148 pop ds
149 ret
150
151
152;--------------------------------------------------------------------
153; BiosFile_SaveRamBufferToFileInDSSI
154; Parameters:
155; DS:SI: Name of file to save
156; SS:BP: Menu handle
157; Returns:
158; Nothing
159; Corrupts registers:
160; AX, BX, CX, SI, DI
161;--------------------------------------------------------------------
162ALIGN JUMP_ALIGN
163BiosFile_SaveRamBufferToFileInDSSI:
164 push es
165 push ds
166
167 call Buffers_GenerateChecksum
168 call Buffers_GetFileBufferToESDI
[484]169 call EEPROM_GetXtideUniversalBiosSizeFromESDItoDXCX
[138]170
171 mov al, FILE_ACCESS.WriteOnly
172 call FileIO_OpenWithPathInDSSIandFileAccessInAL
173 jc SHORT .DisplayErrorMessage
174
175 call Registers_CopyESDItoDSSI
[68]176 call FileIO_WriteDXCXbytesFromDSSIusingHandleFromBX
[57]177 jc SHORT .DisplayErrorMessage
178
[136]179 call FileIO_CloseUsingHandleFromBX
[57]180 call Buffers_ClearUnsavedChanges
[293]181 call DisplayFileSavedSuccessfully
[57]182 jmp SHORT .Return
183
184.DisplayErrorMessage:
185 call FileIO_CloseUsingHandleFromBX
186 call DisplayFailedToSaveFile
187ALIGN JUMP_ALIGN
188.Return:
189 pop ds
190 pop es
191 ret
192
193
194;--------------------------------------------------------------------
[293]195; DisplayFileLoadedSuccessfully
196; DisplayFileSavedSuccessfully
[57]197; DisplayFailedToLoadFile
198; DisplayFailedToSaveFile
199; DisplayFileTooBig
200; Parameters:
201; SS:BP: Menu handle
202; Returns:
203; Nothing
204; Corrupts registers:
205; AX, DX
206;--------------------------------------------------------------------
207ALIGN JUMP_ALIGN
[293]208DisplayFileLoadedSuccessfully:
[57]209 mov dx, g_szDlgMainLoadFile
210 jmp Dialogs_DisplayNotificationFromCSDX
211
212ALIGN JUMP_ALIGN
[293]213DisplayFileSavedSuccessfully:
[57]214 mov dx, g_szDlgMainSaveFile
215 jmp Dialogs_DisplayNotificationFromCSDX
216
217DisplayFailedToLoadFile:
218 mov dx, g_szDlgMainLoadErr
219 jmp Dialogs_DisplayErrorFromCSDX
220
221DisplayFailedToSaveFile:
222 mov dx, g_szDlgMainSaveErr
223 jmp Dialogs_DisplayErrorFromCSDX
224
225DisplayFileTooBig:
226 mov dx, g_szDlgMainFileTooBig
227 jmp Dialogs_DisplayErrorFromCSDX
Note: See TracBrowser for help on using the repository browser.