source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Buffers.asm@ 73

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

Changes to Configurator v2:

  • Finally ready for testing.
File size: 6.8 KB
Line 
1; File name : Buffers.asm
2; Project name : XTIDE Universal BIOS Configurator v2
3; Created date : 6.10.2010
4; Last update : 6.12.2010
5; Author : Tomi Tilli
6; Description : Functions for accessing file and flash buffers.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; Buffers_Clear
13; Parameters:
14; Nothing
15; Returns:
16; Nothing
17; Corrupts registers:
18; AX, CX, DI, ES
19;--------------------------------------------------------------------
20ALIGN JUMP_ALIGN
21Buffers_Clear:
22 call Buffers_GetFileBufferToESDI
23 mov cx, ROMVARS_size
24 jmp Memory_ZeroESDIwithSizeInCX
25
26
27;--------------------------------------------------------------------
28; Buffers_IsXtideUniversalBiosLoaded
29; Parameters:
30; Nothing
31; Returns:
32; ZF: Set if supported version of XTIDE Universal BIOS is loaded
33; Cleared no file or some other file is loaded
34; Corrupts registers:
35; CX, SI, DI, ES
36;--------------------------------------------------------------------
37ALIGN JUMP_ALIGN
38Buffers_IsXtideUniversalBiosLoaded:
39 test WORD [cs:g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_FILELOADED | FLG_CFGVARS_ROMLOADED
40 jz SHORT .NoFileOrBiosLoaded
41
42 call Buffers_GetFileBufferToESDI
43 jmp SHORT Buffers_IsXtideUniversalBiosSignatureInESDI
44.NoFileOrBiosLoaded:
45 or cl, 1 ; Clear ZF
46 ret
47
48
49;--------------------------------------------------------------------
50; Buffers_IsXtideUniversalBiosSignatureInESDI
51; Parameters:
52; ES:DI: Ptr to possible XTIDE Universal BIOS location
53; Returns:
54; ZF: Set if supported version of XTIDE Universal BIOS is loaded
55; Cleared no file or some other file is loaded
56; Corrupts registers:
57; CX, SI
58;--------------------------------------------------------------------
59ALIGN JUMP_ALIGN
60Buffers_IsXtideUniversalBiosSignatureInESDI:
61 push di
62
63 mov si, g_szXtideUniversalBiosSignature
64 add di, BYTE ROMVARS.rgbSign
65 mov cx, XTIDE_SIGNATURE_LENGTH / 2
66 cld
67 eSEG_STR repe, cs, cmpsw
68
69 pop di
70 ret
71
72
73;--------------------------------------------------------------------
74; Buffers_NewBiosWithSizeInCXandSourceInAXhasBeenLoadedForConfiguration
75; Parameters:
76; AX: EEPROM source (FLG_CFGVARS_FILELOADED or FLG_CFGVARS_ROMLOADED)
77; DX:CX: EEPROM size in bytes
78; Returns:
79; Nothing
80; Corrupts registers:
81; AX, CX, DX
82;--------------------------------------------------------------------
83ALIGN JUMP_ALIGN
84Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration:
85 and WORD [cs:g_cfgVars+CFGVARS.wFlags], ~(FLG_CFGVARS_FILELOADED | FLG_CFGVARS_ROMLOADED | FLG_CFGVARS_UNSAVED)
86 or WORD [cs:g_cfgVars+CFGVARS.wFlags], ax
87 shr dx, 1
88 rcr cx, 1
89 mov [cs:g_cfgVars+CFGVARS.wImageSizeInWords], cx
90 ret
91
92
93;--------------------------------------------------------------------
94; Buffers_SetUnsavedChanges
95; Buffers_ClearUnsavedChanges
96; Parameters:
97; SS:BP: Menu handle
98; Returns:
99; Nothing
100; Corrupts registers:
101; Nothing
102;--------------------------------------------------------------------
103ALIGN JUMP_ALIGN
104Buffers_SetUnsavedChanges:
105 or WORD [g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_UNSAVED
106 ret
107
108ALIGN JUMP_ALIGN
109Buffers_ClearUnsavedChanges:
110 and WORD [g_cfgVars+CFGVARS.wFlags], ~FLG_CFGVARS_UNSAVED
111 ret
112
113
114;--------------------------------------------------------------------
115; Buffers_SaveChangesIfFileLoaded
116; Parameters:
117; Nothing
118; Returns:
119; Nothing
120; Corrupts registers:
121; AX, BX, CX, SI, DI
122;--------------------------------------------------------------------
123ALIGN JUMP_ALIGN
124Buffers_SaveChangesIfFileLoaded:
125 mov ax, [cs:g_cfgVars+CFGVARS.wFlags]
126 and ax, BYTE (FLG_CFGVARS_FILELOADED | FLG_CFGVARS_UNSAVED)
127 cmp ax, BYTE (FLG_CFGVARS_FILELOADED | FLG_CFGVARS_UNSAVED)
128 jne SHORT .NothingToSave
129 call Dialogs_DisplaySaveChangesDialog
130 jnz SHORT .NothingToSave
131 jmp BiosFile_SaveUnsavedChanges
132ALIGN JUMP_ALIGN
133.NothingToSave:
134 ret
135
136
137;--------------------------------------------------------------------
138; Buffers_AppendZeroesIfNeeded
139; Parameters:
140; Nothing
141; Returns:
142; Nothing
143; Corrupts registers:
144; AX, CX, DI
145;--------------------------------------------------------------------
146ALIGN JUMP_ALIGN
147Buffers_AppendZeroesIfNeeded:
148 push es
149
150 eMOVZX di, BYTE [cs:g_cfgVars+CFGVARS.bEepromType]
151 mov cx, [cs:di+g_rgwEepromTypeToSizeInWords]
152 sub cx, [cs:g_cfgVars+CFGVARS.wImageSizeInWords] ; CX = WORDs to append
153 jle SHORT .NoNeedToAppendZeroes
154
155 call Buffers_GetFileBufferToESDI
156 mov ax, [cs:g_cfgVars+CFGVARS.wImageSizeInWords]
157 shl ax, 1
158 add di, ax ; ES:DI now point first unused image byte
159 xor ax, ax
160 cld
161 rep stosw
162ALIGN JUMP_ALIGN
163.NoNeedToAppendZeroes:
164 pop es
165 ret
166
167
168;--------------------------------------------------------------------
169; Buffers_GenerateChecksum
170; Parameters:
171; Nothing
172; Returns:
173; Nothing
174; Corrupts registers:
175; AX, BX, CX, DI
176;--------------------------------------------------------------------
177ALIGN JUMP_ALIGN
178Buffers_GenerateChecksum:
179 push es
180
181 call Buffers_GetFileBufferToESDI
182 mov cx, [cs:g_cfgVars+CFGVARS.wImageSizeInWords]
183 shl cx, 1 ; Words to bytes
184 dec cx ; Leave space for checksum byte
185 xor ax, ax
186ALIGN JUMP_ALIGN
187.SumNextByte:
188 add al, [es:di]
189 inc di
190 loop .SumNextByte
191 neg al
192 mov [es:di], al
193
194 pop es
195 ret
196
197
198;--------------------------------------------------------------------
199; Buffers_GetRomvarsFlagsToAX
200; Parameters:
201; Nothing
202; Returns:
203; AX: ROMVARS.wFlags
204; Corrupts registers:
205; BX
206;--------------------------------------------------------------------
207ALIGN JUMP_ALIGN
208Buffers_GetRomvarsFlagsToAX:
209 mov bx, ROMVARS.wFlags
210 ; Fall to Buffers_GetRomvarsValueToAXfromOffsetInBX
211
212;--------------------------------------------------------------------
213; Buffers_GetRomvarsValueToAXfromOffsetInBX
214; Parameters:
215; BX: ROMVARS offset
216; Returns:
217; AX: Value
218; Corrupts registers:
219; Nothing
220;--------------------------------------------------------------------
221ALIGN JUMP_ALIGN
222Buffers_GetRomvarsValueToAXfromOffsetInBX:
223 push es
224 push di
225 call Buffers_GetFileBufferToESDI
226 mov ax, [es:bx+di]
227 pop di
228 pop es
229 ret
230
231
232;--------------------------------------------------------------------
233; Buffers_GetFileBufferToESDI
234; Buffers_GetFlashComparisonBufferToESDI
235; Buffers_GetFileDialogItemBufferToESDI
236; Parameters:
237; Nothing
238; Returns:
239; ES:DI: Ptr to file buffer
240; Corrupts registers:
241; Nothing
242;--------------------------------------------------------------------
243ALIGN JUMP_ALIGN
244Buffers_GetFlashComparisonBufferToESDI:
245Buffers_GetFileDialogItemBufferToESDI:
246 call Buffers_GetFileBufferToESDI
247 push di
248 mov di, es
249 add di, 1000h ; Third 64k page
250 mov es, di
251 pop di
252 ret
253ALIGN JUMP_ALIGN
254Buffers_GetFileBufferToESDI:
255 mov di, cs
256 add di, 1000h ; Change to next 64k page
257 mov es, di
258 xor di, di ; Ptr now in ES:DI
259 ret
Note: See TracBrowser for help on using the repository browser.