Доброго времени суток, господа. В общем - то сабж. Знаю о существовании сервиса int 13h, однако, как я понял, там невозможно адресовать больше чем 32MB (1024x63x512). Если то, что я хочу - возможно, ткните, плз, в подробную инфу про нужный сервис и ВСЕ его функции.
zhindos Вопервых, Советую перечитать. 13h позволяет используя CHS одрисацию получить доступ к 1024*255*63*512=8ГБ Но есть также расширенный сервис функции c омерам 40h ищи по словам BIOS Enhanced Disk Drive Services (EDD).
Читаю с диска ф-ией 42h int 13h: Код (Text): .data disk_address_packet db 10h, 0, 01h, 00h, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 transferBuffer db ? .code .386 start: mov ax, DGROUP mov ds, ax mov bx, offset disk_address_packet mov word ptr [bx + 4], ax mov word ptr [bx + 6], offset transferBuffer mov si, offset disk_address_packet mov dl, 80h mov ax, 4200h int 13h Синтаксис - tasm 4.1 Возвращает ошибку, error code in ah == 1, what means "invalid function in AH or invalid parameter". В чем тут может быть дело? (точно не в номере диска в dl, сам проверял). Есть подозрение, что ошибка в "starting absolute block number", если это так - то расскажите, pls, как он формируется.
Из того, что явно бросается в глаза... Во-первых, в указателе segment:offset смещение хранится в младшем слове, а сегментный адрес в старшем. Во- вторых, функции работают с блоками, а не байтами, поэтому размер буфера для жесткого диска должен быть равен как минимум 512 байт. В-третьих, всегда нужно проверять поддержку EDD-функций, причем как в общем, так и для каждого диска в отдельности.
zhindos Кроме того, что указал Phantom_84 (перепутали в блоке параметров сегмент и смещение), я думаю, Вы напортачили в самом блоке параметров, который должен быть длиной 10h байт - я вижу не все. Распишу его подробно: Код (Text): block_param dw 10h ; длина собственно блока параметров - всегда это значение dw 01h ; количество секторов для трансфера - от 1 до 7Fh или до 0FFh dw 1000h ; смещение ОЗУ для трансфера dw 6000h ; сегмент ОЗУ для трансфера - в моем примере 6000:1000 dd 0 ; номер ЛБА для трансфера - младшая часть dd 0 ; номер ЛБА для трансфера - старшая часть