Gần đây, tôi đã nghiên cứu một số mã khởi động được thiết kế để sử dụng với một ổ đĩa mềm. Mục tiêu của tôi là sửa đổi chương trình để nó sử dụng ổ USB flash của tôi. Bây giờ tôi thấy chức năng INT 13H đã được sử dụng như thế nào với thiết bị đĩa mềm, nhưng tôi đoán câu hỏi của tôi là, cách giao tiếp với ổ USB khác nhau như thế nào?Làm thế nào để thực hiện IO mức thấp với ổ flash USB trong BIOS (so với đĩa mềm)?
Ví dụ, đây là một đoạn mã mềm (GNU lắp ráp):
movb $0x00,%dl /* select 1st floppy */
/* later */
movw sec,%cx /* get sector number */
movw head,%dx /* get head number */
movw $0x0201,%ax /* read 1 sector */
int $0x13
Bây giờ tôi đã đọc mà di chuyển 0x80 vào% dl sẽ chọn HDD đầu tiên trong BIOS. Trong bios cụ thể của tôi tôi có thể thay đổi thứ tự ổ đĩa, trong đó sẽ bao gồm một ổ đĩa USB. Tôi khá chắc chắn điều này đang trở thành phụ thuộc BIOS, nhưng tôi đã nghĩ rằng thứ tự được liệt kê trong BIOS có thể tương ứng với giá trị tôi di chuyển vào% dl. Tôi cần theo dõi một số tài liệu ...
Tôi thực sự không quen với việc làm việc với các thiết bị khối như vậy, ai đó có thể chỉ cho tôi một nơi tốt để bắt đầu tìm hiểu thêm?
Cảm ơn!
OK, có loại revisited này tôi đã nhìn vào một số mã (mã làm việc) mà tải một cách rõ ràng dl = 0x00 mặc dù nó được sử dụng một ổ đĩa flash USB. Bây giờ tôi đoán đây là hành vi phụ thuộc BIOS, có lẽ BIOS khác 'sẽ không cho phép bạn xử lý ổ đĩa flash dưới dạng đĩa mềm. –
Có thể và thuận tiện để khởi động và chạy hình ảnh đĩa mềm FAT12 từ ổ flash USB trên bất kỳ BIOS/phiên bản nào sẽ khởi động từ ổ flash USB. Giá trị dl phải được sử dụng. Ngay cả khi dl = 80h (sẽ là trường hợp trên tất cả các phiên bản BIOS/phiên bản muộn) hình học ổ đĩa cứng được lấy lại từ int 13h, ah = 8 có thể được sử dụng. Định dạng 1.44 MB, mặc dù hạn chế, rất nhiều để bắt đầu và phổ biến. –