1088,8 → 1088,7 |
;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ dw,dw,db'@menu',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì |
;ñîõðàíèëè ïåâûå 2 word |
|
;//ïðîâåðêà íàëè÷èÿ òàêîãî æå èìåíè â ðóò äèð |
|
; |
@@: mov al,byte [es:di] |
cmp al,',' ; ò.å. èùåì ðàçäåëèòåëü |
jz .found_end_str |
1135,6 → 1134,21 |
|
mov di,point_to_dest_file_name |
|
if DEBUG |
pushad |
; mov ax,di |
mov cx,0x0a |
mov di,name_of_seg_get_64 |
mov dword[ds:di],' ' |
mov word[ds:di+4],' ' |
call decode |
;Show size |
mov si,name_of_seg_get_64 |
call printplain |
|
popad |
end if |
|
push word [es:di] |
push cx |
xor ax,ax |
1184,7 → 1198,7 |
|
|
if DEBUG |
pusha |
pushad |
mov cx,0x0a |
mov di,RamdiskFile_msg |
mov dword[ds:di],' ' |
1193,7 → 1207,7 |
mov si,RamdiskFile_msg |
call printplain |
|
popa |
popad |
end if |
|
|
1274,8 → 1288,8 |
|
} |
|
macro use_BPB_RAM |
;äàííûé ìàêðîñ çàêèäûâàåò BPB ñòðóêòóðó, ïîêà òîëüêî ôàò12 çà 1 ìá |
macro use_BPB_RAM ;çàêèíóòü ñàìûå ïåðâûå 512 áàéò çà 1-é ìá |
;äàííûé ìàêðîñ çàêèäûâàåò BPB ñòðóêòóðó ò.å. ïåðâûå 512 áàéò, ïîêà òîëüêî ôàò12 çà 1 ìá |
{ |
mov ax,fat12_buffer |
mov si,table_15_87 |
1283,7 → 1297,7 |
push es |
push ds |
pop es |
mov cx,31 ;ôàò12 óêëàäûâàåòñÿ â 62 áàéòà 62/2=31 |
mov cx,256 ;áóò ñåêòîð óêëàäûâàåòñÿ â 512 áàéò 512/2=256 |
mov ah, 0x87 |
int 0x15 |
pop es |
1315,12 → 1329,35 |
|
mov di,info_real_mode_size |
add di,0x1000 |
|
if DEBUG |
pushad |
|
mov ax,info_real_mode_size |
add ax,0x1000 |
; mov ax,ds |
mov cx,0xa |
|
mov di,first_entry_in_fat |
mov dword [di],' ' |
mov word [di+4],' ' |
call decode |
;Show size |
mov si,first_entry_in_fat |
call printplain |
|
xor ax,ax |
int 0x16 |
|
popad |
end if |
|
|
push di ; push word info_real_mode_size+0x1000 ;cëåäóþùèé ñåãìåíò çà çàãðóæåííûì ó÷àñòêîì |
|
xor di,di |
mov point_to_free_root,di ;çíà÷åíèå ñìåùåíèÿ =0 â êîðíåâîé ôàò òàáëèöå îïèñàíèÿ |
|
|
pop ds ; çàãðóæåí ñëåäóþùèé ñåãìåíò ò.å. ïóñòîé ñåãìåíò |
|
mov byte [di],al |
1328,8 → 1365,6 |
inc di |
mov word [di],ax |
|
|
|
pop ds |
mov point_next_fat_str,3 |
|
1371,6 → 1406,26 |
shl di,9 ;imul 512 |
add di,point_to_free_root ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ. |
;íåîáõîäèìî âíåñòè çíà÷åíèå â ðóò äèð ò.å. 32 áàéòà |
if DEBUG |
pushad |
; mov ax,point_default |
; mov ax, |
mov cx,0x0a |
mov di,show_db2 |
mov dword[ds:di],' ' |
mov word [ds:di+4],' ' |
call decode |
;Show size |
mov si,show_db2 |
call printplain |
; |
; xor ax,ax |
; int 0x16 |
popad |
end if |
|
|
|
;gs:di - óêàçàòåëü äëÿ âíåñåíèÿ èíôîðàöèè â ðóò îáëàñòü ôàò òàáëèöû èíîðìàöèè î ôàéëå. |
mov si,shot_name_fat |
mov cx,11 |
1488,8 → 1543,11 |
shl di,9 ;imul 512 |
add di,point_to_free_root ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ. |
|
push di |
|
mov si,dest_name_fat |
mov cx,11 |
|
;çàïèøåì â ñòðóêòóðó èìÿ |
@@: mov al,byte [es:di] |
inc di |
1497,8 → 1555,12 |
inc si |
loop @b |
|
xor ax,ax |
mov byte [si],al |
mov di,si |
inc di |
pop ax |
mov cx,0xa |
call decode |
|
mov si,dest_name_fat |
call printplain |
popad |
1593,9 → 1655,10 |
{ |
local .no_equal |
local .exit |
local .loop_size_root_dir |
;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè. |
;ïðåîáðàçóåì â àíàëîã ôàò çàïèñè ñòî÷êó ñ èìåíåì íàçíà÷åíèÿ |
convertion_file_name |
convertion_file_name ; ïðåîáðàçîâàëè èìÿ ïî íóæíûì ïðàâèëàì |
test ax,ax |
jnz .exit |
|
1605,17 → 1668,11 |
mov di,firstDataSect |
sub di,size_root_dir |
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð |
|
|
shl di,9 ;imul 512 |
|
|
|
|
;di= Ýòî ñìåùåíèå îò íà÷àëà áóôåðà äî ðóò äèðåêòîðèè. |
;di= Ýòî ñìåùåíèå îò íà÷àëà áóôåðà äî ðóò äèðåêòîðèè. â ïðåäåëàõ 64 êá. |
;çàãðóçèì çíà÷åíèå - ò.å. êîë-âî ýëåìåíòîâ, êîòîðûå ìû ìîæåì ïðîñìàòðèâàòü. |
mov dx,root_dir_entry_count |
; mov si,point_to_dest_file_name |
mov si,point_to_dest_file_name |
|
mov ax,info_real_mode_size |
add ax,0x1000 |
1622,30 → 1679,49 |
|
|
mov gs,ax |
mov cx,11 ;size of name in struct FAT |
.loop_size_root_dir: |
|
@@: |
mov al,byte [ds:si+bx] |
mov ah,byte [gs:di+bx] ;gs:di - point to name in fat struct |
|
if DEBUG |
pushad |
; pushad |
; push di |
; mov eax,dword[gs:di] |
; mov si,(check_root_fat_+14) |
; mov dword [ds:si],'____' |
; mov dword [ds:si+4],'____' |
; mov dword[ds:si],eax |
; mov eax,dword[gs:di+4] |
; mov dword[ds:si+4],eax |
; |
; |
; xor eax,eax |
; mov ax,gs;point_next_fat_str |
; mov cx,0x0a |
; mov di,check_root_fat_ |
; mov dword [di],' ' |
; mov word [di+4],' ' |
; call decode |
; xor eax,eax |
; pop ax |
; mov di,(check_root_fat_+7) |
; mov dword [di],' ' |
; mov word [di+4],' ' |
; call decode |
|
;Show size |
; mov si,check_root_fat_ |
; call printplain |
|
mov cx,11 |
;input cx=size al=char áóäåò âûâåäåí ñèìâîë ñêîëüêî ðàç óêàçàíî â cx |
@@: |
mov al,byte [gs:di] |
inc di |
call putchar |
loop @b |
; xor ax,ax |
; int 0x16 |
; popad |
end if |
|
xor ax,ax |
int 0x16 |
xor bx,bx |
mov cx,11 ;size of name in struct FAT |
|
|
popad |
end if |
@@: |
mov al,byte [es:si+bx] |
mov ah,byte [gs:di+bx] ;gs:di - point to name in fat struct |
inc bx |
|
cmp ah,al |
1654,6 → 1730,7 |
; dec cx |
; jnz @b |
loop @b |
|
;.succesfuly: |
;ïå÷àëüíî, òàêîå èìÿ óæå èìååòñÿ :( |
or ax,-1 |
1661,11 → 1738,9 |
|
|
.no_equal: |
mov cx,11;save_cx_check_name |
xor bx,bx |
add di,32 ;fat struct =32 byte |
dec dx |
jnz @b |
jnz .loop_size_root_dir |
|
;.exit_check_name: |
and ax,0 |
1673,17 → 1748,14 |
.exit: |
|
if DEBUG |
pusha |
; movzx eax,ax;point_next_fat_str |
mov cx,0x0a |
mov di,check_name_fat_msg |
mov dword [di],' ' |
mov word [di+4],' ' |
call decode |
pushad |
;Show size |
mov si,check_name_fat_msg |
call printplain |
popa |
mov si,check_name_fat_msg_n |
test ax,ax |
jz @f |
mov si,check_name_fat_msg_y |
@@: call printplain |
popad |
end if |
|
} |
1809,19 → 1881,18 |
@@: |
|
if DEBUG |
pusha |
; mov ax,point_next_fat_str |
mov cx,0x0a |
mov di,convertion_file_name_msg |
call decode |
;Show size |
mov si,convertion_file_name_msg |
call printplain |
pushad |
|
mov si,convertion_file_name_msg_y |
test ax,ax |
jz @f |
mov si,convertion_file_name_msg_n |
@@: call printplain |
|
mov si,shot_name_fat |
mov byte [si+12],0 |
call printplain |
popa |
popad |
|
end if |
} |
1855,15 → 1926,18 |
; shl eax,9 ;óìíîæèì íà 512 |
|
if DEBUG |
pusha |
; mov eax,ebx;point_next_fat_str |
pushad |
xor eax,eax |
mov ax,info_real_mode_size |
mov cx,0x0a |
mov di,show_db1 |
mov di,seg_where_get_data |
mov dword [di],' ' |
mov word [di+4],' ' |
call decode |
;Show size |
mov si,show_db1 |
mov si,seg_where_get_data |
call printplain |
popa |
popad |
|
end if |
|