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 | @@: |