📄 atamain.cod
字号:
; 289 : HDPara.nFmtBytesPerSector = ReadIdeData();
000a0 e1d900b0 ldrh r0, [r9]
; 290 : HDPara.SectorsPerTrack = ReadIdeData();
000a4 e1d9e0b0 ldrh lr, [r9]
; 291 : HDPara.PID[0] = ReadIdeData();
000a8 e1d940b0 ldrh r4, [r9]
; 292 : HDPara.PID[1] = ReadIdeData();
000ac e1d910b0 ldrh r1, [r9]
000b0 e1c830b4 strh r3, [r8, #4]
; 293 : HDPara.PID[2] = ReadIdeData();
000b4 e1d930b0 ldrh r3, [r9]
000b8 e1c820b6 strh r2, [r8, #6]
000bc e1c800b8 strh r0, [r8, #8]
000c0 e1c8e0ba strh lr, [r8, #0xA]
000c4 e1c840bc strh r4, [r8, #0xC]
000c8 e1c810be strh r1, [r8, #0xE]
000cc e1c831b0 strh r3, [r8, #0x10]
000d0 e1a01008 mov r1, r8
000d4 e3a0000a mov r0, #0xA
000d8 |$L32992|
; 294 : for(i=0; i<10; i++)
; 295 : {
; 296 : tmp = ReadIdeData();
000d8 e1d920b0 ldrh r2, [r9]
000dc e2500001 subs r0, r0, #1
; 297 : HDPara.SerString[2*i] = tmp>>8;
000e0 e1a03422 mov r3, r2, lsr #8
000e4 e5c13012 strb r3, [r1, #0x12]
; 298 : HDPara.SerString[2*i+1] = tmp;
000e8 e5c12013 strb r2, [r1, #0x13]
000ec e2811002 add r1, r1, #2
000f0 1afffff8 bne |$L32992|
; 299 : }
; 300 : HDPara.SectorBufferType = ReadIdeData();
000f4 e1d930b0 ldrh r3, [r9]
; 301 : HDPara.SectorBufferPages = ReadIdeData();
000f8 e1d920b0 ldrh r2, [r9]
; 302 : HDPara.LongRdWrECCBytes = ReadIdeData();
000fc e1d910b0 ldrh r1, [r9]
00100 e1c832b8 strh r3, [r8, #0x28]
00104 e1c822ba strh r2, [r8, #0x2A]
00108 e1c812bc strh r1, [r8, #0x2C]
0010c e1a01008 mov r1, r8
00110 e3a00004 mov r0, #4
00114 |$L32999|
; 303 : for(i=0; i<4; i++)
; 304 : {
; 305 : tmp = ReadIdeData();
00114 e1d920b0 ldrh r2, [r9]
00118 e2500001 subs r0, r0, #1
; 306 : HDPara.FirmwareVersion[2*i] = tmp>>8;
0011c e1a03422 mov r3, r2, lsr #8
00120 e5c1302e strb r3, [r1, #0x2E]
; 307 : HDPara.FirmwareVersion[2*i+1] = tmp;
00124 e5c1202f strb r2, [r1, #0x2F]
00128 e2811002 add r1, r1, #2
0012c 1afffff8 bne |$L32999|
; 308 : }
; 309 : for(i=0; i<20; i++)
00130 e1a01008 mov r1, r8
00134 e3a00014 mov r0, #0x14
00138 |$L33003|
; 310 : {
; 311 : tmp = ReadIdeData();
00138 e1d920b0 ldrh r2, [r9]
0013c e2500001 subs r0, r0, #1
; 312 : HDPara.ProductName[2*i] = tmp>>8;
00140 e1a03422 mov r3, r2, lsr #8
00144 e5c13037 strb r3, [r1, #0x37]
; 313 : HDPara.ProductName[2*i+1] = tmp;
00148 e5c12038 strb r2, [r1, #0x38]
0014c e2811002 add r1, r1, #2
00150 1afffff8 bne |$L33003|
; 314 : }
; 315 : HDPara.IntSecCntInMltSecRW = ReadIdeData();
00154 e1d930b0 ldrh r3, [r9]
; 316 : HDPara.DwordIoEn = ReadIdeData();
00158 e1d920b0 ldrh r2, [r9]
; 317 : HDPara.LBA_DMA = ReadIdeData();
0015c e1d940b0 ldrh r4, [r9]
; 318 : tmp = ReadIdeData();
00160 e1d910b0 ldrh r1, [r9]
; 319 : HDPara.PIOTimer = ReadIdeData();
00164 e1d950b0 ldrh r5, [r9]
; 320 : HDPara.DMATimer = ReadIdeData();
; 321 : tmp = ReadIdeData();
; 322 : HDPara.CurCylinder = ReadIdeData();
; 323 : HDPara.CurHead = ReadIdeData();
; 324 : HDPara.CurSectorsPerTrack = ReadIdeData();
; 325 : HDPara.CurSectorsPerTrack |= ReadIdeData()<<16;
; 326 : HDPara.TotalSectors = ReadIdeData();
00168 e1c836b0 strh r3, [r8, #0x60]
; 327 : HDPara.IntTransSectors = ReadIdeData();
0016c e59f30c8 ldr r3, [pc, #0xC8]
00170 e1d960b0 ldrh r6, [r9]
00174 e1d9b0b0 ldrh r11, [r9]
00178 e1d900b0 ldrh r0, [r9]
0017c e1d9e0b0 ldrh lr, [r9]
00180 e1cd10b0 strh r1, [sp]
00184 e1d970b0 ldrh r7, [r9]
00188 e1c326b2 strh r2, [r3, #0x62]
0018c e1d9a0b0 ldrh r10, [r9]
00190 e3a014b6 mov r1, #0xB6, 8
; 328 : HDPara.TotalSectorsLBA = ReadIdeData();
00194 e3a024b6 mov r2, #0xB6, 8
00198 e1c346b4 strh r4, [r3, #0x64]
; 329 : HDPara.TotalSectorsLBA |= ReadIdeData()<<16;
0019c e59f4098 ldr r4, [pc, #0x98]
001a0 e1d990b0 ldrh r9, [r9]
001a4 e381160a orr r1, r1, #0xA, 12
001a8 e1d180b0 ldrh r8, [r1]
001ac e382260a orr r2, r2, #0xA, 12
001b0 e1d210b0 ldrh r1, [r2]
001b4 e1d230b0 ldrh r3, [r2]
001b8 e1c456b6 strh r5, [r4, #0x66]
001bc e1c466b8 strh r6, [r4, #0x68]
001c0 e1c406ba strh r0, [r4, #0x6A]
001c4 e1c4e6bc strh lr, [r4, #0x6C]
; 330 : HDPara.SWDMA = ReadIdeData();
001c8 e181e803 orr lr, r1, r3, lsl #16
; 331 : HDPara.MWDMA = ReadIdeData();
001cc e3a014b6 mov r1, #0xB6, 8
001d0 e1d220b0 ldrh r2, [r2]
001d4 e381160a orr r1, r1, #0xA, 12
001d8 e1d130b0 ldrh r3, [r1]
001dc e1c476be strh r7, [r4, #0x6E]
001e0 e5849070 str r9, [r4, #0x70]
001e4 e1c487b4 strh r8, [r4, #0x74]
001e8 e584e078 str lr, [r4, #0x78]
001ec e1c427bc strh r2, [r4, #0x7C]
001f0 e1c437be strh r3, [r4, #0x7E]
001f4 e1dd30b0 ldrh r3, [sp]
; 332 :
; 333 : for(i=192; i; i--)
001f8 e3a020c0 mov r2, #0xC0
001fc |$L33024|
; 334 : tmp = ReadIdeData();
001fc e1d130b0 ldrh r3, [r1]
00200 e2522001 subs r2, r2, #1
00204 1afffffc bne |$L33024|
; 335 :
; 336 : HDPara.SerString[20] = 0;
00208 e3a03000 mov r3, #0
; 337 : HDPara.ProductName[40] = 0;
; 338 : HDPara.FirmwareVersion[8] = 0;
; 339 : //printf("Product name : %s\n", HDPara.ProductName);
; 340 : //printf("Firmware version : %s\n", HDPara.FirmwareVersion);
; 341 : //printf("Serial string : %s\n", HDPara.SerString);
; 342 : //printf("Total sectors : %d\n\n", HDPara.TotalSectorsLBA);
; 343 : RETAILMSG(1,(TEXT("Total sectors : %d\r\n"), HDPara.TotalSectorsLBA));
0020c e5c43026 strb r3, [r4, #0x26]
00210 e3a03000 mov r3, #0
00214 e59f001c ldr r0, [pc, #0x1C]
00218 e5c4305f strb r3, [r4, #0x5F]
0021c e3a03000 mov r3, #0
00220 e1a0100e mov r1, lr
00224 e5c43036 strb r3, [r4, #0x36]
00228 eb000000 bl NKDbgPrintfW
0022c |$L33407|
; 344 :
; 345 : }
; 346 :
; 347 : }
0022c e28dd004 add sp, sp, #4
00230 e8bd4ff0 ldmia sp!, {r4 - r11, lr}
00234 e12fff1e bx lr
00238 |$L33433|
00238 00000000 DCD |??_C@_1CK@KMLKEIKF@?$AAT?$AAo?$AAt?$AAa?$AAl?$AA?5?$AAs?$AAe?$AAc?$AAt?$AAo?$AAr?$AAs?$AA?5?$AA?3?$AA?5?$AA?$CF?$AAd?$AA?$AN?$AA?6@|
0023c 00000000 DCD |HDPara|
00240 00000000 DCD |??_C@_1CC@IFPBOGIL@?$AAC?$AAy?$AAl?$AAi?$AAn?$AAd?$AAe?$AAr?$AAs?$AA?5?$AA?3?$AA?5?$AA?$CF?$AAd?$AA?$AN?$AA?6?$AA?$AA@|
00244 b6a000e0 DCD 0xb6a000e0
00248 |$M33429|
ENDP ; |?GetIdeInfo@@YAXXZ|, GetIdeInfo
EXPORT |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| ; AtaLoadRegKey
EXPORT |??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@| [ DATA ] ; `string'
IMPORT |LocalAlloc|
IMPORT |LocalFree|
IMPORT |RegOpenKeyExW|
IMPORT |RegQueryValueExW|
00000 AREA |.text| { |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| } ; comdat associative
|$T33446| DCD |$L33445|
DCD 0x40003702
00000 AREA |.rdata| { |??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@| DCB "K", 0x0, "e", 0x0, "y", 0x0
DCB 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z| PROC ; AtaLoadRegKey
; 350 : {
00000 |$L33445|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 e24dd014 sub sp, sp, #0x14
00008 |$M33443|
00008 e1a05001 mov r5, r1
0000c e1a06000 mov r6, r0
; 351 : DWORD dwType;
; 352 : PTSTR szDevKey = NULL;
; 353 : DWORD dwValueLen = 0;
; 354 : HKEY hDevKey = NULL;
; 355 : // Find out how big the name of the device key is
; 356 : // Since dwValueLen is 0 and the name is NULL we expect a ERROR_SUCCESS although the doc's
; 357 : // say that it should return ERROR_MORE_DATA
; 358 : if (ERROR_SUCCESS == RegQueryValueEx( hActiveKey, DEVLOAD_DEVKEY_VALNAME, NULL, &dwType, NULL, &dwValueLen)) {
00010 e59f10c0 ldr r1, [pc, #0xC0]
00014 e3a07000 mov r7, #0
00018 e3a08000 mov r8, #0
0001c e28de00c add lr, sp, #0xC
00020 e3a09000 mov r9, #0
00024 e28d3010 add r3, sp, #0x10
00028 e3a02000 mov r2, #0
0002c e3a04000 mov r4, #0
00030 e58d700c str r7, [sp, #0xC]
00034 e58d8008 str r8, [sp, #8]
00038 e58de004 str lr, [sp, #4]
0003c e58d9000 str r9, [sp]
00040 eb000000 bl RegQueryValueExW
00044 e3500000 cmp r0, #0
00048 1a000016 bne |$L33437|
; 359 : szDevKey = (PTSTR)LocalAlloc( LPTR, dwValueLen);
0004c e59d100c ldr r1, [sp, #0xC]
00050 e3a00040 mov r0, #0x40
00054 eb000000 bl LocalAlloc
; 360 : // Read in the KeyName of the device
; 361 : RegQueryValueEx( hActiveKey, DEVLOAD_DEVKEY_VALNAME, NULL, &dwType, (PBYTE)szDevKey, &dwValueLen);
00058 e59f1078 ldr r1, [pc, #0x78]
0005c e1a04000 mov r4, r0
00060 e28de00c add lr, sp, #0xC
00064 e1a00006 mov r0, r6
00068 e28d3010 add r3, sp, #0x10
0006c e3a02000 mov r2, #0
00070 e58d4000 str r4, [sp]
00074 e58de004 str lr, [sp, #4]
00078 eb000000 bl RegQueryValueExW
; 362 : // Now do the actual open of the key
; 363 : if (ERROR_SUCCESS != RegOpenKeyEx( HKEY_LOCAL_MACHINE, szDevKey, 0, 0, &hDevKey)) {
0007c e28d3008 add r3, sp, #8
00080 e58d3000 str r3, [sp]
00084 e3a03000 mov r3, #0
00088 e3a02000 mov r2, #0
0008c e1a01004 mov r1, r4
00090 e3a0010a mov r0, #0xA, 2
00094 eb000000 bl RegOpenKeyExW
00098 e3500000 cmp r0, #0
; 364 : hDevKey = NULL;
0009c 13a00000 movne r0, #0
000a0 158d0008 strne r0, [sp, #8]
000a4 1a000000 bne |$L33043|
000a8 |$L33437|
000a8 e59d0008 ldr r0, [sp, #8]
000ac |$L33043|
; 365 : DEBUGMSG( ZONE_INIT, (TEXT("Found a device key name %s but could not open it !!!\r\n"), szDevKey));
; 366 : }
; 367 : }
; 368 : if (!hDevKey) {
000ac e3500000 cmp r0, #0
000b0 1a000004 bne |$L33045|
; 369 : LocalFree( szDevKey);
000b4 e1a00004 mov r0, r4
000b8 eb000000 bl LocalFree
; 370 : *pszDevKey = NULL;
; 371 : } else {
000bc e59d0008 ldr r0, [sp, #8]
000c0 e5859000 str r9, [r5]
000c4 ea000000 b |$L33046|
000c8 |$L33045|
; 372 : *pszDevKey = szDevKey;
000c8 e5854000 str r4, [r5]
000cc |$L33046|
; 373 : }
; 374 : return hDevKey;
; 375 : }
000cc e28dd014 add sp, sp, #0x14
000d0 e8bd43f0 ldmia sp!, {r4 - r9, lr}
000d4 e12fff1e bx lr
000d8 |$L33448|
000d8 00000000 DCD |??_C@_17KACEIPNC@?$AAK?$AAe?$AAy?$AA?$AA@|
000dc |$M33444|
ENDP ; |?AtaLoadRegKey@@YAPAUHKEY__@@PAU1@PAPAG@Z|, AtaLoadRegKey
EXPORT |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| ; AtaIsValidDisk
00000 AREA |.text| { |?AtaIsValidDisk@@YAHPAVCDisk@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -