Subversion Repositories Kolibri OS

Rev

Rev 379 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 379 Rev 380
Line 102... Line 102...
102
    cmp    [FDC_Status],0
102
    cmp    [FDC_Status],0
103
    jne    fdc_status_error_1
103
    jne    fdc_status_error_1
104
    mov    edi,edx
104
    mov    edi,edx
105
    dec    ebx
105
    dec    ebx
106
    shl    ebx,9
106
    shl    ebx,9
107
    mov    esi,0x8000
107
    mov    esi,FLOPPY_BUFF
108
    add    esi,ebx
108
    add    esi,ebx
109
    shl    ecx,9
109
    shl    ecx,9
110
    cld
110
    cld
111
    rep    movsb
111
    rep    movsb
112
    mov    eax,0 ; ok read
112
    mov    eax,0 ; ok read
Line 145... Line 145...
145
l.20_1:
145
l.20_1:
146
    call    ReadSectWithRetr
146
    call    ReadSectWithRetr
147
    cmp    [FDC_Status],0
147
    cmp    [FDC_Status],0
148
    jne    fdc_status_error_3_1
148
    jne    fdc_status_error_3_1
149
    mov     dl,16
149
    mov     dl,16
150
    mov     edi,0xD000
150
    mov     edi,FDD_BUFF
151
    inc     [FDD_Sector]
151
    inc     [FDD_Sector]
152
l.21_1:
152
l.21_1:
153
    mov    esi,eax            ;Name of file we want
153
    mov    esi,eax            ;Name of file we want
154
    mov    ecx,11
154
    mov    ecx,11
155
    cld
155
    cld
Line 272... Line 272...
272
    cmp   [root_read],1
272
    cmp   [root_read],1
273
    je    unnecessary_root_read
273
    je    unnecessary_root_read
274
    mov    [FDD_Track],0      ; Öèëèíäð
274
    mov    [FDD_Track],0      ; Öèëèíäð
275
    mov    [FDD_Head],1      ; Ñòîðîíà
275
    mov    [FDD_Head],1      ; Ñòîðîíà
276
    mov    [FDD_Sector],2      ; Ñåêòîð
276
    mov    [FDD_Sector],2      ; Ñåêòîð
277
    mov    edi,0x8000
277
    mov    edi,FLOPPY_BUFF
278
    call   SeekTrack
278
    call   SeekTrack
279
read_flp_root_1:
279
read_flp_root_1:
280
    call   ReadSectWithRetr
280
    call   ReadSectWithRetr
281
    cmp    [FDC_Status],0
281
    cmp    [FDC_Status],0
282
    jne    unnecessary_root_read
282
    jne    unnecessary_root_read
Line 301... Line 301...
301
    cmp   [flp_fat],1
301
    cmp   [flp_fat],1
302
    je    unnecessary_flp_fat
302
    je    unnecessary_flp_fat
303
    mov    [FDD_Track],0      ; Öèëèíäð
303
    mov    [FDD_Track],0      ; Öèëèíäð
304
    mov    [FDD_Head],0      ; Ñòîðîíà
304
    mov    [FDD_Head],0      ; Ñòîðîíà
305
    mov    [FDD_Sector],2      ; Ñåêòîð
305
    mov    [FDD_Sector],2      ; Ñåêòîð
306
    mov    edi,0x8000
306
    mov    edi,FLOPPY_BUFF
307
    call   SeekTrack
307
    call   SeekTrack
308
read_flp_fat_1:
308
read_flp_fat_1:
309
    call   ReadSectWithRetr
309
    call   ReadSectWithRetr
310
    cmp    [FDC_Status],0
310
    cmp    [FDC_Status],0
311
    jne    unnecessary_flp_fat
311
    jne    unnecessary_flp_fat
Line 330... Line 330...
330
    ret
330
    ret
Line 331... Line 331...
331
 
331
 
332
calculatefatchain_flp:
332
calculatefatchain_flp:
Line 333... Line 333...
333
   pushad
