|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 5, 2004 19:11:33 Ув. коллеги! Может быть у кого-то из вас есть опыт работы с командой "identify device"? Я не совсем понимаю как и куда идёт читывание слов паспорта харда после выполнения этой команды... |
|
|
Дата: Май 7, 2004 06:09:04 на вот, писал когда то , на заре своей программерской деятельности, в edi запихаешь адрес двухкилобайтного буфера, и это код вывалит тебе пассорта 4 возможных ата устройств, по два на канал, если устройства нет, то получишь нули, прошу прощеня за комментарии перекодить некада, писал под досом, если чё не так, читай исходник, разбирайся, я помню, что он чётко работал. .586P ;***************** à®æ¥¤ãàë ¤«ï à ¡®âë á ¦ñá⪨¬ ¤¨áª®¬ ****************** GetDiskInfoEx proc ; edi - ¯®«ì§®¢ ⥫ì᪨© ¡ãää¥à mov S_Buffer,edi add edi,4 ; 㢥«¨ç¨¢ ¥¬ ¤à¥á ¡ãä¥à ¤«ï ¨¤¥â¨ä¨ª â®à®¢ mov eax,1 ; ª « 1 mov ebx,0 ; ãáâனá⢮ 0 call GetDiskInfo cmp ebx,0 ; ®¯¥à æ¨ï 㤠ç ? jz @@Disk1_ok mov eax,S_buffer mov byte ptr [eax],0ffh ; ¥ã¤ 箥 ®¯à¥¤¥«¥¨¥ ¢¨ç¥áâ¥à jmp @@Disk2_id @@Disk1_ok: mov eax,S_buffer mov byte ptr [eax],1 ; 㤠箥 ®¯à¥¤¥«¥¨¥ ¢¨ç¥áâ¥à @@Disk2_id: mov edi,S_Buffer add edi,516 mov eax,1 ; ª « 1 mov ebx,1 ; ãáâனá⢮ 1 call GetDiskInfo cmp ebx,0 jz @@Disk2_ok mov eax,S_Buffer inc eax mov byte ptr [eax],0ffh jmp @@Disk3_id @@Disk2_ok: mov eax,S_Buffer inc eax mov byte ptr [eax],1 @@Disk3_id: mov edi,s_buffer add edi,516+512 mov eax,2 ; ª « 2 mov ebx,0 ; ãáâனá⢮ 0 call GetDiskInfo cmp ebx,0 jz @@Disk3_ok mov eax,S_Buffer inc eax inc eax mov byte ptr [eax],0ffh jmp @@Disk4_id @@Disk3_ok: mov eax,S_Buffer inc eax inc eax mov byte ptr [eax],1 @@Disk4_id: mov edi,s_buffer add edi,516+1024 mov eax,2 ; ª « 2 mov ebx,1 ; ãáâனá⢮ 1 call GetDiskInfo cmp ebx,0 jz @@Disk4_ok mov eax,S_Buffer add eax,3 mov byte ptr [eax],0ffh jmp @@All_Detected @@Disk4_ok: mov eax,S_Buffer add eax,3 mov byte ptr [eax],1 @@All_Detected: ret S_Buffer dd 0 ; ¤à¥á ¡ãä¥à GetDiskInfoEx endp GetDiskInfo proc ; ¯®«ãç¨âì ¯ ᯮàâ IDE ATA ¢¨ç¥áâ¥à Chanel_1_Data_Register equ 1f0h Chanel_1_State_Register equ 1f6h Chanel_1_Command_Register equ 1f7h Chanel_2_Data_Register equ 170h Chanel_2_State_Register equ 176h Chanel_2_Command_Register equ 177h ; ‚›‡Ž‚: ; eax - ®¬¥à ª « ; ebx - ®¬¥à ãáâனá⢠; edi - ¤à¥á ¡ãä¥à ; ‚އ‚€’: ; eax - ª®¤ ®è¨¡ª¨ (0 - ¢áñ ¢ ¯®à浪¥ 1 - ãáâனá⢮ § ïâ® ; 3 - ª « § ïâ 4 - ãáâனá⢮ ®âáãâáâ¢ã¥â ; 5- ¥¢®§¬®¦® ¯à¨ïâì ¤ ë¥ ) ; ebx = 0 - ãáâனá⢮ ¨¤¥â¨ä¨æ¨à®¢ ® ; ebx = 1 - ãáâனá⢮ ®âáãâáâ¢ã¥â «¨¡® ¥¨á¯à ¢® ; ¨§¬¥ï¥â eax,ebx pushad pushfd mov ecx,3000 @@Try_: push ecx call @@Get_Info pop ecx cmp eax,0 jz _OK loop @@Try_ mov _eax,eax popfd popad mov eax,_eax mov ebx,1 ret _OK: popfd popad ; ®¯¥à æ¨ï ¯à®è« ãá¯¥è® xor eax,eax ; ax = 0 mov ebx,eax ; bx = 0 ret _eax dd 0 @@Get_Info: pushad pushfd cli cmp eax,2 jz @@Chanel_2 mov dx, Chanel_1_Command_Register ;7 jmp @@Sel_Dev @@Chanel_2: mov dx, Chanel_2_Command_Register ;7 @@Sel_Dev: ;**** ¯à®¢¥à¨¬ § ïâ®áâì ª « (500 à §) mov ecx,5000 @@Bsy_Chanel: in al,dx and al, 10000000b ; bsy bit cmp al,10000000b jnz @@Chanel_Free ; ª « § ïâ ? loop @@Bsy_Chanel popfd popad mov eax,3 ; „ , ª « § ïâ, ¢ë室¨¬ ret @@Chanel_Free: ; Š « ᢮¡®¤¥ dec dx ;6 ; ãáâ ®¢¨âì ®¬¥à ãáâனá⢠ª «¥ in al,dx cmp ebx,0 jnz @@SetSlave and al,11101111b ; ãáâனá⢮ Master jmp @@Dev_Selected @@SetSlave: or al,00010000b ; ãáâனá⢮ Slave @@Dev_Selected: out dx,al mov ecx,5000 ; ®¯à®á § ïâ®á⨠ãáâனá⢠500 à § @@Bsy_Device: inc dx ;7 in al,dx and al,00000001b ; Žè¨¡ª ? cmp al, 1 jz @@Error_State jmp @@No_Error @@Error_State: dec dx ;6 in al,dx and al,4 cmp al, 4 ; ¢ ਩®¥ § ¢¥à襨¥ ª®¬ ¤ë je @@No_Device popfd popad mov eax,1 ; ãáâனá⢮ § ïâ® ret @@No_Device: popfd popad mov eax,4 ; ãáâனá⢮ ®âáãâáâ¢ã¥â ret @@No_Error: in al,dx and al, 11000000b cmp al,01000000b je @@Free_Device loop @@Bsy_Device popfd popad mov ax,1 ; ãáâனá⢮ § ïâ® ret @@Free_Device: ; ãáâனá⢮ ᢮¡®¤® ¨ ¦¤ñâ ª®¬ ¤ã mov al, 0ech ; ECH - ¯®«ãç¨âì ¯ ᯮàâ ¤¨áª out dx,al ;7 mov ecx,0ffffh @@Try_Get_Data: ; ®¦¨¤ âì £®â®¢®áâì ãáâனá⢠in al,dx and al,00001000b cmp al,00001000b jz @@Ready_Data loop @@Try_Get_Data popfd popad mov eax,5 ; ¥¢®§¬®¦® ¯à¨ïâì ¤ ë¥ ret @@Ready_Data: ; ãáâனá⢮ £®â®¢® ¢ë¤ âì ¤ ë¥ mov ecx,256 ; ª®«-¢® ¡ ©â/2, â.ª.ç¨â ¥¬ ;á«®¢ ¬¨ sub dx, 7 ; ®àâ ¤ ëå (1x0) rep insw ; ¯®¢â®à¨âì CX à § popfd popad mov eax,0 ; ®è¨¡®ª ¥â ret GetDiskInfo endp |
|
|
Дата: Май 7, 2004 11:20:06 Спасибо, попоробую разобраться... а насчёт коментариев - может просто выложите этот исходник в виде файла на форуме, я бы его в досе и прочёл бы, а то без коментариев - как без рук... |
|
|
Дата: Май 8, 2004 03:11:32 Nos А чего, кодировку сконвертировать нельзя? Я, будучи очень хреновым программистом(еще в школе), написал на QB такую утилиту за минуты. Да к тому же их сейчас в инете завались: выбирай - не хочу... |
|
|
Дата: Май 9, 2004 13:15:48 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074 |