Rev 1231 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1231 | Rev 2288 | ||
---|---|---|---|
1 | ; Copyright (c) 2009, |
- | |
2 | ; All rights reserved. |
- | |
3 | ; |
- | |
4 | ; Redistribution and use in source and binary forms, with or without |
- | |
5 | ; modification, are permitted provided that the following conditions are met: |
- | |
6 | ; * Redistributions of source code must retain the above copyright |
- | |
7 | ; notice, this list of conditions and the following disclaimer. |
- | |
8 | ; * Redistributions in binary form must reproduce the above copyright |
- | |
9 | ; notice, this list of conditions and the following disclaimer in the |
- | |
10 | ; documentation and/or other materials provided with the distribution. |
- | |
11 | ; * Neither the name of the |
- | |
12 | ; names of its contributors may be used to endorse or promote products |
- | |
13 | ; derived from this software without specific prior written permission. |
- | |
14 | ; |
- | |
15 | ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov nickname |
- | |
16 | ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
- | |
17 | ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
- | |
18 | ; DISCLAIMED. IN NO EVENT SHALL |
- | |
19 | ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
- | |
20 | ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
- | |
21 | ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
- | |
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- | |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
- | |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- | |
25 | ;***************************************************************************** |
- | |
26 | - | ||
27 | ; â ýòîé ñåêöèè èäåò ðàçáîð ïàðàìåòðîâ óêàçàòåëü íà ñåêöèþ õðàíèòüñÿ â point_default |
- | |
28 | ;òèïû îøèáîê ïðè îáðàáîòêå ìàêðîñà |
- | |
29 | ;Ìàêðîñ RamdiskFS |
- | |
30 | ;/îïðåäåëåíèå ôëàãîâ â çàïèñè êîðíåâîé äèðåêòîðèè |
- | |
31 | ATTR_READ_ONLY equ 0x01 |
- | |
32 | ATTR_HIDDEN equ 0x02 |
- | |
33 | ATTR_SYSTEM equ 0x04 |
- | |
34 | ATTR_VOLUME_ID equ 0x08 |
- | |
35 | ATTR_DIRECTORY equ 0x10 |
- | |
36 | ATTR_ARCHIVE equ 0x20 |
- | |
37 | - | ||
38 | - | ||
39 | - | ||
40 | show_error_1 equ 0x1 ;êîí÷èëèñü äàííûå - íå çàïëàíèðîâàííûé êîíåö ñåêöèè |
- | |
41 | show_error_2 equ 0x2 ;íåò çàâåðøàþùåãî ñèìâîëà â ðàçìåðå ðàì äèñêà. |
- | |
42 | show_error_3 equ 0x4 ; ðàì äèñê áóäåò èìåòü ðàçìåð =64 êá. |
- | |
43 | show_error_4 equ 0x8 ; |
- | |
44 | - | ||
45 | macro use_parse_def_sect |
- | |
46 | { |
- | |
47 | mov di,point_default |
- | |
48 | push ini_data_ |
- | |
49 | pop es |
- | |
50 | mov si,point_to_point_def |
- | |
51 | sub si,2 |
- | |
52 | mov cx,[si] ;çàãðóçèì óêàçàòåëü íàñëåäóþùèþ ñåêöèþ |
- | |
53 | - | ||
54 | xor ax,ax ;îáíóëèì àx äëÿ î÷èñòêè ôëàãîâ |
- | |
55 | - | ||
56 | sub cx,di ;âîò òåïåðü èìååì èñòèíûé ðàçìåð |
- | |
57 | mov save_cx_d,cx ;ñîõðàíèì çíà÷åíèå cx ñâîåé ïåðåìåííîé |
- | |
58 | ;îáíóëèì ïåðåìåííóþ ôëàãîâ, ýòî íåîáõîäèìî, äëÿ òîãî, ÷òî áû èçáåæàòü îáðàáîòêó ïîâòîðÿþùèõñÿ çíà÷åíèé |
- | |
59 | - | ||
60 | mov status_flag,ax |
- | |
61 | ;;;; |
- | |
62 | ;ÂÕîä â îáðàáîòêó ïàðñèíãà çíà÷åíèé ñåêöèé. es:di - óêàçàòåëü íà íà÷àëî ñåêöèè cx ðàçìåð ñåêöèè äîñòóïíîé äëÿ ïàðñèíãà |
- | |
63 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
64 | ;ñîãëàøåíèå íå ðàçðóøàåì bp, es, cs, sp |
- | |
65 | ;use_Loader_Image ;çàãðóçèòü îáðàç âûøå 1 ìá |
- | |
66 | use_RamdiskFS |
- | |
67 | ;ïðîâåðÿåòñÿ ñàìûé ïîñëåäíèé. |
- | |
68 | use_LoaderModule ;îñîáåííîñòü - ïåðåäàåò óïðàâëåíèå íà çàãðóæåííûé ìîäóëü. |
- | |
69 | } |
- | |
70 | - | ||
71 | macro use_LoaderModule |
- | |
72 | ;êàê âàðèàíò ñåé÷àñ èñïîëüçóåòñÿ ìîäåëü, ïðè çàãðóçêå ìîäóëÿ íà íåãî ïåðåäàåòñÿ óïðàâëåíèå, ðåøåíèå âðåìåíîå |
- | |
73 | ;óïðàâëåíèå áóäåò ïåðåäàâàòüñÿ òîëüêî ïîñëå îáðàáîòêè âñåé ñåêöèè |
- | |
74 | { |
- | |
75 | local .found_end_str |
- | |
76 | - | ||
77 | mov di,point_default ;restore value |
- | |
78 | mov cx,save_cx_d |
- | |
79 | ;îáðàáîòêà êîíñòðóêöèè òèïà LoaderModule=kord/kolibri.ldm |
- | |
80 | .start_p_LM: |
- | |
81 | call get_firs_sym ;get first symbol on new line |
- | |
82 | test cx,cx |
- | |
83 | jz ._afterLoaderModule ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
84 | cmp al,'L' |
- | |
85 | jnz .start_p_LM |
- | |
86 | ;ïðîâåðêà íà çíà÷åíèå LoaderModule |
- | |
87 | ; parse_LoaderModule |
- | |
88 | mov bx,cx |
- | |
89 | mov ax,di |
- | |
90 | - | ||
91 | mov si,parse_LoaderModule |
- | |
92 | mov cx,parse_LoaderModule_e - parse_LoaderModule |
- | |
93 | repe cmpsb |
- | |
94 | jnz .rest_value_loop_LM ;is not compare |
- | |
95 | - | ||
96 | sub bx,parse_LoaderModule_e - parse_LoaderModule ;correct cx |
- | |
97 | add bx,cx |
- | |
98 | mov cx,bx |
- | |
99 | - | ||
100 | test status_flag,flag_found_LM ;îöåíêà ôëàãîâ |
- | |
101 | jz .correct_is_not_set_LM |
- | |
102 | - | ||
103 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
104 | ; call printplain |
- | |
105 | ; jmp .get_next_str |
- | |
106 | - | ||
107 | .correct_is_not_set_LM: |
- | |
108 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
109 | repe scasb |
- | |
110 | jcxz .rest_value_loop_LM ;not found param timeout |
- | |
111 | - | ||
112 | cmp ah,byte [es:di-1] ;find '=' |
- | |
113 | jnz .rest_value_loop_LM |
- | |
114 | - | ||
115 | repe scasb ;cut ' ' |
- | |
116 | inc cx |
- | |
117 | dec di |
- | |
118 | ;di óêàçûâàåò íà íà÷àëî áëîêà èíôîðìàöèè, â cx äëèííà äî êîíöà ñåêöèè. |
- | |
119 | ;ïîñëå çàãðóçêè çàíîñèòüñÿ çíà÷åíèå çàíÿòîé ïàìÿòè. |
- | |
120 | ;äëÿ òîãî ÷òî áû çàãðóçèòü ìîäóëü, âîñïîëüçóåìñÿ callback ñåðâèñîì |
- | |
121 | ;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0 |
- | |
122 | ;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà LoaderModule = kord/kernel.loader |
- | |
123 | ;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'kord/kernel.loader',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
- | |
124 | ;ñîõðàíèëè ïåâûå 2 word |
- | |
125 | push dword [es:di-6] |
- | |
126 | lea si,[di-6] |
- | |
127 | - | ||
128 | push word [es:di-2] |
- | |
129 | xor ax,ax |
- | |
130 | mov word [es:di-6],ax ;âíîñèì íóæíûå çíà÷åíèÿ |
- | |
131 | ;info_real_mode_size ðàçìåð è óêàçàòåëü íà îáëàñòü â êîòîðóþ ìîæíî çàãðóçèòüñÿ |
- | |
132 | mov ax,info_real_mode_size ;0x3000 ;ñëåäóþùèé ñåãìåíò çà äàííûìè |
- | |
133 | - | ||
134 | - | ||
135 | mov word [es:di-4],ax |
- | |
136 | mov word [es:di-2],16 ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ñ÷èòàåì |
- | |
137 | ;;;;;; ïîèñê êîíöà ñòðî÷êè |
- | |
138 | @@: mov al,byte [es:di] |
- | |
139 | cmp al,' ' |
- | |
140 | jz .found_end_str |
- | |
141 | cmp al,0xa |
- | |
142 | jz .found_end_str |
- | |
143 | cmp al,0xd |
- | |
144 | jz .found_end_str |
- | |
145 | inc di |
- | |
146 | dec cx |
- | |
147 | jnz @b |
- | |
148 | ;;;not found äîïóñòèì,÷òî ýòî êîíåö ôàéëà è îí íå èìååò ïðèâû÷íîãî çàâåðåøíèÿ ñòðîêè |
- | |
149 | .found_end_str: |
- | |
150 | - | ||
151 | push word [es:di] |
- | |
152 | xor ax,ax |
- | |
153 | mov word [es:di],ax |
- | |
154 | ; xor ax,ax ; function 1 - read file |
- | |
155 | mov di,si ;file_data |
- | |
156 | inc ax |
- | |
157 | push si |
- | |
158 | push es |
- | |
159 | - | ||
160 | push es |
- | |
161 | pop ds |
- | |
162 | push cs |
- | |
163 | pop es |
- | |
164 | - | ||
165 | call far dword [es:loader_callback] |
- | |
166 | - | ||
167 | push cs |
- | |
168 | pop ds |
- | |
169 | - | ||
170 | pop es |
- | |
171 | pop si |
- | |
172 | - | ||
173 | test bx,bx |
- | |
174 | jnz .error_LM |
- | |
175 | - | ||
176 | - | ||
177 | jmp far dword [es:si] |
- | |
178 | - | ||
179 | - | ||
180 | .error_LM: |
- | |
181 | call error.LoaderModule |
- | |
182 | .rest_value_loop_LM: |
- | |
183 | mov di,ax |
- | |
184 | mov cx,bx |
- | |
185 | jmp .start_p_LM |
- | |
186 | - | ||
187 | ._afterLoaderModule: |
- | |
188 | } |
- | |
189 | - | ||
190 | macro use_RamdiskFS |
- | |
191 | ; ôîðìèðîâàíèå ðàì äèñêà, + îáðàáîòêà âñåãî ñâÿçàííîãî. |
- | |
192 | { |
- | |
193 | if DEBUG |
- | |
194 | local ._not_memory_in_sys |
- | |
195 | ;//////// clear window |
- | |
196 | mov ax,3 |
- | |
197 | int 0x10 |
- | |
198 | ;\\\\\\\\\ clear window is end |
- | |
199 | mov si,ramdiskFS_st |
- | |
200 | call printplain |
- | |
201 | end if |
- | |
202 | ; îáíóëèì ðåãèñòð ñîñòîÿíèÿ îøèáîê |
- | |
203 | xor ax,ax |
- | |
204 | mov show_errors_sect,ax |
- | |
205 | use_free_memory ; óçíàåì êàêîãî îáúåìà ó íàñ äîñòóïíà ïàìÿòü. çíà÷åíèå âîçàðàùàåòñÿ â ax |
- | |
206 | ;óçíàåì ñêîëüêî ó íàñ åñòü ïàìÿòè è ñìîæåì ëè ìû ñôîðìèðîâàòü íóæíîãî ðàçìåðà ðàì äèñê. |
- | |
207 | use_RamdiskSize ;çíà÷åíèå âîçâðàùàåòñÿ â bx |
- | |
208 | cmp free_ad_memory,bx ; ðàçìåðíîñòü â êá. |
- | |
209 | jbe ._not_memory_in_sys |
- | |
210 | movzx eax,bx |
- | |
211 | shl eax,10 ;*1024 = get size in byte |
- | |
212 | mov save_ramdisksize,eax ; ñîðõàíèì ðàçìåð â byte |
- | |
213 | - | ||
214 | get_type_FS ;ïîëó÷èì òèï ôàéëîâîé ñèñòåìû + ñîçäàäèì åå |
- | |
215 | - | ||
216 | - | ||
217 | ._not_memory_in_sys: |
- | |
218 | - | ||
219 | if DEBUG |
- | |
220 | ;pause |
- | |
221 | xor ax,ax |
- | |
222 | int 0x16 |
- | |
223 | end if |
- | |
224 | } |
- | |
225 | macro use_RamdiskSize |
- | |
226 | { |
- | |
227 | local .start_p_RS |
- | |
228 | local .correct_is_not_set_RS |
- | |
229 | local .CS |
- | |
230 | local .correct_val_RS |
- | |
231 | local .correct_size_RS |
- | |
232 | local .rest_value_loop_RS |
- | |
233 | local .end_get_RS_ERROR_1 |
- | |
234 | local .end_get_RS_ERROR_2 |
- | |
235 | local ._end_parse_RS |
- | |
236 | ;îáðàáàòûâàåòñÿ ðàçìåð ôîðìèðóåìîãî ðàì äèñêà |
- | |
237 | ;çàãðóçèì íà÷àëî ñåêöèè, ò.ê. áóäåì ïðîñìàòðèâàòü ñ íà÷àëà è âñþ ñåêöèþ |
- | |
238 | mov di,point_default ;restore value |
- | |
239 | mov cx,save_cx_d |
- | |
240 | .start_p_RS: |
- | |
241 | call get_firs_sym ;get first symbol on new line |
- | |
242 | test cx,cx |
- | |
243 | jz ._end_parse_RS ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
244 | cmp al,'R' |
- | |
245 | jnz .start_p_RS |
- | |
246 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
- | |
247 | ; parse_RamdiskSize |
- | |
248 | mov bx,cx |
- | |
249 | mov ax,di |
- | |
250 | - | ||
251 | mov si,parse_RamdiskSize |
- | |
252 | mov cx,parse_RamdiskSize_e - parse_RamdiskSize |
- | |
253 | repe cmpsb |
- | |
254 | jnz .rest_value_loop_RS ;is not compare |
- | |
255 | - | ||
256 | sub bx,parse_RamdiskSize_e - parse_RamdiskSize ;correct cx |
- | |
257 | add bx,cx |
- | |
258 | mov cx,bx |
- | |
259 | - | ||
260 | test status_flag,flag_found_RS ;îöåíêà ôëàãîâ |
- | |
261 | jz .correct_is_not_set_RS |
- | |
262 | - | ||
263 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
264 | ; call printplain |
- | |
265 | ; jmp .get_next_str |
- | |
266 | - | ||
267 | .correct_is_not_set_RS: |
- | |
268 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
269 | repe scasb |
- | |
270 | jcxz .end_get_RS_ERROR_1 ;not found param |
- | |
271 | - | ||
272 | cmp ah,byte [es:di-1] ;find '=' |
- | |
273 | jnz .start_p_RS ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
- | |
274 | - | ||
275 | repe scasb ;cut ' ' |
- | |
276 | inc cx |
- | |
277 | dec di |
- | |
278 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
279 | ;Òóò íóæíî ïðåîáðàçîâûâàòü ñòðî÷êó â öèôðîâîå çíà÷åíèå. |
- | |
280 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
281 | xor bx,bx |
- | |
282 | mov cx,5 |
- | |
283 | @@: mov al,byte [es:di] |
- | |
284 | cmp al,'0' |
- | |
285 | jb .CS |
- | |
286 | cmp al,'9' |
- | |
287 | jbe .correct_val_RS |
- | |
288 | .CS: |
- | |
289 | cmp al,'K' |
- | |
290 | jz .correct_size_RS |
- | |
291 | jmp .end_get_RS_ERROR_2 |
- | |
292 | .correct_val_RS: |
- | |
293 | imul bx,10 |
- | |
294 | xor al,0x30 |
- | |
295 | add bl,al |
- | |
296 | inc di |
- | |
297 | loop @b |
- | |
298 | - | ||
299 | .correct_size_RS: |
- | |
300 | ;âîçìîæåí 1 âàðèàíò, êîãäà ðàçìåð çàäàí â K êèëëîáàéòàõ |
- | |
301 | ;âíóòðåííûé ôîðìàò äàííûõ ýòî êîë-âî çàïðîùåíîé ïàìÿòè â êá. |
- | |
302 | test bx,bx |
- | |
303 | jnz @f ;åñëè çíà÷åíèå îòëè÷íî îò 0 |
- | |
304 | ;;;;;ñîîáùåíèå îá îøèáêå, ðàçìåð "íàéäåíîãî" áëîêà =0 ìèíèìàëüíî ìû äîëæíû |
- | |
305 | ;óñòàíîâèòü 64 êá ðàçìåð ðàì äèñêà. |
- | |
306 | or show_errors_sect,show_error_3 |
- | |
307 | mov bx,64 |
- | |
308 | @@: |
- | |
309 | jmp ._end_parse_RS |
- | |
310 | - | ||
311 | - | ||
312 | .rest_value_loop_RS: |
- | |
313 | mov di,ax |
- | |
314 | mov cx,bx |
- | |
315 | jmp .start_p_RS |
- | |
316 | - | ||
317 | - | ||
318 | - | ||
319 | .end_get_RS_ERROR_1: |
- | |
320 | ;ñîîáùåíèå îá îøèáêå - äàííûé ó÷àñòîê êîäà íå áûë êîððåêòíî îáðàáîòàí :( |
- | |
321 | or show_errors_sect,show_error_1 |
- | |
322 | jmp ._end_parse_RS |
- | |
323 | .end_get_RS_ERROR_2: |
- | |
324 | or show_errors_sect,show_error_2 |
- | |
325 | - | ||
326 | ._end_parse_RS: |
- | |
327 | if DEBUG |
- | |
328 | pusha |
- | |
329 | movzx eax,bx |
- | |
330 | mov cx,0x0a |
- | |
331 | mov di,RamdiskSize_msg |
- | |
332 | mov dword[ds:di],' ' |
- | |
333 | mov word [ds:di+4],' ' |
- | |
334 | call decode |
- | |
335 | ;Show size |
- | |
336 | mov si,RamdiskSize_msg |
- | |
337 | call printplain |
- | |
338 | - | ||
339 | popa |
- | |
340 | end if |
- | |
341 | - | ||
342 | } |
- | |
343 | - | ||
344 | macro use_free_memory |
- | |
345 | { |
- | |
346 | local _support_function_use_free_memory |
- | |
347 | ;ìàêðîñ äëÿ ïîëó÷åíèÿ îáùåãî ÷èñëà äîñòóïíîé ïàìÿòè â êá, äëÿ ôîðìèðîâàíèÿ ðàì äèñêà çà ïðåäåëàìè 1 ìá. |
- | |
348 | ;èñïîëüçóåòñÿ 0õ88 ôóíêöèÿ 0õ15 ïðåðûâàíèÿ |
- | |
349 | ; åñëè ïîääåðæèâàåòñÿ ôóíêöèÿ, òî â ax çíà÷åíèå â êá, åñëè íåò, òî â ax=0 |
- | |
350 | mov ah,0x88 ;ah,0x88 |
- | |
351 | int 0x15 |
- | |
352 | jnc ._support_function_use_free_memory |
- | |
353 | xor ax,ax |
- | |
354 | ;âîçâðàùàåò â ax ÷èñëî â êá |
- | |
355 | ._support_function_use_free_memory: |
- | |
356 | mov free_ad_memory,ax ; åñëè íå ïîääåðæèâàåòñÿ áèîñîì, òî â ax=0 |
- | |
357 | if DEBUG |
- | |
358 | pushad |
- | |
359 | movzx eax,ax |
- | |
360 | mov cx,0x0a |
- | |
361 | mov di,free_memory_msg |
- | |
362 | mov dword[ds:di],' ' |
- | |
363 | mov word [ds:di+4],' ' |
- | |
364 | call decode |
- | |
365 | ;Show size |
- | |
366 | mov si,free_memory_msg |
- | |
367 | call printplain |
- | |
368 | - | ||
369 | popad |
- | |
370 | end if |
- | |
371 | - | ||
372 | - | ||
373 | - | ||
374 | - | ||
375 | } |
- | |
376 | macro show_ERRORS |
- | |
377 | { |
- | |
378 | - | ||
379 | } |
- | |
380 | - | ||
381 | macro get_type_FS ;ïîëó÷èòü è ñîçäàòü îáðàç äëÿ çàäàííîé RFS. |
- | |
382 | { |
- | |
383 | mov di,point_default ;restore value |
- | |
384 | mov cx,save_cx_d |
- | |
385 | .start_g_tpe_RFS: |
- | |
386 | call get_firs_sym ;get first symbol on new line |
- | |
387 | test cx,cx |
- | |
388 | jz ._end_parse_FRS ;._end_get_type_RFS ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
389 | cmp al,'R' |
- | |
390 | jnz .start_g_tpe_RFS |
- | |
391 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
- | |
392 | ; parse_RamdiskSize |
- | |
393 | mov bx,cx |
- | |
394 | mov ax,di |
- | |
395 | - | ||
396 | mov si,parse_RamdiskFS |
- | |
397 | mov cx,parse_RamdiskFS_e - parse_RamdiskFS |
- | |
398 | repe cmpsb |
- | |
399 | jnz .start_g_tpe_RFS_rest_v ;is not compare |
- | |
400 | - | ||
401 | sub bx,parse_RamdiskFS_e - parse_RamdiskFS ;correct cx |
- | |
402 | add bx,cx |
- | |
403 | mov cx,bx |
- | |
404 | - | ||
405 | test status_flag,flag_found_GTRFMS ;îöåíêà ôëàãîâ |
- | |
406 | jz .correct_is_not_set_FRS |
- | |
407 | - | ||
408 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
409 | ; call printplain |
- | |
410 | ; jmp .get_next_str |
- | |
411 | - | ||
412 | .correct_is_not_set_FRS: |
- | |
413 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
414 | repe scasb |
- | |
415 | test cx,cx |
- | |
416 | jz .end_get_FRS_ERROR_1 ;not found param |
- | |
417 | - | ||
418 | cmp ah,byte [es:di-1] ;find '=' |
- | |
419 | jnz .start_g_tpe_RFS ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
- | |
420 | - | ||
421 | repe scasb ;cut ' ' |
- | |
422 | inc cx |
- | |
423 | dec di |
- | |
424 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
425 | ;Òóò íóæíî ïðåîáðàçîâûâàòü ñòðî÷êó â öèôðîâîå çíà÷åíèå. |
- | |
426 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
427 | mov bx,cx |
- | |
428 | mov ax,di |
- | |
429 | - | ||
430 | mov si,parse_RFS_FAT |
- | |
431 | mov cx,parse_RFS_FAT_e - parse_RFS_FAT |
- | |
432 | repe cmpsb |
- | |
433 | jnz .krfs_cmp ;is not compare |
- | |
434 | - | ||
435 | make_FAT_RamFS ;ñäåëàòü |
- | |
436 | - | ||
437 | if DEBUG |
- | |
438 | pusha |
- | |
439 | mov si,make_fat12_RFS_msg |
- | |
440 | call printplain |
- | |
441 | popa |
- | |
442 | end if |
- | |
443 | jmp ._end_parse_FRS |
- | |
444 | - | ||
445 | .krfs_cmp: |
- | |
446 | mov cx,bx |
- | |
447 | mov di,ax |
- | |
448 | - | ||
449 | mov si,parse_RFS_KRFS |
- | |
450 | mov cx,parse_RFS_KRFS_e - parse_RFS_KRFS |
- | |
451 | repe cmpsb |
- | |
452 | ; jnz @f ;is not compare |
- | |
453 | - | ||
454 | jmp ._end_parse_FRS |
- | |
455 | - | ||
456 | - | ||
457 | .start_g_tpe_RFS_rest_v: |
- | |
458 | mov cx,bx |
- | |
459 | mov di,ax |
- | |
460 | jmp .start_g_tpe_RFS |
- | |
461 | - | ||
462 | - | ||
463 | - | ||
464 | .end_get_FRS_ERROR_1: |
- | |
465 | ;ñîîáùåíèå îá îøèáêå - äàííûé ó÷àñòîê êîäà íå áûë êîððåêòíî îáðàáîòàí :( |
- | |
466 | or show_errors_sect,show_error_1 |
- | |
467 | jmp ._end_parse_FRS |
- | |
468 | .end_get_FRS_ERROR_2: |
- | |
469 | or show_errors_sect,show_error_2 |
- | |
470 | - | ||
471 | ._end_parse_FRS: |
- | |
472 | if DEBUG |
- | |
473 | pusha |
- | |
474 | mov si,get_type_FS_msg |
- | |
475 | call printplain |
- | |
476 | popa |
- | |
477 | end if |
- | |
478 | - | ||
479 | - | ||
480 | - | ||
481 | } |
- | |
482 | macro make_FAT_RamFS |
- | |
483 | { |
- | |
484 | local .RS1 |
- | |
485 | local .fat12 |
- | |
486 | local .fat16 |
- | |
487 | ; ìû äîëæíû ñôîðìèðîâàòü â íà÷àëüíûé îáðàç Ram FS, à ïîòîì çàïèñàòü åãî çà îáëàñòü âûøå 1 ìá.. |
- | |
488 | ;äëÿ ñëó÷àÿ ñ FAT12 |
- | |
489 | ; mov di,fat12_buffer ;ds äîëæåí áûòü = cs |
- | |
490 | ;es:di - óêàçûâàþò íà íà÷àëî áëîêà äëÿ ôîðìèðîâàíèÿ ðàì ôñ. |
- | |
491 | use_RamdiskSector ;âîçðàùàåìîå çíà÷åíèå â ax ðàçìåð ñåêòîðà â áàéòàõ |
- | |
492 | cmp ax,4096 ;ïî ñïåöèôèêàöèè çíà÷åíèå äîëæíî áûòü â ïðåäåëàõ îò 1 äî 4096 |
- | |
493 | ja .RS1 |
- | |
494 | test ax,ax |
- | |
495 | jnz @f ;îøèáêà åñëè ñþäà ïðûãíóëè âñå òàêè ... |
- | |
496 | - | ||
497 | .RS1: mov word [fat12_buffer.BPB_BytsPerSec],512 |
- | |
498 | ;;;;;;;;;;ñêàæåì ÷òî ïî äåôîëòó áóäåì þçàòü çíà÷åíèå... |
- | |
499 | @@: mov word [fat12_buffer.BPB_BytsPerSec],ax ;òóò âñå îê |
- | |
500 | - | ||
501 | ;BPB_SecPerClus êîë-âî ñåêòîðîâ â êëàñòåðå |
- | |
502 | use_RamdiskCluster ;âîçðàùàåìîå çíà÷åíèå â al |
- | |
503 | cmp al,128 |
- | |
504 | ja @f |
- | |
505 | ; test al,0x1 ;ïðîâåðêà íà êðàòíîñòü ) |
- | |
506 | ; jnz @f |
- | |
507 | - | ||
508 | mov byte [fat12_buffer.BPB_SecPerClus],al |
- | |
509 | - | ||
510 | ;incorrect value will be set dafault |
- | |
511 | - | ||
512 | ;íèæå íåêîððåêòíîå çíà÷åíèå â ò.ê. ðàçìåð êðàòåí 2 è â äèàïàçîíå îò 1 äî 128 âêëþ÷èòåëüíî |
- | |
513 | ; ìû äîëæíû ðóãíóòüñÿ íà ýòî |
- | |
514 | ;@@: ;mov byte [fat12_buffer.BPB_SecPerClus],1 |
- | |
515 | - | ||
516 | ;;;;; îïðåäåëåèì êàêàÿ ó íàñ áóäåò èñïîëüçîâàòüñÿ FAT |
- | |
517 | ;ïî óñëîâèþ, fat12<4085<=fat16<65525<=fat32 |
- | |
518 | ; fat12_buffer.BPB_BytsPerSec*fat12_buffer.BPB_SecPerClus = êîë-âî ñåêòîðîâ |
- | |
519 | movzx eax,word [fat12_buffer.BPB_BytsPerSec] |
- | |
520 | movzx ebx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
521 | - | ||
522 | imul ebx,eax ;òóò ðàçìåðíîñòü ñåêòîðà |
- | |
523 | mov eax,save_ramdisksize ;ðàçìåð çàïðîøåííîãî ðàì äèñêà â áàéòàõ |
- | |
524 | cdq |
- | |
525 | idiv ebx |
- | |
526 | ;;;;;;;; ñåé÷àñ ÷àñòíîå â eax, à îñòàòîê â edx |
- | |
527 | ;ïîëó÷èì êîë-âî ñåêòîðîâ, è ìîæåì óæå îïðåäåëèòü òèï FAT êîòîðóþ íóæíî äåëàòü. |
- | |
528 | cmp eax,4085 |
- | |
529 | jb .fat12 |
- | |
530 | cmp eax,65525 |
- | |
531 | jb .fat16 |
- | |
532 | ;;;;;;;;;;;;;;;;;;;;;;;; òóò fat32 |
- | |
533 | mov set_ramfs,32 ;óñòàíîâèì òèï ôàéëîâîé ñèñòåìû |
- | |
534 | mov word [fat12_buffer.BPB_RsvdSecCnt],32 |
- | |
535 | xor eax,eax |
- | |
536 | mov word [fat12_buffer.BPB_RootEntCnt],ax |
- | |
537 | mov word [fat12_buffer.BPB_TotSec16],ax |
- | |
538 | mov dword [fat12_buffer.BPB_TotSec32],eax |
- | |
539 | - | ||
540 | - | ||
541 | .fat16: ;fat16 |
- | |
542 | ;Äëÿ FAT12 è FAT16 äèñêîâ ýòî ïîëå ñîäåðæèò êîëè÷åñòâî ñåêòîðîâ, à BPB_TotSec32 ðàâíî 0, åñëè çíà÷åíèå <óìåùàåòñÿ> (ìåíüøå 0x10000). |
- | |
543 | jmp $ |
- | |
544 | mov set_ramfs,16 ;óñòàíîâèì òèï ôàéëîâîé ñèñòåìû |
- | |
545 | movzx ebx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
546 | imul eax,ebx |
- | |
547 | - | ||
548 | cmp eax,0x10000 |
- | |
549 | jae @f |
- | |
550 | mov word [fat12_buffer.BPB_TotSec16],ax |
- | |
551 | mov dword [fat12_buffer.BPB_TotSec32],0 |
- | |
552 | @@: |
- | |
553 | ;êîëè÷åñòâî ñåêòîðîâ çàíèìàåìîå îäíîé êîïèåé ôàò |
- | |
554 | ; mov word [fat12_buffer.BPB_FATSz16],0x9 ;Äëÿ FAT12/FAT16 ýòî êîëè÷åñòâî ñåêòîðîâ îäíîé FAT. ?? |
- | |
555 | ;;;; çàïîëíèì BPB_RootEntCnt Äëÿ FAT12 è FAT16 äèñêîâ, ýòî ïîëå ñîäåðæèò ÷èñëî |
- | |
556 | ;32-áàéòíûõ ýëåìåíòîâ êîðíåâîé äèðåêòîðèè. Äëÿ FAT32 äèñêîâ, ýòî ïîëå äîëæíî |
- | |
557 | ;áûòü 0. Ïîêà êîíñòàíòà, íóæíî áóäåò ïîçæå äîäåëàòü. |
- | |
558 | mov eax,root_dir_entry_count |
- | |
559 | mov word [fat12_buffer.BPB_RootEntCnt],ax ; count of 32-byte dir. entries (224*32 = 14 sectors= 7 kb) |
- | |
560 | ;ïî äîêóìåíòàöèè ðåêîìåíäóþò îòðåçàòü 16 êá äëÿ ðóò äèð íî ýòî î÷ ìíîãî, äàæå äëÿ êîîñ. èìõî äëÿ íà÷àëà õâàòèò è 7 êá |
- | |
561 | ;;;;;;; |
- | |
562 | ;Äëÿ FAT16 ýòî êîëè÷åñòâî ñåêòîðîâ îäíîé FAT. Äëÿ FAT32 ýòî çíà÷åíèå |
- | |
563 | ;ðàâíî 0, à êîëè÷åñòâî ñåêòîðîâ îäíîé FAT ñîäåðæèòñÿ â BPB_FATSz32. |
- | |
564 | ;RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec - 1)) / BPB_BytsPerSec; |
- | |
565 | - | ||
566 | ;TmpVal1 = DskSize - (BPB_ResvdSecCnt + RootDirSectors); |
- | |
567 | ;TmpVal2 = (256 * BPB_SecPerClus) + BPB_NumFATs; |
- | |
568 | ;If(FATType == FAT32) |
- | |
569 | ; TmpVal2 = TmpVal2 / 2; |
- | |
570 | ;FATSz = (TMPVal1 + (TmpVal2 - 1)) / TmpVal2; |
- | |
571 | ;If(FATType == FAT32) { |
- | |
572 | ; BPB_FATSz16 = 0; |
- | |
573 | ; BPB_FATSz32 = FATSz; |
- | |
574 | ;} else { |
- | |
575 | ; BPB_FATSz16 = LOWORD(FATSz); |
- | |
576 | ; /* there is no BPB_FATSz32 in a FAT16 BPB */ |
- | |
577 | ;} |
- | |
578 | ;===================================== |
- | |
579 | ;RootDirSectors |
- | |
580 | movzx ebx, word [fat12_buffer.BPB_BytsPerSec] |
- | |
581 | imul eax,32 |
- | |
582 | add eax,ebx |
- | |
583 | dec eax |
- | |
584 | - | ||
585 | cdq |
- | |
586 | idiv ebx |
- | |
587 | ;;;;;;;; ñåé÷àñ ÷àñòíîå â eax, à îñòàòîê â edx äëÿ äèñêåòû 1.44 ó íàñ äîëæíî áûòü çíà÷åíèå =14 |
- | |
588 | ;BPB_ResvdSecCnt + RootDirSectors |
- | |
589 | movzx ebx, word [fat12_buffer.BPB_RsvdSecCnt] |
- | |
590 | add ebx,eax |
- | |
591 | - | ||
592 | ;DskSize ó íàñ ýòî çíà÷åíèå óæå ïîëó÷åíî è äîñòóïíî |
- | |
593 | movzx eax,word [fat12_buffer.BPB_TotSec16] ;äîëæåí áûòü â ñåêòîðàõ |
- | |
594 | sub eax,ebx |
- | |
595 | - | ||
596 | - | ||
597 | ;TmpVal1=eax |
- | |
598 | shl edi,8 ;=edi*256 |
- | |
599 | movzx ecx,byte [fat12_buffer.BPB_NumFATs] |
- | |
600 | add edi,ecx |
- | |
601 | ;TmpVal2=edi |
- | |
602 | add eax,edi |
- | |
603 | dec eax |
- | |
604 | cdq |
- | |
605 | idiv edi |
- | |
606 | ;FATSz = ñåé÷àñ ÷àñòíîå â eax, à îñòàòîê â edx |
- | |
607 | mov word [fat12_buffer.BPB_FATSz16],ax |
- | |
608 | - | ||
609 | - | ||
610 | - | ||
611 | - | ||
612 | - | ||
613 | - | ||
614 | - | ||
615 | - | ||
616 | .fat12: ;fat12 |
- | |
617 | if DEBUG |
- | |
618 | ; âûâåäåì â îòëàäêå, ÷òî ñîáèðàåìñÿ äåëàòü îáðàç äèñêà c FS=fat12 |
- | |
619 | pushad |
- | |
620 | mov si,start_making_FAT12_msg |
- | |
621 | call printplain |
- | |
622 | popad |
- | |
623 | end if |
- | |
624 | - | ||
625 | - | ||
626 | - | ||
627 | ;Äëÿ FAT12 è FAT16 äèñêîâ ýòî ïîëå ñîäåðæèò êîëè÷åñòâî ñåêòîðîâ, à BPB_TotSec32 ðàâíî 0, åñëè çíà÷åíèå <óìåùàåòñÿ> (ìåíüøå 0x10000). |
- | |
628 | mov set_ramfs,12 ;óñòàíîâèì òèï ôàéëîâîé ñèñòåìû |
- | |
629 | movzx ebx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
630 | imul eax,ebx |
- | |
631 | - | ||
632 | cmp eax,0x10000 |
- | |
633 | jae @f |
- | |
634 | mov word [fat12_buffer.BPB_TotSec16],ax |
- | |
635 | mov dword [fat12_buffer.BPB_TotSec32],0 |
- | |
636 | @@: |
- | |
637 | ;êîëè÷åñòâî ñåêòîðîâ çàíèìàåìîå îäíîé êîïèåé ôàò |
- | |
638 | ; mov word [fat12_buffer.BPB_FATSz16],0x9 ;Äëÿ FAT12/FAT16 ýòî êîëè÷åñòâî ñåêòîðîâ îäíîé FAT. ?? |
- | |
639 | ;;;; çàïîëíèì BPB_RootEntCnt Äëÿ FAT12 è FAT16 äèñêîâ, ýòî ïîëå ñîäåðæèò ÷èñëî |
- | |
640 | ;32-áàéòíûõ ýëåìåíòîâ êîðíåâîé äèðåêòîðèè. Äëÿ FAT32 äèñêîâ, ýòî ïîëå äîëæíî |
- | |
641 | ;áûòü 0. Ïîêà êîíñòàíòà, íóæíî áóäåò ïîçæå äîäåëàòü. |
- | |
642 | mov eax,root_dir_entry_count |
- | |
643 | mov word [fat12_buffer.BPB_RootEntCnt],ax ; count of 32-byte dir. entries (224*32 = 14 sectors= 7 kb) |
- | |
644 | ;ïî äîêóìåíòàöèè ðåêîìåíäóþò îòðåçàòü 16 êá äëÿ ðóò äèð íî ýòî î÷ ìíîãî, äàæå äëÿ êîîñ. èìõî äëÿ íà÷àëà õâàòèò è 7 êá |
- | |
645 | ;;;;;;; |
- | |
646 | ;DskSize(â ñåêòîðàõ)*12 (ðàçìåðíîñòü ôàéëîâîé ñèñòåìû, ò.å ïðåäïîëîæèì ñêîëüêî áèòîâ ïîòðåáóåòñÿ äëÿ àäðåñàöèè ýòîãî îáúåìà) /8 (÷òî ïîëó÷èòü ðàçìåð â áàéòàõ) |
- | |
647 | ;ïîëó÷åííîå ÷èñëî îêðóãëÿåì â áîëüøóþ ñòîðîíó êðàòíîå ñåêòîðó ò.å. 512 áàéò Òàêîé ïîäõîä íå óíèâåðñàëåí, íî ïîêà ïîéäåò |
- | |
648 | ;âîîáùå ó ìåëêîñîôò ýòî âñå ñ÷èòàåòñÿ ðó÷êàìè, íî ìû áóäåì þçàòü òîëüêî ïîä êîîñ ðàì äèñê ñ ôàò12 |
- | |
649 | movzx eax, word [fat12_buffer.BPB_TotSec16] |
- | |
650 | imul eax,12 |
- | |
651 | shr eax,3 ;äåëèì íà 8 íî ò.å. íàì íóæíî äåëèòü åùå è íà 512 èëè áîëåå â çàâèñèìîñòè îò ðàçìåðîâ êëàñòåðà |
- | |
652 | movzx ebx,word [fat12_buffer.BPB_BytsPerSec] ;ðàçìåð ñåêòîðà |
- | |
653 | cdq |
- | |
654 | idiv ebx ;ðàçäåëèì íà ðàçìåð êëàñòåðà |
- | |
655 | ;ñåé÷àñ ó íàñ â eax çíà÷åíèå åãî íóæíî îêðóãëèòü â áîëüøóþ ñòîðîíó êðàòíîìó 512 áàéòàì |
- | |
656 | ;ïðèìåíèì ñëåäóþùåå î÷èñòèì and è äîáàâèì 512 áàéò. òàêèì îáðàçîì âûðàâíèì íà 512 áàéò |
- | |
657 | ;íî ò.ê. âñå ðàâíî äåëèòü íèæíèé êîä íàì íå íóæåí |
- | |
658 | ; and eax,0xfff200 |
- | |
659 | ; add eax,0x200 ;äîáàâèì 512 áàéò äëÿ 1.44 äèñêåòû èäåàëüíî ïîäõîäèò )) |
- | |
660 | - | ||
661 | inc ax |
- | |
662 | ;ïî èäåå äîëæíî íà êàæäóþ ôàò òàáëèöó |
- | |
663 | ;ðåçåðâèðîâàòüñÿ 9 ñåêòîðîâ ò.å. ïîëó÷àåòñÿ 2*9=18+1 =19 ñåêòîðîâ ò.å. ðóò äèð íàõîäèòüñÿ íà ñ 20 ñåòîðà ò.å. ñ àäðåñà 0õ2600 |
- | |
664 | ;ñåé÷àñ íóæíî âû÷èñëèòü ñêîëüêî áóäåò ñåêòîðîâ çàíèìàòü ôàò ) íóæíî ðàçäåëèòü íà 512 |
- | |
665 | ;FATSz = ñåé÷àñ ÷àñòíîå â eax |
- | |
666 | mov word [fat12_buffer.BPB_FATSz16],ax |
- | |
667 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
668 | get_firstDataSector ;ïîëó÷èòü ñìåùåíèå äî äàííûõ |
- | |
669 | ;ñîçäàäèì ïåâóþ çàïèñü â ôàò ïî îïðåäåëåííîìó àäðåñó. |
- | |
670 | first_create_fat_table |
- | |
671 | ;çàêèíèì BPB ôàéëîâîé ñèñòåìû çà 1 ìá. |
- | |
672 | use_BPB_RAM |
- | |
673 | ; |
- | |
674 | ;êîïèðîâàíèå ôàéëà. |
- | |
675 | use_RamdiskFile |
- | |
676 | - | ||
677 | ;;;; âû÷èñëÿåì óêàçàòåëü íà êîðíåâóþ äèð FirstRootDirSecNum = BPB_ResvdSecCnt + (BPB_NumFATs * BPB_FATSz16); |
- | |
678 | ; movzx ebx, [fat12_buffer.BPB_NumFATs] |
- | |
679 | ; movzx eax,ax |
- | |
680 | ; imul eax,ebx |
- | |
681 | ;eax=(BPB_NumFATs * BPB_FATSz16) |
- | |
682 | ; inc eax |
- | |
683 | ; BPB_ResvdSecCnt çíà÷åíèå òîëüêî 1 äëÿ fat12/16 |
- | |
684 | ;â eax óêàçàòåëü íà root dir. äëÿ äèñêåòû fat12 äîëæíî ïîëó÷èòüñÿ ïðè êîë-âî êîïèé fat 1 = 1+ (1*1) =2 èëè 3 |
- | |
685 | - | ||
686 | if DEBUG |
- | |
687 | pusha |
- | |
688 | ; mov ax,point_default |
- | |
689 | ; mov ax,cx |
- | |
690 | mov cx,0x0a |
- | |
691 | mov di,show_db1 |
- | |
692 | ; mov dword[ds:di],' ' |
- | |
693 | ; mov word [ds:di+4],' ' |
- | |
694 | call decode |
- | |
695 | ;Show size |
- | |
696 | mov si,show_db1 |
- | |
697 | call printplain |
- | |
698 | ; |
- | |
699 | ; xor ax,ax |
- | |
700 | ; int 0x16 |
- | |
701 | popa |
- | |
702 | end if |
- | |
703 | - | ||
704 | - | ||
705 | - | ||
706 | - | ||
707 | - | ||
708 | - | ||
709 | - | ||
710 | } |
- | |
711 | - | ||
712 | macro use_RamdiskSector |
- | |
713 | { |
- | |
714 | ;äëÿ íåêîòîðûõ FS áóäåò èãíîðèðîâàòüñÿ |
- | |
715 | mov di,point_default ;restore value |
- | |
716 | mov cx,save_cx_d |
- | |
717 | - | ||
718 | .start_RamdiskSector: |
- | |
719 | call get_firs_sym ;get first symbol on new line |
- | |
720 | test cx,cx |
- | |
721 | jz .end_RamdiskSector ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
722 | - | ||
723 | cmp al,'R' |
- | |
724 | jnz .start_RamdiskSector |
- | |
725 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
- | |
726 | ; parse_RamdiskSize |
- | |
727 | - | ||
728 | mov bx,cx |
- | |
729 | mov ax,di |
- | |
730 | - | ||
731 | mov si,parse_RamdiskSector |
- | |
732 | mov cx,parse_RamdiskSector_e - parse_RamdiskSector |
- | |
733 | repe cmpsb |
- | |
734 | jnz .RamdiskSector_rest_val ;is not compare |
- | |
735 | - | ||
736 | sub bx,parse_RamdiskSector_e - parse_RamdiskSector ;correct cx |
- | |
737 | add bx,cx |
- | |
738 | mov cx,bx |
- | |
739 | - | ||
740 | test status_flag,flag_found_RamdiskSector ;îöåíêà ôëàãîâ |
- | |
741 | jz .correct_is_not_set_RamdiskSector |
- | |
742 | - | ||
743 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
744 | ; call printplain |
- | |
745 | ; jmp .get_next_str |
- | |
746 | - | ||
747 | .correct_is_not_set_RamdiskSector: |
- | |
748 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
749 | repe scasb |
- | |
750 | jcxz .end_get_RamS_ERROR_1 ;not found param |
- | |
751 | - | ||
752 | cmp ah,byte [es:di-1] ;find '=' |
- | |
753 | jnz .start_RamdiskSector ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
- | |
754 | - | ||
755 | repe scasb ;cut ' ' |
- | |
756 | inc cx |
- | |
757 | dec di |
- | |
758 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
759 | xor bx,bx |
- | |
760 | mov cx,4 |
- | |
761 | @@: movzx ax,byte [es:di] |
- | |
762 | cmp al,'0' |
- | |
763 | jb .end_RamdiskSector |
- | |
764 | cmp al,'9' |
- | |
765 | ja .end_RamdiskSector |
- | |
766 | ;;;;;;;;;;;;;;;;;;; |
- | |
767 | - | ||
768 | imul bx,10 |
- | |
769 | xor al,0x30 |
- | |
770 | add bx,ax |
- | |
771 | - | ||
772 | inc di |
- | |
773 | - | ||
774 | loop @b |
- | |
775 | jmp .end_RamdiskSector |
- | |
776 | - | ||
777 | - | ||
778 | .RamdiskSector_rest_val: |
- | |
779 | mov cx,bx |
- | |
780 | mov di,ax |
- | |
781 | jmp .start_RamdiskSector |
- | |
782 | .end_get_RamS_ERROR_1: |
- | |
783 | - | ||
784 | .end_RamdiskSector: |
- | |
785 | mov ax,bx |
- | |
786 | - | ||
787 | if DEBUG |
- | |
788 | pusha |
- | |
789 | movzx eax,bx;save_cx_d;point_default |
- | |
790 | mov cx,0x0a |
- | |
791 | mov di,RamdiskSector_msg |
- | |
792 | mov dword[ds:di],' ' |
- | |
793 | mov dword [ds:di+4],' ' |
- | |
794 | call decode |
- | |
795 | ;Show size |
- | |
796 | mov si,RamdiskSector_msg |
- | |
797 | call printplain |
- | |
798 | - | ||
799 | popa |
- | |
800 | end if |
- | |
801 | - | ||
802 | ; pop di |
- | |
803 | ; pop es |
- | |
804 | } |
- | |
805 | - | ||
806 | macro use_RamdiskCluster |
- | |
807 | { |
- | |
808 | ;äëÿ íåêîòîðûõ FS áóäåò èãíîðèðîâàòüñÿ |
- | |
809 | ; push es |
- | |
810 | ; push di |
- | |
811 | mov di,point_default ;restore value |
- | |
812 | mov cx,save_cx_d |
- | |
813 | ; push ini_data_ |
- | |
814 | ; pop es |
- | |
815 | .start_RamdiskCluster: |
- | |
816 | call get_firs_sym ;get first symbol on new line |
- | |
817 | test cx,cx |
- | |
818 | jz .end_RamdiskCluster ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
819 | cmp al,'R' |
- | |
820 | jnz .start_RamdiskCluster |
- | |
821 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
- | |
822 | ; parse_RamdiskSize |
- | |
823 | - | ||
824 | mov bx,cx |
- | |
825 | mov ax,di |
- | |
826 | - | ||
827 | mov si,parse_RamdiskCluster |
- | |
828 | mov cx,parse_RamdiskCluster_e - parse_RamdiskCluster |
- | |
829 | repe cmpsb |
- | |
830 | jnz .RamdiskCluster_rest_val ;is not compare |
- | |
831 | - | ||
832 | sub bx,parse_RamdiskCluster_e - parse_RamdiskCluster ;correct cx |
- | |
833 | add bx,cx |
- | |
834 | mov cx,bx |
- | |
835 | - | ||
836 | test status_flag,flag_found_RamdiskCluster ;îöåíêà ôëàãîâ |
- | |
837 | jz .correct_is_not_set_RamdiskCluster |
- | |
838 | - | ||
839 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
840 | ; call printplain |
- | |
841 | ; jmp .get_next_str |
- | |
842 | - | ||
843 | .correct_is_not_set_RamdiskCluster: |
- | |
844 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
845 | repe scasb |
- | |
846 | jcxz .end_get_RamSC_ERROR_1 ;not found param |
- | |
847 | - | ||
848 | cmp ah,byte [es:di-1] ;find '=' |
- | |
849 | jnz .start_RamdiskCluster ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
- | |
850 | - | ||
851 | repe scasb ;cut ' ' |
- | |
852 | inc cx |
- | |
853 | dec di |
- | |
854 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
855 | @@: movzx ax,byte [es:di] |
- | |
856 | cmp al,'0' |
- | |
857 | jb .end_RamdiskCluster |
- | |
858 | cmp al,'9' |
- | |
859 | ja .end_RamdiskCluster |
- | |
860 | ;;;;;;;;;;;;;;;;;;; |
- | |
861 | xor al,0x30 |
- | |
862 | - | ||
863 | jmp .end_RamdiskCluster |
- | |
864 | - | ||
865 | - | ||
866 | .RamdiskCluster_rest_val: |
- | |
867 | mov cx,bx |
- | |
868 | mov di,ax |
- | |
869 | jmp .start_RamdiskCluster |
- | |
870 | .end_get_RamSC_ERROR_1: |
- | |
871 | - | ||
872 | .end_RamdiskCluster: |
- | |
873 | if DEBUG |
- | |
874 | pusha |
- | |
875 | mov cx,0x0a |
- | |
876 | mov di,RamdiskCluster_msg |
- | |
877 | ; mov word[ds:di],' ' |
- | |
878 | call decode |
- | |
879 | ;Show size |
- | |
880 | mov si,RamdiskCluster_msg |
- | |
881 | call printplain |
- | |
882 | - | ||
883 | popa |
- | |
884 | end if |
- | |
885 | - | ||
886 | } |
- | |
887 | - | ||
888 | macro use_Loader_Image |
- | |
889 | ;ïðåäíàçíà÷åí äëÿ çàãðóçêè îáðàçîâ âûøå 1 Ìá. |
- | |
890 | ;ïåðâîíà÷àëüíàÿ âåðñèÿ çàãðóæàåò îáðàç äèñêåòû 1.44 ìá |
- | |
891 | { |
- | |
892 | local .start_p_LI |
- | |
893 | local .exit |
- | |
894 | local .error_LI |
- | |
895 | local .rest_value_loop |
- | |
896 | local .found_end_str |
- | |
897 | mov di,point_default ;restore value |
- | |
898 | mov cx,save_cx_d |
- | |
899 | ;îáðàáîòêà êîíñòðóêöèè òèïà LoaderModule=kord/kolibri.ldm |
- | |
900 | .start_p_LI: |
- | |
901 | call get_firs_sym ;get first symbol on new line |
- | |
902 | test cx,cx |
- | |
903 | jz .exit ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
904 | cmp al,'L' |
- | |
905 | jnz .start_p_LI |
- | |
906 | ;ïðîâåðêà íà çíà÷åíèå LoaderModule |
- | |
907 | ; parse_LoaderModule |
- | |
908 | mov bx,cx |
- | |
909 | mov ax,di |
- | |
910 | - | ||
911 | mov si,parse_LoaderImage |
- | |
912 | mov cx,parse_LoaderImage_e - parse_LoaderImage |
- | |
913 | repe cmpsb |
- | |
914 | jnz .rest_value_loop ;is not compare |
- | |
915 | - | ||
916 | sub bx,parse_LoaderImage_e - parse_LoaderImage ;correct cx |
- | |
917 | add bx,cx |
- | |
918 | mov cx,bx |
- | |
919 | - | ||
920 | ; test status_flag,flag_found_LM ;îöåíêà ôëàãîâ |
- | |
921 | ; jz .correct_is_not_set_LI |
- | |
922 | - | ||
923 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
924 | ; call printplain |
- | |
925 | ; jmp .get_next_str |
- | |
926 | - | ||
927 | ;.correct_is_not_set_LI: |
- | |
928 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
929 | repe scasb |
- | |
930 | jcxz .rest_value_loop_LI ;not found param timeout |
- | |
931 | - | ||
932 | cmp ah,byte [es:di-1] ;find '=' |
- | |
933 | jnz .rest_value_loop_LI |
- | |
934 | - | ||
935 | repe scasb ;cut ' ' |
- | |
936 | inc cx |
- | |
937 | dec di |
- | |
938 | ;di óêàçûâàåò íà íà÷àëî áëîêà èíôîðìàöèè, â cx äëèííà äî êîíöà ñåêöèè. |
- | |
939 | ;ïîñëå çàãðóçêè çàíîñèòüñÿ çíà÷åíèå çàíÿòîé ïàìÿòè. |
- | |
940 | ;äëÿ òîãî ÷òî áû çàãðóçèòü ìîäóëü, âîñïîëüçóåìñÿ callback ñåðâèñîì |
- | |
941 | ;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0 |
- | |
942 | ;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà LoaderModule = kord/kernel.loader |
- | |
943 | ;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'kord/kernel.loader',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
- | |
944 | ;ñîõðàíèëè ïåâûå 2 word |
- | |
945 | push dword [es:di-6] |
- | |
946 | lea si,[di-6] |
- | |
947 | - | ||
948 | push word [es:di-2] |
- | |
949 | xor ax,ax |
- | |
950 | mov word [es:di-6],ax ;âíîñèì íóæíûå çíà÷åíèÿ |
- | |
951 | ;info_real_mode_size ðàçìåð è óêàçàòåëü íà îáëàñòü â êîòîðóþ ìîæíî çàãðóçèòüñÿ |
- | |
952 | mov ax,info_real_mode_size ;0x3000 ;ñëåäóþùèé ñåãìåíò çà äàííûìè |
- | |
953 | - | ||
954 | - | ||
955 | mov word [es:di-4],ax |
- | |
956 | mov word [es:di-2],16 ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ñ÷èòàåì |
- | |
957 | ;;;;;; ïîèñê êîíöà ñòðî÷êè |
- | |
958 | @@: mov al,byte [es:di] |
- | |
959 | cmp al,' ' |
- | |
960 | jz .found_end_str |
- | |
961 | cmp al,0xa |
- | |
962 | jz .found_end_str |
- | |
963 | cmp al,0xd |
- | |
964 | jz .found_end_str |
- | |
965 | inc di |
- | |
966 | dec cx |
- | |
967 | jnz @b |
- | |
968 | ;;;not found äîïóñòèì,÷òî ýòî êîíåö ôàéëà è îí íå èìååò ïðèâû÷íîãî çàâåðåøíèÿ ñòðîêè |
- | |
969 | .found_end_str: |
- | |
970 | ; ÷òåíèå áëîêà ïî 64 êá â ñåãìåíò è çàáðàñûâàíèå åãî âûøå 1 ìá. |
- | |
971 | push word [es:di] |
- | |
972 | xor ax,ax |
- | |
973 | mov word [es:di],ax |
- | |
974 | ; xor ax,ax ; function 1 - read file |
- | |
975 | mov di,si ;file_data |
- | |
976 | inc ax |
- | |
977 | push si |
- | |
978 | push es |
- | |
979 | call far dword [loader_callback] |
- | |
980 | push cs |
- | |
981 | pop ds |
- | |
982 | - | ||
983 | pop es |
- | |
984 | pop si |
- | |
985 | - | ||
986 | test bx,bx |
- | |
987 | jnz .error_LM |
- | |
988 | - | ||
989 | - | ||
990 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; çàáðàñûâàíèå áëîêà â 64 êá âûøå 1 ìá. |
- | |
991 | mov si,table_15_87 |
- | |
992 | push es |
- | |
993 | push ds |
- | |
994 | pop es |
- | |
995 | mov cx, 256*18 |
- | |
996 | mov ah, 0x87 |
- | |
997 | int 0x15 |
- | |
998 | pop es |
- | |
999 | pop dx cx |
- | |
1000 | test ah, ah |
- | |
1001 | - | ||
1002 | - | ||
1003 | - | ||
1004 | jmp far dword [es:si] |
- | |
1005 | - | ||
1006 | - | ||
1007 | - | ||
1008 | - | ||
1009 | .rest_value_loop: |
- | |
1010 | mov di,ax |
- | |
1011 | mov cx,bx |
- | |
1012 | jmp .start_p_LI |
- | |
1013 | - | ||
1014 | .exit: |
- | |
1015 | - | ||
1016 | - | ||
1017 | - | ||
1018 | } |
- | |
1019 | - | ||
1020 | - | ||
1021 | - | ||
1022 | macro name_in_root_fat |
- | |
1023 | ;ìàêðîñ, êîòîðûé çàïèñûâàåò èíôîðìàöèþ î çàãðóæåííîì ôàéëå â êîðíåâóþ ôàò òàáëèöó |
- | |
1024 | { |
- | |
1025 | - | ||
1026 | } |
- | |
1027 | - | ||
1028 | - | ||
1029 | - | ||
1030 | macro use_RamdiskFile |
- | |
1031 | { |
- | |
1032 | ;çàãðóçêà ôàéëîâ ñ èñïîëüçîâàíèå callback ñåðâèñà ïåðâè÷íîãî çàãðóç÷èêà |
- | |
1033 | ;èñïîëüçóåòñÿ òîëüêî äëÿ çàãðóçêè íåîáõîäèìûõ è íåáîëüøèõ ôàéëîâ, ò.ê. äîñòàòî÷íî ìåäëåííî ðàáîòàåò |
- | |
1034 | ;äëÿ çàãðóçêè èñïîëüçóåò 0õ87 ôóíêöèþ int 0x15 ïðåðûâàíèÿ - çàãðóçêà áëîêîâ äàííûõ äî 64 êá âûøå 1 ìá |
- | |
1035 | local .start_loop |
- | |
1036 | local ._end |
- | |
1037 | local .rest_value_loop |
- | |
1038 | local .error |
- | |
1039 | mov di,point_default ;restore value |
- | |
1040 | mov cx,save_cx_d |
- | |
1041 | mov data_offset,0 ;clean offset |
- | |
1042 | ;îáðàáîòêà êîíñòðóêöèè òèïà LoaderModule=kord/kolibri.ldm |
- | |
1043 | .start_loop: |
- | |
1044 | call get_firs_sym ;get first symbol on new line |
- | |
1045 | test cx,cx |
- | |
1046 | jz ._end ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
- | |
1047 | cmp al,'R' |
- | |
1048 | jnz .start_loop |
- | |
1049 | ;ïðîâåðêà íà çíà÷åíèå RamdiskFile |
- | |
1050 | mov bx,cx |
- | |
1051 | mov ax,di |
- | |
1052 | - | ||
1053 | mov si,parse_RamdiskFile |
- | |
1054 | mov cx,parse_RamdiskFile_e - parse_RamdiskFile |
- | |
1055 | repe cmpsb |
- | |
1056 | jnz .rest_value_loop ;is not compare |
- | |
1057 | - | ||
1058 | sub bx,parse_RamdiskFile_e - parse_RamdiskFile ;correct cx |
- | |
1059 | add bx,cx |
- | |
1060 | mov cx,bx |
- | |
1061 | ; test status_flag,flag_found_LM ;îöåíêà ôëàãîâ |
- | |
1062 | ; jz .correct_is_not_set_LM |
- | |
1063 | - | ||
1064 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
- | |
1065 | ; call printplain |
- | |
1066 | ; jmp .get_next_str |
- | |
1067 | - | ||
1068 | ;.correct_is_not_set_LM: |
- | |
1069 | mov ax,0x3d20 ;cut al=' ' ah='=' |
- | |
1070 | repe scasb |
- | |
1071 | test ecx,ecx |
- | |
1072 | jz .rest_value_loop ;not found param timeout |
- | |
1073 | - | ||
1074 | cmp ah,byte [es:di-1] ;find '=' |
- | |
1075 | jnz .rest_value_loop |
- | |
1076 | - | ||
1077 | repe scasb ;cut ' ' |
- | |
1078 | inc cx |
- | |
1079 | dec di |
- | |
1080 | - | ||
1081 | mov save_di_RAMDISK,di |
- | |
1082 | mov save_cx_RAMDISK,cx |
- | |
1083 | ;di óêàçûâàåò íà íà÷àëî áëîêà èíôîðìàöèè, â cx äëèííà äî êîíöà ñåêöèè. |
- | |
1084 | ;ïîñëå çàãðóçêè çàíîñèòüñÿ çíà÷åíèå çàíÿòîé ïàìÿòè. |
- | |
1085 | ;äëÿ òîãî ÷òî áû çàãðóçèòü ìîäóëü, âîñïîëüçóåìñÿ callback ñåðâèñîì |
- | |
1086 | ;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0 |
- | |
1087 | ;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà RamdiskFile = @menu,@menu |
- | |
1088 | ;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'@menu',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
- | |
1089 | ;ñîõðàíèëè ïåâûå 2 word |
- | |
1090 | - | ||
1091 | ; |
- | |
1092 | @@: mov al,byte [es:di] |
- | |
1093 | cmp al,',' ; ò.å. èùåì ðàçäåëèòåëü |
- | |
1094 | jz .found_end_str |
- | |
1095 | inc di |
- | |
1096 | dec cx |
- | |
1097 | jnz @b |
- | |
1098 | ;;;not found äîïóñòèì,÷òî ýòî êîíåö ôàéëà è îí íå èìååò ïðèâû÷íîãî çàâåðøåíèÿ ñòðîêè |
- | |
1099 | .found_end_str: |
- | |
1100 | ; mov al,byte [es:di] |
- | |
1101 | ; cmp al,' ' ; óáèðàåì ïðîáåëû, åñëè îíè åñòü |
- | |
1102 | ; jnz @f |
- | |
1103 | ; inc di |
- | |
1104 | ; dec cx |
- | |
1105 | ; jnz .found_end_str |
- | |
1106 | - | ||
1107 | ;@@: |
- | |
1108 | mov point_to_dest_file_name,di |
- | |
1109 | inc di |
- | |
1110 | ;ïðîâåðêà èíäèâèäóàëüíîñòè èìåíè ôàéëà |
- | |
1111 | check_name_file |
- | |
1112 | ;/restore di - point and cx -size section |
- | |
1113 | mov di,save_di_RAMDISK |
- | |
1114 | mov cx,save_cx_RAMDISK |
- | |
1115 | - | ||
1116 | test al,al |
- | |
1117 | jnz .start_loop ;åñëè â al çíà÷åíèå íå =0, òî òàêîå èìÿ óæå ñóùåñòâóåò â ñèñòåìå. |
- | |
1118 | - | ||
1119 | - | ||
1120 | - | ||
1121 | push dword [es:di-6] |
- | |
1122 | lea si,[di-6] |
- | |
1123 | - | ||
1124 | push word [es:di-2] |
- | |
1125 | push di |
- | |
1126 | xor ax,ax |
- | |
1127 | mov word [es:di-6],ax ;âíîñèì íóæíûå çíà÷åíèÿ |
- | |
1128 | ;info_real_mode_size ðàçìåð è óêàçàòåëü íà îáëàñòü â êîòîðóþ ìîæíî çàãðóçèòüñÿ |
- | |
1129 | mov ax,info_real_mode_size ;0x3000 ;ñëåäóþùèé ñåãìåíò çà äàííûìè |
- | |
1130 | - | ||
1131 | - | ||
1132 | mov word [es:di-4],ax |
- | |
1133 | mov word [es:di-2],16 ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ÷èòàåì |
- | |
1134 | - | ||
1135 | mov di,point_to_dest_file_name |
- | |
1136 | - | ||
1137 | if DEBUG |
- | |
1138 | pushad |
- | |
1139 | ; mov ax,di |
- | |
1140 | mov cx,0x0a |
- | |
1141 | mov di,name_of_seg_get_64 |
- | |
1142 | mov dword[ds:di],' ' |
- | |
1143 | mov word[ds:di+4],' ' |
- | |
1144 | call decode |
- | |
1145 | ;Show size |
- | |
1146 | mov si,name_of_seg_get_64 |
- | |
1147 | call printplain |
- | |
1148 | - | ||
1149 | popad |
- | |
1150 | end if |
- | |
1151 | - | ||
1152 | push word [es:di] |
- | |
1153 | push cx |
- | |
1154 | xor ax,ax |
- | |
1155 | mov word [es:di],ax |
- | |
1156 | ; xor ax,ax ; function 1 - read file |
- | |
1157 | push di |
- | |
1158 | mov di,si ;file_data |
- | |
1159 | inc ax |
- | |
1160 | push si |
- | |
1161 | push es |
- | |
1162 | push bp |
- | |
1163 | - | ||
1164 | push es |
- | |
1165 | pop ds |
- | |
1166 | push cs |
- | |
1167 | pop es |
- | |
1168 | - | ||
1169 | call far dword [es:loader_callback] |
- | |
1170 | - | ||
1171 | - | ||
1172 | push cs |
- | |
1173 | pop ds |
- | |
1174 | - | ||
1175 | pop bp |
- | |
1176 | pop es |
- | |
1177 | pop si |
- | |
1178 | - | ||
1179 | cmp bx,2 |
- | |
1180 | ja .error |
- | |
1181 | ; ñåé÷àñ ó íàñ â dx:ax ðàçìåð ôàéëà, êîòîðûé ìû çàãðóçèëè. |
- | |
1182 | ; âîçìîæíà ñèòóàöèÿ, êîãäà â bx=1 ò.å. åñòü åùå äàííûå íà äèñêå |
- | |
1183 | mov status_flag_loader_f,bx |
- | |
1184 | - | ||
1185 | shl edx,16 |
- | |
1186 | mov dx,ax |
- | |
1187 | ; shr edx,10 ;ðàçìåð ôàéëà â êá. |
- | |
1188 | ;;â edx ðàçìåð â áàéòàõ. |
- | |
1189 | mov save_file_size,edx |
- | |
1190 | mov eax,edx |
- | |
1191 | ;âîññòàíîâèì ïîëíîñòüþ ôàéë ñöåíàðèÿ |
- | |
1192 | pop di |
- | |
1193 | pop cx ;äëèííà îñòàòêà ñ 2-îé ÷àñòüþ èìåíè ò.å. ñ èìåíåì íàçíà÷åíèåì. |
- | |
1194 | pop word [es:di] |
- | |
1195 | pop di |
- | |
1196 | pop word [es:di-2] |
- | |
1197 | pop dword [es:di-6] |
- | |
1198 | - | ||
1199 | - | ||
1200 | if DEBUG |
- | |
1201 | pushad |
- | |
1202 | mov cx,0x0a |
- | |
1203 | mov di,RamdiskFile_msg |
- | |
1204 | mov dword[ds:di],' ' |
- | |
1205 | call decode |
- | |
1206 | ;Show size |
- | |
1207 | mov si,RamdiskFile_msg |
- | |
1208 | call printplain |
- | |
1209 | - | ||
1210 | popad |
- | |
1211 | end if |
- | |
1212 | - | ||
1213 | - | ||
1214 | - | ||
1215 | - | ||
1216 | - | ||
1217 | - | ||
1218 | - | ||
1219 | - | ||
1220 | - | ||
1221 | - | ||
1222 | ; çàãðóçèì ÷åìó ó íàñ ðàâåí êëàñòåð |
- | |
1223 | ; mov ax,word [fat12_buffer.BPB_BytsPerSec] ;êîë-âî áàéòîâ â ñåêòîðå ìîæåò áûòü ëþáîå 512 1024 2048 4096 2 áàéòà |
- | |
1224 | ; movzx bx,byte [fat12_buffer.BPB_SecPerClus] ;êîë-âî ñåêòîðîâ â êëàñòåðå |
- | |
1225 | ; imul ax,bx |
- | |
1226 | ;ñåé÷àñ â eax ðàçìåð êëàñòåðà (512) áàéò |
- | |
1227 | ;â edx äëèíà ôàéëà â áàéòàõ äî 64 êá |
- | |
1228 | ;çàêèíèì ôàéë çà 1 ìá |
- | |
1229 | ;1 íàì íóæíî ñîñòàâèòü ôàò òàáëèöó ò.å. ïðîèçâåñòè ðàçìåòêó ðàìäèñêà, çàòåì ïåðåíåñåì ïî àäðåñó ôàéë |
- | |
1230 | - | ||
1231 | ;çàïèñàòü èíôîðàìàöèþ î ôàéëå â êîðíåâóþ äèðåêòîðèþ |
- | |
1232 | register_file_in_fat |
- | |
1233 | ;ïåðåíåñòè çà 1 ìá ñîäåðæèìîå ôàéëà |
- | |
1234 | move_file_up |
- | |
1235 | - | ||
1236 | ;ïðîâåðèì, çàãðóæåí ëè äî êîíöà ôàéë? ò.å. åñëè ðàçìåð ôàéëà áîëüøå ÷åì 64 êá, òî áóäåò ïîäãðóæàòü îñòàâøèåñÿ áëîêè |
- | |
1237 | cmp status_flag_loader_f,0x1 |
- | |
1238 | jnz @f |
- | |
1239 | ;íóæíî äîçàãóçèòü äàííûå ôàéëà è ïåðåíåñòè èõ çà 1-ûé ìá ñîãëàñíî ôàò ñòðóêòóðå |
- | |
1240 | - | ||
1241 | - | ||
1242 | - | ||
1243 | - | ||
1244 | - | ||
1245 | - | ||
1246 | - | ||
1247 | - | ||
1248 | - | ||
1249 | @@: |
- | |
1250 | ;òóò îðãàíèçîâàí öèêë ïî çàãðóçêå ôàéëîâ â êîðíåâóþ äèðåêòîðèþ |
- | |
1251 | mov di,save_di_RAMDISK |
- | |
1252 | mov cx,save_cx_RAMDISK |
- | |
1253 | if DEBUG |
- | |
1254 | pusha |
- | |
1255 | xor ax,ax |
- | |
1256 | int 0x16 |
- | |
1257 | popa |
- | |
1258 | end if |
- | |
1259 | - | ||
1260 | - | ||
1261 | jmp .start_loop |
- | |
1262 | - | ||
1263 | - | ||
1264 | .error: |
- | |
1265 | ;call error.LoaderModule |
- | |
1266 | ;fixme! |
- | |
1267 | .rest_value_loop: |
- | |
1268 | mov di,ax |
- | |
1269 | mov cx,bx |
- | |
1270 | jmp .start_loop |
- | |
1271 | - | ||
1272 | ._end: |
- | |
1273 | ;ïåðåíåñåì çà 1-ûé ìá ôàò è ðóò äèð |
- | |
1274 | move_up_fat_and_root_d |
- | |
1275 | - | ||
1276 | - | ||
1277 | - | ||
1278 | - | ||
1279 | - | ||
1280 | - | ||
1281 | ;çàãðóçêà áëîêà |
- | |
1282 | ; mov ah,0x87 |
- | |
1283 | ; mov cx, ;size in byte |
- | |
1284 | - | ||
1285 | - | ||
1286 | ;es:si point to descripts |
- | |
1287 | - | ||
1288 | - | ||
1289 | } |
- | |
1290 | - | ||
1291 | macro use_BPB_RAM ;çàêèíóòü ñàìûå ïåðâûå 512 áàéò çà 1-é ìá |
- | |
1292 | ;äàííûé ìàêðîñ çàêèäûâàåò BPB ñòðóêòóðó ò.å. ïåðâûå 512 áàéò, ïîêà òîëüêî ôàò12 çà 1 ìá |
- | |
1293 | { |
- | |
1294 | mov ax,fat12_buffer |
- | |
1295 | mov si,table_15_87 |
- | |
1296 | add word [si+8*2+2],ax |
- | |
1297 | push es |
- | |
1298 | push ds |
- | |
1299 | pop es |
- | |
1300 | mov cx,256 ;áóò ñåêòîð óêëàäûâàåòñÿ â 512 áàéò 512/2=256 |
- | |
1301 | mov ah, 0x87 |
- | |
1302 | int 0x15 |
- | |
1303 | pop es |
- | |
1304 | ;add 512 byte for destination adress |
- | |
1305 | ; add dword [si+8*3+2], 512 |
- | |
1306 | ; test ah, ah |
- | |
1307 | ; jz |
- | |
1308 | if DEBUG |
- | |
1309 | pusha |
- | |
1310 | mov ax,word [si+8*2+2] |
- | |
1311 | mov cx,0x0a |
- | |
1312 | mov di,BPB_msg |
- | |
1313 | call decode |
- | |
1314 | ;Show size |
- | |
1315 | mov si,BPB_msg |
- | |
1316 | call printplain |
- | |
1317 | popa |
- | |
1318 | end if |
- | |
1319 | } |
- | |
1320 | macro first_create_fat_table |
- | |
1321 | ;äàííûé ìàêðîñ ñîçäàåò îôîðìëÿåò 3 ïåðâûõ áàéòà fat òàáëèöû, è óñòàíàâëèâàåò óêàçàòåëü íà ñëåäóþùèé áëîê, è âíîñèò 0 çíà÷åíèå |
- | |
1322 | ;äëÿ ñìåùåíèÿ â êîðíåâîé òàáëèöå. |
- | |
1323 | { |
- | |
1324 | mov al,byte [fat12_buffer.BPB_Media] |
- | |
1325 | - | ||
1326 | - | ||
1327 | push ds |
- | |
1328 | - | ||
1329 | - | ||
1330 | mov di,info_real_mode_size |
- | |
1331 | add di,0x1000 |
- | |
1332 | - | ||
1333 | if DEBUG |
- | |
1334 | pushad |
- | |
1335 | - | ||
1336 | mov ax,info_real_mode_size |
- | |
1337 | add ax,0x1000 |
- | |
1338 | ; mov ax,ds |
- | |
1339 | mov cx,0xa |
- | |
1340 | - | ||
1341 | mov di,first_entry_in_fat |
- | |
1342 | mov dword [di],' ' |
- | |
1343 | mov word [di+4],' ' |
- | |
1344 | call decode |
- | |
1345 | ;Show size |
- | |
1346 | mov si,first_entry_in_fat |
- | |
1347 | call printplain |
- | |
1348 | - | ||
1349 | xor ax,ax |
- | |
1350 | int 0x16 |
- | |
1351 | - | ||
1352 | popad |
- | |
1353 | end if |
- | |
1354 | - | ||
1355 | - | ||
1356 | push di ; push word info_real_mode_size+0x1000 ;cëåäóþùèé ñåãìåíò çà çàãðóæåííûì ó÷àñòêîì |
- | |
1357 | - | ||
1358 | xor di,di |
- | |
1359 | mov point_to_free_root,di ;çíà÷åíèå ñìåùåíèÿ =0 â êîðíåâîé ôàò òàáëèöå îïèñàíèÿ |
- | |
1360 | - | ||
1361 | pop ds ; çàãðóæåí ñëåäóþùèé ñåãìåíò ò.å. ïóñòîé ñåãìåíò |
- | |
1362 | - | ||
1363 | mov byte [di],al |
- | |
1364 | or ax,-1 |
- | |
1365 | inc di |
- | |
1366 | mov word [di],ax |
- | |
1367 | - | ||
1368 | pop ds |
- | |
1369 | mov point_next_fat_str,3 |
- | |
1370 | - | ||
1371 | if DEBUG |
- | |
1372 | pushad |
- | |
1373 | mov ax,point_next_fat_str |
- | |
1374 | mov cx,0x0a |
- | |
1375 | mov di,fat_create_msg |
- | |
1376 | call decode |
- | |
1377 | ;Show size |
- | |
1378 | mov si,fat_create_msg |
- | |
1379 | call printplain |
- | |
1380 | popad |
- | |
1381 | end if |
- | |
1382 | - | ||
1383 | } |
- | |
1384 | macro register_file_in_fat |
- | |
1385 | ;ìàêðîñ ðåãèñòðàöèè ôàéëà â ôàéëîâîé ñòðóêòóðå Fat |
- | |
1386 | ;ïîêà ïîääåðæèâàåòñÿ òîëüêî ôàò12, ïîêà )) |
- | |
1387 | ;âû÷èñëåíèå ñìåæíûõ êëàñòåðîâ è çàíåñåíèå èíôû â fat/ |
- | |
1388 | { |
- | |
1389 | local .step2 |
- | |
1390 | local .step3 |
- | |
1391 | local .end |
- | |
1392 | local .eof_file |
- | |
1393 | - | ||
1394 | ;di point on root dir íà ôðè ñåêöèþ. |
- | |
1395 | push es |
- | |
1396 | - | ||
1397 | mov ax,info_real_mode_size |
- | |
1398 | add ax,0x1000 |
- | |
1399 | mov es,ax ; push word info_real_mode_size+0x1000 ;ñåãìåíò ñëåäóþùèé çà çàãðóæåííûì áëîêîì â 64 êá |
- | |
1400 | - | ||
1401 | ; îïðåäåëÿåì òèï ôàò ïîêà íå îïðåäåëÿåì, ïîêà òîëüêî ôàò 12 |
- | |
1402 | ; 12 áèò, äëÿ âû÷åñëåíèÿ ñîñåäíèõ êàëàñòåðîâ. |
- | |
1403 | mov di,firstDataSect ;â ñåêòîðàõ |
- | |
1404 | sub di,size_root_dir |
- | |
1405 | ;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
- | |
1406 | shl di,9 ;imul 512 |
- | |
1407 | add di,point_to_free_root ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ. |
- | |
1408 | ;íåîáõîäèìî âíåñòè çíà÷åíèå â ðóò äèð ò.å. 32 áàéòà |
- | |
1409 | if DEBUG |
- | |
1410 | pushad |
- | |
1411 | ; mov ax,point_default |
- | |
1412 | ; mov ax, |
- | |
1413 | mov cx,0x0a |
- | |
1414 | mov di,show_db2 |
- | |
1415 | mov dword[ds:di],' ' |
- | |
1416 | mov word [ds:di+4],' ' |
- | |
1417 | call decode |
- | |
1418 | ;Show size |
- | |
1419 | mov si,show_db2 |
- | |
1420 | call printplain |
- | |
1421 | ; |
- | |
1422 | ; xor ax,ax |
- | |
1423 | ; int 0x16 |
- | |
1424 | popad |
- | |
1425 | end if |
- | |
1426 | - | ||
1427 | - | ||
1428 | - | ||
1429 | ;gs:di - óêàçàòåëü äëÿ âíåñåíèÿ èíôîðàöèè â ðóò îáëàñòü ôàò òàáëèöû èíîðìàöèè î ôàéëå. |
- | |
1430 | mov si,shot_name_fat |
- | |
1431 | mov cx,11 |
- | |
1432 | ;çàïèøåì â ñòðóêòóðó èìÿ |
- | |
1433 | @@: lodsb |
- | |
1434 | stosb |
- | |
1435 | loop @b |
- | |
1436 | - | ||
1437 | ;çàïèøåì àòðèáóòû ôàéëà è DIR_NTRes - çàðåçåâðèðîâàííûé áàéò =0 |
- | |
1438 | xor ax,ax |
- | |
1439 | mov ah,ATTR_VOLUME_ID |
- | |
1440 | mov word [es:di],ax |
- | |
1441 | add di,2 |
- | |
1442 | ;DIR_CrtTimeTenth |
- | |
1443 | mov byte [es:di],100 |
- | |
1444 | inc di |
- | |
1445 | ;DIR_CrtTime |
- | |
1446 | mov word [es:di],0x032b ;äàòà |
- | |
1447 | add di,2 |
- | |
1448 | ;DIR_CrtDate |
- | |
1449 | mov word [es:di],0x0 ;âðåìÿ >< |
- | |
1450 | add di,2 |
- | |
1451 | ;DIR_LstAccDate |
- | |
1452 | mov word [es:di],0x032b ;äàòà ìîåãî |
- | |
1453 | add di,2 |
- | |
1454 | ;DIR_FstClusHI |
- | |
1455 | mov word [es:di],0x0 ;âðåìÿ äëÿ ôàò12 /16 âñåãäà 0 |
- | |
1456 | add di,2 |
- | |
1457 | ;DIR_WrtTime |
- | |
1458 | mov word [es:di],0x0 ;âðåìÿ >< |
- | |
1459 | add di,2 |
- | |
1460 | ;DIR_WrtDate |
- | |
1461 | mov word [es:di],0x032b |
- | |
1462 | add di,2 |
- | |
1463 | - | ||
1464 | mov ax,point_next_fat_str |
- | |
1465 | mov word [es:di],ax |
- | |
1466 | add di,2 |
- | |
1467 | - | ||
1468 | push di |
- | |
1469 | ;DIR_FstClusLO Ìëàäøåå ñëîâî íîìåðà ïåðâîãî êëàñòåðà. |
- | |
1470 | ; mov ax,point_next_fat_str ;çàãðóçèì óêàçàòåëü íà ýëåìåíò ôàò òàáëèöû ò.å. ýòî íîìåð ôàò çàïèñè |
- | |
1471 | ;FATOffset = N + (N / 2) ò.å. ýòî óæå ó íàñ ñìåùåíèå ìû çíàåì ÷òî -íà÷èíàåòñÿ âñå ñ 3-ãî ýëåìåíòà çàïèñè ôàò |
- | |
1472 | mov bx,ax |
- | |
1473 | shr bx,1 |
- | |
1474 | add ax,bx |
- | |
1475 | ;â àõ ñåé÷àñ FATOffset |
- | |
1476 | ;ThisFATEntOffset = BPB_ResvdSecCnt + (FATOffset / BPB_BytsPerSec); |
- | |
1477 | mov bx, word [fat12_buffer.BPB_BytsPerSec] |
- | |
1478 | cwd |
- | |
1479 | idiv bx |
- | |
1480 | ;ax=ThisFATEntOffset= rem (FATOffset / BPB_BytsPerSec) ÷åòíûé èëè íå÷åòíûé óêàçàòåëü. |
- | |
1481 | mov si,ax |
- | |
1482 | ;íàì íóæíî â öèêëå çàïèñàòü âñå êëàñòåðû êîòîðûå áóäóò èñïîëüçîâàíû äëÿ ðàçìåùåíèÿ ôàéëà. |
- | |
1483 | ;óçíàåì ðàçìåð êëàñòåðà. |
- | |
1484 | movzx eax,word [fat12_buffer.BPB_BytsPerSec] |
- | |
1485 | movzx ebx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
1486 | imul eax,ebx |
- | |
1487 | ;ax - ðàçìåð êëàñòåðà. |
- | |
1488 | ;ñåé÷àñ áóäåì çàïèñûâàòü âî âðåìåííûé áóôåð ôàò òàáëèöó äëÿ âûáðàííîãî ôàéëà. Ïîñêîëüêó ìû åãî çàãðóçèëè âîçìîæíî íå ïîëíîñòüþ |
- | |
1489 | ;ìû îáðàáîòàåì çàïèñü äëÿ ôàò ïîëíîñòüþ, â íå çàâèñèìîñòè îò ïðåäåëà áóôåðà ãäå âîçìîæíà ÷àñòü ôàéëà. |
- | |
1490 | mov ebx,save_file_size ;ðàçìåð ôàéëà â áàéòàõ |
- | |
1491 | - | ||
1492 | @@: sub ebx,eax |
- | |
1493 | cmp ebx,eax |
- | |
1494 | jbe .eof_file |
- | |
1495 | - | ||
1496 | inc point_next_fat_str |
- | |
1497 | mov cx,point_next_fat_str ;çàãðóçèì óêàçàòåëü íà ýëåìåíò ôàò òàáëèöû ò.å. ýòî íîìåð ôàò çàïèñè |
- | |
1498 | ;FATOffset = N + (N / 2) ò.å. ýòî óæå ó íàñ ñìåùåíèå ìû çíàåì ÷òî -íà÷èíàåòñÿ âñå ñ 3-ãî ýëåìåíòà çàïèñè ôàò |
- | |
1499 | mov dx,ax |
- | |
1500 | shr dx,1 |
- | |
1501 | add cx,dx |
- | |
1502 | - | ||
1503 | - | ||
1504 | - | ||
1505 | test si,0x1 |
- | |
1506 | jz .step2 |
- | |
1507 | shl cx,4 |
- | |
1508 | mov word[es:si],cx |
- | |
1509 | inc si |
- | |
1510 | add cx,ax |
- | |
1511 | jmp @b |
- | |
1512 | - | ||
1513 | .step2: and cx,0x0FFF |
- | |
1514 | mov word[es:si],cx |
- | |
1515 | inc si |
- | |
1516 | add cx,ax |
- | |
1517 | jmp @b |
- | |
1518 | - | ||
1519 | .eof_file: |
- | |
1520 | mov cx,0x0fff |
- | |
1521 | test si,0x1 |
- | |
1522 | jz .step3 |
- | |
1523 | shl cx,4 |
- | |
1524 | mov word[es:si],cx |
- | |
1525 | jmp .end |
- | |
1526 | - | ||
1527 | .step3: and cx,0x0FFF |
- | |
1528 | mov word[es:si],cx |
- | |
1529 | - | ||
1530 | .end: inc point_next_fat_str |
- | |
1531 | - | ||
1532 | pop di |
- | |
1533 | ;DIR_FileSize 32-áèòíûé DWORD ñîäåðæèò ðàçìåð ôàéëà â áàéòàõ. |
- | |
1534 | mov eax,save_file_size |
- | |
1535 | mov dword [es:di],eax |
- | |
1536 | - | ||
1537 | if DEBUG |
- | |
1538 | pushad |
- | |
1539 | - | ||
1540 | mov di,firstDataSect ;â ñåêòîðàõ |
- | |
1541 | sub di,size_root_dir |
- | |
1542 | ;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
- | |
1543 | shl di,9 ;imul 512 |
- | |
1544 | add di,point_to_free_root ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ. |
- | |
1545 | - | ||
1546 | push di |
- | |
1547 | - | ||
1548 | mov si,dest_name_fat |
- | |
1549 | mov cx,11 |
- | |
1550 | - | ||
1551 | ;çàïèøåì â ñòðóêòóðó èìÿ |
- | |
1552 | @@: mov al,byte [es:di] |
- | |
1553 | inc di |
- | |
1554 | mov byte [ds:si],al |
- | |
1555 | inc si |
- | |
1556 | loop @b |
- | |
1557 | - | ||
1558 | mov di,si |
- | |
1559 | inc di |
- | |
1560 | pop ax |
- | |
1561 | mov cx,0xa |
- | |
1562 | call decode |
- | |
1563 | - | ||
1564 | mov si,dest_name_fat |
- | |
1565 | call printplain |
- | |
1566 | popad |
- | |
1567 | - | ||
1568 | END IF |
- | |
1569 | - | ||
1570 | - | ||
1571 | - | ||
1572 | - | ||
1573 | - | ||
1574 | add point_to_free_root,32 ;óâåëèöèì ñìåùåíèå äî ñëåäóþùåãî çíà÷åíèÿ. |
- | |
1575 | pop es |
- | |
1576 | - | ||
1577 | } |
- | |
1578 | - | ||
1579 | - | ||
1580 | - | ||
1581 | - | ||
1582 | - | ||
1583 | macro get_firstDataSector |
- | |
1584 | ;ìàêðîñ äëÿ âû÷èñëåíèÿ ïåâîãî ñåêòîðà äàííûõ ò.å. äàííûõ ôàéëîâ â ôàòå |
- | |
1585 | ;âû÷èñëèì FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors; |
- | |
1586 | { |
- | |
1587 | mov ax,word [fat12_buffer.BPB_FATSz16] |
- | |
1588 | movzx bx,byte [fat12_buffer.BPB_NumFATs] |
- | |
1589 | imul ax,bx ;9x1=9 |
- | |
1590 | ;ax=BPB_NumFATs * FATSz |
- | |
1591 | mov bx,word [fat12_buffer.BPB_RootEntCnt] ; count of 32-byte dir. entries (224*32 = 14 sectors= 7 kb) |
- | |
1592 | shr bx,4 ;imul bx,32 and then div 512 -> in bx size in sectors |
- | |
1593 | add ax,bx ;9+14=23 |
- | |
1594 | mov size_root_dir,bx |
- | |
1595 | movzx bx,byte [fat12_buffer.BPB_RsvdSecCnt] ;add 1 for fat 16/12 |
- | |
1596 | add ax,bx |
- | |
1597 | ;ax=firstDataSector - ãäå íà÷èíàåòñÿ ïåðâûé ñåêòîðî îò 0 ñåêòîðà â ñåêòîðàõ. - ôàêòè÷åñêè = 24 ñåêòîð |
- | |
1598 | mov firstDataSect,ax ;ñîõðàíèì äëÿ âû÷èñëåíèÿ |
- | |
1599 | ; ïîëó÷èìçíà÷åíèå êëàñòåðîâ, ýòî îáúåì â êîòîðûé ìû ìîæåì çàïèñàòü äàííûå |
- | |
1600 | mov bx,word [fat12_buffer.BPB_TotSec16] |
- | |
1601 | sub bx,ax |
- | |
1602 | mov ax,bx |
- | |
1603 | movzx bx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
1604 | cwd |
- | |
1605 | idiv bx |
- | |
1606 | mov DataClasters,ax |
- | |
1607 | - | ||
1608 | if DEBUG |
- | |
1609 | pushad |
- | |
1610 | mov ax,firstDataSect ;ïåðâûé ñåêòîð äàííûõ |
- | |
1611 | mov cx,0x0a |
- | |
1612 | mov di,firstDataSect_msg |
- | |
1613 | call decode |
- | |
1614 | ;Show size |
- | |
1615 | mov si,firstDataSect_msg |
- | |
1616 | call printplain |
- | |
1617 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
1618 | mov ax,size_root_dir ;ðàçìåð ðóò äèð â ñåòîêòîðàõ |
- | |
1619 | mov cx,0x0a |
- | |
1620 | mov di,size_root_dir_msg |
- | |
1621 | call decode |
- | |
1622 | ;Show size |
- | |
1623 | mov si,size_root_dir_msg |
- | |
1624 | call printplain |
- | |
1625 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
1626 | mov ax,DataClasters ;êëàñòåðû |
- | |
1627 | mov cx,0x0a |
- | |
1628 | mov di,DataClasters_msg |
- | |
1629 | call decode |
- | |
1630 | ;Show size |
- | |
1631 | mov si,DataClasters_msg |
- | |
1632 | call printplain |
- | |
1633 | popad |
- | |
1634 | - | ||
1635 | end if |
- | |
1636 | - | ||
1637 | } |
- | |
1638 | - | ||
1639 | macro use_RamdiskPATHS |
- | |
1640 | ;ïàðñèíã ïóòè èñòî÷íèêà ôàéëîâ. |
- | |
1641 | { |
- | |
1642 | - | ||
1643 | } |
- | |
1644 | - | ||
1645 | macro use_RamdiskPATHD |
- | |
1646 | ;ïàðñèíã ïóòè íàçíà÷åíèÿ ôàéëîâ. |
- | |
1647 | { |
- | |
1648 | - | ||
1649 | } |
- | |
1650 | macro check_name_file |
- | |
1651 | ;ìàêðîñ ïðîâåðêè èìåíè íà ïîâòîð, èìÿ äîëæíî áûòü óíèêàëüíûì. |
- | |
1652 | ;âõîäíûå äàííûå: es- ñåãìåíò ãäå ëåæèò ôàéë äëÿ ïàðñèíãà ò.å. startos.ini |
- | |
1653 | ;di - óêàçàòåëü íà èìÿ ôàéëà ò.å. es:di óêàçûâàåò íà èìÿ ôàéëà íàçíà÷åíèÿ |
- | |
1654 | ;âûõîäíûå äàííûå eax =-1 èìÿ ñîâïàëî, eax=0 èìÿ íå ñîâïàëî. |
- | |
1655 | { |
- | |
1656 | local .no_equal |
- | |
1657 | local .exit |
- | |
1658 | local .loop_size_root_dir |
- | |
1659 | ;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè. |
- | |
1660 | ;ïðåîáðàçóåì â àíàëîã ôàò çàïèñè ñòî÷êó ñ èìåíåì íàçíà÷åíèÿ |
- | |
1661 | convertion_file_name ; ïðåîáðàçîâàëè èìÿ ïî íóæíûì ïðàâèëàì |
- | |
1662 | test ax,ax |
- | |
1663 | jnz .exit |
- | |
1664 | - | ||
1665 | lea si,[shot_name_fat] ; desination name of file |
- | |
1666 | - | ||
1667 | ;âû÷èñëèì óêàçàòåëü íà êîðíåâóþ äèðåêòîðèþ |
- | |
1668 | mov di,firstDataSect |
- | |
1669 | sub di,size_root_dir |
- | |
1670 | ;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
- | |
1671 | shl di,9 ;imul 512 |
- | |
1672 | ;di= Ýòî ñìåùåíèå îò íà÷àëà áóôåðà äî ðóò äèðåêòîðèè. â ïðåäåëàõ 64 êá. |
- | |
1673 | ;çàãðóçèì çíà÷åíèå - ò.å. êîë-âî ýëåìåíòîâ, êîòîðûå ìû ìîæåì ïðîñìàòðèâàòü. |
- | |
1674 | mov dx,root_dir_entry_count |
- | |
1675 | - | ||
1676 | mov ax,info_real_mode_size |
- | |
1677 | add ax,0x1000 |
- | |
1678 | - | ||
1679 | - | ||
1680 | mov gs,ax |
- | |
1681 | .loop_size_root_dir: |
- | |
1682 | DEBUG1 equ 0 |
- | |
1683 | if DEBUG1 |
- | |
1684 | pushad |
- | |
1685 | push di |
- | |
1686 | mov eax,dword[gs:di] |
- | |
1687 | lea si,[check_root_fat_+14] |
- | |
1688 | mov dword [ds:si],'----' |
- | |
1689 | mov dword [ds:si+4],'----' |
- | |
1690 | mov dword [ds:si+8],'----' |
- | |
1691 | mov dword[ds:si],eax |
- | |
1692 | mov eax,dword[gs:di+4] |
- | |
1693 | mov dword[ds:si+4],eax |
- | |
1694 | mov eax,dword[gs:di+8] |
- | |
1695 | mov dword[ds:si+8],eax |
- | |
1696 | - | ||
1697 | ; |
- | |
1698 | xor eax,eax |
- | |
1699 | mov ax,gs;point_next_fat_str |
- | |
1700 | mov cx,0x0a |
- | |
1701 | mov di,check_root_fat_ |
- | |
1702 | mov dword [di],' ' |
- | |
1703 | mov word [di+4],' ' |
- | |
1704 | call decode |
- | |
1705 | xor eax,eax |
- | |
1706 | pop ax |
- | |
1707 | mov di,(check_root_fat_+7) |
- | |
1708 | mov dword [di],' ' |
- | |
1709 | mov word [di+4],' ' |
- | |
1710 | call decode |
- | |
1711 | - | ||
1712 | ;Show size |
- | |
1713 | lea si,[check_root_fat_] |
- | |
1714 | call printplain |
- | |
1715 | - | ||
1716 | lea si,[shot_name_fat] |
- | |
1717 | call printplain |
- | |
1718 | - | ||
1719 | xor ax,ax |
- | |
1720 | int 0x16 |
- | |
1721 | popad |
- | |
1722 | end if |
- | |
1723 | - | ||
1724 | xor bx,bx |
- | |
1725 | mov cx,11 ;size of name in struct FAT |
- | |
1726 | - | ||
1727 | @@: |
- | |
1728 | mov al,byte [ds:si+bx] ;ds:si - point to name of convertion variable. |
- | |
1729 | mov ah,byte [gs:di+bx] ;gs:di - point to name in fat struct |
- | |
1730 | inc bx |
- | |
1731 | - | ||
1732 | if DEBUG |
- | |
1733 | ; pushad |
- | |
1734 | ; lea si,[check_root_fat_+14] |
- | |
1735 | ; mov dword [ds:si],'----' |
- | |
1736 | ; mov word [ds:si],ax |
- | |
1737 | ; call printplain |
- | |
1738 | - | ||
1739 | ; xor ax,ax |
- | |
1740 | ; int 0x16 |
- | |
1741 | - | ||
1742 | ; popad |
- | |
1743 | end if |
- | |
1744 | - | ||
1745 | - | ||
1746 | - | ||
1747 | cmp ah,al |
- | |
1748 | jnz .no_equal |
- | |
1749 | - | ||
1750 | ; dec cx |
- | |
1751 | ; jnz @b |
- | |
1752 | loop @b |
- | |
1753 | - | ||
1754 | ;.succesfuly: |
- | |
1755 | ;ïå÷àëüíî, òàêîå èìÿ óæå èìååòñÿ :( |
- | |
1756 | or ax,-1 |
- | |
1757 | jmp .exit |
- | |
1758 | - | ||
1759 | - | ||
1760 | .no_equal: |
- | |
1761 | add di,32 ;fat struct =32 byte |
- | |
1762 | dec dx |
- | |
1763 | jnz .loop_size_root_dir |
- | |
1764 | - | ||
1765 | ;.exit_check_name: |
- | |
1766 | and ax,0 |
- | |
1767 | - | ||
1768 | .exit: |
- | |
1769 | - | ||
1770 | if DEBUG |
- | |
1771 | pushad |
- | |
1772 | ;Show size |
- | |
1773 | lea si,[check_name_fat_msg_n] |
- | |
1774 | test ax,ax |
- | |
1775 | jz @f |
- | |
1776 | lea si,[check_name_fat_msg_y] |
- | |
1777 | call printplain |
- | |
1778 | lea si,[alarm_msg] |
- | |
1779 | @@: call printplain |
- | |
1780 | popad |
- | |
1781 | end if |
- | |
1782 | - | ||
1783 | } |
- | |
1784 | - | ||
1785 | - | ||
1786 | macro convertion_file_name |
- | |
1787 | ;ìàêðîñ êîíâåðòàöèè èìåíè, ýòî íóæíî ïîñêîëüêó ôîðìàò ïðåäñòàâëåííûé íå ñîîòâåòñâóåò ôàò è íàïðÿìóþ ðåäêî ìîæíî êîãäà èñïîëüçîâàòü |
- | |
1788 | ;ïðåîáðàçîâàíèå èìåíè òèïà hello.asm â 'HELLO ASM', â ñîîòâåòñòâèè ñ ïðàâèëàìè fat. |
- | |
1789 | ;âõîäíûå ïàðàìåòðû es:di óêàçàòåëü íà èìÿ ôàéëà êîòîðîå íóæíî ïðåîáðàçîâàòü, êîíå÷íûé áóôåð shot_name_fat |
- | |
1790 | { |
- | |
1791 | local .next_step |
- | |
1792 | local .error |
- | |
1793 | local .st1 |
- | |
1794 | local .st2 |
- | |
1795 | local .st2_l |
- | |
1796 | local .st3 |
- | |
1797 | local .st4_s |
- | |
1798 | local .st4 |
- | |
1799 | local .st5 |
- | |
1800 | - | ||
1801 | ;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè. |
- | |
1802 | ; mov di,point_to_dest_file_name âõîäíîé ïàðàìåòð |
- | |
1803 | mov si,shot_name_fat |
- | |
1804 | or first_input,-1 ;ïðè ïåðâîì âõîäå óñòàíàâëèâàåì ôëàã |
- | |
1805 | mov cx,11 ;äëèííà èìåíè â ñòóêòóðå ôàò òàáëèöû |
- | |
1806 | - | ||
1807 | @@: |
- | |
1808 | mov al,byte [es:di] |
- | |
1809 | cmp al,0xa |
- | |
1810 | jz .st4_s |
- | |
1811 | cmp al,0xd |
- | |
1812 | jz .st4_s |
- | |
1813 | cmp al,0x20 |
- | |
1814 | jz .st4_s |
- | |
1815 | - | ||
1816 | cmp al,0x20 |
- | |
1817 | jb .error |
- | |
1818 | cmp al,0x22 |
- | |
1819 | jz .error |
- | |
1820 | cmp al,0x2a |
- | |
1821 | jz .error |
- | |
1822 | cmp al,0x2b |
- | |
1823 | jz .error |
- | |
1824 | cmp al,0x2c |
- | |
1825 | jz .error |
- | |
1826 | cmp al,0x2F |
- | |
1827 | jz .error |
- | |
1828 | - | ||
1829 | cmp al,0x3a |
- | |
1830 | jz .error |
- | |
1831 | cmp al,0x3b |
- | |
1832 | jz .error |
- | |
1833 | cmp al,0x3c |
- | |
1834 | jz .error |
- | |
1835 | cmp al,0x3d |
- | |
1836 | jz .error |
- | |
1837 | cmp al,0x3E |
- | |
1838 | jz .error |
- | |
1839 | cmp al,0x3F |
- | |
1840 | jz .error |
- | |
1841 | - | ||
1842 | cmp al,0x5b |
- | |
1843 | jz .error |
- | |
1844 | cmp al,0x5c |
- | |
1845 | jz .error |
- | |
1846 | cmp al,0x5d |
- | |
1847 | jz .error |
- | |
1848 | - | ||
1849 | cmp al,0x7c |
- | |
1850 | jz .error |
- | |
1851 | - | ||
1852 | - | ||
1853 | cmp first_input,-1 |
- | |
1854 | jnz .next_step |
- | |
1855 | and first_input,0 ;ñáîðîñèì ôëàã. |
- | |
1856 | cmp al,'.' |
- | |
1857 | jz .error ;îáðàáîòêà òî÷êè, ôàéë íå ìîæåò íà÷èíàòüñÿ ñ òî÷êè |
- | |
1858 | - | ||
1859 | .next_step: |
- | |
1860 | cmp al,0x2e |
- | |
1861 | jnz .st2 ;îáðàáîòêà òî÷êè, â ñåðåäèíå ôàéëà |
- | |
1862 | ;òóò ó íàñ óñòàíîâëåí ðàçäåëèòåëü |
- | |
1863 | ;âñå îñòàëüíåî ìåñòî çàéìóò ïðîáåëû |
- | |
1864 | mov al,' ' |
- | |
1865 | - | ||
1866 | ;!fixme îáðàáîòàíû íå âñå èñêëþ÷åíèÿ :( |
- | |
1867 | cmp cl,3 ;ôîðìàò ôàéëà òàêîé GIDGIDIIASM ò.å. gidgidii.asm |
- | |
1868 | jbe .st2 |
- | |
1869 | - | ||
1870 | - | ||
1871 | .st3: |
- | |
1872 | mov byte [si],al |
- | |
1873 | inc si |
- | |
1874 | dec cx |
- | |
1875 | cmp cx,3 |
- | |
1876 | ja .st3 |
- | |
1877 | ; inc cx |
- | |
1878 | inc di |
- | |
1879 | jmp @b |
- | |
1880 | - | ||
1881 | .st2: |
- | |
1882 | cmp al,0x60 |
- | |
1883 | jbe .st2_l |
- | |
1884 | - | ||
1885 | xor al,0x20 ;ñäåëàåì çàãëàâíûå áóêâû |
- | |
1886 | .st2_l: mov byte [si],al |
- | |
1887 | inc di |
- | |
1888 | inc si |
- | |
1889 | ; dec cx |
- | |
1890 | ; jnz @b |
- | |
1891 | loop @b |
- | |
1892 | .st5: xor ax,ax |
- | |
1893 | jmp @f |
- | |
1894 | - | ||
1895 | ;;;;;;;;ôàéë çàêîí÷èëñÿ, è íóæíî âíåñòè â êîíåö ïðîáåëû |
- | |
1896 | .st4_s: mov al,' ' |
- | |
1897 | .st4: mov byte [si],al |
- | |
1898 | inc si |
- | |
1899 | loop .st4 |
- | |
1900 | jmp .st5 |
- | |
1901 | - | ||
1902 | .error: or ax,-1 |
- | |
1903 | @@: |
- | |
1904 | - | ||
1905 | if DEBUG |
- | |
1906 | pushad |
- | |
1907 | - | ||
1908 | mov si,convertion_file_name_msg_y |
- | |
1909 | test ax,ax |
- | |
1910 | jz @f |
- | |
1911 | mov si,convertion_file_name_msg_n |
- | |
1912 | @@: call printplain |
- | |
1913 | - | ||
1914 | mov si,shot_name_fat |
- | |
1915 | mov byte [si+12],0 |
- | |
1916 | call printplain |
- | |
1917 | popad |
- | |
1918 | - | ||
1919 | end if |
- | |
1920 | } |
- | |
1921 | - | ||
1922 | macro move_file_up |
- | |
1923 | ;ìàêðîñ êîòîðûé ïåðåìåùàåò çà 1 ìá ñ ïðàâèëàìè ôàò äàííûå ôàéëà. |
- | |
1924 | { |
- | |
1925 | local .st1 |
- | |
1926 | local .correct_on_byte |
- | |
1927 | ;ñåé÷àñ èìååò áûòü ñèòóàöèÿ, êîãäà BPB óæå ïåðåìåùåí çà 1 ìá, ôàò, è ðóò äèð áóäóò ïîçæå ïåðåìåùåíû, |
- | |
1928 | ;à íàì íóæíî âû÷èñëèòü ìåñòî, è ïåðåíåñòè òóäà ñîäåðæèìîå ôàéëà |
- | |
1929 | ;ïîëó÷åíîå çíà÷åíèå óêàçûâàåò â áàéòàõ íà íà÷àëî äàííûõ |
- | |
1930 | - | ||
1931 | mov ax,info_real_mode_size ; ñåãìåíò ãäå ðàñïîëîæåíû äàííûå |
- | |
1932 | mov si,table_15_87 |
- | |
1933 | mov word [si+8*2+2],ax |
- | |
1934 | ;ñìåùåíèå äî äàííûõ óæå çà 1-ì ìá |
- | |
1935 | movzx eax,firstDataSect |
- | |
1936 | movzx edx,data_offset |
- | |
1937 | add eax,edx |
- | |
1938 | - | ||
1939 | movzx ebx,word [fat12_buffer.BPB_BytsPerSec] |
- | |
1940 | movzx edx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
1941 | imul bx,dx ;ïîëó÷èì ðàçìåð êëàñòåðà |
- | |
1942 | - | ||
1943 | - | ||
1944 | - | ||
1945 | push ebx ;save bx |
- | |
1946 | - | ||
1947 | imul eax,ebx |
- | |
1948 | ; shl eax,9 ;óìíîæèì íà 512 |
- | |
1949 | - | ||
1950 | if DEBUG |
- | |
1951 | pushad |
- | |
1952 | xor eax,eax |
- | |
1953 | mov ax,info_real_mode_size |
- | |
1954 | mov cx,0x0a |
- | |
1955 | mov di,seg_where_get_data |
- | |
1956 | mov dword [di],' ' |
- | |
1957 | mov word [di+4],' ' |
- | |
1958 | call decode |
- | |
1959 | ;Show size |
- | |
1960 | mov si,seg_where_get_data |
- | |
1961 | call printplain |
- | |
1962 | popad |
- | |
1963 | - | ||
1964 | end if |
- | |
1965 | - | ||
1966 | ; mov bx,word [fat12_buffer.BPB_BytsPerSec] |
- | |
1967 | ; movzx dx,byte [fat12_buffer.BPB_SecPerClus] |
- | |
1968 | ; imul bx,dx |
- | |
1969 | ; cwd |
- | |
1970 | ; idiv bx |
- | |
1971 | - | ||
1972 | mov dl,0x10 |
- | |
1973 | - | ||
1974 | @@: cmp eax,0x00010000 |
- | |
1975 | jb @f |
- | |
1976 | - | ||
1977 | sub eax,0x00010000 |
- | |
1978 | inc dl |
- | |
1979 | jmp @b |
- | |
1980 | - | ||
1981 | - | ||
1982 | @@: mov byte [si+8*3+3],dl ;êóäà ïèñàòü |
- | |
1983 | mov word [si+8*3+2],ax |
- | |
1984 | - | ||
1985 | mov ecx,save_file_size ;ðàçìåð ôàéëà â áàéòàõ. |
- | |
1986 | cmp ecx,0x0000ffff ;ðàçìåð áëîêà ò.å. 64 êá |
- | |
1987 | jbe .correct_on_byte ;êîððåêòèðîâêà íà áàéò çíà÷åíèÿ |
- | |
1988 | - | ||
1989 | - | ||
1990 | - | ||
1991 | mov ecx,0x00010000 ;65536 |
- | |
1992 | sub save_file_size,ecx ;îòíèìèì |
- | |
1993 | ; jmp .st1 ;ïîëó÷èì 0õ8000 |
- | |
1994 | - | ||
1995 | - | ||
1996 | - | ||
1997 | - | ||
1998 | ;êîððåêòèðîâêà çíà÷åíèÿ äîëæíà áûòü âûïîëåíåíà íà ðàçìåð êëàñòåðà |
- | |
1999 | .correct_on_byte: |
- | |
2000 | ;/óçíàåì ðàçìåð êëàñòåðà |
- | |
2001 | pop eax ;restore size of claster |
- | |
2002 | push ecx |
- | |
2003 | @@: inc data_offset |
- | |
2004 | - | ||
2005 | cmp eax,ecx |
- | |
2006 | jae @f |
- | |
2007 | sub ecx,eax |
- | |
2008 | jmp @b |
- | |
2009 | @@: pop ecx |
- | |
2010 | - | ||
2011 | - | ||
2012 | - | ||
2013 | - | ||
2014 | test ecx,0x1 |
- | |
2015 | jz .st1 |
- | |
2016 | inc ecx |
- | |
2017 | .st1: shr ecx,1 ; ïðåîáðàçîâàòü çíà÷åíèå äëÿ 0x87 function |
- | |
2018 | - | ||
2019 | ;ïåðåíåñåì áëîê çà 1 ìá |
- | |
2020 | push es |
- | |
2021 | push ds |
- | |
2022 | pop es |
- | |
2023 | - | ||
2024 | mov ah, 0x87 |
- | |
2025 | int 0x15 |
- | |
2026 | pop es |
- | |
2027 | - | ||
2028 | if DEBUG |
- | |
2029 | pusha |
- | |
2030 | ; mov ax,point_next_fat_str |
- | |
2031 | mov cx,0x0a |
- | |
2032 | mov di,return_code_af_move |
- | |
2033 | call decode |
- | |
2034 | ;Show size |
- | |
2035 | mov si,return_code_af_move |
- | |
2036 | call printplain |
- | |
2037 | popa |
- | |
2038 | - | ||
2039 | end if |
- | |
2040 | - | ||
2041 | } |
- | |
2042 | - | ||
2043 | - | ||
2044 | macro move_up_fat_and_root_d |
- | |
2045 | ;ìàêðîñ, êîòîðûé ïîçâîëÿåò ïåðåíåñòè âûøå 1 ìá â ñòðóêòóðó îáðàçà ôàò òàáëèöó è ðóò äèðåêòîðèþ |
- | |
2046 | { |
- | |
2047 | local .st1 |
- | |
2048 | - | ||
2049 | mov ax,info_real_mode_size |
- | |
2050 | add ax,0x1000 |
- | |
2051 | - | ||
2052 | mov si,table_15_87 |
- | |
2053 | mov word [si+8*2+2],ax |
- | |
2054 | ;ñìåùåíèå äî äàííûõ |
- | |
2055 | mov ax,512 |
- | |
2056 | mov word [si+8*3+2],ax |
- | |
2057 | ;fixme! òóò íåîáõîäèìî ñäåëàòü ïîäåðæêó ò.å. ôîðìèðîâàòü ñìåùåíèå ôàéëà â óæå çàïèñàííûõ äàííûõ. |
- | |
2058 | - | ||
2059 | movzx ecx,word [fat12_buffer.BPB_FATSz16] |
- | |
2060 | movzx bx,byte [fat12_buffer.BPB_NumFATs] |
- | |
2061 | imul cx,bx ;9x1=9 |
- | |
2062 | - | ||
2063 | add cx,size_root_dir ;ðàçìåð êîðíåâîé äèððåêòîðèè |
- | |
2064 | shl ecx,9 ;imul 512 |
- | |
2065 | - | ||
2066 | - | ||
2067 | ;êîððåêòèðîâêà çíà÷åíèÿ |
- | |
2068 | test ecx,0x1 |
- | |
2069 | jz .st1 |
- | |
2070 | inc ecx |
- | |
2071 | .st1: shr ecx,1 |
- | |
2072 | - | ||
2073 | push es |
- | |
2074 | push ds |
- | |
2075 | pop es |
- | |
2076 | - | ||
2077 | mov ah, 0x87 |
- | |
2078 | int 0x15 |
- | |
2079 | pop es |
- | |
2080 | - | ||
2081 | if DEBUG |
- | |
2082 | pusha |
- | |
2083 | ; mov ax,point_next_fat_str |
- | |
2084 | mov cx,0x0a |
- | |
2085 | mov di,return_code_af_fat_m |
- | |
2086 | call decode |
- | |
2087 | ;Show size |
- | |
2088 | mov si,return_code_af_fat_m |
- | |
2089 | call printplain |
- | |
2090 | popa |
- | |
2091 | - | ||
2092 | end if |
- | |
2093 | - | ||
2094 | } |
- | |
2095 | > |
1 | ; Copyright (c) 2009, |
- | 2 | ; All rights reserved. |
|
- | 3 | ; |
|
- | 4 | ; Redistribution and use in source and binary forms, with or without |
|
- | 5 | ; modification, are permitted provided that the following conditions are met: |
|
- | 6 | ; * Redistributions of source code must retain the above copyright |
|
- | 7 | ; notice, this list of conditions and the following disclaimer. |
|
- | 8 | ; * Redistributions in binary form must reproduce the above copyright |
|
- | 9 | ; notice, this list of conditions and the following disclaimer in the |
|
- | 10 | ; documentation and/or other materials provided with the distribution. |
|
- | 11 | ; * Neither the name of the |
|
- | 12 | ; names of its contributors may be used to endorse or promote products |
|
- | 13 | ; derived from this software without specific prior written permission. |
|
- | 14 | ; |
|
- | 15 | ; THIS SOFTWARE IS PROVIDED BY Alexey Teplov nickname |
|
- | 16 | ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
- | 17 | ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
- | 18 | ; DISCLAIMED. IN NO EVENT SHALL |
|
- | 19 | ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
- | 20 | ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
- | 21 | ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
- | 22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
- | 23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|
- | 24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
- | 25 | ;***************************************************************************** |
|
- | 26 | ||
- | 27 | ; â ýòîé ñåêöèè èäåò ðàçáîð ïàðàìåòðîâ óêàçàòåëü íà ñåêöèþ õðàíèòüñÿ â point_default |
|
- | 28 | ;òèïû îøèáîê ïðè îáðàáîòêå ìàêðîñà |
|
- | 29 | ;Ìàêðîñ RamdiskFS |
|
- | 30 | ;/îïðåäåëåíèå ôëàãîâ â çàïèñè êîðíåâîé äèðåêòîðèè |
|
- | 31 | ATTR_READ_ONLY equ 0x01 |
|
- | 32 | ATTR_HIDDEN equ 0x02 |
|
- | 33 | ATTR_SYSTEM equ 0x04 |
|
- | 34 | ATTR_VOLUME_ID equ 0x08 |
|
- | 35 | ATTR_DIRECTORY equ 0x10 |
|
- | 36 | ATTR_ARCHIVE equ 0x20 |
|
- | 37 | ||
- | 38 | ||
- | 39 | ||
- | 40 | show_error_1 equ 0x1 ;êîí÷èëèñü äàííûå - íå çàïëàíèðîâàííûé êîíåö ñåêöèè |
|
- | 41 | show_error_2 equ 0x2 ;íåò çàâåðøàþùåãî ñèìâîëà â ðàçìåðå ðàì äèñêà. |
|
- | 42 | show_error_3 equ 0x4 ; ðàì äèñê áóäåò èìåòü ðàçìåð =64 êá. |
|
- | 43 | show_error_4 equ 0x8 ; |
|
- | 44 | ||
- | 45 | macro use_parse_def_sect |
|
- | 46 | { |
|
- | 47 | mov di, point_default |
|
- | 48 | push ini_data_ |
|
- | 49 | pop es |
|
- | 50 | mov si, point_to_point_def |
|
- | 51 | sub si, 2 |
|
- | 52 | mov cx, [si] ;çàãðóçèì óêàçàòåëü íàñëåäóþùèþ ñåêöèþ |
|
- | 53 | ||
- | 54 | xor ax, ax ;îáíóëèì àx äëÿ î÷èñòêè ôëàãîâ |
|
- | 55 | ||
- | 56 | sub cx, di ;âîò òåïåðü èìååì èñòèíûé ðàçìåð |
|
- | 57 | mov save_cx_d, cx ;ñîõðàíèì çíà÷åíèå cx ñâîåé ïåðåìåííîé |
|
- | 58 | ;îáíóëèì ïåðåìåííóþ ôëàãîâ, ýòî íåîáõîäèìî, äëÿ òîãî, ÷òî áû èçáåæàòü îáðàáîòêó ïîâòîðÿþùèõñÿ çíà÷åíèé |
|
- | 59 | ||
- | 60 | mov status_flag, ax |
|
- | 61 | ;;;; |
|
- | 62 | ;ÂÕîä â îáðàáîòêó ïàðñèíãà çíà÷åíèé ñåêöèé. es:di - óêàçàòåëü íà íà÷àëî ñåêöèè cx ðàçìåð ñåêöèè äîñòóïíîé äëÿ ïàðñèíãà |
|
- | 63 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 64 | ;ñîãëàøåíèå íå ðàçðóøàåì bp, es, cs, sp |
|
- | 65 | ;use_Loader_Image ;çàãðóçèòü îáðàç âûøå 1 ìá |
|
- | 66 | use_RamdiskFS |
|
- | 67 | ;ïðîâåðÿåòñÿ ñàìûé ïîñëåäíèé. |
|
- | 68 | use_LoaderModule ;îñîáåííîñòü - ïåðåäàåò óïðàâëåíèå íà çàãðóæåííûé ìîäóëü. |
|
- | 69 | } |
|
- | 70 | ||
- | 71 | macro use_LoaderModule |
|
- | 72 | ;êàê âàðèàíò ñåé÷àñ èñïîëüçóåòñÿ ìîäåëü, ïðè çàãðóçêå ìîäóëÿ íà íåãî ïåðåäàåòñÿ óïðàâëåíèå, ðåøåíèå âðåìåíîå |
|
- | 73 | ;óïðàâëåíèå áóäåò ïåðåäàâàòüñÿ òîëüêî ïîñëå îáðàáîòêè âñåé ñåêöèè |
|
- | 74 | { |
|
- | 75 | local .found_end_str |
|
- | 76 | ||
- | 77 | mov di, point_default ;restore value |
|
- | 78 | mov cx, save_cx_d |
|
- | 79 | ;îáðàáîòêà êîíñòðóêöèè òèïà LoaderModule=kord/kolibri.ldm |
|
- | 80 | .start_p_LM: |
|
- | 81 | call get_firs_sym ;get first symbol on new line |
|
- | 82 | test cx, cx |
|
- | 83 | jz ._afterLoaderModule ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 84 | cmp al, 'L' |
|
- | 85 | jnz .start_p_LM |
|
- | 86 | ;ïðîâåðêà íà çíà÷åíèå LoaderModule |
|
- | 87 | ; parse_LoaderModule |
|
- | 88 | mov bx, cx |
|
- | 89 | mov ax, di |
|
- | 90 | ||
- | 91 | mov si, parse_LoaderModule |
|
- | 92 | mov cx, parse_LoaderModule_e - parse_LoaderModule |
|
- | 93 | repe cmpsb |
|
- | 94 | jnz .rest_value_loop_LM ;is not compare |
|
- | 95 | ||
- | 96 | sub bx, parse_LoaderModule_e - parse_LoaderModule;correct cx |
|
- | 97 | add bx, cx |
|
- | 98 | mov cx, bx |
|
- | 99 | ||
- | 100 | test status_flag, flag_found_LM ;îöåíêà ôëàãîâ |
|
- | 101 | jz .correct_is_not_set_LM |
|
- | 102 | ||
- | 103 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 104 | ; call printplain |
|
- | 105 | ; jmp .get_next_str |
|
- | 106 | ||
- | 107 | .correct_is_not_set_LM: |
|
- | 108 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 109 | repe scasb |
|
- | 110 | jcxz .rest_value_loop_LM ;not found param timeout |
|
- | 111 | ||
- | 112 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 113 | jnz .rest_value_loop_LM |
|
- | 114 | ||
- | 115 | repe scasb ;cut ' ' |
|
- | 116 | inc cx |
|
- | 117 | dec di |
|
- | 118 | ;di óêàçûâàåò íà íà÷àëî áëîêà èíôîðìàöèè, â cx äëèííà äî êîíöà ñåêöèè. |
|
- | 119 | ;ïîñëå çàãðóçêè çàíîñèòüñÿ çíà÷åíèå çàíÿòîé ïàìÿòè. |
|
- | 120 | ;äëÿ òîãî ÷òî áû çàãðóçèòü ìîäóëü, âîñïîëüçóåìñÿ callback ñåðâèñîì |
|
- | 121 | ;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0 |
|
- | 122 | ;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà LoaderModule = kord/kernel.loader |
|
- | 123 | ;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'kord/kernel.loader',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
|
- | 124 | ;ñîõðàíèëè ïåâûå 2 word |
|
- | 125 | push dword [es:di-6] |
|
- | 126 | lea si, [di-6] |
|
- | 127 | ||
- | 128 | push word [es:di-2] |
|
- | 129 | xor ax, ax |
|
- | 130 | mov word [es:di-6], ax ;âíîñèì íóæíûå çíà÷åíèÿ |
|
- | 131 | ;info_real_mode_size ðàçìåð è óêàçàòåëü íà îáëàñòü â êîòîðóþ ìîæíî çàãðóçèòüñÿ |
|
- | 132 | mov ax, info_real_mode_size ;0x3000 ;ñëåäóþùèé ñåãìåíò çà äàííûìè |
|
- | 133 | ||
- | 134 | ||
- | 135 | mov word [es:di-4], ax |
|
- | 136 | mov word [es:di-2], 16 ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ñ÷èòàåì |
|
- | 137 | ;;;;;; ïîèñê êîíöà ñòðî÷êè |
|
- | 138 | @@: |
|
- | 139 | mov al, byte [es:di] |
|
- | 140 | cmp al, ' ' |
|
- | 141 | jz .found_end_str |
|
- | 142 | cmp al, 0xa |
|
- | 143 | jz .found_end_str |
|
- | 144 | cmp al, 0xd |
|
- | 145 | jz .found_end_str |
|
- | 146 | inc di |
|
- | 147 | dec cx |
|
- | 148 | jnz @b |
|
- | 149 | ;;;not found äîïóñòèì,÷òî ýòî êîíåö ôàéëà è îí íå èìååò ïðèâû÷íîãî çàâåðåøíèÿ ñòðîêè |
|
- | 150 | .found_end_str: |
|
- | 151 | ||
- | 152 | push word [es:di] |
|
- | 153 | xor ax, ax |
|
- | 154 | mov word [es:di], ax |
|
- | 155 | ; xor ax,ax ; function 1 - read file |
|
- | 156 | mov di, si ;file_data |
|
- | 157 | inc ax |
|
- | 158 | push si |
|
- | 159 | push es |
|
- | 160 | ||
- | 161 | push es |
|
- | 162 | pop ds |
|
- | 163 | push cs |
|
- | 164 | pop es |
|
- | 165 | ||
- | 166 | call far dword [es:loader_callback] |
|
- | 167 | ||
- | 168 | push cs |
|
- | 169 | pop ds |
|
- | 170 | ||
- | 171 | pop es |
|
- | 172 | pop si |
|
- | 173 | ||
- | 174 | test bx, bx |
|
- | 175 | jnz .error_LM |
|
- | 176 | ||
- | 177 | ||
- | 178 | jmp far dword [es:si] |
|
- | 179 | ||
- | 180 | ||
- | 181 | .error_LM: |
|
- | 182 | call error.LoaderModule |
|
- | 183 | .rest_value_loop_LM: |
|
- | 184 | mov di, ax |
|
- | 185 | mov cx, bx |
|
- | 186 | jmp .start_p_LM |
|
- | 187 | ||
- | 188 | ._afterLoaderModule: |
|
- | 189 | } |
|
- | 190 | ||
- | 191 | macro use_RamdiskFS |
|
- | 192 | ; ôîðìèðîâàíèå ðàì äèñêà, + îáðàáîòêà âñåãî ñâÿçàííîãî. |
|
- | 193 | { |
|
- | 194 | if DEBUG |
|
- | 195 | local ._not_memory_in_sys |
|
- | 196 | ;//////// clear window |
|
- | 197 | mov ax, 3 |
|
- | 198 | int 0x10 |
|
- | 199 | ;\\\\\\\\\ clear window is end |
|
- | 200 | mov si, ramdiskFS_st |
|
- | 201 | call printplain |
|
- | 202 | end if |
|
- | 203 | ; îáíóëèì ðåãèñòð ñîñòîÿíèÿ îøèáîê |
|
- | 204 | xor ax, ax |
|
- | 205 | mov show_errors_sect, ax |
|
- | 206 | use_free_memory ; óçíàåì êàêîãî îáúåìà ó íàñ äîñòóïíà ïàìÿòü. çíà÷åíèå âîçàðàùàåòñÿ â ax |
|
- | 207 | ;óçíàåì ñêîëüêî ó íàñ åñòü ïàìÿòè è ñìîæåì ëè ìû ñôîðìèðîâàòü íóæíîãî ðàçìåðà ðàì äèñê. |
|
- | 208 | use_RamdiskSize ;çíà÷åíèå âîçâðàùàåòñÿ â bx |
|
- | 209 | cmp free_ad_memory, bx ; ðàçìåðíîñòü â êá. |
|
- | 210 | jbe ._not_memory_in_sys |
|
- | 211 | movzx eax, bx |
|
- | 212 | shl eax, 10 ;*1024 = get size in byte |
|
- | 213 | mov save_ramdisksize, eax ; ñîðõàíèì ðàçìåð â byte |
|
- | 214 | ||
- | 215 | get_type_FS ;ïîëó÷èì òèï ôàéëîâîé ñèñòåìû + ñîçäàäèì åå |
|
- | 216 | ||
- | 217 | ||
- | 218 | ._not_memory_in_sys: |
|
- | 219 | ||
- | 220 | if DEBUG |
|
- | 221 | ;pause |
|
- | 222 | xor ax, ax |
|
- | 223 | int 0x16 |
|
- | 224 | end if |
|
- | 225 | } |
|
- | 226 | macro use_RamdiskSize |
|
- | 227 | { |
|
- | 228 | local .start_p_RS |
|
- | 229 | local .correct_is_not_set_RS |
|
- | 230 | local .CS |
|
- | 231 | local .correct_val_RS |
|
- | 232 | local .correct_size_RS |
|
- | 233 | local .rest_value_loop_RS |
|
- | 234 | local .end_get_RS_ERROR_1 |
|
- | 235 | local .end_get_RS_ERROR_2 |
|
- | 236 | local ._end_parse_RS |
|
- | 237 | ;îáðàáàòûâàåòñÿ ðàçìåð ôîðìèðóåìîãî ðàì äèñêà |
|
- | 238 | ;çàãðóçèì íà÷àëî ñåêöèè, ò.ê. áóäåì ïðîñìàòðèâàòü ñ íà÷àëà è âñþ ñåêöèþ |
|
- | 239 | mov di, point_default ;restore value |
|
- | 240 | mov cx, save_cx_d |
|
- | 241 | .start_p_RS: |
|
- | 242 | call get_firs_sym ;get first symbol on new line |
|
- | 243 | test cx, cx |
|
- | 244 | jz ._end_parse_RS ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 245 | cmp al, 'R' |
|
- | 246 | jnz .start_p_RS |
|
- | 247 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
|
- | 248 | ; parse_RamdiskSize |
|
- | 249 | mov bx, cx |
|
- | 250 | mov ax, di |
|
- | 251 | ||
- | 252 | mov si, parse_RamdiskSize |
|
- | 253 | mov cx, parse_RamdiskSize_e - parse_RamdiskSize |
|
- | 254 | repe cmpsb |
|
- | 255 | jnz .rest_value_loop_RS ;is not compare |
|
- | 256 | ||
- | 257 | sub bx, parse_RamdiskSize_e - parse_RamdiskSize;correct cx |
|
- | 258 | add bx, cx |
|
- | 259 | mov cx, bx |
|
- | 260 | ||
- | 261 | test status_flag, flag_found_RS ;îöåíêà ôëàãîâ |
|
- | 262 | jz .correct_is_not_set_RS |
|
- | 263 | ||
- | 264 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 265 | ; call printplain |
|
- | 266 | ; jmp .get_next_str |
|
- | 267 | ||
- | 268 | .correct_is_not_set_RS: |
|
- | 269 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 270 | repe scasb |
|
- | 271 | jcxz .end_get_RS_ERROR_1 ;not found param |
|
- | 272 | ||
- | 273 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 274 | jnz .start_p_RS ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
|
- | 275 | ||
- | 276 | repe scasb ;cut ' ' |
|
- | 277 | inc cx |
|
- | 278 | dec di |
|
- | 279 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 280 | ;Òóò íóæíî ïðåîáðàçîâûâàòü ñòðî÷êó â öèôðîâîå çíà÷åíèå. |
|
- | 281 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 282 | xor bx, bx |
|
- | 283 | mov cx, 5 |
|
- | 284 | @@: |
|
- | 285 | mov al, byte [es:di] |
|
- | 286 | cmp al, '0' |
|
- | 287 | jb .CS |
|
- | 288 | cmp al, '9' |
|
- | 289 | jbe .correct_val_RS |
|
- | 290 | .CS: |
|
- | 291 | cmp al, 'K' |
|
- | 292 | jz .correct_size_RS |
|
- | 293 | jmp .end_get_RS_ERROR_2 |
|
- | 294 | .correct_val_RS: |
|
- | 295 | imul bx, 10 |
|
- | 296 | xor al, 0x30 |
|
- | 297 | add bl, al |
|
- | 298 | inc di |
|
- | 299 | loop @b |
|
- | 300 | ||
- | 301 | .correct_size_RS: |
|
- | 302 | ;âîçìîæåí 1 âàðèàíò, êîãäà ðàçìåð çàäàí â K êèëëîáàéòàõ |
|
- | 303 | ;âíóòðåííûé ôîðìàò äàííûõ ýòî êîë-âî çàïðîùåíîé ïàìÿòè â êá. |
|
- | 304 | test bx, bx |
|
- | 305 | jnz @f ;åñëè çíà÷åíèå îòëè÷íî îò 0 |
|
- | 306 | ;;;;;ñîîáùåíèå îá îøèáêå, ðàçìåð "íàéäåíîãî" áëîêà =0 ìèíèìàëüíî ìû äîëæíû |
|
- | 307 | ;óñòàíîâèòü 64 êá ðàçìåð ðàì äèñêà. |
|
- | 308 | or show_errors_sect, show_error_3 |
|
- | 309 | mov bx, 64 |
|
- | 310 | @@: |
|
- | 311 | jmp ._end_parse_RS |
|
- | 312 | ||
- | 313 | ||
- | 314 | .rest_value_loop_RS: |
|
- | 315 | mov di, ax |
|
- | 316 | mov cx, bx |
|
- | 317 | jmp .start_p_RS |
|
- | 318 | ||
- | 319 | ||
- | 320 | ||
- | 321 | .end_get_RS_ERROR_1: |
|
- | 322 | ;ñîîáùåíèå îá îøèáêå - äàííûé ó÷àñòîê êîäà íå áûë êîððåêòíî îáðàáîòàí :( |
|
- | 323 | or show_errors_sect, show_error_1 |
|
- | 324 | jmp ._end_parse_RS |
|
- | 325 | .end_get_RS_ERROR_2: |
|
- | 326 | or show_errors_sect, show_error_2 |
|
- | 327 | ||
- | 328 | ._end_parse_RS: |
|
- | 329 | if DEBUG |
|
- | 330 | pusha |
|
- | 331 | movzx eax, bx |
|
- | 332 | mov cx, 0x0a |
|
- | 333 | mov di, RamdiskSize_msg |
|
- | 334 | mov dword[ds:di], ' ' |
|
- | 335 | mov word [ds:di+4], ' ' |
|
- | 336 | call decode |
|
- | 337 | ;Show size |
|
- | 338 | mov si, RamdiskSize_msg |
|
- | 339 | call printplain |
|
- | 340 | ||
- | 341 | popa |
|
- | 342 | end if |
|
- | 343 | ||
- | 344 | } |
|
- | 345 | ||
- | 346 | macro use_free_memory |
|
- | 347 | { |
|
- | 348 | local _support_function_use_free_memory |
|
- | 349 | ;ìàêðîñ äëÿ ïîëó÷åíèÿ îáùåãî ÷èñëà äîñòóïíîé ïàìÿòè â êá, äëÿ ôîðìèðîâàíèÿ ðàì äèñêà çà ïðåäåëàìè 1 ìá. |
|
- | 350 | ;èñïîëüçóåòñÿ 0õ88 ôóíêöèÿ 0õ15 ïðåðûâàíèÿ |
|
- | 351 | ; åñëè ïîääåðæèâàåòñÿ ôóíêöèÿ, òî â ax çíà÷åíèå â êá, åñëè íåò, òî â ax=0 |
|
- | 352 | mov ah, 0x88 ;ah,0x88 |
|
- | 353 | int 0x15 |
|
- | 354 | jnc ._support_function_use_free_memory |
|
- | 355 | xor ax, ax |
|
- | 356 | ;âîçâðàùàåò â ax ÷èñëî â êá |
|
- | 357 | ._support_function_use_free_memory: |
|
- | 358 | mov free_ad_memory, ax ; åñëè íå ïîääåðæèâàåòñÿ áèîñîì, òî â ax=0 |
|
- | 359 | if DEBUG |
|
- | 360 | pushad |
|
- | 361 | movzx eax, ax |
|
- | 362 | mov cx, 0x0a |
|
- | 363 | mov di, free_memory_msg |
|
- | 364 | mov dword[ds:di], ' ' |
|
- | 365 | mov word [ds:di+4], ' ' |
|
- | 366 | call decode |
|
- | 367 | ;Show size |
|
- | 368 | mov si, free_memory_msg |
|
- | 369 | call printplain |
|
- | 370 | ||
- | 371 | popad |
|
- | 372 | end if |
|
- | 373 | ||
- | 374 | ||
- | 375 | ||
- | 376 | ||
- | 377 | } |
|
- | 378 | macro show_ERRORS |
|
- | 379 | { |
|
- | 380 | ||
- | 381 | } |
|
- | 382 | ||
- | 383 | macro get_type_FS ;ïîëó÷èòü è ñîçäàòü îáðàç äëÿ çàäàííîé RFS. |
|
- | 384 | { |
|
- | 385 | mov di, point_default ;restore value |
|
- | 386 | mov cx, save_cx_d |
|
- | 387 | .start_g_tpe_RFS: |
|
- | 388 | call get_firs_sym ;get first symbol on new line |
|
- | 389 | test cx, cx |
|
- | 390 | jz ._end_parse_FRS ;._end_get_type_RFS ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 391 | cmp al, 'R' |
|
- | 392 | jnz .start_g_tpe_RFS |
|
- | 393 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
|
- | 394 | ; parse_RamdiskSize |
|
- | 395 | mov bx, cx |
|
- | 396 | mov ax, di |
|
- | 397 | ||
- | 398 | mov si, parse_RamdiskFS |
|
- | 399 | mov cx, parse_RamdiskFS_e - parse_RamdiskFS |
|
- | 400 | repe cmpsb |
|
- | 401 | jnz .start_g_tpe_RFS_rest_v ;is not compare |
|
- | 402 | ||
- | 403 | sub bx, parse_RamdiskFS_e - parse_RamdiskFS;correct cx |
|
- | 404 | add bx, cx |
|
- | 405 | mov cx, bx |
|
- | 406 | ||
- | 407 | test status_flag, flag_found_GTRFMS ;îöåíêà ôëàãîâ |
|
- | 408 | jz .correct_is_not_set_FRS |
|
- | 409 | ||
- | 410 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 411 | ; call printplain |
|
- | 412 | ; jmp .get_next_str |
|
- | 413 | ||
- | 414 | .correct_is_not_set_FRS: |
|
- | 415 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 416 | repe scasb |
|
- | 417 | test cx, cx |
|
- | 418 | jz .end_get_FRS_ERROR_1 ;not found param |
|
- | 419 | ||
- | 420 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 421 | jnz .start_g_tpe_RFS ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
|
- | 422 | ||
- | 423 | repe scasb ;cut ' ' |
|
- | 424 | inc cx |
|
- | 425 | dec di |
|
- | 426 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 427 | ;Òóò íóæíî ïðåîáðàçîâûâàòü ñòðî÷êó â öèôðîâîå çíà÷åíèå. |
|
- | 428 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 429 | mov bx, cx |
|
- | 430 | mov ax, di |
|
- | 431 | ||
- | 432 | mov si, parse_RFS_FAT |
|
- | 433 | mov cx, parse_RFS_FAT_e - parse_RFS_FAT |
|
- | 434 | repe cmpsb |
|
- | 435 | jnz .krfs_cmp ;is not compare |
|
- | 436 | ||
- | 437 | make_FAT_RamFS ;ñäåëàòü |
|
- | 438 | ||
- | 439 | if DEBUG |
|
- | 440 | pusha |
|
- | 441 | mov si, make_fat12_RFS_msg |
|
- | 442 | call printplain |
|
- | 443 | popa |
|
- | 444 | end if |
|
- | 445 | jmp ._end_parse_FRS |
|
- | 446 | ||
- | 447 | .krfs_cmp: |
|
- | 448 | mov cx, bx |
|
- | 449 | mov di, ax |
|
- | 450 | ||
- | 451 | mov si, parse_RFS_KRFS |
|
- | 452 | mov cx, parse_RFS_KRFS_e - parse_RFS_KRFS |
|
- | 453 | repe cmpsb |
|
- | 454 | ; jnz @f ;is not compare |
|
- | 455 | ||
- | 456 | jmp ._end_parse_FRS |
|
- | 457 | ||
- | 458 | ||
- | 459 | .start_g_tpe_RFS_rest_v: |
|
- | 460 | mov cx, bx |
|
- | 461 | mov di, ax |
|
- | 462 | jmp .start_g_tpe_RFS |
|
- | 463 | ||
- | 464 | ||
- | 465 | ||
- | 466 | .end_get_FRS_ERROR_1: |
|
- | 467 | ;ñîîáùåíèå îá îøèáêå - äàííûé ó÷àñòîê êîäà íå áûë êîððåêòíî îáðàáîòàí :( |
|
- | 468 | or show_errors_sect, show_error_1 |
|
- | 469 | jmp ._end_parse_FRS |
|
- | 470 | .end_get_FRS_ERROR_2: |
|
- | 471 | or show_errors_sect, show_error_2 |
|
- | 472 | ||
- | 473 | ._end_parse_FRS: |
|
- | 474 | if DEBUG |
|
- | 475 | pusha |
|
- | 476 | mov si, get_type_FS_msg |
|
- | 477 | call printplain |
|
- | 478 | popa |
|
- | 479 | end if |
|
- | 480 | ||
- | 481 | ||
- | 482 | ||
- | 483 | } |
|
- | 484 | macro make_FAT_RamFS |
|
- | 485 | { |
|
- | 486 | local .RS1 |
|
- | 487 | local .fat12 |
|
- | 488 | local .fat16 |
|
- | 489 | ; ìû äîëæíû ñôîðìèðîâàòü â íà÷àëüíûé îáðàç Ram FS, à ïîòîì çàïèñàòü åãî çà îáëàñòü âûøå 1 ìá.. |
|
- | 490 | ;äëÿ ñëó÷àÿ ñ FAT12 |
|
- | 491 | ; mov di,fat12_buffer ;ds äîëæåí áûòü = cs |
|
- | 492 | ;es:di - óêàçûâàþò íà íà÷àëî áëîêà äëÿ ôîðìèðîâàíèÿ ðàì ôñ. |
|
- | 493 | use_RamdiskSector ;âîçðàùàåìîå çíà÷åíèå â ax ðàçìåð ñåêòîðà â áàéòàõ |
|
- | 494 | cmp ax, 4096;ïî ñïåöèôèêàöèè çíà÷åíèå äîëæíî áûòü â ïðåäåëàõ îò 1 äî 4096 |
|
- | 495 | ja .RS1 |
|
- | 496 | test ax, ax |
|
- | 497 | jnz @f ;îøèáêà åñëè ñþäà ïðûãíóëè âñå òàêè ... |
|
- | 498 | ||
- | 499 | .RS1: |
|
- | 500 | mov word [fat12_buffer.BPB_BytsPerSec], 512 |
|
- | 501 | ;;;;;;;;;;ñêàæåì ÷òî ïî äåôîëòó áóäåì þçàòü çíà÷åíèå... |
|
- | 502 | @@: |
|
- | 503 | mov word [fat12_buffer.BPB_BytsPerSec], ax;òóò âñå îê |
|
- | 504 | ||
- | 505 | ;BPB_SecPerClus êîë-âî ñåêòîðîâ â êëàñòåðå |
|
- | 506 | use_RamdiskCluster ;âîçðàùàåìîå çíà÷åíèå â al |
|
- | 507 | cmp al, 128 |
|
- | 508 | ja @f |
|
- | 509 | ; test al,0x1 ;ïðîâåðêà íà êðàòíîñòü ) |
|
- | 510 | ; jnz @f |
|
- | 511 | ||
- | 512 | mov byte [fat12_buffer.BPB_SecPerClus], al |
|
- | 513 | ||
- | 514 | ;incorrect value will be set dafault |
|
- | 515 | ||
- | 516 | ;íèæå íåêîððåêòíîå çíà÷åíèå â ò.ê. ðàçìåð êðàòåí 2 è â äèàïàçîíå îò 1 äî 128 âêëþ÷èòåëüíî |
|
- | 517 | ; ìû äîëæíû ðóãíóòüñÿ íà ýòî |
|
- | 518 | ;@@: ;mov byte [fat12_buffer.BPB_SecPerClus],1 |
|
- | 519 | ||
- | 520 | ;;;;; îïðåäåëåèì êàêàÿ ó íàñ áóäåò èñïîëüçîâàòüñÿ FAT |
|
- | 521 | ;ïî óñëîâèþ, fat12<4085<=fat16<65525<=fat32 |
|
- | 522 | ; fat12_buffer.BPB_BytsPerSec*fat12_buffer.BPB_SecPerClus = êîë-âî ñåêòîðîâ |
|
- | 523 | movzx eax, word [fat12_buffer.BPB_BytsPerSec] |
|
- | 524 | movzx ebx, byte [fat12_buffer.BPB_SecPerClus] |
|
- | 525 | ||
- | 526 | imul ebx, eax;òóò ðàçìåðíîñòü ñåêòîðà |
|
- | 527 | mov eax, save_ramdisksize ;ðàçìåð çàïðîøåííîãî ðàì äèñêà â áàéòàõ |
|
- | 528 | cdq |
|
- | 529 | idiv ebx |
|
- | 530 | ;;;;;;;; ñåé÷àñ ÷àñòíîå â eax, à îñòàòîê â edx |
|
- | 531 | ;ïîëó÷èì êîë-âî ñåêòîðîâ, è ìîæåì óæå îïðåäåëèòü òèï FAT êîòîðóþ íóæíî äåëàòü. |
|
- | 532 | cmp eax, 4085 |
|
- | 533 | jb .fat12 |
|
- | 534 | cmp eax, 65525 |
|
- | 535 | jb .fat16 |
|
- | 536 | ;;;;;;;;;;;;;;;;;;;;;;;; òóò fat32 |
|
- | 537 | mov set_ramfs, 32 ;óñòàíîâèì òèï ôàéëîâîé ñèñòåìû |
|
- | 538 | mov word [fat12_buffer.BPB_RsvdSecCnt], 32 |
|
- | 539 | xor eax, eax |
|
- | 540 | mov word [fat12_buffer.BPB_RootEntCnt], ax |
|
- | 541 | mov word [fat12_buffer.BPB_TotSec16], ax |
|
- | 542 | mov dword [fat12_buffer.BPB_TotSec32], eax |
|
- | 543 | ||
- | 544 | ||
- | 545 | .fat16: ;fat16 |
|
- | 546 | ;Äëÿ FAT12 è FAT16 äèñêîâ ýòî ïîëå ñîäåðæèò êîëè÷åñòâî ñåêòîðîâ, à BPB_TotSec32 ðàâíî 0, åñëè çíà÷åíèå <óìåùàåòñÿ> (ìåíüøå 0x10000). |
|
- | 547 | jmp $ |
|
- | 548 | mov set_ramfs, 16 ;óñòàíîâèì òèï ôàéëîâîé ñèñòåìû |
|
- | 549 | movzx ebx, byte [fat12_buffer.BPB_SecPerClus] |
|
- | 550 | imul eax, ebx |
|
- | 551 | ||
- | 552 | cmp eax, 0x10000 |
|
- | 553 | jae @f |
|
- | 554 | mov word [fat12_buffer.BPB_TotSec16], ax |
|
- | 555 | mov dword [fat12_buffer.BPB_TotSec32], 0 |
|
- | 556 | @@: |
|
- | 557 | ;êîëè÷åñòâî ñåêòîðîâ çàíèìàåìîå îäíîé êîïèåé ôàò |
|
- | 558 | ; mov word [fat12_buffer.BPB_FATSz16],0x9 ;Äëÿ FAT12/FAT16 ýòî êîëè÷åñòâî ñåêòîðîâ îäíîé FAT. ?? |
|
- | 559 | ;;;; çàïîëíèì BPB_RootEntCnt Äëÿ FAT12 è FAT16 äèñêîâ, ýòî ïîëå ñîäåðæèò ÷èñëî |
|
- | 560 | ;32-áàéòíûõ ýëåìåíòîâ êîðíåâîé äèðåêòîðèè. Äëÿ FAT32 äèñêîâ, ýòî ïîëå äîëæíî |
|
- | 561 | ;áûòü 0. Ïîêà êîíñòàíòà, íóæíî áóäåò ïîçæå äîäåëàòü. |
|
- | 562 | mov eax, root_dir_entry_count |
|
- | 563 | mov word [fat12_buffer.BPB_RootEntCnt], ax ; count of 32-byte dir. entries (224*32 = 14 sectors= 7 kb) |
|
- | 564 | ;ïî äîêóìåíòàöèè ðåêîìåíäóþò îòðåçàòü 16 êá äëÿ ðóò äèð íî ýòî î÷ ìíîãî, äàæå äëÿ êîîñ. èìõî äëÿ íà÷àëà õâàòèò è 7 êá |
|
- | 565 | ;;;;;;; |
|
- | 566 | ;Äëÿ FAT16 ýòî êîëè÷åñòâî ñåêòîðîâ îäíîé FAT. Äëÿ FAT32 ýòî çíà÷åíèå |
|
- | 567 | ;ðàâíî 0, à êîëè÷åñòâî ñåêòîðîâ îäíîé FAT ñîäåðæèòñÿ â BPB_FATSz32. |
|
- | 568 | ;RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec - 1)) / BPB_BytsPerSec; |
|
- | 569 | ||
- | 570 | ;TmpVal1 = DskSize - (BPB_ResvdSecCnt + RootDirSectors); |
|
- | 571 | ;TmpVal2 = (256 * BPB_SecPerClus) + BPB_NumFATs; |
|
- | 572 | ;If(FATType == FAT32) |
|
- | 573 | ; TmpVal2 = TmpVal2 / 2; |
|
- | 574 | ;FATSz = (TMPVal1 + (TmpVal2 - 1)) / TmpVal2; |
|
- | 575 | ;If(FATType == FAT32) { |
|
- | 576 | ; BPB_FATSz16 = 0; |
|
- | 577 | ; BPB_FATSz32 = FATSz; |
|
- | 578 | ;} else { |
|
- | 579 | ; BPB_FATSz16 = LOWORD(FATSz); |
|
- | 580 | ; /* there is no BPB_FATSz32 in a FAT16 BPB */ |
|
- | 581 | ;} |
|
- | 582 | ;===================================== |
|
- | 583 | ;RootDirSectors |
|
- | 584 | movzx ebx, word [fat12_buffer.BPB_BytsPerSec] |
|
- | 585 | imul eax, 32 |
|
- | 586 | add eax, ebx |
|
- | 587 | dec eax |
|
- | 588 | ||
- | 589 | cdq |
|
- | 590 | idiv ebx |
|
- | 591 | ;;;;;;;; ñåé÷àñ ÷àñòíîå â eax, à îñòàòîê â edx äëÿ äèñêåòû 1.44 ó íàñ äîëæíî áûòü çíà÷åíèå =14 |
|
- | 592 | ;BPB_ResvdSecCnt + RootDirSectors |
|
- | 593 | movzx ebx, word [fat12_buffer.BPB_RsvdSecCnt] |
|
- | 594 | add ebx, eax |
|
- | 595 | ||
- | 596 | ;DskSize ó íàñ ýòî çíà÷åíèå óæå ïîëó÷åíî è äîñòóïíî |
|
- | 597 | movzx eax, word [fat12_buffer.BPB_TotSec16] ;äîëæåí áûòü â ñåêòîðàõ |
|
- | 598 | sub eax, ebx |
|
- | 599 | ||
- | 600 | ||
- | 601 | ;TmpVal1=eax |
|
- | 602 | shl edi, 8 ;=edi*256 |
|
- | 603 | movzx ecx, byte [fat12_buffer.BPB_NumFATs] |
|
- | 604 | add edi, ecx |
|
- | 605 | ;TmpVal2=edi |
|
- | 606 | add eax, edi |
|
- | 607 | dec eax |
|
- | 608 | cdq |
|
- | 609 | idiv edi |
|
- | 610 | ;FATSz = ñåé÷àñ ÷àñòíîå â eax, à îñòàòîê â edx |
|
- | 611 | mov word [fat12_buffer.BPB_FATSz16], ax |
|
- | 612 | ||
- | 613 | ||
- | 614 | ||
- | 615 | ||
- | 616 | ||
- | 617 | ||
- | 618 | ||
- | 619 | ||
- | 620 | .fat12: ;fat12 |
|
- | 621 | if DEBUG |
|
- | 622 | ; âûâåäåì â îòëàäêå, ÷òî ñîáèðàåìñÿ äåëàòü îáðàç äèñêà c FS=fat12 |
|
- | 623 | pushad |
|
- | 624 | mov si, start_making_FAT12_msg |
|
- | 625 | call printplain |
|
- | 626 | popad |
|
- | 627 | end if |
|
- | 628 | ||
- | 629 | ||
- | 630 | ||
- | 631 | ;Äëÿ FAT12 è FAT16 äèñêîâ ýòî ïîëå ñîäåðæèò êîëè÷åñòâî ñåêòîðîâ, à BPB_TotSec32 ðàâíî 0, åñëè çíà÷åíèå <óìåùàåòñÿ> (ìåíüøå 0x10000). |
|
- | 632 | mov set_ramfs, 12 ;óñòàíîâèì òèï ôàéëîâîé ñèñòåìû |
|
- | 633 | movzx ebx, byte [fat12_buffer.BPB_SecPerClus] |
|
- | 634 | imul eax, ebx |
|
- | 635 | ||
- | 636 | cmp eax, 0x10000 |
|
- | 637 | jae @f |
|
- | 638 | mov word [fat12_buffer.BPB_TotSec16], ax |
|
- | 639 | mov dword [fat12_buffer.BPB_TotSec32], 0 |
|
- | 640 | @@: |
|
- | 641 | ;êîëè÷åñòâî ñåêòîðîâ çàíèìàåìîå îäíîé êîïèåé ôàò |
|
- | 642 | ; mov word [fat12_buffer.BPB_FATSz16],0x9 ;Äëÿ FAT12/FAT16 ýòî êîëè÷åñòâî ñåêòîðîâ îäíîé FAT. ?? |
|
- | 643 | ;;;; çàïîëíèì BPB_RootEntCnt Äëÿ FAT12 è FAT16 äèñêîâ, ýòî ïîëå ñîäåðæèò ÷èñëî |
|
- | 644 | ;32-áàéòíûõ ýëåìåíòîâ êîðíåâîé äèðåêòîðèè. Äëÿ FAT32 äèñêîâ, ýòî ïîëå äîëæíî |
|
- | 645 | ;áûòü 0. Ïîêà êîíñòàíòà, íóæíî áóäåò ïîçæå äîäåëàòü. |
|
- | 646 | mov eax, root_dir_entry_count |
|
- | 647 | mov word [fat12_buffer.BPB_RootEntCnt], ax ; count of 32-byte dir. entries (224*32 = 14 sectors= 7 kb) |
|
- | 648 | ;ïî äîêóìåíòàöèè ðåêîìåíäóþò îòðåçàòü 16 êá äëÿ ðóò äèð íî ýòî î÷ ìíîãî, äàæå äëÿ êîîñ. èìõî äëÿ íà÷àëà õâàòèò è 7 êá |
|
- | 649 | ;;;;;;; |
|
- | 650 | ;DskSize(â ñåêòîðàõ)*12 (ðàçìåðíîñòü ôàéëîâîé ñèñòåìû, ò.å ïðåäïîëîæèì ñêîëüêî áèòîâ ïîòðåáóåòñÿ äëÿ àäðåñàöèè ýòîãî îáúåìà) /8 (÷òî ïîëó÷èòü ðàçìåð â áàéòàõ) |
|
- | 651 | ;ïîëó÷åííîå ÷èñëî îêðóãëÿåì â áîëüøóþ ñòîðîíó êðàòíîå ñåêòîðó ò.å. 512 áàéò Òàêîé ïîäõîä íå óíèâåðñàëåí, íî ïîêà ïîéäåò |
|
- | 652 | ;âîîáùå ó ìåëêîñîôò ýòî âñå ñ÷èòàåòñÿ ðó÷êàìè, íî ìû áóäåì þçàòü òîëüêî ïîä êîîñ ðàì äèñê ñ ôàò12 |
|
- | 653 | movzx eax, word [fat12_buffer.BPB_TotSec16] |
|
- | 654 | imul eax, 12 |
|
- | 655 | shr eax, 3 ;äåëèì íà 8 íî ò.å. íàì íóæíî äåëèòü åùå è íà 512 èëè áîëåå â çàâèñèìîñòè îò ðàçìåðîâ êëàñòåðà |
|
- | 656 | movzx ebx, word [fat12_buffer.BPB_BytsPerSec] ;ðàçìåð ñåêòîðà |
|
- | 657 | cdq |
|
- | 658 | idiv ebx ;ðàçäåëèì íà ðàçìåð êëàñòåðà |
|
- | 659 | ;ñåé÷àñ ó íàñ â eax çíà÷åíèå åãî íóæíî îêðóãëèòü â áîëüøóþ ñòîðîíó êðàòíîìó 512 áàéòàì |
|
- | 660 | ;ïðèìåíèì ñëåäóþùåå î÷èñòèì and è äîáàâèì 512 áàéò. òàêèì îáðàçîì âûðàâíèì íà 512 áàéò |
|
- | 661 | ;íî ò.ê. âñå ðàâíî äåëèòü íèæíèé êîä íàì íå íóæåí |
|
- | 662 | ; and eax,0xfff200 |
|
- | 663 | ; add eax,0x200 ;äîáàâèì 512 áàéò äëÿ 1.44 äèñêåòû èäåàëüíî ïîäõîäèò )) |
|
- | 664 | ||
- | 665 | inc ax |
|
- | 666 | ;ïî èäåå äîëæíî íà êàæäóþ ôàò òàáëèöó |
|
- | 667 | ;ðåçåðâèðîâàòüñÿ 9 ñåêòîðîâ ò.å. ïîëó÷àåòñÿ 2*9=18+1 =19 ñåêòîðîâ ò.å. ðóò äèð íàõîäèòüñÿ íà ñ 20 ñåòîðà ò.å. ñ àäðåñà 0õ2600 |
|
- | 668 | ;ñåé÷àñ íóæíî âû÷èñëèòü ñêîëüêî áóäåò ñåêòîðîâ çàíèìàòü ôàò ) íóæíî ðàçäåëèòü íà 512 |
|
- | 669 | ;FATSz = ñåé÷àñ ÷àñòíîå â eax |
|
- | 670 | mov word [fat12_buffer.BPB_FATSz16], ax |
|
- | 671 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 672 | get_firstDataSector ;ïîëó÷èòü ñìåùåíèå äî äàííûõ |
|
- | 673 | ;ñîçäàäèì ïåâóþ çàïèñü â ôàò ïî îïðåäåëåííîìó àäðåñó. |
|
- | 674 | first_create_fat_table |
|
- | 675 | ;çàêèíèì BPB ôàéëîâîé ñèñòåìû çà 1 ìá. |
|
- | 676 | use_BPB_RAM |
|
- | 677 | ; |
|
- | 678 | ;êîïèðîâàíèå ôàéëà. |
|
- | 679 | use_RamdiskFile |
|
- | 680 | ||
- | 681 | ;;;; âû÷èñëÿåì óêàçàòåëü íà êîðíåâóþ äèð FirstRootDirSecNum = BPB_ResvdSecCnt + (BPB_NumFATs * BPB_FATSz16); |
|
- | 682 | ; movzx ebx, [fat12_buffer.BPB_NumFATs] |
|
- | 683 | ; movzx eax,ax |
|
- | 684 | ; imul eax,ebx |
|
- | 685 | ;eax=(BPB_NumFATs * BPB_FATSz16) |
|
- | 686 | ; inc eax |
|
- | 687 | ; BPB_ResvdSecCnt çíà÷åíèå òîëüêî 1 äëÿ fat12/16 |
|
- | 688 | ;â eax óêàçàòåëü íà root dir. äëÿ äèñêåòû fat12 äîëæíî ïîëó÷èòüñÿ ïðè êîë-âî êîïèé fat 1 = 1+ (1*1) =2 èëè 3 |
|
- | 689 | ||
- | 690 | if DEBUG |
|
- | 691 | pusha |
|
- | 692 | ; mov ax,point_default |
|
- | 693 | ; mov ax,cx |
|
- | 694 | mov cx, 0x0a |
|
- | 695 | mov di, show_db1 |
|
- | 696 | ; mov dword[ds:di],' ' |
|
- | 697 | ; mov word [ds:di+4],' ' |
|
- | 698 | call decode |
|
- | 699 | ;Show size |
|
- | 700 | mov si, show_db1 |
|
- | 701 | call printplain |
|
- | 702 | ; |
|
- | 703 | ; xor ax,ax |
|
- | 704 | ; int 0x16 |
|
- | 705 | popa |
|
- | 706 | end if |
|
- | 707 | ||
- | 708 | ||
- | 709 | ||
- | 710 | ||
- | 711 | ||
- | 712 | ||
- | 713 | ||
- | 714 | } |
|
- | 715 | ||
- | 716 | macro use_RamdiskSector |
|
- | 717 | { |
|
- | 718 | ;äëÿ íåêîòîðûõ FS áóäåò èãíîðèðîâàòüñÿ |
|
- | 719 | mov di, point_default ;restore value |
|
- | 720 | mov cx, save_cx_d |
|
- | 721 | ||
- | 722 | .start_RamdiskSector: |
|
- | 723 | call get_firs_sym ;get first symbol on new line |
|
- | 724 | test cx, cx |
|
- | 725 | jz .end_RamdiskSector ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 726 | ||
- | 727 | cmp al, 'R' |
|
- | 728 | jnz .start_RamdiskSector |
|
- | 729 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
|
- | 730 | ; parse_RamdiskSize |
|
- | 731 | ||
- | 732 | mov bx, cx |
|
- | 733 | mov ax, di |
|
- | 734 | ||
- | 735 | mov si, parse_RamdiskSector |
|
- | 736 | mov cx, parse_RamdiskSector_e - parse_RamdiskSector |
|
- | 737 | repe cmpsb |
|
- | 738 | jnz .RamdiskSector_rest_val ;is not compare |
|
- | 739 | ||
- | 740 | sub bx, parse_RamdiskSector_e - parse_RamdiskSector;correct cx |
|
- | 741 | add bx, cx |
|
- | 742 | mov cx, bx |
|
- | 743 | ||
- | 744 | test status_flag, flag_found_RamdiskSector ;îöåíêà ôëàãîâ |
|
- | 745 | jz .correct_is_not_set_RamdiskSector |
|
- | 746 | ||
- | 747 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 748 | ; call printplain |
|
- | 749 | ; jmp .get_next_str |
|
- | 750 | ||
- | 751 | .correct_is_not_set_RamdiskSector: |
|
- | 752 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 753 | repe scasb |
|
- | 754 | jcxz .end_get_RamS_ERROR_1 ;not found param |
|
- | 755 | ||
- | 756 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 757 | jnz .start_RamdiskSector ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
|
- | 758 | ||
- | 759 | repe scasb ;cut ' ' |
|
- | 760 | inc cx |
|
- | 761 | dec di |
|
- | 762 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 763 | xor bx, bx |
|
- | 764 | mov cx, 4 |
|
- | 765 | @@: |
|
- | 766 | movzx ax, byte [es:di] |
|
- | 767 | cmp al, '0' |
|
- | 768 | jb .end_RamdiskSector |
|
- | 769 | cmp al, '9' |
|
- | 770 | ja .end_RamdiskSector |
|
- | 771 | ;;;;;;;;;;;;;;;;;;; |
|
- | 772 | ||
- | 773 | imul bx, 10 |
|
- | 774 | xor al, 0x30 |
|
- | 775 | add bx, ax |
|
- | 776 | ||
- | 777 | inc di |
|
- | 778 | ||
- | 779 | loop @b |
|
- | 780 | jmp .end_RamdiskSector |
|
- | 781 | ||
- | 782 | ||
- | 783 | .RamdiskSector_rest_val: |
|
- | 784 | mov cx, bx |
|
- | 785 | mov di, ax |
|
- | 786 | jmp .start_RamdiskSector |
|
- | 787 | .end_get_RamS_ERROR_1: |
|
- | 788 | ||
- | 789 | .end_RamdiskSector: |
|
- | 790 | mov ax, bx |
|
- | 791 | ||
- | 792 | if DEBUG |
|
- | 793 | pusha |
|
- | 794 | movzx eax, bx;save_cx_d;point_default |
|
- | 795 | mov cx, 0x0a |
|
- | 796 | mov di, RamdiskSector_msg |
|
- | 797 | mov dword[ds:di], ' ' |
|
- | 798 | mov dword [ds:di+4], ' ' |
|
- | 799 | call decode |
|
- | 800 | ;Show size |
|
- | 801 | mov si, RamdiskSector_msg |
|
- | 802 | call printplain |
|
- | 803 | ||
- | 804 | popa |
|
- | 805 | end if |
|
- | 806 | ||
- | 807 | ; pop di |
|
- | 808 | ; pop es |
|
- | 809 | } |
|
- | 810 | ||
- | 811 | macro use_RamdiskCluster |
|
- | 812 | { |
|
- | 813 | ;äëÿ íåêîòîðûõ FS áóäåò èãíîðèðîâàòüñÿ |
|
- | 814 | ; push es |
|
- | 815 | ; push di |
|
- | 816 | mov di, point_default ;restore value |
|
- | 817 | mov cx, save_cx_d |
|
- | 818 | ; push ini_data_ |
|
- | 819 | ; pop es |
|
- | 820 | .start_RamdiskCluster: |
|
- | 821 | call get_firs_sym ;get first symbol on new line |
|
- | 822 | test cx, cx |
|
- | 823 | jz .end_RamdiskCluster ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 824 | cmp al, 'R' |
|
- | 825 | jnz .start_RamdiskCluster |
|
- | 826 | ;ïðîâåðêà íà çíà÷åíèÿ RamdiskSize |
|
- | 827 | ; parse_RamdiskSize |
|
- | 828 | ||
- | 829 | mov bx, cx |
|
- | 830 | mov ax, di |
|
- | 831 | ||
- | 832 | mov si, parse_RamdiskCluster |
|
- | 833 | mov cx, parse_RamdiskCluster_e - parse_RamdiskCluster |
|
- | 834 | repe cmpsb |
|
- | 835 | jnz .RamdiskCluster_rest_val ;is not compare |
|
- | 836 | ||
- | 837 | sub bx, parse_RamdiskCluster_e - parse_RamdiskCluster;correct cx |
|
- | 838 | add bx, cx |
|
- | 839 | mov cx, bx |
|
- | 840 | ||
- | 841 | test status_flag, flag_found_RamdiskCluster ;îöåíêà ôëàãîâ |
|
- | 842 | jz .correct_is_not_set_RamdiskCluster |
|
- | 843 | ||
- | 844 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 845 | ; call printplain |
|
- | 846 | ; jmp .get_next_str |
|
- | 847 | ||
- | 848 | .correct_is_not_set_RamdiskCluster: |
|
- | 849 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 850 | repe scasb |
|
- | 851 | jcxz .end_get_RamSC_ERROR_1 ;not found param |
|
- | 852 | ||
- | 853 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 854 | jnz .start_RamdiskCluster ; ïåðåéäåì íà íà÷àëî è ïîïðîáóåì íàéòè åùå ñåêöèþ |
|
- | 855 | ||
- | 856 | repe scasb ;cut ' ' |
|
- | 857 | inc cx |
|
- | 858 | dec di |
|
- | 859 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 860 | @@: |
|
- | 861 | movzx ax, byte [es:di] |
|
- | 862 | cmp al, '0' |
|
- | 863 | jb .end_RamdiskCluster |
|
- | 864 | cmp al, '9' |
|
- | 865 | ja .end_RamdiskCluster |
|
- | 866 | ;;;;;;;;;;;;;;;;;;; |
|
- | 867 | xor al, 0x30 |
|
- | 868 | ||
- | 869 | jmp .end_RamdiskCluster |
|
- | 870 | ||
- | 871 | ||
- | 872 | .RamdiskCluster_rest_val: |
|
- | 873 | mov cx, bx |
|
- | 874 | mov di, ax |
|
- | 875 | jmp .start_RamdiskCluster |
|
- | 876 | .end_get_RamSC_ERROR_1: |
|
- | 877 | ||
- | 878 | .end_RamdiskCluster: |
|
- | 879 | if DEBUG |
|
- | 880 | pusha |
|
- | 881 | mov cx, 0x0a |
|
- | 882 | mov di, RamdiskCluster_msg |
|
- | 883 | ; mov word[ds:di],' ' |
|
- | 884 | call decode |
|
- | 885 | ;Show size |
|
- | 886 | mov si, RamdiskCluster_msg |
|
- | 887 | call printplain |
|
- | 888 | ||
- | 889 | popa |
|
- | 890 | end if |
|
- | 891 | ||
- | 892 | } |
|
- | 893 | ||
- | 894 | macro use_Loader_Image |
|
- | 895 | ;ïðåäíàçíà÷åí äëÿ çàãðóçêè îáðàçîâ âûøå 1 Ìá. |
|
- | 896 | ;ïåðâîíà÷àëüíàÿ âåðñèÿ çàãðóæàåò îáðàç äèñêåòû 1.44 ìá |
|
- | 897 | { |
|
- | 898 | local .start_p_LI |
|
- | 899 | local .exit |
|
- | 900 | local .error_LI |
|
- | 901 | local .rest_value_loop |
|
- | 902 | local .found_end_str |
|
- | 903 | mov di, point_default ;restore value |
|
- | 904 | mov cx, save_cx_d |
|
- | 905 | ;îáðàáîòêà êîíñòðóêöèè òèïà LoaderModule=kord/kolibri.ldm |
|
- | 906 | .start_p_LI: |
|
- | 907 | call get_firs_sym ;get first symbol on new line |
|
- | 908 | test cx, cx |
|
- | 909 | jz .exit ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 910 | cmp al, 'L' |
|
- | 911 | jnz .start_p_LI |
|
- | 912 | ;ïðîâåðêà íà çíà÷åíèå LoaderModule |
|
- | 913 | ; parse_LoaderModule |
|
- | 914 | mov bx, cx |
|
- | 915 | mov ax, di |
|
- | 916 | ||
- | 917 | mov si, parse_LoaderImage |
|
- | 918 | mov cx, parse_LoaderImage_e - parse_LoaderImage |
|
- | 919 | repe cmpsb |
|
- | 920 | jnz .rest_value_loop ;is not compare |
|
- | 921 | ||
- | 922 | sub bx, parse_LoaderImage_e - parse_LoaderImage;correct cx |
|
- | 923 | add bx, cx |
|
- | 924 | mov cx, bx |
|
- | 925 | ||
- | 926 | ; test status_flag,flag_found_LM ;îöåíêà ôëàãîâ |
|
- | 927 | ; jz .correct_is_not_set_LI |
|
- | 928 | ||
- | 929 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 930 | ; call printplain |
|
- | 931 | ; jmp .get_next_str |
|
- | 932 | ||
- | 933 | ;.correct_is_not_set_LI: |
|
- | 934 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 935 | repe scasb |
|
- | 936 | jcxz .rest_value_loop_LI ;not found param timeout |
|
- | 937 | ||
- | 938 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 939 | jnz .rest_value_loop_LI |
|
- | 940 | ||
- | 941 | repe scasb ;cut ' ' |
|
- | 942 | inc cx |
|
- | 943 | dec di |
|
- | 944 | ;di óêàçûâàåò íà íà÷àëî áëîêà èíôîðìàöèè, â cx äëèííà äî êîíöà ñåêöèè. |
|
- | 945 | ;ïîñëå çàãðóçêè çàíîñèòüñÿ çíà÷åíèå çàíÿòîé ïàìÿòè. |
|
- | 946 | ;äëÿ òîãî ÷òî áû çàãðóçèòü ìîäóëü, âîñïîëüçóåìñÿ callback ñåðâèñîì |
|
- | 947 | ;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0 |
|
- | 948 | ;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà LoaderModule = kord/kernel.loader |
|
- | 949 | ;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'kord/kernel.loader',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
|
- | 950 | ;ñîõðàíèëè ïåâûå 2 word |
|
- | 951 | push dword [es:di-6] |
|
- | 952 | lea si, [di-6] |
|
- | 953 | ||
- | 954 | push word [es:di-2] |
|
- | 955 | xor ax, ax |
|
- | 956 | mov word [es:di-6], ax ;âíîñèì íóæíûå çíà÷åíèÿ |
|
- | 957 | ;info_real_mode_size ðàçìåð è óêàçàòåëü íà îáëàñòü â êîòîðóþ ìîæíî çàãðóçèòüñÿ |
|
- | 958 | mov ax, info_real_mode_size ;0x3000 ;ñëåäóþùèé ñåãìåíò çà äàííûìè |
|
- | 959 | ||
- | 960 | ||
- | 961 | mov word [es:di-4], ax |
|
- | 962 | mov word [es:di-2], 16 ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ñ÷èòàåì |
|
- | 963 | ;;;;;; ïîèñê êîíöà ñòðî÷êè |
|
- | 964 | @@: |
|
- | 965 | mov al, byte [es:di] |
|
- | 966 | cmp al, ' ' |
|
- | 967 | jz .found_end_str |
|
- | 968 | cmp al, 0xa |
|
- | 969 | jz .found_end_str |
|
- | 970 | cmp al, 0xd |
|
- | 971 | jz .found_end_str |
|
- | 972 | inc di |
|
- | 973 | dec cx |
|
- | 974 | jnz @b |
|
- | 975 | ;;;not found äîïóñòèì,÷òî ýòî êîíåö ôàéëà è îí íå èìååò ïðèâû÷íîãî çàâåðåøíèÿ ñòðîêè |
|
- | 976 | .found_end_str: |
|
- | 977 | ; ÷òåíèå áëîêà ïî 64 êá â ñåãìåíò è çàáðàñûâàíèå åãî âûøå 1 ìá. |
|
- | 978 | push word [es:di] |
|
- | 979 | xor ax, ax |
|
- | 980 | mov word [es:di], ax |
|
- | 981 | ; xor ax,ax ; function 1 - read file |
|
- | 982 | mov di, si ;file_data |
|
- | 983 | inc ax |
|
- | 984 | push si |
|
- | 985 | push es |
|
- | 986 | call far dword [loader_callback] |
|
- | 987 | push cs |
|
- | 988 | pop ds |
|
- | 989 | ||
- | 990 | pop es |
|
- | 991 | pop si |
|
- | 992 | ||
- | 993 | test bx, bx |
|
- | 994 | jnz .error_LM |
|
- | 995 | ||
- | 996 | ||
- | 997 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; çàáðàñûâàíèå áëîêà â 64 êá âûøå 1 ìá. |
|
- | 998 | mov si, table_15_87 |
|
- | 999 | push es |
|
- | 1000 | push ds |
|
- | 1001 | pop es |
|
- | 1002 | mov cx, 256*18 |
|
- | 1003 | mov ah, 0x87 |
|
- | 1004 | int 0x15 |
|
- | 1005 | pop es |
|
- | 1006 | pop dx cx |
|
- | 1007 | test ah, ah |
|
- | 1008 | ||
- | 1009 | ||
- | 1010 | ||
- | 1011 | jmp far dword [es:si] |
|
- | 1012 | ||
- | 1013 | ||
- | 1014 | ||
- | 1015 | ||
- | 1016 | .rest_value_loop: |
|
- | 1017 | mov di, ax |
|
- | 1018 | mov cx, bx |
|
- | 1019 | jmp .start_p_LI |
|
- | 1020 | ||
- | 1021 | .exit: |
|
- | 1022 | ||
- | 1023 | ||
- | 1024 | ||
- | 1025 | } |
|
- | 1026 | ||
- | 1027 | ||
- | 1028 | ||
- | 1029 | macro name_in_root_fat |
|
- | 1030 | ;ìàêðîñ, êîòîðûé çàïèñûâàåò èíôîðìàöèþ î çàãðóæåííîì ôàéëå â êîðíåâóþ ôàò òàáëèöó |
|
- | 1031 | { |
|
- | 1032 | ||
- | 1033 | } |
|
- | 1034 | ||
- | 1035 | ||
- | 1036 | ||
- | 1037 | macro use_RamdiskFile |
|
- | 1038 | { |
|
- | 1039 | ;çàãðóçêà ôàéëîâ ñ èñïîëüçîâàíèå callback ñåðâèñà ïåðâè÷íîãî çàãðóç÷èêà |
|
- | 1040 | ;èñïîëüçóåòñÿ òîëüêî äëÿ çàãðóçêè íåîáõîäèìûõ è íåáîëüøèõ ôàéëîâ, ò.ê. äîñòàòî÷íî ìåäëåííî ðàáîòàåò |
|
- | 1041 | ;äëÿ çàãðóçêè èñïîëüçóåò 0õ87 ôóíêöèþ int 0x15 ïðåðûâàíèÿ - çàãðóçêà áëîêîâ äàííûõ äî 64 êá âûøå 1 ìá |
|
- | 1042 | local .start_loop |
|
- | 1043 | local ._end |
|
- | 1044 | local .rest_value_loop |
|
- | 1045 | local .error |
|
- | 1046 | mov di, point_default ;restore value |
|
- | 1047 | mov cx, save_cx_d |
|
- | 1048 | mov data_offset, 0 ;clean offset |
|
- | 1049 | ;îáðàáîòêà êîíñòðóêöèè òèïà LoaderModule=kord/kolibri.ldm |
|
- | 1050 | .start_loop: |
|
- | 1051 | call get_firs_sym ;get first symbol on new line |
|
- | 1052 | test cx, cx |
|
- | 1053 | jz ._end ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà ) |
|
- | 1054 | cmp al, 'R' |
|
- | 1055 | jnz .start_loop |
|
- | 1056 | ;ïðîâåðêà íà çíà÷åíèå RamdiskFile |
|
- | 1057 | mov bx, cx |
|
- | 1058 | mov ax, di |
|
- | 1059 | ||
- | 1060 | mov si, parse_RamdiskFile |
|
- | 1061 | mov cx, parse_RamdiskFile_e - parse_RamdiskFile |
|
- | 1062 | repe cmpsb |
|
- | 1063 | jnz .rest_value_loop ;is not compare |
|
- | 1064 | ||
- | 1065 | sub bx, parse_RamdiskFile_e - parse_RamdiskFile;correct cx |
|
- | 1066 | add bx, cx |
|
- | 1067 | mov cx, bx |
|
- | 1068 | ; test status_flag,flag_found_LM ;îöåíêà ôëàãîâ |
|
- | 1069 | ; jz .correct_is_not_set_LM |
|
- | 1070 | ||
- | 1071 | ; mov si,found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
|
- | 1072 | ; call printplain |
|
- | 1073 | ; jmp .get_next_str |
|
- | 1074 | ||
- | 1075 | ;.correct_is_not_set_LM: |
|
- | 1076 | mov ax, 0x3d20 ;cut al=' ' ah='=' |
|
- | 1077 | repe scasb |
|
- | 1078 | test ecx, ecx |
|
- | 1079 | jz .rest_value_loop ;not found param timeout |
|
- | 1080 | ||
- | 1081 | cmp ah, byte [es:di-1] ;find '=' |
|
- | 1082 | jnz .rest_value_loop |
|
- | 1083 | ||
- | 1084 | repe scasb ;cut ' ' |
|
- | 1085 | inc cx |
|
- | 1086 | dec di |
|
- | 1087 | ||
- | 1088 | mov save_di_RAMDISK, di |
|
- | 1089 | mov save_cx_RAMDISK, cx |
|
- | 1090 | ;di óêàçûâàåò íà íà÷àëî áëîêà èíôîðìàöèè, â cx äëèííà äî êîíöà ñåêöèè. |
|
- | 1091 | ;ïîñëå çàãðóçêè çàíîñèòüñÿ çíà÷åíèå çàíÿòîé ïàìÿòè. |
|
- | 1092 | ;äëÿ òîãî ÷òî áû çàãðóçèòü ìîäóëü, âîñïîëüçóåìñÿ callback ñåðâèñîì |
|
- | 1093 | ;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0 |
|
- | 1094 | ;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà RamdiskFile = @menu,@menu |
|
- | 1095 | ;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'@menu',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
|
- | 1096 | ;ñîõðàíèëè ïåâûå 2 word |
|
- | 1097 | ||
- | 1098 | ; |
|
- | 1099 | @@: |
|
- | 1100 | mov al, byte [es:di] |
|
- | 1101 | cmp al, ',' ; ò.å. èùåì ðàçäåëèòåëü |
|
- | 1102 | jz .found_end_str |
|
- | 1103 | inc di |
|
- | 1104 | dec cx |
|
- | 1105 | jnz @b |
|
- | 1106 | ;;;not found äîïóñòèì,÷òî ýòî êîíåö ôàéëà è îí íå èìååò ïðèâû÷íîãî çàâåðøåíèÿ ñòðîêè |
|
- | 1107 | .found_end_str: |
|
- | 1108 | ; mov al,byte [es:di] |
|
- | 1109 | ; cmp al,' ' ; óáèðàåì ïðîáåëû, åñëè îíè åñòü |
|
- | 1110 | ; jnz @f |
|
- | 1111 | ; inc di |
|
- | 1112 | ; dec cx |
|
- | 1113 | ; jnz .found_end_str |
|
- | 1114 | ||
- | 1115 | ;@@: |
|
- | 1116 | mov point_to_dest_file_name, di |
|
- | 1117 | inc di |
|
- | 1118 | ;ïðîâåðêà èíäèâèäóàëüíîñòè èìåíè ôàéëà |
|
- | 1119 | check_name_file |
|
- | 1120 | ;/restore di - point and cx -size section |
|
- | 1121 | mov di, save_di_RAMDISK |
|
- | 1122 | mov cx, save_cx_RAMDISK |
|
- | 1123 | ||
- | 1124 | test al, al |
|
- | 1125 | jnz .start_loop ;åñëè â al çíà÷åíèå íå =0, òî òàêîå èìÿ óæå ñóùåñòâóåò â ñèñòåìå. |
|
- | 1126 | ||
- | 1127 | ||
- | 1128 | ||
- | 1129 | push dword [es:di-6] |
|
- | 1130 | lea si, [di-6] |
|
- | 1131 | ||
- | 1132 | push word [es:di-2] |
|
- | 1133 | push di |
|
- | 1134 | xor ax, ax |
|
- | 1135 | mov word [es:di-6], ax ;âíîñèì íóæíûå çíà÷åíèÿ |
|
- | 1136 | ;info_real_mode_size ðàçìåð è óêàçàòåëü íà îáëàñòü â êîòîðóþ ìîæíî çàãðóçèòüñÿ |
|
- | 1137 | mov ax, info_real_mode_size ;0x3000 ;ñëåäóþùèé ñåãìåíò çà äàííûìè |
|
- | 1138 | ||
- | 1139 | ||
- | 1140 | mov word [es:di-4], ax |
|
- | 1141 | mov word [es:di-2], 16 ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ÷èòàåì |
|
- | 1142 | ||
- | 1143 | mov di, point_to_dest_file_name |
|
- | 1144 | ||
- | 1145 | if DEBUG |
|
- | 1146 | pushad |
|
- | 1147 | ; mov ax,di |
|
- | 1148 | mov cx, 0x0a |
|
- | 1149 | mov di, name_of_seg_get_64 |
|
- | 1150 | mov dword[ds:di], ' ' |
|
- | 1151 | mov word[ds:di+4], ' ' |
|
- | 1152 | call decode |
|
- | 1153 | ;Show size |
|
- | 1154 | mov si, name_of_seg_get_64 |
|
- | 1155 | call printplain |
|
- | 1156 | ||
- | 1157 | popad |
|
- | 1158 | end if |
|
- | 1159 | ||
- | 1160 | push word [es:di] |
|
- | 1161 | push cx |
|
- | 1162 | xor ax, ax |
|
- | 1163 | mov word [es:di], ax |
|
- | 1164 | ; xor ax,ax ; function 1 - read file |
|
- | 1165 | push di |
|
- | 1166 | mov di, si ;file_data |
|
- | 1167 | inc ax |
|
- | 1168 | push si |
|
- | 1169 | push es |
|
- | 1170 | push bp |
|
- | 1171 | ||
- | 1172 | push es |
|
- | 1173 | pop ds |
|
- | 1174 | push cs |
|
- | 1175 | pop es |
|
- | 1176 | ||
- | 1177 | call far dword [es:loader_callback] |
|
- | 1178 | ||
- | 1179 | ||
- | 1180 | push cs |
|
- | 1181 | pop ds |
|
- | 1182 | ||
- | 1183 | pop bp |
|
- | 1184 | pop es |
|
- | 1185 | pop si |
|
- | 1186 | ||
- | 1187 | cmp bx, 2 |
|
- | 1188 | ja .error |
|
- | 1189 | ; ñåé÷àñ ó íàñ â dx:ax ðàçìåð ôàéëà, êîòîðûé ìû çàãðóçèëè. |
|
- | 1190 | ; âîçìîæíà ñèòóàöèÿ, êîãäà â bx=1 ò.å. åñòü åùå äàííûå íà äèñêå |
|
- | 1191 | mov status_flag_loader_f, bx |
|
- | 1192 | ||
- | 1193 | shl edx, 16 |
|
- | 1194 | mov dx, ax |
|
- | 1195 | ; shr edx,10 ;ðàçìåð ôàéëà â êá. |
|
- | 1196 | ;;â edx ðàçìåð â áàéòàõ. |
|
- | 1197 | mov save_file_size, edx |
|
- | 1198 | mov eax, edx |
|
- | 1199 | ;âîññòàíîâèì ïîëíîñòüþ ôàéë ñöåíàðèÿ |
|
- | 1200 | pop di |
|
- | 1201 | pop cx ;äëèííà îñòàòêà ñ 2-îé ÷àñòüþ èìåíè ò.å. ñ èìåíåì íàçíà÷åíèåì. |
|
- | 1202 | pop word [es:di] |
|
- | 1203 | pop di |
|
- | 1204 | pop word [es:di-2] |
|
- | 1205 | pop dword [es:di-6] |
|
- | 1206 | ||
- | 1207 | ||
- | 1208 | if DEBUG |
|
- | 1209 | pushad |
|
- | 1210 | mov cx, 0x0a |
|
- | 1211 | mov di, RamdiskFile_msg |
|
- | 1212 | mov dword[ds:di], ' ' |
|
- | 1213 | call decode |
|
- | 1214 | ;Show size |
|
- | 1215 | mov si, RamdiskFile_msg |
|
- | 1216 | call printplain |
|
- | 1217 | ||
- | 1218 | popad |
|
- | 1219 | end if |
|
- | 1220 | ||
- | 1221 | ||
- | 1222 | ||
- | 1223 | ||
- | 1224 | ||
- | 1225 | ||
- | 1226 | ||
- | 1227 | ||
- | 1228 | ||
- | 1229 | ||
- | 1230 | ; çàãðóçèì ÷åìó ó íàñ ðàâåí êëàñòåð |
|
- | 1231 | ; mov ax,word [fat12_buffer.BPB_BytsPerSec] ;êîë-âî áàéòîâ â ñåêòîðå ìîæåò áûòü ëþáîå 512 1024 2048 4096 2 áàéòà |
|
- | 1232 | ; movzx bx,byte [fat12_buffer.BPB_SecPerClus] ;êîë-âî ñåêòîðîâ â êëàñòåðå |
|
- | 1233 | ; imul ax,bx |
|
- | 1234 | ;ñåé÷àñ â eax ðàçìåð êëàñòåðà (512) áàéò |
|
- | 1235 | ;â edx äëèíà ôàéëà â áàéòàõ äî 64 êá |
|
- | 1236 | ;çàêèíèì ôàéë çà 1 ìá |
|
- | 1237 | ;1 íàì íóæíî ñîñòàâèòü ôàò òàáëèöó ò.å. ïðîèçâåñòè ðàçìåòêó ðàìäèñêà, çàòåì ïåðåíåñåì ïî àäðåñó ôàéë |
|
- | 1238 | ||
- | 1239 | ;çàïèñàòü èíôîðàìàöèþ î ôàéëå â êîðíåâóþ äèðåêòîðèþ |
|
- | 1240 | register_file_in_fat |
|
- | 1241 | ;ïåðåíåñòè çà 1 ìá ñîäåðæèìîå ôàéëà |
|
- | 1242 | move_file_up |
|
- | 1243 | ||
- | 1244 | ;ïðîâåðèì, çàãðóæåí ëè äî êîíöà ôàéë? ò.å. åñëè ðàçìåð ôàéëà áîëüøå ÷åì 64 êá, òî áóäåò ïîäãðóæàòü îñòàâøèåñÿ áëîêè |
|
- | 1245 | cmp status_flag_loader_f, 0x1 |
|
- | 1246 | jnz @f |
|
- | 1247 | ;íóæíî äîçàãóçèòü äàííûå ôàéëà è ïåðåíåñòè èõ çà 1-ûé ìá ñîãëàñíî ôàò ñòðóêòóðå |
|
- | 1248 | ||
- | 1249 | ||
- | 1250 | ||
- | 1251 | ||
- | 1252 | ||
- | 1253 | ||
- | 1254 | ||
- | 1255 | ||
- | 1256 | ||
- | 1257 | @@: |
|
- | 1258 | ;òóò îðãàíèçîâàí öèêë ïî çàãðóçêå ôàéëîâ â êîðíåâóþ äèðåêòîðèþ |
|
- | 1259 | mov di, save_di_RAMDISK |
|
- | 1260 | mov cx, save_cx_RAMDISK |
|
- | 1261 | if DEBUG |
|
- | 1262 | pusha |
|
- | 1263 | xor ax, ax |
|
- | 1264 | int 0x16 |
|
- | 1265 | popa |
|
- | 1266 | end if |
|
- | 1267 | ||
- | 1268 | ||
- | 1269 | jmp .start_loop |
|
- | 1270 | ||
- | 1271 | ||
- | 1272 | .error: |
|
- | 1273 | ;call error.LoaderModule |
|
- | 1274 | ;fixme! |
|
- | 1275 | .rest_value_loop: |
|
- | 1276 | mov di, ax |
|
- | 1277 | mov cx, bx |
|
- | 1278 | jmp .start_loop |
|
- | 1279 | ||
- | 1280 | ._end: |
|
- | 1281 | ;ïåðåíåñåì çà 1-ûé ìá ôàò è ðóò äèð |
|
- | 1282 | move_up_fat_and_root_d |
|
- | 1283 | ||
- | 1284 | ||
- | 1285 | ||
- | 1286 | ||
- | 1287 | ||
- | 1288 | ||
- | 1289 | ;çàãðóçêà áëîêà |
|
- | 1290 | ; mov ah,0x87 |
|
- | 1291 | ; mov cx, ;size in byte |
|
- | 1292 | ||
- | 1293 | ||
- | 1294 | ;es:si point to descripts |
|
- | 1295 | ||
- | 1296 | ||
- | 1297 | } |
|
- | 1298 | ||
- | 1299 | macro use_BPB_RAM ;çàêèíóòü ñàìûå ïåðâûå 512 áàéò çà 1-é ìá |
|
- | 1300 | ;äàííûé ìàêðîñ çàêèäûâàåò BPB ñòðóêòóðó ò.å. ïåðâûå 512 áàéò, ïîêà òîëüêî ôàò12 çà 1 ìá |
|
- | 1301 | { |
|
- | 1302 | mov ax, fat12_buffer |
|
- | 1303 | mov si, table_15_87 |
|
- | 1304 | add word [si+8*2+2], ax |
|
- | 1305 | push es |
|
- | 1306 | push ds |
|
- | 1307 | pop es |
|
- | 1308 | mov cx, 256 ;áóò ñåêòîð óêëàäûâàåòñÿ â 512 áàéò 512/2=256 |
|
- | 1309 | mov ah, 0x87 |
|
- | 1310 | int 0x15 |
|
- | 1311 | pop es |
|
- | 1312 | ;add 512 byte for destination adress |
|
- | 1313 | ; add dword [si+8*3+2], 512 |
|
- | 1314 | ; test ah, ah |
|
- | 1315 | ; jz |
|
- | 1316 | if DEBUG |
|
- | 1317 | pusha |
|
- | 1318 | mov ax, word [si+8*2+2] |
|
- | 1319 | mov cx, 0x0a |
|
- | 1320 | mov di, BPB_msg |
|
- | 1321 | call decode |
|
- | 1322 | ;Show size |
|
- | 1323 | mov si, BPB_msg |
|
- | 1324 | call printplain |
|
- | 1325 | popa |
|
- | 1326 | end if |
|
- | 1327 | } |
|
- | 1328 | macro first_create_fat_table |
|
- | 1329 | ;äàííûé ìàêðîñ ñîçäàåò îôîðìëÿåò 3 ïåðâûõ áàéòà fat òàáëèöû, è óñòàíàâëèâàåò óêàçàòåëü íà ñëåäóþùèé áëîê, è âíîñèò 0 çíà÷åíèå |
|
- | 1330 | ;äëÿ ñìåùåíèÿ â êîðíåâîé òàáëèöå. |
|
- | 1331 | { |
|
- | 1332 | mov al, byte [fat12_buffer.BPB_Media] |
|
- | 1333 | ||
- | 1334 | ||
- | 1335 | push ds |
|
- | 1336 | ||
- | 1337 | ||
- | 1338 | mov di, info_real_mode_size |
|
- | 1339 | add di, 0x1000 |
|
- | 1340 | ||
- | 1341 | if DEBUG |
|
- | 1342 | pushad |
|
- | 1343 | ||
- | 1344 | mov ax, info_real_mode_size |
|
- | 1345 | add ax, 0x1000 |
|
- | 1346 | ; mov ax,ds |
|
- | 1347 | mov cx, 0xa |
|
- | 1348 | ||
- | 1349 | mov di, first_entry_in_fat |
|
- | 1350 | mov dword [di], ' ' |
|
- | 1351 | mov word [di+4], ' ' |
|
- | 1352 | call decode |
|
- | 1353 | ;Show size |
|
- | 1354 | mov si, first_entry_in_fat |
|
- | 1355 | call printplain |
|
- | 1356 | ||
- | 1357 | xor ax, ax |
|
- | 1358 | int 0x16 |
|
- | 1359 | ||
- | 1360 | popad |
|
- | 1361 | end if |
|
- | 1362 | ||
- | 1363 | ||
- | 1364 | push di ; push word info_real_mode_size+0x1000 ;cëåäóþùèé ñåãìåíò çà çàãðóæåííûì ó÷àñòêîì |
|
- | 1365 | ||
- | 1366 | xor di, di |
|
- | 1367 | mov point_to_free_root, di ;çíà÷åíèå ñìåùåíèÿ =0 â êîðíåâîé ôàò òàáëèöå îïèñàíèÿ |
|
- | 1368 | ||
- | 1369 | pop ds ; çàãðóæåí ñëåäóþùèé ñåãìåíò ò.å. ïóñòîé ñåãìåíò |
|
- | 1370 | ||
- | 1371 | mov byte [di], al |
|
- | 1372 | or ax, -1 |
|
- | 1373 | inc di |
|
- | 1374 | mov word [di], ax |
|
- | 1375 | ||
- | 1376 | pop ds |
|
- | 1377 | mov point_next_fat_str, 3 |
|
- | 1378 | ||
- | 1379 | if DEBUG |
|
- | 1380 | pushad |
|
- | 1381 | mov ax, point_next_fat_str |
|
- | 1382 | mov cx, 0x0a |
|
- | 1383 | mov di, fat_create_msg |
|
- | 1384 | call decode |
|
- | 1385 | ;Show size |
|
- | 1386 | mov si, fat_create_msg |
|
- | 1387 | call printplain |
|
- | 1388 | popad |
|
- | 1389 | end if |
|
- | 1390 | ||
- | 1391 | } |
|
- | 1392 | macro register_file_in_fat |
|
- | 1393 | ;ìàêðîñ ðåãèñòðàöèè ôàéëà â ôàéëîâîé ñòðóêòóðå Fat |
|
- | 1394 | ;ïîêà ïîääåðæèâàåòñÿ òîëüêî ôàò12, ïîêà )) |
|
- | 1395 | ;âû÷èñëåíèå ñìåæíûõ êëàñòåðîâ è çàíåñåíèå èíôû â fat/ |
|
- | 1396 | { |
|
- | 1397 | local .step2 |
|
- | 1398 | local .step3 |
|
- | 1399 | local .end |
|
- | 1400 | local .eof_file |
|
- | 1401 | ||
- | 1402 | ;di point on root dir íà ôðè ñåêöèþ. |
|
- | 1403 | push es |
|
- | 1404 | ||
- | 1405 | mov ax, info_real_mode_size |
|
- | 1406 | add ax, 0x1000 |
|
- | 1407 | mov es, ax ; push word info_real_mode_size+0x1000 ;ñåãìåíò ñëåäóþùèé çà çàãðóæåííûì áëîêîì â 64 êá |
|
- | 1408 | ||
- | 1409 | ; îïðåäåëÿåì òèï ôàò ïîêà íå îïðåäåëÿåì, ïîêà òîëüêî ôàò 12 |
|
- | 1410 | ; 12 áèò, äëÿ âû÷åñëåíèÿ ñîñåäíèõ êàëàñòåðîâ. |
|
- | 1411 | mov di, firstDataSect ;â ñåêòîðàõ |
|
- | 1412 | sub di, size_root_dir |
|
- | 1413 | ;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
|
- | 1414 | shl di, 9;imul 512 |
|
- | 1415 | add di, point_to_free_root ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ. |
|
- | 1416 | ;íåîáõîäèìî âíåñòè çíà÷åíèå â ðóò äèð ò.å. 32 áàéòà |
|
- | 1417 | if DEBUG |
|
- | 1418 | pushad |
|
- | 1419 | ; mov ax,point_default |
|
- | 1420 | ; mov ax, |
|
- | 1421 | mov cx, 0x0a |
|
- | 1422 | mov di, show_db2 |
|
- | 1423 | mov dword[ds:di], ' ' |
|
- | 1424 | mov word [ds:di+4], ' ' |
|
- | 1425 | call decode |
|
- | 1426 | ;Show size |
|
- | 1427 | mov si, show_db2 |
|
- | 1428 | call printplain |
|
- | 1429 | ; |
|
- | 1430 | ; xor ax,ax |
|
- | 1431 | ; int 0x16 |
|
- | 1432 | popad |
|
- | 1433 | end if |
|
- | 1434 | ||
- | 1435 | ||
- | 1436 | ||
- | 1437 | ;gs:di - óêàçàòåëü äëÿ âíåñåíèÿ èíôîðàöèè â ðóò îáëàñòü ôàò òàáëèöû èíîðìàöèè î ôàéëå. |
|
- | 1438 | mov si, shot_name_fat |
|
- | 1439 | mov cx, 11 |
|
- | 1440 | ;çàïèøåì â ñòðóêòóðó èìÿ |
|
- | 1441 | @@: |
|
- | 1442 | lodsb |
|
- | 1443 | stosb |
|
- | 1444 | loop @b |
|
- | 1445 | ||
- | 1446 | ;çàïèøåì àòðèáóòû ôàéëà è DIR_NTRes - çàðåçåâðèðîâàííûé áàéò =0 |
|
- | 1447 | xor ax, ax |
|
- | 1448 | mov ah, ATTR_VOLUME_ID |
|
- | 1449 | mov word [es:di], ax |
|
- | 1450 | add di, 2 |
|
- | 1451 | ;DIR_CrtTimeTenth |
|
- | 1452 | mov byte [es:di], 100 |
|
- | 1453 | inc di |
|
- | 1454 | ;DIR_CrtTime |
|
- | 1455 | mov word [es:di], 0x032b ;äàòà |
|
- | 1456 | add di, 2 |
|
- | 1457 | ;DIR_CrtDate |
|
- | 1458 | mov word [es:di], 0x0 ;âðåìÿ >< |
|
- | 1459 | add di, 2 |
|
- | 1460 | ;DIR_LstAccDate |
|
- | 1461 | mov word [es:di], 0x032b ;äàòà ìîåãî |
|
- | 1462 | add di, 2 |
|
- | 1463 | ;DIR_FstClusHI |
|
- | 1464 | mov word [es:di], 0x0 ;âðåìÿ äëÿ ôàò12 /16 âñåãäà 0 |
|
- | 1465 | add di, 2 |
|
- | 1466 | ;DIR_WrtTime |
|
- | 1467 | mov word [es:di], 0x0 ;âðåìÿ >< |
|
- | 1468 | add di, 2 |
|
- | 1469 | ;DIR_WrtDate |
|
- | 1470 | mov word [es:di], 0x032b |
|
- | 1471 | add di, 2 |
|
- | 1472 | ||
- | 1473 | mov ax, point_next_fat_str |
|
- | 1474 | mov word [es:di], ax |
|
- | 1475 | add di, 2 |
|
- | 1476 | ||
- | 1477 | push di |
|
- | 1478 | ;DIR_FstClusLO Ìëàäøåå ñëîâî íîìåðà ïåðâîãî êëàñòåðà. |
|
- | 1479 | ; mov ax,point_next_fat_str ;çàãðóçèì óêàçàòåëü íà ýëåìåíò ôàò òàáëèöû ò.å. ýòî íîìåð ôàò çàïèñè |
|
- | 1480 | ;FATOffset = N + (N / 2) ò.å. ýòî óæå ó íàñ ñìåùåíèå ìû çíàåì ÷òî -íà÷èíàåòñÿ âñå ñ 3-ãî ýëåìåíòà çàïèñè ôàò |
|
- | 1481 | mov bx, ax |
|
- | 1482 | shr bx, 1 |
|
- | 1483 | add ax, bx |
|
- | 1484 | ;â àõ ñåé÷àñ FATOffset |
|
- | 1485 | ;ThisFATEntOffset = BPB_ResvdSecCnt + (FATOffset / BPB_BytsPerSec); |
|
- | 1486 | mov bx, word [fat12_buffer.BPB_BytsPerSec] |
|
- | 1487 | cwd |
|
- | 1488 | idiv bx |
|
- | 1489 | ;ax=ThisFATEntOffset= rem (FATOffset / BPB_BytsPerSec) ÷åòíûé èëè íå÷åòíûé óêàçàòåëü. |
|
- | 1490 | mov si, ax |
|
- | 1491 | ;íàì íóæíî â öèêëå çàïèñàòü âñå êëàñòåðû êîòîðûå áóäóò èñïîëüçîâàíû äëÿ ðàçìåùåíèÿ ôàéëà. |
|
- | 1492 | ;óçíàåì ðàçìåð êëàñòåðà. |
|
- | 1493 | movzx eax, word [fat12_buffer.BPB_BytsPerSec] |
|
- | 1494 | movzx ebx, byte [fat12_buffer.BPB_SecPerClus] |
|
- | 1495 | imul eax, ebx |
|
- | 1496 | ;ax - ðàçìåð êëàñòåðà. |
|
- | 1497 | ;ñåé÷àñ áóäåì çàïèñûâàòü âî âðåìåííûé áóôåð ôàò òàáëèöó äëÿ âûáðàííîãî ôàéëà. Ïîñêîëüêó ìû åãî çàãðóçèëè âîçìîæíî íå ïîëíîñòüþ |
|
- | 1498 | ;ìû îáðàáîòàåì çàïèñü äëÿ ôàò ïîëíîñòüþ, â íå çàâèñèìîñòè îò ïðåäåëà áóôåðà ãäå âîçìîæíà ÷àñòü ôàéëà. |
|
- | 1499 | mov ebx, save_file_size ;ðàçìåð ôàéëà â áàéòàõ |
|
- | 1500 | ||
- | 1501 | @@: |
|
- | 1502 | sub ebx, eax |
|
- | 1503 | cmp ebx, eax |
|
- | 1504 | jbe .eof_file |
|
- | 1505 | ||
- | 1506 | inc point_next_fat_str |
|
- | 1507 | mov cx, point_next_fat_str ;çàãðóçèì óêàçàòåëü íà ýëåìåíò ôàò òàáëèöû ò.å. ýòî íîìåð ôàò çàïèñè |
|
- | 1508 | ;FATOffset = N + (N / 2) ò.å. ýòî óæå ó íàñ ñìåùåíèå ìû çíàåì ÷òî -íà÷èíàåòñÿ âñå ñ 3-ãî ýëåìåíòà çàïèñè ôàò |
|
- | 1509 | mov dx, ax |
|
- | 1510 | shr dx, 1 |
|
- | 1511 | add cx, dx |
|
- | 1512 | ||
- | 1513 | ||
- | 1514 | ||
- | 1515 | test si, 0x1 |
|
- | 1516 | jz .step2 |
|
- | 1517 | shl cx, 4 |
|
- | 1518 | mov word[es:si], cx |
|
- | 1519 | inc si |
|
- | 1520 | add cx, ax |
|
- | 1521 | jmp @b |
|
- | 1522 | ||
- | 1523 | .step2: |
|
- | 1524 | and cx, 0x0FFF |
|
- | 1525 | mov word[es:si], cx |
|
- | 1526 | inc si |
|
- | 1527 | add cx, ax |
|
- | 1528 | jmp @b |
|
- | 1529 | ||
- | 1530 | .eof_file: |
|
- | 1531 | mov cx, 0x0fff |
|
- | 1532 | test si, 0x1 |
|
- | 1533 | jz .step3 |
|
- | 1534 | shl cx, 4 |
|
- | 1535 | mov word[es:si], cx |
|
- | 1536 | jmp .end |
|
- | 1537 | ||
- | 1538 | .step3: |
|
- | 1539 | and cx, 0x0FFF |
|
- | 1540 | mov word[es:si], cx |
|
- | 1541 | ||
- | 1542 | .end: |
|
- | 1543 | inc point_next_fat_str |
|
- | 1544 | ||
- | 1545 | pop di |
|
- | 1546 | ;DIR_FileSize 32-áèòíûé DWORD ñîäåðæèò ðàçìåð ôàéëà â áàéòàõ. |
|
- | 1547 | mov eax, save_file_size |
|
- | 1548 | mov dword [es:di], eax |
|
- | 1549 | ||
- | 1550 | if DEBUG |
|
- | 1551 | pushad |
|
- | 1552 | ||
- | 1553 | mov di, firstDataSect ;â ñåêòîðàõ |
|
- | 1554 | sub di, size_root_dir |
|
- | 1555 | ;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
|
- | 1556 | shl di, 9;imul 512 |
|
- | 1557 | add di, point_to_free_root ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ. |
|
- | 1558 | ||
- | 1559 | push di |
|
- | 1560 | ||
- | 1561 | mov si, dest_name_fat |
|
- | 1562 | mov cx, 11 |
|
- | 1563 | ||
- | 1564 | ;çàïèøåì â ñòðóêòóðó èìÿ |
|
- | 1565 | @@: |
|
- | 1566 | mov al, byte [es:di] |
|
- | 1567 | inc di |
|
- | 1568 | mov byte [ds:si], al |
|
- | 1569 | inc si |
|
- | 1570 | loop @b |
|
- | 1571 | ||
- | 1572 | mov di, si |
|
- | 1573 | inc di |
|
- | 1574 | pop ax |
|
- | 1575 | mov cx, 0xa |
|
- | 1576 | call decode |
|
- | 1577 | ||
- | 1578 | mov si, dest_name_fat |
|
- | 1579 | call printplain |
|
- | 1580 | popad |
|
- | 1581 | ||
- | 1582 | END IF |
|
- | 1583 | ||
- | 1584 | ||
- | 1585 | ||
- | 1586 | ||
- | 1587 | ||
- | 1588 | add point_to_free_root, 32 ;óâåëèöèì ñìåùåíèå äî ñëåäóþùåãî çíà÷åíèÿ. |
|
- | 1589 | pop es |
|
- | 1590 | ||
- | 1591 | } |
|
- | 1592 | ||
- | 1593 | ||
- | 1594 | ||
- | 1595 | ||
- | 1596 | ||
- | 1597 | macro get_firstDataSector |
|
- | 1598 | ;ìàêðîñ äëÿ âû÷èñëåíèÿ ïåâîãî ñåêòîðà äàííûõ ò.å. äàííûõ ôàéëîâ â ôàòå |
|
- | 1599 | ;âû÷èñëèì FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors; |
|
- | 1600 | { |
|
- | 1601 | mov ax, word [fat12_buffer.BPB_FATSz16] |
|
- | 1602 | movzx bx, byte [fat12_buffer.BPB_NumFATs] |
|
- | 1603 | imul ax, bx ;9x1=9 |
|
- | 1604 | ;ax=BPB_NumFATs * FATSz |
|
- | 1605 | mov bx, word [fat12_buffer.BPB_RootEntCnt] ; count of 32-byte dir. entries (224*32 = 14 sectors= 7 kb) |
|
- | 1606 | shr bx, 4 ;imul bx,32 and then div 512 -> in bx size in sectors |
|
- | 1607 | add ax, bx ;9+14=23 |
|
- | 1608 | mov size_root_dir, bx |
|
- | 1609 | movzx bx, byte [fat12_buffer.BPB_RsvdSecCnt] ;add 1 for fat 16/12 |
|
- | 1610 | add ax, bx |
|
- | 1611 | ;ax=firstDataSector - ãäå íà÷èíàåòñÿ ïåðâûé ñåêòîðî îò 0 ñåêòîðà â ñåêòîðàõ. - ôàêòè÷åñêè = 24 ñåêòîð |
|
- | 1612 | mov firstDataSect, ax ;ñîõðàíèì äëÿ âû÷èñëåíèÿ |
|
- | 1613 | ; ïîëó÷èìçíà÷åíèå êëàñòåðîâ, ýòî îáúåì â êîòîðûé ìû ìîæåì çàïèñàòü äàííûå |
|
- | 1614 | mov bx, word [fat12_buffer.BPB_TotSec16] |
|
- | 1615 | sub bx, ax |
|
- | 1616 | mov ax, bx |
|
- | 1617 | movzx bx, byte [fat12_buffer.BPB_SecPerClus] |
|
- | 1618 | cwd |
|
- | 1619 | idiv bx |
|
- | 1620 | mov DataClasters, ax |
|
- | 1621 | ||
- | 1622 | if DEBUG |
|
- | 1623 | pushad |
|
- | 1624 | mov ax, firstDataSect ;ïåðâûé ñåêòîð äàííûõ |
|
- | 1625 | mov cx, 0x0a |
|
- | 1626 | mov di, firstDataSect_msg |
|
- | 1627 | call decode |
|
- | 1628 | ;Show size |
|
- | 1629 | mov si, firstDataSect_msg |
|
- | 1630 | call printplain |
|
- | 1631 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 1632 | mov ax, size_root_dir ;ðàçìåð ðóò äèð â ñåòîêòîðàõ |
|
- | 1633 | mov cx, 0x0a |
|
- | 1634 | mov di, size_root_dir_msg |
|
- | 1635 | call decode |
|
- | 1636 | ;Show size |
|
- | 1637 | mov si, size_root_dir_msg |
|
- | 1638 | call printplain |
|
- | 1639 | ;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 1640 | mov ax, DataClasters;êëàñòåðû |
|
- | 1641 | mov cx, 0x0a |
|
- | 1642 | mov di, DataClasters_msg |
|
- | 1643 | call decode |
|
- | 1644 | ;Show size |
|
- | 1645 | mov si, DataClasters_msg |
|
- | 1646 | call printplain |
|
- | 1647 | popad |
|
- | 1648 | ||
- | 1649 | end if |
|
- | 1650 | ||
- | 1651 | } |
|
- | 1652 | ||
- | 1653 | macro use_RamdiskPATHS |
|
- | 1654 | ;ïàðñèíã ïóòè èñòî÷íèêà ôàéëîâ. |
|
- | 1655 | { |
|
- | 1656 | ||
- | 1657 | } |
|
- | 1658 | ||
- | 1659 | macro use_RamdiskPATHD |
|
- | 1660 | ;ïàðñèíã ïóòè íàçíà÷åíèÿ ôàéëîâ. |
|
- | 1661 | { |
|
- | 1662 | ||
- | 1663 | } |
|
- | 1664 | macro check_name_file |
|
- | 1665 | ;ìàêðîñ ïðîâåðêè èìåíè íà ïîâòîð, èìÿ äîëæíî áûòü óíèêàëüíûì. |
|
- | 1666 | ;âõîäíûå äàííûå: es- ñåãìåíò ãäå ëåæèò ôàéë äëÿ ïàðñèíãà ò.å. startos.ini |
|
- | 1667 | ;di - óêàçàòåëü íà èìÿ ôàéëà ò.å. es:di óêàçûâàåò íà èìÿ ôàéëà íàçíà÷åíèÿ |
|
- | 1668 | ;âûõîäíûå äàííûå eax =-1 èìÿ ñîâïàëî, eax=0 èìÿ íå ñîâïàëî. |
|
- | 1669 | { |
|
- | 1670 | local .no_equal |
|
- | 1671 | local .exit |
|
- | 1672 | local .loop_size_root_dir |
|
- | 1673 | ;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè. |
|
- | 1674 | ;ïðåîáðàçóåì â àíàëîã ôàò çàïèñè ñòî÷êó ñ èìåíåì íàçíà÷åíèÿ |
|
- | 1675 | convertion_file_name ; ïðåîáðàçîâàëè èìÿ ïî íóæíûì ïðàâèëàì |
|
- | 1676 | test ax, ax |
|
- | 1677 | jnz .exit |
|
- | 1678 | ||
- | 1679 | lea si, [shot_name_fat] ; desination name of file |
|
- | 1680 | ||
- | 1681 | ;âû÷èñëèì óêàçàòåëü íà êîðíåâóþ äèðåêòîðèþ |
|
- | 1682 | mov di, firstDataSect |
|
- | 1683 | sub di, size_root_dir |
|
- | 1684 | ;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
|
- | 1685 | shl di, 9;imul 512 |
|
- | 1686 | ;di= Ýòî ñìåùåíèå îò íà÷àëà áóôåðà äî ðóò äèðåêòîðèè. â ïðåäåëàõ 64 êá. |
|
- | 1687 | ;çàãðóçèì çíà÷åíèå - ò.å. êîë-âî ýëåìåíòîâ, êîòîðûå ìû ìîæåì ïðîñìàòðèâàòü. |
|
- | 1688 | mov dx, root_dir_entry_count |
|
- | 1689 | ||
- | 1690 | mov ax, info_real_mode_size |
|
- | 1691 | add ax, 0x1000 |
|
- | 1692 | ||
- | 1693 | ||
- | 1694 | mov gs, ax |
|
- | 1695 | .loop_size_root_dir: |
|
- | 1696 | DEBUG1 equ 0 |
|
- | 1697 | if DEBUG1 |
|
- | 1698 | pushad |
|
- | 1699 | push di |
|
- | 1700 | mov eax, dword[gs:di] |
|
- | 1701 | lea si, [check_root_fat_+14] |
|
- | 1702 | mov dword [ds:si], '----' |
|
- | 1703 | mov dword [ds:si+4], '----' |
|
- | 1704 | mov dword [ds:si+8], '----' |
|
- | 1705 | mov dword[ds:si], eax |
|
- | 1706 | mov eax, dword[gs:di+4] |
|
- | 1707 | mov dword[ds:si+4], eax |
|
- | 1708 | mov eax, dword[gs:di+8] |
|
- | 1709 | mov dword[ds:si+8], eax |
|
- | 1710 | ||
- | 1711 | ; |
|
- | 1712 | xor eax, eax |
|
- | 1713 | mov ax, gs;point_next_fat_str |
|
- | 1714 | mov cx, 0x0a |
|
- | 1715 | mov di, check_root_fat_ |
|
- | 1716 | mov dword [di], ' ' |
|
- | 1717 | mov word [di+4], ' ' |
|
- | 1718 | call decode |
|
- | 1719 | xor eax, eax |
|
- | 1720 | pop ax |
|
- | 1721 | mov di, (check_root_fat_+7) |
|
- | 1722 | mov dword [di], ' ' |
|
- | 1723 | mov word [di+4], ' ' |
|
- | 1724 | call decode |
|
- | 1725 | ||
- | 1726 | ;Show size |
|
- | 1727 | lea si, [check_root_fat_] |
|
- | 1728 | call printplain |
|
- | 1729 | ||
- | 1730 | lea si, [shot_name_fat] |
|
- | 1731 | call printplain |
|
- | 1732 | ||
- | 1733 | xor ax, ax |
|
- | 1734 | int 0x16 |
|
- | 1735 | popad |
|
- | 1736 | end if |
|
- | 1737 | ||
- | 1738 | xor bx, bx |
|
- | 1739 | mov cx, 11 ;size of name in struct FAT |
|
- | 1740 | ||
- | 1741 | @@: |
|
- | 1742 | mov al, byte [ds:si+bx] ;ds:si - point to name of convertion variable. |
|
- | 1743 | mov ah, byte [gs:di+bx] ;gs:di - point to name in fat struct |
|
- | 1744 | inc bx |
|
- | 1745 | ||
- | 1746 | if DEBUG |
|
- | 1747 | ; pushad |
|
- | 1748 | ; lea si,[check_root_fat_+14] |
|
- | 1749 | ; mov dword [ds:si],'----' |
|
- | 1750 | ; mov word [ds:si],ax |
|
- | 1751 | ; call printplain |
|
- | 1752 | ||
- | 1753 | ; xor ax,ax |
|
- | 1754 | ; int 0x16 |
|
- | 1755 | ||
- | 1756 | ; popad |
|
- | 1757 | end if |
|
- | 1758 | ||
- | 1759 | ||
- | 1760 | ||
- | 1761 | cmp ah, al |
|
- | 1762 | jnz .no_equal |
|
- | 1763 | ||
- | 1764 | ; dec cx |
|
- | 1765 | ; jnz @b |
|
- | 1766 | loop @b |
|
- | 1767 | ||
- | 1768 | ;.succesfuly: |
|
- | 1769 | ;ïå÷àëüíî, òàêîå èìÿ óæå èìååòñÿ :( |
|
- | 1770 | or ax, -1 |
|
- | 1771 | jmp .exit |
|
- | 1772 | ||
- | 1773 | ||
- | 1774 | .no_equal: |
|
- | 1775 | add di, 32 ;fat struct =32 byte |
|
- | 1776 | dec dx |
|
- | 1777 | jnz .loop_size_root_dir |
|
- | 1778 | ||
- | 1779 | ;.exit_check_name: |
|
- | 1780 | and ax, 0 |
|
- | 1781 | ||
- | 1782 | .exit: |
|
- | 1783 | ||
- | 1784 | if DEBUG |
|
- | 1785 | pushad |
|
- | 1786 | ;Show size |
|
- | 1787 | lea si, [check_name_fat_msg_n] |
|
- | 1788 | test ax, ax |
|
- | 1789 | jz @f |
|
- | 1790 | lea si, [check_name_fat_msg_y] |
|
- | 1791 | call printplain |
|
- | 1792 | lea si, [alarm_msg] |
|
- | 1793 | @@: |
|
- | 1794 | call printplain |
|
- | 1795 | popad |
|
- | 1796 | end if |
|
- | 1797 | ||
- | 1798 | } |
|
- | 1799 | ||
- | 1800 | ||
- | 1801 | macro convertion_file_name |
|
- | 1802 | ;ìàêðîñ êîíâåðòàöèè èìåíè, ýòî íóæíî ïîñêîëüêó ôîðìàò ïðåäñòàâëåííûé íå ñîîòâåòñâóåò ôàò è íàïðÿìóþ ðåäêî ìîæíî êîãäà èñïîëüçîâàòü |
|
- | 1803 | ;ïðåîáðàçîâàíèå èìåíè òèïà hello.asm â 'HELLO ASM', â ñîîòâåòñòâèè ñ ïðàâèëàìè fat. |
|
- | 1804 | ;âõîäíûå ïàðàìåòðû es:di óêàçàòåëü íà èìÿ ôàéëà êîòîðîå íóæíî ïðåîáðàçîâàòü, êîíå÷íûé áóôåð shot_name_fat |
|
- | 1805 | { |
|
- | 1806 | local .next_step |
|
- | 1807 | local .error |
|
- | 1808 | local .st1 |
|
- | 1809 | local .st2 |
|
- | 1810 | local .st2_l |
|
- | 1811 | local .st3 |
|
- | 1812 | local .st4_s |
|
- | 1813 | local .st4 |
|
- | 1814 | local .st5 |
|
- | 1815 | ||
- | 1816 | ;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè. |
|
- | 1817 | ; mov di,point_to_dest_file_name âõîäíîé ïàðàìåòð |
|
- | 1818 | mov si, shot_name_fat |
|
- | 1819 | or first_input, -1 ;ïðè ïåðâîì âõîäå óñòàíàâëèâàåì ôëàã |
|
- | 1820 | mov cx, 11 ;äëèííà èìåíè â ñòóêòóðå ôàò òàáëèöû |
|
- | 1821 | ||
- | 1822 | @@: |
|
- | 1823 | mov al, byte [es:di] |
|
- | 1824 | cmp al, 0xa |
|
- | 1825 | jz .st4_s |
|
- | 1826 | cmp al, 0xd |
|
- | 1827 | jz .st4_s |
|
- | 1828 | cmp al, 0x20 |
|
- | 1829 | jz .st4_s |
|
- | 1830 | ||
- | 1831 | cmp al, 0x20 |
|
- | 1832 | jb .error |
|
- | 1833 | cmp al, 0x22 |
|
- | 1834 | jz .error |
|
- | 1835 | cmp al, 0x2a |
|
- | 1836 | jz .error |
|
- | 1837 | cmp al, 0x2b |
|
- | 1838 | jz .error |
|
- | 1839 | cmp al, 0x2c |
|
- | 1840 | jz .error |
|
- | 1841 | cmp al, 0x2F |
|
- | 1842 | jz .error |
|
- | 1843 | ||
- | 1844 | cmp al, 0x3a |
|
- | 1845 | jz .error |
|
- | 1846 | cmp al, 0x3b |
|
- | 1847 | jz .error |
|
- | 1848 | cmp al, 0x3c |
|
- | 1849 | jz .error |
|
- | 1850 | cmp al, 0x3d |
|
- | 1851 | jz .error |
|
- | 1852 | cmp al, 0x3E |
|
- | 1853 | jz .error |
|
- | 1854 | cmp al, 0x3F |
|
- | 1855 | jz .error |
|
- | 1856 | ||
- | 1857 | cmp al, 0x5b |
|
- | 1858 | jz .error |
|
- | 1859 | cmp al, 0x5c |
|
- | 1860 | jz .error |
|
- | 1861 | cmp al, 0x5d |
|
- | 1862 | jz .error |
|
- | 1863 | ||
- | 1864 | cmp al, 0x7c |
|
- | 1865 | jz .error |
|
- | 1866 | ||
- | 1867 | ||
- | 1868 | cmp first_input, -1 |
|
- | 1869 | jnz .next_step |
|
- | 1870 | and first_input, 0 ;ñáîðîñèì ôëàã. |
|
- | 1871 | cmp al, '.' |
|
- | 1872 | jz .error ;îáðàáîòêà òî÷êè, ôàéë íå ìîæåò íà÷èíàòüñÿ ñ òî÷êè |
|
- | 1873 | ||
- | 1874 | .next_step: |
|
- | 1875 | cmp al, 0x2e |
|
- | 1876 | jnz .st2 ;îáðàáîòêà òî÷êè, â ñåðåäèíå ôàéëà |
|
- | 1877 | ;òóò ó íàñ óñòàíîâëåí ðàçäåëèòåëü |
|
- | 1878 | ;âñå îñòàëüíåî ìåñòî çàéìóò ïðîáåëû |
|
- | 1879 | mov al, ' ' |
|
- | 1880 | ||
- | 1881 | ;!fixme îáðàáîòàíû íå âñå èñêëþ÷åíèÿ :( |
|
- | 1882 | cmp cl, 3 ;ôîðìàò ôàéëà òàêîé GIDGIDIIASM ò.å. gidgidii.asm |
|
- | 1883 | jbe .st2 |
|
- | 1884 | ||
- | 1885 | ||
- | 1886 | .st3: |
|
- | 1887 | mov byte [si], al |
|
- | 1888 | inc si |
|
- | 1889 | dec cx |
|
- | 1890 | cmp cx, 3 |
|
- | 1891 | ja .st3 |
|
- | 1892 | ; inc cx |
|
- | 1893 | inc di |
|
- | 1894 | jmp @b |
|
- | 1895 | ||
- | 1896 | .st2: |
|
- | 1897 | cmp al, 0x60 |
|
- | 1898 | jbe .st2_l |
|
- | 1899 | ||
- | 1900 | xor al, 0x20;ñäåëàåì çàãëàâíûå áóêâû |
|
- | 1901 | .st2_l: |
|
- | 1902 | mov byte [si], al |
|
- | 1903 | inc di |
|
- | 1904 | inc si |
|
- | 1905 | ; dec cx |
|
- | 1906 | ; jnz @b |
|
- | 1907 | loop @b |
|
- | 1908 | .st5: |
|
- | 1909 | xor ax, ax |
|
- | 1910 | jmp @f |
|
- | 1911 | ||
- | 1912 | ;;;;;;;;ôàéë çàêîí÷èëñÿ, è íóæíî âíåñòè â êîíåö ïðîáåëû |
|
- | 1913 | .st4_s: |
|
- | 1914 | mov al, ' ' |
|
- | 1915 | .st4: |
|
- | 1916 | mov byte [si], al |
|
- | 1917 | inc si |
|
- | 1918 | loop .st4 |
|
- | 1919 | jmp .st5 |
|
- | 1920 | ||
- | 1921 | .error: |
|
- | 1922 | or ax, -1 |
|
- | 1923 | @@: |
|
- | 1924 | ||
- | 1925 | if DEBUG |
|
- | 1926 | pushad |
|
- | 1927 | ||
- | 1928 | mov si, convertion_file_name_msg_y |
|
- | 1929 | test ax, ax |
|
- | 1930 | jz @f |
|
- | 1931 | mov si, convertion_file_name_msg_n |
|
- | 1932 | @@: |
|
- | 1933 | call printplain |
|
- | 1934 | ||
- | 1935 | mov si, shot_name_fat |
|
- | 1936 | mov byte [si+12], 0 |
|
- | 1937 | call printplain |
|
- | 1938 | popad |
|
- | 1939 | ||
- | 1940 | end if |
|
- | 1941 | } |
|
- | 1942 | ||
- | 1943 | macro move_file_up |
|
- | 1944 | ;ìàêðîñ êîòîðûé ïåðåìåùàåò çà 1 ìá ñ ïðàâèëàìè ôàò äàííûå ôàéëà. |
|
- | 1945 | { |
|
- | 1946 | local .st1 |
|
- | 1947 | local .correct_on_byte |
|
- | 1948 | ;ñåé÷àñ èìååò áûòü ñèòóàöèÿ, êîãäà BPB óæå ïåðåìåùåí çà 1 ìá, ôàò, è ðóò äèð áóäóò ïîçæå ïåðåìåùåíû, |
|
- | 1949 | ;à íàì íóæíî âû÷èñëèòü ìåñòî, è ïåðåíåñòè òóäà ñîäåðæèìîå ôàéëà |
|
- | 1950 | ;ïîëó÷åíîå çíà÷åíèå óêàçûâàåò â áàéòàõ íà íà÷àëî äàííûõ |
|
- | 1951 | ||
- | 1952 | mov ax, info_real_mode_size ; ñåãìåíò ãäå ðàñïîëîæåíû äàííûå |
|
- | 1953 | mov si, table_15_87 |
|
- | 1954 | mov word [si+8*2+2], ax |
|
- | 1955 | ;ñìåùåíèå äî äàííûõ óæå çà 1-ì ìá |
|
- | 1956 | movzx eax, firstDataSect |
|
- | 1957 | movzx edx, data_offset |
|
- | 1958 | add eax, edx |
|
- | 1959 | ||
- | 1960 | movzx ebx, word [fat12_buffer.BPB_BytsPerSec] |
|
- | 1961 | movzx edx, byte [fat12_buffer.BPB_SecPerClus] |
|
- | 1962 | imul bx, dx ;ïîëó÷èì ðàçìåð êëàñòåðà |
|
- | 1963 | ||
- | 1964 | ||
- | 1965 | ||
- | 1966 | push ebx ;save bx |
|
- | 1967 | ||
- | 1968 | imul eax, ebx |
|
- | 1969 | ; shl eax,9 ;óìíîæèì íà 512 |
|
- | 1970 | ||
- | 1971 | if DEBUG |
|
- | 1972 | pushad |
|
- | 1973 | xor eax, eax |
|
- | 1974 | mov ax, info_real_mode_size |
|
- | 1975 | mov cx, 0x0a |
|
- | 1976 | mov di, seg_where_get_data |
|
- | 1977 | mov dword [di], ' ' |
|
- | 1978 | mov word [di+4], ' ' |
|
- | 1979 | call decode |
|
- | 1980 | ;Show size |
|
- | 1981 | mov si, seg_where_get_data |
|
- | 1982 | call printplain |
|
- | 1983 | popad |
|
- | 1984 | ||
- | 1985 | end if |
|
- | 1986 | ||
- | 1987 | ; mov bx,word [fat12_buffer.BPB_BytsPerSec] |
|
- | 1988 | ; movzx dx,byte [fat12_buffer.BPB_SecPerClus] |
|
- | 1989 | ; imul bx,dx |
|
- | 1990 | ; cwd |
|
- | 1991 | ; idiv bx |
|
- | 1992 | ||
- | 1993 | mov dl, 0x10 |
|
- | 1994 | ||
- | 1995 | @@: |
|
- | 1996 | cmp eax, 0x00010000 |
|
- | 1997 | jb @f |
|
- | 1998 | ||
- | 1999 | sub eax, 0x00010000 |
|
- | 2000 | inc dl |
|
- | 2001 | jmp @b |
|
- | 2002 | ||
- | 2003 | ||
- | 2004 | @@: |
|
- | 2005 | mov byte [si+8*3+3], dl ;êóäà ïèñàòü |
|
- | 2006 | mov word [si+8*3+2], ax |
|
- | 2007 | ||
- | 2008 | mov ecx, save_file_size ;ðàçìåð ôàéëà â áàéòàõ. |
|
- | 2009 | cmp ecx, 0x0000ffff ;ðàçìåð áëîêà ò.å. 64 êá |
|
- | 2010 | jbe .correct_on_byte ;êîððåêòèðîâêà íà áàéò çíà÷åíèÿ |
|
- | 2011 | ||
- | 2012 | ||
- | 2013 | ||
- | 2014 | mov ecx, 0x00010000 ;65536 |
|
- | 2015 | sub save_file_size, ecx ;îòíèìèì |
|
- | 2016 | ; jmp .st1 ;ïîëó÷èì 0õ8000 |
|
- | 2017 | ||
- | 2018 | ||
- | 2019 | ||
- | 2020 | ||
- | 2021 | ;êîððåêòèðîâêà çíà÷åíèÿ äîëæíà áûòü âûïîëåíåíà íà ðàçìåð êëàñòåðà |
|
- | 2022 | .correct_on_byte: |
|
- | 2023 | ;/óçíàåì ðàçìåð êëàñòåðà |
|
- | 2024 | pop eax ;restore size of claster |
|
- | 2025 | push ecx |
|
- | 2026 | @@: |
|
- | 2027 | inc data_offset |
|
- | 2028 | ||
- | 2029 | cmp eax, ecx |
|
- | 2030 | jae @f |
|
- | 2031 | sub ecx, eax |
|
- | 2032 | jmp @b |
|
- | 2033 | @@: |
|
- | 2034 | pop ecx |
|
- | 2035 | ||
- | 2036 | ||
- | 2037 | ||
- | 2038 | ||
- | 2039 | test ecx, 0x1 |
|
- | 2040 | jz .st1 |
|
- | 2041 | inc ecx |
|
- | 2042 | .st1: |
|
- | 2043 | shr ecx, 1 ; ïðåîáðàçîâàòü çíà÷åíèå äëÿ 0x87 function |
|
- | 2044 | ||
- | 2045 | ;ïåðåíåñåì áëîê çà 1 ìá |
|
- | 2046 | push es |
|
- | 2047 | push ds |
|
- | 2048 | pop es |
|
- | 2049 | ||
- | 2050 | mov ah, 0x87 |
|
- | 2051 | int 0x15 |
|
- | 2052 | pop es |
|
- | 2053 | ||
- | 2054 | if DEBUG |
|
- | 2055 | pusha |
|
- | 2056 | ; mov ax,point_next_fat_str |
|
- | 2057 | mov cx, 0x0a |
|
- | 2058 | mov di, return_code_af_move |
|
- | 2059 | call decode |
|
- | 2060 | ;Show size |
|
- | 2061 | mov si, return_code_af_move |
|
- | 2062 | call printplain |
|
- | 2063 | popa |
|
- | 2064 | ||
- | 2065 | end if |
|
- | 2066 | ||
- | 2067 | } |
|
- | 2068 | ||
- | 2069 | ||
- | 2070 | macro move_up_fat_and_root_d |
|
- | 2071 | ;ìàêðîñ, êîòîðûé ïîçâîëÿåò ïåðåíåñòè âûøå 1 ìá â ñòðóêòóðó îáðàçà ôàò òàáëèöó è ðóò äèðåêòîðèþ |
|
- | 2072 | { |
|
- | 2073 | local .st1 |
|
- | 2074 | ||
- | 2075 | mov ax, info_real_mode_size |
|
- | 2076 | add ax, 0x1000 |
|
- | 2077 | ||
- | 2078 | mov si, table_15_87 |
|
- | 2079 | mov word [si+8*2+2], ax |
|
- | 2080 | ;ñìåùåíèå äî äàííûõ |
|
- | 2081 | mov ax, 512 |
|
- | 2082 | mov word [si+8*3+2], ax |
|
- | 2083 | ;fixme! òóò íåîáõîäèìî ñäåëàòü ïîäåðæêó ò.å. ôîðìèðîâàòü ñìåùåíèå ôàéëà â óæå çàïèñàííûõ äàííûõ. |
|
- | 2084 | ||
- | 2085 | movzx ecx, word [fat12_buffer.BPB_FATSz16] |
|
- | 2086 | movzx bx, byte [fat12_buffer.BPB_NumFATs] |
|
- | 2087 | imul cx, bx ;9x1=9 |
|
- | 2088 | ||
- | 2089 | add cx, size_root_dir ;ðàçìåð êîðíåâîé äèððåêòîðèè |
|
- | 2090 | shl ecx, 9 ;imul 512 |
|
- | 2091 | ||
- | 2092 | ||
- | 2093 | ;êîððåêòèðîâêà çíà÷åíèÿ |
|
- | 2094 | test ecx, 0x1 |
|
- | 2095 | jz .st1 |
|
- | 2096 | inc ecx |
|
- | 2097 | .st1: |
|
- | 2098 | shr ecx, 1 |
|
- | 2099 | ||
- | 2100 | push es |
|
- | 2101 | push ds |
|
- | 2102 | pop es |
|
- | 2103 | ||
- | 2104 | mov ah, 0x87 |
|
- | 2105 | int 0x15 |
|
- | 2106 | pop es |
|
- | 2107 | ||
- | 2108 | if DEBUG |
|
- | 2109 | pusha |
|
- | 2110 | ; mov ax,point_next_fat_str |
|
- | 2111 | mov cx, 0x0a |
|
- | 2112 | mov di, return_code_af_fat_m |
|
- | 2113 | call decode |
|
- | 2114 | ;Show size |
|
- | 2115 | mov si, return_code_af_fat_m |
|
- | 2116 | call printplain |
|
- | 2117 | popa |
|
- | 2118 | ||
- | 2119 | end if |
|
- | 2120 | ||
- | 2121 | } |
|
- | 2122 | > |
|
2096 | >óìåùàåòñÿ>óìåùàåòñÿ>=fat32 |
2123 | >óìåùàåòñÿ>óìåùàåòñÿ>=fat32 |
2097 | ;>65525<=fat32 |
2124 | ;>65525<=fat32 |
2098 | ;>=fat16<65525<=fat32 |
2125 | ;>=fat16<65525<=fat32 |
2099 | ;>4085<=fat16<65525<=fat32 |
2126 | ;>4085<=fat16<65525<=fat32 |
2100 | ;> |
2127 | ;> |