333
   pushad
334
 
334
 
Line 335... Line 335...
335
   mov  esi,0x8000
335
   mov  esi,FLOPPY_BUFF
336
   mov  edi,0x282000
336
   mov  edi,0x282000
337
 
337
 
Line 382... Line 382...
382
    jne    fdc_status_error
382
    jne    fdc_status_error
383
    call   ReadSectWithRetr
383
    call   ReadSectWithRetr
384
    cmp    [FDC_Status],0
384
    cmp    [FDC_Status],0
385
    jne    fdc_status_error
385
    jne    fdc_status_error
386
    mov    esi,flp_label
386
    mov    esi,flp_label
387
    mov    edi,0xD000+39
387
    mov    edi,FDD_BUFF+39
388
    mov    ecx,15
388
    mov    ecx,15
389
    cld
389
    cld
390
    rep    cmpsb
390
    rep    cmpsb
391
    je     same_label
391
    je     same_label
392
    mov    [root_read],0
392
    mov    [root_read],0
393
    mov    [flp_fat],0
393
    mov    [flp_fat],0
394
same_label:
394
same_label:
395
    mov    esi,0xD000+39
395
    mov    esi,FDD_BUFF+39
396
    mov    edi,flp_label
396
    mov    edi,flp_label
397
    mov    ecx,15
397
    mov    ecx,15
398
    cld
398
    cld
399
    rep    movsb
399
    rep    movsb
400
    popad
400
    popad
Line 411... Line 411...
411
    cmp   [root_read],0
411
    cmp   [root_read],0
412
    je    unnecessary_root_save
412
    je    unnecessary_root_save
413
    mov    [FDD_Track],0      ; Öèëèíäð
413
    mov    [FDD_Track],0      ; Öèëèíäð
414
    mov    [FDD_Head],1      ; Ñòîðîíà
414
    mov    [FDD_Head],1      ; Ñòîðîíà
415
    mov    [FDD_Sector],2      ; Ñåêòîð
415
    mov    [FDD_Sector],2      ; Ñåêòîð
416
    mov    esi,0x8000
416
    mov    esi,FLOPPY_BUFF
417
    call   SeekTrack
417
    call   SeekTrack
418
save_flp_root_1:
418
save_flp_root_1:
419
    push   esi
419
    push   esi
420
    call   take_data_from_application_1
420
    call   take_data_from_application_1
421
    pop    esi
421
    pop    esi
Line 440... Line 440...
440
    je    unnecessary_flp_fat_save
440
    je    unnecessary_flp_fat_save
441
    call   restorefatchain_flp
441
    call   restorefatchain_flp
442
    mov    [FDD_Track],0      ; Öèëèíäð
442
    mov    [FDD_Track],0      ; Öèëèíäð
443
    mov    [FDD_Head],0      ; Ñòîðîíà
443
    mov    [FDD_Head],0      ; Ñòîðîíà
444
    mov    [FDD_Sector],2      ; Ñåêòîð
444
    mov    [FDD_Sector],2      ; Ñåêòîð
445
    mov    esi,0x8000
445
    mov    esi,FLOPPY_BUFF
446
    call   SeekTrack
446
    call   SeekTrack
447
save_flp_fat_1:
447
save_flp_fat_1:
448
    push   esi
448
    push   esi
449
    call   take_data_from_application_1
449
    call   take_data_from_application_1
450
    pop    esi
450
    pop    esi
Line 470... Line 470...
470
 
470
 
471
restorefatchain_flp:   ; restore fat chain
471
restorefatchain_flp:   ; restore fat chain
Line 472... Line 472...
472
   pushad
472
   pushad
473
 
473
 
Line 474... Line 474...
474
   mov  esi,0x282000
474
   mov  esi,0x282000
475
   mov  edi,0x8000
475
   mov  edi,FLOPPY_BUFF
476
 
476
 
477
  fcnew2_1:
477
  fcnew2_1:
Line 487... Line 487...
487
   add  edi,4
