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