📄 detection.cod
字号:
0000c e58d3000 str r3, [sp]
; 144 : m_BootDeviceType = BOOT_FROM_IDE_ATADISK;
00010 e59f2070 ldr r2, [pc, #0x70]
00014 e3a03c02 mov r3, #2, 24
00018 e3833001 orr r3, r3, #1
0001c e5823000 str r3, [r2]
; 145 :
; 146 :
; 147 : if(ide_reset())
00020 eb000000 bl ide_reset
00024 e58d0008 str r0, [sp, #8]
00028 e59d3008 ldr r3, [sp, #8]
0002c e3530000 cmp r3, #0
00030 0a000002 beq |$L38635|
; 148 : {
; 149 : // EdbgOutputDebugString("ide_reset failed.\r\n");
; 150 : return( result );
00034 e59d3000 ldr r3, [sp]
00038 e58d3004 str r3, [sp, #4]
0003c ea00000c b |$L38633|
00040 |$L38635|
; 151 : }
; 152 : EdbgOutputDebugString("ide_reset succeeded.\r\n");
00040 e59f003c ldr r0, [pc, #0x3C]
00044 eb000000 bl EdbgOutputDebugString
; 153 :
; 154 : ide_enable();
00048 eb000000 bl ide_enable
; 155 :
; 156 : if (id_drive())
0004c eb000000 bl id_drive
00050 e58d000c str r0, [sp, #0xC]
00054 e59d300c ldr r3, [sp, #0xC]
00058 e3530000 cmp r3, #0
0005c 0a000002 beq |$L38637|
; 157 : {
; 158 : // EdbgOutputDebugString("id_drive failed.\r\n");
; 159 : return( result );
00060 e59d3000 ldr r3, [sp]
00064 e58d3004 str r3, [sp, #4]
00068 ea000001 b |$L38633|
0006c |$L38637|
; 160 : }
; 161 : // EdbgOutputDebugString("id_drive succeeded.\r\n");
; 162 :
; 163 : return( TRUE );
0006c e3a03001 mov r3, #1
00070 e58d3004 str r3, [sp, #4]
00074 |$L38633|
; 148 : {
; 149 : // EdbgOutputDebugString("ide_reset failed.\r\n");
; 150 : return( result );
00074 e59d0004 ldr r0, [sp, #4]
; 164 : }
00078 e28dd010 add sp, sp, #0x10
0007c e49de004 ldr lr, [sp], #4
00080 e12fff1e bx lr
00084 |$L38737|
00084 00000000 DCD |??_C@_0BH@ENDOJKGM@ide_reset?5succeeded?4?$AN?6?$AA@|
00088 00000000 DCD |m_BootDeviceType|
0008c |$M38733|
ENDP ; |OEM_IDE_HDDDetect|
EXPORT |OEMNE2000Detect|
00000 AREA |.text| { |OEMNE2000Detect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$OEMNE2000Detect|, PDATA, SELECTION=5, ASSOC=|.text| { |OEMNE2000Detect| } ; comdat associative
|$T38744| DCD |$L38743|
DCD 0x40003702
; Function compile flags: /Ods
00000 AREA |.text| { |OEMNE2000Detect| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |OEMNE2000Detect| PROC
; 216 : {
00000 |$L38743|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd004 sub sp, sp, #4
00008 |$M38741|
; 217 : //
; 218 : // Check to make sure that a card is inserted into the card slot.
; 219 : //
; 220 : if(*GPIO_PFDR & ( GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2 ) )
00008 e59f30c8 ldr r3, [pc, #0xC8]
0000c e5933000 ldr r3, [r3]
00010 e3130006 tst r3, #6
00014 0a000002 beq |$L38653|
; 221 : {
; 222 : return FALSE;
00018 e3a03000 mov r3, #0
0001c e58d3000 str r3, [sp]
00020 ea000027 b |$L38651|
00024 |$L38653|
; 223 : }
; 224 :
; 225 : //
; 226 : // Read certain locations in attribute space to see if it is a compact flash
; 227 : // cards.
; 228 : //
; 229 : PCMCIAParseTuples();
00024 eb000000 bl PCMCIAParseTuples
; 230 :
; 231 : //
; 232 : // Check to see if it is a Socket LPE NE2000 card.
; 233 : //
; 234 : if(g_sPcmciaInfo.usManfID == MANFID_SOCKET &&
; 235 : (g_sPcmciaInfo.ucProdID == PRODID_SOCKET_LPE ||
; 236 : g_sPcmciaInfo.ucProdID == PRODID_SOCKET_LPE_CF))
00028 e59f30a4 ldr r3, [pc, #0xA4]
0002c e1d330b4 ldrh r3, [r3, #4]
00030 e3530f41 cmp r3, #0x41, 30
00034 1a00000e bne |$L38654|
00038 e59f3094 ldr r3, [pc, #0x94]
0003c e5d33006 ldrb r3, [r3, #6]
00040 e353000d cmp r3, #0xD
00044 0a000003 beq |$L38655|
00048 e59f3084 ldr r3, [pc, #0x84]
0004c e5d33006 ldrb r3, [r3, #6]
00050 e3530075 cmp r3, #0x75
00054 1a000006 bne |$L38654|
00058 |$L38655|
; 237 : {
; 238 : *(volatile unsigned short *)(PCMCIACARD_ATTRIBUTE + 0x3F8) = 0x21;
00058 e3a03312 mov r3, #0x12, 6
0005c e3832ffe orr r2, r3, #0xFE, 30
00060 e3a03021 mov r3, #0x21
00064 e1c230b0 strh r3, [r2]
; 239 : return TRUE;
00068 e3a03001 mov r3, #1
0006c e58d3000 str r3, [sp]
00070 ea000013 b |$L38651|
00074 |$L38654|
; 240 : }
; 241 :
; 242 : //
; 243 : // Check to see if it is a Corega NE2000 card.
; 244 : //
; 245 : if(g_sPcmciaInfo.usManfID == MANFID_COREGA &&
; 246 : g_sPcmciaInfo.ucProdID == PRODID_COREGA_PCCT )
00074 e59f3058 ldr r3, [pc, #0x58]
00078 e1d330b4 ldrh r3, [r3, #4]
0007c e1a02003 mov r2, r3
00080 e3a03903 mov r3, #3, 18
00084 e383300f orr r3, r3, #0xF
00088 e1520003 cmp r2, r3
0008c 1a00000a bne |$L38657|
00090 e59f303c ldr r3, [pc, #0x3C]
00094 e5d33006 ldrb r3, [r3, #6]
00098 e3530000 cmp r3, #0
0009c 1a000006 bne |$L38657|
; 247 : {
; 248 : *(volatile unsigned short *)(PCMCIACARD_ATTRIBUTE + 0x3F8) = 0x26;
000a0 e3a03312 mov r3, #0x12, 6
000a4 e3832ffe orr r2, r3, #0xFE, 30
000a8 e3a03026 mov r3, #0x26
000ac e1c230b0 strh r3, [r2]
; 249 : return TRUE;
000b0 e3a03001 mov r3, #1
000b4 e58d3000 str r3, [sp]
000b8 ea000001 b |$L38651|
000bc |$L38657|
; 250 : }
; 251 :
; 252 : return FALSE;
000bc e3a03000 mov r3, #0
000c0 e58d3000 str r3, [sp]
000c4 |$L38651|
; 221 : {
; 222 : return FALSE;
000c4 e59d0000 ldr r0, [sp]
; 253 : }
000c8 e28dd004 add sp, sp, #4
000cc e49de004 ldr lr, [sp], #4
000d0 e12fff1e bx lr
000d4 |$L38746|
000d4 00000000 DCD |g_sPcmciaInfo|
000d8 80840030 DCD 0x80840030
000dc |$M38742|
ENDP ; |OEMNE2000Detect|
EXPORT |??_C@_0DB@MNAGGIHC@ManfID?5?$DN?50x?$CFx?0?5ProdID?5?$DN?50x?$CFx?0?5uc@| [ DATA ] ; `string'
00000 AREA |.text| { |PCMCIAParseTuples| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$PCMCIAParseTuples|, PDATA, SELECTION=5, ASSOC=|.text| { |PCMCIAParseTuples| } ; comdat associative
|$T38752| DCD |$L38751|
DCD 0x40005602
00000 AREA |.rdata| { |??_C@_0DB@MNAGGIHC@ManfID?5?$DN?50x?$CFx?0?5ProdID?5?$DN?50x?$CFx?0?5uc@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@MNAGGIHC@ManfID?5?$DN?50x?$CFx?0?5ProdID?5?$DN?50x?$CFx?0?5uc@| DCB "M"
DCB "anfID = 0x%x, ProdID = 0x%x, ucFundID = 0x%x ", 0xd, 0xa
DCB 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |PCMCIAParseTuples| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |PCMCIAParseTuples| PROC
; 263 : {
00000 |$L38751|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd008 sub sp, sp, #8
00008 |$M38749|
; 264 : volatile unsigned short *pCis = (volatile unsigned short *)PCMCIACARD_ATTRIBUTE;
00008 e3a03312 mov r3, #0x12, 6
0000c e58d3000 str r3, [sp]
; 265 :
; 266 : //
; 267 : // Return if the PCMCIA has already been parsed.
; 268 : //
; 269 : if(g_sPcmciaInfo.bInitialized)
00010 e59f3138 ldr r3, [pc, #0x138]
00014 e5933000 ldr r3, [r3]
00018 e3530000 cmp r3, #0
0001c 0a000000 beq |$L38663|
; 270 : {
; 271 : return;
00020 ea000047 b |$L38660|
00024 |$L38663|
00024 |$L38666|
; 272 : }
; 273 :
; 274 : //
; 275 : // Search thru all the CIS tuples until find CISTPL_VERS_1
; 276 : // tuple or reach the end of all tuples
; 277 : //
; 278 : while ((*pCis & 0xFF) != CISTPL_END && ((ULONG)pCis < PCMCIACARD_ATTRIBUTE + 0x500))
00024 e59d3000 ldr r3, [sp]
00028 e1d330b0 ldrh r3, [r3]
0002c e20330ff and r3, r3, #0xFF
00030 e35300ff cmp r3, #0xFF
00034 0a000037 beq |$L38667|
00038 e59d2000 ldr r2, [sp]
0003c e3a03312 mov r3, #0x12, 6
00040 e3833c05 orr r3, r3, #5, 24
00044 e1520003 cmp r2, r3
00048 2a000032 bcs |$L38667|
; 279 : {
; 280 : switch (*pCis & 0xFF)
0004c e59d3000 ldr r3, [sp]
00050 e1d330b0 ldrh r3, [r3]
00054 e20330ff and r3, r3, #0xFF
00058 e58d3004 str r3, [sp, #4]
0005c e59d3004 ldr r3, [sp, #4]
00060 e3530020 cmp r3, #0x20
00064 0a000003 beq |$L38672|
00068 e59d3004 ldr r3, [sp, #4]
0006c e3530021 cmp r3, #0x21
00070 0a000016 beq |$L38673|
00074 ea00001c b |$L38675|
00078 |$L38672|
; 281 : {
; 282 : case CISTPL_MANFID:
; 283 : g_sPcmciaInfo.usManfID = (pCis[2] & 0xFF) | ((pCis[3] & 0xFF) << 8);
00078 e59d3000 ldr r3, [sp]
0007c e2833004 add r3, r3, #4
00080 e1d330b0 ldrh r3, [r3]
00084 e20320ff and r2, r3, #0xFF
00088 e59d3000 ldr r3, [sp]
0008c e2833006 add r3, r3, #6
00090 e1d330b0 ldrh r3, [r3]
00094 e20330ff and r3, r3, #0xFF
00098 e1a03403 mov r3, r3, lsl #8
0009c e1823003 orr r3, r2, r3
000a0 e1a02803 mov r2, r3, lsl #16
000a4 e1a02822 mov r2, r2, lsr #16
000a8 e59f30a0 ldr r3, [pc, #0xA0]
000ac e1c320b4 strh r2, [r3, #4]
; 284 : g_sPcmciaInfo.ucProdID = pCis[4] & 0xFF;
000b0 e59d3000 ldr r3, [sp]
000b4 e2833008 add r3, r3, #8
000b8 e1d330b0 ldrh r3, [r3]
000bc e20330ff and r3, r3, #0xFF
000c0 e20320ff and r2, r3, #0xFF
000c4 e59f3084 ldr r3, [pc, #0x84]
000c8 e5c32006 strb r2, [r3, #6]
; 285 : break;
000cc ea000006 b |$L38669|
000d0 |$L38673|
; 286 : case CISTPL_FUNCID:
; 287 : g_sPcmciaInfo.ucFuncID = (UCHAR)(pCis[2] & 0xFF);
000d0 e59d3000 ldr r3, [sp]
000d4 e2833004 add r3, r3, #4
000d8 e1d330b0 ldrh r3, [r3]
000dc e20330ff and r3, r3, #0xFF
000e0 e20320ff and r2, r3, #0xFF
000e4 e59f3064 ldr r3, [pc, #0x64]
000e8 e5c32007 strb r2, [r3, #7]
000ec |$L38675|
000ec |$L38669|
; 288 : break;
; 289 : default:
; 290 : break;
; 291 : }
; 292 : pCis += (*(pCis + 1) & 0xFF) + 2;
000ec e59d3000 ldr r3, [sp]
000f0 e2833002 add r3, r3, #2
000f4 e1d330b0 ldrh r3, [r3]
000f8 e20330ff and r3, r3, #0xFF
000fc e2831002 add r1, r3, #2
00100 e3a03002 mov r3, #2
00104 e0020391 mul r2, r1, r3
00108 e59d3000 ldr r3, [sp]
0010c e0833002 add r3, r3, r2
00110 e58d3000 str r3, [sp]
; 293 : }
00114 eaffffc2 b |$L38666|
00118 |$L38667|
; 294 :
; 295 : EdbgOutputDebugString
; 296 : (
; 297 : "ManfID = 0x%x, ProdID = 0x%x, ucFundID = 0x%x \r\n",
; 298 : (unsigned int)g_sPcmciaInfo.usManfID,
; 299 : (unsigned int) g_sPcmciaInfo.ucProdID,
; 300 : (unsigned int)g_sPcmciaInfo.ucFuncID
; 301 : );
00118 e59f3030 ldr r3, [pc, #0x30]
0011c e5d33007 ldrb r3, [r3, #7]
00120 e59f2028 ldr r2, [pc, #0x28]
00124 e5d22006 ldrb r2, [r2, #6]
00128 e59f1020 ldr r1, [pc, #0x20]
0012c e1d110b4 ldrh r1, [r1, #4]
00130 e59f001c ldr r0, [pc, #0x1C]
00134 eb000000 bl EdbgOutputDebugString
; 302 :
; 303 : g_sPcmciaInfo.bInitialized = TRUE;
00138 e59f2010 ldr r2, [pc, #0x10]
0013c e3a03001 mov r3, #1
00140 e5823000 str r3, [r2]
00144 |$L38660|
; 304 : }
00144 e28dd008 add sp, sp, #8
00148 e49de004 ldr lr, [sp], #4
0014c e12fff1e bx lr
00150 |$L38754|
00150 00000000 DCD |g_sPcmciaInfo|
00154 00000000 DCD |??_C@_0DB@MNAGGIHC@ManfID?5?$DN?50x?$CFx?0?5ProdID?5?$DN?50x?$CFx?0?5uc@|
00158 |$M38750|
ENDP ; |PCMCIAParseTuples|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -