Subversion Repositories Kolibri OS

Rev

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

Rev 75 Rev 77
Line 1172... Line 1172...
1172
;  ebx  pointer to 64-bit number = first wanted byte, 0+
1172
;  ebx  pointer to 64-bit number = first wanted byte, 0+
1173
;       may be ebx=0 - start from first byte
1173
;       may be ebx=0 - start from first byte
1174
;  ecx  number of bytes to read, 0+
1174
;  ecx  number of bytes to read, 0+
1175
;  edx  mem location to return data
1175
;  edx  mem location to return data
1176
;
1176
;
1177
;  ret ebx = size or 0xffffffff file not found
1177
;  ret ebx = bytes read or 0xffffffff file not found
1178
;      eax = 0 ok read or other = errormsg
1178
;      eax = 0 ok read or other = errormsg
1179
;
1179
;
1180
;--------------------------------------------------------------
1180
;--------------------------------------------------------------
1181
fs_FloppyRead:
1181
fs_FloppyRead:
1182
        call    read_flp_fat
1182
        call    read_flp_fat
Line 1196... Line 1196...
1196
.found:
1196
.found:
1197
        test    ebx, ebx
1197
        test    ebx, ebx
1198
        jz      .l1
1198
        jz      .l1
1199
        cmp     dword [ebx+4], 0
1199
        cmp     dword [ebx+4], 0
1200
        jz      @f
1200
        jz      @f
1201
        mov     ebx, [edi+28]
1201
        xor     ebx, ebx
1202
.reteof:
1202
.reteof:
1203
        mov     eax, 6          ; EOF
1203
        mov     eax, 6          ; EOF
1204
        pop     edi
1204
        pop     edi
1205
        ret
1205
        ret
1206
@@:
1206
@@:
1207
        mov     ebx, [ebx]
1207
        mov     ebx, [ebx]
1208
.l1:
1208
.l1:
1209
        push    dword [edi+28]
-
 
1210
        push    dword [edi+28]
-
 
1211
        movzx   edi, word [edi+26]
-
 
1212
        push    ecx edx
1209
        push    ecx edx
-
 
1210
        push    0
-
 
1211
        mov     eax, [edi+28]
-
 
1212
        sub     eax, ebx
-
 
1213
        jb      .eof
-
 
1214
        cmp     eax, ecx
-
 
1215
        jae     @f
-
 
1216
        mov     ecx, eax
-
 
1217
        mov     byte [esp], 6           ; EOF
-
 
1218
@@:
-
 
1219
        movzx   edi, word [edi+26]
1213
.new:
1220
.new:
1214
        jecxz   .done
1221
        jecxz   .done
1215
        test    edi, edi
1222
        test    edi, edi
1216
        jz      .eof
1223
        jz      .eof
1217
        cmp     edi, 0xFF8
1224
        cmp     edi, 0xFF8
1218
        jae     .eof
1225
        jae     .eof
1219
        mov     eax, edi
1226
        lea     eax, [edi+31]
1220
        add     eax, 31
-
 
1221
        pusha
1227
        pusha
1222
        call    read_chs_sector
1228
        call    read_chs_sector
1223
        popa
1229
        popa
1224
        cmp     [FDC_Status], 0
1230
        cmp     [FDC_Status], 0
1225
        jnz     .err
1231
        jnz     .err
1226
        sub     ebx, 512
1232
        sub     ebx, 512
1227
        jae     .skip
1233
        jae     .skip
1228
        lea     eax, [eax+ebx+512]
1234
        lea     eax, [0xD000+ebx+512]
1229
        neg     ebx
1235
        neg     ebx
1230
        push    ecx
1236
        push    ecx
1231
        cmp     ecx, ebx
1237
        cmp     ecx, ebx
1232
        jbe     @f
1238
        jbe     @f
1233
        mov     ecx, ebx
1239
        mov     ecx, ebx
1234
@@:
1240
@@:
1235
        cmp     ecx, [esp+12]
-
 
1236
        jbe     @f
-
 
1237
        mov     ecx, [esp+12]
-
 
1238
@@:
-
 
1239
        mov     ebx, edx
1241
        mov     ebx, edx
1240
        mov     eax, 0xD000
-
 
1241
        call    memmove
1242
        call    memmove
1242
        add     edx, ecx
1243
        add     edx, ecx
1243
        sub     [esp], ecx
1244
        sub     [esp], ecx
1244
        sub     [esp+12], ecx
-
 
1245
        pop     ecx
1245
        pop     ecx
1246
        xor     ebx, ebx
1246
        xor     ebx, ebx
1247
        cmp     [esp+8], ebx
-
 
1248
        jnz     .skip
-
 
1249
        jecxz   .done
-
 
1250
        jmp     .eof
-
 
1251
.skip:
1247
.skip:
1252
        movzx   edi, word [edi*2+0x282000]
1248
        movzx   edi, word [edi*2+0x282000]
1253
        jmp     .new
1249
        jmp     .new
1254
.done:
1250
.done:
-
 
1251
        mov     ebx, edx
1255
        pop     edx ecx ebx ebx edi
1252
        pop     eax edx ecx edi
1256
        xor     eax, eax
1253
        sub     ebx, edx
1257
        ret
1254
        ret
1258
.eof:
1255
.eof:
-
 
1256
        mov     ebx, edx
1259
        pop     edx ecx ebx ebx
1257
        pop     eax edx ecx
1260
        jmp     .reteof
1258
        jmp     .reteof
1261
.err:
1259
.err:
1262
        mov     eax, 5  ; may be other error code?
1260
        mov     ebx, edx
1263
        pop     edx ecx ebx ebx edi
1261
        pop     eax edx ecx edi
-
 
1262
        sub     ebx, edx
-
 
1263
        mov     al, 5  ; may be other error code?
1264
        ret
1264
        ret
Line 1265... Line 1265...
1265
 
1265
 
1266
;----------------------------------------------------------------
1266
;----------------------------------------------------------------
1267
;
1267
;
Line 1270... Line 1270...
1270
;  esi  points to filename
1270
;  esi  points to filename
1271
;  ebx  pointer to 32-bit number = first wanted block, 0+
1271
;  ebx  pointer to 32-bit number = first wanted block, 0+
1272
;  ecx  number of blocks to read, 0+
1272
;  ecx  number of blocks to read, 0+
1273
;  edx  mem location to return data
1273
;  edx  mem location to return data
1274
;
1274
;
1275
;  ret ebx = size or 0xffffffff folder not found
1275
;  ret ebx = blocks read or 0xffffffff folder not found
1276
;      eax = 0 ok read or other = errormsg
1276
;      eax = 0 ok read or other = errormsg
1277
;
1277
;
1278
;--------------------------------------------------------------
1278
;--------------------------------------------------------------
1279
fs_FloppyReadFolder:
1279
fs_FloppyReadFolder:
1280
        call    read_flp_fat
1280
        call    read_flp_fat
Line 1386... Line 1386...
1386
        mov     eax, ERROR_FILE_NOT_FOUND
1386
        mov     eax, ERROR_FILE_NOT_FOUND
1387
        ret
1387
        ret
1388
.done:
1388
.done:
1389
        add     esp, 262*2+4
1389
        add     esp, 262*2+4
1390
        pop     ebp
1390
        pop     ebp
1391
        mov     ebx, [edx+8]
1391
        mov     ebx, [edx+4]
1392
        xor     eax, eax
1392
        xor     eax, eax
1393
        dec     ecx
1393
        dec     ecx
1394
        js      @f
1394
        js      @f
1395
        mov     al, ERROR_END_OF_FILE
1395
        mov     al, ERROR_END_OF_FILE
1396
@@:
1396
@@: