⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hpt370.cod

📁 hpt370的驱动程序
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00883	56		 push	 esi
  00884	57		 push	 edi

; 643  :     while(Count-- > 0) {

  00885	8b 7d 10	 mov	 edi, DWORD PTR _Count$[ebp]
  00888	8b c7		 mov	 eax, edi
  0088a	4f		 dec	 edi
  0088b	85 c0		 test	 eax, eax
  0088d	76 17		 jbe	 SHORT $L2141
  0088f	8b 45 0c	 mov	 eax, DWORD PTR _SecondStr$[ebp]
  00892	8b 75 08	 mov	 esi, DWORD PTR _FirstStr$[ebp]
$L2140:

; 644  :          if (*FirstStr++ != *SecondStr++) 

  00895	8a 10		 mov	 dl, BYTE PTR [eax]
  00897	8a 0e		 mov	 cl, BYTE PTR [esi]
  00899	40		 inc	 eax
  0089a	46		 inc	 esi
  0089b	3a ca		 cmp	 cl, dl
  0089d	75 0f		 jne	 SHORT $L2336
  0089f	8b cf		 mov	 ecx, edi
  008a1	4f		 dec	 edi
  008a2	85 c9		 test	 ecx, ecx
  008a4	77 ef		 ja	 SHORT $L2140
$L2141:
  008a6	5f		 pop	 edi

; 646  :     }
; 647  :     return 0;

  008a7	33 c0		 xor	 eax, eax
  008a9	5e		 pop	 esi

; 648  : }

  008aa	5d		 pop	 ebp
  008ab	c2 0c 00	 ret	 12			; 0000000cH
$L2336:
  008ae	5f		 pop	 edi

; 645  :               return 1;

  008af	b8 01 00 00 00	 mov	 eax, 1
  008b4	5e		 pop	 esi

; 648  : }

  008b5	5d		 pop	 ebp
  008b6	c2 0c 00	 ret	 12			; 0000000cH
_AtapiStringCmp@12 ENDP
_TEXT	ENDS
PUBLIC	_Hpt366Initialize@4
EXTRN	_CheckArray@8:NEAR
_TEXT	SEGMENT
_IdeChannel$ = 8
_dmaHpt366Mode$ = -4
_pbd$ = -8
_Hpt366Initialize@4 PROC NEAR

