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