487
   add  edi,4
488
   mov word [edi],bx
488
   mov word [edi],bx
489
   add  edi,2
489
   add  edi,2
490
   add  esi,8
490
   add  esi,8
Line 491... Line 491...
491
 
491
 
492
   cmp  edi,0x8000+0x1200     ;4274 bytes - all used FAT
492
   cmp  edi,FLOPPY_BUFF+0x1200     ;4274 bytes - all used FAT
Line 493... Line 493...
493
   jb   fcnew2_1
493
   jb   fcnew2_1
494
 
494
 
495
   mov  esi,0x8000           ; duplicate fat chain
495
   mov  esi,FLOPPY_BUFF           ; duplicate fat chain
496
   mov  edi,0x8000+0x1200
496
   mov  edi,FLOPPY_BUFF+0x1200
497
   mov  ecx,0x1200/4
497
   mov  ecx,0x1200/4
Line 498... Line 498...
498
   cld
498
   cld
Line 532... Line 532...
532
l.20_2:
532
l.20_2:
533
    call    ReadSectWithRetr
533
    call    ReadSectWithRetr
534
    cmp    [FDC_Status],0
534
    cmp    [FDC_Status],0
535
    jne    fdc_status_error_4
535
    jne    fdc_status_error_4
536
    mov     dl,16
536
    mov     dl,16
537
    mov     edi,0xD000
537
    mov     edi,FDD_BUFF
538
    inc     [FDD_Sector]
538
    inc     [FDD_Sector]
539
l.21_2:
539
l.21_2:
540
    mov    esi,eax            ;Name of file we want
540
    mov    esi,eax            ;Name of file we want
541
    mov    ecx,11
541
    mov    ecx,11
542
    cld
542
    cld
Line 660... Line 660...
660
    pop    eax
660
    pop    eax
661
    mov    [save_root_flag],1
661
    mov    [save_root_flag],1
662
    call   read_flp_root
662
    call   read_flp_root
663
    cmp    [FDC_Status],0
663
    cmp    [FDC_Status],0
664
    jne    fdc_status_error_7
664
    jne    fdc_status_error_7
665
    mov    edi,0x8000   ;Point at directory
665
    mov    edi,FLOPPY_BUFF   ;Point at directory
666
    mov    edx,224 +1
666
    mov    edx,224 +1
667
    ; find an empty spot for filename in the root dir
667
    ; find an empty spot for filename in the root dir
668
l20ds_1:
668
l20ds_1:
669
    sub    edx,1
669
    sub    edx,1
670
    jz     frnoreadds_1
670
    jz     frnoreadds_1
Line 687... Line 687...
687
l.20_3:
687
l.20_3:
688
    call    ReadSectWithRetr
688
    call    ReadSectWithRetr
689
    cmp    [FDC_Status],0
689
    cmp    [FDC_Status],0
690
    jne    fdc_status_error_7
690
    jne    fdc_status_error_7
691
    mov    dl,16
691
    mov    dl,16
692
    mov    edi,0xD000
692
    mov    edi,FDD_BUFF
693
    inc     [FDD_Sector]
693
    inc     [FDD_Sector]
694
l.21_3:
694
l.21_3:
695
    mov    esi,eax            ;Name of file we want
695
    mov    esi,eax            ;Name of file we want
696
    mov    ecx,11
696
    mov    ecx,11
697
    cld
697
    cld
Line 918... Line 918...
918
   popa
918
   popa
919
   cmp    [FDC_Status],0
919
   cmp    [FDC_Status],0
920
   jne    not_found_file_analyze_flp
920
   jne    not_found_file_analyze_flp
Line 921... Line 921...
921
 
921
 
922
   mov ecx,512/32
922
   mov ecx,512/32
Line 923... Line 923...
923
   mov ebx,0xD000
923
   mov ebx,FDD_BUFF
924
 
924
 
925
adr1_analyze_flp:
925
adr1_analyze_flp:
926
   mov esi,edx   ;[esp+16]