; 680  : {

  008c0	55		 push	 ebp
  008c1	8b ec		 mov	 ebp, esp
  008c3	83 ec 10	 sub	 esp, 16			; 00000010H

; 681  :     USHORT  i, j, k, l;
; 682  :     static  USHORT  pioTiming[6] = {960, 480, 240, 180, 120, 90};
; 683  : 	 PDevice pDev;
; 684  :     USHORT  dmaHpt366Mode, pioHpt366Mode, timingMode, overrideMode;
; 685  :     USHORT  capabilities;
; 686  :     USHORT  translationFieldsValid;
; 687  :     USHORT  enhancedPioMode;
; 688  :     USHORT  minPioCycleTime;
; 689  : 	 struct _bad_disk   *pbd;
; 690  :     PUCHAR  ptr;
; 691  : 
; 692  : 
; 693  :     for (i = 0; i < MAX_DRIVES; i++) {

  008c6	8b 45 08	 mov	 eax, DWORD PTR _IdeChannel$[ebp]
  008c9	53		 push	 ebx
  008ca	56		 push	 esi
  008cb	57		 push	 edi
  008cc	c7 45 f4 00 00
	00 00		 mov	 DWORD PTR -12+[ebp], 0
  008d3	8d b0 86 00 00
	00		 lea	 esi, DWORD PTR [eax+134]
  008d9	c7 45 f0 02 00
	00 00		 mov	 DWORD PTR -16+[ebp], 2
$L2163:

; 694  : 		  pDev = &IdeChannel->Devices[i];
; 695  :         if (!pDev->DevicePresent)

  008e0	8a 46 be	 mov	 al, BYTE PTR [esi-66]
  008e3	84 c0		 test	 al, al
  008e5	0f 84 83 02 00
	00		 je	 $L2164

; 696  :             continue;
; 697  : 
; 698  : 			dmaHpt366Mode = pioHpt366Mode = 0;

  008eb	33 db		 xor	 ebx, ebx

; 699  : 
; 700  : 	      for(l=0, pbd = bad_disks; pbd < &bad_disks[MAXBADDISK-1]; pbd++, l++) {

  008ed	c7 45 f8 00 00
	00 00		 mov	 DWORD PTR _pbd$[ebp], OFFSET FLAT:_bad_disks
  008f4	89 5d fc	 mov	 DWORD PTR _dmaHpt366Mode$[ebp], ebx
  008f7	bf 04 00 00 00	 mov	 edi, OFFSET FLAT:_bad_disks+4
$L2168:

; 701  :              if(AtapiStringCmp((char *)pDev->IdentifyData.ModelNumber, 
; 702  :                  pbd->name, pbd->length) == 0) break;

  008fc	8b 17		 mov	 edx, DWORD PTR [edi]
  008fe	33 c9		 xor	 ecx, ecx
  00900	8a 4f ff	 mov	 cl, BYTE PTR [edi-1]
  00903	51		 push	 ecx
  00904	52		 push	 edx
  00905	56		 push	 esi
  00906	e8 00 00 00 00	 call	 _AtapiStringCmp@12
  0090b	85 c0		 test	 eax, eax
  0090d	74 7a		 je	 SHORT $L2355

; 703  :              else{
; 704  :                 ptr=(PUCHAR)pDev->IdentifyData.ModelNumber;
; 705  : 
; 706  :                 //if(l==3) {
; 707  :                 //  if(ptr[3]== 'C' && ptr[4]=='D' && ptr[5]=='W' && ptr[8]=='A' &&
; 708  :                 //     (ptr[11]=='A' || ptr[9]=='A')) break;
; 709  :                 //}
; 710  : 					 //else
; 711  :                 //
; 712  :                 if(l == 4) {

  0090f	66 83 fb 04	 cmp	 bx, 4
  00913	75 2b		 jne	 SHORT $L2176

; 713  :                   if(ptr[0]== 'a' && ptr[1]=='M' && ptr[2]=='t' && ptr[3]=='x' &&
; 714  :                      ptr[6]== '9' && ptr[9]=='1' && ptr[13] =='D') break;

  00915	80 3e 61	 cmp	 BYTE PTR [esi], 97	; 00000061H
  00918	75 56		 jne	 SHORT $L2169
  0091a	80 7e 01 4d	 cmp	 BYTE PTR [esi+1], 77	; 0000004dH
  0091e	75 50		 jne	 SHORT $L2169
  00920	80 7e 02 74	 cmp	 BYTE PTR [esi+2], 116	; 00000074H
  00924	75 4a		 jne	 SHORT $L2169
  00926	80 7e 03 78	 cmp	 BYTE PTR [esi+3], 120	; 00000078H
  0092a	75 44		 jne	 SHORT $L2169
  0092c	80 7e 06 39	 cmp	 BYTE PTR [esi+6], 57	; 00000039H
  00930	75 3e		 jne	 SHORT $L2169
  00932	80 7e 09 31	 cmp	 BYTE PTR [esi+9], 49	; 00000031H
  00936	75 38		 jne	 SHORT $L2169
  00938	80 7e 0d 44	 cmp	 BYTE PTR [esi+13], 68	; 00000044H
  0093c	74 4b		 je	 SHORT $L2355

; 715  :                 }
; 716  :                 if(l == 6) {

  0093e	eb 30		 jmp	 SHORT $L2169
$L2176:
  00940	66 83 fb 06	 cmp	 bx, 6
  00944	75 2a		 jne	 SHORT $L2169

; 717  :                   if(ptr[16]== 'D' && ptr[17]=='C' && ptr[18]=='W' && ptr[19]=='-' &&
; 718  :                      ptr[20]== 'i' && ptr[21]=='r' && ptr[22] =='e') break;

  00946	80 7e 10 44	 cmp	 BYTE PTR [esi+16], 68	; 00000044H
  0094a	75 24		 jne	 SHORT $L2169
  0094c	80 7e 11 43	 cmp	 BYTE PTR [esi+17], 67	; 00000043H
  00950	75 1e		 jne	 SHORT $L2169
  00952	80 7e 12 57	 cmp	 BYTE PTR [esi+18], 87	; 00000057H
  00956	75 18		 jne	 SHORT $L2169
  00958	80 7e 13 2d	 cmp	 BYTE PTR [esi+19], 45	; 0000002dH
  0095c	75 12		 jne	 SHORT $L2169
  0095e	80 7e 14 69	 cmp	 BYTE PTR [esi+20], 105	; 00000069H
  00962	75 0c		 jne	 SHORT $L2169
  00964	80 7e 15 72	 cmp	 BYTE PTR [esi+21], 114	; 00000072H
  00968	75 06		 jne	 SHORT $L2169
  0096a	80 7e 16 65	 cmp	 BYTE PTR [esi+22], 101	; 00000065H
  0096e	74 19		 je	 SHORT $L2355
$L2169:

; 699  : 
; 700  : 	      for(l=0, pbd = bad_disks; pbd < &bad_disks[MAXBADDISK-1]; pbd++, l++) {

  00970	8b 45 f8	 mov	 eax, DWORD PTR _pbd$[ebp]
  00973	83 c7 08	 add	 edi, 8
  00976	83 c0 08	 add	 eax, 8
  00979	43		 inc	 ebx
  0097a	81 ff 9c 00 00
	00		 cmp	 edi, OFFSET FLAT:_bad_disks+156
  00980	89 45 f8	 mov	 DWORD PTR _pbd$[ebp], eax
  00983	0f 8c 73 ff ff
	ff		 jl	 $L2168
$L2355:

; 719  :                 }
; 720  : 
; 721  :              }
; 722  :          }
; 723  : 
; 724  : //		  pDev->Vendor = l;
; 725  : 
; 726  : 		  if(*(ULONG*)pDev->IdentifyData.ModelNumber=='-1LS')

  00989	81 3e 53 4c 31
	2d		 cmp	 DWORD PTR [esi], 758205523 ; 2d314c53H
  0098f	75 09		 jne	 SHORT $L2180

; 727  :             pDev->Flag |= PF_LS120;

  00991	8b 46 b6	 mov	 eax, DWORD PTR [esi-74]
  00994	80 cc 20	 or	 ah, 32			; 00000020H
  00997	89 46 b6	 mov	 DWORD PTR [esi-74], eax
$L2180:

; 728  : 
; 729  :         capabilities = pDev->IdentifyData.Capabilities;

  0099a	66 8b 46 2c	 mov	 ax, WORD PTR [esi+44]

; 730  : 
; 731  :         //
; 732  :         // word 53
; 733  :         //
; 734  :         translationFieldsValid =
; 735  :             *((USHORT *)&pDev->IdentifyData + 53);

  0099e	66 8b 5e 34	 mov	 bx, WORD PTR [esi+52]

; 736  : 
; 737  :         //
; 738  :         // Are we going to use LBA mode?
; 739  :         //
; 740  :         if ((capabilities >> 9) & 0x1)

  009a2	f6 c4 02	 test	 ah, 2
  009a5	74 04		 je	 SHORT $L2182

; 741  :             pDev->Flag |= PF_LBA;

  009a7	83 4e b6 02	 or	 DWORD PTR [esi-74], 2
$L2182:

; 742  : 
; 743  : #ifdef USE_MULTIPLE
; 744  :         //
; 745  :         // Initially suppose the drive can use Multi-Block commands.
; 746  :         // We will check it later.
; 747  :         //
; 748  :         if (!pDev->Atapi)

  009ab	8a 4e bf	 mov	 cl, BYTE PTR [esi-65]
  009ae	84 c9		 test	 cl, cl
  009b0	75 04		 jne	 SHORT $L2183

; 749  :             pDev->Flag |= PF_MULTIPLE;

  009b2	83 4e b6 04	 or	 DWORD PTR [esi-74], 4
$L2183:

; 750  : #endif  // USE_MULTIPLE
; 751  : 
; 752  : #ifdef _DMA_
; 753  :         //
; 754  :         // G E T  D R I V E  H I G H E S T  N O R M A L  D M A  M O D E
; 755  :         //
; 756  : 
; 757  : 		  if(pDev->Flag & PF_TAPE) {

  009b6	8b 4e b6	 mov	 ecx, DWORD PTR [esi-74]
  009b9	f6 c5 02	 test	 ch, 2
  009bc	74 12		 je	 SHORT $L2184

; 758  :            pDev->Flag &= ~PF_DMA;

  009be	83 e1 fe	 and	 ecx, -2			; fffffffeH

; 759  :            dmaHpt366Mode = PI_DMA_NA;

  009c1	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR _dmaHpt366Mode$[ebp], 0
  009c8	89 4e b6	 mov	 DWORD PTR [esi-74], ecx

; 760  :            goto pio;

  009cb	e9 e4 00 00 00	 jmp	 $pio$2185
$L2184:

; 761  :         }
; 762  : 
; 763  :         if (capabilities & 0x100) {

  009d0	f6 c4 01	 test	 ah, 1
  009d3	74 34		 je	 SHORT $chk_ultra$2189

; 764  :             USHORT  multiWordDmaMode;
; 765  : 
; 766  : 				if(pbd->DMAMode == 0xff)

  009d5	8b 45 f8	 mov	 eax, DWORD PTR _pbd$[ebp]
  009d8	8a 50 01	 mov	 dl, BYTE PTR [eax+1]
  009db	80 fa ff	 cmp	 dl, 255			; 000000ffH
  009de	74 29		 je	 SHORT $chk_ultra$2189

; 767  : 					  goto chk_ultra;
; 768  :             //
; 769  :             // Check single_word DMA / multi_word DMA supporting.
; 770  :             // We use DMA on the drive only when it supports Single-Word
; 771  :             // DMA Mode 2 or Multi-Word DMA mode 1 or Multi-Word DMA Mode
; 772  :             // 2. Otherwise we use PIO.
; 773  :             //
; 774  :             multiWordDmaMode  = *((USHORT *)&pDev->IdentifyData + 63);

  009e0	66 8b 46 48	 mov	 ax, WORD PTR [esi+72]

; 775  : 
; 776  :             if (multiWordDmaMode & 6) {

  009e4	a8 06		 test	 al, 6
  009e6	74 21		 je	 SHORT $chk_ultra$2189

; 777  :                 //
; 778  :                 // Support Multi-Word DMA.
; 779  :                 //
; 780  :                 dmaHpt366Mode = (multiWordDmaMode&0x4)? 2 : 1;

  009e8	24 04		 and	 al, 4
  009ea	f6 d8		 neg	 al
  009ec	1b c0		 sbb	 eax, eax
  009ee	f7 d8		 neg	 eax
  009f0	40		 inc	 eax
  009f1	8b d8		 mov	 ebx, eax

; 781  : 
; 782  : 					 if(dmaHpt366Mode > pbd->DMAMode)

  009f3	66 33 c0	 xor	 ax, ax
  009f6	8a c2		 mov	 al, dl
  009f8	89 5d fc	 mov	 DWORD PTR _dmaHpt366Mode$[ebp], ebx
  009fb	66 3b d8	 cmp	 bx, ax
  009fe	76 03		 jbe	 SHORT $L2192

; 783  : 						  dmaHpt366Mode =	pbd->DMAMode;

  00a00	89 45 fc	 mov	 DWORD PTR _dmaHpt366Mode$[ebp], eax
$L2192:

; 784  :                 pDev->Flag |= PF_DMA;

  00a03	83 c9 01	 or	 ecx, 1
  00a06	89 4e b6	 mov	 DWORD PTR [esi-74], ecx
$chk_ultra$2189:

; 785  :             }
; 786  :         }
; 787  : 
; 788  : 
; 789  :         //
; 790  :         // G E T  D R I V E  H I G H E S T  U L T R A  D M A  M O D E
; 791  :         //
; 792  : chk_ultra:
; 793  :         if (translationFieldsValid&0x4) {

  00a09	66 8b 5e 34	 mov	 bx, WORD PTR [esi+52]
  00a0d	f6 c3 04	 test	 bl, 4
  00a10	0f 84 9e 00 00
	00		 je	 $pio$2185

; 794  :             USHORT word88;
; 795  : 				if(pbd->UltraDMAMode == 0xff) {

  00a16	8b 4d f8	 mov	 ecx, DWORD PTR _pbd$[ebp]
  00a19	80 39 ff	 cmp	 BYTE PTR [ecx], 255	; 000000ffH
  00a1c	75 14		 jne	 SHORT $L2195

; 796  :                pDev->Flag &= ~PF_DMA;

  00a1e	8b 46 b6	 mov	 eax, DWORD PTR [esi-74]

; 797  :                dmaHpt366Mode = PI_DMA_NA;

  00a21	c7 45 fc 00 00
	00 00		 mov	 DWORD PTR _dmaHpt366Mode$[ebp], 0
  00a28	24 fe		 and	 al, -2			; fffffffeH
  00a2a	89 46 b6	 mov	 DWORD PTR [esi-74], eax

; 798  : 				   goto pio;

  00a2d	e9 82 00 00 00	 jmp	 $pio$2185
$L2195:

; 799  :             }
; 800  : 
; 801  :             word88 = *((USHORT *)&pDev->IdentifyData + 88);

  00a32	66 8b 46 7a	 mov	 ax, WORD PTR [esi+122]

; 802  : 
; 803  :             if (word88) {

  00a36	66 85 c0	 test	 ax, ax
  00a39	74 79		 je	 SHORT $pio$2185

; 804  :                 pDev->UltraDmaMode =
; 805  : 						  (word88 & 0x20)? 5 :
; 806  :                     (word88 & 0x8)? 4 :
; 807  :                     (word88 & 0x10 ) ? 3:
; 808  :                     (word88 & 0x4) ? 2 :    //ultra DMA Mode 2
; 809  :                     (word88 & 0x2) ? 1 : 0; //ultra DMA Mode 1

  00a3b	a8 20		 test	 al, 32			; 00000020H
  00a3d	74 07		 je	 SHORT $L2344
  00a3f	b8 05 00 00 00	 mov	 eax, 5
  00a44	eb 26		 jmp	 SHORT $L2339
$L2344:
  00a46	a8 08		 test	 al, 8
  00a48	74 07		 je	 SHORT $L2342
  00a4a	b8 04 00 00 00	 mov	 eax, 4
  00a4f	eb 1b		 jmp	 SHORT $L2339
$L2342:
  00a51	a8 10		 test	 al, 16			; 00000010H
  00a53	74 07		 je	 SHORT $L2340
  00a55	b8 03 00 00 00	 mov	 eax, 3
  00a5a	eb 10		 jmp	 SHORT $L2339
$L2340:
  00a5c	a8 04		 test	 al, 4
  00a5e	74 07		 je	 SHORT $L2338
  00a60	b8 02 00 00 00	 mov	 eax, 2
  00a65	eb 05		 jmp	 SHORT $L2339
$

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -