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

Last change on this file since 580 was 567, checked in by krille_n_@…, 10 years ago

Changes:

  • Renamed MODULE_FEATURE_SETS to MODULE_POWER_MANAGEMENT.
  • Renamed MODULE_VERY_LATE_INITIALIZATION to MODULE_VERY_LATE_INIT and removed it from the official builds.
  • Removed the code that skips detection of slave drives on XT-CF controllers since slave drives can be used with Lo-tech ISA CompactFlash boards.
  • Added autodetection of the SVC ADP50L controller to XTIDECFG.
  • The autodetection of XT-CF controllers now requires MODULE_8BIT_IDE_ADVANCED in the loaded BIOS.
  • Fixed a bug in XTIDECFG from r502 where the "Base (cmd block) address" menu option would be displayed when a serial device was selected as the IDE controller.
  • XTIDECFG would display the "Enable interrupt" menu option for the XTIDE r1 but not for the XTIDE r2. It's now displayed for both controller types.
  • Disabled the "Internal Write Cache" menu option in the Master/Slave Drive menus for serial device type drives.
  • Optimizations and other fixes.
File size: 8.7 KB
RevLine 
[57]1; Project name : XTIDE Universal BIOS Configurator v2
2; Description : Functions for accessing file and flash buffers.
3
[376]4;
[526]5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]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.
[526]12;
[376]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
[526]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[526]18;
[376]19
[57]20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; Buffers_Clear
25; Parameters:
26; Nothing
27; Returns:
28; Nothing
29; Corrupts registers:
30; AX, CX, DI, ES
31;--------------------------------------------------------------------
32ALIGN JUMP_ALIGN
33Buffers_Clear:
34 call Buffers_GetFileBufferToESDI
35 mov cx, ROMVARS_size
36 jmp Memory_ZeroESDIwithSizeInCX
37
38
39;--------------------------------------------------------------------
40; Buffers_IsXtideUniversalBiosLoaded
41; Parameters:
42; Nothing
43; Returns:
44; ZF: Set if supported version of XTIDE Universal BIOS is loaded
[567]45; Cleared if no file or some other file is loaded
[57]46; Corrupts registers:
47; CX, SI, DI, ES
48;--------------------------------------------------------------------
49ALIGN JUMP_ALIGN
50Buffers_IsXtideUniversalBiosLoaded:
51 test WORD [cs:g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_FILELOADED | FLG_CFGVARS_ROMLOADED
[567]52 jnz SHORT .FileOrBiosLoaded
[57]53 or cl, 1 ; Clear ZF
54 ret
55
[567]56.FileOrBiosLoaded:
57 call Buffers_GetFileBufferToESDI
58 ; Fall to Buffers_IsXtideUniversalBiosSignatureInESDI
[57]59
[567]60
[57]61;--------------------------------------------------------------------
62; Buffers_IsXtideUniversalBiosSignatureInESDI
63; Parameters:
64; ES:DI: Ptr to possible XTIDE Universal BIOS location
65; Returns:
66; ZF: Set if supported version of XTIDE Universal BIOS is loaded
[567]67; Cleared if no file or some other file is loaded
[57]68; Corrupts registers:
69; CX, SI
70;--------------------------------------------------------------------
71ALIGN JUMP_ALIGN
72Buffers_IsXtideUniversalBiosSignatureInESDI:
73 push di
74
75 mov si, g_szXtideUniversalBiosSignature
76 add di, BYTE ROMVARS.rgbSign
77 mov cx, XTIDE_SIGNATURE_LENGTH / 2
78 cld
79 eSEG_STR repe, cs, cmpsw
80
81 pop di
82 ret
83
84
85;--------------------------------------------------------------------
[457]86; Buffers_IsXTbuildLoaded
87; Parameters:
88; Nothing
89; Returns:
90; ZF: Set if XT or XT+ build is loaded
91; Cleared if some other (AT, 386) build is loaded
92; Corrupts registers:
93; DI, ES
94;--------------------------------------------------------------------
95ALIGN JUMP_ALIGN
96Buffers_IsXTbuildLoaded:
97%strlen BUILD_TYPE_OFFSET TITLE_STRING_START
98 call Buffers_GetFileBufferToESDI
99 cmp WORD [es:di+ROMVARS.szTitle+BUILD_TYPE_OFFSET+1], 'XT' ; +1 is for '('
100 ret
101%undef BUILD_TYPE_OFFSET
102
103
104;--------------------------------------------------------------------
[145]105; Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration
[57]106; Parameters:
107; AX: EEPROM source (FLG_CFGVARS_FILELOADED or FLG_CFGVARS_ROMLOADED)
[68]108; DX:CX: EEPROM size in bytes
[57]109; Returns:
110; Nothing
111; Corrupts registers:
[68]112; AX, CX, DX
[57]113;--------------------------------------------------------------------
114ALIGN JUMP_ALIGN
[68]115Buffers_NewBiosWithSizeInDXCXandSourceInAXhasBeenLoadedForConfiguration:
[57]116 and WORD [cs:g_cfgVars+CFGVARS.wFlags], ~(FLG_CFGVARS_FILELOADED | FLG_CFGVARS_ROMLOADED | FLG_CFGVARS_UNSAVED)
117 or WORD [cs:g_cfgVars+CFGVARS.wFlags], ax
[68]118 shr dx, 1
119 rcr cx, 1
[144]120 adc cx, BYTE 0 ; Round up to next WORD
[65]121 mov [cs:g_cfgVars+CFGVARS.wImageSizeInWords], cx
[57]122 ret
123
124
125;--------------------------------------------------------------------
126; Buffers_SetUnsavedChanges
127; Buffers_ClearUnsavedChanges
128; Parameters:
129; SS:BP: Menu handle
130; Returns:
131; Nothing
132; Corrupts registers:
133; Nothing
134;--------------------------------------------------------------------
135ALIGN JUMP_ALIGN
136Buffers_SetUnsavedChanges:
[371]137 or WORD [cs:g_cfgVars+CFGVARS.wFlags], FLG_CFGVARS_UNSAVED
[57]138 ret
139
140ALIGN JUMP_ALIGN
141Buffers_ClearUnsavedChanges:
[371]142 and WORD [cs:g_cfgVars+CFGVARS.wFlags], ~FLG_CFGVARS_UNSAVED
[57]143 ret
144
145
146;--------------------------------------------------------------------
[59]147; Buffers_SaveChangesIfFileLoaded
148; Parameters:
149; Nothing
150; Returns:
151; Nothing
152; Corrupts registers:
153; AX, BX, CX, SI, DI
154;--------------------------------------------------------------------
155ALIGN JUMP_ALIGN
156Buffers_SaveChangesIfFileLoaded:
157 mov ax, [cs:g_cfgVars+CFGVARS.wFlags]
158 and ax, BYTE (FLG_CFGVARS_FILELOADED | FLG_CFGVARS_UNSAVED)
159 cmp ax, BYTE (FLG_CFGVARS_FILELOADED | FLG_CFGVARS_UNSAVED)
160 jne SHORT .NothingToSave
161 call Dialogs_DisplaySaveChangesDialog
162 jnz SHORT .NothingToSave
163 jmp BiosFile_SaveUnsavedChanges
164ALIGN JUMP_ALIGN
165.NothingToSave:
166 ret
167
168
169;--------------------------------------------------------------------
[65]170; Buffers_AppendZeroesIfNeeded
171; Parameters:
172; Nothing
173; Returns:
174; Nothing
175; Corrupts registers:
176; AX, CX, DI
177;--------------------------------------------------------------------
178ALIGN JUMP_ALIGN
179Buffers_AppendZeroesIfNeeded:
180 push es
181
[293]182 eMOVZX di, [cs:g_cfgVars+CFGVARS.bEepromType]
[65]183 mov cx, [cs:di+g_rgwEepromTypeToSizeInWords]
184 sub cx, [cs:g_cfgVars+CFGVARS.wImageSizeInWords] ; CX = WORDs to append
[567]185 jbe SHORT .NoNeedToAppendZeroes
[65]186
187 call Buffers_GetFileBufferToESDI
188 mov ax, [cs:g_cfgVars+CFGVARS.wImageSizeInWords]
189 shl ax, 1
190 add di, ax ; ES:DI now point first unused image byte
191 xor ax, ax
192 cld
193 rep stosw
194ALIGN JUMP_ALIGN
195.NoNeedToAppendZeroes:
196 pop es
197 ret
198
199
200;--------------------------------------------------------------------
[57]201; Buffers_GenerateChecksum
202; Parameters:
203; Nothing
204; Returns:
205; Nothing
206; Corrupts registers:
207; AX, BX, CX, DI
208;--------------------------------------------------------------------
209ALIGN JUMP_ALIGN
210Buffers_GenerateChecksum:
211 push es
[484]212 push dx
[57]213
214 call Buffers_GetFileBufferToESDI
[484]215 call EEPROM_GetXtideUniversalBiosSizeFromESDItoDXCX
[57]216 dec cx ; Leave space for checksum byte
217 xor ax, ax
218ALIGN JUMP_ALIGN
219.SumNextByte:
220 add al, [es:di]
221 inc di
222 loop .SumNextByte
223 neg al
224 mov [es:di], al
225
[484]226 pop dx
[57]227 pop es
228 ret
229
230
231;--------------------------------------------------------------------
[59]232; Buffers_GetRomvarsFlagsToAX
233; Parameters:
234; Nothing
235; Returns:
236; AX: ROMVARS.wFlags
237; Corrupts registers:
238; BX
239;--------------------------------------------------------------------
240ALIGN JUMP_ALIGN
241Buffers_GetRomvarsFlagsToAX:
242 mov bx, ROMVARS.wFlags
243 ; Fall to Buffers_GetRomvarsValueToAXfromOffsetInBX
244
245;--------------------------------------------------------------------
[57]246; Buffers_GetRomvarsValueToAXfromOffsetInBX
247; Parameters:
248; BX: ROMVARS offset
249; Returns:
250; AX: Value
251; Corrupts registers:
252; Nothing
253;--------------------------------------------------------------------
254ALIGN JUMP_ALIGN
255Buffers_GetRomvarsValueToAXfromOffsetInBX:
256 push es
257 push di
258 call Buffers_GetFileBufferToESDI
259 mov ax, [es:bx+di]
260 pop di
261 pop es
262 ret
263
264
265;--------------------------------------------------------------------
[204]266; Buffers_GetIdeControllerCountToCX
267; Parameters:
268; SS:BP: Menu handle
269; Returns:
270; CX: Number of IDE controllers to configure
271; ES:DI: Ptr to file buffer
272; Corrupts registers:
273; AX
274;--------------------------------------------------------------------
275ALIGN JUMP_ALIGN
276Buffers_GetIdeControllerCountToCX:
277 call Buffers_GetFileBufferToESDI
278 mov al, [es:di+ROMVARS.bIdeCnt]
279
280 ; Limit controller count for lite mode
281 test BYTE [es:di+ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
282 jnz SHORT .ReturnControllerCountInCX
283 MIN_U al, MAX_LITE_MODE_CONTROLLERS
284
285.ReturnControllerCountInCX:
286 cbw ; A maximum of 127 controllers should be sufficient
287 xchg cx, ax
288 ret
289
290
291;--------------------------------------------------------------------
[57]292; Buffers_GetFileBufferToESDI
[65]293; Buffers_GetFlashComparisonBufferToESDI
[57]294; Buffers_GetFileDialogItemBufferToESDI
295; Parameters:
296; Nothing
297; Returns:
298; ES:DI: Ptr to file buffer
299; Corrupts registers:
300; Nothing
301;--------------------------------------------------------------------
302ALIGN JUMP_ALIGN
[65]303Buffers_GetFlashComparisonBufferToESDI:
[57]304Buffers_GetFileDialogItemBufferToESDI:
[59]305 call Buffers_GetFileBufferToESDI
306 push di
307 mov di, es
308 add di, 1000h ; Third 64k page
309 mov es, di
310 pop di
311 ret
[65]312ALIGN JUMP_ALIGN
[57]313Buffers_GetFileBufferToESDI:
314 mov di, cs
315 add di, 1000h ; Change to next 64k page
316 mov es, di
317 xor di, di ; Ptr now in ES:DI
318 ret
Note: See TracBrowser for help on using the repository browser.