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

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

Changes to Configurator v2:

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