Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.30.253] |
|
Сообщ.
#1
,
|
|
|
Люди! Кто-нибудь знает, как через int 13h обращаться к диску, у которого > 1024 циллиндров? (для благих намерений).
И если есть доки/примеры для работы с дисками через порты (IDE,SCSI и др), буду очень рад. Так же неплохо бы "заиметь" описание разных файловых систем (NTFS, например). И узнать, чем отличается FAT32 от FAT16 (кроме битности). - Спасибо! eujin@mailru.com |
Сообщ.
#2
,
|
|
|
Если память мне не изменяет, то поддержка больших дисков есть в INT 25h/26h. Про INT 13h ничего не слышал.
Описание есть в xview. |
Сообщ.
#3
,
|
|
|
У меня есть крохотная утиля , с пом. которой я вручную разбивал большие диски (такой гемморой). Намылю в субботу (ее еще найти надо). Если хочешь сам узнать, как через int 13h работать с большими хардами, продизасми (я так и сделал )) ) виндовый bootsector (то есть первый из трех) - там есть алгоритм (смысл в том, что используешь как параметры не CHS харда, а абсолютный сектор !!!!!!!!)
|
Сообщ.
#4
,
|
|
|
Упс, поправочка, дизасмить надо Master boot record
|
Сообщ.
#5
,
|
|
|
2 devilray: А мысль ведь неплохая . Хотя я уже нашёл. Для LBA есть функции 4xh / int 13h. Но утилитку всё-равно пришли
2 upaul: int 25h/26h поддерживает партишаны для 2Gb. К тому же, int 25h/26h - это не int 13h )) . Для больших дисков есть ax=7305h/cx=0ffffh/int 21h Хотелось бы ещё описание систем и работы через порты. |
Сообщ.
#6
,
|
|
|
Высылаю тебе свою простенькую программку определения параметров устройств IDE/ATAPI, а также любопытную информацию по CD/ATAPI.
Может пригодится!? Вообще же рекомендую скачать спецификацию по IDE. Она валяется на сайте http://www.halyava.ru/document/ |
Сообщ.
#7
,
|
|
|
Боюсь, что затея дизассемблировать MBR окажется бесполезной, так как партиция, начало которой располагается дальше 1023-го цилиндра не грузится.
Попробуй в Partition Magic'е создать такую партицию, он тебе напишет что-то в таком духе |
Сообщ.
#8
,
|
|
|
Вобщем утилиту я не на нашел (диск 60 Гб - я там однажды HalfLife потерял )) ). Но я вспомнил как это (в смысле по int 13h лазить по большим хардам, не подумайте чего другого)делается:
; make command: "ml.exe s.asm /AT" .model tiny .386 .code org 100h sst: ; Read from absolute sector - <=> function 2 (absolute sector 0 <=> C=0, H=0, S=1) push 0 ; HZ push 0 ; HZ push 0 ; Low 16 bit of absolute sector push 0 ; High 16 bit of absolute sector push ds ; Segment to read from push offset data ; Offset to read from push 1 ; Number of sectors to from push 10h ; HZ mov ah,42h ; Function number mov dl,80h ; HDD C: mov si,sp ; HZ int 13h popa ; ballance stack ; Write to absolute sector - <=> function 3 push 0 push 0 push 131h push 0AE1Fh push ds push offset data push 1 push 10h mov ah,43h mov dl,80h mov si,sp ;int 13h ; Commented to prevent disaster :-) popa mov ax,4C00h int 21h data db 1024 dup(0) last db '$' end sst |
Сообщ.
#9
,
|
|
|
И еще на счет всяктх там int 24h, 25h, 21h - все это, на сколько я помню, интерфейсы к int 13h (то есть в конце концов используют для физ. доступа к диску int 13h), т.к. int 20h - 30h - ДОСОВЫЕ прерывания, а int 13h - биос.
|
Сообщ.
#10
,
|
|
|
2 devilray: You're quite right!!!
2 ritina: Посмотрел я сегодня MBR. Есть там 41h/42h int 13h, значит грузиться должен. Там ещё прикол такой, что если этот сервис (42h) не поддерживается, то используется функция 2 (для чтения). А т.к. загрузочный раздел обычно первый, то грузиться должен и такой 2 devilray: Не знаю, откуда ты (и, кстати, по-моему ещё кто-то говорил) взял 3 сектора (MBR+2), я нашёл только один. У меня хоть винт и < 8Gb, но, думаю, разницы не должно быть. А в общем, всем спасибо и с наступающим!... Но если найдёте ещё - буду очень рад!!! |
Сообщ.
#11
,
|
|
|
3 сектора - это в Win98 за место одного bootsectora.
|
Сообщ.
#12
,
|
|
|
2 devilray: Всё, нашёл (на диске с FAT32). Только второй сектор почти пустой
|
Сообщ.
#13
,
|
|
|
Народ, а может, кто знает, как из-под 9х прочитать сектор, а? Стандартный VxDшный интерфейс винды этого не делает, если кто не знает :-) Зато требует (вроде) чтоб все только им и пользовались. Если кто подскажет, как это обойти, буду очень благодарен.
|
Сообщ.
#14
,
|
|
|
Читай напрямую через порты, команды 20h и 21h (если не путаю)
В чем собственно проблема? |
Сообщ.
#15
,
|
|
|
Sorry, не понял. Наверно, тормоз.
Команды 20h 21h чего? Номера портов, досовские команды, или еще что? |
Сообщ.
#16
,
|
|
|
Я имел в виду команды 20h (или 21h), посылаемые в порт 1F7h (для контроллера Primergy).
Ты вообще-то какое приложение пишешь DOS или Win? |
Сообщ.
#17
,
|
|
|
Что-то с утра я торможу - написал вместо Primary название нашего сервера Primergy от фирмы Siemens
Если DOS-приложение, просто используй int 13h, и все |
Сообщ.
#18
,
|
|
|
Если б под DOS, никаких проблем не было бы. В том то и дело, что под винды, мало того, под 9х-серию :-(
Так что винда, скорее всего, просто так в порт контроллера не пустит, хотя пока не пробовал, сегодня посмотрим. |
Сообщ.
#19
,
|
|
|
> Если б под DOS, никаких проблем не было
> бы. В том то и дело, что под винды, мало > того, под 9х-серию :-( Я задал корректный вопрос про тип приложения. Под понятием DOS-приложения я имел ввиду формат исполняемого файла (com или mz exe). В этом случае int 13h - простой и эффективный способ. Если же ты пишешь приложение Win32 (PE формат), то это другой фопрос. > Так что винда, скорее всего, просто так в > порт контроллера не пустит, хотя пока не > пробовал, сегодня посмотрим. Конечно, не пустит - ясный перец! Это привилегированные операции. В качестве примера я специально выложил исходник программы DevId на этом сайте, пользуй ее, там также работа идет через порты |
Сообщ.
#20
,
|
|
|
Thanks.
А с типом приложения - просто в моем первом же письме было сказано, что я хочу читать секторы под 9х. :-) |
Сообщ.
#21
,
|
|
|
Дай ссылку на DevId, plzzzz
|
Сообщ.
#22
,
|
|
|
http://www.sources.ru/asm/devid32.shtml
|
Сообщ.
#23
,
|
|
|
Thanx
|