Subversion Repositories Kolibri OS

Rev

Rev 1231 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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