926
   mov esi,edx   ;[esp+16]
Line 983... Line 983...
983
   popa
983
   popa
984
   cmp    [FDC_Status],0
984
   cmp    [FDC_Status],0
985
   jne    error_found_file_analyze1
985
   jne    error_found_file_analyze1
Line 986... Line 986...
986
 
986
 
987
   mov ecx,512/32
987
   mov ecx,512/32
Line 988... Line 988...
988
   mov ebx,0xD000
988
   mov ebx,FDD_BUFF
989
 
989
 
990
adr1_analyze1:
990
adr1_analyze1:
991
   cmp byte [ebx],0x00
991
   cmp byte [ebx],0x00
Line 1018... Line 1018...
1018
   mov    [eax],di
1018
   mov    [eax],di
Line 1019... Line 1019...
1019
 
1019
 
1020
   pusha
1020
   pusha
1021
   mov ecx,512/4
1021
   mov ecx,512/4
1022
   xor eax,eax
1022
   xor eax,eax
1023
   mov edi,0xD000
1023
   mov edi,FDD_BUFF
1024
   cld
1024
   cld
1025
   rep stosd
1025
   rep stosd
Line 1026... Line 1026...
1026
   popa
1026
   popa
Line 1030... Line 1030...
1030
   pusha
1030
   pusha
1031
   call   save_chs_sector
1031
   call   save_chs_sector
1032
   popa
1032
   popa
1033
   cmp    [FDC_Status],0
1033
   cmp    [FDC_Status],0
1034
   jne    error_found_file_analyze1
1034
   jne    error_found_file_analyze1
1035
   mov    ebx,0xD000
1035
   mov    ebx,FDD_BUFF
Line 1036... Line 1036...
1036
 
1036
 
Line 1037... Line 1037...
1037
found_file_analyze1:
1037
found_file_analyze1:
1038
 
1038
 
Line 1143... Line 1143...
1143
        add     eax, 19
1143
        add     eax, 19
1144
        call    read_chs_sector
1144
        call    read_chs_sector
1145
        popa
1145
        popa
1146
        cmp     [FDC_Status], 0
1146
        cmp     [FDC_Status], 0
1147
        jnz     .readerr
1147
        jnz     .readerr
1148
        mov     edi, 0xD000
1148
        mov     edi, FDD_BUFF
1149
        ret     ; CF=0
1149
        ret     ; CF=0
1150
.readerr:
1150
.readerr:
1151
        stc
1151
        stc
1152
        ret
1152
        ret
Line 1153... Line 1153...
1153
 
1153
 
1154
flp_rootmem_first:
1154
flp_rootmem_first:
1155
        mov     edi, 0x8000
1155
        mov     edi, FLOPPY_BUFF
1156
        clc
1156
        clc
1157
        ret
1157
        ret
1158
flp_rootmem_next:
1158
flp_rootmem_next:
1159
        add     edi, 0x20
1159
        add     edi, 0x20
1160
        cmp     edi, 0x8000+14*0x200
1160
        cmp     edi, FLOPPY_BUFF+14*0x200
1161
        cmc
1161
        cmc
1162
flp_rootmem_next_write:
1162
flp_rootmem_next_write:
1163
flp_rootmem_begin_write:
1163
flp_rootmem_begin_write:
1164
flp_rootmem_end_write:
1164
flp_rootmem_end_write:
Line 1193... Line 1193...
1193
        jae     .err
1193
        jae     .err
1194
        pusha
1194
        pusha
1195
        add     eax, 31
1195
        add     eax, 31
1196
        call    read_chs_sector
1196
        call    read_chs_sector
1197
        popa
1197
        popa
1198
        mov     edi, 0xD000
1198
        mov     edi, FDD_BUFF
1199
        cmp     [FDC_Status], 0
1199
        cmp     [FDC_Status], 0
1200
        jnz     .err
1200
        jnz     .err
1201
        ret     ; CF=0
1201
        ret     ; CF=0
1202
.err2:
1202
.err2:
1203
        pop     ecx
