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

Last change on this file since 136 was 136, checked in by aitotat, 13 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.