Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Assembler > int 13h


Автор: Jin X 27.12.01, 20:13
Люди! Кто-нибудь знает, как через int 13h обращаться к диску, у которого > 1024 циллиндров? (для благих намерений).
И если есть доки/примеры для работы с дисками через порты (IDE,SCSI и др), буду очень рад. Так же неплохо бы "заиметь" описание разных файловых систем (NTFS, например). И узнать, чем отличается FAT32 от FAT16 (кроме битности).
- Спасибо!
eujin@mailru.com

Автор: upaul 27.12.01, 23:23
Если память мне не изменяет, то поддержка больших дисков есть в INT 25h/26h. Про INT 13h ничего не слышал.
Описание есть в xview.

Автор: devilray 28.12.01, 15:48
У меня есть крохотная утиля , с пом. которой я вручную разбивал большие диски (такой гемморой). Намылю в субботу (ее еще найти надо). Если хочешь сам узнать, как через int 13h работать с большими хардами, продизасми (я так и сделал :))) ) виндовый bootsector (то есть первый из трех) - там есть алгоритм (смысл в том, что используешь как параметры не CHS харда, а абсолютный сектор !!!!!!!!)

Автор: devilray 28.12.01, 16:04
Упс, поправочка, дизасмить надо Master boot record :)

Автор: Jin X 28.12.01, 19:54
2 devilray: А мысль ведь неплохая :) . Хотя я уже нашёл. Для LBA есть функции 4xh / int 13h. Но утилитку всё-равно пришли :)
2 upaul: int 25h/26h поддерживает партишаны для 2Gb. К тому же, int 25h/26h - это не int 13h :))) . Для больших дисков есть ax=7305h/cx=0ffffh/int 21h
Хотелось бы ещё описание систем и работы через порты.

Автор: rivitna 28.12.01, 20:51
Высылаю тебе свою простенькую программку определения параметров устройств IDE/ATAPI, а также любопытную информацию по CD/ATAPI.
Может пригодится!?
Вообще же рекомендую скачать спецификацию по IDE.
Она валяется на сайте
http://www.halyava.ru/document/

Автор: rivitna 28.12.01, 20:59
Боюсь, что затея дизассемблировать MBR окажется бесполезной, так как партиция, начало которой располагается дальше 1023-го цилиндра не грузится.
Попробуй в Partition Magic'е создать такую партицию, он тебе напишет что-то в таком духе

Автор: devilray 29.12.01, 07:06
Вобщем утилиту я не на нашел (диск 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

Автор: devilray 29.12.01, 07:13
И еще на счет всяктх там int 24h, 25h, 21h - все это, на сколько я помню, интерфейсы к int 13h (то есть в конце концов используют для физ. доступа к диску int 13h), т.к. int 20h - 30h - ДОСОВЫЕ прерывания, а int 13h - биос.

Автор: Jin X 29.12.01, 20:10
2 devilray: You're quite right!!!
2 ritina: Посмотрел я сегодня MBR. Есть там 41h/42h int 13h, значит грузиться должен. Там ещё прикол такой, что если этот сервис (42h) не поддерживается, то используется функция 2 (для чтения). А т.к. загрузочный раздел обычно первый, то грузиться должен и такой :)
2 devilray: Не знаю, откуда ты (и, кстати, по-моему ещё кто-то говорил) взял 3 сектора (MBR+2), я нашёл только один. У меня хоть винт и < 8Gb, но, думаю, разницы не должно быть.
А в общем, всем спасибо и с наступающим!...
Но если найдёте ещё - буду очень рад!!!

Автор: devilray 03.01.01, 08:35
3 сектора - это в Win98 за место одного bootsectora.

Автор: Jin X 03.01.01, 18:13
2 devilray: Всё, нашёл (на диске с FAT32). Только второй сектор почти пустой :)

Автор: Ritchie 06.02.01, 17:43
Народ, а может, кто знает, как из-под 9х прочитать сектор, а? Стандартный VxDшный интерфейс винды этого не делает, если кто не знает :-) Зато требует (вроде) чтоб все только им и пользовались. Если кто подскажет, как это обойти, буду очень благодарен.

Автор: rivitna 06.02.01, 19:45
Читай напрямую через порты, команды 20h и 21h (если не путаю)
В чем собственно проблема?

Автор: Ritchie 07.02.01, 01:42
Sorry, не понял. Наверно, тормоз.
Команды 20h 21h чего? Номера портов, досовские команды, или еще что?

Автор: rivitna 07.02.01, 04:23
Я имел в виду команды 20h (или 21h), посылаемые в порт 1F7h (для контроллера Primergy).
Ты вообще-то какое приложение пишешь DOS или Win?

Автор: rivitna 07.02.01, 04:26
Что-то с утра я торможу - написал вместо Primary название нашего сервера Primergy от фирмы Siemens
Если DOS-приложение, просто используй int 13h, и все

Автор: Ritchie 07.02.01, 10:11
Если б под DOS, никаких проблем не было бы. В том то и дело, что под винды, мало того, под 9х-серию :-(
Так что винда, скорее всего, просто так в порт контроллера не пустит, хотя пока не пробовал, сегодня посмотрим.

Автор: rivitna 07.02.01, 12:18
> Если б под DOS, никаких проблем не было
> бы. В том то и дело, что под винды, мало
> того, под 9х-серию :-(
Я задал корректный вопрос про тип приложения.
Под понятием DOS-приложения я имел ввиду формат исполняемого файла (com или mz exe). В этом случае int 13h - простой и эффективный способ.
Если же ты пишешь приложение Win32 (PE формат), то это другой фопрос.
> Так что винда, скорее всего, просто так в
> порт контроллера не пустит, хотя пока не
> пробовал, сегодня посмотрим.
Конечно, не пустит - ясный перец! Это привилегированные операции. В качестве примера я специально выложил исходник программы DevId на этом сайте, пользуй ее, там также работа идет через порты

Автор: Ritchie 08.02.01, 08:33
Thanks.
А с типом приложения - просто в моем первом же письме было сказано, что я хочу читать секторы под 9х. :-)

Автор: Jin X 08.02.01, 18:44
Дай ссылку на DevId, plzzzz

Автор: rivitna 08.02.01, 18:52
http://www.sources.ru/asm/devid32.shtml

Автор: Jin X 08.02.01, 19:24
Thanx

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)