Subversion Repositories Kolibri OS

Rev

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

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