.text:10001000 ; .text:10001000 ; +-------------------------------------------------------------------------+ .text:10001000 ; | This file is generated by The Interactive Disassembler (IDA) | .text:10001000 ; | Copyright (c) 2007 by DataRescue sa/nv, | .text:10001000 ; | Evaluation version | .text:10001000 ; +-------------------------------------------------------------------------+ .text:10001000 ; .text:10001000 ; Input MD5 : 7588CE4F49CEA5FA2E0C3E926A7FC292 .text:10001000 .text:10001000 ; File Name : C:\Scoter Kitchen\Extraction Room\dump\battdrvr.dll\battdrvr.dll .text:10001000 ; Format : Portable executable for ARMI (PE) .text:10001000 ; Imagebase : 10000000 .text:10001000 ; Section 1. (virtual address 00001000) .text:10001000 ; Virtual size : 0000305C ( 12380.) .text:10001000 ; Section size in file : 00003200 ( 12800.) .text:10001000 ; Offset to raw data for section: 00000400 .text:10001000 ; Flags 60000020: Text Executable Readable .text:10001000 ; Alignment : default .text:10001000 .text:10001000 ; Processor : ARM .text:10001000 ; Target assembler: Generic assembler for ARM .text:10001000 ; Byte sex : Little endian .text:10001000 .text:10001000 ; =========================================================================== .text:10001000 .text:10001000 ; Segment type: Pure code .text:10001000 AREA .text, CODE, READWRITE, ALIGN=4 .text:10001000 ; ORG 0x10001000 .text:10001000 CODE32 .text:10001000 DCD 0 .text:10001004 DCD 0xA60DF2D1, 0 .text:1000100C DCD 2, 0x25, 0x129C, 0x69C, 0, 0 .text:10001024 DCD 0x4033, 0x444101, 0x9401050, 0x4005, 0x534C01, 0x9401050 .text:10001024 DCD 0x2078, 0x534C01, 0x802910EC, 0xC0F0, 0x534B01, 0x812910EC .text:10001024 DCD 0 .text:10001058 DCD 0x545204, 0x813910EC, 0x900B, 0x545204, 0x813910EC .text:10001058 DCD 0xD0C9, 0x545204, 0x813910EC, 0xE04C, 0x545204, 0x13001186 .text:10001058 DCD 0x50BA, 0x4C4404, 0x20100B, 0xA0CC, 0x474E05, 0x905010B7 .text:10001058 DCD 0x6008, 0x433306, 0x920010B7, 0x476, 0x433306 .text:100010B0 aReadBatteryVol unicode 0, ,0 .text:100010B0 ; DATA XREF: .text:off_100013ECo .text:100010E6 DCW 0 .text:100010E8 aRequire_system unicode 0, ,0 .text:100010E8 ; DATA XREF: .text:off_10001C90o .text:1000112A DCW 0 .text:1000112C aSsupdatepower unicode 0, ,0 ; DATA XREF: .text:off_10001FA4o .text:10001148 aNotify_mpm_pow unicode 0, ,0 .text:10001148 ; DATA XREF: .text:off_10001FB0o .text:10001186 DCW 0 .text:10001188 aRequire_syst_0 unicode 0, ,0 .text:10001188 ; DATA XREF: .text:off_10001FACo .text:100011BA DCW 0 .text:100011BC aBkl_ac_in unicode 0, ,0 ; DATA XREF: .text:off_10001FA8o .text:100011D0 aBatteryFile unicode 0, ,0 ; DATA XREF: .text:off_10001FBCo .text:100011EA DCW 0 .text:100011EC aBatteryFileMut unicode 0, ,0 .text:100011EC ; DATA XREF: .text:off_10001FC4o .text:10001212 DCW 0 .text:10001214 aPddbuffersize unicode 0, ,0 ; DATA XREF: .text:off_10002E64o .text:10001230 aPollinterval unicode 0, ,0 ; DATA XREF: .text:off_10002E6Co .text:1000124A DCW 0 .text:1000124C aPollpriority25 unicode 0, ,0 .text:1000124C ; DATA XREF: .text:off_10002E70o .text:1000126C aSystemBatterya unicode 0, ,0 .text:1000126C ; DATA XREF: .text:off_10002E84o .text:1000129C aRd unicode 0x53, .text:100012A0 DCD 0xA60DF2D1, 0x52521115, 0x844C37FE, 0x91871AF1, 1 .text:100012A0 DCD 0x74746162, 0x72767264, 0x6264702E, 0 .text:100012C4 .text:100012C4 ; =============== S U B R O U T I N E ======================================= .text:100012C4 .text:100012C4 .text:100012C4 sub_100012C4 ; CODE XREF: Init+A4p .text:100012C4 ; DATA XREF: .pdata:10006000o .text:100012C4 MOV R0, #1 .text:100012C8 BX LR .text:100012C8 ; End of function sub_100012C4 .text:100012C8 .text:100012CC ; [00000004 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND] .text:100012D0 ; [00000004 BYTES: COLLAPSED FUNCTION nullsub_3. PRESS KEYPAD "+" TO EXPAND] .text:100012D4 ; [00000004 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND] .text:100012D8 .text:100012D8 ; =============== S U B R O U T I N E ======================================= .text:100012D8 .text:100012D8 .text:100012D8 sub_100012D8 ; CODE XREF: sub_10003598+78p .text:100012D8 ; DATA XREF: .pdata:10006020o .text:100012D8 .text:100012D8 var_4 = -4 .text:100012D8 arg_4 = 4 .text:100012D8 .text:100012D8 STR LR, [SP,#var_4]! .text:100012DC BL sub_100020F4 .text:100012E0 LDR LR, [SP],#arg_4 .text:100012E4 BX LR .text:100012E4 ; End of function sub_100012D8 .text:100012E4 .text:100012E8 .text:100012E8 ; =============== S U B R O U T I N E ======================================= .text:100012E8 .text:100012E8 .text:100012E8 sub_100012E8 ; CODE XREF: IOControl+298p .text:100012E8 ; DATA XREF: .pdata:10006028o .text:100012E8 .text:100012E8 var_4 = -4 .text:100012E8 arg_4 = 4 .text:100012E8 .text:100012E8 STR LR, [SP,#var_4]! .text:100012EC BL sub_10001308 .text:100012F0 LDR LR, [SP],#arg_4 .text:100012F4 BX LR .text:100012F4 ; End of function sub_100012E8 .text:100012F4 .text:100012F8 .text:100012F8 ; =============== S U B R O U T I N E ======================================= .text:100012F8 .text:100012F8 .text:100012F8 sub_100012F8 ; CODE XREF: IOControl+23Cp .text:100012F8 ; DATA XREF: .pdata:10006030o .text:100012F8 .text:100012F8 var_4 = -4 .text:100012F8 arg_4 = 4 .text:100012F8 .text:100012F8 STR LR, [SP,#var_4]! .text:100012FC BL sub_10001310 .text:10001300 LDR LR, [SP],#arg_4 .text:10001304 BX LR .text:10001304 ; End of function sub_100012F8 .text:10001304 .text:10001308 .text:10001308 ; =============== S U B R O U T I N E ======================================= .text:10001308 .text:10001308 .text:10001308 sub_10001308 ; CODE XREF: sub_100012E8+4p .text:10001308 ; DATA XREF: .pdata:10006038o .text:10001308 MOV R0, #3 .text:1000130C BX LR .text:1000130C ; End of function sub_10001308 .text:1000130C .text:10001310 .text:10001310 ; =============== S U B R O U T I N E ======================================= .text:10001310 .text:10001310 .text:10001310 sub_10001310 ; CODE XREF: sub_100012F8+4p .text:10001310 ; DATA XREF: .pdata:10006040o .text:10001310 MOV R0, #0 .text:10001314 BX LR .text:10001314 ; End of function sub_10001310 .text:10001314 .text:10001318 .text:10001318 ; =============== S U B R O U T I N E ======================================= .text:10001318 .text:10001318 ;;; RJK: MeanValueOf_0xa020b318() .text:10001318 sub_10001318 ; CODE XREF: sub_100013F0:loc_1000144Cp .text:10001318 ; DATA XREF: .pdata:10006048o .text:10001318 STMFD SP!, {R4,R5,LR} .text:1000131C LDR R5, =unk_100050F8 .text:10001320 MOV R4, #0 .text:10001324 MOV R2, #0 .text:10001328 .text:10001328 loc_10001328 ; CODE XREF: sub_10001318+44j .text:10001328 LDR R3, [R5] ; R3 = p2v(0xa020b000) .text:1000132C ADD LR, R2, #1 ; LR = R2+1 .text:10001330 ADD R1, R3, R2,LSL#2 ; R1 = R3 + R2*4 = 0xa020b000 .text:10001334 LDRB R0, [R1,#0x318] ; R0 = [0xa020b318] .text:10001338 LDRB R3, [R1,#0x319] ; R3 = [0xa020b319] .text:1000133C LDRB R2, [R1,#0x31A] ; R2 = [0xa020b31a] .text:10001340 LDRB R1, [R1,#0x31B] ; R1 = [0xa020b31b] .text:10001344 ORR R3, R0, R3,LSL#8 .text:10001348 ORR R3, R3, R2,LSL#16 .text:1000134C ORR R3, R3, R1,LSL#24; R3 = R1<<24 | R2<<16 | R0<<8 | R3 .text:10001350 AND R2, LR, #0xFF ; R2 = LR & 0xff .text:10001354 ADD R4, R4, R3 ; R4 += R3 .text:10001358 CMP R2, #5 .text:1000135C BCC loc_10001328 ; Make R4 calculation 5 times (summing) .text:10001360 LDR R3, =0xCCCCCCCD .text:10001364 UMULL R3, R2, R4, R3 ; R2:R3 = R4 * 0xCCCCCCCD = env. 4 * 5 * (R3 calculated) .text:10001368 MOV R0, R2,LSR#2 ; R0 = mean value of 5 values in 0xa020b318.. .text:1000136C LDMFD SP!, {R4,R5,LR} .text:10001370 BX LR .text:10001370 ; End of function sub_10001318 .text:10001370 .text:10001370 ; --------------------------------------------------------------------------- .text:10001374 dword_10001374 DCD 0xCCCCCCCD ; DATA XREF: sub_10001318+48r .text:10001378 off_10001378 DCD unk_100050F8 ; DATA XREF: sub_10001318+4r .text:1000137C .text:1000137C ; =============== S U B R O U T I N E ======================================= .text:1000137C .text:1000137C ;; Trigger_Battery_Voltage_Read() .text:1000137C sub_1000137C ; CODE XREF: sub_100013F0:loc_10001408p .text:1000137C ; DATA XREF: .pdata:10006050o .text:1000137C STMFD SP!, {R4,LR} .text:10001380 LDR R3, =aReadBatteryVol .text:10001384 MOV R2, #0 .text:10001388 MOV R1, #0 .text:1000138C MOV R0, #0 .text:10001390 BL CreateEventW .text:10001394 MOV R1, #3 .text:10001398 MOV R4, R0 .text:1000139C BL EventModify .text:100013A0 MOV R0, #0xC8 .text:100013A4 BL Sleep .text:100013A8 MOV R1, #3 .text:100013AC MOV R0, R4 .text:100013B0 BL EventModify .text:100013B4 MOV R0, #0xC8 .text:100013B8 BL Sleep .text:100013BC LDR R3, =unk_100050F8 .text:100013C0 LDR R1, [R3] .text:100013C4 LDRB R0, [R1,#0x318] .text:100013C8 LDRB R3, [R1,#0x319] .text:100013CC LDRB R2, [R1,#0x31A] .text:100013D0 LDRB R1, [R1,#0x31B] .text:100013D4 ORR R3, R0, R3,LSL#8 .text:100013D8 ORR R3, R3, R2,LSL#16 .text:100013DC ORR R0, R3, R1,LSL#24 .text:100013E0 LDMFD SP!, {R4,LR} .text:100013E4 BX LR .text:100013E4 ; End of function sub_1000137C .text:100013E4 .text:100013E4 ; --------------------------------------------------------------------------- .text:100013E8 off_100013E8 DCD unk_100050F8 ; DATA XREF: sub_1000137C+40r .text:100013EC off_100013EC DCD aReadBatteryVol ; DATA XREF: sub_1000137C+4r .text:100013EC ; "Read Battery Voltage Event" .text:100013F0 .text:100013F0 ; =============== S U B R O U T I N E ======================================= .text:100013F0 .text:100013F0 .text:100013F0 sub_100013F0 ; CODE XREF: sub_100020F4:loc_1000231Cp ;; Get_Voltage_Mean_Or_Query_Voltage() .text:100013F0 ; sub_100020F4+77Cp ... .text:100013F0 .text:100013F0 var_4 = -4 .text:100013F0 arg_4 = 4 .text:100013F0 .text:100013F0 STR LR, [SP,#var_4]! .text:100013F4 LDR R2, =unk_100050F8 .text:100013F8 LDR R3, [R2] ; R2 = p2v(0xa020b000) .text:100013FC LDRB R3, [R3,#0x30E] .text:10001400 CMP R3, #1 .text:10001404 BNE loc_10001414 .text:10001408 .text:10001408 loc_10001408 ; CODE XREF: sub_100013F0+58j ;; Here if (([0xa020b30e] == 1) or ((GPIO96 == 0) && (GPIO9 == 0)) .text:10001408 BL sub_1000137C ; Trigger_Battery_Voltage_Read() .text:1000140C LDR LR, [SP],#arg_4 .text:10001410 BX LR .text:10001414 ; --------------------------------------------------------------------------- .text:10001414 .text:10001414 loc_10001414 ; CODE XREF: sub_100013F0+14j .text:10001414 LDR R3, [R2,#0x30] ; R3 = [0xa020b030] .text:10001418 CMP R3, #0 .text:1000141C BNE loc_1000142C ; Go on if [0xa020b030] != 0 .text:10001420 LDR R3, [R2,#0x2C] .text:10001424 CMP R3, #0 .text:10001428 BEQ loc_1000144C ; If ([0xa020b030] == 0) and ([0xa020b02c] == 0), calculate MeanValue .text:1000142C .text:1000142C loc_1000142C ; CODE XREF: sub_100013F0+2Cj .text:1000142C LDR R3, [R2,#4] ; R3 = GPIO base .text:10001430 LDR R3, [R3,#0x100] .text:10001434 TST R3, #1 ; GPLR3: Test GPIO96 .text:10001438 BNE loc_1000144C ; If (GPIO96 == 1) <=> AC plugged in, jump to MeanValueOf_0xa020b318() .text:1000143C LDR R3, [R2,#4] .text:10001440 LDR R3, [R3] .text:10001444 TST R3, #0x200 : GPLR0: Test GPIO9 .text:10001448 BEQ loc_10001408 ; If (GPIO9 == 0), <=> USB not plugged in, continue to Trigger_Battery_Voltage_Read() .text:1000144C ;; here if connected to AC plug or USB plug .text:1000144C loc_1000144C ; CODE XREF: sub_100013F0+38j .text:1000144C ; sub_100013F0+48j .text:1000144C BL sub_10001318 ; MeanValueOf_0xa020b318() .text:10001450 LDR LR, [SP],#arg_4 .text:10001454 BX LR .text:10001454 ; End of function sub_100013F0 .text:10001454 .text:10001454 ; --------------------------------------------------------------------------- .text:10001458 off_10001458 DCD unk_100050F8 ; DATA XREF: sub_100013F0+4r .text:1000145C .text:1000145C ; =============== S U B R O U T I N E ======================================= .text:1000145C .text:1000145C .text:1000145C sub_1000145C ; CODE XREF: sub_100020F4+25Cp .text:1000145C ; sub_100020F4+7B0p ... ;;; Transform_Voltage2Charge() .text:1000145C LDR R1, =unk_10005130 .text:10001460 MOVL R3, 0xD54 .text:10001468 LDR R2, [R1] ; R2 = Voltage .text:1000146C CMP R2, R3 .text:10001470 MOVEQ R3, #0 .text:10001474 BEQ loc_10001838 .text:10001478 MOVL R3, 0xD6D .text:10001480 BLS loc_10001494 .text:10001484 CMP R2, R3 .text:10001488 BHI loc_1000149C .text:1000148C MOV R3, #4 .text:10001490 B loc_10001838 .text:10001494 ; --------------------------------------------------------------------------- .text:10001494 .text:10001494 loc_10001494 ; CODE XREF: sub_1000145C+24j .text:10001494 CMP R2, R3 .text:10001498 BLS loc_100014B4 .text:1000149C .text:1000149C loc_1000149C ; CODE XREF: sub_1000145C+2Cj .text:1000149C MOVL R3, 0xD81 .text:100014A4 CMP R2, R3 .text:100014A8 BHI loc_100014C4 .text:100014AC MOV R3, #8 .text:100014B0 B loc_10001838 .text:100014B4 ; --------------------------------------------------------------------------- .text:100014B4 .text:100014B4 loc_100014B4 ; CODE XREF: sub_1000145C+3Cj .text:100014B4 MOVL R3, 0xD81 .text:100014BC CMP R2, R3 .text:100014C0 BLS loc_100014DC .text:100014C4 .text:100014C4 loc_100014C4 ; CODE XREF: sub_1000145C+4Cj .text:100014C4 MOVL R3, 0xD95 .text:100014CC CMP R2, R3 .text:100014D0 BHI loc_100014EC .text:100014D4 MOV R3, #0xC .text:100014D8 B loc_10001838 .text:100014DC ; --------------------------------------------------------------------------- .text:100014DC .text:100014DC loc_100014DC ; CODE XREF: sub_1000145C+64j .text:100014DC MOVL R3, 0xD95 .text:100014E4 CMP R2, R3 .text:100014E8 BLS loc_10001504 .text:100014EC .text:100014EC loc_100014EC ; CODE XREF: sub_1000145C+74j .text:100014EC MOVL R3, 0xDA9 .text:100014F4 CMP R2, R3 .text:100014F8 BHI loc_10001514 .text:100014FC MOV R3, #0x10 .text:10001500 B loc_10001838 .text:10001504 ; --------------------------------------------------------------------------- .text:10001504 .text:10001504 loc_10001504 ; CODE XREF: sub_1000145C+8Cj .text:10001504 MOVL R3, 0xDA9 .text:1000150C CMP R2, R3 .text:10001510 BLS loc_1000152C .text:10001514 .text:10001514 loc_10001514 ; CODE XREF: sub_1000145C+9Cj .text:10001514 MOVL R3, 0xDB8 .text:1000151C CMP R2, R3 .text:10001520 BHI loc_1000153C .text:10001524 MOV R3, #0x14 .text:10001528 B loc_10001838 .text:1000152C ; --------------------------------------------------------------------------- .text:1000152C .text:1000152C loc_1000152C ; CODE XREF: sub_1000145C+B4j .text:1000152C MOVL R3, 0xDB8 .text:10001534 CMP R2, R3 .text:10001538 BLS loc_10001554 .text:1000153C .text:1000153C loc_1000153C ; CODE XREF: sub_1000145C+C4j .text:1000153C MOVL R3, 0xDC7 .text:10001544 CMP R2, R3 .text:10001548 BHI loc_10001564 .text:1000154C MOV R3, #0x18 .text:10001550 B loc_10001838 .text:10001554 ; --------------------------------------------------------------------------- .text:10001554 .text:10001554 loc_10001554 ; CODE XREF: sub_1000145C+DCj .text:10001554 MOVL R3, 0xDC7 .text:1000155C CMP R2, R3 .text:10001560 BLS loc_1000157C .text:10001564 .text:10001564 loc_10001564 ; CODE XREF: sub_1000145C+ECj .text:10001564 MOVL R3, 0xDD6 .text:1000156C CMP R2, R3 .text:10001570 BHI loc_1000158C .text:10001574 MOV R3, #0x1C .text:10001578 B loc_10001838 .text:1000157C ; --------------------------------------------------------------------------- .text:1000157C .text:1000157C loc_1000157C ; CODE XREF: sub_1000145C+104j .text:1000157C MOVL R3, 0xDD6 .text:10001584 CMP R2, R3 .text:10001588 BLS loc_100015A4 .text:1000158C .text:1000158C loc_1000158C ; CODE XREF: sub_1000145C+114j .text:1000158C MOVL R3, 0xDE5 .text:10001594 CMP R2, R3 .text:10001598 BHI loc_100015B4 .text:1000159C MOV R3, #0x20 .text:100015A0 B loc_10001838 .text:100015A4 ; --------------------------------------------------------------------------- .text:100015A4 .text:100015A4 loc_100015A4 ; CODE XREF: sub_1000145C+12Cj .text:100015A4 MOVL R3, 0xDE5 .text:100015AC CMP R2, R3 .text:100015B0 BLS loc_100015CC .text:100015B4 .text:100015B4 loc_100015B4 ; CODE XREF: sub_1000145C+13Cj .text:100015B4 MOVL R3, 0xDF4 .text:100015BC CMP R2, R3 .text:100015C0 BHI loc_100015DC .text:100015C4 MOV R3, #0x24 .text:100015C8 B loc_10001838 .text:100015CC ; --------------------------------------------------------------------------- .text:100015CC .text:100015CC loc_100015CC ; CODE XREF: sub_1000145C+154j .text:100015CC MOVL R3, 0xDF4 .text:100015D4 CMP R2, R3 .text:100015D8 BLS loc_100015F4 .text:100015DC .text:100015DC loc_100015DC ; CODE XREF: sub_1000145C+164j .text:100015DC MOVL R3, 0xE03 .text:100015E4 CMP R2, R3 .text:100015E8 BHI loc_10001604 .text:100015EC MOV R3, #0x28 .text:100015F0 B loc_10001838 .text:100015F4 ; --------------------------------------------------------------------------- .text:100015F4 .text:100015F4 loc_100015F4 ; CODE XREF: sub_1000145C+17Cj .text:100015F4 MOVL R3, 0xE03 .text:100015FC CMP R2, R3 .text:10001600 BLS loc_1000161C .text:10001604 .text:10001604 loc_10001604 ; CODE XREF: sub_1000145C+18Cj .text:10001604 MOVL R3, 0xE12 .text:1000160C CMP R2, R3 .text:10001610 BHI loc_1000162C .text:10001614 MOV R3, #0x2C .text:10001618 B loc_10001838 .text:1000161C ; --------------------------------------------------------------------------- .text:1000161C .text:1000161C loc_1000161C ; CODE XREF: sub_1000145C+1A4j .text:1000161C MOVL R3, 0xE12 .text:10001624 CMP R2, R3 .text:10001628 BLS loc_10001644 .text:1000162C .text:1000162C loc_1000162C ; CODE XREF: sub_1000145C+1B4j .text:1000162C MOVL R3, 0xE21 .text:10001634 CMP R2, R3 .text:10001638 BHI loc_10001654 .text:1000163C MOV R3, #0x30 .text:10001640 B loc_10001838 .text:10001644 ; --------------------------------------------------------------------------- .text:10001644 .text:10001644 loc_10001644 ; CODE XREF: sub_1000145C+1CCj .text:10001644 MOVL R3, 0xE21 .text:1000164C CMP R2, R3 .text:10001650 BLS loc_10001664 .text:10001654 .text:10001654 loc_10001654 ; CODE XREF: sub_1000145C+1DCj .text:10001654 CMP R2, #0xE30 .text:10001658 BHI loc_1000166C .text:1000165C MOV R3, #0x34 .text:10001660 B loc_10001838 .text:10001664 ; --------------------------------------------------------------------------- .text:10001664 .text:10001664 loc_10001664 ; CODE XREF: sub_1000145C+1F4j .text:10001664 CMP R2, #0xE30 .text:10001668 BLS loc_10001684 .text:1000166C .text:1000166C loc_1000166C ; CODE XREF: sub_1000145C+1FCj .text:1000166C MOVL R3, 0xE3F .text:10001674 CMP R2, R3 .text:10001678 BHI loc_10001694 .text:1000167C MOV R3, #0x38 .text:10001680 B loc_10001838 .text:10001684 ; --------------------------------------------------------------------------- .text:10001684 .text:10001684 loc_10001684 ; CODE XREF: sub_1000145C+20Cj .text:10001684 MOVL R3, 0xE3F .text:1000168C CMP R2, R3 .text:10001690 BLS loc_100016AC .text:10001694 .text:10001694 loc_10001694 ; CODE XREF: sub_1000145C+21Cj .text:10001694 MOVL R3, 0xE53 .text:1000169C CMP R2, R3 .text:100016A0 BHI loc_100016BC .text:100016A4 MOV R3, #0x3C .text:100016A8 B loc_10001838 .text:100016AC ; --------------------------------------------------------------------------- .text:100016AC .text:100016AC loc_100016AC ; CODE XREF: sub_1000145C+234j .text:100016AC MOVL R3, 0xE53 .text:100016B4 CMP R2, R3 .text:100016B8 BLS loc_100016D4 .text:100016BC .text:100016BC loc_100016BC ; CODE XREF: sub_1000145C+244j .text:100016BC MOVL R3, 0xE67 .text:100016C4 CMP R2, R3 .text:100016C8 BHI loc_100016E4 .text:100016CC MOV R3, #0x40 .text:100016D0 B loc_10001838 .text:100016D4 ; --------------------------------------------------------------------------- .text:100016D4 .text:100016D4 loc_100016D4 ; CODE XREF: sub_1000145C+25Cj .text:100016D4 MOVL R3, 0xE67 .text:100016DC CMP R2, R3 .text:100016E0 BLS loc_100016FC .text:100016E4 .text:100016E4 loc_100016E4 ; CODE XREF: sub_1000145C+26Cj .text:100016E4 MOVL R3, 0xE7B .text:100016EC CMP R2, R3 .text:100016F0 BHI loc_1000170C .text:100016F4 MOV R3, #0x44 .text:100016F8 B loc_10001838 .text:100016FC ; --------------------------------------------------------------------------- .text:100016FC .text:100016FC loc_100016FC ; CODE XREF: sub_1000145C+284j .text:100016FC MOVL R3, 0xE7B .text:10001704 CMP R2, R3 .text:10001708 BLS loc_10001724 .text:1000170C .text:1000170C loc_1000170C ; CODE XREF: sub_1000145C+294j .text:1000170C MOVL R3, 0xE8F .text:10001714 CMP R2, R3 .text:10001718 BHI loc_10001734 .text:1000171C MOV R3, #0x48 .text:10001720 B loc_10001838 .text:10001724 ; --------------------------------------------------------------------------- .text:10001724 .text:10001724 loc_10001724 ; CODE XREF: sub_1000145C+2ACj .text:10001724 MOVL R3, 0xE8F .text:1000172C CMP R2, R3 .text:10001730 BLS loc_1000174C .text:10001734 .text:10001734 loc_10001734 ; CODE XREF: sub_1000145C+2BCj .text:10001734 MOVL R3, 0xEA8 .text:1000173C CMP R2, R3 .text:10001740 BHI loc_1000175C .text:10001744 MOV R3, #0x4C .text:10001748 B loc_10001838 .text:1000174C ; --------------------------------------------------------------------------- .text:1000174C .text:1000174C loc_1000174C ; CODE XREF: sub_1000145C+2D4j .text:1000174C MOVL R3, 0xEA8 .text:10001754 CMP R2, R3 .text:10001758 BLS loc_10001774 .text:1000175C .text:1000175C loc_1000175C ; CODE XREF: sub_1000145C+2E4j .text:1000175C MOVL R3, 0xEC1 .text:10001764 CMP R2, R3 .text:10001768 BHI loc_10001784 .text:1000176C MOV R3, #0x50 .text:10001770 B loc_10001838 .text:10001774 ; --------------------------------------------------------------------------- .text:10001774 .text:10001774 loc_10001774 ; CODE XREF: sub_1000145C+2FCj .text:10001774 MOVL R3, 0xEC1 .text:1000177C CMP R2, R3 .text:10001780 BLS loc_1000179C .text:10001784 .text:10001784 loc_10001784 ; CODE XREF: sub_1000145C+30Cj .text:10001784 MOVL R3, 0xEDA .text:1000178C CMP R2, R3 .text:10001790 BHI loc_100017AC .text:10001794 MOV R3, #0x54 .text:10001798 B loc_10001838 .text:1000179C ; --------------------------------------------------------------------------- .text:1000179C .text:1000179C loc_1000179C ; CODE XREF: sub_1000145C+324j .text:1000179C MOVL R3, 0xEDA .text:100017A4 CMP R2, R3 .text:100017A8 BLS loc_100017C4 .text:100017AC .text:100017AC loc_100017AC ; CODE XREF: sub_1000145C+334j .text:100017AC MOVL R3, 0xEF3 .text:100017B4 CMP R2, R3 .text:100017B8 BHI loc_100017D4 .text:100017BC MOV R3, #0x58 .text:100017C0 B loc_10001838 .text:100017C4 ; --------------------------------------------------------------------------- .text:100017C4 .text:100017C4 loc_100017C4 ; CODE XREF: sub_1000145C+34Cj .text:100017C4 MOVL R3, 0xEF3 .text:100017CC CMP R2, R3 .text:100017D0 BLS loc_100017EC .text:100017D4 .text:100017D4 loc_100017D4 ; CODE XREF: sub_1000145C+35Cj .text:100017D4 MOVL R3, 0xF0C .text:100017DC CMP R2, R3 .text:100017E0 BHI loc_100017FC .text:100017E4 MOV R3, #0x5C .text:100017E8 B loc_10001838 .text:100017EC ; --------------------------------------------------------------------------- .text:100017EC .text:100017EC loc_100017EC ; CODE XREF: sub_1000145C+374j .text:100017EC MOVL R3, 0xF0C .text:100017F4 CMP R2, R3 .text:100017F8 BLS loc_10001814 .text:100017FC .text:100017FC loc_100017FC ; CODE XREF: sub_1000145C+384j .text:100017FC MOVL R3, 0xF2A .text:10001804 CMP R2, R3 .text:10001808 BHI loc_10001824 .text:1000180C MOV R3, #0x60 .text:10001810 B loc_10001838 .text:10001814 ; --------------------------------------------------------------------------- .text:10001814 .text:10001814 loc_10001814 ; CODE XREF: sub_1000145C+39Cj .text:10001814 MOVL R3, 0xF2A .text:1000181C CMP R2, R3 .text:10001820 BLS loc_1000183C .text:10001824 .text:10001824 loc_10001824 ; CODE XREF: sub_1000145C+3ACj .text:10001824 MOVL R3, 0xF48 .text:1000182C CMP R2, R3 .text:10001830 BHI loc_1000183C .text:10001834 MOV R3, #0x64 .text:10001838 .text:10001838 loc_10001838 ; CODE XREF: sub_1000145C+18j .text:10001838 ; sub_1000145C+34j ... .text:10001838 STRB R3, [R1,#-0x4B] ; Charge stored in [unk_100050E5] .text:1000183C .text:1000183C loc_1000183C ; CODE XREF: sub_1000145C+3C4j .text:1000183C ; sub_1000145C+3D4j .text:1000183C MOV R0, #1 .text:10001840 BX LR .text:10001840 ; End of function sub_1000145C .text:10001840 .text:10001840 ; --------------------------------------------------------------------------- .text:10001844 off_10001844 DCD unk_10005130 ; DATA XREF: sub_1000145Cr .text:10001848 .text:10001848 ; =============== S U B R O U T I N E ======================================= .text:10001848 .text:10001848 .text:10001848 sub_10001848 ; CODE XREF: sub_100020F4+324p .text:10001848 ; sub_100020F4+33Cp .text:10001848 ; DATA XREF: ... .text:10001848 STMFD SP!, {R4,LR} .text:1000184C LDR R4, =unk_100050E8 .text:10001850 CMP R0, #1 .text:10001854 LDR R3, [R4,#0x28] ; R3 = [unk_10005120] .text:10001858 BNE loc_10001964 .text:1000185C CMP R3, #0 .text:10001860 BNE loc_10001AB0 .text:10001864 LDR R2, [R4,#0x44] ; R2 = [unk_1000512C] .text:10001868 MOVL R3, 0xF5A .text:10001870 CMP R2, R3 .text:10001874 BCS loc_10001AB0 @ >=0xf5a => 100% .text:10001878 LDR R3, [R4,#0x38] .text:1000187C CMP R3, #0 .text:10001880 BEQ loc_100018A8 .text:10001884 LDRB R3, [R4,#-3] .text:10001888 CMP R3, #0x10 .text:1000188C SUBHI R2, R3, #0xC .text:10001890 BHI loc_10001898 .text:10001894 .text:10001894 loc_10001894 ; CODE XREF: sub_10001848+14Cj .text:10001894 MOV R2, #4 .text:10001898 .text:10001898 loc_10001898 ; CODE XREF: sub_10001848+48j .text:10001898 ; sub_10001848+154j .text:10001898 LDR R3, =unk_100050BC .text:1000189C STRB R2, [R4,#-3] .text:100018A0 STRB R2, [R3] .text:100018A4 B loc_10001ABC .text:100018A8 ; --------------------------------------------------------------------------- .text:100018A8 .text:100018A8 loc_100018A8 ; CODE XREF: sub_10001848+38j .text:100018A8 LDR R2, [R4] .text:100018AC CMP R2, #0x14 .text:100018B0 BCS loc_100018C4 .text:100018B4 .text:100018B4 loc_100018B4 ; CODE XREF: sub_10001848+160j .text:100018B4 LDR R3, =unk_100050BC .text:100018B8 LDRB R3, [R3] .text:100018BC STRB R3, [R4,#-3] .text:100018C0 B loc_10001ABC .text:100018C4 ; --------------------------------------------------------------------------- .text:100018C4 .text:100018C4 loc_100018C4 ; CODE XREF: sub_10001848+68j .text:100018C4 CMP R2, #0x12C .text:100018C8 BCC loc_100019B4 .text:100018CC CMP R2, #0x258 .text:100018D0 BCS loc_100018F0 .text:100018D4 .text:100018D4 loc_100018D4 ; CODE XREF: sub_10001848+188j .text:100018D4 LDR LR, =unk_100050BC .text:100018D8 LDRB R3, [R4,#-3] .text:100018DC LDRB R0, [LR] .text:100018E0 SUB R3, R3, R0 .text:100018E4 ADD R3, R3, R3,LSL#1 .text:100018E8 MOV R2, R3,LSL#1 .text:100018EC B loc_10001938 .text:100018F0 ; --------------------------------------------------------------------------- .text:100018F0 .text:100018F0 loc_100018F0 ; CODE XREF: sub_10001848+88j .text:100018F0 CMP R2, #0x4B0 .text:100018F4 BCC loc_100019E4 .text:100018F8 CMP R2, #0x960 .text:100018FC BCC loc_10001A04 .text:10001900 CMP R2, #0xE10 .text:10001904 BCC loc_10001A3C .text:10001908 CMP R2, #0x12C0 .text:1000190C BCC loc_10001A3C .text:10001910 MOVL R3, 0x1770 .text:10001918 CMP R2, R3 .text:1000191C BCS loc_10001958 .text:10001920 .text:10001920 loc_10001920 ; CODE XREF: sub_10001848+21Cj .text:10001920 LDR LR, =unk_100050BC .text:10001924 LDRB R3, [R4,#-3] .text:10001928 LDRB R0, [LR] .text:1000192C SUB R2, R3, R0 .text:10001930 ADD R3, R2, R2,LSL#2 .text:10001934 ADD R2, R2, R3,LSL#1 .text:10001938 .text:10001938 loc_10001938 ; CODE XREF: sub_10001848+A4j .text:10001938 ; sub_10001848+180j ... .text:10001938 LDR R1, =0x2AAAAAAB .text:1000193C SMULL R3, R1, R2, R1 .text:10001940 MOV R3, R1,ASR#1 .text:10001944 ADD R3, R3, R3,LSR#31 .text:10001948 ADD R3, R3, R0 .text:1000194C STRB R3, [R4,#-3] .text:10001950 STRB R3, [LR] .text:10001954 B loc_10001ABC .text:10001958 ; --------------------------------------------------------------------------- .text:10001958 .text:10001958 loc_10001958 ; CODE XREF: sub_10001848+D4j .text:10001958 MOVL R3, 0x1C20 .text:10001960 B loc_10001A70 .text:10001964 ; --------------------------------------------------------------------------- .text:10001964 .text:10001964 loc_10001964 ; CODE XREF: sub_10001848+10j .text:10001964 CMP R3, #0 .text:10001968 BNE loc_10001AB0 .text:1000196C LDR R2, [R4,#0x44] .text:10001970 MOVL R3, 0xF5A .text:10001978 CMP R2, R3 .text:1000197C BCS loc_10001AB0 .text:10001980 LDR R3, [R4,#0x38] .text:10001984 CMP R3, #0 .text:10001988 BEQ loc_100019A0 .text:1000198C LDRB R3, [R4,#-3] .text:10001990 CMP R3, #0xC .text:10001994 BLS loc_10001894 .text:10001998 SUB R2, R3, #8 .text:1000199C B loc_10001898 .text:100019A0 ; --------------------------------------------------------------------------- .text:100019A0 .text:100019A0 loc_100019A0 ; CODE XREF: sub_10001848+140j .text:100019A0 LDR R2, [R4] .text:100019A4 CMP R2, #0x1E .text:100019A8 BCC loc_100018B4 .text:100019AC CMP R2, #0x12C .text:100019B0 BCS loc_100019CC .text:100019B4 .text:100019B4 loc_100019B4 ; CODE XREF: sub_10001848+80j .text:100019B4 LDR LR, =unk_100050BC .text:100019B8 LDRB R3, [R4,#-3] .text:100019BC LDRB R0, [LR] .text:100019C0 SUB R3, R3, R0 .text:100019C4 MOV R2, R3,LSL#2 .text:100019C8 B loc_10001938 .text:100019CC ; --------------------------------------------------------------------------- .text:100019CC .text:100019CC loc_100019CC ; CODE XREF: sub_10001848+168j .text:100019CC CMP R2, #0x258 .text:100019D0 BCC loc_100018D4 .text:100019D4 MOVL R3, 0x708 .text:100019DC CMP R2, R3 .text:100019E0 BCS loc_100019FC .text:100019E4 .text:100019E4 loc_100019E4 ; CODE XREF: sub_10001848+ACj .text:100019E4 LDR LR, =unk_100050BC .text:100019E8 LDRB R3, [R4,#-3] .text:100019EC LDRB R0, [LR] .text:100019F0 SUB R3, R3, R0 .text:100019F4 MOV R2, R3,LSL#3 .text:100019F8 B loc_10001938 .text:100019FC ; --------------------------------------------------------------------------- .text:100019FC .text:100019FC loc_100019FC ; CODE XREF: sub_10001848+198j .text:100019FC CMP R2, #0xE10 .text:10001A00 BCS loc_10001A1C .text:10001A04 .text:10001A04 loc_10001A04 ; CODE XREF: sub_10001848+B4j .text:10001A04 LDR LR, =unk_100050BC .text:10001A08 LDRB R3, [R4,#-3] .text:10001A0C LDRB R0, [LR] .text:10001A10 SUB R3, R3, R0 .text:10001A14 ADD R2, R3, R3,LSL#3 .text:10001A18 B loc_10001938 .text:10001A1C ; --------------------------------------------------------------------------- .text:10001A1C .text:10001A1C loc_10001A1C ; CODE XREF: sub_10001848+1B8j .text:10001A1C MOVL R3, 0x1518 .text:10001A24 CMP R2, R3 .text:10001A28 BCC loc_10001A3C .text:10001A2C MOVL R3, 0x1C20 .text:10001A34 CMP R2, R3 .text:10001A38 BCS loc_10001A58 .text:10001A3C .text:10001A3C loc_10001A3C ; CODE XREF: sub_10001848+BCj .text:10001A3C ; sub_10001848+C4j ... .text:10001A3C LDR LR, =unk_100050BC .text:10001A40 LDRB R3, [R4,#-3] .text:10001A44 LDRB R0, [LR] .text:10001A48 SUB R3, R3, R0 .text:10001A4C ADD R3, R3, R3,LSL#2 .text:10001A50 MOV R2, R3,LSL#1 .text:10001A54 B loc_10001938 .text:10001A58 ; --------------------------------------------------------------------------- .text:10001A58 .text:10001A58 loc_10001A58 ; CODE XREF: sub_10001848+1F0j .text:10001A58 MOVL R3, 0x2328 .text:10001A60 CMP R2, R3 .text:10001A64 BCC loc_10001920 .text:10001A68 MOVL R3, 0x2A30 .text:10001A70 .text:10001A70 loc_10001A70 ; CODE XREF: sub_10001848+118j .text:10001A70 CMP R2, R3 .text:10001A74 BCS loc_10001AB0 .text:10001A78 LDR LR, =unk_100050BC .text:10001A7C LDRB R3, [R4,#-3] .text:10001A80 LDR R1, =0x2AAAAAAB .text:10001A84 LDRB R0, [LR] .text:10001A88 SUB R2, R3, R0 .text:10001A8C ADD R3, R2, R2,LSL#2 .text:10001A90 ADD R2, R2, R3,LSL#1 .text:10001A94 SMULL R3, R1, R2, R1 .text:10001A98 MOV R3, R1,ASR#1 .text:10001A9C ADD R3, R3, R3,LSR#31 .text:10001AA0 ADD R3, R3, R0 .text:10001AA4 STRB R3, [LR] .text:10001AA8 STRB R3, [R4,#-3] .text:10001AAC B loc_10001ABC .text:10001AB0 ; --------------------------------------------------------------------------- .text:10001AB0 .text:10001AB0 loc_10001AB0 ; CODE XREF: sub_10001848+18j .text:10001AB0 ; sub_10001848+2Cj ... .text:10001AB0 LDR R3, =unk_100050BC .text:10001AB4 LDRB R2, [R4,#-3] .text:10001AB8 STRB R2, [R3] .text:10001ABC .text:10001ABC loc_10001ABC ; CODE XREF: sub_10001848+5Cj .text:10001ABC ; sub_10001848+78j ... .text:10001ABC MOV R0, #1 .text:10001AC0 LDMFD SP!, {R4,LR} .text:10001AC4 BX LR .text:10001AC4 ; End of function sub_10001848 .text:10001AC4 .text:10001AC4 ; --------------------------------------------------------------------------- .text:10001AC8 off_10001AC8 DCD unk_100050BC ; DATA XREF: sub_10001848:loc_10001898r .text:10001AC8 ; sub_10001848:loc_100018B4r ... .text:10001ACC dword_10001ACC DCD 0x2AAAAAAB ; DATA XREF: sub_10001848:loc_10001938r .text:10001ACC ; sub_10001848+238r .text:10001AD0 off_10001AD0 DCD unk_100050E8 ; DATA XREF: sub_10001848+4r .text:10001AD4 .text:10001AD4 ; =============== S U B R O U T I N E ======================================= .text:10001AD4 .text:10001AD4 .text:10001AD4 sub_10001AD4 ; CODE XREF: sub_10001FC8+64p .text:10001AD4 ; sub_10001FC8+80p .text:10001AD4 ; DATA XREF: ... .text:10001AD4 CMP R0, #0 .text:10001AD8 LDR R2, =unk_100050E8 .text:10001ADC BEQ loc_10001B34 .text:10001AE0 LDR R3, [R2] .text:10001AE4 CMP R3, #0x12C .text:10001AE8 BCS loc_10001B00 .text:10001AEC .text:10001AEC loc_10001AEC ; CODE XREF: sub_10001AD4+68j .text:10001AEC LDRB R3, [R2,#-3] .text:10001AF0 CMP R3, #0x3C .text:10001AF4 BLS loc_10001B6C .text:10001AF8 .text:10001AF8 loc_10001AF8 ; CODE XREF: sub_10001AD4+3Cj .text:10001AF8 SUB R3, R3, #0xC .text:10001AFC B loc_10001B78 .text:10001B00 ; --------------------------------------------------------------------------- .text:10001B00 .text:10001B00 loc_10001B00 ; CODE XREF: sub_10001AD4+14j .text:10001B00 CMP R3, #0x4B0 .text:10001B04 BCS loc_10001B1C .text:10001B08 .text:10001B08 loc_10001B08 ; CODE XREF: sub_10001AD4+70j .text:10001B08 LDRB R3, [R2,#-3] .text:10001B0C CMP R3, #0x3C .text:10001B10 BLS loc_10001AF8 .text:10001B14 SUB R3, R3, #8 .text:10001B18 B loc_10001B78 .text:10001B1C ; --------------------------------------------------------------------------- .text:10001B1C .text:10001B1C loc_10001B1C ; CODE XREF: sub_10001AD4+30j .text:10001B1C CMP R3, #0xE10 .text:10001B20 B loc_10001B54 .text:10001B24 ; --------------------------------------------------------------------------- .text:10001B24 .text:10001B24 loc_10001B24 ; CODE XREF: sub_10001AD4+84j .text:10001B24 CMP R3, #0x3C .text:10001B28 BLS loc_10001B74 .text:10001B2C SUB R3, R3, #2 .text:10001B30 B loc_10001B78 .text:10001B34 ; --------------------------------------------------------------------------- .text:10001B34 .text:10001B34 loc_10001B34 ; CODE XREF: sub_10001AD4+8j .text:10001B34 LDR R1, [R2] .text:10001B38 CMP R1, #0x258 .text:10001B3C BCC loc_10001AEC .text:10001B40 CMP R1, #0x960 .text:10001B44 BCC loc_10001B08 .text:10001B48 MOVL R3, 0x1518 .text:10001B50 CMP R1, R3 .text:10001B54 .text:10001B54 loc_10001B54 ; CODE XREF: sub_10001AD4+4Cj .text:10001B54 LDRB R3, [R2,#-3] .text:10001B58 BCS loc_10001B24 .text:10001B5C CMP R3, #0x3C .text:10001B60 BHI loc_10001B74 .text:10001B64 SUB R3, R3, #8 .text:10001B68 B loc_10001B78 .text:10001B6C ; --------------------------------------------------------------------------- .text:10001B6C .text:10001B6C loc_10001B6C ; CODE XREF: sub_10001AD4+20j .text:10001B6C SUB R3, R3, #0x10 .text:10001B70 B loc_10001B78 .text:10001B74 ; --------------------------------------------------------------------------- .text:10001B74 .text:10001B74 loc_10001B74 ; CODE XREF: sub_10001AD4+54j .text:10001B74 ; sub_10001AD4+8Cj .text:10001B74 SUB R3, R3, #4 .text:10001B78 .text:10001B78 loc_10001B78 ; CODE XREF: sub_10001AD4+28j .text:10001B78 ; sub_10001AD4+44j ... .text:10001B78 AND R3, R3, #0xFF .text:10001B7C CMP R3, #0x64 .text:10001B80 STRB R3, [R2,#-3] .text:10001B84 MOVHI R3, #4 .text:10001B88 STRHIB R3, [R2,#-3] .text:10001B8C MOV R0, #1 .text:10001B90 BX LR .text:10001B90 ; End of function sub_10001AD4 .text:10001B90 .text:10001B90 ; --------------------------------------------------------------------------- .text:10001B94 off_10001B94 DCD unk_100050E8 ; DATA XREF: sub_10001AD4+4r .text:10001B98 .text:10001B98 ; =============== S U B R O U T I N E ======================================= .text:10001B98 .text:10001B98 .text:10001B98 sub_10001B98 ; DATA XREF: .text:off_10001FA0o .text:10001B98 ; .pdata:10006078o ;;; Thread updating status .text:10001B98 STMFD SP!, {R4-R9,LR} .text:10001B9C MOV R3, #0 .text:10001BA0 MOV R2, #0 .text:10001BA4 MOV R1, #0 .text:10001BA8 MOV R0, #0 .text:10001BAC BL CreateEventW .text:10001BB0 MOVS R5, R0 .text:10001BB4 MOV R0, #0 .text:10001BB8 BEQ loc_10001BD8 .text:10001BBC LDR R3, =aRequire_system .text:10001BC0 MOV R2, #0 .text:10001BC4 MOV R1, #0 .text:10001BC8 BL CreateEventW .text:10001BCC MOVS R6, R0 .text:10001BD0 BNE loc_10001BE0 .text:10001BD4 MOV R0, #0 .text:10001BD8 .text:10001BD8 loc_10001BD8 ; CODE XREF: sub_10001B98+20j .text:10001BD8 LDMFD SP!, {R4-R9,LR} .text:10001BDC BX LR .text:10001BE0 ; --------------------------------------------------------------------------- .text:10001BE0 .text:10001BE0 loc_10001BE0 ; CODE XREF: sub_10001B98+38j .text:10001BE0 MOV R3, #0 .text:10001BE4 MOV R2, #0 .text:10001BE8 MOV R1, R5 .text:10001BEC MOV R0, #0x17 .text:10001BF0 BL InterruptInitialize .text:10001BF4 LDR R4, =unk_100050FC .text:10001BF8 MOV R1, #3 .text:10001BFC LDR R0, [R4,#0x44] ; R0 = [unk_10005140] = Event MPM Power Notify .text:10001C00 BL EventModify .text:10001C04 LDR R7, =unk_100050C0 .text:10001C08 MOV R8, #1 .text:10001C0C MOV R9, #1 .text:10001C10 .text:10001C10 loc_10001C10 ; CODE XREF: sub_10001B98+ECj .text:10001C10 MOVL R1, 0xFFFFFFFF .text:10001C14 MOV R0, R5 .text:10001C18 BL WaitForSingleObject .text:10001C1C LDR R3, [R4] ; R3 = [unk_100050FC] .text:10001C20 LDR R0, [R4,#0x48] ; R0 = [unk_10005144] .text:10001C24 MOV R1, #3 .text:10001C28 LDR R3, [R3,#0x100] .text:10001C2C TST R3, #1 .text:10001C30 BEQ loc_10001C58 .text:10001C34 BL EventModify ; Event UpdatePower .text:10001C38 LDR R0, [R4,#0x44] ; R0 = [unk_10005140] .text:10001C3C MOV R1, #3 .text:10001C40 BL EventModify ; Event MPM Power Notify .text:10001C44 MOV R1, #3 .text:10001C48 MOV R0, R6 .text:10001C4C BL EventModify .text:10001C50 LDR R0, [R4,#0x3C] ; R0 = [unk_10005138] = Event Blk_AC_IN .text:10001C54 B loc_10001C6C .text:10001C58 ; --------------------------------------------------------------------------- .text:10001C58 .text:10001C58 loc_10001C58 ; CODE XREF: sub_10001B98+98j .text:10001C58 BL EventModify .text:10001C5C LDR R0, [R4,#0x44] .text:10001C60 MOV R1, #3 .text:10001C64 BL EventModify .text:10001C68 MOV R0, R6 .text:10001C6C .text:10001C6C loc_10001C6C ; CODE XREF: sub_10001B98+BCj .text:10001C6C MOV R1, #3 .text:10001C70 BL EventModify .text:10001C74 MOV R0, #0x17 .text:10001C78 STR R8, [R4,#0x18] .text:10001C7C STR R9, [R7] .text:10001C80 BL InterruptDone .text:10001C84 B loc_10001C10 .text:10001C84 ; End of function sub_10001B98 .text:10001C84 .text:10001C84 ; --------------------------------------------------------------------------- .text:10001C88 off_10001C88 DCD unk_100050C0 ; DATA XREF: sub_10001B98+6Cr .text:10001C8C off_10001C8C DCD unk_100050FC ; DATA XREF: sub_10001B98+5Cr .text:10001C90 off_10001C90 DCD aRequire_system ; DATA XREF: sub_10001B98+24r .text:10001C90 ; "Require_System_Exit_BacklightOff" .text:10001C94 .text:10001C94 ; =============== S U B R O U T I N E ======================================= .text:10001C94 .text:10001C94 .text:10001C94 sub_10001C94 ; CODE XREF: sub_100020F4+1Cp .text:10001C94 ; DATA XREF: .pdata:10006080o .text:10001C94 .text:10001C94 var_1C = -0x1C .text:10001C94 var_18 = -0x18 .text:10001C94 .text:10001C94 STMFD SP!, {R4-R7,LR} .text:10001C98 SUB SP, SP, #8 .text:10001C9C LDR R2, =aBatteryFileMut .text:10001CA0 MOV R1, #0 .text:10001CA4 MOV R0, #0 .text:10001CA8 BL CreateMutexW .text:10001CAC LDR R4, =unk_100050F8 .text:10001CB0 CMP R0, #0 .text:10001CB4 STR R0, [R4,#0x58] .text:10001CB8 BEQ loc_10001D24 .text:10001CBC LDR R2, =aBatteryFile .text:10001CC0 MOV R5, #0x38 .text:10001CC4 MOV R3, #0 .text:10001CC8 STR R2, [SP,#0x1C+var_18] .text:10001CCC MOV R2, #4 .text:10001CD0 MOV R1, #0 .text:10001CD4 MOVL R0, 0xFFFFFFFF .text:10001CD8 STR R5, [SP,#0x1C+var_1C] .text:10001CDC BL CreateFileMappingW .text:10001CE0 CMN R0, #1 .text:10001CE4 STR R0, [R4,#0x54] .text:10001CE8 LDREQ R0, [R4,#0x58] .text:10001CEC BEQ loc_10001D20 .text:10001CF0 MOVL R1, 0xF001F .text:10001CF8 MOV R3, #0 .text:10001CFC MOV R2, #0 .text:10001D00 STR R5, [SP,#0x1C+var_1C] .text:10001D04 BL MapViewOfFile .text:10001D08 CMP R0, #0 .text:10001D0C STR R0, [R4,#0x50] .text:10001D10 BNE loc_10001D34 .text:10001D14 LDR R0, [R4,#0x58] .text:10001D18 BL CloseHandle .text:10001D1C LDR R0, [R4,#0x54] .text:10001D20 .text:10001D20 loc_10001D20 ; CODE XREF: sub_10001C94+58j .text:10001D20 BL CloseHandle .text:10001D24 .text:10001D24 loc_10001D24 ; CODE XREF: sub_10001C94+24j .text:10001D24 ; sub_10001C94+F4j ... .text:10001D24 MOV R0, #0 .text:10001D28 .text:10001D28 loc_10001D28 ; CODE XREF: sub_10001C94+24Cj .text:10001D28 ; sub_10001C94+308j .text:10001D28 ADD SP, SP, #8 .text:10001D2C LDMFD SP!, {R4-R7,LR} .text:10001D30 BX LR .text:10001D34 ; --------------------------------------------------------------------------- .text:10001D34 .text:10001D34 loc_10001D34 ; CODE XREF: sub_10001C94+7Cj .text:10001D34 LDR R3, [R4,#4] .text:10001D38 CMP R3, #0 .text:10001D3C BNE loc_10001D5C .text:10001D40 MOVL R0, 0x40E00000 .text:10001D48 MOV R1, #0 .text:10001D4C MOV R3, #0 .text:10001D50 MOV R2, #0x14C .text:10001D54 BL CEDDK_8 .text:10001D58 STR R0, [R4,#4] .text:10001D5C .text:10001D5C loc_10001D5C ; CODE XREF: sub_10001C94+A8j .text:10001D5C LDR R3, [R4] .text:10001D60 CMP R3, #0 .text:10001D64 BNE loc_10001D80 .text:10001D68 LDR R0, =0xA020B000 .text:10001D6C MOV R1, #0 .text:10001D70 MOV R3, #0 .text:10001D74 MOV R2, #0x900 .text:10001D78 BL CEDDK_8 .text:10001D7C STR R0, [R4] .text:10001D80 ;; RJK: [R4] = [unk_100050F8] = virtual addr of 0xA020B000 ;; RJK: [R4+4] = [unk_100050F8 + 4] = virtual addr of 0x40e00000 .text:10001D80 loc_10001D80 ; CODE XREF: sub_10001C94+D0j .text:10001D80 LDR R3, [R4,#4] .text:10001D84 CMP R3, #0 .text:10001D88 BEQ loc_10001D24 .text:10001D8C LDR R3, [R4] .text:10001D90 CMP R3, #0 .text:10001D94 BEQ loc_10001D24 .text:10001D98 LDR R2, [R4,#4] .text:10001D9C LDR R1, =unk_100050C0 .text:10001DA0 MOV R0, #1 .text:10001DA4 LDR R3, [R2,#0x6C] .text:10001DA8 MOV R7, #0 .text:10001DAC STR R0, [R1] .text:10001DB0 BIC R3, R3, #3 .text:10001DB4 STR R3, [R2,#0x6C] ; GAFR3_L: GPIO96 is normal .text:10001DB8 LDR R2, [R4,#4] .text:10001DBC MOV R1, #0 .text:10001DC0 LDR R3, [R2,#0x10C] .text:10001DC4 BIC R3, R3, #1 .text:10001DC8 STR R3, [R2,#0x10C] ; GPDR3: GPIO96 is input .text:10001DCC LDR R2, [R4,#4] .text:10001DD0 LDR R3, [R2,#0x68] .text:10001DD4 BIC R3, R3, #3 .text:10001DD8 STR R3, [R2,#0x68] ; GAFR2_U: GPIO80 is normal .text:10001DDC LDR R2, [R4,#4] .text:10001DE0 LDR R3, [R2,#0x14] .text:10001DE4 BIC R3, R3, #0x10000 .text:10001DE8 STR R3, [R2,#0x14] ; GPDR2: GPIO80 is input .text:10001DEC LDR R2, [R4,#4] .text:10001DF0 LDR R3, [R2,#0x54] .text:10001DF4 BIC R3, R3, #0xC0000 .text:10001DF8 STR R3, [R2,#0x54] ; GAFR0_L: GPIO9 is normal .text:10001DFC LDR R2, [R4,#4] .text:10001E00 LDR R3, [R2,#0xC] .text:10001E04 ORR R3, R3, #0x200 .text:10001E08 STR R3, [R2,#0xC] ; GPDR0: GPIO9 is output .text:10001E0C LDR R2, [R4,#4] .text:10001E10 LDR R3, [R2,#0x6C] .text:10001E14 BIC R3, R3, #0x30 .text:10001E18 STR R3, [R2,#0x6C] ; GAFR3_L: GPIO98 is normal .text:10001E1C LDR R2, [R4,#4] .text:10001E20 LDR R3, [R2,#0x10C] .text:10001E24 ORR R3, R3, #4 .text:10001E28 STR R3, [R2,#0x10C] ; GPDR3: GPIO98 is output .text:10001E2C LDR R2, [R4,#4] .text:10001E30 LDR R3, [R2,#0x118] .text:10001E34 ORR R3, R3, #4 .text:10001E38 STR R3, [R2,#0x118] ; GPSR3: GPIO98 = 1 .text:10001E3C LDR R2, [R4,#4] .text:10001E40 LDR R3, [R2,#0x54] .text:10001E44 BIC R3, R3, #0x300000 .text:10001E48 STR R3, [R2,#0x54] ; GAFR0_L: GPIO10 is normal .text:10001E4C LDR R2, [R4,#4] .text:10001E50 LDR R3, [R2,#0xC] .text:10001E54 ORR R3, R3, #0x400 .text:10001E58 STR R3, [R2,#0xC] ; GPDR0: GPIO10 is output .text:10001E5C LDR R3, [R4] .text:10001E60 STRB R7, [R3,#0x30E] .text:10001E64 ;;; Initialize 20 voltage slots (0xa020b318...) .text:10001E64 loc_10001E64 ; CODE XREF: sub_10001C94+1F0j .text:10001E64 LDR R3, [R4] .text:10001E68 ADD R3, R1, R3 .text:10001E6C ADD R1, R1, #4 .text:10001E70 CMP R1, #0x14 .text:10001E74 STRB R7, [R3,#0x318] .text:10001E78 STRB R7, [R3,#0x319] .text:10001E7C STRB R7, [R3,#0x31A] .text:10001E80 STRB R7, [R3,#0x31B] .text:10001E84 BLT loc_10001E64 .text:10001E88 LDR R3, =aNotify_mpm_pow .text:10001E8C MOV R2, #0 .text:10001E90 MOV R1, #0 .text:10001E94 MOV R0, #0 .text:10001E98 BL CreateEventW .text:10001E9C LDR R3, =aRequire_syst_0 .text:10001EA0 MOV R2, R0 .text:10001EA4 STR R2, [R4,#0x48] ; [unk_10005140] = Event Notifiy MPM Power .text:10001EA8 MOV R2, #0 .text:10001EAC MOV R0, #0 .text:10001EB0 MOV R1, #0 .text:10001EB4 BL CreateEventW .text:10001EB8 LDR R3, =aBkl_ac_in .text:10001EBC MOV R2, R0 .text:10001EC0 STR R2, [R4,#0x3C] ; [unk_10005134] = Event Require System Off (low power) .text:10001EC4 MOV R2, #0 .text:10001EC8 MOV R0, #0 .text:10001ECC MOV R1, #0 .text:10001ED0 BL CreateEventW .text:10001ED4 CMP R0, #0 .text:10001ED8 STR R0, [R4,#0x40] ; [unk_10005138] Event Bkl_ac_in .text:10001EDC MOV R0, #0 .text:10001EE0 BEQ loc_10001D28 .text:10001EE4 LDR R3, =aSsupdatepower .text:10001EE8 MOV R2, #0 .text:10001EEC MOV R1, #0 .text:10001EF0 BL CreateEventW .text:10001EF4 CMP R0, #0 .text:10001EF8 STR R0, [R4,#0x4C] ; [unk_10005144] Event UpdatePower .text:10001EFC BEQ loc_10001F28 .text:10001F00 LDR R2, =sub_10001B98 .text:10001F04 MOV R3, #0 .text:10001F08 MOV R1, #0 .text:10001F0C MOV R0, #0 .text:10001F10 STR R7, [SP,#0x1C+var_18] .text:10001F14 STR R7, [SP,#0x1C+var_1C] .text:10001F18 BL CreateThread .text:10001F1C CMP R0, #0 .text:10001F20 STR R0, [R4,#0x44] ; [0xa020b044] = ThreadId .text:10001F24 BLNE CloseHandle .text:10001F28 .text:10001F28 loc_10001F28 ; CODE XREF: sub_10001C94+268j .text:10001F28 LDR R3, [R4,#0x50] .text:10001F2C MOVL R0, 0xFFFFFFFF .text:10001F30 MOVL LR, 0xFFFFFFFF .text:10001F34 MOVL R4, 0xFFFFFFFF .text:10001F38 MOVL R5, 0xFFFFFFFF .text:10001F3C MOV R6, #4 .text:10001F40 MOV R1, #1 .text:10001F44 MOV R2, #0x64 .text:10001F48 STR R0, [R3,#4] .text:10001F4C MOV R0, #1 .text:10001F50 STRB R1, [R3] .text:10001F54 STRB R1, [R3,#1] .text:10001F58 STRB R2, [R3,#2] .text:10001F5C STRB R7, [R3,#3] .text:10001F60 STR LR, [R3,#8] .text:10001F64 STRB R7, [R3,#0xC] .text:10001F68 STRB R1, [R3,#0xD] .text:10001F6C STRB R2, [R3,#0xE] .text:10001F70 STRB R7, [R3,#0xF] .text:10001F74 STR R4, [R3,#0x10] .text:10001F78 STR R5, [R3,#0x14] .text:10001F7C STRB R6, [R3,#0x34] .text:10001F80 STR R7, [R3,#0x18] .text:10001F84 STR R7, [R3,#0x1C] .text:10001F88 STR R7, [R3,#0x20] .text:10001F8C STR R7, [R3,#0x24] .text:10001F90 STR R7, [R3,#0x28] .text:10001F94 STR R7, [R3,#0x2C] .text:10001F98 STR R7, [R3,#0x30] .text:10001F9C B loc_10001D28 .text:10001F9C ; End of function sub_10001C94 .text:10001F9C .text:10001F9C ; --------------------------------------------------------------------------- .text:10001FA0 off_10001FA0 DCD sub_10001B98 ; DATA XREF: sub_10001C94+26Cr .text:10001FA4 off_10001FA4 DCD aSsupdatepower ; DATA XREF: sub_10001C94+250r .text:10001FA4 ; "SSUpdatePower" .text:10001FA8 off_10001FA8 DCD aBkl_ac_in ; DATA XREF: sub_10001C94+224r .text:10001FA8 ; "BKL_AC_IN" .text:10001FAC off_10001FAC DCD aRequire_syst_0 ; DATA XREF: sub_10001C94+208r .text:10001FAC ; "Require_System_Enter_Off" .text:10001FB0 off_10001FB0 DCD aNotify_mpm_pow ; DATA XREF: sub_10001C94+1F4r .text:10001FB0 ; "Notify_MPM_PowerSource_Changed" .text:10001FB4 off_10001FB4 DCD unk_100050C0 ; DATA XREF: sub_10001C94+108r .text:10001FB8 dword_10001FB8 DCD 0xA020B000 ; DATA XREF: sub_10001C94+D4r .text:10001FBC off_10001FBC DCD aBatteryFile ; DATA XREF: sub_10001C94+28r .text:10001FBC ; "Battery File" .text:10001FC0 off_10001FC0 DCD unk_100050F8 ; DATA XREF: sub_10001C94+18r .text:10001FC4 off_10001FC4 DCD aBatteryFileMut ; DATA XREF: sub_10001C94+8r .text:10001FC4 ; "Battery File Mutex" .text:10001FC8 .text:10001FC8 ; =============== S U B R O U T I N E ======================================= .text:10001FC8 .text:10001FC8 .text:10001FC8 sub_10001FC8 ; CODE XREF: sub_100020F4+354p .text:10001FC8 ; DATA XREF: .pdata:10006088o .text:10001FC8 STMFD SP!, {R4,R5,LR} .text:10001FCC LDR R4, =unk_100050E0 .text:10001FD0 LDR R5, =unk_100050BC .text:10001FD4 LDR R3, [R4,#0x3C] ; R3 = [unk_1000512C] = Voltage .text:10001FD8 CMP R3, #0 .text:10001FDC MOVNE R3, #0 .text:10001FE0 STRNE R3, [R4,#0x3C] .text:10001FE4 BNE loc_100020D4 .text:10001FE8 LDR R3, [R4,#0x38] .text:10001FEC CMP R3, #0 .text:10001FF0 BEQ loc_10002050 .text:10001FF4 MOV R3, #0 .text:10001FF8 STR R3, [R4,#0x38] .text:10001FFC BL GetTickCount .text:10002000 LDR R2, [R4,#0xC] .text:10002004 LDR R3, =0x10624DD3 .text:10002008 SUB R1, R0, R2 .text:1000200C UMULL R2, R0, R1, R3 .text:10002010 LDR R3, [R4,#0x48] .text:10002014 CMP R3, #0 .text:10002018 MOV R3, R0,LSR#6 .text:1000201C STR R3, [R4,#8] .text:10002020 MOVNE R3, #0 .text:10002024 MOVNE R0, #1 .text:10002028 STRNE R3, [R4,#0x48] .text:1000202C BLNE sub_10001AD4 .text:10002030 LDR R3, [R4,#0x44] .text:10002034 CMP R3, #0 .text:10002038 BEQ loc_100020D4 .text:1000203C MOV R3, #0 .text:10002040 MOV R0, #0 .text:10002044 STR R3, [R4,#0x44] .text:10002048 BL sub_10001AD4 .text:1000204C B loc_100020D4 .text:10002050 ; --------------------------------------------------------------------------- .text:10002050 .text:10002050 loc_10002050 ; CODE XREF: sub_10001FC8+28j .text:10002050 LDR R3, [R4,#0x48] .text:10002054 CMP R3, #0 .text:10002058 BNE loc_100020BC .text:1000205C LDR R3, [R4,#0x44] .text:10002060 CMP R3, #0 .text:10002064 BNE loc_100020BC .text:10002068 LDR R3, [R4,#0x40] .text:1000206C CMP R3, #0 .text:10002070 BNE loc_100020D4 .text:10002074 LDRB R2, [R5] .text:10002078 LDRB R3, [R4,#5] .text:1000207C SUB R3, R2, R3 .text:10002080 CMP R3, #4 .text:10002084 MOVLE R3, #0 .text:10002088 STRLEB R3, [R4] .text:1000208C BLE loc_100020D4 .text:10002090 LDRB R3, [R4] .text:10002094 STRB R2, [R4,#5] .text:10002098 ADD R3, R3, #1 .text:1000209C AND R3, R3, #0xFF .text:100020A0 STRB R3, [R4] .text:100020A4 CMP R3, #4 .text:100020A8 BLS loc_100020D4 .text:100020AC ADD R3, R2, #0xFC .text:100020B0 MOV R2, #0 .text:100020B4 STRB R2, [R4] .text:100020B8 B loc_100020D0 .text:100020BC ; --------------------------------------------------------------------------- .text:100020BC .text:100020BC loc_100020BC ; CODE XREF: sub_10001FC8+90j .text:100020BC ; sub_10001FC8+9Cj .text:100020BC MOV R2, #0 .text:100020C0 MOV R1, #0 .text:100020C4 LDRB R3, [R5] .text:100020C8 STR R2, [R4,#0x48] .text:100020CC STR R1, [R4,#0x44] .text:100020D0 .text:100020D0 loc_100020D0 ; CODE XREF: sub_10001FC8+F0j .text:100020D0 STRB R3, [R4,#5] .text:100020D4 .text:100020D4 loc_100020D4 ; CODE XREF: sub_10001FC8+1Cj .text:100020D4 ; sub_10001FC8+70j ... .text:100020D4 LDRB R3, [R4,#5] .text:100020D8 MOV R0, #1 .text:100020DC STRB R3, [R5] .text:100020E0 LDMFD SP!, {R4,R5,LR} .text:100020E4 BX LR .text:100020E4 ; End of function sub_10001FC8 .text:100020E4 .text:100020E4 ; --------------------------------------------------------------------------- .text:100020E8 dword_100020E8 DCD 0x10624DD3 ; DATA XREF: sub_10001FC8+3Cr .text:100020EC off_100020EC DCD unk_100050BC ; DATA XREF: sub_10001FC8+8r .text:100020F0 off_100020F0 DCD unk_100050E0 ; DATA XREF: sub_10001FC8+4r .text:100020F4 .text:100020F4 ; =============== S U B R O U T I N E ======================================= .text:100020F4 .text:100020F4 .text:100020F4 sub_100020F4 ; CODE XREF: sub_100012D8+4p .text:100020F4 ; DATA XREF: .pdata:10006090o .text:100020F4 STMFD SP!, {R4-R10,LR} .text:100020F8 MOV R9, R1 .text:100020FC MOV R5, R0 .text:10002100 LDR R4, =unk_100050E4 .text:10002104 LDR R3, [R4,#0x1C] ; R3 = unk_10005100 .text:10002108 CMP R3, #0 .text:1000210C BNE loc_10002124 .text:10002110 BL sub_10001C94 .text:10002114 CMP R0, #0 .text:10002118 BEQ loc_10002A48 .text:1000211C MOV R3, #1 .text:10002120 STR R3, [R4,#0x1C] .text:10002124 .text:10002124 loc_10002124 ; CODE XREF: sub_100020F4+18j .text:10002124 BL GetTickCount .text:10002128 LDR R3, [R4,#0x10] .text:1000212C MOVL R2, 0x3A98 .text:10002134 SUB R3, R0, R3 .text:10002138 LDR R6, =unk_100050BC .text:1000213C STR R3, [R4,#0xC] .text:10002140 CMP R3, R2 .text:10002144 BCS loc_10002164 .text:10002148 LDR R3, [R6,#4] ; R3 = 1 .text:1000214C CMP R3, #1 .text:10002150 BEQ loc_10002164 .text:10002154 LDR R3, [R4,#0x14] .text:10002158 LDRB R3, [R3,#0x30C] .text:1000215C CMP R3, #1 .text:10002160 BNE loc_10002A3C .text:10002164 .text:10002164 loc_10002164 ; CODE XREF: sub_100020F4+50j .text:10002164 ; sub_100020F4+5Cj .text:10002164 LDR R3, [R4,#0x14] ; R3 = [unk_100050F8] = p2v(0x40a0b000) .text:10002168 MOV R2, #0 .text:1000216C MOV R10, #0 .text:10002170 STRB R10, [R3,#0x30C] .text:10002174 STR R2, [R6,#4] .text:10002178 BL GetTickCount .text:1000217C MOV R3, R0 .text:10002180 LDR R0, [R4,#0x6C] .text:10002184 MOVL R1, 0x1388 .text:1000218C STR R3, [R4,#0x10] .text:10002190 BL WaitForSingleObject .text:10002194 MOVL R3, 0x102 .text:1000219C CMP R3, R0 .text:100021A0 BEQ loc_10002A48 .text:100021A4 LDR R1, [R4,#0x64] .text:100021A8 MOV R2, #0x38 .text:100021AC MOV R0, R5 .text:100021B0 BL memcpy .text:100021B4 LDR R0, [R4,#0x6C] .text:100021B8 BL ReleaseMutex .text:100021BC LDR R1, [R4,#0x14] .text:100021C0 LDRB R0, [R1,#0x328] .text:100021C4 LDRB R3, [R1,#0x329] .text:100021C8 LDRB R2, [R1,#0x32A] .text:100021CC LDRB R1, [R1,#0x32B] .text:100021D0 ORR R3, R0, R3,LSL#8 .text:100021D4 ORR R3, R3, R2,LSL#16 .text:100021D8 ORRS R3, R3, R1,LSL#24 .text:100021DC LDR R3, [R4,#0x18] ; GPIO Base .text:100021E0 BNE loc_10002270 ; Not first invocation, go on .text:100021E4 LDR R3, [R3,#0x100] .text:100021E8 MOV R0, #0 .text:100021EC MOV LR, #0 .text:100021F0 TST R3, #1 ; Test GPIO96 (AC plugged) .text:100021F4 MOVNE R3, #1 ; R3 = is_AC_plugged() .text:100021F8 MOV R2, #0 .text:100021FC MOV R1, #1 .text:10002200 STR R0, [R4,#0x44] .text:10002204 STRNE R3, [R4,#0x44] ; [unk_10005128] = is_AC_plugged() .text:10002208 STR LR, [R4,#0x40] ; [unk_10005124] = 0 (will be is_USB_plugged()) .text:1000220C STR R2, [R4,#0x34] ; [unk_10005114] = 0 .text:10002210 STR R1, [R4,#0x38] ; [unk_10005118] = 1 .text:10002214 MOVNE R0, #0x1E0 .text:10002218 BNE loc_1000223C ; Jump if GPIO96 == 1 (AC plugged) .text:1000221C LDR R3, [R4,#0x18] ; GPIO Base .text:10002220 LDR R3, [R3] .text:10002224 MVN R3, R3 .text:10002228 TST R3, #0x2000 .text:1000222C BEQ loc_10002258 ; Jump if GPIO13 == 1 (USB not plugged) .text:10002230 MOV R3, #1 .text:10002234 STR R3, [R4,#0x40] ; [unk_10005124]: is_USB_plugged() .text:10002238 MOV R0, #0x3C0 .text:1000223C ;; Here if AC plugged in or USB plugged in .text:1000223C loc_1000223C ; CODE XREF: sub_100020F4+124j .text:1000223C MOV R2, #1 .text:10002240 MOV R1, #0 .text:10002244 STR R2, [R4,#0x34] ; [unk_10005114] = 1 .text:10002248 STR R1, [R4,#0x38] ; [unk_10005118] = 0 .text:1000224C STR R0, [R6,#8] ; [R6+8] = 0x1E0 if is_AC_plugged, 0x3C0 if is_USB_plugged, 0 otherwise .text:10002250 BL GetTickCount .text:10002254 STR R0, [R4,#8] ; [unk_100050EC] = GetTickCount() .text:10002258 .text:10002258 loc_10002258 ; CODE XREF: sub_100020F4+138j .text:10002258 LDR R0, [R4,#0x5C] ; Event Notifiy MPM Power .text:1000225C MOV R1, #3 .text:10002260 BL EventModify ; .text:10002264 MOV R0, #1 .text:10002268 LDMFD SP!, {R4-R10,LR} .text:1000226C BX LR .text:10002270 ; --------------------------------------------------------------------------- .text:10002270 .text:10002270 loc_10002270 ; CODE XREF: sub_100020F4+ECj ;; if ((GPIO9 == 1) && (GPIO13 == 1)) <=> Fast Charge enabled and USB unplugged ;; GPIO9 = 0 => disable fast charge .text:10002270 LDR R3, [R3] ; R3 = GPRL0 .text:10002274 TST R3, #0x200 ; GPLR0: Test GPIO9 .text:10002278 LDRNE R3, [R4,#0x18] ; R3 = GPIO Base .text:1000227C LDRNE R3, [R3] .text:10002280 TSTNE R3, #0x2000 ; GPLR0: Test GPIO13 (is USB disconnected) ? .text:10002284 LDRNE R2, [R4,#0x18] ; If GPIO13 == 1, go on: R2 = GPIO Base .text:10002288 LDRNE R3, [R2,#0x24] .text:1000228C ORRNE R3, R3, #0x200 .text:10002290 STRNE R3, [R2,#0x24] ; GPCR0: GPIO9 = 0 if USB disconnected ;; if ((GPIO13 == 0) && (GPIO9 == 0)) <=> Fast Charge disabled and USB plugged ;; GPIO9 = 1 .text:10002294 LDR R3, [R4,#0x18] ; R3 = GPIO Base .text:10002298 LDR R3, [R3] .text:1000229C MVN R3, R3 .text:100022A0 TST R3, #0x2000 ; GPLR0: Inverted test of GPIO13 .text:100022A4 LDRNE R3, [R4,#0x18] ; If GPIO13 == 0, R3 = GPIO Base .text:100022A8 LDRNE R3, [R3] .text:100022AC MVNNE R3, R3 ; R3 = ^GPLR0 .text:100022B0 TSTNE R3, #0x200 ; GPLR0: Inverted test of GPIO9 .text:100022B4 LDRNE R2, [R4,#0x18] .text:100022B8 LDRNE R3, [R2,#0x18] .text:100022BC ORRNE R3, R3, #0x200 .text:100022C0 STRNE R3, [R2,#0x18] ; If (GPIO9 == 0) then GPIO9 = 1 ;; if ((GPIO96 == 1) || (GPIO9 == 1)) <=> If AC plugged in, or USB connected => jump 10002710 ;; Jump loc_10002710 .text:100022C4 LDR R3, [R4,#0x18] .text:100022C8 LDR R3, [R3,#0x100] .text:100022CC TST R3, #1 ; Test GPIO96 .text:100022D0 BNE loc_10002710 ; Jump if GPIO96 == 1 (if AC plugged) .text:100022D4 LDR R3, [R4,#0x18] .text:100022D8 LDR R3, [R3] .text:100022DC TST R3, #0x200 .text:100022E0 BNE loc_10002710 ; Jump if GPIO9 == 1 (if USB plugged) ;; ================================================================= ;; Here if AC not plugged and USB cable not plugged (run on battery) ;; ================================================================= .text:100022E4 LDRB R3, [R4,#-2] .text:100022E8 STRB R10, [R5] .text:100022EC ADD R3, R3, #1 .text:100022F0 AND R2, R3, #0xFF .text:100022F4 LDR R3, [R4,#0x28] ; R3 = [unk_1000510C] .text:100022F8 CMP R2, #0xC .text:100022FC STRB R2, [R4,#-2] .text:10002300 MOVHI R2, #0xC .text:10002304 STRHIB R2, [R4,#-2] .text:10002308 CMP R3, #0 .text:1000230C BEQ loc_1000231C .text:10002310 CMP R2, #0xC .text:10002314 MOVEQ R3, #0 .text:10002318 STREQ R3, [R4,#0x28] .text:1000231C .text:1000231C loc_1000231C ; CODE XREF: sub_100020F4+218j .text:1000231C BL sub_100013F0 ; Get_Voltage_Mean_Or_Query_Voltage() .text:10002320 MOVL R3, 0xD54 ; 3.412V .text:10002328 CMP R0, R3 .text:1000232C STR R0, [R4,#0x4C] ; [unk_10005130] = Voltage .text:10002330 MOV R7, R0 ; R7 = Voltage .text:10002334 STR R0, [R4,#0x48] ; [unk_1000512C] = Voltage .text:10002338 MOVCC R0, R3 .text:1000233C STRCC R3, [R4,#0x4C] ; [unk_10005130] = max(3.412, Voltage) .text:10002340 MOVL R3, 0xF48 ; 3.912V .text:10002348 CMP R0, R3 .text:1000234C STRHI R3, [R4,#0x4C] ; [unk_10005130] = min(3.912, Voltage) .text:10002350 BL sub_1000145C ; Transform_Voltage2Charge() .text:10002354 LDR R3, [R4,#0x14] ; R3 = [unk_100050F8] = 0xa020b000 .text:10002358 LDRB R3, [R3,#0x30E] .text:1000235C CMP R3, #1 .text:10002360 BNE loc_10002384 .text:10002364 LDR R3, [R4,#0x14] ; R3 = [unk_100050F8] = 0xa020b000 .text:10002368 LDR R0, [R4,#0x5C] ; R0 = [unk_10005140] .text:1000236C MOV R2, #1 .text:10002370 MOV R1, #3 .text:10002374 STRB R10, [R3,#0x30E] .text:10002378 STR R2, [R4,#0x3C] .text:1000237C BL EventModify ; Event notify MPM power .text:10002380 LDR R7, [R4,#0x48] .text:10002384 .text:10002384 loc_10002384 ; CODE XREF: sub_100020F4+26Cj .text:10002384 LDRB R1, [R6] ; R1 = [unk_100050BC] = 100 .text:10002388 LDRB R2, [R4,#1] ; R2 = [unk_100050E5] = Actual Charge .text:1000238C CMP R2, R1 ; Charge - 100 .text:10002390 BLS loc_10002444 ; Charge <= 100 => loc_10002444 .text:10002394 LDR R3, [R4,#0x44] ; R3 = [unk_10005128] = is_AC_plugged() .text:10002398 CMP R3, #0 .text:1000239C BNE loc_100023EC .text:100023A0 LDR R3, [R4,#0x40] ; R3 = [unk_10005124] = is_USB_plugged() .text:100023A4 CMP R3, #0 .text:100023A8 BNE loc_100023EC ; Here if was known to run on battery .text:100023AC LDR R3, [R4,#0x3C] ; R3 = [unk_10005120] = .text:100023B0 CMP R3, #0 .text:100023B4 BEQ loc_100023E0 .text:100023B8 SUB R3, R2, R1 .text:100023BC CMP R3, #0x12 .text:100023C0 BGE loc_1000257C .text:100023C4 MOVL R3, 0xF5A .text:100023CC CMP R7, R3 .text:100023D0 BCS loc_1000257C .text:100023D4 MOV R2, R1 .text:100023D8 STRB R1, [R4,#1] .text:100023DC B loc_10002580 .text:100023E0 ; --------------------------------------------------------------------------- .text:100023E0 .text:100023E0 loc_100023E0 ; CODE XREF: sub_100020F4+2C0j .text:100023E0 MOV R2, R1 .text:100023E4 STRB R1, [R4,#1] .text:100023E8 B loc_100025B0 .text:100023EC ; --------------------------------------------------------------------------- .text:100023EC ;;; Here if was known to run on external power, while now on battery power .text:100023EC loc_100023EC ; CODE XREF: sub_100020F4+2A8j .text:100023EC ; sub_100020F4+2B4j .text:100023EC BL GetTickCount .text:100023F0 LDR R2, [R4,#8] .text:100023F4 LDR R3, =0x10624DD3 .text:100023F8 SUB R1, R0, R2 .text:100023FC UMULL R2, R0, R1, R3 ; R0:R2 = 0x10624DD3 * (R0 - R2) .text:10002400 LDR R3, [R4,#0x44] .text:10002404 CMP R3, #0 .text:10002408 MOV R3, R0,LSR#6 ; R3 = R0 << 6 = 4 294 967 * (R0 - R2) .text:1000240C STR R3, [R4,#4] ; [unk_100050E8] = result .text:10002410 BEQ loc_1000242C .text:10002414 MOV R0, #1 .text:10002418 BL sub_10001848 .text:1000241C MOV R3, #0 .text:10002420 LDRB R2, [R4,#1] .text:10002424 STR R3, [R4,#0x44] .text:10002428 B loc_10002580 .text:1000242C ; --------------------------------------------------------------------------- .text:1000242C .text:1000242C loc_1000242C ; CODE XREF: sub_100020F4+31Cj .text:1000242C MOV R0, #0 .text:10002430 BL sub_10001848 .text:10002434 MOV R3, #0 .text:10002438 LDRB R2, [R4,#1] .text:1000243C STR R3, [R4,#0x40] .text:10002440 B loc_10002580 .text:10002444 ; --------------------------------------------------------------------------- .text:10002444 .text:10002444 loc_10002444 ; CODE XREF: sub_100020F4+29Cj .text:10002444 BCS loc_10002454 ; Charge >= 100 => loc_10002454 .text:10002448 BL sub_10001FC8 .text:1000244C LDRB R2, [R4,#1] .text:10002450 B loc_10002580 .text:10002454 ; --------------------------------------------------------------------------- .text:10002454 .text:10002454 loc_10002454 ; CODE XREF: sub_100020F4:loc_10002444j .text:10002454 CMP R2, R1 .text:10002458 BNE loc_10002580 ;; Charge is 100% .text:1000245C LDR R3, [R4,#0x34] .text:10002460 CMP R3, #0 .text:10002464 BEQ loc_10002544 .text:10002468 CMP R2, #0x64 .text:1000246C BNE loc_10002544 .text:10002470 BL GetTickCount .text:10002474 LDR R2, [R4,#8] ; R2 = [unk_100050EC] .text:10002478 LDR R3, =0x10624DD3 .text:1000247C SUB R0, R0, R2 .text:10002480 UMULL R1, LR, R0, R3 ; LR:R1 = 0x10624DD3 * (R0 - R2) .text:10002484 LDR R2, [R4,#0x48] ; R2 = Real Voltage .text:10002488 MOVL R3, 0xF5A .text:10002490 CMP R2, R3 .text:10002494 MOV R2, LR,LSR#6 .text:10002498 STR R2, [R4,#4] .text:1000249C BCS loc_10002538 .text:100024A0 MOVL R1, 0x708 .text:100024A8 CMP R2, #0x3C .text:100024AC BCS loc_100024C8 ; If R2 >= 0x3C .text:100024B0 LDR R3, [R4,#0x2C] ; R3 = [unk_10005110] = is_charge_finished() .text:100024B4 CMP R3, #0 .text:100024B8 BNE loc_100024E4 ;; Charge is not finished .text:100024BC LDRB R3, [R4,#1] .text:100024C0 ADD R3, R3, #0xF8 ; [unk_100050E5] += 0xf8 .text:100024C4 B loc_1000252C .text:100024C8 ; --------------------------------------------------------------------------- .text:100024C8 .text:100024C8 loc_100024C8 ; CODE XREF: sub_100020F4+3B8j .text:100024C8 CMP R2, #0x258 .text:100024CC BCS loc_100024EC ; If Voltage >= 600mV .text:100024D0 LDR R3, [R4,#0x2C] .text:100024D4 CMP R3, #0 .text:100024D8 LDREQB R3, [R4,#1] .text:100024DC ADDEQ R3, R3, #0xFA .text:100024E0 BEQ loc_1000252C ; [unk_100050E5] += 0xfa .text:100024E4 .text:100024E4 loc_100024E4 ; CODE XREF: sub_100020F4+3C4j .text:100024E4 CMP R2, #0x258 .text:100024E8 BCC loc_10002508 .text:100024EC .text:100024EC loc_100024EC ; CODE XREF: sub_100020F4+3D8j .text:100024EC CMP R2, R1 .text:100024F0 BCS loc_10002510 ; If Voltage >= 1.8V .text:100024F4 LDR R3, [R4,#0x2C] .text:100024F8 CMP R3, #0 .text:100024FC LDREQB R3, [R4,#1] .text:10002500 ADDEQ R3, R3, #0xFC .text:10002504 BEQ loc_1000252C .text:10002508 .text:10002508 loc_10002508 ; CODE XREF: sub_100020F4+3F4j .text:10002508 CMP R2, R1 .text:1000250C BCC loc_10002538 .text:10002510 .text:10002510 loc_10002510 ; CODE XREF: sub_100020F4+3FCj .text:10002510 CMP R2, #0xE10 .text:10002514 BCS loc_10002538 ; If Voltage >= 3.6V .text:10002518 LDR R3, [R4,#0x2C] .text:1000251C CMP R3, #0 .text:10002520 BNE loc_10002538 .text:10002524 LDRB R3, [R4,#1] .text:10002528 ADD R3, R3, #0xFE .text:1000252C .text:1000252C loc_1000252C ; CODE XREF: sub_100020F4+3D0j .text:1000252C ; sub_100020F4+3ECj ... .text:1000252C AND R2, R3, #0xFF .text:10002530 STRB R2, [R4,#1] .text:10002534 B loc_1000253C .text:10002538 ; --------------------------------------------------------------------------- .text:10002538 .text:10002538 loc_10002538 ; CODE XREF: sub_100020F4+3A8j .text:10002538 ; sub_100020F4+418j ... .text:10002538 LDRB R2, [R4,#1] .text:1000253C .text:1000253C loc_1000253C ; CODE XREF: sub_100020F4+440j .text:1000253C MOV R3, #0 .text:10002540 STR R3, [R4,#0x34] ; [unk_10005118] = 0 .text:10002544 .text:10002544 loc_10002544 ; CODE XREF: sub_100020F4+370j .text:10002544 ; sub_100020F4+378j .text:10002544 LDR R3, [R4,#0x44] .text:10002548 CMP R3, #0 .text:1000254C BNE loc_1000255C .text:10002550 LDR R3, [R4,#0x40] .text:10002554 CMP R3, #0 .text:10002558 BEQ loc_1000256C .text:1000255C .text:1000255C loc_1000255C ; CODE XREF: sub_100020F4+458j .text:1000255C MOV R3, #0 .text:10002560 MOV R1, #0 .text:10002564 STR R3, [R4,#0x44] .text:10002568 STR R1, [R4,#0x40] .text:1000256C .text:1000256C loc_1000256C ; CODE XREF: sub_100020F4+464j .text:1000256C LDR R3, [R4,#0x38] .text:10002570 CMP R3, #0 .text:10002574 MOVNE R3, #0 .text:10002578 STRNE R3, [R4,#0x38] .text:1000257C .text:1000257C loc_1000257C ; CODE XREF: sub_100020F4+2CCj .text:1000257C ; sub_100020F4+2DCj .text:1000257C STRB R2, [R6] .text:10002580 .text:10002580 loc_10002580 ; CODE XREF: sub_100020F4+2E8j .text:10002580 ; sub_100020F4+334j ... .text:10002580 LDR R3, [R4,#0x3C] .text:10002584 CMP R3, #0 .text:10002588 MOVNE R3, #0 .text:1000258C STRNE R3, [R4,#0x3C] .text:10002590 LDR R3, [R4,#0x44] .text:10002594 CMP R3, #0 .text:10002598 MOVNE R3, #0 .text:1000259C STRNE R3, [R4,#0x44] .text:100025A0 LDR R3, [R4,#0x40] .text:100025A4 CMP R3, #0 .text:100025A8 MOVNE R3, #0 .text:100025AC STRNE R3, [R4,#0x40] .text:100025B0 .text:100025B0 loc_100025B0 ; CODE XREF: sub_100020F4+2F4j .text:100025B0 LDR R3, [R4,#0x38] .text:100025B4 CMP R3, #0 .text:100025B8 MOVNE R3, #0 .text:100025BC STRNE R3, [R4,#0x38] .text:100025C0 LDR R3, [R4,#0x34] .text:100025C4 CMP R3, #0 .text:100025C8 MOVNE R3, #0 .text:100025CC STRNE R3, [R4,#0x34] .text:100025D0 LDR R3, [R4,#0x2C] .text:100025D4 CMP R3, #0 .text:100025D8 BEQ loc_100025F0 .text:100025DC BL GetTickCount .text:100025E0 MOV R3, #0 .text:100025E4 LDRB R2, [R4,#1] ; R2 = actual charge .text:100025E8 STR R3, [R4,#0x2C] .text:100025EC STR R0, [R4,#0x24] ; [unk_10005108] = GetTickCount() .text:100025F0 .text:100025F0 loc_100025F0 ; CODE XREF: sub_100020F4+4E4j .text:100025F0 CMP R2, #0x14 ; Compare charge and 20% .text:100025F4 STRB R2, [R5,#2] .text:100025F8 MOVCS R2, #0 ; If charge >= 20%, R2=0 .text:100025FC MOV R8, #1 .text:10002600 STRCSB R2, [R4] .text:10002604 STRCSB R8, [R5,#1] .text:10002608 BCS loc_100026E4 ; If charge >= 20%, jump loc_100026E4 .text:1000260C CMP R2, #4 ; Compare charge and 4% .text:10002610 MOVHI R3, #2 .text:10002614 MOVHI R2, #0 ; If charge > 4%, R2=0 .text:10002618 MOVHI R1, #0 .text:1000261C STRHIB R3, [R5,#1] .text:10002620 STRHIB R2, [R4,#-1] .text:10002624 STRHIB R1, [R4] .text:10002628 BHI loc_100026EC ; If charge > 4%, jump loc_100026EC .text:1000262C CMP R2, #0 .text:10002630 BEQ loc_1000268C ; If charge == 0%, Low power detected, turn on Orange LED ;; Here if (charge == 4%): only left case => turn of Orange LED .text:10002634 LDRB R3, [R4] .text:10002638 LDRB R2, [R4,#-3] .text:1000263C ADD R3, R3, #1 .text:10002640 CMP R2, #0 .text:10002644 LDRNE R2, [R4,#0x18] ; GPIO Base .text:10002648 AND R1, R3, #0xFF .text:1000264C MOVNE R3, #0 .text:10002650 STRNEB R3, [R4,#-3] .text:10002654 LDRNE R3, [R2,#0x124] .text:10002658 STRB R1, [R4] .text:1000265C ORRNE R3, R3, #4 .text:10002660 STRNE R3, [R2,#0x124] ; GPCR3: GPIO98 = 1 (Turn off Orange LED) .text:10002664 CMP R1, #1 .text:10002668 MOVEQ R3, #1 .text:1000266C MOVEQ R2, #1 .text:10002670 STREQ R3, [R6,#4] .text:10002674 STREQB R2, [R4,#-3] .text:10002678 MOV R3, #4 .text:1000267C MOV R2, #0 .text:10002680 STRB R3, [R5,#1] .text:10002684 STRB R2, [R4,#-1] .text:10002688 B loc_100026EC .text:1000268C ; --------------------------------------------------------------------------- .text:1000268C ; Turn on Orange LED, low power detected !!! .text:1000268C loc_1000268C ; CODE XREF: sub_100020F4+53Cj .text:1000268C LDR R0, [R4,#0x18] ; R0 = GPIO Base .text:10002690 LDRB R3, [R4,#-1] .text:10002694 MOV R2, #4 .text:10002698 STRB R2, [R5,#1] .text:1000269C LDR R2, [R0,#0x124] .text:100026A0 ADD R3, R3, #1 .text:100026A4 AND R1, R3, #0xFF .text:100026A8 ORR R3, R2, #4 .text:100026AC MOV R2, #0 .text:100026B0 STRB R2, [R4] .text:100026B4 STR R3, [R0,#0x124] ; GPCR3: GPIO98 = 0 (Turn on Orange LED) .text:100026B8 STRB R1, [R4,#-1] .text:100026BC CMP R1, #2 .text:100026C0 BCC loc_100026EC .text:100026C4 LDR R3, [R4,#0x14] .text:100026C8 MOV R1, #3 .text:100026CC STRB R10, [R3,#0x494] .text:100026D0 STRB R10, [R3,#0x495] .text:100026D4 STRB R10, [R3,#0x496] .text:100026D8 STRB R10, [R3,#0x497] .text:100026DC LDR R0, [R4,#0x50] ; [unk_10005134]: "Event Require System Off (low power)" .text:100026E0 BL EventModify .text:100026E4 .text:100026E4 loc_100026E4 ; CODE XREF: sub_100020F4+514j .text:100026E4 MOV R3, #0 .text:100026E8 STRB R3, [R4,#-1] .text:100026EC .text:100026EC loc_100026EC ; CODE XREF: sub_100020F4+534j .text:100026EC ; sub_100020F4+594j ... .text:100026EC LDR R3, [R4,#0x30] .text:100026F0 CMP R3, #1 .text:100026F4 BNE loc_10002A38 .text:100026F8 MOV R3, #0 .text:100026FC STR R3, [R4,#0x30] .text:10002700 STR R8, [R9] .text:10002704 MOV R0, #1 .text:10002708 LDMFD SP!, {R4-R10,LR} .text:1000270C BX LR .text:10002710 ; --------------------------------------------------------------------------- .text:10002710 ;; ====================================================================== ;; Here if AC plugged or USB cable plugged (run on external power supply) ;; ====================================================================== .text:10002710 loc_10002710 ; CODE XREF: sub_100020F4+1DCj .text:10002710 ; sub_100020F4+1ECj .text:10002710 LDR R3, [R4,#0x30] .text:10002714 MOV R2, #0 .text:10002718 MOV R1, #0 .text:1000271C MOV R0, #0 .text:10002720 MOV R8, #1 .text:10002724 CMP R3, #1 .text:10002728 STRB R8, [R5] .text:1000272C STRB R2, [R4] .text:10002730 STRB R1, [R4,#-1] .text:10002734 STRB R0, [R4,#-2] .text:10002738 BNE loc_10002774 ; Jump BLK AC IN Event .text:1000273C MOV R3, #0 .text:10002740 MOV R2, #0x1E0 .text:10002744 MOV R1, #1 .text:10002748 STR R3, [R4,#0x30] .text:1000274C STR R2, [R6,#8] .text:10002750 STR R1, [R4,#0x44] .text:10002754 BL GetTickCount .text:10002758 MOV R3, #1 .text:1000275C STR R3, [R6,#4] .text:10002760 STR R0, [R4,#8] .text:10002764 .text:10002764 loc_10002764 ; CODE XREF: sub_100020F4+6C8j .text:10002764 STR R8, [R9] .text:10002768 MOV R0, #1 .text:1000276C LDMFD SP!, {R4-R10,LR} .text:10002770 BX LR .text:10002774 ; --------------------------------------------------------------------------- .text:10002774 .text:10002774 loc_10002774 ; CODE XREF: sub_100020F4+644j .text:10002774 LDR R3, [R4,#0x14] .text:10002778 LDRB R3, [R3,#0x30D] .text:1000277C CMP R3, #1 .text:10002780 LDR R3, [R4,#0x14] .text:10002784 BNE loc_100027C0 .text:10002788 MOV R2, #0x3C0 .text:1000278C MOV R1, #1 .text:10002790 STR R2, [R6,#8] .text:10002794 STR R1, [R4,#0x40] .text:10002798 STRB R10, [R3,#0x30D] .text:1000279C BL GetTickCount .text:100027A0 MOV R3, R0 .text:100027A4 LDR R0, [R4,#0x54] ; R0 = [unk_10005138] = Event BLK AC IN .text:100027A8 MOV R2, #1 .text:100027AC MOV R1, #3 .text:100027B0 STR R3, [R4,#8] .text:100027B4 STR R2, [R6,#4] .text:100027B8 BL EventModify ; Event BLK AC IN .text:100027BC B loc_10002764 .text:100027C0 ; --------------------------------------------------------------------------- .text:100027C0 .text:100027C0 loc_100027C0 ; CODE XREF: sub_100020F4+690j .text:100027C0 LDRB R3, [R3,#0x30E] .text:100027C4 CMP R3, #1 .text:100027C8 BNE loc_1000285C .text:100027CC LDR R3, [R4,#0x14] .text:100027D0 LDR R2, [R4,#0x18] ; R2 = GPIO Base .text:100027D4 MOV R1, #1 .text:100027D8 STRB R10, [R3,#0x30E] .text:100027DC LDR R3, [R2,#0x100] .text:100027E0 STR R1, [R4,#0x3C] .text:100027E4 TST R3, #1 .text:100027E8 BEQ loc_1000280C ; If (GPIO96 == 0) .text:100027EC LDR R3, [R4,#0x44] ; R3 = [unk_10005128] .text:100027F0 CMP R3, #0 .text:100027F4 BNE loc_10002850 .text:100027F8 BL GetTickCount .text:100027FC MOV R2, #1 .text:10002800 STR R2, [R4,#0x44] ; [unk_10005128] = 1 .text:10002804 MOV LR, #0x1E0 ; 480 ticks ??? .text:10002808 B loc_10002838 .text:1000280C ; --------------------------------------------------------------------------- .text:1000280C .text:1000280C loc_1000280C ; CODE XREF: sub_100020F4+6F4j .text:1000280C LDR R3, [R4,#0x18] .text:10002810 LDR R3, [R3] ; R3 = GPLR0 .text:10002814 TST R3, #0x200 .text:10002818 BEQ loc_10002850 ; If (GPIO9 == 0) .text:1000281C LDR R3, [R4,#0x40] ; [unk_10005124]: is USB connected .text:10002820 CMP R3, #0 .text:10002824 BNE loc_10002850 ; No notification if USB already plugged in .text:10002828 BL GetTickCount .text:1000282C MOV R2, #1 .text:10002830 STR R2, [R4,#0x40] ; [unk_10005124] = 1 .text:10002834 MOV LR, #0x3C0 ; 960 ticks ??? .text:10002838 ;; Notifiy MPM Power .text:10002838 loc_10002838 ; CODE XREF: sub_100020F4+714j .text:10002838 MOV R3, R0 .text:1000283C LDR R0, [R4,#0x54] .text:10002840 MOV R1, #3 .text:10002844 STR R3, [R4,#8] .text:10002848 STR LR, [R6,#8] .text:1000284C BL EventModify .text:10002850 ;; Here after loc_100027c0 .text:10002850 loc_10002850 ; CODE XREF: sub_100020F4+700j .text:10002850 ; sub_100020F4+724j ... .text:10002850 LDR R0, [R4,#0x5C] ; R0 = [unk_10005140] .text:10002854 MOV R1, #3 .text:10002858 BL EventModify ; Event Notifiy MPM Power .text:1000285C ;; If (Voltage < 3.850V), and if (GPIO80 == 0), turn on RED LED (GPIO10=0) .text:1000285C loc_1000285C ; CODE XREF: sub_100020F4+6D4j .text:1000285C LDR R3, [R4,#0x18] ; R3 = GPIO Base .text:10002860 LDR R3, [R3,#8] .text:10002864 MVN R3, R3 .text:10002868 TST R3, #0x10000 .text:1000286C BEQ loc_100028D4 ; If GPIO80 == 1, loc_100028D4 .text:10002870 BL sub_100013F0 ; Get_Voltage_Mean_Or_Query_Voltage() .text:10002874 MOVL R3, 0xD54 .text:1000287C MOV R7, R0 ; R7 = Voltage .text:10002880 CMP R7, R3 .text:10002884 STR R7, [R4,#0x4C] .text:10002888 MOVCC R7, R3 .text:1000288C STRCC R3, [R4,#0x4C] ; [unk_10005130] = max(3.412, Voltage) .text:10002890 MOVL R3, 0xF48 .text:10002898 CMP R7, R3 .text:1000289C MOVHI R7, R3 .text:100028A0 STRHI R3, [R4,#0x4C] ; [unk_10005130] = min(3.912, Voltage) ; => insure 3.412 < [unk_10005130] < 3.912 .text:100028A4 BL sub_1000145C ; Transform_Voltage2Charge() .text:100028A8 MOVL R3, 0xF0A .text:100028B0 LDR R2, [R4,#0x18] ; R2 = GPIO Base .text:100028B4 CMP R7, R3 ; Voltage and 3.850V .text:100028B8 BHI loc_100029C8 .text:100028BC LDR R3, [R2,#0x24] .text:100028C0 ORR R3, R3, #0x400 .text:100028C4 STR R3, [R2,#0x24] ; GPIO10 = 0 (Red LED) if (Voltage <= 3.850V) and (GPIO80 == 0) .text:100028C8 STRB R10, [R5] .text:100028CC STRB R8, [R5,#1] .text:100028D0 B loc_10002A30 .text:100028D4 ; --------------------------------------------------------------------------- ;; If (GPIO80 == 1), ... => charger is drawing power => Voltage = Mesured Voltage - 0.088V .text:100028D4 .text:100028D4 loc_100028D4 ; CODE XREF: sub_100020F4+778j .text:100028D4 BL sub_100013F0 ; Get_Voltage_Mean_Or_Query_Voltage() .text:100028D8 MOVL R3, 0xD54 .text:100028E0 SUB R7, R0, #0x58 ; R7 = Voltage - 0.088V = loweredVoltage .text:100028E4 CMP R7, R3 .text:100028E8 STR R7, [R4,#0x4C] .text:100028EC MOVCC R7, R3 .text:100028F0 STRCC R3, [R4,#0x4C] ; [unk_10005130] = max(3.412, Voltage) .text:100028F4 MOVL R3, 0xF48 .text:100028FC CMP R7, R3 .text:10002900 MOVHI R7, R3 .text:10002904 STRHI R3, [R4,#0x4C] ; [unk_10005130] = min(3.912, Voltage) ; => insure 3.412 < [unk_10005130] < 3.912 .text:10002908 BL sub_1000145C ; Transform_Voltage2Charge() .text:1000290C LDR R3, [R4,#0x20] ; R3 = [unk_10005104] .text:10002910 CMP R3, #0 .text:10002914 BEQ loc_100029A4 .text:10002918 BL GetTickCount .text:1000291C LDR R3, [R4,#0x24] ; R3 = [unk_10005108] .text:10002920 MOVL R2, 0x2BF20 .text:10002928 SUB R3, R0, R3 ; R3 = GetTickCount() - [unk_10005108] .text:1000292C CMP R3, R2 ; Compare R3 and 180000 (R3 >= 180s) : 180s is for debug configurations .text:10002930 BCS loc_10002964 ; If R3 >= 180s, jump loc_10002964 (potentially turn on Red LED) .text:10002934 LDR R2, [R4,#0x18] ; R2 = GPIO Base .text:10002938 MOV R3, #0x64 .text:1000293C STRB R8, [R5,#1] .text:10002940 STRB R3, [R5,#2] ; [R5+2] = actual battery charge .text:10002944 LDR R3, [R2,#0x18] .text:10002948 MOV R1, #1 .text:1000294C STR R1, [R4,#0x2C] ; [unk_10005110] = 1 = is_charge_finished() .text:10002950 ORR R3, R3, #0x400 .text:10002954 STR R3, [R2,#0x18] ; GPIO10 = 1 (Green LED) .text:10002958 MOV R0, #1 .text:1000295C LDMFD SP!, {R4-R10,LR} .text:10002960 BX LR .text:10002964 ; --------------------------------------------------------------------------- .text:10002964 .text:10002964 loc_10002964 ; CODE XREF: sub_100020F4+83Cj .text:10002964 LDR R3, [R4,#0x2C] ; get [unk_10005110] => is charge finished ? .text:10002968 MOV R2, #0 .text:1000296C STR R2, [R4,#0x20] .text:10002970 CMP R3, #0 .text:10002974 BNE loc_10002A3C ; Charging finished => Get out ! .text:10002978 LDR R2, [R4,#0x18] ; R2 = GPIO Base .text:1000297C LDRB R1, [R4,#1] ; R1 = actual charge .text:10002980 MOV R0, #8 .text:10002984 LDR R3, [R2,#0x24] .text:10002988 ORR R3, R3, #0x400 .text:1000298C STR R3, [R2,#0x24] ; GPCR0: GPIO10 = 0 (Red LED) .text:10002990 STRB R0, [R5,#1] ; [R5+1] = 8 .text:10002994 MOV R0, #1 .text:10002998 STRB R1, [R5,#2] ; [R5+2] = actual charge .text:1000299C LDMFD SP!, {R4-R10,LR} .text:100029A0 BX LR .text:100029A4 ; --------------------------------------------------------------------------- .text:100029A4 .text:100029A4 loc_100029A4 ; CODE XREF: sub_100020F4+820j .text:100029A4 LDR R3, [R4,#0x28] .text:100029A8 CMP R7, #0xEF0 ; Voltage and 3.824V .text:100029AC BCC loc_10002A04 ; If Voltage < 3.824V, turn on Red LED (if charge not finished) .text:100029B0 .text:100029B0 loc_100029B0 ; CODE XREF: sub_100020F4+914j .text:100029B0 LDR R2, [R6,#8] .text:100029B4 ADD R3, R3, #1 .text:100029B8 STR R3, [R4,#0x28] ; [unk_1000510C]++ .text:100029BC CMP R2, R3 .text:100029C0 BHI loc_10002A0C ; if [R6+8] > [unk_1000510C], turn on Red LED (if charge not finished) .text:100029C4 LDR R2, [R4,#0x18] ; R2 = GPIO Base .text:100029C8 ;; Here if Voltage > 3.850V while charging .text:100029C8 loc_100029C8 ; CODE XREF: sub_100020F4+7C4j .text:100029C8 MOV R3, #0x64 .text:100029CC STRB R3, [R5,#2] .text:100029D0 STRB R8, [R5,#1] .text:100029D4 LDR R3, [R2,#0x18] ; R2 = GPIO Base .text:100029D8 MOV R1, #1 .text:100029DC STR R1, [R4,#0x2C] ; [unk_10005110] = 1 = is_charge_finished() .text:100029E0 ORR R3, R3, #0x400 .text:100029E4 STR R3, [R2,#0x18] ; GPIO10 = 1 (Green LED) .text:100029E8 BL GetTickCount .text:100029EC LDR R3, [R6,#8] .text:100029F0 MOV R2, #1 .text:100029F4 STR R0, [R4,#0x24] .text:100029F8 STR R3, [R4,#0x28] .text:100029FC STR R2, [R4,#0x20] .text:10002A00 B loc_10002A38 .text:10002A04 ; --------------------------------------------------------------------------- .text:10002A04 .text:10002A04 loc_10002A04 ; CODE XREF: sub_100020F4+8B8j .text:10002A04 CMP R3, #0 .text:10002A08 BNE loc_100029B0 .text:10002A0C .text:10002A0C loc_10002A0C ; CODE XREF: sub_100020F4+8CCj .text:10002A0C LDR R3, [R4,#0x2C] .text:10002A10 CMP R3, #0 ; is_charge_finished() ? .text:10002A14 BNE loc_10002A38 ; yes => go out ! .text:10002A18 LDR R2, [R4,#0x18] ; R2 = GPIO Base .text:10002A1C MOV R0, #8 .text:10002A20 LDR R3, [R2,#0x24] .text:10002A24 ORR R3, R3, #0x400 .text:10002A28 STR R3, [R2,#0x24] ; GPCR0 : GPIO10 = 0 (Red LED) .text:10002A2C STRB R0, [R5,#1] ; [R5+1] = 8 .text:10002A30 .text:10002A30 loc_10002A30 ; CODE XREF: sub_100020F4+7DCj .text:10002A30 LDRB R1, [R4,#1] ; R1 = actual charge .text:10002A34 STRB R1, [R5,#2] ; [R5+2] = actual charge .text:10002A38 .text:10002A38 loc_10002A38 ; CODE XREF: sub_100020F4+600j .text:10002A38 ; sub_100020F4+90Cj ... .text:10002A38 STR R10, [R9] .text:10002A3C .text:10002A3C loc_10002A3C ; CODE XREF: sub_100020F4+6Cj .text:10002A3C ; sub_100020F4+880j .text:10002A3C MOV R0, #1 .text:10002A40 LDMFD SP!, {R4-R10,LR} .text:10002A44 BX LR .text:10002A48 ; --------------------------------------------------------------------------- .text:10002A48 .text:10002A48 loc_10002A48 ; CODE XREF: sub_100020F4+24j .text:10002A48 ; sub_100020F4+ACj .text:10002A48 MOV R0, #0 .text:10002A4C LDMFD SP!, {R4-R10,LR} .text:10002A50 BX LR .text:10002A50 ; End of function sub_100020F4 .text:10002A50 .text:10002A50 ; --------------------------------------------------------------------------- .text:10002A54 dword_10002A54 DCD 0x10624DD3 ; DATA XREF: sub_100020F4+300r .text:10002A54 ; sub_100020F4+384r .text:10002A58 off_10002A58 DCD unk_100050BC ; DATA XREF: sub_100020F4+44r .text:10002A5C off_10002A5C DCD unk_100050E4 ; DATA XREF: sub_100020F4+Cr .text:10002A60 .text:10002A60 ; =============== S U B R O U T I N E ======================================= .text:10002A60 .text:10002A60 .text:10002A60 sub_10002A60 ; DATA XREF: .text:off_10002E58o .text:10002A60 ; .pdata:10006098o .text:10002A60 .text:10002A60 var_50 = -0x50 .text:10002A60 .text:10002A60 STMFD SP!, {R4-R8,LR} .text:10002A64 SUB SP, SP, #0x38 .text:10002A68 MOV R5, R0 .text:10002A6C LDR R1, [R5,#4] .text:10002A70 MOV R0, #0x41 .text:10002A74 MOV R4, #0 .text:10002A78 BL CeSetThreadPriority .text:10002A7C MOV R1, #0 .text:10002A80 MOV R0, #2 .text:10002A84 BL PowerPolicyNotify .text:10002A88 MOV R6, #0x100 .text:10002A8C LDR R7, =unk_10005220 .text:10002A90 LDR R8, =unk_100051E0 .text:10002A94 ORR R6, R6, #2 .text:10002A98 .text:10002A98 loc_10002A98 ; CODE XREF: sub_10002A60+CCj .text:10002A98 LDR R1, [R5] .text:10002A9C LDR R0, [R8] .text:10002AA0 BL WaitForSingleObject .text:10002AA4 CMP R0, #0 .text:10002AA8 BEQ loc_10002B00 .text:10002AAC CMP R0, R6 .text:10002AB0 MOVNE R4, #1 .text:10002AB4 BNE loc_10002B1C .text:10002AB8 MOV R2, #1 .text:10002ABC MOV R1, #0x38 .text:10002AC0 ADD R0, SP, #0x50+var_50 .text:10002AC4 BL sub_10003598 .text:10002AC8 MOV R2, #0x38 .text:10002ACC ADD R1, R5, #8 .text:10002AD0 ADD R0, SP, #0x50+var_50 .text:10002AD4 BL memcmp .text:10002AD8 CMP R0, #0 .text:10002ADC BEQ loc_10002B1C .text:10002AE0 ADD R0, R5, #8 .text:10002AE4 ADD R1, SP, #0x50+var_50 .text:10002AE8 MOV R2, #0x38 .text:10002AEC BL memcpy .text:10002AF0 MOV R1, #0 .text:10002AF4 MOV R0, #2 .text:10002AF8 BL PowerPolicyNotify .text:10002AFC B loc_10002B1C .text:10002B00 ; --------------------------------------------------------------------------- .text:10002B00 .text:10002B00 loc_10002B00 ; CODE XREF: sub_10002A60+48j .text:10002B00 MOV R1, #0 .text:10002B04 MOV R0, #0 .text:10002B08 BL sub_100034BC .text:10002B0C MOV R1, #0 .text:10002B10 MOV R0, #1 .text:10002B14 BL sub_100034BC .text:10002B18 BL nullsub_3 .text:10002B1C .text:10002B1C loc_10002B1C ; CODE XREF: sub_10002A60+54j .text:10002B1C ; sub_10002A60+7Cj ... .text:10002B1C LDR R3, [R7] .text:10002B20 CMP R3, #0 .text:10002B24 MOVNE R4, #1 .text:10002B28 CMP R4, #0 .text:10002B2C BEQ loc_10002A98 .text:10002B30 MOV R0, #0 .text:10002B34 ADD SP, SP, #0x38 .text:10002B38 LDMFD SP!, {R4-R8,LR} .text:10002B3C BX LR .text:10002B3C ; End of function sub_10002A60 .text:10002B3C .text:10002B3C ; --------------------------------------------------------------------------- .text:10002B40 off_10002B40 DCD unk_100051E0 ; DATA XREF: sub_10002A60+30r .text:10002B44 off_10002B44 DCD unk_10005220 ; DATA XREF: sub_10002A60+2Cr .text:10002B48 ; Exported entry 4. Init .text:10002B48 .text:10002B48 ; =============== S U B R O U T I N E ======================================= .text:10002B48 .text:10002B48 .text:10002B48 EXPORT Init .text:10002B48 Init ; DATA XREF: .pdata:100060A0o .text:10002B48 .text:10002B48 var_3C = -0x3C .text:10002B48 var_38 = -0x38 .text:10002B48 var_34 = -0x34 .text:10002B48 var_30 = -0x30 .text:10002B48 var_2C = -0x2C .text:10002B48 var_28 = -0x28 .text:10002B48 .text:10002B48 STMFD SP!, {R4-R11,LR} .text:10002B4C SUB SP, SP, #0x18 .text:10002B50 MOV R4, R0 .text:10002B54 LDR R5, =unk_100051E0 .text:10002B58 LDR R3, [R5] .text:10002B5C CMP R3, #0 .text:10002B60 BNE loc_10002E3C .text:10002B64 LDR R2, =aSystemBatterya .text:10002B68 MOVL R0, 0x1F0003 .text:10002B70 MOV R1, #0 .text:10002B74 BL OpenEventW .text:10002B78 MOVS R3, R0 .text:10002B7C LDR R6, =unk_10005214 .text:10002B80 LDR R9, =unk_10005218 .text:10002B84 LDR R8, =unk_10005224 .text:10002B88 STR R3, [SP,#0x3C+var_28] .text:10002B8C BEQ loc_10002D9C .text:10002B90 LDR R0, =unk_10005200 .text:10002B94 BL InitializeCriticalSection .text:10002B98 LDR R0, =unk_10005180 .text:10002B9C BL InitializeCriticalSection .text:10002BA0 LDR R3, =unk_100051E4 .text:10002BA4 LDR R11, =unk_1000521C .text:10002BA8 MOV R2, #0 .text:10002BAC MOV R1, #0x38 .text:10002BB0 STR R2, [R3] .text:10002BB4 STR R1, [R11] .text:10002BB8 MOV LR, #0 .text:10002BBC MOV R7, #0 .text:10002BC0 MOV R3, #0 .text:10002BC4 MOV R2, #0 .text:10002BC8 MOV R1, #0 .text:10002BCC MOV R0, #0 .text:10002BD0 STR LR, [R9] .text:10002BD4 STR R7, [R6] .text:10002BD8 BL CreateEventW .text:10002BDC CMP R0, #0 .text:10002BE0 STR R0, [R5] .text:10002BE4 BEQ loc_10002D9C .text:10002BE8 MOV R0, R4 .text:10002BEC BL sub_100012C4 .text:10002BF0 CMP R0, #0 .text:10002BF4 BEQ loc_10002D9C .text:10002BF8 LDR R7, =unk_100051A0 .text:10002BFC MOV R3, #0x1F4 .text:10002C00 MOV R2, #0xF9 .text:10002C04 STR R3, [R7] .text:10002C08 STR R2, [R7,#4] .text:10002C0C MOV R2, #0x38 .text:10002C10 ADD R0, R7, #8 .text:10002C14 MOV R1, #0xFF .text:10002C18 BL memset .text:10002C1C MOV R0, R4 .text:10002C20 BL OpenDeviceKey .text:10002C24 MOVS R10, R0 .text:10002C28 BEQ loc_10002D10 .text:10002C2C LDR R1, =aPollpriority25 .text:10002C30 ADD LR, SP, #0x3C+var_34 .text:10002C34 ADD R4, SP, #0x3C+var_2C .text:10002C38 MOV R8, #4 .text:10002C3C ADD R3, SP, #0x3C+var_30 .text:10002C40 MOV R2, #0 .text:10002C44 MOV R0, R10 .text:10002C48 STR R8, [SP,#0x3C+var_34] .text:10002C4C STR LR, [SP,#0x3C+var_38] .text:10002C50 STR R4, [SP,#0x3C+var_3C] .text:10002C54 BL RegQueryValueExW .text:10002C58 CMP R0, #0 .text:10002C5C LDREQ R3, [SP,#0x3C+var_30] .text:10002C60 LDR R1, =aPollinterval .text:10002C64 LDR R8, =unk_10005224 .text:10002C68 CMPEQ R3, #4 .text:10002C6C LDREQ R3, [SP,#0x3C+var_2C] .text:10002C70 ADD LR, SP, #0x3C+var_34 .text:10002C74 ADD R4, SP, #0x3C+var_2C .text:10002C78 STREQ R3, [R7,#4] .text:10002C7C MOV R5, #4 .text:10002C80 ADD R3, SP, #0x3C+var_30 .text:10002C84 MOV R2, #0 .text:10002C88 MOV R0, R10 .text:10002C8C STR R5, [SP,#0x3C+var_34] .text:10002C90 STR LR, [SP,#0x3C+var_38] .text:10002C94 STR R4, [SP,#0x3C+var_3C] .text:10002C98 BL RegQueryValueExW .text:10002C9C CMP R0, #0 .text:10002CA0 LDREQ R3, [SP,#0x3C+var_30] .text:10002CA4 LDR R1, =aPddbuffersize .text:10002CA8 LDR R5, =unk_100051E0 .text:10002CAC CMPEQ R3, #4 .text:10002CB0 LDREQ R3, [SP,#0x3C+var_2C] .text:10002CB4 ADD LR, SP, #0x3C+var_34 .text:10002CB8 ADD R4, SP, #0x3C+var_2C .text:10002CBC STREQ R3, [R7] .text:10002CC0 MOV R6, #4 .text:10002CC4 ADD R3, SP, #0x3C+var_30 .text:10002CC8 MOV R2, #0 .text:10002CCC MOV R0, R10 .text:10002CD0 STR R6, [SP,#0x3C+var_34] .text:10002CD4 STR LR, [SP,#0x3C+var_38] .text:10002CD8 STR R4, [SP,#0x3C+var_3C] .text:10002CDC BL RegQueryValueExW .text:10002CE0 LDR R6, =unk_10005214 .text:10002CE4 CMP R0, #0 .text:10002CE8 BNE loc_10002D08 .text:10002CEC LDR R3, [SP,#0x3C+var_30] .text:10002CF0 CMP R3, #4 .text:10002CF4 BNE loc_10002D08 .text:10002CF8 LDR R3, [R11] .text:10002CFC LDR R2, [SP,#0x3C+var_2C] .text:10002D00 CMP R2, R3 .text:10002D04 STRHI R2, [R11] .text:10002D08 .text:10002D08 loc_10002D08 ; CODE XREF: Init+1A0j .text:10002D08 ; Init+1ACj .text:10002D08 MOV R0, R10 .text:10002D0C BL RegCloseKey .text:10002D10 .text:10002D10 loc_10002D10 ; CODE XREF: Init+E0j .text:10002D10 LDR R1, [R11] .text:10002D14 MOV R0, #0x40 .text:10002D18 BL LocalAlloc .text:10002D1C CMP R0, #0 .text:10002D20 STR R0, [R9] .text:10002D24 BEQ loc_10002DB4 .text:10002D28 LDR R1, [R11] .text:10002D2C MOV R0, #0x40 .text:10002D30 BL LocalAlloc .text:10002D34 CMP R0, #0 .text:10002D38 STR R0, [R6] .text:10002D3C BEQ loc_10002D9C .text:10002D40 MOV R2, #1 .text:10002D44 MOV R1, #0x38 .text:10002D48 ADD R0, R7, #8 .text:10002D4C BL sub_10003598 .text:10002D50 LDR R2, =sub_10002A60 .text:10002D54 MOV LR, #0 .text:10002D58 MOV R3, R7 .text:10002D5C MOV R1, #0 .text:10002D60 MOV R0, #0 .text:10002D64 STR LR, [SP,#0x3C+var_38] .text:10002D68 STR LR, [SP,#0x3C+var_3C] .text:10002D6C BL CreateThread .text:10002D70 CMP R0, #0 .text:10002D74 STR R0, [R8] .text:10002D78 BEQ loc_10002D9C .text:10002D7C LDR R4, [SP,#0x3C+var_28] .text:10002D80 MOV R1, #3 .text:10002D84 MOV R0, R4 .text:10002D88 BL EventModify .text:10002D8C MOV R0, R4 .text:10002D90 BL CloseHandle .text:10002D94 MOV R0, #1 .text:10002D98 B loc_10002E40 .text:10002D9C ; --------------------------------------------------------------------------- .text:10002D9C .text:10002D9C loc_10002D9C ; CODE XREF: Init+44j .text:10002D9C ; Init+9Cj ... .text:10002D9C LDR R0, [R9] .text:10002DA0 CMP R0, #0 .text:10002DA4 BEQ loc_10002DB4 .text:10002DA8 BL LocalFree .text:10002DAC MOV R3, #0 .text:10002DB0 STR R3, [R9] .text:10002DB4 .text:10002DB4 loc_10002DB4 ; CODE XREF: Init+1DCj .text:10002DB4 ; Init+25Cj .text:10002DB4 LDR R3, [R6] .text:10002DB8 CMP R3, #0 .text:10002DBC BEQ loc_10002DD0 .text:10002DC0 MOV R0, R3 .text:10002DC4 BL LocalFree .text:10002DC8 MOV R3, #0 .text:10002DCC STR R3, [R6] .text:10002DD0 .text:10002DD0 loc_10002DD0 ; CODE XREF: Init+274j .text:10002DD0 LDR R3, [R8] .text:10002DD4 CMP R3, #0 .text:10002DD8 BEQ loc_10002E10 .text:10002DDC LDR R3, =unk_10005220 .text:10002DE0 LDR R0, [R5] .text:10002DE4 MOV R2, #1 .text:10002DE8 MOV R1, #3 .text:10002DEC STR R2, [R3] .text:10002DF0 BL EventModify .text:10002DF4 LDR R0, [R8] .text:10002DF8 MOVL R1, 0xFFFFFFFF .text:10002DFC BL WaitForSingleObject .text:10002E00 LDR R0, [R8] .text:10002E04 BL CloseHandle .text:10002E08 MOV R3, #0 .text:10002E0C STR R3, [R8] .text:10002E10 .text:10002E10 loc_10002E10 ; CODE XREF: Init+290j .text:10002E10 LDR R3, [R5] .text:10002E14 CMP R3, #0 .text:10002E18 BEQ loc_10002E2C .text:10002E1C MOV R0, R3 .text:10002E20 BL CloseHandle .text:10002E24 MOV R3, #0 .text:10002E28 STR R3, [R5] .text:10002E2C .text:10002E2C loc_10002E2C ; CODE XREF: Init+2D0j .text:10002E2C LDR R0, =unk_10005200 .text:10002E30 BL DeleteCriticalSection .text:10002E34 LDR R0, =unk_10005180 .text:10002E38 BL DeleteCriticalSection .text:10002E3C .text:10002E3C loc_10002E3C ; CODE XREF: Init+18j .text:10002E3C MOV R0, #0 .text:10002E40 .text:10002E40 loc_10002E40 ; CODE XREF: Init+250j .text:10002E40 ADD SP, SP, #0x18 .text:10002E44 LDMFD SP!, {R4-R11,LR} .text:10002E48 BX LR .text:10002E48 ; End of function Init .text:10002E48 .text:10002E48 ; --------------------------------------------------------------------------- .text:10002E4C off_10002E4C DCD unk_10005180 ; DATA XREF: Init+50r .text:10002E4C ; Init+2ECr .text:10002E50 off_10002E50 DCD unk_10005200 ; DATA XREF: Init+48r .text:10002E50 ; Init:loc_10002E2Cr .text:10002E54 off_10002E54 DCD unk_10005220 ; DATA XREF: Init+294r .text:10002E58 off_10002E58 DCD sub_10002A60 ; DATA XREF: Init+208r .text:10002E5C off_10002E5C DCD unk_10005214 ; DATA XREF: Init+34r .text:10002E5C ; Init+198r .text:10002E60 off_10002E60 DCD unk_100051E0 ; DATA XREF: Init+Cr .text:10002E60 ; Init+160r .text:10002E64 off_10002E64 DCD aPddbuffersize ; DATA XREF: Init+15Cr .text:10002E64 ; "PddBufferSize" .text:10002E68 off_10002E68 DCD unk_10005224 ; DATA XREF: Init+3Cr .text:10002E68 ; Init+11Cr .text:10002E6C off_10002E6C DCD aPollinterval ; DATA XREF: Init+118r .text:10002E6C ; "PollInterval" .text:10002E70 off_10002E70 DCD aPollpriority25 ; DATA XREF: Init+E4r .text:10002E70 ; "PollPriority256" .text:10002E74 off_10002E74 DCD unk_100051A0 ; DATA XREF: Init+B0r .text:10002E78 off_10002E78 DCD unk_1000521C ; DATA XREF: Init+5Cr .text:10002E7C off_10002E7C DCD unk_100051E4 ; DATA XREF: Init+58r .text:10002E80 off_10002E80 DCD unk_10005218 ; DATA XREF: Init+38r .text:10002E84 off_10002E84 DCD aSystemBatterya ; DATA XREF: Init+1Cr .text:10002E84 ; "SYSTEM/BatteryAPIsReady" .text:10002E88 ; Exported entry 2. Deinit .text:10002E88 .text:10002E88 ; =============== S U B R O U T I N E ======================================= .text:10002E88 .text:10002E88 .text:10002E88 EXPORT Deinit .text:10002E88 Deinit ; DATA XREF: .pdata:100060A8o .text:10002E88 STMFD SP!, {R4,R5,LR} .text:10002E8C BL nullsub_1 .text:10002E90 LDR R5, =unk_10005224 .text:10002E94 LDR R4, =unk_100051E0 .text:10002E98 LDR R3, [R5] .text:10002E9C CMP R3, #0 .text:10002EA0 BEQ loc_10002ED8 .text:10002EA4 LDR R3, =unk_10005220 .text:10002EA8 LDR R0, [R4] .text:10002EAC MOV R2, #1 .text:10002EB0 MOV R1, #3 .text:10002EB4 STR R2, [R3] .text:10002EB8 BL EventModify .text:10002EBC LDR R0, [R5] .text:10002EC0 MOVL R1, 0xFFFFFFFF .text:10002EC4 BL WaitForSingleObject .text:10002EC8 LDR R0, [R5] .text:10002ECC BL CloseHandle .text:10002ED0 MOV R3, #0 .text:10002ED4 STR R3, [R5] .text:10002ED8 .text:10002ED8 loc_10002ED8 ; CODE XREF: Deinit+18j .text:10002ED8 LDR R0, [R4] .text:10002EDC CMP R0, #0 .text:10002EE0 BEQ loc_10002EF0 .text:10002EE4 BL CloseHandle .text:10002EE8 MOV R3, #0 .text:10002EEC STR R3, [R4] .text:10002EF0 .text:10002EF0 loc_10002EF0 ; CODE XREF: Deinit+58j .text:10002EF0 LDR R4, =unk_10005218 .text:10002EF4 LDR R0, [R4] .text:10002EF8 CMP R0, #0 .text:10002EFC BEQ loc_10002F0C .text:10002F00 BL LocalFree .text:10002F04 MOV R3, #0 .text:10002F08 STR R3, [R4] .text:10002F0C .text:10002F0C loc_10002F0C ; CODE XREF: Deinit+74j .text:10002F0C LDR R4, =unk_10005214 .text:10002F10 LDR R0, [R4] .text:10002F14 CMP R0, #0 .text:10002F18 BEQ loc_10002F28 .text:10002F1C BL LocalFree .text:10002F20 MOV R3, #0 .text:10002F24 STR R3, [R4] .text:10002F28 .text:10002F28 loc_10002F28 ; CODE XREF: Deinit+90j .text:10002F28 LDR R0, =unk_10005200 .text:10002F2C BL DeleteCriticalSection .text:10002F30 LDR R0, =unk_10005180 .text:10002F34 BL DeleteCriticalSection .text:10002F38 MOV R0, #1 .text:10002F3C LDMFD SP!, {R4,R5,LR} .text:10002F40 BX LR .text:10002F40 ; End of function Deinit .text:10002F40 .text:10002F40 ; --------------------------------------------------------------------------- .text:10002F44 off_10002F44 DCD unk_10005180 ; DATA XREF: Deinit+A8r .text:10002F48 off_10002F48 DCD unk_10005200 ; DATA XREF: Deinit:loc_10002F28r .text:10002F4C off_10002F4C DCD unk_10005214 ; DATA XREF: Deinit:loc_10002F0Cr .text:10002F50 off_10002F50 DCD unk_10005218 ; DATA XREF: Deinit:loc_10002EF0r .text:10002F54 off_10002F54 DCD unk_10005220 ; DATA XREF: Deinit+1Cr .text:10002F58 off_10002F58 DCD unk_100051E0 ; DATA XREF: Deinit+Cr .text:10002F5C off_10002F5C DCD unk_10005224 ; DATA XREF: Deinit+8r .text:10002F60 DCD loc_10003B08 .text:10002F64 DCD dword_10003DA0 .text:10002F68 ; Exported entry 3. IOControl .text:10002F68 .text:10002F68 ; =============== S U B R O U T I N E ======================================= .text:10002F68 .text:10002F68 ; Attributes: bp-based frame .text:10002F68 .text:10002F68 EXPORT IOControl .text:10002F68 IOControl ; DATA XREF: .pdata:100060B0o .text:10002F68 .text:10002F68 var_6C = -0x6C .text:10002F68 var_68 = -0x68 .text:10002F68 var_64 = -0x64 .text:10002F68 var_60 = -0x60 .text:10002F68 var_5C = -0x5C .text:10002F68 var_58 = -0x58 .text:10002F68 var_54 = -0x54 .text:10002F68 var_50 = -0x50 .text:10002F68 var_4C = -0x4C .text:10002F68 var_48 = -0x48 .text:10002F68 var_44 = -0x44 .text:10002F68 var_40 = -0x40 .text:10002F68 var_38 = -0x38 .text:10002F68 var_34 = -0x34 .text:10002F68 var_30 = -0x30 .text:10002F68 oldR4 = -0x20 .text:10002F68 oldR5 = -0x1C .text:10002F68 oldR6 = -0x18 .text:10002F68 oldR7 = -0x14 .text:10002F68 oldR8 = -0x10 .text:10002F68 oldR11 = -0xC .text:10002F68 oldSP = -8 .text:10002F68 oldLR = -4 .text:10002F68 arg_0 = 0 .text:10002F68 arg_4 = 4 .text:10002F68 arg_8 = 8 .text:10002F68 .text:10002F68 MOV R12, SP .text:10002F6C STMFD SP!, {R4-R8,R11,R12,LR} .text:10002F70 ADD R11, SP, #0x20 .text:10002F74 SUB SP, SP, #0x4C .text:10002F78 MOV R7, R3 .text:10002F7C MOV R5, R2 .text:10002F80 MOV R6, R1 .text:10002F84 MOV R8, R0 .text:10002F88 MOVL LR, 0x290400 .text:10002F90 MOV R4, #0x57 .text:10002F94 STR R4, [R11,#var_60] .text:10002F98 CMP R6, LR .text:10002F9C BNE loc_1000305C .text:10002FA0 LDR R0, [R11,#arg_0] .text:10002FA4 CMP R0, #0 .text:10002FA8 BEQ loc_1000339C .text:10002FAC LDR R1, [R11,#arg_4] .text:10002FB0 CMP R1, #0x18 .text:10002FB4 BNE loc_1000339C .text:10002FB8 CMP R5, #0 .text:10002FBC BEQ loc_1000339C .text:10002FC0 CMP R7, #4 .text:10002FC4 BNE loc_1000339C .text:10002FC8 LDR R6, [R11,#arg_8] .text:10002FCC CMP R6, #0 .text:10002FD0 BEQ loc_1000339C .text:10002FD4 MOV R3, #0 .text:10002FD8 STR R3, [R11,#var_5C] .text:10002FDC .text:10002FDC loc_10002FDC ; DATA XREF: .text:10003E34o .text:10002FDC LDR R1, [R5] .text:10002FE0 STR R1, [R11,#var_48] .text:10002FE4 MOV R3, #1 .text:10002FE8 STR R3, [R11,#var_5C] .text:10002FEC .text:10002FEC loc_10002FEC ; DATA XREF: .text:10003E38o .text:10002FEC B loc_10003004 .text:10002FF0 ; --------------------------------------------------------------------------- .text:10002FF0 .text:10002FF0 loc_10002FF0 ; DATA XREF: .text:10003E40o .text:10002FF0 LDR R6, [R11,#arg_8] .text:10002FF4 LDR R0, [R11,#arg_0] .text:10002FF8 LDR R4, [R11,#var_60] .text:10002FFC LDR R3, [R11,#var_5C] .text:10003000 LDR R1, [R11,#var_48] .text:10003004 .text:10003004 loc_10003004 ; CODE XREF: IOControl:loc_10002FECj .text:10003004 CMP R3, #0 .text:10003008 BEQ loc_1000339C .text:1000300C .text:1000300C loc_1000300C ; DATA XREF: .text:10003E24o .text:1000300C BL sub_100037C8 .text:10003010 STR R0, [R11,#var_5C] .text:10003014 .text:10003014 loc_10003014 ; DATA XREF: .text:10003E28o .text:10003014 B loc_10003028 .text:10003018 ; --------------------------------------------------------------------------- .text:10003018 .text:10003018 loc_10003018 ; DATA XREF: .text:10003E30o .text:10003018 MOV R3, #0x1F .text:1000301C STR R3, [R11,#var_60] .text:10003020 LDR R6, [R11,#arg_8] .text:10003024 LDR R0, [R11,#var_5C] .text:10003028 .text:10003028 loc_10003028 ; CODE XREF: IOControl:loc_10003014j .text:10003028 ; DATA XREF: .text:10003E14o .text:10003028 CMP R0, #0 .text:1000302C MOVNE R3, #0x18 .text:10003030 STRNE R3, [R6] .text:10003034 MOVNE R4, #0 .text:10003038 BNE loc_1000304C .text:1000303C MOV R3, #0 .text:10003040 STR R3, [R6] .text:10003044 BL GetLastError .text:10003048 MOV R4, R0 .text:1000304C .text:1000304C loc_1000304C ; CODE XREF: IOControl+D0j .text:1000304C STR R4, [R11,#var_60] .text:10003050 .text:10003050 loc_10003050 ; DATA XREF: .text:10003E18o .text:10003050 B loc_1000339C .text:10003054 ; --------------------------------------------------------------------------- .text:10003054 .text:10003054 loc_10003054 ; DATA XREF: .text:10003E20o .text:10003054 LDR R4, [R11,#var_60] .text:10003058 B loc_1000339C .text:1000305C ; --------------------------------------------------------------------------- .text:1000305C .text:1000305C loc_1000305C ; CODE XREF: IOControl+34j .text:1000305C LDR R3, =0x290404 .text:10003060 CMP R6, R3 .text:10003064 BEQ loc_100032E0 .text:10003068 LDR R3, =0x290408 .text:1000306C CMP R6, R3 .text:10003070 BEQ loc_10003230 .text:10003074 LDR R3, =0x29040C .text:10003078 CMP R6, R3 .text:1000307C BEQ loc_100031D4 .text:10003080 MOVL R3, 0x290410 .text:10003088 CMP R6, R3 .text:1000308C BEQ loc_10003178 .text:10003090 LDR R3, =0x290414 .text:10003094 CMP R6, R3 .text:10003098 BEQ loc_100030F0 .text:1000309C LDR R0, =unk_100051E4 .text:100030A0 LDR R3, [R0] .text:100030A4 CMP R3, #0 .text:100030A8 BEQ loc_100030E8 .text:100030AC LDR R3, [R11,#arg_8] .text:100030B0 LDR R2, [R11,#arg_4] .text:100030B4 LDR R1, [R11,#arg_0] .text:100030B8 LDR R4, [R0] .text:100030BC STR R3, [SP,#0x6C+var_64] .text:100030C0 STR R2, [SP,#0x6C+var_68] .text:100030C4 STR R1, [SP,#0x6C+var_6C] .text:100030C8 MOV R3, R7 .text:100030CC MOV R2, R5 .text:100030D0 MOV R1, R6 .text:100030D4 MOV R0, R8 .text:100030D8 MOV LR, PC .text:100030DC BX R4 .text:100030E0 .text:100030E0 loc_100030E0 ; CODE XREF: IOControl+20Cj .text:100030E0 MOV R4, R0 .text:100030E4 B loc_1000339C .text:100030E8 ; --------------------------------------------------------------------------- .text:100030E8 .text:100030E8 loc_100030E8 ; CODE XREF: IOControl+140j .text:100030E8 MOV R4, #0x32 .text:100030EC B loc_1000339C .text:100030F0 ; --------------------------------------------------------------------------- .text:100030F0 .text:100030F0 loc_100030F0 ; CODE XREF: IOControl+130j .text:100030F0 CMP R5, #0 .text:100030F4 BEQ loc_1000339C .text:100030F8 CMP R7, #8 .text:100030FC BNE loc_1000339C .text:10003100 LDR R1, [R11,#arg_0] .text:10003104 CMP R1, #0 .text:10003108 BEQ loc_1000339C .text:1000310C LDR R3, [R11,#arg_4] .text:10003110 CMP R3, #4 .text:10003114 BNE loc_1000339C .text:10003118 .text:10003118 loc_10003118 ; DATA XREF: .text:10003E04o .text:10003118 LDR R3, [R5] .text:1000311C LDR R2, [R5,#4] .text:10003120 LDR R5, [R1] .text:10003124 STR R5, [R11,#var_44] .text:10003128 MOV R4, #0 .text:1000312C STR R3, [R11,#var_38] .text:10003130 STR R2, [R11,#var_34] .text:10003134 STR R4, [R11,#var_60] .text:10003138 .text:10003138 loc_10003138 ; DATA XREF: .text:10003E08o .text:10003138 B loc_10003144 .text:1000313C ; --------------------------------------------------------------------------- .text:1000313C .text:1000313C loc_1000313C ; DATA XREF: .text:10003E10o .text:1000313C LDR R4, [R11,#var_60] .text:10003140 LDR R5, [R11,#var_44] .text:10003144 .text:10003144 loc_10003144 ; CODE XREF: IOControl:loc_10003138j .text:10003144 CMP R4, #0 .text:10003148 BNE loc_1000339C .text:1000314C MOV R0, #0 .text:10003150 BL SetLastError .text:10003154 LDR R0, =unk_10005200 .text:10003158 BL EnterCriticalSection .text:1000315C SUB R1, R11, #0x38 .text:10003160 MOV R0, R5 .text:10003164 BL sub_100038B0 .text:10003168 LDR R0, =unk_10005200 .text:1000316C BL LeaveCriticalSection .text:10003170 BL GetLastError .text:10003174 B loc_100030E0 .text:10003178 ; --------------------------------------------------------------------------- .text:10003178 .text:10003178 loc_10003178 ; CODE XREF: IOControl+124j .text:10003178 LDR R5, [R11,#arg_0] .text:1000317C CMP R5, #0 .text:10003180 BEQ loc_1000339C .text:10003184 LDR R3, [R11,#arg_4] .text:10003188 CMP R3, #4 .text:1000318C BNE loc_1000339C .text:10003190 LDR R6, [R11,#arg_8] .text:10003194 CMP R6, #0 .text:10003198 BEQ loc_1000339C .text:1000319C LDR R0, =unk_10005200 .text:100031A0 BL EnterCriticalSection .text:100031A4 BL sub_100012F8 .text:100031A8 MOV R4, R0 .text:100031AC LDR R0, =unk_10005200 .text:100031B0 BL LeaveCriticalSection .text:100031B4 .text:100031B4 loc_100031B4 ; DATA XREF: .text:10003DF4o .text:100031B4 MOV R3, #4 .text:100031B8 STR R4, [R5] .text:100031BC STR R3, [R6] .text:100031C0 MOV R4, #0 .text:100031C4 STR R4, [R11,#var_60] .text:100031C8 .text:100031C8 loc_100031C8 ; DATA XREF: .text:10003DF8o .text:100031C8 B loc_1000339C .text:100031CC ; --------------------------------------------------------------------------- .text:100031CC .text:100031CC loc_100031CC ; DATA XREF: .text:10003E00o .text:100031CC MOV R4, #0x57 .text:100031D0 B loc_1000339C .text:100031D4 ; --------------------------------------------------------------------------- .text:100031D4 .text:100031D4 loc_100031D4 ; CODE XREF: IOControl+114j .text:100031D4 LDR R5, [R11,#arg_0] .text:100031D8 CMP R5, #0 .text:100031DC BEQ loc_1000339C .text:100031E0 LDR R3, [R11,#arg_4] .text:100031E4 CMP R3, #4 .text:100031E8 BNE loc_1000339C .text:100031EC LDR R6, [R11,#arg_8] .text:100031F0 CMP R6, #0 .text:100031F4 BEQ loc_1000339C .text:100031F8 LDR R0, =unk_10005200 .text:100031FC BL EnterCriticalSection .text:10003200 BL sub_100012E8 .text:10003204 MOV R4, R0 .text:10003208 LDR R0, =unk_10005200 .text:1000320C BL LeaveCriticalSection .text:10003210 .text:10003210 loc_10003210 ; DATA XREF: .text:10003DE4o .text:10003210 MOV R3, #4 .text:10003214 STR R4, [R5] .text:10003218 STR R3, [R6] .text:1000321C MOV R4, #0 .text:10003220 STR R4, [R11,#var_60] .text:10003224 .text:10003224 loc_10003224 ; DATA XREF: .text:10003DE8o .text:10003224 B loc_1000339C .text:10003228 ; --------------------------------------------------------------------------- .text:10003228 .text:10003228 loc_10003228 ; DATA XREF: .text:10003DF0o .text:10003228 MOV R4, #0x57 .text:1000322C B loc_1000339C .text:10003230 ; --------------------------------------------------------------------------- .text:10003230 .text:10003230 loc_10003230 ; CODE XREF: IOControl+108j .text:10003230 LDR R5, [R11,#arg_0] .text:10003234 CMP R5, #0 .text:10003238 BEQ loc_1000339C .text:1000323C LDR R3, [R11,#arg_4] .text:10003240 CMP R3, #0x18 .text:10003244 BNE loc_1000339C .text:10003248 MOV R3, #0 .text:1000324C STRH R3, [R11,#var_30] .text:10003250 MOV R2, #0xE .text:10003254 MOV R1, #0 .text:10003258 SUB R0, R11, #0x2E .text:1000325C BL memset .text:10003260 MOV R3, #0 .text:10003264 MOV R2, #0 .text:10003268 STR R3, [R11,#var_58] .text:1000326C STR R2, [R11,#var_54] .text:10003270 MOV R0, #0 .text:10003274 BL SetLastError .text:10003278 LDR R0, =unk_10005200 .text:1000327C BL EnterCriticalSection .text:10003280 SUB R2, R11, #0x54 .text:10003284 SUB R1, R11, #0x58 .text:10003288 SUB R0, R11, #0x30 .text:1000328C BL sub_10003804 .text:10003290 LDR R0, =unk_10005200 .text:10003294 BL LeaveCriticalSection .text:10003298 .text:10003298 loc_10003298 ; DATA XREF: .text:10003DD4o .text:10003298 SUB R1, R11, #0x30 .text:1000329C MOV R2, #0x10 .text:100032A0 MOV R0, R5 .text:100032A4 BL memcpy .text:100032A8 LDR R3, [R11,#var_58] .text:100032AC LDR R2, [R11,#arg_8] .text:100032B0 STR R3, [R5,#0x10] .text:100032B4 LDR R3, [R11,#var_54] .text:100032B8 CMP R2, #0 .text:100032BC STR R3, [R5,#0x14] .text:100032C0 MOVNE R3, #4 .text:100032C4 STRNE R3, [R2] .text:100032C8 BL GetLastError .text:100032CC MOV R4, R0 .text:100032D0 STR R4, [R11,#var_60] .text:100032D4 .text:100032D4 loc_100032D4 ; DATA XREF: .text:10003DD8o .text:100032D4 B loc_1000339C .text:100032D8 ; --------------------------------------------------------------------------- .text:100032D8 .text:100032D8 loc_100032D8 ; DATA XREF: .text:10003DE0o .text:100032D8 MOV R4, #0x57 .text:100032DC B loc_1000339C .text:100032E0 ; --------------------------------------------------------------------------- .text:100032E0 .text:100032E0 loc_100032E0 ; CODE XREF: IOControl+FCj .text:100032E0 LDR R0, [R11,#arg_0] .text:100032E4 CMP R0, #0 .text:100032E8 BEQ loc_1000339C .text:100032EC LDR R1, [R11,#arg_4] .text:100032F0 CMP R1, #0x38 .text:100032F4 BCC loc_1000339C .text:100032F8 CMP R5, #0 .text:100032FC BEQ loc_1000339C .text:10003300 CMP R7, #4 .text:10003304 BNE loc_1000339C .text:10003308 LDR R6, [R11,#arg_8] .text:1000330C CMP R6, #0 .text:10003310 BEQ loc_1000339C .text:10003314 MOV R3, #0 .text:10003318 STR R3, [R11,#var_50] .text:1000331C .text:1000331C loc_1000331C ; DATA XREF: .text:10003DC4o .text:1000331C LDR R2, [R5] .text:10003320 STR R2, [R11,#var_40] .text:10003324 MOV R3, #1 .text:10003328 STR R3, [R11,#var_50] .text:1000332C .text:1000332C loc_1000332C ; DATA XREF: .text:10003DC8o .text:1000332C B loc_10003348 .text:10003330 ; --------------------------------------------------------------------------- .text:10003330 .text:10003330 loc_10003330 ; DATA XREF: .text:10003DD0o .text:10003330 LDR R6, [R11,#arg_8] .text:10003334 LDR R1, [R11,#arg_4] .text:10003338 LDR R0, [R11,#arg_0] .text:1000333C LDR R4, [R11,#var_60] .text:10003340 LDR R3, [R11,#var_50] .text:10003344 LDR R2, [R11,#var_40] .text:10003348 .text:10003348 loc_10003348 ; CODE XREF: IOControl:loc_1000332Cj .text:10003348 CMP R3, #0 .text:1000334C BEQ loc_1000339C .text:10003350 MOV R3, #0 .text:10003354 STR R3, [R11,#var_4C] .text:10003358 .text:10003358 loc_10003358 ; DATA XREF: .text:10003DB4o .text:10003358 BL sub_10003598 .text:1000335C STR R0, [R11,#var_4C] .text:10003360 .text:10003360 loc_10003360 ; DATA XREF: .text:10003DB8o .text:10003360 B loc_10003374 .text:10003364 ; --------------------------------------------------------------------------- .text:10003364 .text:10003364 loc_10003364 ; DATA XREF: .text:10003DC0o .text:10003364 MOV R3, #0x1F .text:10003368 STR R3, [R11,#var_60] .text:1000336C LDR R6, [R11,#arg_8] .text:10003370 LDR R0, [R11,#var_4C] .text:10003374 .text:10003374 loc_10003374 ; CODE XREF: IOControl:loc_10003360j .text:10003374 ; DATA XREF: .text:10003DA4o .text:10003374 STR R0, [R6] .text:10003378 CMP R0, #0 .text:1000337C BNE loc_1000338C .text:10003380 BL GetLastError .text:10003384 MOV R4, R0 .text:10003388 B loc_10003390 .text:1000338C ; --------------------------------------------------------------------------- .text:1000338C .text:1000338C loc_1000338C ; CODE XREF: IOControl+414j .text:1000338C MOV R4, #0 .text:10003390 .text:10003390 loc_10003390 ; CODE XREF: IOControl+420j .text:10003390 STR R4, [R11,#var_60] .text:10003394 .text:10003394 loc_10003394 ; DATA XREF: .text:10003DA8o .text:10003394 B loc_1000339C .text:10003398 ; --------------------------------------------------------------------------- .text:10003398 .text:10003398 loc_10003398 ; DATA XREF: .text:10003DB0o .text:10003398 LDR R4, [R11,#var_60] .text:1000339C .text:1000339C loc_1000339C ; CODE XREF: IOControl+40j .text:1000339C ; IOControl+4Cj ... .text:1000339C MOV R0, R4 .text:100033A0 BL SetLastError .text:100033A4 CMP R4, #0 .text:100033A8 MOVNE R0, #0 .text:100033AC BNE loc_100033B4 .text:100033B0 MOV R0, #1 .text:100033B4 .text:100033B4 loc_100033B4 ; CODE XREF: IOControl+444j .text:100033B4 LDMDB R11, {R4-R8,R11,SP,LR} .text:100033B8 BX LR .text:100033B8 ; End of function IOControl .text:100033B8 .text:100033BC .text:100033BC ; =============== S U B R O U T I N E ======================================= .text:100033BC .text:100033BC .text:100033BC sub_100033BC ; DATA XREF: .text:10003DACo .text:100033BC ; .pdata:100060B8o .text:100033BC MOV R0, #1 .text:100033C0 RET .text:100033C0 ; End of function sub_100033BC .text:100033C0 .text:100033C4 .text:100033C4 ; =============== S U B R O U T I N E ======================================= .text:100033C4 .text:100033C4 .text:100033C4 sub_100033C4 ; DATA XREF: .text:10003DBCo .text:100033C4 ; .pdata:100060C0o .text:100033C4 MOV R0, #1 .text:100033C8 RET .text:100033C8 ; End of function sub_100033C4 .text:100033C8 .text:100033CC .text:100033CC ; =============== S U B R O U T I N E ======================================= .text:100033CC .text:100033CC .text:100033CC sub_100033CC ; DATA XREF: .text:10003DCCo .text:100033CC ; .pdata:100060C8o .text:100033CC MOV R0, #1 .text:100033D0 RET .text:100033D0 ; End of function sub_100033CC .text:100033D0 .text:100033D4 .text:100033D4 ; =============== S U B R O U T I N E ======================================= .text:100033D4 .text:100033D4 .text:100033D4 sub_100033D4 ; DATA XREF: .text:10003DDCo .text:100033D4 ; .pdata:100060D0o .text:100033D4 MOV R0, #1 .text:100033D8 RET .text:100033D8 ; End of function sub_100033D4 .text:100033D8 .text:100033DC .text:100033DC ; =============== S U B R O U T I N E ======================================= .text:100033DC .text:100033DC .text:100033DC sub_100033DC ; DATA XREF: .text:10003DECo .text:100033DC ; .pdata:100060D8o .text:100033DC MOV R0, #1 .text:100033E0 RET .text:100033E0 ; End of function sub_100033DC .text:100033E0 .text:100033E4 .text:100033E4 ; =============== S U B R O U T I N E ======================================= .text:100033E4 .text:100033E4 .text:100033E4 sub_100033E4 ; DATA XREF: .text:10003DFCo .text:100033E4 ; .pdata:100060E0o .text:100033E4 MOV R0, #1 .text:100033E8 RET .text:100033E8 ; End of function sub_100033E4 .text:100033E8 .text:100033EC .text:100033EC ; =============== S U B R O U T I N E ======================================= .text:100033EC .text:100033EC .text:100033EC sub_100033EC ; DATA XREF: .text:10003E0Co .text:100033EC ; .pdata:100060E8o .text:100033EC MOV R0, #1 .text:100033F0 RET .text:100033F0 ; End of function sub_100033EC .text:100033F0 .text:100033F4 .text:100033F4 ; =============== S U B R O U T I N E ======================================= .text:100033F4 .text:100033F4 .text:100033F4 sub_100033F4 ; DATA XREF: .text:10003E1Co .text:100033F4 ; .pdata:100060F0o .text:100033F4 MOV R0, #1 .text:100033F8 RET .text:100033F8 ; End of function sub_100033F4 .text:100033F8 .text:100033FC .text:100033FC ; =============== S U B R O U T I N E ======================================= .text:100033FC .text:100033FC .text:100033FC sub_100033FC ; DATA XREF: .text:10003E2Co .text:100033FC ; .pdata:100060F8o .text:100033FC MOV R0, #1 .text:10003400 RET .text:10003400 ; End of function sub_100033FC .text:10003400 .text:10003404 .text:10003404 ; =============== S U B R O U T I N E ======================================= .text:10003404 .text:10003404 .text:10003404 sub_10003404 ; DATA XREF: .text:10003E3Co .text:10003404 ; .pdata:10006100o .text:10003404 MOV R0, #1 .text:10003408 RET .text:10003408 ; End of function sub_10003404 .text:10003408 .text:10003408 ; --------------------------------------------------------------------------- .text:1000340C off_1000340C DCD unk_10005200 ; DATA XREF: IOControl+1ECr .text:1000340C ; IOControl+200r ... .text:10003410 off_10003410 DCD unk_100051E4 ; DATA XREF: IOControl+134r .text:10003414 dword_10003414 DCD 0x290414 ; DATA XREF: IOControl+128r .text:10003418 dword_10003418 DCD 0x29040C ; DATA XREF: IOControl+10Cr .text:1000341C dword_1000341C DCD 0x290408 ; DATA XREF: IOControl+100r .text:10003420 dword_10003420 DCD 0x290404 ; DATA XREF: IOControl:loc_1000305Cr .text:10003424 ; Exported entry 6. PowerDown .text:10003424 .text:10003424 ; =============== S U B R O U T I N E ======================================= .text:10003424 .text:10003424 .text:10003424 EXPORT PowerDown .text:10003424 PowerDown ; DATA XREF: .pdata:10006108o .text:10003424 .text:10003424 var_4 = -4 .text:10003424 arg_4 = 4 .text:10003424 .text:10003424 STR LR, [SP,#var_4]! .text:10003428 MOV R0, #1 .text:1000342C BL nullsub_2 .text:10003430 LDR LR, [SP],#arg_4 .text:10003434 BX LR .text:10003434 ; End of function PowerDown .text:10003434 .text:10003438 ; Exported entry 7. PowerUp .text:10003438 .text:10003438 ; =============== S U B R O U T I N E ======================================= .text:10003438 .text:10003438 .text:10003438 EXPORT PowerUp .text:10003438 PowerUp ; DATA XREF: .pdata:10006110o .text:10003438 .text:10003438 var_4 = -4 .text:10003438 arg_4 = 4 .text:10003438 .text:10003438 STR LR, [SP,#var_4]! .text:1000343C MOV R0, #0 .text:10003440 BL nullsub_2 .text:10003444 LDR R3, =unk_100051E0 .text:10003448 LDR R0, [R3] .text:1000344C CMP R0, #0 .text:10003450 BLNE CeSetPowerOnEvent .text:10003454 LDR LR, [SP],#arg_4 .text:10003458 BX LR .text:10003458 ; End of function PowerUp .text:10003458 .text:10003458 ; --------------------------------------------------------------------------- .text:1000345C off_1000345C DCD unk_100051E0 ; DATA XREF: PowerUp+Cr .text:10003460 ; Exported entry 5. Open .text:10003460 .text:10003460 ; =============== S U B R O U T I N E ======================================= .text:10003460 .text:10003460 .text:10003460 EXPORT Open .text:10003460 Open ; DATA XREF: .pdata:10006118o .text:10003460 BX LR .text:10003460 ; End of function Open .text:10003460 .text:10003464 ; Exported entry 1. Close .text:10003464 .text:10003464 ; =============== S U B R O U T I N E ======================================= .text:10003464 .text:10003464 .text:10003464 EXPORT Close .text:10003464 Close ; DATA XREF: .pdata:10006120o .text:10003464 MOV R0, #1 .text:10003468 BX LR .text:10003468 ; End of function Close .text:10003468 .text:1000346C ; Exported entry 8. Read .text:1000346C .text:1000346C ; =============== S U B R O U T I N E ======================================= .text:1000346C .text:1000346C .text:1000346C EXPORT Read .text:1000346C Read ; DATA XREF: .pdata:10006128o .text:1000346C .text:1000346C var_4 = -4 .text:1000346C arg_4 = 4 .text:1000346C .text:1000346C STR LR, [SP,#var_4]! .text:10003470 MOV R0, #1 .text:10003474 BL SetLastError .text:10003478 MOV R0, #0 .text:1000347C LDR LR, [SP],#arg_4 .text:10003480 BX LR .text:10003480 ; End of function Read .text:10003480 .text:10003484 ; Exported entry 10. Write .text:10003484 .text:10003484 ; =============== S U B R O U T I N E ======================================= .text:10003484 .text:10003484 .text:10003484 EXPORT Write .text:10003484 Write ; DATA XREF: .pdata:10006130o .text:10003484 .text:10003484 var_4 = -4 .text:10003484 arg_4 = 4 .text:10003484 .text:10003484 STR LR, [SP,#var_4]! .text:10003488 MOV R0, #1 .text:1000348C BL SetLastError .text:10003490 MOV R0, #0 .text:10003494 LDR LR, [SP],#arg_4 .text:10003498 BX LR .text:10003498 ; End of function Write .text:10003498 .text:1000349C ; Exported entry 9. Seek .text:1000349C .text:1000349C ; =============== S U B R O U T I N E ======================================= .text:1000349C .text:1000349C .text:1000349C EXPORT Seek .text:1000349C Seek ; DATA XREF: .pdata:10006138o .text:1000349C MOVL R0, 0xFFFFFFFF .text:100034A0 BX LR .text:100034A0 ; End of function Seek .text:100034A0 .text:100034A4 .text:100034A4 ; =============== S U B R O U T I N E ======================================= .text:100034A4 .text:100034A4 .text:100034A4 sub_100034A4 ; CODE XREF: start+4Cp .text:100034A4 ; DATA XREF: .pdata:10006140o .text:100034A4 .text:100034A4 var_4 = -4 .text:100034A4 arg_4 = 4 .text:100034A4 .text:100034A4 STR LR, [SP,#var_4]! .text:100034A8 CMP R1, #1 .text:100034AC BLEQ DisableThreadLibraryCalls .text:100034B0 MOV R0, #1 .text:100034B4 LDR LR, [SP],#arg_4 .text:100034B8 BX LR .text:100034B8 ; End of function sub_100034A4 .text:100034B8 .text:100034BC .text:100034BC ; =============== S U B R O U T I N E ======================================= .text:100034BC .text:100034BC .text:100034BC sub_100034BC ; CODE XREF: sub_10002A60+A8p .text:100034BC ; sub_10002A60+B4p ... .text:100034BC STMFD SP!, {R4-R10,LR} .text:100034C0 MOVS R8, R1 .text:100034C4 MOV R9, R0 .text:100034C8 LDR R4, =unk_10005158 .text:100034CC LDR R7, =unk_10005154 .text:100034D0 LDR R5, =unk_10005170 .text:100034D4 LDR R3, [R4] .text:100034D8 BEQ loc_10003520 .text:100034DC LDR R6, =unk_10005168 .text:100034E0 LDR R2, [R5] .text:100034E4 CMP R3, #0 .text:100034E8 LDR R10, [R6] .text:100034EC STR R2, [R6] .text:100034F0 BEQ loc_10003510 .text:100034F4 BL GetTickCount .text:100034F8 LDR R3, [R7] .text:100034FC LDR R2, [R6] .text:10003500 SUB R3, R0, R3 .text:10003504 ADD R2, R2, R3 .text:10003508 LDR R3, [R4] .text:1000350C STR R2, [R6] .text:10003510 .text:10003510 loc_10003510 ; CODE XREF: sub_100034BC+34j .text:10003510 CMP R2, #0 .text:10003514 MOV R2, #0 .text:10003518 STR R2, [R5] .text:1000351C STREQ R10, [R6] .text:10003520 .text:10003520 loc_10003520 ; CODE XREF: sub_100034BC+1Cj .text:10003520 CMP R9, #0 .text:10003524 BEQ loc_10003550 .text:10003528 CMP R3, #0 .text:1000352C BEQ loc_10003538 .text:10003530 CMP R8, #0 .text:10003534 BEQ loc_10003578 .text:10003538 .text:10003538 loc_10003538 ; CODE XREF: sub_100034BC+70j .text:10003538 BL GetTickCount .text:1000353C MOV R3, #1 .text:10003540 STR R3, [R4] .text:10003544 STR R0, [R7] .text:10003548 LDMFD SP!, {R4-R10,LR} .text:1000354C BX LR .text:10003550 ; --------------------------------------------------------------------------- .text:10003550 .text:10003550 loc_10003550 ; CODE XREF: sub_100034BC+68j .text:10003550 CMP R3, #0 .text:10003554 BEQ loc_10003578 .text:10003558 BL GetTickCount .text:1000355C LDR R3, [R7] .text:10003560 LDR R2, [R5] .text:10003564 SUB R3, R0, R3 .text:10003568 ADD R3, R2, R3 .text:1000356C MOV R2, #0 .text:10003570 STR R2, [R4] .text:10003574 STR R3, [R5] .text:10003578 .text:10003578 loc_10003578 ; CODE XREF: sub_100034BC+78j .text:10003578 ; sub_100034BC+98j .text:10003578 LDMFD SP!, {R4-R10,LR} .text:1000357C BX LR .text:1000357C ; End of function sub_100034BC .text:1000357C .text:1000357C ; --------------------------------------------------------------------------- .text:10003580 off_10003580 DCD unk_10005168 ; DATA XREF: sub_100034BC+20r .text:10003584 off_10003584 DCD unk_10005170 ; DATA XREF: sub_100034BC+14r .text:10003588 off_10003588 DCD unk_10005154 ; DATA XREF: sub_100034BC+10r .text:1000358C off_1000358C DCD unk_10005158 ; DATA XREF: sub_100034BC+Cr .text:10003590 DCD loc_10003B08 .text:10003594 DCD dword_10003E44 .text:10003598 .text:10003598 ; =============== S U B R O U T I N E ======================================= .text:10003598 .text:10003598 ; Attributes: bp-based frame .text:10003598 .text:10003598 sub_10003598 ; CODE XREF: sub_10002A60+64p .text:10003598 ; Init+204p ... .text:10003598 .text:10003598 var_4C = -0x4C .text:10003598 var_48 = -0x48 .text:10003598 var_44 = -0x44 .text:10003598 var_40 = -0x40 .text:10003598 var_3C = -0x3C .text:10003598 var_38 = -0x38 .text:10003598 oldR4 = -0x24 .text:10003598 oldR5 = -0x20 .text:10003598 oldR6 = -0x1C .text:10003598 oldR7 = -0x18 .text:10003598 oldR8 = -0x14 .text:10003598 oldR9 = -0x10 .text:10003598 oldR11 = -0xC .text:10003598 oldSP = -8 .text:10003598 oldLR = -4 .text:10003598 param_R0 = 0 .text:10003598 param_R1 = 4 .text:10003598 param_R2 = 8 .text:10003598 param_R3 = 0xC .text:10003598 .text:10003598 MOV R12, SP .text:1000359C STMFD SP!, {R0-R3} .text:100035A0 STMFD SP!, {R4-R9,R11,R12,LR} .text:100035A4 ADD R11, SP, #0x24 .text:100035A8 SUB SP, SP, #0x28 .text:100035AC MOV R5, R1 .text:100035B0 STR R5, [R11,#param_R1] .text:100035B4 MOV R9, R0 .text:100035B8 STR R9, [R11,#param_R0] .text:100035BC LDR R3, =unk_10005218 .text:100035C0 LDR R8, [R3] .text:100035C4 CMP R8, #0 .text:100035C8 BEQ loc_100035EC .text:100035CC LDR R3, =unk_10005214 .text:100035D0 LDR R7, [R3] .text:100035D4 CMP R7, #0 .text:100035D8 BEQ loc_100035EC .text:100035DC STR R8, [R11,#var_44] .text:100035E0 STR R7, [R11,#var_40] .text:100035E4 CMP R9, #0 .text:100035E8 BNE loc_100035F8 .text:100035EC .text:100035EC loc_100035EC ; CODE XREF: sub_10003598+30j .text:100035EC ; sub_10003598+40j .text:100035EC MOV R0, #0 .text:100035F0 LDMDB R11, {R4-R9,R11,SP,LR} .text:100035F4 BX LR .text:100035F8 ; --------------------------------------------------------------------------- .text:100035F8 .text:100035F8 loc_100035F8 ; CODE XREF: sub_10003598+50j .text:100035F8 CMP R2, #0 .text:100035FC BEQ loc_10003744 .text:10003600 LDR R0, =unk_10005200 .text:10003604 BL EnterCriticalSection .text:10003608 .text:10003608 loc_10003608 ; DATA XREF: .text:10003E58o .text:10003608 SUB R1, R11, #0x48 .text:1000360C MOV R0, R7 .text:10003610 BL sub_100012D8 .text:10003614 LDRB R3, [R7] .text:10003618 CMP R3, #0 .text:1000361C LDR R4, =unk_1000516C .text:10003620 LDR R3, [R4] .text:10003624 BEQ loc_10003648 .text:10003628 CMP R3, #0 .text:1000362C BNE loc_1000367C .text:10003630 MOV R3, #1 .text:10003634 STR R3, [R4] .text:10003638 MOV R1, #0 .text:1000363C MOV R0, #0 .text:10003640 BL sub_100034BC .text:10003644 B loc_1000367C .text:10003648 ; --------------------------------------------------------------------------- .text:10003648 .text:10003648 loc_10003648 ; CODE XREF: sub_10003598+8Cj .text:10003648 CMP R3, #0 .text:1000364C BEQ loc_1000367C .text:10003650 LDR R6, =unk_10005158 .text:10003654 MOV R3, #0 .text:10003658 STR R3, [R4] .text:1000365C LDR R3, [R6] .text:10003660 CMP R3, #0 .text:10003664 BNE loc_1000367C .text:10003668 BL GetTickCount .text:1000366C LDR R3, =unk_10005154 .text:10003670 MOV R2, #1 .text:10003674 STR R0, [R3] .text:10003678 STR R2, [R6] .text:1000367C .text:1000367C loc_1000367C ; CODE XREF: sub_10003598+94j .text:1000367C ; sub_10003598+ACj ... .text:1000367C LDR R3, [R11,#var_48] .text:10003680 CMP R3, #0 .text:10003684 LDR R6, =unk_10005160 .text:10003688 BNE loc_100036A4 .text:1000368C LDR R3, [R6,#4] .text:10003690 CMP R3, #0 .text:10003694 BNE loc_100036E0 .text:10003698 LDR R3, [R6] .text:1000369C CMP R3, #0 .text:100036A0 BNE loc_100036E0 .text:100036A4 .text:100036A4 loc_100036A4 ; CODE XREF: sub_10003598+F0j .text:100036A4 SUB R0, R11, #0x34 .text:100036A8 BL GetLocalTime .text:100036AC SUB R1, R11, #0x3C .text:100036B0 SUB R0, R11, #0x34 .text:100036B4 BL SystemTimeToFileTime .text:100036B8 LDR R3, [R11,#var_3C] .text:100036BC LDR R2, [R11,#var_38] .text:100036C0 LDR R1, [R4] .text:100036C4 STR R3, [R6] .text:100036C8 STR R2, [R6,#4] .text:100036CC CMP R1, #0 .text:100036D0 MOVEQ R0, #1 .text:100036D4 MOVNE R0, #0 .text:100036D8 MOV R1, #1 .text:100036DC BL sub_100034BC .text:100036E0 .text:100036E0 loc_100036E0 ; CODE XREF: sub_10003598+FCj .text:100036E0 ; sub_10003598+108j .text:100036E0 ; DATA XREF: ... .text:100036E0 LDR R0, [R11,#var_4C] .text:100036E4 B loc_10003714 .text:100036E8 ; --------------------------------------------------------------------------- .text:100036E8 .text:100036E8 loc_100036E8 ; DATA XREF: .text:10003E64o .text:100036E8 LDR R0, =unk_10005200 .text:100036EC BL LeaveCriticalSection .text:100036F0 MOV R0, #0x1F .text:100036F4 BL SetLastError .text:100036F8 MOV R0, #0 .text:100036FC STR R0, [R11,#var_4C] .text:10003700 LDR R5, [R11,#param_R1] .text:10003704 LDR R9, [R11,#param_R0] .text:10003708 LDR R8, [R11,#var_44] .text:1000370C LDR R7, [R11,#var_40] .text:10003710 B loc_1000378C .text:10003714 ; --------------------------------------------------------------------------- .text:10003714 .text:10003714 loc_10003714 ; CODE XREF: sub_10003598+14Cj .text:10003714 LDR R0, =unk_10005180 .text:10003718 BL EnterCriticalSection .text:1000371C LDR R4, =unk_1000521C .text:10003720 MOV R1, R7 .text:10003724 MOV R0, R8 .text:10003728 LDR R2, [R4] .text:1000372C BL memcpy .text:10003730 LDR R0, =unk_10005180 .text:10003734 BL LeaveCriticalSection .text:10003738 LDR R0, =unk_10005200 .text:1000373C BL LeaveCriticalSection .text:10003740 B loc_10003748 .text:10003744 ; --------------------------------------------------------------------------- .text:10003744 .text:10003744 loc_10003744 ; CODE XREF: sub_10003598+64j .text:10003744 LDR R4, =unk_1000521C .text:10003748 .text:10003748 loc_10003748 ; CODE XREF: sub_10003598+1A8j .text:10003748 LDR R0, =unk_10005180 .text:1000374C BL EnterCriticalSection .text:10003750 .text:10003750 loc_10003750 ; DATA XREF: .text:10003E48o .text:10003750 LDR R3, [R4] .text:10003754 CMP R5, R3 .text:10003758 MOVHI R5, R3 .text:1000375C STRHI R3, [R11,#param_R1] .text:10003760 MOV R2, R5 .text:10003764 MOV R1, R8 .text:10003768 MOV R0, R9 .text:1000376C BL memcpy .text:10003770 .text:10003770 loc_10003770 ; DATA XREF: .text:10003E4Co .text:10003770 B loc_10003780 .text:10003774 ; --------------------------------------------------------------------------- .text:10003774 .text:10003774 loc_10003774 ; DATA XREF: .text:10003E54o .text:10003774 MOV R0, #0x1F .text:10003778 MOV R5, #0 .text:1000377C BL SetLastError .text:10003780 .text:10003780 loc_10003780 ; CODE XREF: sub_10003598:loc_10003770j .text:10003780 LDR R0, =unk_10005180 .text:10003784 BL LeaveCriticalSection .text:10003788 MOV R0, R5 .text:1000378C .text:1000378C loc_1000378C ; CODE XREF: sub_10003598+178j .text:1000378C LDMDB R11, {R4-R9,R11,SP,LR} .text:10003790 BX LR .text:10003790 ; End of function sub_10003598 .text:10003790 .text:10003794 .text:10003794 ; =============== S U B R O U T I N E ======================================= .text:10003794 .text:10003794 .text:10003794 sub_10003794 ; DATA XREF: .text:10003E50o .text:10003794 ; .pdata:10006158o .text:10003794 MOV R0, #1 .text:10003798 RET .text:10003798 ; End of function sub_10003794 .text:10003798 .text:1000379C .text:1000379C ; =============== S U B R O U T I N E ======================================= .text:1000379C .text:1000379C .text:1000379C sub_1000379C ; DATA XREF: .text:10003E60o .text:1000379C ; .pdata:10006160o .text:1000379C MOV R0, #1 .text:100037A0 RET .text:100037A0 ; End of function sub_1000379C .text:100037A0 .text:100037A0 ; --------------------------------------------------------------------------- .text:100037A4 off_100037A4 DCD unk_10005180 ; DATA XREF: sub_10003598:loc_10003714r .text:100037A4 ; sub_10003598+198r ... .text:100037A8 off_100037A8 DCD unk_1000521C ; DATA XREF: sub_10003598+184r .text:100037A8 ; sub_10003598:loc_10003744r .text:100037AC off_100037AC DCD unk_10005200 ; DATA XREF: sub_10003598+68r .text:100037AC ; sub_10003598:loc_100036E8r ... .text:100037B0 off_100037B0 DCD unk_10005160 ; DATA XREF: sub_10003598+ECr .text:100037B4 off_100037B4 DCD unk_10005154 ; DATA XREF: sub_10003598+D4r .text:100037B8 off_100037B8 DCD unk_10005158 ; DATA XREF: sub_10003598+B8r .text:100037BC off_100037BC DCD unk_1000516C ; DATA XREF: sub_10003598+84r .text:100037C0 off_100037C0 DCD unk_10005214 ; DATA XREF: sub_10003598+34r .text:100037C4 off_100037C4 DCD unk_10005218 ; DATA XREF: sub_10003598+24r .text:100037C8 .text:100037C8 ; =============== S U B R O U T I N E ======================================= .text:100037C8 .text:100037C8 .text:100037C8 sub_100037C8 ; CODE XREF: IOControl:loc_1000300Cp .text:100037C8 ; DATA XREF: .pdata:10006168o .text:100037C8 .text:100037C8 var_4 = -4 .text:100037C8 arg_4 = 4 .text:100037C8 .text:100037C8 STR LR, [SP,#var_4]! .text:100037CC CMP R0, #0 .text:100037D0 BEQ loc_100037F0 .text:100037D4 MOV R2, R1 .text:100037D8 MOV R1, #0x18 .text:100037DC BL sub_10003598 .text:100037E0 CMP R0, #0x18 .text:100037E4 MOVEQ R0, #1 .text:100037E8 LDREQ LR, [SP],#arg_4 .text:100037EC BXEQ LR .text:100037F0 .text:100037F0 loc_100037F0 ; CODE XREF: sub_100037C8+8j .text:100037F0 MOV R0, #0 .text:100037F4 LDR LR, [SP],#arg_4 .text:100037F8 BX LR .text:100037F8 ; End of function sub_100037C8 .text:100037F8 .text:100037F8 ; --------------------------------------------------------------------------- .text:100037FC DCD loc_10003B08 .text:10003800 DCD dword_10003E68 .text:10003804 .text:10003804 ; =============== S U B R O U T I N E ======================================= .text:10003804 .text:10003804 ; Attributes: bp-based frame .text:10003804 .text:10003804 sub_10003804 ; CODE XREF: IOControl+324p .text:10003804 ; DATA XREF: .pdata:10006170o .text:10003804 .text:10003804 oldR4 = -0x14 .text:10003804 oldR5 = -0x10 .text:10003804 oldR11 = -0xC .text:10003804 oldSP = -8 .text:10003804 oldLR = -4 .text:10003804 .text:10003804 MOV R12, SP .text:10003808 STMFD SP!, {R4,R5,R11,R12,LR} .text:1000380C ADD R11, SP, #0x14 .text:10003810 MOV R4, R2 .text:10003814 MOV R5, R1 .text:10003818 MOV R1, R0 .text:1000381C .text:1000381C loc_1000381C ; DATA XREF: .text:10003E6Co .text:1000381C CMP R1, #0 .text:10003820 LDRNE R0, =unk_10005160 .text:10003824 BLNE FileTimeToSystemTime .text:10003828 CMP R5, #0 .text:1000382C BEQ loc_10003868 .text:10003830 LDR R3, =unk_10005170 .text:10003834 LDR R0, =unk_10005158 .text:10003838 LDR R3, [R3] .text:1000383C STR R3, [R5] .text:10003840 LDR R3, [R0] .text:10003844 CMP R3, #0 .text:10003848 BEQ loc_10003868 .text:1000384C BL GetTickCount .text:10003850 LDR R3, =unk_10005154 .text:10003854 LDR R2, [R5] .text:10003858 LDR R3, [R3] .text:1000385C SUB R3, R2, R3 .text:10003860 ADD R3, R3, R0 .text:10003864 STR R3, [R5] .text:10003868 .text:10003868 loc_10003868 ; CODE XREF: sub_10003804+28j .text:10003868 ; sub_10003804+44j .text:10003868 CMP R4, #0 .text:1000386C LDRNE R3, =unk_10005168 .text:10003870 LDRNE R3, [R3] .text:10003874 STRNE R3, [R4] .text:10003878 .text:10003878 loc_10003878 ; DATA XREF: .text:10003E70o .text:10003878 B loc_10003884 .text:1000387C ; --------------------------------------------------------------------------- .text:1000387C .text:1000387C loc_1000387C ; DATA XREF: .text:10003E78o .text:1000387C MOV R0, #0x57 .text:10003880 BL SetLastError .text:10003884 .text:10003884 loc_10003884 ; CODE XREF: sub_10003804:loc_10003878j .text:10003884 LDMDB R11, {R4,R5,R11,SP,LR} .text:10003888 BX LR .text:10003888 ; End of function sub_10003804 .text:10003888 .text:1000388C .text:1000388C ; =============== S U B R O U T I N E ======================================= .text:1000388C .text:1000388C .text:1000388C sub_1000388C ; DATA XREF: .text:10003E74o .text:1000388C ; .pdata:10006178o .text:1000388C MOV R0, #1 .text:10003890 RET .text:10003890 ; End of function sub_1000388C .text:10003890 .text:10003890 ; --------------------------------------------------------------------------- .text:10003894 off_10003894 DCD unk_10005168 ; DATA XREF: sub_10003804+68r .text:10003898 off_10003898 DCD unk_10005154 ; DATA XREF: sub_10003804+4Cr .text:1000389C off_1000389C DCD unk_10005158 ; DATA XREF: sub_10003804+30r .text:100038A0 off_100038A0 DCD unk_10005170 ; DATA XREF: sub_10003804+2Cr .text:100038A4 off_100038A4 DCD unk_10005160 ; DATA XREF: sub_10003804+1Cr .text:100038A8 DCD loc_10003B08 .text:100038AC DCD dword_10003E7C .text:100038B0 .text:100038B0 ; =============== S U B R O U T I N E ======================================= .text:100038B0 .text:100038B0 ; Attributes: bp-based frame .text:100038B0 .text:100038B0 sub_100038B0 ; CODE XREF: IOControl+1FCp .text:100038B0 ; DATA XREF: .pdata:10006180o .text:100038B0 .text:100038B0 oldR11 = -0xC .text:100038B0 oldSP = -8 .text:100038B0 oldLR = -4 .text:100038B0 .text:100038B0 MOV R12, SP .text:100038B4 STMFD SP!, {R11,R12,LR} .text:100038B8 ADD R11, SP, #0xC .text:100038BC MOV R3, R1 .text:100038C0 .text:100038C0 loc_100038C0 ; DATA XREF: .text:10003E80o .text:100038C0 CMP R3, #0 .text:100038C4 BEQ loc_10003908 .text:100038C8 CMP R0, #0 .text:100038CC LDR LR, =unk_10005160 .text:100038D0 LDR R2, [LR] .text:100038D4 BEQ loc_100038F0 .text:100038D8 LDR R0, [R3] .text:100038DC LDR R1, [R3,#4] .text:100038E0 LDR R3, [LR,#4] .text:100038E4 ADDS R2, R2, R0 .text:100038E8 ADC R3, R3, R1 .text:100038EC B loc_10003904 .text:100038F0 ; --------------------------------------------------------------------------- .text:100038F0 .text:100038F0 loc_100038F0 ; CODE XREF: sub_100038B0+24j .text:100038F0 LDR R1, [R3] .text:100038F4 LDR R0, [R3,#4] .text:100038F8 LDR R3, [LR,#4] .text:100038FC SUBS R2, R2, R1 .text:10003900 SBC R3, R3, R0 .text:10003904 .text:10003904 loc_10003904 ; CODE XREF: sub_100038B0+3Cj .text:10003904 STMIA LR, {R2,R3} .text:10003908 .text:10003908 loc_10003908 ; CODE XREF: sub_100038B0+14j .text:10003908 ; DATA XREF: .text:10003E84o .text:10003908 B loc_10003914 .text:1000390C ; --------------------------------------------------------------------------- .text:1000390C .text:1000390C loc_1000390C ; DATA XREF: .text:10003E8Co .text:1000390C MOV R0, #0x57 .text:10003910 BL SetLastError .text:10003914 .text:10003914 loc_10003914 ; CODE XREF: sub_100038B0:loc_10003908j .text:10003914 LDMDB R11, {R11,SP,LR} .text:10003918 BX LR .text:10003918 ; End of function sub_100038B0 .text:10003918 .text:1000391C .text:1000391C ; =============== S U B R O U T I N E ======================================= .text:1000391C .text:1000391C .text:1000391C sub_1000391C ; DATA XREF: .text:10003E88o .text:1000391C ; .pdata:10006188o .text:1000391C MOV R0, #1 .text:10003920 RET .text:10003920 ; End of function sub_1000391C .text:10003920 .text:10003920 ; --------------------------------------------------------------------------- .text:10003924 off_10003924 DCD unk_10005160 ; DATA XREF: sub_100038B0+1Cr .text:10003928 ; [0000000C BYTES: COLLAPSED FUNCTION EventModify. PRESS KEYPAD "+" TO EXPAND] .text:10003934 off_10003934 DCD __imp_EventModify ; DATA XREF: EventModifyr .text:10003938 ; [0000000C BYTES: COLLAPSED FUNCTION Sleep. PRESS KEYPAD "+" TO EXPAND] .text:10003944 off_10003944 DCD __imp_Sleep ; DATA XREF: Sleepr .text:10003948 ; [0000000C BYTES: COLLAPSED FUNCTION CreateEventW. PRESS KEYPAD "+" TO EXPAND] .text:10003954 off_10003954 DCD __imp_CreateEventW ; DATA XREF: CreateEventWr .text:10003958 ; [0000000C BYTES: COLLAPSED FUNCTION InterruptDone. PRESS KEYPAD "+" TO EXPAND] .text:10003964 off_10003964 DCD __imp_InterruptDone ; DATA XREF: InterruptDoner .text:10003968 ; [0000000C BYTES: COLLAPSED FUNCTION WaitForSingleObject. PRESS KEYPAD "+" TO EXPAND] .text:10003974 off_10003974 DCD __imp_WaitForSingleObject .text:10003974 ; DATA XREF: WaitForSingleObjectr .text:10003978 ; [0000000C BYTES: COLLAPSED FUNCTION InterruptInitialize. PRESS KEYPAD "+" TO EXPAND] .text:10003984 off_10003984 DCD __imp_InterruptInitialize .text:10003984 ; DATA XREF: InterruptInitializer .text:10003988 ; [0000000C BYTES: COLLAPSED FUNCTION CreateThread. PRESS KEYPAD "+" TO EXPAND] .text:10003994 off_10003994 DCD __imp_CreateThread ; DATA XREF: CreateThreadr .text:10003998 ; [0000000C BYTES: COLLAPSED FUNCTION CloseHandle. PRESS KEYPAD "+" TO EXPAND] .text:100039A4 off_100039A4 DCD __imp_CloseHandle ; DATA XREF: CloseHandler .text:100039A8 ; [0000000C BYTES: COLLAPSED FUNCTION MapViewOfFile. PRESS KEYPAD "+" TO EXPAND] .text:100039B4 off_100039B4 DCD __imp_MapViewOfFile ; DATA XREF: MapViewOfFiler .text:100039B8 ; [0000000C BYTES: COLLAPSED FUNCTION CreateFileMappingW. PRESS KEYPAD "+" TO EXPAND] .text:100039C4 off_100039C4 DCD __imp_CreateFileMappingW ; DATA XREF: CreateFileMappingWr .text:100039C8 ; [0000000C BYTES: COLLAPSED FUNCTION CreateMutexW. PRESS KEYPAD "+" TO EXPAND] .text:100039D4 off_100039D4 DCD __imp_CreateMutexW ; DATA XREF: CreateMutexWr .text:100039D8 ; [0000000C BYTES: COLLAPSED FUNCTION GetTickCount. PRESS KEYPAD "+" TO EXPAND] .text:100039E4 off_100039E4 DCD __imp_GetTickCount ; DATA XREF: GetTickCountr .text:100039E8 ; [0000000C BYTES: COLLAPSED FUNCTION ReleaseMutex. PRESS KEYPAD "+" TO EXPAND] .text:100039F4 off_100039F4 DCD __imp_ReleaseMutex ; DATA XREF: ReleaseMutexr .text:100039F8 ; [0000000C BYTES: COLLAPSED FUNCTION memcpy. PRESS KEYPAD "+" TO EXPAND] .text:10003A04 off_10003A04 DCD __imp_memcpy ; DATA XREF: memcpyr .text:10003A08 ; [0000000C BYTES: COLLAPSED FUNCTION PowerPolicyNotify. PRESS KEYPAD "+" TO EXPAND] .text:10003A14 off_10003A14 DCD __imp_PowerPolicyNotify ; DATA XREF: PowerPolicyNotifyr .text:10003A18 ; [0000000C BYTES: COLLAPSED FUNCTION CeSetThreadPriority. PRESS KEYPAD "+" TO EXPAND] .text:10003A24 off_10003A24 DCD __imp_CeSetThreadPriority .text:10003A24 ; DATA XREF: CeSetThreadPriorityr .text:10003A28 ; [0000000C BYTES: COLLAPSED FUNCTION memcmp. PRESS KEYPAD "+" TO EXPAND] .text:10003A34 off_10003A34 DCD __imp_memcmp ; DATA XREF: memcmpr .text:10003A38 ; [0000000C BYTES: COLLAPSED FUNCTION DeleteCriticalSection. PRESS KEYPAD "+" TO EXPAND] .text:10003A44 off_10003A44 DCD __imp_DeleteCriticalSection .text:10003A44 ; DATA XREF: DeleteCriticalSectionr .text:10003A48 ; [0000000C BYTES: COLLAPSED FUNCTION LocalFree. PRESS KEYPAD "+" TO EXPAND] .text:10003A54 off_10003A54 DCD __imp_LocalFree ; DATA XREF: LocalFreer .text:10003A58 ; [0000000C BYTES: COLLAPSED FUNCTION LocalAlloc. PRESS KEYPAD "+" TO EXPAND] .text:10003A64 off_10003A64 DCD __imp_LocalAlloc ; DATA XREF: LocalAllocr .text:10003A68 ; [0000000C BYTES: COLLAPSED FUNCTION RegCloseKey. PRESS KEYPAD "+" TO EXPAND] .text:10003A74 off_10003A74 DCD __imp_RegCloseKey ; DATA XREF: RegCloseKeyr .text:10003A78 ; [0000000C BYTES: COLLAPSED FUNCTION RegQueryValueExW. PRESS KEYPAD "+" TO EXPAND] .text:10003A84 off_10003A84 DCD __imp_RegQueryValueExW ; DATA XREF: RegQueryValueExWr .text:10003A88 ; [0000000C BYTES: COLLAPSED FUNCTION OpenDeviceKey. PRESS KEYPAD "+" TO EXPAND] .text:10003A94 off_10003A94 DCD __imp_OpenDeviceKey ; DATA XREF: OpenDeviceKeyr .text:10003A98 ; [0000000C BYTES: COLLAPSED FUNCTION InitializeCriticalSection. PRESS KEYPAD "+" TO EXPAND] .text:10003AA4 off_10003AA4 DCD __imp_InitializeCriticalSection .text:10003AA4 ; DATA XREF: InitializeCriticalSectionr .text:10003AA8 ; [0000000C BYTES: COLLAPSED FUNCTION OpenEventW. PRESS KEYPAD "+" TO EXPAND] .text:10003AB4 off_10003AB4 DCD __imp_OpenEventW ; DATA XREF: OpenEventWr .text:10003AB8 ; [0000000C BYTES: COLLAPSED FUNCTION memset. PRESS KEYPAD "+" TO EXPAND] .text:10003AC4 off_10003AC4 DCD __imp_memset ; DATA XREF: memsetr .text:10003AC8 ; [0000000C BYTES: COLLAPSED FUNCTION LeaveCriticalSection. PRESS KEYPAD "+" TO EXPAND] .text:10003AD4 off_10003AD4 DCD __imp_LeaveCriticalSection .text:10003AD4 ; DATA XREF: LeaveCriticalSectionr .text:10003AD8 ; [0000000C BYTES: COLLAPSED FUNCTION EnterCriticalSection. PRESS KEYPAD "+" TO EXPAND] .text:10003AE4 off_10003AE4 DCD __imp_EnterCriticalSection .text:10003AE4 ; DATA XREF: EnterCriticalSectionr .text:10003AE8 ; [0000000C BYTES: COLLAPSED FUNCTION SetLastError. PRESS KEYPAD "+" TO EXPAND] .text:10003AF4 off_10003AF4 DCD __imp_SetLastError ; DATA XREF: SetLastErrorr .text:10003AF8 ; [0000000C BYTES: COLLAPSED FUNCTION GetLastError. PRESS KEYPAD "+" TO EXPAND] .text:10003B04 off_10003B04 DCD __imp_GetLastError ; DATA XREF: GetLastErrorr .text:10003B08 ; --------------------------------------------------------------------------- .text:10003B08 .text:10003B08 loc_10003B08 ; DATA XREF: .text:10002F60o .text:10003B08 ; .text:10003590o ... .text:10003B08 LDR R12, =__C_specific_handler .text:10003B0C LDR R12, [R12] .text:10003B10 BX R12 .text:10003B10 ; --------------------------------------------------------------------------- .text:10003B14 off_10003B14 DCD __C_specific_handler ; DATA XREF: .text:loc_10003B08r .text:10003B18 ; [0000000C BYTES: COLLAPSED FUNCTION CeSetPowerOnEvent. PRESS KEYPAD "+" TO EXPAND] .text:10003B24 off_10003B24 DCD __imp_CeSetPowerOnEvent ; DATA XREF: CeSetPowerOnEventr .text:10003B28 ; [0000000C BYTES: COLLAPSED FUNCTION DisableThreadLibraryCalls. PRESS KEYPAD "+" TO EXPAND] .text:10003B34 off_10003B34 DCD __imp_DisableThreadLibraryCalls .text:10003B34 ; DATA XREF: DisableThreadLibraryCallsr .text:10003B38 ; [0000000C BYTES: COLLAPSED FUNCTION SystemTimeToFileTime. PRESS KEYPAD "+" TO EXPAND] .text:10003B44 off_10003B44 DCD __imp_SystemTimeToFileTime .text:10003B44 ; DATA XREF: SystemTimeToFileTimer .text:10003B48 ; [0000000C BYTES: COLLAPSED FUNCTION GetLocalTime. PRESS KEYPAD "+" TO EXPAND] .text:10003B54 off_10003B54 DCD __imp_GetLocalTime ; DATA XREF: GetLocalTimer .text:10003B58 ; [0000000C BYTES: COLLAPSED FUNCTION FileTimeToSystemTime. PRESS KEYPAD "+" TO EXPAND] .text:10003B64 off_10003B64 DCD __imp_FileTimeToSystemTime .text:10003B64 ; DATA XREF: FileTimeToSystemTimer .text:10003B68 ; [0000000C BYTES: COLLAPSED FUNCTION CEDDK_8. PRESS KEYPAD "+" TO EXPAND] .text:10003B74 off_10003B74 DCD __imp_CEDDK_8 ; DATA XREF: CEDDK_8r .text:10003B78 .text:10003B78 ; =============== S U B R O U T I N E ======================================= .text:10003B78 .text:10003B78 .text:10003B78 EXPORT start .text:10003B78 start ; DATA XREF: .pdata:10006190o .text:10003B78 STMFD SP!, {R4-R8,LR} .text:10003B7C MOV R7, R2 .text:10003B80 MOV R6, R1 .text:10003B84 MOV R8, R0 .text:10003B88 LDR R5, =unk_10005234 .text:10003B8C CMP R6, #1 .text:10003B90 BNE loc_10003BB8 .text:10003B94 LDR R3, [R5] .text:10003B98 CMP R3, #0 .text:10003B9C BEQ loc_10003BB4 .text:10003BA0 MOV R1, #1 .text:10003BA4 MOV LR, PC .text:10003BA8 BX R3 .text:10003BAC MOVS R4, R0 .text:10003BB0 BEQ loc_10003C00 .text:10003BB4 .text:10003BB4 loc_10003BB4 ; CODE XREF: start+24j .text:10003BB4 BL sub_10003C10 .text:10003BB8 .text:10003BB8 loc_10003BB8 ; CODE XREF: start+18j .text:10003BB8 MOV R2, R7 .text:10003BBC MOV R1, R6 .text:10003BC0 MOV R0, R8 .text:10003BC4 BL sub_100034A4 .text:10003BC8 MOV R4, R0 .text:10003BCC CMP R6, #0 .text:10003BD0 BNE loc_10003C00 .text:10003BD4 BL sub_10003D80 .text:10003BD8 LDR R3, [R5] .text:10003BDC CMP R3, #0 .text:10003BE0 BEQ loc_10003C00 .text:10003BE4 MOV R2, R7 .text:10003BE8 MOV R1, #0 .text:10003BEC MOV R0, R8 .text:10003BF0 MOV LR, PC .text:10003BF4 BX R3 .text:10003BF8 CMP R0, #0 .text:10003BFC MOVEQ R4, #0 .text:10003C00 .text:10003C00 loc_10003C00 ; CODE XREF: start+38j .text:10003C00 ; start+58j ... .text:10003C00 MOV R0, R4 .text:10003C04 LDMFD SP!, {R4-R8,LR} .text:10003C08 BX LR .text:10003C08 ; End of function start .text:10003C08 .text:10003C08 ; --------------------------------------------------------------------------- .text:10003C0C off_10003C0C DCD unk_10005234 ; DATA XREF: start+10r .text:10003C10 .text:10003C10 ; =============== S U B R O U T I N E ======================================= .text:10003C10 .text:10003C10 .text:10003C10 sub_10003C10 ; CODE XREF: start:loc_10003BB4p .text:10003C10 ; DATA XREF: .pdata:10006198o .text:10003C10 STMFD SP!, {R4,R5,LR} .text:10003C14 LDR R4, =unk_100050A4 .text:10003C18 LDR R5, =unk_100050A8 .text:10003C1C B loc_10003C34 .text:10003C20 ; --------------------------------------------------------------------------- .text:10003C20 .text:10003C20 loc_10003C20 ; CODE XREF: sub_10003C10+28j .text:10003C20 LDR R3, [R4] .text:10003C24 CMP R3, #0 .text:10003C28 MOVNE LR, PC .text:10003C2C BXNE R3 .text:10003C30 ADD R4, R4, #4 .text:10003C34 .text:10003C34 loc_10003C34 ; CODE XREF: sub_10003C10+Cj .text:10003C34 CMP R4, R5 .text:10003C38 BCC loc_10003C20 .text:10003C3C LDR R4, =unk_1000509C .text:10003C40 LDR R5, =unk_100050A0 .text:10003C44 B loc_10003C5C .text:10003C48 ; --------------------------------------------------------------------------- .text:10003C48 .text:10003C48 loc_10003C48 ; CODE XREF: sub_10003C10+50j .text:10003C48 LDR R3, [R4] .text:10003C4C CMP R3, #0 .text:10003C50 MOVNE LR, PC .text:10003C54 BXNE R3 .text:10003C58 ADD R4, R4, #4 .text:10003C5C .text:10003C5C loc_10003C5C ; CODE XREF: sub_10003C10+34j .text:10003C5C CMP R4, R5 .text:10003C60 BCC loc_10003C48 .text:10003C64 LDMFD SP!, {R4,R5,LR} .text:10003C68 BX LR .text:10003C68 ; End of function sub_10003C10 .text:10003C68 .text:10003C68 ; --------------------------------------------------------------------------- .text:10003C6C off_10003C6C DCD unk_100050A0 ; DATA XREF: sub_10003C10+30r .text:10003C70 off_10003C70 DCD unk_1000509C ; DATA XREF: sub_10003C10+2Cr .text:10003C74 off_10003C74 DCD unk_100050A8 ; DATA XREF: sub_10003C10+8r .text:10003C78 off_10003C78 DCD unk_100050A4 ; DATA XREF: sub_10003C10+4r .text:10003C7C .text:10003C7C ; =============== S U B R O U T I N E ======================================= .text:10003C7C .text:10003C7C .text:10003C7C sub_10003C7C ; CODE XREF: sub_10003D80+10p .text:10003C7C ; DATA XREF: .pdata:100061A0o .text:10003C7C STMFD SP!, {R4-R8,LR} .text:10003C80 MOV R7, R2 .text:10003C84 CMP R1, #0 .text:10003C88 MOV R8, R0 .text:10003C8C LDR R3, =unk_10005230 .text:10003C90 STRB R7, [R3] .text:10003C94 BNE loc_10003D18 .text:10003C98 LDR R5, =unk_1000522C .text:10003C9C LDR R0, [R5] .text:10003CA0 CMP R0, #0 .text:10003CA4 BEQ loc_10003CF0 .text:10003CA8 LDR R6, =unk_10005228 .text:10003CAC LDR R3, [R6] .text:10003CB0 SUB R4, R3, #4 .text:10003CB4 B loc_10003CD4 .text:10003CB8 ; --------------------------------------------------------------------------- .text:10003CB8 .text:10003CB8 loc_10003CB8 ; CODE XREF: sub_10003C7C+5Cj .text:10003CB8 LDR R3, [R4] .text:10003CBC CMP R3, #0 .text:10003CC0 BEQ loc_10003CD0 .text:10003CC4 MOV LR, PC .text:10003CC8 BX R3 .text:10003CCC LDR R0, [R5] .text:10003CD0 .text:10003CD0 loc_10003CD0 ; CODE XREF: sub_10003C7C+44j .text:10003CD0 SUB R4, R4, #4 .text:10003CD4 .text:10003CD4 loc_10003CD4 ; CODE XREF: sub_10003C7C+38j .text:10003CD4 CMP R4, R0 .text:10003CD8 BCS loc_10003CB8 .text:10003CDC BL LocalFree .text:10003CE0 MOV R3, #0 .text:10003CE4 MOV R2, #0 .text:10003CE8 STR R3, [R6] .text:10003CEC STR R2, [R5] .text:10003CF0 .text:10003CF0 loc_10003CF0 ; CODE XREF: sub_10003C7C+28j .text:10003CF0 LDR R4, =unk_100050AC .text:10003CF4 LDR R5, =unk_100050B0 .text:10003CF8 B loc_10003D10 .text:10003CFC ; --------------------------------------------------------------------------- .text:10003CFC .text:10003CFC loc_10003CFC ; CODE XREF: sub_10003C7C+98j .text:10003CFC LDR R3, [R4] .text:10003D00 CMP R3, #0 .text:10003D04 MOVNE LR, PC .text:10003D08 BXNE R3 .text:10003D0C ADD R4, R4, #4 .text:10003D10 .text:10003D10 loc_10003D10 ; CODE XREF: sub_10003C7C+7Cj .text:10003D10 CMP R4, R5 .text:10003D14 BCC loc_10003CFC .text:10003D18 .text:10003D18 loc_10003D18 ; CODE XREF: sub_10003C7C+18j .text:10003D18 LDR R4, =unk_100050B4 .text:10003D1C LDR R5, =unk_100050B8 .text:10003D20 B loc_10003D38 .text:10003D24 ; --------------------------------------------------------------------------- .text:10003D24 .text:10003D24 loc_10003D24 ; CODE XREF: sub_10003C7C+C0j .text:10003D24 LDR R3, [R4] .text:10003D28 CMP R3, #0 .text:10003D2C MOVNE LR, PC .text:10003D30 BXNE R3 .text:10003D34 ADD R4, R4, #4 .text:10003D38 .text:10003D38 loc_10003D38 ; CODE XREF: sub_10003C7C+A4j .text:10003D38 CMP R4, R5 .text:10003D3C BCC loc_10003D24 .text:10003D40 CMP R7, #0 .text:10003D44 LDREQ R3, =0xF000F7F8 .text:10003D48 MOVEQ R1, R8 .text:10003D4C MOVEQ R0, #0x42 .text:10003D50 MOVEQ LR, PC .text:10003D54 BXEQ R3 .text:10003D58 LDMFD SP!, {R4-R8,LR} .text:10003D5C BX LR .text:10003D5C ; End of function sub_10003C7C .text:10003D5C .text:10003D5C ; --------------------------------------------------------------------------- .text:10003D60 dword_10003D60 DCD 0xF000F7F8 ; DATA XREF: sub_10003C7C+C8r .text:10003D64 off_10003D64 DCD unk_100050B8 ; DATA XREF: sub_10003C7C+A0r .text:10003D68 off_10003D68 DCD unk_100050B4 ; DATA XREF: sub_10003C7C:loc_10003D18r .text:10003D6C off_10003D6C DCD unk_100050B0 ; DATA XREF: sub_10003C7C+78r .text:10003D70 off_10003D70 DCD unk_100050AC ; DATA XREF: sub_10003C7C:loc_10003CF0r .text:10003D74 off_10003D74 DCD unk_10005228 ; DATA XREF: sub_10003C7C+2Cr .text:10003D78 off_10003D78 DCD unk_1000522C ; DATA XREF: sub_10003C7C+1Cr .text:10003D7C off_10003D7C DCD unk_10005230 ; DATA XREF: sub_10003C7C+10r .text:10003D80 .text:10003D80 ; =============== S U B R O U T I N E ======================================= .text:10003D80 .text:10003D80 .text:10003D80 sub_10003D80 ; CODE XREF: start+5Cp .text:10003D80 ; DATA XREF: .pdata:100061A8o .text:10003D80 .text:10003D80 var_4 = -4 .text:10003D80 arg_4 = 4 .text:10003D80 .text:10003D80 STR LR, [SP,#var_4]! .text:10003D84 MOV R2, #1 .text:10003D88 MOV R1, #0 .text:10003D8C MOV R0, #0 .text:10003D90 BL sub_10003C7C .text:10003D94 LDR LR, [SP],#arg_4 .text:10003D98 BX LR .text:10003D98 ; End of function sub_10003D80 .text:10003D98 .text:10003D98 ; --------------------------------------------------------------------------- .text:10003D9C ALIGN 0x10 .text:10003DA0 dword_10003DA0 DCD 0xA ; DATA XREF: .text:10002F64o .text:10003DA4 DCD loc_10003374 .text:10003DA8 DCD loc_10003394 .text:10003DAC DCD sub_100033BC .text:10003DB0 DCD loc_10003398 .text:10003DB4 DCD loc_10003358 .text:10003DB8 DCD loc_10003360 .text:10003DBC DCD sub_100033C4 .text:10003DC0 DCD loc_10003364 .text:10003DC4 DCD loc_1000331C .text:10003DC8 DCD loc_1000332C .text:10003DCC DCD sub_100033CC .text:10003DD0 DCD loc_10003330 .text:10003DD4 DCD loc_10003298 .text:10003DD8 DCD loc_100032D4 .text:10003DDC DCD sub_100033D4 .text:10003DE0 DCD loc_100032D8 .text:10003DE4 DCD loc_10003210 .text:10003DE8 DCD loc_10003224 .text:10003DEC DCD sub_100033DC .text:10003DF0 DCD loc_10003228 .text:10003DF4 DCD loc_100031B4 .text:10003DF8 DCD loc_100031C8 .text:10003DFC DCD sub_100033E4 .text:10003E00 DCD loc_100031CC .text:10003E04 DCD loc_10003118 .text:10003E08 DCD loc_10003138 .text:10003E0C DCD sub_100033EC .text:10003E10 DCD loc_1000313C .text:10003E14 DCD loc_10003028 .text:10003E18 DCD loc_10003050 .text:10003E1C DCD sub_100033F4 .text:10003E20 DCD loc_10003054 .text:10003E24 DCD loc_1000300C .text:10003E28 DCD loc_10003014 .text:10003E2C DCD sub_100033FC .text:10003E30 DCD loc_10003018 .text:10003E34 DCD loc_10002FDC .text:10003E38 DCD loc_10002FEC .text:10003E3C DCD sub_10003404 .text:10003E40 DCD loc_10002FF0 .text:10003E44 dword_10003E44 DCD 2 ; DATA XREF: .text:10003594o .text:10003E48 DCD loc_10003750 .text:10003E4C DCD loc_10003770 .text:10003E50 DCD sub_10003794 .text:10003E54 DCD loc_10003774 .text:10003E58 DCD loc_10003608 .text:10003E5C DCD loc_100036E0 .text:10003E60 DCD sub_1000379C .text:10003E64 DCD loc_100036E8 .text:10003E68 dword_10003E68 DCD 1 ; DATA XREF: .text:10003800o .text:10003E6C DCD loc_1000381C .text:10003E70 DCD loc_10003878 .text:10003E74 DCD sub_1000388C .text:10003E78 DCD loc_1000387C .text:10003E7C dword_10003E7C DCD 1 ; DATA XREF: .text:100038ACo .text:10003E80 DCD loc_100038C0 .text:10003E84 DCD loc_10003908 .text:10003E88 DCD sub_1000391C .text:10003E8C DCD loc_1000390C .text:10003E90 DCD 0x3ED4, 0, 0 .text:10003E9C DCD 0x3F68, 0x5008, 0x3ECC, 0, 0 .text:10003EB0 DCD 0x3F74, 0x5000, 0, 0, 0, 0, 0 .text:10003ECC DCD 0x80000008, 0 .text:10003ED4 DCD 0x800001EF, 0x80000274, 0x800001F1, 0x80000273, 0x800001EC .text:10003ED4 DCD 0x80000229, 0x80000225, 0x80000224, 0x8000022B, 0x80000217 .text:10003ED4 DCD 0x8000022C, 0x80000414, 0x800006E4, 0x8000026D, 0x80000413 .text:10003ED4 DCD 0x80000003, 0x80000024, 0x800001F0, 0x800001C7, 0x800001CF .text:10003ED4 DCD 0x80000574, 0x80000002, 0x800005D8, 0x80000417, 0x80000005 .text:10003ED4 DCD 0x80000004, 0x80000205, 0x80000204, 0x80000057, 0x80000698 .text:10003ED4 DCD 0x800004D0, 0x80000013, 0x80000017, 0x80000014, 0x80000021 .text:10003ED4 DCD 0x800001EE, 0 .text:10003F68 DCD 0x45524F43, 0x2E4C4C44, 0x6C6C64, 0x44444543, 0x6C642E4B .text:10003F68 DCD 0x6C, 0 .text:10003F84 DCD 0xA60DF2D1, 0 .text:10003F8C DCD 0x400C, 1, 0xA, 0xA, 0x3FA8, 0x3FD0, 0x3FF8, 0x3464 .text:10003F8C DCD 0x2E88, 0x2F68, 0x2B48, 0x3460, 0x3424, 0x3438, 0x346C .text:10003F8C DCD 0x349C, 0x3484, 0x4019, 0x401F, 0x4026, 0x4030, 0x4035 .text:10003F8C DCD 0x403A, 0x4044, 0x404C, 0x4051, 0x4056, 0x10000, 0x30002 .text:10003F8C DCD 0x50004, 0x70006, 0x90008, 0x54544142, 0x52565244 .text:10003F8C DCD 0x6C6C642E, 0x6F6C4300, 0x44006573, 0x696E6965, 0x4F490074 .text:10003F8C DCD 0x746E6F43, 0x6C6F72, 0x74696E49, 0x65704F00, 0x6F50006E .text:10003F8C DCD 0x44726577, 0x6E776F, 0x65776F50, 0x705572, 0x64616552 .text:10003F8C DCD 0x65655300, 0x7257006B, 0x657469, 0, 0, 0, 0, 0, 0 .text:10003F8C DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text:10003F8C DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text:10003F8C DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text:10003F8C DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text:10003F8C DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text:10003F8C DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .text:10003F8C ; _text ends .text:10003F8C .idata:10005000 ; Section 2. (virtual address 00005000) .idata:10005000 ; Virtual size : 00000238 ( 568.) .idata:10005000 ; Section size in file : 00000200 ( 512.) .idata:10005000 ; Offset to raw data for section: 00003600 .idata:10005000 ; Flags C0000040: Data Readable Writable .idata:10005000 ; Alignment : default .idata:10005000 ; .idata:10005000 ; Imports from CEDDK.dll .idata:10005000 ; .idata:10005000 ; =========================================================================== .idata:10005000 .idata:10005000 ; Segment type: Externs .idata:10005000 IMPORT __imp_CEDDK_8 ; DATA XREF: .text:off_10003B74o .idata:10005004 .idata:10005008 ; .idata:10005008 ; Imports from COREDLL.dll .idata:10005008 ; .idata:10005008 IMPORT __imp_CreateEventW ; DATA XREF: .text:off_10003954o .idata:1000500C IMPORT __imp_InterruptDone ; DATA XREF: .text:off_10003964o .idata:10005010 IMPORT __imp_WaitForSingleObject .idata:10005010 ; DATA XREF: .text:off_10003974o .idata:10005014 IMPORT __imp_InterruptInitialize .idata:10005014 ; DATA XREF: .text:off_10003984o .idata:10005018 IMPORT __imp_CreateThread ; DATA XREF: .text:off_10003994o .idata:1000501C IMPORT __imp_CloseHandle ; DATA XREF: .text:off_100039A4o .idata:10005020 IMPORT __imp_MapViewOfFile ; DATA XREF: .text:off_100039B4o .idata:10005024 IMPORT __imp_CreateFileMappingW .idata:10005024 ; DATA XREF: .text:off_100039C4o .idata:10005028 IMPORT __imp_CreateMutexW ; DATA XREF: .text:off_100039D4o .idata:1000502C IMPORT __imp_GetTickCount ; DATA XREF: .text:off_100039E4o .idata:10005030 IMPORT __imp_ReleaseMutex ; DATA XREF: .text:off_100039F4o .idata:10005034 IMPORT __imp_memcpy ; DATA XREF: .text:off_10003A04o .idata:10005038 IMPORT __imp_PowerPolicyNotify .idata:10005038 ; DATA XREF: .text:off_10003A14o .idata:1000503C IMPORT __imp_CeSetThreadPriority .idata:1000503C ; DATA XREF: .text:off_10003A24o .idata:10005040 IMPORT __imp_memcmp ; DATA XREF: .text:off_10003A34o .idata:10005044 IMPORT __imp_DeleteCriticalSection .idata:10005044 ; DATA XREF: .text:off_10003A44o .idata:10005048 IMPORT __imp_LocalFree ; DATA XREF: .text:off_10003A54o .idata:1000504C IMPORT __imp_Sleep ; DATA XREF: .text:off_10003944o .idata:10005050 IMPORT __imp_RegCloseKey ; DATA XREF: .text:off_10003A74o .idata:10005054 IMPORT __imp_RegQueryValueExW .idata:10005054 ; DATA XREF: .text:off_10003A84o .idata:10005058 IMPORT __imp_OpenDeviceKey ; DATA XREF: .text:off_10003A94o .idata:1000505C IMPORT __imp_InitializeCriticalSection .idata:1000505C ; DATA XREF: .text:off_10003AA4o .idata:10005060 IMPORT __imp_OpenEventW ; DATA XREF: .text:off_10003AB4o .idata:10005064 IMPORT __imp_memset ; DATA XREF: .text:off_10003AC4o .idata:10005068 IMPORT __imp_LeaveCriticalSection .idata:10005068 ; DATA XREF: .text:off_10003AD4o .idata:1000506C IMPORT __imp_EnterCriticalSection .idata:1000506C ; DATA XREF: .text:off_10003AE4o .idata:10005070 IMPORT __imp_SetLastError ; DATA XREF: .text:off_10003AF4o .idata:10005074 IMPORT __imp_GetLastError ; DATA XREF: .text:off_10003B04o .idata:10005078 IMPORT __C_specific_handler ; DATA XREF: .text:off_10003B14o .idata:1000507C IMPORT __imp_CeSetPowerOnEvent .idata:1000507C ; DATA XREF: .text:off_10003B24o .idata:10005080 IMPORT __imp_DisableThreadLibraryCalls .idata:10005080 ; DATA XREF: .text:off_10003B34o .idata:10005084 IMPORT __imp_SystemTimeToFileTime .idata:10005084 ; DATA XREF: .text:off_10003B44o .idata:10005088 IMPORT __imp_GetLocalTime ; DATA XREF: .text:off_10003B54o .idata:1000508C IMPORT __imp_FileTimeToSystemTime .idata:1000508C ; DATA XREF: .text:off_10003B64o .idata:10005090 IMPORT __imp_LocalAlloc ; DATA XREF: .text:off_10003A64o .idata:10005094 IMPORT __imp_EventModify ; DATA XREF: .text:off_10003934o .idata:10005094 .data:10005098 ; =========================================================================== .data:10005098 .data:10005098 ; Segment type: Pure data .data:10005098 AREA .data, DATA, ALIGN=4 .data:10005098 ; ORG 0x10005098 .data:10005098 DCB 0 .data:10005099 DCB 0 .data:1000509A DCB 0 .data:1000509B DCB 0 .data:1000509C unk_1000509C DCB 0 ; DATA XREF: .text:off_10003C70o .data:1000509D DCB 0 .data:1000509E DCB 0 .data:1000509F DCB 0 .data:100050A0 unk_100050A0 DCB 0 ; DATA XREF: .text:off_10003C6Co .data:100050A1 DCB 0 .data:100050A2 DCB 0 .data:100050A3 DCB 0 .data:100050A4 unk_100050A4 DCB 0 ; DATA XREF: .text:off_10003C78o .data:100050A5 DCB 0 .data:100050A6 DCB 0 .data:100050A7 DCB 0 .data:100050A8 unk_100050A8 DCB 0 ; DATA XREF: .text:off_10003C74o .data:100050A9 DCB 0 .data:100050AA DCB 0 .data:100050AB DCB 0 .data:100050AC unk_100050AC DCB 0 ; DATA XREF: .text:off_10003D70o .data:100050AD DCB 0 .data:100050AE DCB 0 .data:100050AF DCB 0 .data:100050B0 unk_100050B0 DCB 0 ; DATA XREF: .text:off_10003D6Co .data:100050B1 DCB 0 .data:100050B2 DCB 0 .data:100050B3 DCB 0 .data:100050B4 unk_100050B4 DCB 0 ; DATA XREF: .text:off_10003D68o .data:100050B5 DCB 0 .data:100050B6 DCB 0 .data:100050B7 DCB 0 .data:100050B8 unk_100050B8 DCB 0 ; DATA XREF: .text:off_10003D64o .data:100050B9 DCB 0 .data:100050BA DCB 0 .data:100050BB DCB 0 .data:100050BC unk_100050BC DCD 0x64 ; d ; DATA XREF: .text:off_10001AC8o .data:100050BC ; .text:off_100020ECo ... .data:100050C0 unk_100050C0 DCD 1 ; DATA XREF: .text:off_10001C88o .data:100050C0 ; .text:off_10001FB4o .data:100050C4 DCB 0xFF .data:100050C5 DCB 0xFF .data:100050C6 DCB 0xFF .data:100050C7 DCB 0xFF .data:100050C8 DCB 0 .data:100050C9 DCB 0 .data:100050CA DCB 0 .data:100050CB DCB 0 .data:100050CC DCB 0 .data:100050CD DCB 0 .data:100050CE DCB 0 .data:100050CF DCB 0 .data:100050D0 DCB 0 .data:100050D1 DCB 0 .data:100050D2 DCB 0 .data:100050D3 DCB 0 .data:100050D4 DCB 0 .data:100050D5 DCB 0 .data:100050D6 DCB 0 .data:100050D7 DCB 0 .data:100050D8 DCB 0 .data:100050D9 DCB 0 .data:100050DA DCB 0 .data:100050DB DCB 0 .data:100050DC DCB 0 .data:100050DD DCB 0 .data:100050DE DCB 0 .data:100050DF DCB 0 .data:100050E0 unk_100050E0 DCB 0 ; DATA XREF: .text:off_100020F0o .data:100050E1 DCB 0 .data:100050E2 DCB 0 .data:100050E3 DCB 0 .data:100050E4 unk_100050E4 DCB 0 ; DATA XREF: .text:off_10002A5Co .data:100050E5 DCB 0 ; Charge calculated from unk_10005130 .data:100050E6 DCB 0 .data:100050E7 DCB 0 .data:100050E8 unk_100050E8 DCD 0 ; DATA XREF: .text:off_10001AD0o .data:100050E8 ; .text:off_10001B94o .data:100050EC DCD 0 .data:100050F0 DCD 0 .data:100050F4 DCD 0 .data:100050F8 unk_100050F8 DD p2v(0xa020b000) ; DATA XREF: .text:off_10001378o .data:100050F8 ; .text:off_100013E8o ... .data:100050FC unk_100050FC DD p2v(0x40e00000) ; DATA XREF: .text:off_10001C8Co .data:10005100 DCD 0 .data:10005104 DCB 0 .data:10005105 DCB 0 .data:10005106 DCB 0 .data:10005107 DCB 0 .data:10005108 DCB 0 .data:10005109 DCB 0 .data:1000510A DCB 0 .data:1000510B DCB 0 .data:1000510C DCB 0 .data:1000510D DCB 0 .data:1000510E DCB 0 .data:1000510F DCB 0 .data:10005110 DCB 0 .data:10005111 DCB 0 .data:10005112 DCB 0 .data:10005113 DCB 0 .data:10005114 DCB 0 .data:10005115 DCB 0 .data:10005116 DCB 0 .data:10005117 DCB 0 .data:10005118 DCB 0 .data:10005119 DCB 0 .data:1000511A DCB 0 .data:1000511B DCB 0 .data:1000511C DCB 0 .data:1000511D DCB 0 .data:1000511E DCB 0 .data:1000511F DCB 0 .data:10005120 DCB 0 .data:10005121 DCB 0 .data:10005122 DCB 0 .data:10005123 DCB 0 .data:10005124 DCB 0 .data:10005125 DCB 0 .data:10005126 DCB 0 .data:10005127 DCB 0 .data:10005128 DCB 0 .data:10005129 DCB 0 .data:1000512A DCB 0 .data:1000512B DCB 0 .data:1000512C DCB 0 .data:1000512D DCB 0 .data:1000512E DCB 0 .data:1000512F DCB 0 .data:10005130 unk_10005130 DCB 0 ; DATA XREF: .text:off_10001844o ;; unk_10005130 = Mean voltage .data:10005131 DCB 0 .data:10005132 DCB 0 .data:10005133 DCB 0 .data:10005134 DCB 0 .data:10005135 DCB 0 .data:10005136 DCB 0 .data:10005137 DCB 0 .data:10005138 DCB 0 .data:10005139 DCB 0 .data:1000513A DCB 0 .data:1000513B DCB 0 .data:1000513C DCB 0 .data:1000513D DCB 0 .data:1000513E DCB 0 .data:1000513F DCB 0 .data:10005140 DCD 0 .data:10005144 DCB 0 .data:10005145 DCB 0 .data:10005146 DCB 0 .data:10005147 DCB 0 .data:10005148 DCB 0 .data:10005149 DCB 0 .data:1000514A DCB 0 .data:1000514B DCB 0 .data:1000514C DCB 0 .data:1000514D DCB 0 .data:1000514E DCB 0 .data:1000514F DCB 0 .data:10005150 DCB 0 .data:10005151 DCB 0 .data:10005152 DCB 0 .data:10005153 DCB 0 .data:10005154 unk_10005154 DCB 0 ; DATA XREF: .text:off_10003588o .data:10005154 ; .text:off_100037B4o ... .data:10005155 DCB 0 .data:10005156 DCB 0 .data:10005157 DCB 0 .data:10005158 unk_10005158 DCB 0 ; DATA XREF: .text:off_1000358Co .data:10005158 ; .text:off_100037B8o ... .data:10005159 DCB 0 .data:1000515A DCB 0 .data:1000515B DCB 0 .data:1000515C DCB 0 .data:1000515D DCB 0 .data:1000515E DCB 0 .data:1000515F DCB 0 .data:10005160 unk_10005160 DCB 0 ; DATA XREF: .text:off_100037B0o .data:10005160 ; .text:off_100038A4o ... .data:10005161 DCB 0 .data:10005162 DCB 0 .data:10005163 DCB 0 .data:10005164 DCB 0 .data:10005165 DCB 0 .data:10005166 DCB 0 .data:10005167 DCB 0 .data:10005168 unk_10005168 DCB 0 ; DATA XREF: .text:off_10003580o .data:10005168 ; .text:off_10003894o .data:10005169 DCB 0 .data:1000516A DCB 0 .data:1000516B DCB 0 .data:1000516C unk_1000516C DCB 0 ; DATA XREF: .text:off_100037BCo .data:1000516D DCB 0 .data:1000516E DCB 0 .data:1000516F DCB 0 .data:10005170 unk_10005170 DCB 0 ; DATA XREF: .text:off_10003584o .data:10005170 ; .text:off_100038A0o .data:10005171 DCB 0 .data:10005172 DCB 0 .data:10005173 DCB 0 .data:10005174 DCB 0 .data:10005175 DCB 0 .data:10005176 DCB 0 .data:10005177 DCB 0 .data:10005178 DCB 0 .data:10005179 DCB 0 .data:1000517A DCB 0 .data:1000517B DCB 0 .data:1000517C DCB 0 .data:1000517D DCB 0 .data:1000517E DCB 0 .data:1000517F DCB 0 .data:10005180 unk_10005180 DCB 0 ; DATA XREF: .text:off_10002E4Co .data:10005180 ; .text:off_10002F44o ... .data:10005181 DCB 0 .data:10005182 DCB 0 .data:10005183 DCB 0 .data:10005184 DCB 0 .data:10005185 DCB 0 .data:10005186 DCB 0 .data:10005187 DCB 0 .data:10005188 DCB 0 .data:10005189 DCB 0 .data:1000518A DCB 0 .data:1000518B DCB 0 .data:1000518C DCB 0 .data:1000518D DCB 0 .data:1000518E DCB 0 .data:1000518F DCB 0 .data:10005190 DCB 0 .data:10005191 DCB 0 .data:10005192 DCB 0 .data:10005193 DCB 0 .data:10005194 DCB 0 .data:10005195 DCB 0 .data:10005196 DCB 0 .data:10005197 DCB 0 .data:10005198 DCB 0 .data:10005199 DCB 0 .data:1000519A DCB 0 .data:1000519B DCB 0 .data:1000519C DCB 0 .data:1000519D DCB 0 .data:1000519E DCB 0 .data:1000519F DCB 0 .data:100051A0 unk_100051A0 DCB 0 ; DATA XREF: .text:off_10002E74o .data:100051A1 DCB 0 .data:100051A2 DCB 0 .data:100051A3 DCB 0 .data:100051A4 DCB 0 .data:100051A5 DCB 0 .data:100051A6 DCB 0 .data:100051A7 DCB 0 .data:100051A8 DCB 0 .data:100051A9 DCB 0 .data:100051AA DCB 0 .data:100051AB DCB 0 .data:100051AC DCB 0 .data:100051AD DCB 0 .data:100051AE DCB 0 .data:100051AF DCB 0 .data:100051B0 DCB 0 .data:100051B1 DCB 0 .data:100051B2 DCB 0 .data:100051B3 DCB 0 .data:100051B4 DCB 0 .data:100051B5 DCB 0 .data:100051B6 DCB 0 .data:100051B7 DCB 0 .data:100051B8 DCB 0 .data:100051B9 DCB 0 .data:100051BA DCB 0 .data:100051BB DCB 0 .data:100051BC DCB 0 .data:100051BD DCB 0 .data:100051BE DCB 0 .data:100051BF DCB 0 .data:100051C0 DCB 0 .data:100051C1 DCB 0 .data:100051C2 DCB 0 .data:100051C3 DCB 0 .data:100051C4 DCB 0 .data:100051C5 DCB 0 .data:100051C6 DCB 0 .data:100051C7 DCB 0 .data:100051C8 DCB 0 .data:100051C9 DCB 0 .data:100051CA DCB 0 .data:100051CB DCB 0 .data:100051CC DCB 0 .data:100051CD DCB 0 .data:100051CE DCB 0 .data:100051CF DCB 0 .data:100051D0 DCB 0 .data:100051D1 DCB 0 .data:100051D2 DCB 0 .data:100051D3 DCB 0 .data:100051D4 DCB 0 .data:100051D5 DCB 0 .data:100051D6 DCB 0 .data:100051D7 DCB 0 .data:100051D8 DCB 0 .data:100051D9 DCB 0 .data:100051DA DCB 0 .data:100051DB DCB 0 .data:100051DC DCB 0 .data:100051DD DCB 0 .data:100051DE DCB 0 .data:100051DF DCB 0 .data:100051E0 unk_100051E0 DCB 0 ; DATA XREF: .text:off_10002B40o .data:100051E0 ; .text:off_10002E60o ... .data:100051E1 DCB 0 .data:100051E2 DCB 0 .data:100051E3 DCB 0 .data:100051E4 unk_100051E4 DCB 0 ; DATA XREF: .text:off_10002E7Co .data:100051E4 ; .text:off_10003410o .data:100051E5 DCB 0 .data:100051E6 DCB 0 .data:100051E7 DCB 0 .data:100051E8 DCB 0 .data:100051E9 DCB 0 .data:100051EA DCB 0 .data:100051EB DCB 0 .data:100051EC DCB 0 .data:100051ED DCB 0 .data:100051EE DCB 0 .data:100051EF DCB 0 .data:100051F0 DCB 0 .data:100051F1 DCB 0 .data:100051F2 DCB 0 .data:100051F3 DCB 0 .data:100051F4 DCB 0 .data:100051F5 DCB 0 .data:100051F6 DCB 0 .data:100051F7 DCB 0 .data:100051F8 DCB 0 .data:100051F9 DCB 0 .data:100051FA DCB 0 .data:100051FB DCB 0 .data:100051FC DCB 0 .data:100051FD DCB 0 .data:100051FE DCB 0 .data:100051FF DCB 0 .data:10005200 unk_10005200 % 1 ; DATA XREF: .text:off_10002E50o .data:10005200 ; .text:off_10002F48o ... .data:10005201 % 1 .data:10005202 % 1 .data:10005203 % 1 .data:10005204 % 1 .data:10005205 % 1 .data:10005206 % 1 .data:10005207 % 1 .data:10005208 % 1 .data:10005209 % 1 .data:1000520A % 1 .data:1000520B % 1 .data:1000520C % 1 .data:1000520D % 1 .data:1000520E % 1 .data:1000520F % 1 .data:10005210 % 1 .data:10005211 % 1 .data:10005212 % 1 .data:10005213 % 1 .data:10005214 unk_10005214 % 1 ; DATA XREF: .text:off_10002E5Co .data:10005214 ; .text:off_10002F4Co ... .data:10005215 % 1 .data:10005216 % 1 .data:10005217 % 1 .data:10005218 unk_10005218 % 1 ; DATA XREF: .text:off_10002E80o .data:10005218 ; .text:off_10002F50o ... .data:10005219 % 1 .data:1000521A % 1 .data:1000521B % 1 .data:1000521C unk_1000521C % 1 ; DATA XREF: .text:off_10002E78o .data:1000521C ; .text:off_100037A8o .data:1000521D % 1 .data:1000521E % 1 .data:1000521F % 1 .data:10005220 unk_10005220 % 1 ; DATA XREF: .text:off_10002B44o .data:10005220 ; .text:off_10002E54o ... .data:10005221 % 1 .data:10005222 % 1 .data:10005223 % 1 .data:10005224 unk_10005224 % 1 ; DATA XREF: .text:off_10002E68o .data:10005224 ; .text:off_10002F5Co .data:10005225 % 1 .data:10005226 % 1 .data:10005227 % 1 .data:10005228 unk_10005228 % 1 ; DATA XREF: .text:off_10003D74o .data:10005229 % 1 .data:1000522A % 1 .data:1000522B % 1 .data:1000522C unk_1000522C % 1 ; DATA XREF: .text:off_10003D78o .data:1000522D % 1 .data:1000522E % 1 .data:1000522F % 1 .data:10005230 unk_10005230 % 1 ; DATA XREF: .text:off_10003D7Co .data:10005231 % 1 .data:10005232 % 1 .data:10005233 % 1 .data:10005234 unk_10005234 % 1 ; DATA XREF: .text:off_10003C0Co .data:10005235 % 1 .data:10005236 % 1 .data:10005237 % 1 .data:10005237 ; _data ends .data:10005237 .pdata:10006000 ; Section 3. (virtual address 00006000) .pdata:10006000 ; Virtual size : 000001B0 ( 432.) .pdata:10006000 ; Section size in file : 00000200 ( 512.) .pdata:10006000 ; Offset to raw data for section: 00003800 .pdata:10006000 ; Flags 40000040: Data Readable .pdata:10006000 ; Alignment : default .pdata:10006000 ; =========================================================================== .pdata:10006000 .pdata:10006000 ; Segment type: Pure data .pdata:10006000 AREA .pdata, DATA, READONLY, ALIGN=4 .pdata:10006000 ; ORG 0x10006000 .pdata:10006000 DCD sub_100012C4 .pdata:10006004 DCB 0 .pdata:10006005 DCB 2 .pdata:10006006 DCB 0 .pdata:10006007 DCB 0x40 ; @ .pdata:10006008 DCD nullsub_1 .pdata:1000600C DCB 0 .pdata:1000600D DCB 1 .pdata:1000600E DCB 0 .pdata:1000600F DCB 0x40 ; @ .pdata:10006010 DCD nullsub_3 .pdata:10006014 DCB 0 .pdata:10006015 DCB 1 .pdata:10006016 DCB 0 .pdata:10006017 DCB 0x40 ; @ .pdata:10006018 DCD nullsub_2 .pdata:1000601C DCB 0 .pdata:1000601D DCB 1 .pdata:1000601E DCB 0 .pdata:1000601F DCB 0x40 ; @ .pdata:10006020 DCD sub_100012D8 .pdata:10006024 DCB 1 .pdata:10006025 DCB 4 .pdata:10006026 DCB 0 .pdata:10006027 DCB 0x40 ; @ .pdata:10006028 DCD sub_100012E8 .pdata:1000602C DCB 1 .pdata:1000602D DCB 4 .pdata:1000602E DCB 0 .pdata:1000602F DCB 0x40 ; @ .pdata:10006030 DCD sub_100012F8 .pdata:10006034 DCB 1 .pdata:10006035 DCB 4 .pdata:10006036 DCB 0 .pdata:10006037 DCB 0x40 ; @ .pdata:10006038 DCD sub_10001308 .pdata:1000603C DCB 0 .pdata:1000603D DCB 2 .pdata:1000603E DCB 0 .pdata:1000603F DCB 0x40 ; @ .pdata:10006040 DCD sub_10001310 .pdata:10006044 DCB 0 .pdata:10006045 DCB 2 .pdata:10006046 DCB 0 .pdata:10006047 DCB 0x40 ; @ .pdata:10006048 DCD sub_10001318 .pdata:1000604C DCB 1 .pdata:1000604D DCB 0x19 .pdata:1000604E DCB 0 .pdata:1000604F DCB 0x40 ; @ .pdata:10006050 DCD sub_1000137C .pdata:10006054 DCB 1 .pdata:10006055 DCB 0x1D .pdata:10006056 DCB 0 .pdata:10006057 DCB 0x40 ; @ .pdata:10006058 DCD sub_100013F0 .pdata:1000605C DCB 1 .pdata:1000605D DCB 0x1B .pdata:1000605E DCB 0 .pdata:1000605F DCB 0x40 ; @ .pdata:10006060 DCD sub_1000145C .pdata:10006064 DCB 0 .pdata:10006065 DCB 0xFB ; ¹ .pdata:10006066 DCB 0 .pdata:10006067 DCB 0x40 ; @ .pdata:10006068 DCD sub_10001848 .pdata:1000606C DCB 1 .pdata:1000606D DCB 0xA3 ; ú .pdata:1000606E DCB 0 .pdata:1000606F DCB 0x40 ; @ .pdata:10006070 DCD sub_10001AD4 .pdata:10006074 DCB 0 .pdata:10006075 DCB 0x31 ; 1 .pdata:10006076 DCB 0 .pdata:10006077 DCB 0x40 ; @ .pdata:10006078 DCD sub_10001B98 .pdata:1000607C DCB 1 .pdata:1000607D DCB 0x3F ; ? .pdata:1000607E DCB 0 .pdata:1000607F DCB 0x40 ; @ .pdata:10006080 DCD sub_10001C94 .pdata:10006084 DCB 2 .pdata:10006085 DCB 0xCD ; - .pdata:10006086 DCB 0 .pdata:10006087 DCB 0x40 ; @ .pdata:10006088 DCD sub_10001FC8 .pdata:1000608C DCB 1 .pdata:1000608D DCB 0x4B ; K .pdata:1000608E DCB 0 .pdata:1000608F DCB 0x40 ; @ .pdata:10006090 DCD sub_100020F4 .pdata:10006094 DCB 1 .pdata:10006095 DCB 0x5B ; [ .pdata:10006096 DCB 2 .pdata:10006097 DCB 0x40 ; @ .pdata:10006098 DCD sub_10002A60 .pdata:1000609C DCB 2 .pdata:1000609D DCB 0x3A ; : .pdata:1000609E DCB 0 .pdata:1000609F DCB 0x40 ; @ .pdata:100060A0 DCD Init .pdata:100060A4 DCB 2 .pdata:100060A5 DCB 0xD0 ; ð .pdata:100060A6 DCB 0 .pdata:100060A7 DCB 0x40 ; @ .pdata:100060A8 DCD Deinit .pdata:100060AC DCB 1 .pdata:100060AD DCB 0x36 ; 6 .pdata:100060AE DCB 0 .pdata:100060AF DCB 0x40 ; @ .pdata:100060B0 DCD IOControl .pdata:100060B4 DCB 4 .pdata:100060B5 DCB 0x15 .pdata:100060B6 DCB 1 .pdata:100060B7 DCB 0xC0 ; + .pdata:100060B8 DCD sub_100033BC .pdata:100060BC DCB 0 .pdata:100060BD DCB 2 .pdata:100060BE DCB 0 .pdata:100060BF DCB 0x40 ; @ .pdata:100060C0 DCD sub_100033C4 .pdata:100060C4 DCB 0 .pdata:100060C5 DCB 2 .pdata:100060C6 DCB 0 .pdata:100060C7 DCB 0x40 ; @ .pdata:100060C8 DCD sub_100033CC .pdata:100060CC DCB 0 .pdata:100060CD DCB 2 .pdata:100060CE DCB 0 .pdata:100060CF DCB 0x40 ; @ .pdata:100060D0 DCD sub_100033D4 .pdata:100060D4 DCB 0 .pdata:100060D5 DCB 2 .pdata:100060D6 DCB 0 .pdata:100060D7 DCB 0x40 ; @ .pdata:100060D8 DCD sub_100033DC .pdata:100060DC DCB 0 .pdata:100060DD DCB 2 .pdata:100060DE DCB 0 .pdata:100060DF DCB 0x40 ; @ .pdata:100060E0 DCD sub_100033E4 .pdata:100060E4 DCB 0 .pdata:100060E5 DCB 2 .pdata:100060E6 DCB 0 .pdata:100060E7 DCB 0x40 ; @ .pdata:100060E8 DCD sub_100033EC .pdata:100060EC DCB 0 .pdata:100060ED DCB 2 .pdata:100060EE DCB 0 .pdata:100060EF DCB 0x40 ; @ .pdata:100060F0 DCD sub_100033F4 .pdata:100060F4 DCB 0 .pdata:100060F5 DCB 2 .pdata:100060F6 DCB 0 .pdata:100060F7 DCB 0x40 ; @ .pdata:100060F8 DCD sub_100033FC .pdata:100060FC DCB 0 .pdata:100060FD DCB 2 .pdata:100060FE DCB 0 .pdata:100060FF DCB 0x40 ; @ .pdata:10006100 DCD sub_10003404 .pdata:10006104 DCB 0 .pdata:10006105 DCB 8 .pdata:10006106 DCB 0 .pdata:10006107 DCB 0x40 ; @ .pdata:10006108 DCD PowerDown .pdata:1000610C DCB 1 .pdata:1000610D DCB 5 .pdata:1000610E DCB 0 .pdata:1000610F DCB 0x40 ; @ .pdata:10006110 DCD PowerUp .pdata:10006114 DCB 1 .pdata:10006115 DCB 0xA .pdata:10006116 DCB 0 .pdata:10006117 DCB 0x40 ; @ .pdata:10006118 DCD Open .pdata:1000611C DCB 0 .pdata:1000611D DCB 1 .pdata:1000611E DCB 0 .pdata:1000611F DCB 0x40 ; @ .pdata:10006120 DCD Close .pdata:10006124 DCB 0 .pdata:10006125 DCB 2 .pdata:10006126 DCB 0 .pdata:10006127 DCB 0x40 ; @ .pdata:10006128 DCD Read .pdata:1000612C DCB 1 .pdata:1000612D DCB 6 .pdata:1000612E DCB 0 .pdata:1000612F DCB 0x40 ; @ .pdata:10006130 DCD Write .pdata:10006134 DCB 1 .pdata:10006135 DCB 6 .pdata:10006136 DCB 0 .pdata:10006137 DCB 0x40 ; @ .pdata:10006138 DCD Seek .pdata:1000613C DCB 0 .pdata:1000613D DCB 2 .pdata:1000613E DCB 0 .pdata:1000613F DCB 0x40 ; @ .pdata:10006140 DCD sub_100034A4 .pdata:10006144 DCB 1 .pdata:10006145 DCB 6 .pdata:10006146 DCB 0 .pdata:10006147 DCB 0x40 ; @ .pdata:10006148 DCD sub_100034BC .pdata:1000614C DCB 1 .pdata:1000614D DCB 0x35 ; 5 .pdata:1000614E DCB 0 .pdata:1000614F DCB 0x40 ; @ .pdata:10006150 DCD sub_10003598 .pdata:10006154 DCB 5 .pdata:10006155 DCB 0x7F ;  .pdata:10006156 DCB 0 .pdata:10006157 DCB 0xC0 ; + .pdata:10006158 DCD sub_10003794 .pdata:1000615C DCB 0 .pdata:1000615D DCB 2 .pdata:1000615E DCB 0 .pdata:1000615F DCB 0x40 ; @ .pdata:10006160 DCD sub_1000379C .pdata:10006164 DCB 0 .pdata:10006165 DCB 0xB .pdata:10006166 DCB 0 .pdata:10006167 DCB 0x40 ; @ .pdata:10006168 DCD sub_100037C8 .pdata:1000616C DCB 1 .pdata:1000616D DCB 0xD .pdata:1000616E DCB 0 .pdata:1000616F DCB 0x40 ; @ .pdata:10006170 DCD sub_10003804 .pdata:10006174 DCB 3 .pdata:10006175 DCB 0x22 ; " .pdata:10006176 DCB 0 .pdata:10006177 DCB 0xC0 ; + .pdata:10006178 DCD sub_1000388C .pdata:1000617C DCB 0 .pdata:1000617D DCB 7 .pdata:1000617E DCB 0 .pdata:1000617F DCB 0x40 ; @ .pdata:10006180 DCD sub_100038B0 .pdata:10006184 DCB 3 .pdata:10006185 DCB 0x1B .pdata:10006186 DCB 0 .pdata:10006187 DCB 0xC0 ; + .pdata:10006188 DCD sub_1000391C .pdata:1000618C DCB 0 .pdata:1000618D DCB 3 .pdata:1000618E DCB 0 .pdata:1000618F DCB 0x40 ; @ .pdata:10006190 DCD start .pdata:10006194 DCB 1 .pdata:10006195 DCB 0x26 ; & .pdata:10006196 DCB 0 .pdata:10006197 DCB 0x40 ; @ .pdata:10006198 DCD sub_10003C10 .pdata:1000619C DCB 1 .pdata:1000619D DCB 0x1B .pdata:1000619E DCB 0 .pdata:1000619F DCB 0x40 ; @ .pdata:100061A0 DCD sub_10003C7C .pdata:100061A4 DCB 1 .pdata:100061A5 DCB 0x41 ; A .pdata:100061A6 DCB 0 .pdata:100061A7 DCB 0x40 ; @ .pdata:100061A8 DCD sub_10003D80 .pdata:100061AC DCB 1 .pdata:100061AD DCB 7 .pdata:100061AE DCB 0 .pdata:100061AF DCB 0x40 ; @ .pdata:100061B0 DCB 0 .pdata:100061B1 DCB 0 .pdata:100061B2 DCB 0 .pdata:100061B3 DCB 0 .pdata:100061B4 DCB 0 .pdata:100061B5 DCB 0 .pdata:100061B6 DCB 0 .pdata:100061B7 DCB 0 .pdata:100061B8 DCB 0 .pdata:100061B9 DCB 0 .pdata:100061BA DCB 0 .pdata:100061BB DCB 0 .pdata:100061BC DCB 0 .pdata:100061BD DCB 0 .pdata:100061BE DCB 0 .pdata:100061BF DCB 0 .pdata:100061C0 DCB 0 .pdata:100061C1 DCB 0 .pdata:100061C2 DCB 0 .pdata:100061C3 DCB 0 .pdata:100061C4 DCB 0 .pdata:100061C5 DCB 0 .pdata:100061C6 DCB 0 .pdata:100061C7 DCB 0 .pdata:100061C8 DCB 0 .pdata:100061C9 DCB 0 .pdata:100061CA DCB 0 .pdata:100061CB DCB 0 .pdata:100061CC DCB 0 .pdata:100061CD DCB 0 .pdata:100061CE DCB 0 .pdata:100061CF DCB 0 .pdata:100061D0 DCB 0 .pdata:100061D1 DCB 0 .pdata:100061D2 DCB 0 .pdata:100061D3 DCB 0 .pdata:100061D4 DCB 0 .pdata:100061D5 DCB 0 .pdata:100061D6 DCB 0 .pdata:100061D7 DCB 0 .pdata:100061D8 DCB 0 .pdata:100061D9 DCB 0 .pdata:100061DA DCB 0 .pdata:100061DB DCB 0 .pdata:100061DC DCB 0 .pdata:100061DD DCB 0 .pdata:100061DE DCB 0 .pdata:100061DF DCB 0 .pdata:100061E0 DCB 0 .pdata:100061E1 DCB 0 .pdata:100061E2 DCB 0 .pdata:100061E3 DCB 0 .pdata:100061E4 DCB 0 .pdata:100061E5 DCB 0 .pdata:100061E6 DCB 0 .pdata:100061E7 DCB 0 .pdata:100061E8 DCB 0 .pdata:100061E9 DCB 0 .pdata:100061EA DCB 0 .pdata:100061EB DCB 0 .pdata:100061EC DCB 0 .pdata:100061ED DCB 0 .pdata:100061EE DCB 0 .pdata:100061EF DCB 0 .pdata:100061F0 DCB 0 .pdata:100061F1 DCB 0 .pdata:100061F2 DCB 0 .pdata:100061F3 DCB 0 .pdata:100061F4 DCB 0 .pdata:100061F5 DCB 0 .pdata:100061F6 DCB 0 .pdata:100061F7 DCB 0 .pdata:100061F8 DCB 0 .pdata:100061F9 DCB 0 .pdata:100061FA DCB 0 .pdata:100061FB DCB 0 .pdata:100061FC DCB 0 .pdata:100061FD DCB 0 .pdata:100061FE DCB 0 .pdata:100061FF DCB 0 .pdata:100061FF ; _pdata ends .pdata:100061FF .pdata:100061FF END start