1203
        pop     ecx
Line 1240... Line 1240...
1240
        mov     eax, [esp+28]
1240
        mov     eax, [esp+28]
1241
        mov     ecx, [eax]
1241
        mov     ecx, [eax]
1242
        mov     [0x282000+ecx*2], di
1242
        mov     [0x282000+ecx*2], di
1243
        mov     [eax], edi
1243
        mov     [eax], edi
1244
        xor     eax, eax
1244
        xor     eax, eax
1245
        mov     edi, 0xD000
1245
        mov     edi, FDD_BUFF
1246
        mov     ecx, 128
1246
        mov     ecx, 128
1247
        rep     stosd
1247
        rep     stosd
1248
        popa
1248
        popa
1249
        call    flp_notroot_end_write
1249
        call    flp_notroot_end_write
1250
        mov     edi, 0xD000
1250
        mov     edi, FDD_BUFF
1251
        clc
1251
        clc
1252
        ret
1252
        ret
1253
.notfound:
1253
.notfound:
1254
        popa
1254
        popa
1255
        stc
1255
        stc
Line 1356... Line 1356...
1356
        pusha
1356
        pusha
1357
        call    read_chs_sector
1357
        call    read_chs_sector
1358
        popa
1358
        popa
1359
        cmp     [FDC_Status], 0
1359
        cmp     [FDC_Status], 0
1360
        jnz     .err
1360
        jnz     .err
1361
        lea     eax, [0xD000+ebx+512]
1361
        lea     eax, [FDD_BUFF+ebx+512]
1362
        neg     ebx
1362
        neg     ebx
1363
        push    ecx
1363
        push    ecx
1364
        cmp     ecx, ebx
1364
        cmp     ecx, ebx
1365
        jbe     @f
1365
        jbe     @f
1366
        mov     ecx, ebx
1366
        mov     ecx, ebx
Line 1450... Line 1450...
1450
        pusha
1450
        pusha
1451
        call    read_chs_sector
1451
        call    read_chs_sector
1452
        popa
1452
        popa
1453
        cmp     [FDC_Status], 0
1453
        cmp     [FDC_Status], 0
1454
        jnz     .error
1454
        jnz     .error
1455
        mov     edi, 0xD000
1455
        mov     edi, FDD_BUFF
1456
        push    eax
1456
        push    eax
1457
.l1:
1457
.l1:
1458
        call    fat_get_name
1458
        call    fat_get_name
1459
        jc      .l2
1459
        jc      .l2
1460
        cmp     byte [edi+11], 0xF
1460
        cmp     byte [edi+11], 0xF
Line 1478... Line 1478...
1478
        pusha
1478
        pusha
1479
        call    read_chs_sector
1479
        call    read_chs_sector
1480
        popa
1480
        popa
1481
        cmp     [FDC_Status], 0
1481
        cmp     [FDC_Status], 0
1482
        jnz     .error
1482
        jnz     .error
1483
        mov     edi, 0xD000
1483
        mov     edi, FDD_BUFF
1484
        push    eax
1484
        push    eax
1485
.do_bdfe:
1485
.do_bdfe:
1486
        inc     dword [edx+8]   ; new file found
1486
        inc     dword [edx+8]   ; new file found
1487
        dec     ebx
1487
        dec     ebx
1488
        jns     .l2
1488
        jns     .l2
Line 1909... Line 1909...
1909
        mov     ecx, 512
1909
        mov     ecx, 512
1910
        cmp     dword [esp+20], ecx
1910
        cmp     dword [esp+20], ecx
1911
        jae     @f
1911
        jae     @f
1912
        mov     ecx, [esp+20]
1912
        mov     ecx, [esp+20]
1913
@@:
1913
@@:
1914
        mov     edi, 0xD000
1914
        mov     edi, FDD_BUFF
1915
        cmp     byte [esp+24+28+28], 0
1915
        cmp     byte [esp+24+28+28], 0
1916
        jnz     .writedir
