source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/EEPROM.asm@ 608

Last change on this file since 608 was 593, checked in by Tomi Tilli, 6 years ago

Flashing now works again.
Hack to get Windows 95 to work properly (MODULE_WIN95_CMOS_HACK included for 386 builds by default).
Edited makefile to produce large 386 build.
Fixed recovery time for QDI Vision VLB-IDE controllers.
No more warnings with Nasm 2.13.xx and later.
File dialog now properly restores default drive when file selection is cancelled.

File size: 5.2 KB
RevLine 
[57]1; Project name : XTIDE Univeral BIOS Configurator v2
2; Description : Functions for managing EEPROM contents.
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
[65]20; Section containing initialized data
21SECTION .data
22
23ALIGN WORD_ALIGN
24g_rgwEepromTypeToSizeInWords:
25 dw (2<<10) / 2 ; EEPROM_TYPE.2816_2kiB
26 dw (8<<10) / 2
[159]27 dw (8<<10) / 2 ; EEPROM_TYPE.2864_8kiB_MOD
[65]28 dw (32<<10) / 2
29 dw (64<<10) / 2
30
31g_rgwEepromPageToSizeInBytes:
32 dw 1 ; EEPROM_PAGE.1_byte
33 dw 2
34 dw 4
35 dw 8
36 dw 16
37 dw 32
38 dw 64
39
40
41
[57]42; Section containing code
43SECTION .text
44
45;--------------------------------------------------------------------
[68]46; EEPROM_LoadXtideUniversalBiosFromRomToRamBufferAndReturnSizeInDXCX
[57]47; Parameters:
48; Nothing
49; Returns:
[68]50; DX:CX: BIOS size in bytes
[57]51; Corrupts registers:
[592]52; BX, SI, DI
[57]53;--------------------------------------------------------------------
54ALIGN JUMP_ALIGN
[68]55EEPROM_LoadXtideUniversalBiosFromRomToRamBufferAndReturnSizeInDXCX:
[57]56 push es
57
58 call EEPROM_FindXtideUniversalBiosROMtoESDI
[484]59 call EEPROM_GetXtideUniversalBiosSizeFromESDItoDXCX
[57]60 xor si, si ; Load from beginning of ROM
61 call LoadBytesFromRomToRamBuffer
62
63 pop es
64 ret
65
[484]66
[57]67;--------------------------------------------------------------------
[484]68; EEPROM_GetXtideUniversalBiosSizeFromESDItoDXCX
[57]69; Parameters:
[484]70; ES:DI: Ptr to XTIDE Universal BIOS
[57]71; Returns:
[68]72; DX:CX: Bios size in bytes
[57]73; Corrupts registers:
[68]74; Nothing
[57]75;--------------------------------------------------------------------
76ALIGN JUMP_ALIGN
[484]77EEPROM_GetXtideUniversalBiosSizeFromESDItoDXCX:
[68]78 xor dx, dx
[558]79 mov ch, [es:di+ROMVARS.bRomSize]
80 mov cl, dl
81 eSHL_IM ch, 1
[589]82 eRCL_IM dl, 1
[57]83 ret
84
85
86;--------------------------------------------------------------------
87; EEPROM_LoadOldSettingsFromRomToRamBuffer
88; Parameters:
89; Nothing
90; Returns:
[592]91; CF: Cleared if EEPROM was found
92; Set if EEPROM not found
[57]93; Corrupts registers:
[592]94; BX, CX, SI
[57]95;--------------------------------------------------------------------
96ALIGN JUMP_ALIGN
97EEPROM_LoadOldSettingsFromRomToRamBuffer:
98 mov cx, ROMVARS_size - ROMVARS.wFlags ; Number of bytes to load
99 mov si, ROMVARS.wFlags ; Offset where to start loading
100 ; Fall to LoadBytesFromRomToRamBuffer
101
102;--------------------------------------------------------------------
103; LoadBytesFromRomToRamBuffer
104; Parameters:
105; CX: Number of bytes to load from ROM
106; SI: Offset to first byte to load
107; Returns:
[592]108; CF: Cleared if EEPROM was found
109; Set if EEPROM not found
[57]110; Corrupts registers:
[592]111; BX, SI
[57]112;--------------------------------------------------------------------
113ALIGN JUMP_ALIGN
114LoadBytesFromRomToRamBuffer:
115 push es
116 push ds
[523]117 push di
[57]118
119 call EEPROM_FindXtideUniversalBiosROMtoESDI
[592]120 jc SHORT .XtideUniversalBiosNotFound
[57]121 push es
122 pop ds ; DS:SI points to ROM
123
124 call Buffers_GetFileBufferToESDI
125 mov di, si ; ES:DI points to RAM buffer
126
[592]127%ifdef CLD_NEEDED
[57]128 cld
[592]129%endif
130 call Memory_CopyCXbytesFromDSSItoESDI ; Clears CF
[57]131
132.XtideUniversalBiosNotFound:
[523]133 pop di
[57]134 pop ds
135 pop es
136 ret
137
138
139;--------------------------------------------------------------------
140; EEPROM_FindXtideUniversalBiosROMtoESDI
141; Parameters:
142; Nothing
143; Returns:
144; ES:DI: EEPROM segment
[592]145; CF: Cleared if EEPROM was found
146; Set if EEPROM not found
[57]147; Corrupts registers:
[592]148; BX
[57]149;--------------------------------------------------------------------
150ALIGN JUMP_ALIGN
151EEPROM_FindXtideUniversalBiosROMtoESDI:
152 push si
153 push cx
154
155 xor di, di ; Zero DI (offset)
156 mov bx, 0C000h ; First possible ROM segment
157ALIGN JUMP_ALIGN
158.SegmentLoop:
159 mov es, bx ; Possible ROM segment to ES
160 call Buffers_IsXtideUniversalBiosSignatureInESDI
[592]161 je SHORT .RomFound ; If equal, CF=0
[568]162 add bx, 80h ; Increment by 2kB (minimum possible distance from the beginning of one option ROM to the next)
[57]163 jnc SHORT .SegmentLoop ; Loop until segment overflows
164.RomFound:
165 pop cx
166 pop si
167 ret
168
169
170;--------------------------------------------------------------------
[65]171; EEPROM_LoadFromRomToRamComparisonBuffer
[57]172; Parameters:
173; Nothing
174; Returns:
[65]175; Nothing
[57]176; Corrupts registers:
[65]177; BX, CX, SI, DI
[57]178;--------------------------------------------------------------------
179ALIGN JUMP_ALIGN
[65]180EEPROM_LoadFromRomToRamComparisonBuffer:
181 push es
182 push ds
183
184 mov ds, [cs:g_cfgVars+CFGVARS.wEepromSegment]
185 xor si, si
186 call Buffers_GetFlashComparisonBufferToESDI
[293]187 eMOVZX bx, [cs:g_cfgVars+CFGVARS.bEepromType]
[592]188%ifdef CLD_NEEDED
[65]189 cld
[592]190%endif
[593]191 mov cx, [cs:bx+g_rgwEepromTypeToSizeInWords]
[65]192 rep movsw
193
194 pop ds
195 pop es
[57]196 ret
Note: See TracBrowser for help on using the repository browser.