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