1916
        jnz     .writedir
1917
        push    ecx
1917
        push    ecx
1918
        rep     movsb
1918
        rep     movsb
1919
        pop     ecx
1919
        pop     ecx
Line 2158... Line 2158...
2158
        push    eax ecx edi
2158
        push    eax ecx edi
2159
        xor     eax, eax
2159
        xor     eax, eax
2160
        mov     ecx, 0x200
2160
        mov     ecx, 0x200
2161
        sub     ecx, [esp+4+12]
2161
        sub     ecx, [esp+4+12]
2162
        jbe     @f
2162
        jbe     @f
2163
        mov     edi, 0xD000
2163
        mov     edi, FDD_BUFF
2164
        add     edi, [esp+4+12]
2164
        add     edi, [esp+4+12]
2165
        rep     stosb
2165
        rep     stosb
2166
@@:
2166
@@:
2167
; zero uninitialized data in the last sector
2167
; zero uninitialized data in the last sector
2168
        mov     ecx, 0x200
2168
        mov     ecx, 0x200
2169
        sub     ecx, esi
2169
        sub     ecx, esi
2170
        jbe     @f
2170
        jbe     @f
2171
        mov     edi, 0xD000
2171
        mov     edi, FDD_BUFF
2172
        add     edi, esi
2172
        add     edi, esi
2173
        rep     stosb
2173
        rep     stosb
2174
@@:
2174
@@:
2175
        pop     edi ecx eax
2175
        pop     edi ecx eax
2176
; copy new data
2176
; copy new data
2177
        push    eax
2177
        push    eax
2178
        mov     eax, edx
2178
        mov     eax, edx
2179
        neg     ebx
2179
        neg     ebx
2180
        jecxz   @f
2180
        jecxz   @f
2181
        add     ebx, 0xD000+0x200
2181
        add     ebx, FDD_BUFF+0x200
2182
        call    memmove
2182
        call    memmove
2183
        xor     ebx, ebx
2183
        xor     ebx, ebx
2184
@@:
2184
@@:
2185
        pop     eax
2185
        pop     eax
2186
; save sector
2186
; save sector
Line 2410... Line 2410...
2410
        jnz     .err_next
2410
        jnz     .err_next
2411
.noread:
2411
.noread:
2412
        mov     ecx, [esp+4]
2412
        mov     ecx, [esp+4]
2413
        neg     ecx
2413
        neg     ecx
2414
        push    edi
2414
        push    edi
2415
        mov     edi, 0xD000+0x200
2415
        mov     edi, FDD_BUFF+0x200
2416
        add     edi, [esp+8]
2416
        add     edi, [esp+8]
2417
        xor     eax, eax
2417
        xor     eax, eax
2418
        mov     [esp+8], eax
2418
        mov     [esp+8], eax
2419
        rep     stosb
2419
        rep     stosb
2420
        pop     edi
2420
        pop     edi
Line 2489... Line 2489...
2489
        jz      .truncate_done
2489
        jz      .truncate_done
2490
        call    SetUserInterrupts
2490
        call    SetUserInterrupts
2491
        pusha
2491
        pusha
2492
        call    read_chs_sector
2492
        call    read_chs_sector
2493
        popa
2493
        popa
2494
        add     edi, 0xD000
2494
        add     edi, FDD_BUFF
2495
        mov     ecx, 0xD000+0x200
2495
        mov     ecx, FDD_BUFF+0x200
2496
        sub     ecx, edi
2496
        sub     ecx, edi
2497
        push    eax
2497
        push    eax
2498
        xor     eax, eax
2498
        xor     eax, eax
2499
        rep     stosb
2499
        rep     stosb
2500
        pop     eax
2500
        pop     eax
Line 2623... Line 2623...
2623
        add     eax, 31
2623
        add     eax, 31
2624
        call    read_chs_sector
2624
        call    read_chs_sector
2625
        cmp     [FDC_Status], 0
2625
        cmp     [FDC_Status], 0
2626
        jnz     .err
2626
        jnz     .err
2627
        pop     edi
2627
        pop     edi
2628
        mov     esi, 0xD000
2628
        mov     esi, FDD_BUFF
2629
        push    edi
2629
        push    edi
2630
        mov     ecx, 512/4
2630
        mov     ecx, 512/4
2631
        rep     movsd
2631
        rep     movsd
2632
        mov     eax, [esp+28]
2632
        mov     eax, [esp+28]
2633
        mov     ecx, [eax]
2633
        mov     ecx, [eax]
Line 2703... Line 2703...
2703
        push    ebx
2703
        push    ebx
2704
        pusha
2704
        pusha
2705
        add     eax, 31
2705
        add     eax, 31
2706
        call    read_chs_sector
2706
        call    read_chs_sector
2707
        popa
2707
        popa
2708
        mov     ebx, FDD_DATA + 2*0x20
2708
        mov     ebx, FDD_BUFF + 2*0x20
2709
.checkempty:
2709
.checkempty:
2710
        cmp     byte [ebx], 0
2710
        cmp     byte [ebx], 0
2711
        jz      .empty
2711
        jz      .empty
2712
        cmp     byte [ebx], 0xE5
2712
        cmp     byte [ebx], 0xE5
2713
        jnz     .notempty
2713
        jnz     .notempty
2714
        add     ebx, 0x20
2714
        add     ebx, 0x20
2715
        cmp     ebx, FDD_DATA + 0x200
2715
        cmp     ebx, FDD_BUFF + 0x200
2716
        jb      .checkempty
2716
        jb      .checkempty
2717
        movzx   eax, word [FLOPPY_FAT + eax*2]
2717
        movzx   eax, word [FLOPPY_FAT + eax*2]
2718
        pusha
2718
        pusha
2719
        add     eax, 31
2719
        add     eax, 31
2720
        call    read_chs_sector
2720
        call    read_chs_sector
2721
        popa
2721
        popa
2722
        mov     ebx, FDD_DATA
2722
        mov     ebx, FDD_BUFF
2723
        jmp     .checkempty
2723
        jmp     .checkempty
2724
.notempty:
2724
.notempty:
2725
        pop     ebx
2725
        pop     ebx
2726
        pop     eax
2726
        pop     eax
2727
.access_denied2:
2727
.access_denied2:
Line 2739... Line 2739...
2739
        xchg    eax, [esp]
2739
        xchg    eax, [esp]
2740
; delete folder entry
2740
; delete folder entry
2741
        mov     byte [edi], 0xE5
2741
        mov     byte [edi], 0xE5
2742
; delete LFN (if present)
2742
; delete LFN (if present)
2743
.lfndel:
2743
.lfndel:
2744
        cmp     edi, FDD_DATA
2744
        cmp     edi, FDD_BUFF
2745
        ja      @f
2745
        ja      @f
2746
        cmp     [fd_prev_sector], 0
2746
        cmp     [fd_prev_sector], 0
2747
        jz      .lfndone
2747
        jz      .lfndone
2748
        push    [fd_prev_sector]
2748
        push    [fd_prev_sector]
2749
        push    [fd_prev_prev_sector]
2749
        push    [fd_prev_prev_sector]
Line 2754... Line 2754...
2754
        popa
2754
        popa
2755
        pop     eax
2755
        pop     eax
2756
        pusha
2756
        pusha
2757
        call    read_chs_sector
2757
        call    read_chs_sector
2758
        popa
2758
        popa
2759
        mov     edi, FDD_DATA+0x200
2759
        mov     edi, FDD_BUFF+0x200
2760
@@:
2760
@@:
2761
        sub     edi, 0x20
2761
        sub     edi, 0x20
2762
        cmp     byte [edi], 0xE5
2762
        cmp     byte [edi], 0xE5
2763
        jz      .lfndone
2763
        jz      .lfndone
2764
        cmp     byte [edi+11], 0xF
2764
        cmp     byte [edi+11], 0xF