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

Last change on this file since 65 was 65, checked in by aitotat, 13 years ago

Changes to XTIDE Universal BIOS Configurator v2:

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