You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.3 KiB

5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
  1. int data_from_disk(index, number_sectors, data_buffer, data_buffer_segment);
  2. int disk_service_read_data_from_disk(index, number_sectors, data_buffer, data_buffer_segment);
  3. int disk_service_read_data_from_disk(index, number_sectors, data_buffer, data_buffer_segment)
  4. long index;
  5. long number_sectors;
  6. void* data_buffer;
  7. unsigned int data_buffer_segment;
  8. {
  9. #asm
  10. #define index 4[bp]; /* Note that this is a 32-bit argument. */
  11. #define number_sectors 8[bp];
  12. #define data_buffer 12[bp];
  13. #define data_buffer_segment 14[bp];
  14. push bp
  15. mov bp,sp
  16. pusha
  17. lsfs_load_data:
  18. mov ax, index
  19. mov WORD [DAPACK.lba_addr_dw_low], ax
  20. mov bx, number_sectors
  21. mov WORD [DAPACK.blkcnt], bx
  22. mov cx, data_buffer_segment
  23. mov WORD [DAPACK.db_addr_segment], cx
  24. mov dx, data_buffer;
  25. mov WORD [DAPACK.db_addr_offset], dx
  26. mov si, #DAPACK ; address of
  27. mov ah, #0x42 ; READ
  28. mov dl, [global_disk_identifier]
  29. int #0x13
  30. popa
  31. pop bp
  32. ret
  33. DAPACK:
  34. DAPACK.dap_Size: db 0x10
  35. DAPACK.rev_byte: db 0x0
  36. DAPACK.blkcnt: dw 0x0
  37. DAPACK.db_addr_offset: dw 0x0
  38. DAPACK.db_addr_segment: dw 0x0
  39. DAPACK.lba_addr_dw_low: dd 0x0
  40. DAPACK.lba_addr_dw_high: dd 0x0
  41. global_disk_identifier: db 0x80
  42. #endasm
  43. }