| 395 | | // Required subs: |
|---|
| 396 | | // Startup -> FFC1C6C4 -> FFC1C294 -> FFC5E6C0 -> uAC_Boot -> CreateTask_InitFileModules -> task_InitFileModules -> FFC5A4E8 -> FFC3F0CC -> FFC3EF08 -> FFC3EDA0 |
|---|
| 397 | | // \->FFC5F474 -> FFC5F410 ->/| |
|---|
| 398 | | // -> StartFactoryModeController =>|| |
|---|
| 399 | | // |
|---|
| 400 | | // uAC_Boot: FFC5E06C |
|---|
| 401 | | // CreateTask_InitFileModules: FFC5F7A4 |
|---|
| 402 | | // task_InitFileModules: FFC5F754 |
|---|
| 403 | | |
|---|
| 404 | | /* |
|---|
| 405 | | void __attribute__((naked,noinline)) sub_FFC1C6C4_my() { //#fs |
|---|
| | 399 | |
|---|
| | 400 | // Extracted method: sub_FF82C8E4 (FF82C8E4-FF82C928) |
|---|
| | 401 | // Overridden calls: |
|---|
| | 402 | // sub_FF82C3F0 |
|---|
| | 403 | void __attribute__((naked,noinline)) sub_FF82C8E4_my() { //#fs |
|---|
| | 404 | asm volatile ( |
|---|
| | 405 | "STMFD SP!, {R4,LR}\n" |
|---|
| | 406 | "BL sub_FF86DC24\n" |
|---|
| | 407 | "BL _IsFactoryMode\n" |
|---|
| | 408 | "CMP R0, #1\n" |
|---|
| | 409 | "BNE loc_FF82C904\n" |
|---|
| | 410 | "BL sub_FF870E44\n" |
|---|
| | 411 | "LDMFD SP!, {R4,LR}\n" |
|---|
| | 412 | "B _StartFactoryModeController\n" |
|---|
| | 413 | |
|---|
| | 414 | |
|---|
| | 415 | "loc_FF82C904:\n" |
|---|
| | 416 | "BL sub_FF86FE00\n" |
|---|
| | 417 | "LDR R4, =0x1DD0\n" |
|---|
| | 418 | "LDR R0, [R4,#4]\n" |
|---|
| | 419 | "CMP R0, #0\n" |
|---|
| | 420 | "LDMNEFD SP!, {R4,PC}\n" |
|---|
| | 421 | "MOV R1, #0\n" |
|---|
| | 422 | "LDR R0, =sub_FF82C3F0_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 423 | "BL _CreateController\n" |
|---|
| | 424 | "STR R0, [R4,#4]\n" |
|---|
| | 425 | "LDMFD SP!, {R4,PC}\n" |
|---|
| | 426 | ); |
|---|
| | 427 | }; //#fe |
|---|
| | 428 | |
|---|
| | 429 | // Extracted method: sub_FF82C3F0 (FF82C3F0-FF82C8E0) |
|---|
| | 430 | // Overridden calls: |
|---|
| | 431 | // sub_FF82C1B0 |
|---|
| | 432 | // sub_FF86FB00 |
|---|
| | 433 | // sub_FF870B0C |
|---|
| | 434 | void __attribute__((naked,noinline)) sub_FF82C3F0_my() { |
|---|
| | 435 | asm volatile ( |
|---|
| | 436 | " STMFD SP!, {R3-R11,LR}\n" |
|---|
| | 437 | " LDR R6, =0x1DD0\n" |
|---|
| | 438 | " MOV R5, R1\n" |
|---|
| | 439 | " LDR R0, [R6,#0x14]\n" |
|---|
| | 440 | " MOV R4, R3\n" |
|---|
| | 441 | " CMP R0, #1\n" |
|---|
| | 442 | " BNE loc_FF82C414\n" |
|---|
| | 443 | " BL sub_FF86E44C\n" |
|---|
| | 444 | " B loc_FF82C814\n" |
|---|
| | 445 | |
|---|
| | 446 | |
|---|
| | 447 | "loc_FF82C414:\n" // CODE XREF: sub_FF82C3F0+18j |
|---|
| | 448 | " LDR R12, =0x1162\n" |
|---|
| | 449 | " LDR R10, =0x1005\n" |
|---|
| | 450 | " CMP R5, R12\n" |
|---|
| | 451 | " MOV R7, #0\n" |
|---|
| | 452 | " MOV R8, #1\n" |
|---|
| | 453 | " BEQ loc_FF82C840\n" |
|---|
| | 454 | " BGT loc_FF82C568\n" |
|---|
| | 455 | " LDR R12, =0x1062\n" |
|---|
| | 456 | " CMP R5, R12\n" |
|---|
| | 457 | " BEQ loc_FF82C8DC\n" |
|---|
| | 458 | " BGT loc_FF82C4DC\n" |
|---|
| | 459 | " CMP R5, R10\n" |
|---|
| | 460 | " BEQ loc_FF82C86C\n" |
|---|
| | 461 | " BGT loc_FF82C4B4\n" |
|---|
| | 462 | " LDR R9, =0x9A3\n" |
|---|
| | 463 | " CMP R5, R9\n" |
|---|
| | 464 | " ADD R10, R9, #2\n" |
|---|
| | 465 | " BEQ loc_FF82C7F4\n" |
|---|
| | 466 | " BGT loc_FF82C494\n" |
|---|
| | 467 | " SUB R12, R5, #0x800\n" |
|---|
| | 468 | " SUBS R12, R12, #3\n" |
|---|
| | 469 | " BEQ loc_FF82C6EC\n" |
|---|
| | 470 | " SUB R12, R5, #0x800\n" |
|---|
| | 471 | " SUBS R12, R12, #0x158\n" |
|---|
| | 472 | " BNE loc_FF82C830\n" |
|---|
| | 473 | " TST R4, #0x80000000\n" |
|---|
| | 474 | " MOVNE R0, #1\n" |
|---|
| | 475 | " BNE locret_FF82C750\n" |
|---|
| | 476 | " BL sub_FF8781D0\n" |
|---|
| | 477 | " CMP R0, #0\n" |
|---|
| | 478 | " BLEQ sub_FF828A3C\n" |
|---|
| | 479 | " B loc_FF82C814\n" |
|---|
| | 480 | |
|---|
| | 481 | |
|---|
| | 482 | "loc_FF82C494:\n" // CODE XREF: sub_FF82C3F0+6Cj |
|---|
| | 483 | " CMP R5, R10\n" |
|---|
| | 484 | " BEQ loc_FF82C7F4\n" |
|---|
| | 485 | " SUB R12, R5, #0x1000\n" |
|---|
| | 486 | " SUBS R12, R12, #3\n" |
|---|
| | 487 | " BNE loc_FF82C830\n" |
|---|
| | 488 | " BL sub_FF82C324\n" |
|---|
| | 489 | " MOV R1, R4\n" |
|---|
| | 490 | " B loc_FF82C838\n" |
|---|
| | 491 | |
|---|
| | 492 | |
|---|
| | 493 | "loc_FF82C4B4:\n" // CODE XREF: sub_FF82C3F0+58j |
|---|
| | 494 | " SUB R12, R5, #0x1000\n" |
|---|
| | 495 | " SUBS R12, R12, #0x56\n" |
|---|
| | 496 | " SUBNE R12, R5, #0x1000\n" |
|---|
| | 497 | " SUBNES R12, R12, #0x5B\n" |
|---|
| | 498 | " SUBNE R12, R5, #0x1000\n" |
|---|
| | 499 | " SUBNES R12, R12, #0x5E\n" |
|---|
| | 500 | " SUBNE R12, R5, #0x1000\n" |
|---|
| | 501 | " SUBNES R12, R12, #0x61\n" |
|---|
| | 502 | " BNE loc_FF82C830\n" |
|---|
| | 503 | " B loc_FF82C8DC\n" |
|---|
| | 504 | |
|---|
| | 505 | |
|---|
| | 506 | "loc_FF82C4DC:\n" // CODE XREF: sub_FF82C3F0+4Cj |
|---|
| | 507 | " LDR R12, =0x10AD\n" |
|---|
| | 508 | " CMP R5, R12\n" |
|---|
| | 509 | " BEQ loc_FF82C85C\n" |
|---|
| | 510 | " BGT loc_FF82C52C\n" |
|---|
| | 511 | " SUB R12, R5, #0x1000\n" |
|---|
| | 512 | " SUBS R12, R12, #0x63\n" |
|---|
| | 513 | " SUBNE R12, R5, #0x1000\n" |
|---|
| | 514 | " SUBNES R12, R12, #0x65\n" |
|---|
| | 515 | " BEQ loc_FF82C8DC\n" |
|---|
| | 516 | " SUB R12, R5, #0x1000\n" |
|---|
| | 517 | " LDR R0, =0x10A3\n" |
|---|
| | 518 | " SUBS R12, R12, #0xA9\n" |
|---|
| | 519 | " BEQ loc_FF82C850\n" |
|---|
| | 520 | " SUB R12, R5, #0x1000\n" |
|---|
| | 521 | " SUBS R12, R12, #0xAA\n" |
|---|
| | 522 | " BNE loc_FF82C830\n" |
|---|
| | 523 | " BL _IsControlEventActive\n" |
|---|
| | 524 | " CMP R0, #0\n" |
|---|
| | 525 | " BEQ loc_FF82C868\n" |
|---|
| | 526 | " B loc_FF82C814\n" |
|---|
| | 527 | |
|---|
| | 528 | |
|---|
| | 529 | "loc_FF82C52C:\n" // CODE XREF: sub_FF82C3F0+F8j |
|---|
| | 530 | " SUB R12, R5, #0x1000\n" |
|---|
| | 531 | " SUBS R12, R12, #0xAE\n" |
|---|
| | 532 | " BEQ loc_FF82C868\n" |
|---|
| | 533 | " SUB R12, R5, #0x1000\n" |
|---|
| | 534 | " SUBS R12, R12, #0xAF\n" |
|---|
| | 535 | " BEQ loc_FF82C85C\n" |
|---|
| | 536 | " SUB R12, R5, #0x1000\n" |
|---|
| | 537 | " SUBS R12, R12, #0xB0\n" |
|---|
| | 538 | " BEQ loc_FF82C868\n" |
|---|
| | 539 | " SUB R12, R5, #0x1000\n" |
|---|
| | 540 | " SUBS R12, R12, #0xB2\n" |
|---|
| | 541 | " BNE loc_FF82C830\n" |
|---|
| | 542 | " LDR R0, =0x1008\n" |
|---|
| | 543 | " MOV R1, R4\n" |
|---|
| | 544 | " B loc_FF82C838\n" |
|---|
| | 545 | |
|---|
| | 546 | |
|---|
| | 547 | "loc_FF82C568:\n" // CODE XREF: sub_FF82C3F0+3Cj |
|---|
| | 548 | " LDR R11, =0x201B\n" |
|---|
| | 549 | " LDR R0, =0x1DD0\n" |
|---|
| | 550 | " CMP R5, R11\n" |
|---|
| | 551 | " LDR R2, [R0,#0x10]!\n" |
|---|
| | 552 | " LDR R1, [R0,#0x10]\n" |
|---|
| | 553 | " SUB R9, R11, #0x17\n" |
|---|
| | 554 | " BEQ loc_FF82C7C8\n" |
|---|
| | 555 | " BGT loc_FF82C600\n" |
|---|
| | 556 | " LDR R11, =0x116A\n" |
|---|
| | 557 | " CMP R5, R11\n" |
|---|
| | 558 | " BEQ loc_FF82C7B4\n" |
|---|
| | 559 | " BGT loc_FF82C5C4\n" |
|---|
| | 560 | " SUB R0, R5, #0x1100\n" |
|---|
| | 561 | " SUB R0, R0, #0x63\n" |
|---|
| | 562 | " CMP R0, #5\n" |
|---|
| | 563 | " ADDLS PC, PC, R0,LSL#2\n" |
|---|
| | 564 | " B loc_FF82C830\n" |
|---|
| | 565 | |
|---|
| | 566 | |
|---|
| | 567 | "loc_FF82C5AC:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 568 | " B loc_FF82C7EC\n" |
|---|
| | 569 | |
|---|
| | 570 | |
|---|
| | 571 | "loc_FF82C5B0:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 572 | " B loc_FF82C7E0\n" |
|---|
| | 573 | |
|---|
| | 574 | |
|---|
| | 575 | "loc_FF82C5B4:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 576 | " B loc_FF82C7D8\n" |
|---|
| | 577 | |
|---|
| | 578 | |
|---|
| | 579 | "loc_FF82C5B8:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 580 | " B loc_FF82C830\n" |
|---|
| | 581 | |
|---|
| | 582 | |
|---|
| | 583 | "loc_FF82C5BC:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 584 | " B loc_FF82C774\n" |
|---|
| | 585 | |
|---|
| | 586 | |
|---|
| | 587 | "loc_FF82C5C0:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 588 | " B loc_FF82C774\n" |
|---|
| | 589 | |
|---|
| | 590 | |
|---|
| | 591 | "loc_FF82C5C4:\n" // CODE XREF: sub_FF82C3F0+1A4j |
|---|
| | 592 | " SUB R12, R5, #0x2000\n" |
|---|
| | 593 | " SUBS R12, R12, #2\n" |
|---|
| | 594 | " BEQ loc_FF82C8A8\n" |
|---|
| | 595 | " CMP R5, R9\n" |
|---|
| | 596 | " MOV R0, R9\n" |
|---|
| | 597 | " BEQ loc_FF82C8B4\n" |
|---|
| | 598 | " SUB R12, R5, #0x2000\n" |
|---|
| | 599 | " SUBS R12, R12, #5\n" |
|---|
| | 600 | " BEQ loc_FF82C8A8\n" |
|---|
| | 601 | " SUB R12, R5, #0x2000\n" |
|---|
| | 602 | " SUBS R12, R12, #0x19\n" |
|---|
| | 603 | " BNE loc_FF82C830\n" |
|---|
| | 604 | " CMP R1, #0\n" |
|---|
| | 605 | " BNE loc_FF82C894\n" |
|---|
| | 606 | " B loc_FF82C814\n" |
|---|
| | 607 | |
|---|
| | 608 | |
|---|
| | 609 | "loc_FF82C600:\n" // CODE XREF: sub_FF82C3F0+194j |
|---|
| | 610 | " LDR R12, =0x3110\n" |
|---|
| | 611 | " CMP R5, R12\n" |
|---|
| | 612 | " BEQ loc_FF82C86C\n" |
|---|
| | 613 | " BGT loc_FF82C648\n" |
|---|
| | 614 | " SUB R12, R5, #0x2000\n" |
|---|
| | 615 | " SUBS R12, R12, #0x1D\n" |
|---|
| | 616 | " BEQ loc_FF82C8A8\n" |
|---|
| | 617 | " LDR R0, =0x2027\n" |
|---|
| | 618 | " CMP R5, R0\n" |
|---|
| | 619 | " BEQ loc_FF82C874\n" |
|---|
| | 620 | " SUB R12, R5, #0x3000\n" |
|---|
| | 621 | " SUBS R12, R12, #6\n" |
|---|
| | 622 | " BEQ loc_FF82C86C\n" |
|---|
| | 623 | " SUB R12, R5, #0x3000\n" |
|---|
| | 624 | " SUBS R12, R12, #0x10\n" |
|---|
| | 625 | " BNE loc_FF82C830\n" |
|---|
| | 626 | " BL sub_FF88D5E4\n" |
|---|
| | 627 | " B loc_FF82C814\n" |
|---|
| | 628 | |
|---|
| | 629 | |
|---|
| | 630 | "loc_FF82C648:\n" // CODE XREF: sub_FF82C3F0+21Cj |
|---|
| | 631 | " SUB R12, R5, #0x3100\n" |
|---|
| | 632 | " SUBS R12, R12, #0x11\n" |
|---|
| | 633 | " BEQ loc_FF82C86C\n" |
|---|
| | 634 | " CMP R5, #0x3140\n" |
|---|
| | 635 | " BEQ loc_FF82C8D0\n" |
|---|
| | 636 | " SUB R12, R5, #0x3200\n" |
|---|
| | 637 | " SUBS R12, R12, #1\n" |
|---|
| | 638 | " BEQ loc_FF82C830\n" |
|---|
| | 639 | " SUB R12, R5, #0x3200\n" |
|---|
| | 640 | " SUBS R12, R12, #2\n" |
|---|
| | 641 | " BNE loc_FF82C830\n" |
|---|
| | 642 | " B loc_FF82C86C\n" |
|---|
| | 643 | |
|---|
| | 644 | |
|---|
| | 645 | |
|---|
| | 646 | |
|---|
| | 647 | |
|---|
| | 648 | "loc_FF82C6EC:\n" // CODE XREF: sub_FF82C3F0+78j |
|---|
| | 649 | " MOV R4, #1\n" |
|---|
| | 650 | " MOV R0, #2\n" |
|---|
| | 651 | " CMP R0, #1\n" |
|---|
| | 652 | " MOVEQ R4, #2\n" |
|---|
| | 653 | " MOV R0, R4\n" |
|---|
| | 654 | " BL sub_FF8224B4\n" |
|---|
| | 655 | " CMP R0, #0\n" |
|---|
| | 656 | " STRNE R8, [R6,#0x14]\n" |
|---|
| | 657 | " BNE loc_FF82C74C\n" |
|---|
| | 658 | " BL sub_FF874AD4\n" |
|---|
| | 659 | " BL sub_FF871808\n" |
|---|
| | 660 | " BL sub_FF872390\n" |
|---|
| | 661 | " BL sub_FF8710D4\n" |
|---|
| | 662 | " BL sub_FF872BD4\n" |
|---|
| | 663 | " BL sub_FF873024\n" |
|---|
| | 664 | " BL _GetVRAMHPixelsSize_0\n" |
|---|
| | 665 | " CMP R0, #0\n" |
|---|
| | 666 | " BEQ loc_FF82C754\n" |
|---|
| | 667 | " BL sub_FF82C090\n" |
|---|
| | 668 | " BL sub_FF87340C\n" |
|---|
| | 669 | " MOV R1, R0\n" |
|---|
| | 670 | " LDR R0, =0x1167\n" |
|---|
| | 671 | " BL _PostLogicalEventToUI\n" // "DryOS Canon Firmware; A720-based" |
|---|
| | 672 | |
|---|
| | 673 | "loc_FF82C74C:\n" // CODE XREF: sub_FF82C3F0+320j |
|---|
| | 674 | |
|---|
| | 675 | " MOV R0, R7\n" |
|---|
| | 676 | |
|---|
| | 677 | "locret_FF82C750:\n" // CODE XREF: sub_FF82C3F0+90j |
|---|
| | 678 | " LDMFD SP!, {R3-R11,PC}\n" |
|---|
| | 679 | |
|---|
| | 680 | |
|---|
| | 681 | "loc_FF82C754:\n" // CODE XREF: sub_FF82C3F0+344j |
|---|
| | 682 | " BL sub_FF82622C\n" |
|---|
| | 683 | " CMP R0, #1\n" |
|---|
| | 684 | " LDRNE R0, =0x310B\n" |
|---|
| | 685 | " LDREQ R0, =0x310C\n" |
|---|
| | 686 | " MOV R1, #0\n" |
|---|
| | 687 | " BL _PostLogicalEventToUI\n" // "DryOS Canon Firmware; A720-based" |
|---|
| | 688 | " BL sub_FF870B0C_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 689 | " B loc_FF82C74C\n" |
|---|
| | 690 | |
|---|
| | 691 | |
|---|
| | 692 | "loc_FF82C774:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 693 | |
|---|
| | 694 | |
|---|
| | 695 | " STR R8, [R6,#0x10]\n" |
|---|
| | 696 | " LDR R6, =0x4508\n" |
|---|
| | 697 | " LDR R4, =0x1168\n" |
|---|
| | 698 | " CMP R1, #0\n" |
|---|
| | 699 | " BEQ loc_FF82C79C\n" |
|---|
| | 700 | " BL sub_FF86E480\n" |
|---|
| | 701 | " B loc_FF82C7A8\n" |
|---|
| | 702 | |
|---|
| | 703 | |
|---|
| | 704 | "loc_FF82C790:\n" // CODE XREF: sub_FF82C3F0+3BCj |
|---|
| | 705 | " MOV R0, R6\n" |
|---|
| | 706 | " BL sub_FF8595B4\n" |
|---|
| | 707 | " B loc_FF82C814\n" |
|---|
| | 708 | |
|---|
| | 709 | |
|---|
| | 710 | "loc_FF82C79C:\n" // CODE XREF: sub_FF82C3F0+394j |
|---|
| | 711 | " BL sub_FF871AB0\n" |
|---|
| | 712 | " BL sub_FF871A14\n" |
|---|
| | 713 | " BL sub_FF825F4C\n" |
|---|
| | 714 | |
|---|
| | 715 | "loc_FF82C7A8:\n" // CODE XREF: sub_FF82C3F0+39Cj |
|---|
| | 716 | " CMP R5, R4\n" |
|---|
| | 717 | " BEQ loc_FF82C790\n" |
|---|
| | 718 | " B loc_FF82C814\n" |
|---|
| | 719 | |
|---|
| | 720 | |
|---|
| | 721 | "loc_FF82C7B4:\n" // CODE XREF: sub_FF82C3F0+1A0j |
|---|
| | 722 | " MOV R0, #1\n" |
|---|
| | 723 | " BL sub_FF86E5AC\n" |
|---|
| | 724 | " MOV R1, R11\n" |
|---|
| | 725 | " MOV R0, R10\n" |
|---|
| | 726 | " B loc_FF82C838\n" |
|---|
| | 727 | |
|---|
| | 728 | |
|---|
| | 729 | "loc_FF82C7C8:\n" // CODE XREF: sub_FF82C3F0+190j |
|---|
| | 730 | " CMP R2, #1\n" |
|---|
| | 731 | " BNE loc_FF82C86C\n" |
|---|
| | 732 | " BL sub_FF86E480\n" |
|---|
| | 733 | " B loc_FF82C814\n" |
|---|
| | 734 | |
|---|
| | 735 | |
|---|
| | 736 | "loc_FF82C7D8:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 737 | |
|---|
| | 738 | |
|---|
| | 739 | " MOV R0, #2\n" |
|---|
| | 740 | " B loc_FF82C7E4\n" |
|---|
| | 741 | |
|---|
| | 742 | |
|---|
| | 743 | "loc_FF82C7E0:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 744 | |
|---|
| | 745 | |
|---|
| | 746 | " MOV R0, #1\n" |
|---|
| | 747 | |
|---|
| | 748 | "loc_FF82C7E4:\n" // CODE XREF: sub_FF82C3F0+3ECj |
|---|
| | 749 | |
|---|
| | 750 | " BL sub_FF82CE18\n" |
|---|
| | 751 | " B loc_FF82C814\n" |
|---|
| | 752 | |
|---|
| | 753 | |
|---|
| | 754 | "loc_FF82C7EC:\n" // CODE XREF: sub_FF82C3F0+1B4j |
|---|
| | 755 | |
|---|
| | 756 | |
|---|
| | 757 | " MOV R0, #0\n" |
|---|
| | 758 | " B loc_FF82C7E4\n" |
|---|
| | 759 | |
|---|
| | 760 | |
|---|
| | 761 | "loc_FF82C7F4:\n" // CODE XREF: sub_FF82C3F0+68j |
|---|
| | 762 | |
|---|
| | 763 | " LDR R0, [R6,#0xC]\n" |
|---|
| | 764 | " SUB R12, R0, #0x8000\n" |
|---|
| | 765 | " SUBS R12, R12, #2\n" |
|---|
| | 766 | " BEQ loc_FF82C814\n" |
|---|
| | 767 | " LDR R0, =0x10A5\n" |
|---|
| | 768 | " BL _IsControlEventActive\n" |
|---|
| | 769 | " CMP R0, #0\n" |
|---|
| | 770 | " BEQ loc_FF82C81C\n" |
|---|
| | 771 | |
|---|
| | 772 | "loc_FF82C814:\n" // CODE XREF: sub_FF82C3F0+20j |
|---|
| | 773 | |
|---|
| | 774 | " MOV R0, #0\n" |
|---|
| | 775 | " LDMFD SP!, {R3-R11,PC}\n" |
|---|
| | 776 | |
|---|
| | 777 | |
|---|
| | 778 | "loc_FF82C81C:\n" // CODE XREF: sub_FF82C3F0+420j |
|---|
| | 779 | " CMP R5, R9\n" |
|---|
| | 780 | " STREQ R8, [R6,#0x34]\n" |
|---|
| | 781 | " BEQ loc_FF82C830\n" |
|---|
| | 782 | " CMP R5, R10\n" |
|---|
| | 783 | " STREQ R8, [R6,#0x30]\n" |
|---|
| | 784 | |
|---|
| | 785 | "loc_FF82C830:\n" // CODE XREF: sub_FF82C3F0+84j |
|---|
| | 786 | |
|---|
| | 787 | |
|---|
| | 788 | |
|---|
| | 789 | " MOV R1, #0\n" |
|---|
| | 790 | |
|---|
| | 791 | "loc_FF82C834:\n" // CODE XREF: sub_FF82C3F0+480j |
|---|
| | 792 | " MOV R0, R5\n" |
|---|
| | 793 | |
|---|
| | 794 | "loc_FF82C838:\n" // CODE XREF: sub_FF82C3F0+C0j |
|---|
| | 795 | |
|---|
| | 796 | " BL sub_FF86FB00_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 797 | " LDMFD SP!, {R3-R11,PC}\n" |
|---|
| | 798 | |
|---|
| | 799 | |
|---|
| | 800 | "loc_FF82C840:\n" // CODE XREF: sub_FF82C3F0+38j |
|---|
| | 801 | " BL sub_FF876BDC\n" |
|---|
| | 802 | " CMP R0, #0\n" |
|---|
| | 803 | " BLNE sub_FF875AB8\n" |
|---|
| | 804 | " B loc_FF82C86C\n" |
|---|
| | 805 | |
|---|
| | 806 | |
|---|
| | 807 | "loc_FF82C850:\n" // CODE XREF: sub_FF82C3F0+11Cj |
|---|
| | 808 | " BL _IsControlEventActive\n" |
|---|
| | 809 | " CMP R0, #0\n" |
|---|
| | 810 | " BNE loc_FF82C814\n" |
|---|
| | 811 | |
|---|
| | 812 | "loc_FF82C85C:\n" // CODE XREF: sub_FF82C3F0+F4j |
|---|
| | 813 | |
|---|
| | 814 | " MOV R0, R5\n" |
|---|
| | 815 | " BL sub_FF82C1B0_my\n" // ---------------> for movie rec |
|---|
| | 816 | " LDMFD SP!, {R3-R11,PC}\n" |
|---|
| | 817 | |
|---|
| | 818 | |
|---|
| | 819 | "loc_FF82C868:\n" // CODE XREF: sub_FF82C3F0+134j |
|---|
| | 820 | |
|---|
| | 821 | " BL sub_FF82CDE8\n" |
|---|
| | 822 | |
|---|
| | 823 | "loc_FF82C86C:\n" // CODE XREF: sub_FF82C3F0+54j |
|---|
| | 824 | |
|---|
| | 825 | " MOV R1, R4\n" |
|---|
| | 826 | " B loc_FF82C834\n" |
|---|
| | 827 | |
|---|
| | 828 | |
|---|
| | 829 | "loc_FF82C874:\n" // CODE XREF: sub_FF82C3F0+234j |
|---|
| | 830 | " MOV R1, #0\n" |
|---|
| | 831 | " BL sub_FF86FB00_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 832 | " MOV R1, #0\n" |
|---|
| | 833 | " MOV R0, R11\n" |
|---|
| | 834 | " BL sub_FF86FB00_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 835 | " MOV R1, #0\n" |
|---|
| | 836 | " MOV R0, R9\n" |
|---|
| | 837 | " B loc_FF82C8A0\n" |
|---|
| | 838 | |
|---|
| | 839 | |
|---|
| | 840 | "loc_FF82C894:\n" // CODE XREF: sub_FF82C3F0+208j |
|---|
| | 841 | " CMP R2, #0\n" |
|---|
| | 842 | " BNE loc_FF82C814\n" |
|---|
| | 843 | |
|---|
| | 844 | "loc_FF82C89C:\n" // CODE XREF: sub_FF82C3F0+4F0j |
|---|
| | 845 | " MOV R1, #0\n" |
|---|
| | 846 | |
|---|
| | 847 | "loc_FF82C8A0:\n" // CODE XREF: sub_FF82C3F0+4A0j |
|---|
| | 848 | " BL sub_FF86FB00_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 849 | " B loc_FF82C814\n" |
|---|
| | 850 | |
|---|
| | 851 | |
|---|
| | 852 | "loc_FF82C8A8:\n" // CODE XREF: sub_FF82C3F0+1DCj |
|---|
| | 853 | |
|---|
| | 854 | " STR R7, [R6,#0x20]\n" |
|---|
| | 855 | " BL sub_FF82CADC\n" |
|---|
| | 856 | " B loc_FF82C86C\n" |
|---|
| | 857 | |
|---|
| | 858 | |
|---|
| | 859 | "loc_FF82C8B4:\n" // CODE XREF: sub_FF82C3F0+1E8j |
|---|
| | 860 | " STR R7, [R6,#0x20]\n" |
|---|
| | 861 | " BL sub_FF82CADC\n" |
|---|
| | 862 | " LDR R0, [R6,#0x10]\n" |
|---|
| | 863 | " CMP R0, #1\n" |
|---|
| | 864 | " BNE loc_FF82C86C\n" |
|---|
| | 865 | " BL sub_FF86E4C4\n" |
|---|
| | 866 | " B loc_FF82C814\n" |
|---|
| | 867 | |
|---|
| | 868 | |
|---|
| | 869 | "loc_FF82C8D0:\n" // CODE XREF: sub_FF82C3F0+268j |
|---|
| | 870 | " CMP R1, #0\n" |
|---|
| | 871 | " BLEQ sub_FF82CADC\n" |
|---|
| | 872 | " B loc_FF82C814\n" |
|---|
| | 873 | |
|---|
| | 874 | |
|---|
| | 875 | "loc_FF82C8DC:\n" // CODE XREF: sub_FF82C3F0+48j |
|---|
| | 876 | |
|---|
| | 877 | " MOV R0, #0xFFFFFFFF\n" |
|---|
| | 878 | " B loc_FF82C89C\n" |
|---|
| | 879 | ".LTORG\n" // make literal pool |
|---|
| | 880 | ); |
|---|
| | 881 | } |
|---|
| | 882 | |
|---|
| | 883 | |
|---|
| | 884 | // Extracted method: sub_FF870B0C (FF870B0C-FF870BF0) |
|---|
| | 885 | // Overridden calls: |
|---|
| | 886 | // sub_FF870958 |
|---|
| | 887 | // sub_FF870958 |
|---|
| | 888 | void __attribute__((naked,noinline)) sub_FF870B0C_my() { |
|---|
| | 889 | asm volatile ( |
|---|
| | 890 | " STMFD SP!, {R4,LR}\n" |
|---|
| | 891 | " BL sub_FF82CAA8\n" |
|---|
| | 892 | " MOV R4, R0\n" |
|---|
| | 893 | " BL sub_FF870C28\n" |
|---|
| | 894 | " MOV R0, R4\n" |
|---|
| | 895 | " BL sub_FF8709BC\n" |
|---|
| | 896 | " BL sub_FF82CAA8\n" |
|---|
| | 897 | " MOV R4, R0\n" |
|---|
| | 898 | " LDR R0, =0x5E1C\n" |
|---|
| | 899 | " LDR R0, [R0]\n" |
|---|
| | 900 | " TST R0, #1\n" |
|---|
| | 901 | " BEQ loc_FF870B48\n" |
|---|
| | 902 | |
|---|
| | 903 | "loc_FF870B3C:\n" // CODE XREF: sub_FF870B0C+5Cj |
|---|
| | 904 | |
|---|
| | 905 | " MOV R1, R4\n" |
|---|
| | 906 | " MOV R0, #2\n" |
|---|
| | 907 | " B loc_FF870BB0\n" |
|---|
| | 908 | |
|---|
| | 909 | |
|---|
| | 910 | "loc_FF870B48:\n" // CODE XREF: sub_FF870B0C+2Cj |
|---|
| | 911 | " TST R0, #0x2000\n" |
|---|
| | 912 | " BEQ loc_FF870B64\n" |
|---|
| | 913 | " TST R0, #0x200\n" |
|---|
| | 914 | " LDREQ R1, =0x4004\n" |
|---|
| | 915 | " LDRNE R1, =0x8002\n" |
|---|
| | 916 | " MOV R0, #3\n" |
|---|
| | 917 | " B loc_FF870BB0\n" |
|---|
| | 918 | |
|---|
| | 919 | |
|---|
| | 920 | "loc_FF870B64:\n" // CODE XREF: sub_FF870B0C+40j |
|---|
| | 921 | " TST R0, #0x10\n" |
|---|
| | 922 | " BNE loc_FF870B3C\n" |
|---|
| | 923 | " TST R0, #0x40\n" |
|---|
| | 924 | " BEQ loc_FF870B80\n" |
|---|
| | 925 | |
|---|
| | 926 | "loc_FF870B74:\n" // CODE XREF: sub_FF870B0C+BCj |
|---|
| | 927 | " MOV R1, R4\n" |
|---|
| | 928 | " MOV R0, #1\n" |
|---|
| | 929 | " B loc_FF870BB0\n" |
|---|
| | 930 | |
|---|
| | 931 | |
|---|
| | 932 | "loc_FF870B80:\n" // CODE XREF: sub_FF870B0C+64j |
|---|
| | 933 | " TST R0, #0x20\n" |
|---|
| | 934 | " BEQ loc_FF870B9C\n" |
|---|
| | 935 | " TST R0, #0x4000\n" |
|---|
| | 936 | " BNE loc_FF870B9C\n" |
|---|
| | 937 | |
|---|
| | 938 | "loc_FF870B90:\n" // CODE XREF: sub_FF870B0C+C8j |
|---|
| | 939 | " MOV R1, R4\n" |
|---|
| | 940 | " MOV R0, #0\n" |
|---|
| | 941 | " B loc_FF870BB0\n" |
|---|
| | 942 | |
|---|
| | 943 | |
|---|
| | 944 | "loc_FF870B9C:\n" // CODE XREF: sub_FF870B0C+78j |
|---|
| | 945 | |
|---|
| | 946 | " LDR R1, =0x102\n" |
|---|
| | 947 | " BICS R1, R1, R0\n" |
|---|
| | 948 | " BNE loc_FF870BB8\n" |
|---|
| | 949 | " MOV R1, R4\n" |
|---|
| | 950 | " MOV R0, #6\n" |
|---|
| | 951 | |
|---|
| | 952 | "loc_FF870BB0:\n" // CODE XREF: sub_FF870B0C+38j |
|---|
| | 953 | |
|---|
| | 954 | " LDMFD SP!, {R4,LR}\n" |
|---|
| | 955 | " B sub_FF870958_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 956 | |
|---|
| | 957 | |
|---|
| | 958 | "loc_FF870BB8:\n" // CODE XREF: sub_FF870B0C+98j |
|---|
| | 959 | " TST R0, #0x100\n" |
|---|
| | 960 | " BNE loc_FF870B3C\n" |
|---|
| | 961 | " TST R0, #0x4000\n" |
|---|
| | 962 | " TSTEQ R0, #0x400\n" |
|---|
| | 963 | " BNE loc_FF870B74\n" |
|---|
| | 964 | " TST R0, #0x200\n" |
|---|
| | 965 | " TSTEQ R0, #2\n" |
|---|
| | 966 | " BNE loc_FF870B90\n" |
|---|
| | 967 | " TST R0, #0x40000\n" |
|---|
| | 968 | " BEQ loc_FF870B3C\n" |
|---|
| | 969 | " TST R0, #0x200000\n" |
|---|
| | 970 | " MOVEQ R1, R4\n" |
|---|
| | 971 | " MOVEQ R0, #1\n" |
|---|
| | 972 | " BLEQ sub_FF870958_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 973 | " B loc_FF870B3C\n" |
|---|
| | 974 | ); |
|---|
| | 975 | } |
|---|
| | 976 | |
|---|
| | 977 | |
|---|
| | 978 | // Extracted method: sub_FF870958 (FF870958-FF8709B8) |
|---|
| | 979 | // Overridden calls: |
|---|
| | 980 | // sub_FF86FB00 |
|---|
| | 981 | // sub_FF86FB00 |
|---|
| | 982 | void __attribute__((naked,noinline)) sub_FF870958_my() { |
|---|
| | 983 | asm volatile ( |
|---|
| | 984 | |
|---|
| | 985 | " STMFD SP!, {R4-R6,LR}\n" |
|---|
| | 986 | " MOVS R4, R0\n" |
|---|
| | 987 | " MOV R0, #1\n" |
|---|
| | 988 | " MOV R5, R1\n" |
|---|
| | 989 | " BNE loc_FF870998\n" |
|---|
| | 990 | " MOV R1, #0\n" |
|---|
| | 991 | " MOV R0, #0\n" |
|---|
| | 992 | " BL sub_FF86DC48\n" |
|---|
| | 993 | " BL sub_FF82CAA8\n" |
|---|
| | 994 | " SUB R12, R0, #0x1000\n" |
|---|
| | 995 | " SUBS R12, R12, #0x5B\n" |
|---|
| | 996 | " BNE loc_FF870990\n" |
|---|
| | 997 | |
|---|
| | 998 | "loc_FF870988:\n" // CODE XREF: sub_FF870958+44j |
|---|
| | 999 | " BL sub_FF8708A0\n" |
|---|
| | 1000 | " B loc_FF8709A0\n" |
|---|
| | 1001 | |
|---|
| | 1002 | |
|---|
| | 1003 | "loc_FF870990:\n" // CODE XREF: sub_FF870958+2Cj |
|---|
| | 1004 | " BL sub_FF8708E0\n" |
|---|
| | 1005 | " B loc_FF8709A0\n" |
|---|
| | 1006 | |
|---|
| | 1007 | |
|---|
| | 1008 | "loc_FF870998:\n" // CODE XREF: sub_FF870958+10j |
|---|
| | 1009 | " CMP R4, #5\n" |
|---|
| | 1010 | " BEQ loc_FF870988\n" |
|---|
| | 1011 | |
|---|
| | 1012 | "loc_FF8709A0:\n" // CODE XREF: sub_FF870958+34j |
|---|
| | 1013 | |
|---|
| | 1014 | " CMP R0, #0\n" |
|---|
| | 1015 | " LDREQ R5, =0x1162\n" |
|---|
| | 1016 | " MOVEQ R4, #2\n" |
|---|
| | 1017 | " MOV R0, R4\n" |
|---|
| | 1018 | " MOV R1, R5\n" |
|---|
| | 1019 | " LDMFD SP!, {R4-R6,LR}\n" |
|---|
| | 1020 | " B sub_FF86FB00_my\n" // ---------------> for SDHC and movie rec |
|---|
| | 1021 | ); |
|---|
| | 1022 | } |
|---|
| | 1023 | |
|---|
| | 1024 | |
|---|
| | 1025 | // Extracted method: sub_FF86FB00 (FF86FB00-FF86FDFC) |
|---|
| | 1026 | // Overridden calls: |
|---|
| | 1027 | // sub_FF82BE84 |
|---|
| | 1028 | // sub_FF86E38C |
|---|
| | 1029 | // sub_FF86EDAC |
|---|
| | 1030 | // sub_FF86EE0C |
|---|
| | 1031 | // sub_FF86EFE4 |
|---|
| | 1032 | // sub_FF86F224 |
|---|
| | 1033 | // sub_FF86F5E8 |
|---|
| | 1034 | // sub_FF86F6F0 |
|---|
| | 1035 | // sub_FF86F89C |
|---|
| | 1036 | // sub_FF86F9F8 |
|---|
| | 1037 | // sub_FF870430 |
|---|
| | 1038 | // sub_FF870468 |
|---|
| | 1039 | // sub_FF870550 |
|---|
| | 1040 | // sub_FF870694 |
|---|
| | 1041 | // sub_FF86F224 |
|---|
| | 1042 | // sub_FF870550 |
|---|
| | 1043 | // sub_FF86F6F0 |
|---|
| | 1044 | // sub_FF86EE0C |
|---|
| | 1045 | // sub_FF870468 |
|---|
| | 1046 | // sub_FF86EFE4 |
|---|
| | 1047 | // sub_FF86F89C |
|---|
| | 1048 | // sub_FF86F9F8 |
|---|
| | 1049 | // sub_FF870694 |
|---|
| | 1050 | // sub_FF86F5E8 |
|---|
| | 1051 | void __attribute__((naked,noinline)) sub_FF86FB00_my() { |
|---|
| | 1052 | asm volatile ( |
|---|
| | 1053 | |
|---|
| | 1054 | " STMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1055 | " MOV R8, R1\n" |
|---|
| | 1056 | " MOV R4, R0\n" |
|---|
| | 1057 | " BL _GetVRAMHPixelsSize_0\n" |
|---|
| | 1058 | " CMP R0, #0\n" |
|---|
| | 1059 | " BNE loc_FF86FDF8\n" |
|---|
| | 1060 | " MOV R1, R8\n" |
|---|
| | 1061 | " MOV R0, R4\n" |
|---|
| | 1062 | " BL sub_FF86E768\n" |
|---|
| | 1063 | " LDR R5, =0x5D50\n" |
|---|
| | 1064 | " MOV R7, #1\n" |
|---|
| | 1065 | " LDR R0, [R5,#0x10]\n" |
|---|
| | 1066 | " MOV R6, #0\n" |
|---|
| | 1067 | " CMP R0, #0x16\n" |
|---|
| | 1068 | " ADDLS PC, PC, R0,LSL#2\n" |
|---|
| | 1069 | " B loc_FF86FDF8\n" |
|---|
| | 1070 | |
|---|
| | 1071 | |
|---|
| | 1072 | "loc_FF86FB40:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1073 | " B loc_FF86FB9C\n" |
|---|
| | 1074 | |
|---|
| | 1075 | |
|---|
| | 1076 | "loc_FF86FB44:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1077 | " B loc_FF86FBC4\n" |
|---|
| | 1078 | |
|---|
| | 1079 | |
|---|
| | 1080 | "loc_FF86FB48:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1081 | " B loc_FF86FC08\n" |
|---|
| | 1082 | |
|---|
| | 1083 | |
|---|
| | 1084 | "loc_FF86FB4C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1085 | " B loc_FF86FCC8\n" |
|---|
| | 1086 | |
|---|
| | 1087 | |
|---|
| | 1088 | "loc_FF86FB50:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1089 | " B loc_FF86FCD8\n" |
|---|
| | 1090 | |
|---|
| | 1091 | |
|---|
| | 1092 | "loc_FF86FB54:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1093 | " B loc_FF86FDF8\n" |
|---|
| | 1094 | |
|---|
| | 1095 | |
|---|
| | 1096 | "loc_FF86FB58:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1097 | " B loc_FF86FDF8\n" |
|---|
| | 1098 | |
|---|
| | 1099 | |
|---|
| | 1100 | "loc_FF86FB5C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1101 | " B loc_FF86FD54\n" |
|---|
| | 1102 | |
|---|
| | 1103 | |
|---|
| | 1104 | "loc_FF86FB60:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1105 | " B loc_FF86FBAC\n" |
|---|
| | 1106 | |
|---|
| | 1107 | |
|---|
| | 1108 | "loc_FF86FB64:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1109 | " B loc_FF86FBB8\n" |
|---|
| | 1110 | |
|---|
| | 1111 | |
|---|
| | 1112 | "loc_FF86FB68:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1113 | " B loc_FF86FD54\n" |
|---|
| | 1114 | |
|---|
| | 1115 | |
|---|
| | 1116 | "loc_FF86FB6C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1117 | " B loc_FF86FBFC\n" |
|---|
| | 1118 | |
|---|
| | 1119 | |
|---|
| | 1120 | "loc_FF86FB70:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1121 | " B loc_FF86FDF8\n" |
|---|
| | 1122 | |
|---|
| | 1123 | |
|---|
| | 1124 | "loc_FF86FB74:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1125 | " B loc_FF86FDF8\n" |
|---|
| | 1126 | |
|---|
| | 1127 | |
|---|
| | 1128 | "loc_FF86FB78:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1129 | " B loc_FF86FC14\n" |
|---|
| | 1130 | |
|---|
| | 1131 | |
|---|
| | 1132 | "loc_FF86FB7C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1133 | " B loc_FF86FC5C\n" |
|---|
| | 1134 | |
|---|
| | 1135 | |
|---|
| | 1136 | "loc_FF86FB80:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1137 | " B loc_FF86FC94\n" |
|---|
| | 1138 | |
|---|
| | 1139 | |
|---|
| | 1140 | "loc_FF86FB84:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1141 | " B loc_FF86FBD0\n" |
|---|
| | 1142 | |
|---|
| | 1143 | |
|---|
| | 1144 | "loc_FF86FB88:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1145 | " B loc_FF86FDE0\n" |
|---|
| | 1146 | |
|---|
| | 1147 | |
|---|
| | 1148 | "loc_FF86FB8C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1149 | " B loc_FF86FD60\n" |
|---|
| | 1150 | |
|---|
| | 1151 | |
|---|
| | 1152 | "loc_FF86FB90:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1153 | " B loc_FF86FD90\n" |
|---|
| | 1154 | |
|---|
| | 1155 | |
|---|
| | 1156 | "loc_FF86FB94:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1157 | " B loc_FF86FD90\n" |
|---|
| | 1158 | |
|---|
| | 1159 | |
|---|
| | 1160 | "loc_FF86FB98:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1161 | " B loc_FF86FCE4\n" |
|---|
| | 1162 | |
|---|
| | 1163 | |
|---|
| | 1164 | "loc_FF86FB9C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1165 | |
|---|
| | 1166 | |
|---|
| | 1167 | " MOV R1, R8\n" |
|---|
| | 1168 | " MOV R0, R4\n" |
|---|
| | 1169 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1170 | " B sub_FF86F224_my\n" // ---------------> |
|---|
| | 1171 | |
|---|
| | 1172 | |
|---|
| | 1173 | "loc_FF86FBAC:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1174 | |
|---|
| | 1175 | |
|---|
| | 1176 | " MOV R0, R4\n" |
|---|
| | 1177 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1178 | " B sub_FF870550_my\n" // ---------------> |
|---|
| | 1179 | |
|---|
| | 1180 | |
|---|
| | 1181 | "loc_FF86FBB8:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1182 | |
|---|
| | 1183 | |
|---|
| | 1184 | " MOV R0, R4\n" |
|---|
| | 1185 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1186 | " B sub_FF86F6F0_my\n" // ---------------> |
|---|
| | 1187 | |
|---|
| | 1188 | |
|---|
| | 1189 | "loc_FF86FBC4:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1190 | |
|---|
| | 1191 | |
|---|
| | 1192 | " MOV R0, R4\n" |
|---|
| | 1193 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1194 | " B sub_FF86EE0C_my\n" // ---------------> |
|---|
| | 1195 | |
|---|
| | 1196 | |
|---|
| | 1197 | "loc_FF86FBD0:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1198 | |
|---|
| | 1199 | |
|---|
| | 1200 | " SUB R12, R4, #0x1000\n" |
|---|
| | 1201 | " SUBS R12, R12, #0xA5\n" |
|---|
| | 1202 | " STREQ R7, [R5,#0x88]\n" |
|---|
| | 1203 | " BEQ loc_FF86FDF0\n" |
|---|
| | 1204 | " SUB R12, R4, #0x3000\n" |
|---|
| | 1205 | " SUBS R12, R12, #6\n" |
|---|
| | 1206 | " BNE loc_FF86FDF8\n" |
|---|
| | 1207 | " MOV R0, #0\n" |
|---|
| | 1208 | " BL sub_FF82BF28\n" |
|---|
| | 1209 | " BL sub_FF870430_my\n" // ---------------> |
|---|
| | 1210 | " B loc_FF86FDF0\n" |
|---|
| | 1211 | |
|---|
| | 1212 | |
|---|
| | 1213 | "loc_FF86FBFC:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1214 | |
|---|
| | 1215 | |
|---|
| | 1216 | " MOV R0, R4\n" |
|---|
| | 1217 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1218 | " B sub_FF870468_my\n" // ---------------> |
|---|
| | 1219 | |
|---|
| | 1220 | |
|---|
| | 1221 | "loc_FF86FC08:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1222 | |
|---|
| | 1223 | |
|---|
| | 1224 | " MOV R0, R4\n" |
|---|
| | 1225 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1226 | " B sub_FF86EFE4_my\n" // ---------------> |
|---|
| | 1227 | |
|---|
| | 1228 | |
|---|
| | 1229 | "loc_FF86FC14:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1230 | |
|---|
| | 1231 | |
|---|
| | 1232 | " MOV R0, R4\n" |
|---|
| | 1233 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1234 | " B sub_FF86F89C_my\n" // ---------------> |
|---|
| | 1235 | |
|---|
| | 1236 | |
|---|
| | 1237 | |
|---|
| | 1238 | |
|---|
| | 1239 | |
|---|
| | 1240 | "loc_FF86FC5C:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1241 | |
|---|
| | 1242 | |
|---|
| | 1243 | " SUB R12, R4, #0x3200\n" |
|---|
| | 1244 | " SUBS R12, R12, #2\n" |
|---|
| | 1245 | " BNE loc_FF86FDF8\n" |
|---|
| | 1246 | " MOV R0, #3\n" |
|---|
| | 1247 | " BL sub_FF86E64C\n" |
|---|
| | 1248 | " MOV R0, #8\n" |
|---|
| | 1249 | " BL sub_FF82BE84_my\n" // ---------------> |
|---|
| | 1250 | " MOV R1, #0\n" |
|---|
| | 1251 | " MOV R0, #0x19\n" |
|---|
| | 1252 | " BL sub_FF83A068\n" |
|---|
| | 1253 | " BL sub_FF871AB0\n" |
|---|
| | 1254 | " BL sub_FF871D48\n" |
|---|
| | 1255 | " BL sub_FF871144\n" |
|---|
| | 1256 | " B loc_FF86FDF0\n" |
|---|
| | 1257 | |
|---|
| | 1258 | |
|---|
| | 1259 | "loc_FF86FC94:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1260 | |
|---|
| | 1261 | |
|---|
| | 1262 | " SUB R12, R4, #0x3300\n" |
|---|
| | 1263 | " SUBS R12, R12, #1\n" |
|---|
| | 1264 | " BNE loc_FF86FDF8\n" |
|---|
| | 1265 | " LDR R0, =0x4010\n" |
|---|
| | 1266 | " STR R6, [R5,#0x80]\n" |
|---|
| | 1267 | " BL sub_FF82BE84_my\n" // ---------------> |
|---|
| | 1268 | " BL sub_FF98BE68\n" |
|---|
| | 1269 | " BL sub_FF871144\n" |
|---|
| | 1270 | " MOV R0, #4\n" |
|---|
| | 1271 | " BL sub_FF86E64C\n" |
|---|
| | 1272 | " MOV R0, #1\n" |
|---|
| | 1273 | " BL sub_FF872CA8\n" |
|---|
| | 1274 | " B loc_FF86FDF0\n" |
|---|
| | 1275 | |
|---|
| | 1276 | |
|---|
| | 1277 | "loc_FF86FCC8:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1278 | |
|---|
| | 1279 | |
|---|
| | 1280 | " MOV R1, R8\n" |
|---|
| | 1281 | " MOV R0, R4\n" |
|---|
| | 1282 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1283 | " B sub_FF86F9F8_my\n" // ---------------> |
|---|
| | 1284 | |
|---|
| | 1285 | |
|---|
| | 1286 | "loc_FF86FCD8:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1287 | |
|---|
| | 1288 | |
|---|
| | 1289 | " MOV R0, R4\n" |
|---|
| | 1290 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1291 | " B sub_FF870694_my\n" // ---------------> |
|---|
| | 1292 | |
|---|
| | 1293 | |
|---|
| | 1294 | "loc_FF86FCE4:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1295 | |
|---|
| | 1296 | |
|---|
| | 1297 | " LDR R8, =0x1182\n" |
|---|
| | 1298 | " CMP R4, R8\n" |
|---|
| | 1299 | " STREQ R7, [R5,#0xB8]\n" |
|---|
| | 1300 | " BEQ loc_FF86FDF0\n" |
|---|
| | 1301 | " SUB R12, R4, #0x1000\n" |
|---|
| | 1302 | " SUBS R12, R12, #0x1AC\n" |
|---|
| | 1303 | " BEQ loc_FF86FD3C\n" |
|---|
| | 1304 | " SUB R12, R4, #0x3000\n" |
|---|
| | 1305 | " SUBS R12, R12, #0x224\n" |
|---|
| | 1306 | " BNE loc_FF86FDF8\n" |
|---|
| | 1307 | " MOV R0, #8\n" |
|---|
| | 1308 | " BL sub_FF82BE84_my\n" // ---------------> |
|---|
| | 1309 | " MOV R0, #3\n" |
|---|
| | 1310 | " BL sub_FF86E64C\n" |
|---|
| | 1311 | " STR R6, [R5,#0xBC]\n" |
|---|
| | 1312 | " LDR R0, [R5,#0xB8]\n" |
|---|
| | 1313 | " CMP R0, #0\n" |
|---|
| | 1314 | " MOVNE R1, #0\n" |
|---|
| | 1315 | " MOVNE R0, R8\n" |
|---|
| | 1316 | " STRNE R6, [R5,#0xB8]\n" |
|---|
| | 1317 | " BLNE sub_FF86F9F8_my\n" // ---------------> |
|---|
| | 1318 | " B loc_FF86FDF0\n" |
|---|
| | 1319 | |
|---|
| | 1320 | |
|---|
| | 1321 | "loc_FF86FD3C:\n" // CODE XREF: sub_FF86FB00+1FCj |
|---|
| | 1322 | " LDR R0, [R5,#0xBC]\n" |
|---|
| | 1323 | " CMP R0, #0\n" |
|---|
| | 1324 | " BNE loc_FF86FDF0\n" |
|---|
| | 1325 | " BL sub_FF989F50\n" |
|---|
| | 1326 | " STR R7, [R5,#0xBC]\n" |
|---|
| | 1327 | " B loc_FF86FDF0\n" |
|---|
| | 1328 | |
|---|
| | 1329 | |
|---|
| | 1330 | "loc_FF86FD54:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1331 | |
|---|
| | 1332 | |
|---|
| | 1333 | " MOV R0, R4\n" |
|---|
| | 1334 | " LDMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1335 | " B sub_FF86F5E8_my\n" // ---------------> |
|---|
| | 1336 | |
|---|
| | 1337 | |
|---|
| | 1338 | "loc_FF86FD60:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1339 | |
|---|
| | 1340 | |
|---|
| | 1341 | " LDR R12, =0x10B0\n" |
|---|
| | 1342 | " CMP R4, R12\n" |
|---|
| | 1343 | " BEQ loc_FF86FD8C\n" |
|---|
| | 1344 | " BGT loc_FF86FD98\n" |
|---|
| | 1345 | " CMP R4, #4\n" |
|---|
| | 1346 | " BEQ loc_FF86FDC0\n" |
|---|
| | 1347 | " SUB R12, R4, #0x1000\n" |
|---|
| | 1348 | " SUBS R12, R12, #0xAA\n" |
|---|
| | 1349 | " SUBNE R12, R4, #0x1000\n" |
|---|
| | 1350 | " SUBNES R12, R12, #0xAE\n" |
|---|
| | 1351 | " BNE loc_FF86FDF8\n" |
|---|
| | 1352 | |
|---|
| | 1353 | "loc_FF86FD8C:\n" // CODE XREF: sub_FF86FB00+268j |
|---|
| | 1354 | " BL sub_FF86E350\n" |
|---|
| | 1355 | |
|---|
| | 1356 | "loc_FF86FD90:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1357 | |
|---|
| | 1358 | |
|---|
| | 1359 | " MOV R0, R6\n" |
|---|
| | 1360 | " LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1361 | |
|---|
| | 1362 | |
|---|
| | 1363 | "loc_FF86FD98:\n" // CODE XREF: sub_FF86FB00+26Cj |
|---|
| | 1364 | " SUB R12, R4, #0x2000\n" |
|---|
| | 1365 | " SUBS R12, R12, #4\n" |
|---|
| | 1366 | " BEQ loc_FF86FDD8\n" |
|---|
| | 1367 | " SUB R12, R4, #0x5000\n" |
|---|
| | 1368 | " SUBS R12, R12, #1\n" |
|---|
| | 1369 | " SUBNE R12, R4, #0x5000\n" |
|---|
| | 1370 | " SUBNES R12, R12, #6\n" |
|---|
| | 1371 | " BNE loc_FF86FDF8\n" |
|---|
| | 1372 | " BL sub_FF86EDAC_my\n" // ---------------> |
|---|
| | 1373 | " B loc_FF86FDF0\n" |
|---|
| | 1374 | |
|---|
| | 1375 | |
|---|
| | 1376 | "loc_FF86FDC0:\n" // CODE XREF: sub_FF86FB00+274j |
|---|
| | 1377 | " LDR R0, [R5,#0x2C]\n" |
|---|
| | 1378 | " CMP R0, #0\n" |
|---|
| | 1379 | " BNE loc_FF86FDD8\n" |
|---|
| | 1380 | " BL sub_FF86FFD8\n" |
|---|
| | 1381 | " BL sub_FF825F04\n" |
|---|
| | 1382 | " B loc_FF86FDF0\n" |
|---|
| | 1383 | |
|---|
| | 1384 | |
|---|
| | 1385 | "loc_FF86FDD8:\n" // CODE XREF: sub_FF86FB00+2A0j |
|---|
| | 1386 | |
|---|
| | 1387 | " BL sub_FF86E38C_my\n" // ---------------> |
|---|
| | 1388 | " B loc_FF86FDF0\n" |
|---|
| | 1389 | |
|---|
| | 1390 | |
|---|
| | 1391 | "loc_FF86FDE0:\n" // CODE XREF: sub_FF86FB00+38j |
|---|
| | 1392 | |
|---|
| | 1393 | |
|---|
| | 1394 | " SUB R12, R4, #0x3000\n" |
|---|
| | 1395 | " SUBS R12, R12, #0x130\n" |
|---|
| | 1396 | " BNE loc_FF86FDF8\n" |
|---|
| | 1397 | " BL sub_FF86E44C\n" |
|---|
| | 1398 | |
|---|
| | 1399 | "loc_FF86FDF0:\n" // CODE XREF: sub_FF86FB00+DCj |
|---|
| | 1400 | |
|---|
| | 1401 | " MOV R0, #0\n" |
|---|
| | 1402 | " LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1403 | |
|---|
| | 1404 | |
|---|
| | 1405 | "loc_FF86FDF8:\n" // CODE XREF: sub_FF86FB00+14j |
|---|
| | 1406 | |
|---|
| | 1407 | |
|---|
| | 1408 | |
|---|
| | 1409 | " MOV R0, #1\n" |
|---|
| | 1410 | " LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1411 | ".LTORG\n" // make literal pool |
|---|
| | 1412 | ); |
|---|
| | 1413 | } |
|---|
| | 1414 | |
|---|
| | 1415 | |
|---|
| | 1416 | // Extracted method: sub_FF86F224 (FF86F224-FF86F424) |
|---|
| | 1417 | // Overridden calls: |
|---|
| | 1418 | // sub_FF82BE84 |
|---|
| | 1419 | // sub_FF86ED10 |
|---|
| | 1420 | void __attribute__((naked,noinline)) sub_FF86F224_my() { |
|---|
| | 1421 | asm volatile ( |
|---|
| | 1422 | |
|---|
| | 1423 | " STMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1424 | " LDR R7, =0x8002\n" |
|---|
| | 1425 | " LDR R4, =0x5D50\n" |
|---|
| | 1426 | " CMP R0, #3\n" |
|---|
| | 1427 | " MOV R6, R1\n" |
|---|
| | 1428 | " MOV R5, #1\n" |
|---|
| | 1429 | " BEQ loc_FF86F398\n" |
|---|
| | 1430 | " BGT loc_FF86F260\n" |
|---|
| | 1431 | " CMP R0, #0\n" |
|---|
| | 1432 | " BEQ loc_FF86F2A4\n" |
|---|
| | 1433 | " CMP R0, #1\n" |
|---|
| | 1434 | " BEQ loc_FF86F328\n" |
|---|
| | 1435 | " CMP R0, #2\n" |
|---|
| | 1436 | " BNE loc_FF86F420\n" |
|---|
| | 1437 | " B loc_FF86F278\n" |
|---|
| | 1438 | |
|---|
| | 1439 | |
|---|
| | 1440 | "loc_FF86F260:\n" // CODE XREF: sub_FF86F224+1Cj |
|---|
| | 1441 | " CMP R0, #6\n" |
|---|
| | 1442 | " STREQ R5, [R4,#0x28]\n" |
|---|
| | 1443 | " BEQ loc_FF86F390\n" |
|---|
| | 1444 | " SUB R12, R0, #0x2000\n" |
|---|
| | 1445 | " SUBS R12, R12, #4\n" |
|---|
| | 1446 | " BNE loc_FF86F420\n" |
|---|
| | 1447 | |
|---|
| | 1448 | "loc_FF86F278:\n" // CODE XREF: sub_FF86F224+38j |
|---|
| | 1449 | " SUB R12, R6, #0x1100\n" |
|---|
| | 1450 | " SUBS R12, R12, #0x62\n" |
|---|
| | 1451 | " BNE loc_FF86F294\n" |
|---|
| | 1452 | " MOV R1, R7\n" |
|---|
| | 1453 | " MOV R0, #0\n" |
|---|
| | 1454 | " BL sub_FF872404\n" |
|---|
| | 1455 | " STR R5, [R4,#0x60]\n" |
|---|
| | 1456 | |
|---|
| | 1457 | "loc_FF86F294:\n" // CODE XREF: sub_FF86F224+5Cj |
|---|
| | 1458 | " BL sub_FF871AB0\n" |
|---|
| | 1459 | " BL sub_FF871D48\n" |
|---|
| | 1460 | " BL sub_FF86ED10_my\n" // ---------------> movie rec |
|---|
| | 1461 | " B loc_FF86F418\n" |
|---|
| | 1462 | |
|---|
| | 1463 | |
|---|
| | 1464 | "loc_FF86F2A4:\n" // CODE XREF: sub_FF86F224+24j |
|---|
| | 1465 | " MOV R0, #7\n" |
|---|
| | 1466 | " BL sub_FF86E64C\n" |
|---|
| | 1467 | " MOV R0, R7\n" |
|---|
| | 1468 | " BL sub_FF82BE84_my\n" // ---------------> movie rec |
|---|
| | 1469 | " BL _taskcreate_CommonDrivers\n" |
|---|
| | 1470 | " BL sub_FF871908\n" |
|---|
| | 1471 | " MOV R1, R7\n" |
|---|
| | 1472 | " MOV R0, #0\n" |
|---|
| | 1473 | " BL sub_FF872404\n" |
|---|
| | 1474 | " LDR R1, =0xFF86F458\n" // aAcBootrec = "AC:BootRec" |
|---|
| | 1475 | " MOV R0, #0x20\n" |
|---|
| | 1476 | " STR R6, [R4,#0x18]\n" |
|---|
| | 1477 | " BL sub_FF867708\n" |
|---|
| | 1478 | " LDR R1, =0xFF86F464\n" // aAcInitlens = "AC:InitLens" |
|---|
| | 1479 | " MOV R0, #0x20\n" |
|---|
| | 1480 | " BL sub_FF867708\n" |
|---|
| | 1481 | " STR R5, [R4,#0x28]\n" |
|---|
| | 1482 | " BL sub_FF82BFFC\n" |
|---|
| | 1483 | " BL sub_FF82BF50\n" |
|---|
| | 1484 | " LDR R0, [R4,#0x1C]\n" |
|---|
| | 1485 | " LDR R1, [R4,#0x20]\n" |
|---|
| | 1486 | " ORRS R0, R0, R1\n" |
|---|
| | 1487 | " BLNE sub_FF86FFB4\n" |
|---|
| | 1488 | " LDR R0, [R4,#0x68]\n" |
|---|
| | 1489 | " CMP R0, #0\n" |
|---|
| | 1490 | " BNE loc_FF86F314\n" |
|---|
| | 1491 | " BL _taskcreate_StartupImage\n" |
|---|
| | 1492 | " B loc_FF86F31C\n" |
|---|
| | 1493 | |
|---|
| | 1494 | |
|---|
| | 1495 | "loc_FF86F314:\n" // CODE XREF: sub_FF86F224+E4j |
|---|
| | 1496 | " BL sub_FF825C94\n" |
|---|
| | 1497 | " BL sub_FF82CA40\n" |
|---|
| | 1498 | |
|---|
| | 1499 | "loc_FF86F31C:\n" // CODE XREF: sub_FF86F224+ECj |
|---|
| | 1500 | " BL taskcreate_InitFileModules_my\n" // -------------> |
|---|
| | 1501 | " BL sub_FF870DB0\n" |
|---|
| | 1502 | " B loc_FF86F418\n" |
|---|
| | 1503 | |
|---|
| | 1504 | |
|---|
| | 1505 | "loc_FF86F328:\n" // CODE XREF: sub_FF86F224+2Cj |
|---|
| | 1506 | " MOV R0, #8\n" |
|---|
| | 1507 | " BL sub_FF86E64C\n" |
|---|
| | 1508 | " BL _taskcreate_CommonDrivers\n" |
|---|
| | 1509 | " BL sub_FF871908\n" |
|---|
| | 1510 | " LDR R5, =0x4004\n" |
|---|
| | 1511 | " MOV R0, #0\n" |
|---|
| | 1512 | " MOV R1, R5\n" |
|---|
| | 1513 | " BL sub_FF872404\n" |
|---|
| | 1514 | " LDR R1, =0xFF86F474\n" // aAcBootpb = "AC:BootPB" |
|---|
| | 1515 | " MOV R0, #0x20\n" |
|---|
| | 1516 | " BL sub_FF867708\n" |
|---|
| | 1517 | " BL taskcreate_InitFileModules_my\n" // -------------> |
|---|
| | 1518 | " BL sub_FF870E44\n" |
|---|
| | 1519 | " BL sub_FF82CA04\n" |
|---|
| | 1520 | " MOV R0, R5\n" |
|---|
| | 1521 | " BL sub_FF82BE84_my\n" // ---------------> movie rec |
|---|
| | 1522 | " LDR R0, [R4,#0x68]\n" |
|---|
| | 1523 | " CMP R0, #0\n" |
|---|
| | 1524 | " BNE loc_FF86F37C\n" |
|---|
| | 1525 | " BL _taskcreate_StartupImage\n" |
|---|
| | 1526 | " B loc_FF86F380\n" |
|---|
| | 1527 | |
|---|
| | 1528 | |
|---|
| | 1529 | "loc_FF86F37C:\n" // CODE XREF: sub_FF86F224+14Cj |
|---|
| | 1530 | " BL sub_FF825C94\n" |
|---|
| | 1531 | |
|---|
| | 1532 | "loc_FF86F380:\n" // CODE XREF: sub_FF86F224+154j |
|---|
| | 1533 | " BL sub_FF870DE0\n" |
|---|
| | 1534 | " LDR R0, [R4,#0x30]\n" |
|---|
| | 1535 | " CMP R0, #0\n" |
|---|
| | 1536 | " BEQ loc_FF86F418\n" |
|---|
| | 1537 | |
|---|
| | 1538 | "loc_FF86F390:\n" // CODE XREF: sub_FF86F224+44j |
|---|
| | 1539 | " BL sub_FF86FFFC\n" |
|---|
| | 1540 | " B loc_FF86F418\n" |
|---|
| | 1541 | |
|---|
| | 1542 | |
|---|
| | 1543 | "loc_FF86F398:\n" // CODE XREF: sub_FF86F224+18j |
|---|
| | 1544 | " MOV R1, R6\n" |
|---|
| | 1545 | " MOV R0, #0\n" |
|---|
| | 1546 | " BL sub_FF872404\n" |
|---|
| | 1547 | " LDR R1, =0xFF86F480\n" // aAcBootclock = "AC:BootClock" |
|---|
| | 1548 | " MOV R0, #0x20\n" |
|---|
| | 1549 | " BL sub_FF867708\n" |
|---|
| | 1550 | " STR R5, [R4,#0x68]\n" |
|---|
| | 1551 | " BL sub_FF870E44\n" |
|---|
| | 1552 | " BL sub_FF82CA04\n" |
|---|
| | 1553 | " BL sub_FF86FF90\n" |
|---|
| | 1554 | " BL sub_FF82CA9C\n" |
|---|
| | 1555 | " CMP R0, #0\n" |
|---|
| | 1556 | " LDRNE R0, =0x804B\n" |
|---|
| | 1557 | " MOVNE R1, #0\n" |
|---|
| | 1558 | " BLNE _j_PTM_SetCurrentItem\n" |
|---|
| | 1559 | " BL sub_FF872284\n" |
|---|
| | 1560 | " MOV R0, #0x80\n" |
|---|
| | 1561 | " BL sub_FF82BE84_my\n" // ---------------> movie rec |
|---|
| | 1562 | " BL sub_FF871C90\n" |
|---|
| | 1563 | " BL _StartGUISystem\n" |
|---|
| | 1564 | " BL sub_FF944944\n" |
|---|
| | 1565 | " BL sub_FF98ECE8\n" |
|---|
| | 1566 | " BL sub_FF871630\n" |
|---|
| | 1567 | " BL sub_FF871AE8\n" |
|---|
| | 1568 | " MOV R0, #9\n" |
|---|
| | 1569 | " BL sub_FF86E64C\n" |
|---|
| | 1570 | " LDR R0, =0x300E\n" |
|---|
| | 1571 | " MOV R1, R6\n" |
|---|
| | 1572 | " BL _PostLogicalEventToUI\n" // "DryOS Canon Firmware; A720-based" |
|---|
| | 1573 | " MOV R1, #0\n" |
|---|
| | 1574 | " MOV R0, #1\n" |
|---|
| | 1575 | " BL sub_FF872404\n" |
|---|
| | 1576 | |
|---|
| | 1577 | "loc_FF86F418:\n" // CODE XREF: sub_FF86F224+7Cj |
|---|
| | 1578 | |
|---|
| | 1579 | " MOV R0, #0\n" |
|---|
| | 1580 | " LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1581 | |
|---|
| | 1582 | |
|---|
| | 1583 | "loc_FF86F420:\n" // CODE XREF: sub_FF86F224+34j |
|---|
| | 1584 | |
|---|
| | 1585 | " MOV R0, #1\n" |
|---|
| | 1586 | " LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1587 | ); |
|---|
| | 1588 | } |
|---|
| | 1589 | |
|---|
| | 1590 | |
|---|
| | 1591 | |
|---|
| | 1592 | |
|---|
| | 1593 | |
|---|
| | 1594 | |
|---|
| | 1595 | void __attribute__((naked,noinline)) taskcreate_InitFileModules_my() { //#fs |
|---|
| 1066 | | "STMFD SP!, {R4-R8,LR}\n" |
|---|
| 1067 | | "LDR R7, =0x8002\n" |
|---|
| 1068 | | "LDR R4, =0x59EC\n" |
|---|
| 1069 | | "CMP R0, #2\n" |
|---|
| 1070 | | "MOV R6, R1\n" |
|---|
| 1071 | | "MOV R5, #1\n" |
|---|
| 1072 | | "BEQ loc_FFC5E108\n" |
|---|
| 1073 | | "BGT loc_FFC5E0F0\n" |
|---|
| 1074 | | "CMP R0, #0\n" |
|---|
| 1075 | | "BEQ loc_FFC5E134\n" |
|---|
| 1076 | | "CMP R0, #1\n" |
|---|
| 1077 | | "BNE loc_FFC5E1D8\n" |
|---|
| 1078 | | "MOV R0, #8\n" |
|---|
| 1079 | | "BL sub_FFC5D5B0\n" // uCameraConState |
|---|
| 1080 | | "BL sub_FFC5F7E0\n" // CreateTask_CommonDrivers |
|---|
| 1081 | | "BL sub_FFC601B4\n" // uDispSwLock |
|---|
| 1082 | | "LDR R5, =0x4004\n" |
|---|
| 1083 | | "MOV R0, #0\n" |
|---|
| 1084 | | "MOV R1, R5\n" |
|---|
| 1085 | | "BL sub_FFC60D1C\n" |
|---|
| 1086 | | "LDR R1, =0xFFC5E33C\n" // aAcBootpb\n" // "AC:BootPB" |
|---|
| 1087 | | "MOV R0, #0x20\n" |
|---|
| 1088 | | "BL sub_FFC57EC4\n" // qCameraLog |
|---|
| 1089 | | "BL sub_FFC5F7A4_my\n" // CreateTask_InitFileModules |
|---|
| 1090 | | "BL sub_FFC5F8B0\n" |
|---|
| 1091 | | "BL sub_FFC1C7B4\n" |
|---|
| 1092 | | "MOV R0, R5\n" |
|---|
| 1093 | | "BL sub_FFC1BDB8\n" |
|---|
| 1094 | | "LDR R0, [R4,#0x68]\n" |
|---|
| 1095 | | "CMP R0, #0\n" |
|---|
| 1096 | | "BNE loc_FFC5E1B8\n" |
|---|
| 1097 | | "BL sub_FFC1BF94\n" // CreateTask_StartupImage |
|---|
| 1098 | | "B loc_FFC5E1BC\n" |
|---|
| 1099 | | "loc_FFC5E0F0:\n" |
|---|
| 1100 | | "CMP R0, #6\n" |
|---|
| 1101 | | "STREQ R5, [R4,#0x28]\n" |
|---|
| 1102 | | "BEQ loc_FFC5E1CC\n" |
|---|
| 1103 | | "SUB R12, R0, #0x2000\n" |
|---|
| 1104 | | "SUBS R12, R12, #4\n" |
|---|
| 1105 | | "BNE loc_FFC5E1D8\n" |
|---|
| 1106 | | "loc_FFC5E108:\n" |
|---|
| 1107 | | "SUB R12, R6, #0x1100\n" |
|---|
| 1108 | | "SUBS R12, R12, #0x62\n" |
|---|
| 1109 | | "BNE loc_FFC5E124\n" |
|---|
| 1110 | | "MOV R1, R7\n" |
|---|
| 1111 | | "MOV R0, #0\n" |
|---|
| 1112 | | "BL sub_FFC60D1C\n" |
|---|
| 1113 | | "STR R5, [R4,#0x60]\n" |
|---|
| 1114 | | "loc_FFC5E124:\n" |
|---|
| 1115 | | "BL sub_FFC6039C\n" |
|---|
| 1116 | | "BL sub_FFC60610\n" |
|---|
| 1117 | | "BL sub_FFC5DC14\n" |
|---|
| 1118 | | "B loc_FFC5E1D0\n" |
|---|
| 1119 | | "loc_FFC5E134:\n" |
|---|
| 1120 | | "MOV R0, #7\n" |
|---|
| 1121 | | "BL sub_FFC5D5B0\n" // uCameraConState |
|---|
| 1122 | | "MOV R0, R7\n" |
|---|
| 1123 | | "BL sub_FFC1BDB8\n" |
|---|
| 1124 | | "BL sub_FFC5F7E0\n" // CreateTask_CommonDrivers |
|---|
| 1125 | | "BL sub_FFC601B4\n" // uDispSwLock |
|---|
| 1126 | | "MOV R1, R7\n" |
|---|
| 1127 | | "MOV R0, #0\n" |
|---|
| 1128 | | "BL sub_FFC60D1C\n" |
|---|
| 1129 | | "LDR R1, =0xFFC5E348\n" // aAcBootrec\n" // "AC:BootRec" |
|---|
| 1130 | | "MOV R0, #0x20\n" |
|---|
| 1131 | | "STR R6, [R4,#0x18]\n" |
|---|
| 1132 | | "BL sub_FFC57EC4\n" // qCameraLog |
|---|
| 1133 | | "LDR R1, =0xFFC5E354\n" // aAcInitlens // "AC:InitLens" |
|---|
| 1134 | | "MOV R0, #0x20\n" |
|---|
| 1135 | | "BL sub_FFC57EC4\n" // qCameraLog |
|---|
| 1136 | | "STR R5, [R4,#0x28]\n" |
|---|
| 1137 | | "BL sub_FFC1BF24\n" |
|---|
| 1138 | | "BL sub_FFC1BE78\n" |
|---|
| 1139 | | "LDR R0, [R4,#0x1C]\n" |
|---|
| 1140 | | "LDR R1, [R4,#0x20]\n" |
|---|
| 1141 | | "ORRS R0, R0, R1\n" |
|---|
| 1142 | | "BLNE sub_FFC5EB0C\n" |
|---|
| 1143 | | "LDR R0, [R4,#0x68]\n" |
|---|
| 1144 | | "CMP R0, #0\n" |
|---|
| 1145 | | "BNE loc_FFC5E1A4\n" |
|---|
| 1146 | | "BL sub_FFC1BF94\n" // CreateTask_StartupImage |
|---|
| 1147 | | "B loc_FFC5E1AC\n" |
|---|
| 1148 | | "loc_FFC5E1A4:\n" |
|---|
| 1149 | | "BL sub_FFC15C28\n" |
|---|
| 1150 | | "BL sub_FFC1C7EC\n" |
|---|
| 1151 | | "loc_FFC5E1AC:\n" |
|---|
| 1152 | | "BL sub_FFC5F7A4_my\n" // CreateTask_InitFileModules |
|---|
| 1153 | | "BL sub_FFC5F81C\n" |
|---|
| 1154 | | "B loc_FFC5E1D0\n" |
|---|
| 1155 | | "loc_FFC5E1B8:\n" |
|---|
| 1156 | | "BL sub_FFC15C28\n" |
|---|
| 1157 | | "loc_FFC5E1BC:\n" |
|---|
| 1158 | | "BL sub_FFC5F84C\n" |
|---|
| 1159 | | "LDR R0, [R4,#0x30]\n" |
|---|
| 1160 | | "CMP R0, #0\n" |
|---|
| 1161 | | "BEQ loc_FFC5E1D0\n" |
|---|
| 1162 | | "loc_FFC5E1CC:\n" |
|---|
| 1163 | | "BL sub_FFC5D664\n" |
|---|
| 1164 | | "loc_FFC5E1D0:\n" |
|---|
| 1165 | | "MOV R0, #0\n" |
|---|
| 1166 | | "LDMFD SP!, {R4-R8,PC}\n" |
|---|
| 1167 | | "loc_FFC5E1D8:\n" |
|---|
| 1168 | | "MOV R0, #1\n" |
|---|
| 1169 | | "LDMFD SP!, {R4-R8,PC}\n" |
|---|
| 1170 | | ); |
|---|
| | 1742 | "STMFD SP!, {R4-R8,LR}\n" |
|---|
| | 1743 | "MOV R8, R0\n" |
|---|
| | 1744 | "MOV R0, #0x17\n" |
|---|
| | 1745 | "MUL R1, R0, R1\n" |
|---|
| | 1746 | "LDR R0, =0x125D4\n" |
|---|
| | 1747 | "MOV R6, #0\n" |
|---|
| | 1748 | "ADD R7, R0, R1,LSL#2\n" |
|---|
| | 1749 | "LDR R0, [R7,#0x3C]\n" |
|---|
| | 1750 | "MOV R5, #0\n" |
|---|
| | 1751 | "CMP R0, #6\n" |
|---|
| | 1752 | "ADDLS PC, PC, R0,LSL#2\n" |
|---|
| | 1753 | "B loc_FF84D2C8\n" |
|---|
| | 1754 | |
|---|
| | 1755 | "loc_FF84D1AC:\n" |
|---|
| | 1756 | "B loc_FF84D1E0\n" |
|---|
| | 1757 | |
|---|
| | 1758 | "loc_FF84D1B0:\n" |
|---|
| | 1759 | "B loc_FF84D1C8\n" |
|---|
| | 1760 | |
|---|
| | 1761 | "loc_FF84D1B4:\n" |
|---|
| | 1762 | "B loc_FF84D1C8\n" |
|---|
| | 1763 | |
|---|
| | 1764 | "loc_FF84D1B8:\n" |
|---|
| | 1765 | "B loc_FF84D1C8\n" |
|---|
| | 1766 | |
|---|
| | 1767 | "loc_FF84D1BC:\n" |
|---|
| | 1768 | "B loc_FF84D1C8\n" |
|---|
| | 1769 | |
|---|
| | 1770 | "loc_FF84D1C0:\n" |
|---|
| | 1771 | "B loc_FF84D2C0\n" |
|---|
| | 1772 | |
|---|
| | 1773 | "loc_FF84D1C4:\n" |
|---|
| | 1774 | "B loc_FF84D1C8\n" |
|---|
| | 1775 | |
|---|
| | 1776 | "loc_FF84D1C8:\n" |
|---|
| | 1777 | "MOV R2, #0\n" |
|---|
| | 1778 | "MOV R1, #0x200\n" |
|---|
| | 1779 | "MOV R0, #3\n" |
|---|
| | 1780 | "BL sub_FF8661D8\n" |
|---|
| | 1781 | "MOVS R4, R0\n" |
|---|
| | 1782 | "BNE loc_FF84D1E8\n" |
|---|
| | 1783 | |
|---|
| | 1784 | "loc_FF84D1E0:\n" |
|---|
| | 1785 | "MOV R0, #0\n" |
|---|
| | 1786 | "LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1787 | |
|---|
| | 1788 | |
|---|
| | 1789 | "loc_FF84D1E8:\n" |
|---|
| | 1790 | "LDR R12, [R7,#0x4C]\n" |
|---|
| | 1791 | "MOV R3, R4\n" |
|---|
| | 1792 | "MOV R2, #1\n" |
|---|
| | 1793 | "MOV R1, #0\n" |
|---|
| | 1794 | "MOV R0, R8\n" |
|---|
| | 1795 | |
|---|
| | 1796 | //"BLX R12\n" // !! Workaround !! |
|---|
| | 1797 | "MOV LR, PC\n" // gcc won't compile "BLX R12" nor "BL R12". |
|---|
| | 1798 | "MOV PC, R12\n" // workaround: make your own "BL" and hope we don't need the change to thumb-mode |
|---|
| | 1799 | |
|---|
| | 1800 | "CMP R0, #1\n" |
|---|
| | 1801 | "BNE loc_FF84D214\n" |
|---|
| | 1802 | "MOV R0, #3\n" |
|---|
| | 1803 | "BL sub_FF866318\n" |
|---|
| | 1804 | "B loc_FF84D1E0\n" |
|---|
| | 1805 | |
|---|
| | 1806 | "loc_FF84D214:\n" |
|---|
| | 1807 | "MOV R0, R8\n" |
|---|
| | 1808 | "BL sub_FF9186B8\n" // Add FAT32 autodetect-code after this line |
|---|
| | 1809 | |
|---|
| | 1810 | // Start of DataGhost's FAT32 autodetection code |
|---|
| | 1811 | // Policy: If there is a partition which has type W95 FAT32, use the first one of those for image storage |
|---|
| | 1812 | // According to the code below, we can use R1, R2, R3 and R12. |
|---|
| | 1813 | // LR wasn't really used anywhere but for storing a part of the partition signature. This is the only thing |
|---|
| | 1814 | // that won't work with an offset, but since we can load from LR+offset into LR, we can use this to do that :) |
|---|
| | 1815 | "MOV R12, R4\n" // Copy the MBR start address so we have something to work with |
|---|
| | 1816 | "MOV LR, R4\n" // Save old offset for MBR signature |
|---|
| | 1817 | "MOV R1, #1\n" // Note the current partition number |
|---|
| | 1818 | "B dg_sd_fat32_enter\n" // We actually need to check the first partition as well, no increments yet! |
|---|
| | 1819 | "dg_sd_fat32:\n" |
|---|
| | 1820 | "CMP R1, #4\n" // Did we already see the 4th partition? |
|---|
| | 1821 | "BEQ dg_sd_fat32_end\n" // Yes, break. We didn't find anything, so don't change anything. |
|---|
| | 1822 | "ADD R12, R12, #0x10\n" // Second partition |
|---|
| | 1823 | "ADD R1, R1, #1\n" // Second partition for the loop |
|---|
| | 1824 | "dg_sd_fat32_enter:\n" |
|---|
| | 1825 | "LDRB R2, [R12, #0x1BE]\n" // Partition status |
|---|
| | 1826 | "LDRB R3, [R12, #0x1C2]\n" // Partition type (FAT32 = 0xB) |
|---|
| | 1827 | "CMP R3, #0xB\n" // Is this a FAT32 partition? |
|---|
| | 1828 | "CMPNE R3, #0xC\n" // Not 0xB, is it 0xC (FAT32 LBA) then? |
|---|
| | 1829 | "BNE dg_sd_fat32\n" // No, it isn't. |
|---|
| | 1830 | "CMP R2, #0x00\n" // It is, check the validity of the partition type |
|---|
| | 1831 | "CMPNE R2, #0x80\n" |
|---|
| | 1832 | "BNE dg_sd_fat32\n" // Invalid, go to next partition |
|---|
| | 1833 | // This partition is valid, it's the first one, bingo! |
|---|
| | 1834 | "MOV R4, R12\n" // Move the new MBR offset for the partition detection. |
|---|
| | 1835 | |
|---|
| | 1836 | "dg_sd_fat32_end:\n" |
|---|
| | 1837 | // End of DataGhost's FAT32 autodetection code |
|---|
| | 1838 | "LDRB R1, [R4,#0x1C9]\n" // Continue with firmware |
|---|
| | 1839 | "LDRB R3, [R4,#0x1C8]\n" |
|---|
| | 1840 | "LDRB R12, [R4,#0x1CC]\n" |
|---|
| | 1841 | "MOV R1, R1,LSL#24\n" |
|---|
| | 1842 | "ORR R1, R1, R3,LSL#16\n" |
|---|
| | 1843 | "LDRB R3, [R4,#0x1C7]\n" |
|---|
| | 1844 | "LDRB R2, [R4,#0x1BE]\n" |
|---|
| | 1845 | //"LDRB LR, [R4,#0x1FF]\n" // replaced, see below |
|---|
| | 1846 | "ORR R1, R1, R3,LSL#8\n" |
|---|
| | 1847 | "LDRB R3, [R4,#0x1C6]\n" |
|---|
| | 1848 | "CMP R2, #0\n" |
|---|
| | 1849 | "CMPNE R2, #0x80\n" |
|---|
| | 1850 | "ORR R1, R1, R3\n" |
|---|
| | 1851 | "LDRB R3, [R4,#0x1CD]\n" |
|---|
| | 1852 | "MOV R3, R3,LSL#24\n" |
|---|
| | 1853 | "ORR R3, R3, R12,LSL#16\n" |
|---|
| | 1854 | "LDRB R12, [R4,#0x1CB]\n" |
|---|
| | 1855 | "ORR R3, R3, R12,LSL#8\n" |
|---|
| | 1856 | "LDRB R12, [R4,#0x1CA]\n" |
|---|
| | 1857 | "ORR R3, R3, R12\n" |
|---|
| | 1858 | //"LDRB R12, [R4,#0x1FE]\n" // replaced, see below |
|---|
| | 1859 | |
|---|
| | 1860 | "LDRB R12, [LR,#0x1FE]\n" // New! First MBR signature byte (0x55) |
|---|
| | 1861 | "LDRB LR, [LR,#0x1FF]\n" // Last MBR signature byte (0xAA) |
|---|
| | 1862 | |
|---|
| | 1863 | "MOV R4, #0\n" |
|---|
| | 1864 | "BNE loc_FF84D29C\n" |
|---|
| | 1865 | "CMP R0, R1\n" |
|---|
| | 1866 | "BCC loc_FF84D29C\n" |
|---|
| | 1867 | "ADD R2, R1, R3\n" |
|---|
| | 1868 | "CMP R2, R0\n" |
|---|
| | 1869 | "CMPLS R12, #0x55\n" |
|---|
| | 1870 | "CMPEQ LR, #0xAA\n" |
|---|
| | 1871 | "MOVEQ R6, R1\n" |
|---|
| | 1872 | "MOVEQ R5, R3\n" |
|---|
| | 1873 | "MOVEQ R4, #1\n" |
|---|
| | 1874 | |
|---|
| | 1875 | "loc_FF84D29C:\n" |
|---|
| | 1876 | "MOV R0, #3\n" |
|---|
| | 1877 | "BL sub_FF866318\n" |
|---|
| | 1878 | "CMP R4, #0\n" |
|---|
| | 1879 | "BNE loc_FF84D2D4\n" |
|---|
| | 1880 | "MOV R6, #0\n" |
|---|
| | 1881 | "MOV R0, R8\n" |
|---|
| | 1882 | "BL sub_FF9186B8\n" |
|---|
| | 1883 | "MOV R5, R0\n" |
|---|
| | 1884 | "B loc_FF84D2D4\n" |
|---|
| | 1885 | |
|---|
| | 1886 | |
|---|
| | 1887 | "loc_FF84D2C0:\n" |
|---|
| | 1888 | "MOV R5, #0x40\n" |
|---|
| | 1889 | "B loc_FF84D2D4\n" |
|---|
| | 1890 | |
|---|
| | 1891 | |
|---|
| | 1892 | "loc_FF84D2C8:\n" |
|---|
| | 1893 | "LDR R1, =0x365\n" |
|---|
| | 1894 | "LDR R0, =0xFF84D170\n" // aMounter_c |
|---|
| | 1895 | "BL _DebugAssert\n" |
|---|
| | 1896 | |
|---|
| | 1897 | "loc_FF84D2D4:\n" |
|---|
| | 1898 | "STR R6, [R7,#0x44]!\n" |
|---|
| | 1899 | "MOV R0, #1\n" |
|---|
| | 1900 | "STR R5, [R7,#4]\n" |
|---|
| | 1901 | "LDMFD SP!, {R4-R8,PC}\n" |
|---|
| | 1902 | |
|---|
| | 1903 | ); |
|---|
| 1172 | | |
|---|
| 1173 | | void __attribute__((naked,noinline)) sub_FFC5F7A4_my() { //#fs CreateTask_InitFileModules |
|---|
| 1174 | | asm volatile ( |
|---|
| 1175 | | "LDR R0, =0x5AB4\n" |
|---|
| 1176 | | "STMFD SP!, {R3,LR}\n" |
|---|
| 1177 | | "LDR R1, [R0,#4]\n" |
|---|
| 1178 | | "CMP R1, #0\n" |
|---|
| 1179 | | "BNE locret_FFC5F7DC\n" |
|---|
| 1180 | | "MOV R1, #1\n" |
|---|
| 1181 | | "STR R1, [R0,#4]\n" |
|---|
| 1182 | | "MOV R3, #0\n" |
|---|
| 1183 | | "STR R3, [SP]\n" |
|---|
| 1184 | | "LDR R3, =task_InitFileModules_my\n" // continue for SDHC-boot (orig: FFC5F754) |
|---|
| 1185 | | "MOV R1, #0x19\n" |
|---|
| 1186 | | "LDR R0, =0xFFC5F908\n" // aInitfilemodule ; "InitFileModules" |
|---|
| 1187 | | "MOV R2, #0x1000\n" |
|---|
| 1188 | | "BL sub_FFC0BBC0\n" // CreateTask, 0xFFC0BBC0 |
|---|
| 1189 | | "locret_FFC5F7DC:\n" |
|---|
| 1190 | | "LDMFD SP!, {R12,PC}\n" |
|---|
| 1191 | | ); |
|---|
| 1192 | | }; //#fe |
|---|
| 1193 | | |
|---|
| 1194 | | void __attribute__((naked,noinline)) task_InitFileModules_my() { //#fs |
|---|
| 1195 | | asm volatile ( |
|---|
| 1196 | | "STMFD SP!, {R4-R6,LR}\n" |
|---|
| 1197 | | "BL sub_FFC5A4BC\n" |
|---|
| 1198 | | "LDR R5, =0x5006\n" |
|---|
| 1199 | | "MOVS R4, R0\n" |
|---|
| 1200 | | "MOVNE R1, #0\n" |
|---|
| 1201 | | "MOVNE R0, R5\n" |
|---|
| 1202 | | "BLNE sub_FFC5B69C\n" |
|---|
| 1203 | | "BL sub_FFC5A4E8_my\n" // continue to SDHC-hook here! |
|---|
| 1204 | | |
|---|
| 1205 | | "BL core_spytask_can_start\n" // CHDK: Set "it's-save-to-start"-Flag for spytask |
|---|
| 1206 | | |
|---|
| 1207 | | "CMP R4, #0\n" |
|---|
| 1208 | | "MOVEQ R0, R5\n" |
|---|
| 1209 | | "LDMEQFD SP!, {R4-R6,LR}\n" |
|---|
| 1210 | | "MOVEQ R1, #0\n" |
|---|
| 1211 | | "BEQ sub_FFC5B69C\n" // cameralog "LogicalEvent...", it's save to run this after spytask has started |
|---|
| 1212 | | "LDMFD SP!, {R4-R6,PC}\n" |
|---|
| 1213 | | ); |
|---|
| 1214 | | }; //#fe |
|---|
| 1215 | | |
|---|
| 1216 | | void __attribute__((naked,noinline)) sub_FFC5A4E8_my() { //#fs |
|---|
| 1217 | | asm volatile ( |
|---|
| 1218 | | "STMFD SP!, {R4,LR}\n" |
|---|
| 1219 | | "BL sub_FFC3F0CC_my\n" // continue to SDHC-hook here! |
|---|
| 1220 | | "LDR R4, =0x58D0\n" |
|---|
| 1221 | | "LDR R0, [R4,#4]\n" |
|---|
| 1222 | | "CMP R0, #0\n" |
|---|
| 1223 | | "BNE loc_FFC5A518\n" |
|---|
| 1224 | | "BL sub_FFC674CC\n" |
|---|
| 1225 | | "BL sub_FFCDCA24\n" |
|---|
| 1226 | | "BL sub_FFC674CC\n" |
|---|
| 1227 | | "BL sub_FFCE6504\n" |
|---|
| 1228 | | "BL sub_FFC674DC\n" |
|---|
| 1229 | | "BL sub_FFCDCAC4\n" |
|---|
| 1230 | | "loc_FFC5A518:\n" |
|---|
| 1231 | | "MOV R0, #1\n" |
|---|
| 1232 | | "STR R0, [R4]\n" |
|---|
| 1233 | | "LDMFD SP!, {R4,PC}\n" |
|---|
| 1234 | | ); |
|---|
| 1235 | | }; //#fe |
|---|
| 1236 | | |
|---|
| 1237 | | void __attribute__((naked,noinline)) sub_FFC3F0CC_my() { //#fs |
|---|
| 1238 | | asm volatile ( |
|---|
| 1239 | | "STMFD SP!, {R4-R6,LR}\n" |
|---|
| 1240 | | "MOV R6, #0\n" |
|---|
| 1241 | | "MOV R0, R6\n" |
|---|
| 1242 | | "BL sub_FFC3EC9C\n" |
|---|
| 1243 | | "LDR R4, =0x11800\n" |
|---|
| 1244 | | "MOV R5, #0\n" |
|---|
| 1245 | | "LDR R0, [R4,#0x38]\n" |
|---|
| 1246 | | "BL sub_FFC3F664\n" |
|---|
| 1247 | | "CMP R0, #0\n" |
|---|
| 1248 | | "LDREQ R0, =0x2BA0\n" |
|---|
| 1249 | | "STREQ R5, [R0,#0xC]\n" |
|---|
| 1250 | | "STREQ R5, [R0,#0x10]\n" |
|---|
| 1251 | | "STREQ R5, [R0,#0x14]\n" |
|---|
| 1252 | | "MOV R0, R6\n" |
|---|
| 1253 | | "BL sub_FFC3ECDC\n" // uMounter (u=unknown, just to prevent misunderstandings) |
|---|
| 1254 | | "MOV R0, R6\n" |
|---|
| 1255 | | "BL sub_FFC3EF08_my\n" // continue to SDHC-hook here! |
|---|
| 1256 | | "MOV R5, R0\n" |
|---|
| 1257 | | "MOV R0, R6\n" |
|---|
| 1258 | | "BL sub_FFC3EF74\n" |
|---|
| 1259 | | "LDR R1, [R4,#0x3C]\n" |
|---|
| 1260 | | "AND R2, R5, R0\n" |
|---|
| 1261 | | "CMP R1, #0\n" |
|---|
| 1262 | | "MOV R0, #0\n" |
|---|
| 1263 | | "MOVEQ R0, #0x80000001\n" |
|---|
| 1264 | | "BEQ loc_FFC3F160\n" |
|---|
| 1265 | | "LDR R3, [R4,#0x2C]\n" |
|---|
| 1266 | | "CMP R3, #2\n" |
|---|
| 1267 | | "MOVEQ R0, #4\n" |
|---|
| 1268 | | "CMP R1, #5\n" |
|---|
| 1269 | | "ORRNE R0, R0, #1\n" |
|---|
| 1270 | | "BICEQ R0, R0, #1\n" |
|---|
| 1271 | | "CMP R2, #0\n" |
|---|
| 1272 | | "BICEQ R0, R0, #2\n" |
|---|
| 1273 | | "ORREQ R0, R0, #0x80000000\n" |
|---|
| 1274 | | "BICNE R0, R0, #0x80000000\n" |
|---|
| 1275 | | "ORRNE R0, R0, #2\n" |
|---|
| 1276 | | "loc_FFC3F160:\n" |
|---|
| 1277 | | "STR R0, [R4,#0x40]\n" |
|---|
| 1278 | | "LDMFD SP!, {R4-R6,PC}\n" |
|---|
| 1279 | | ); |
|---|
| 1280 | | }; //#fe |
|---|
| 1281 | | |
|---|
| 1282 | | void __attribute__((naked,noinline)) sub_FFC3EF08_my() { //#fs |
|---|
| 1283 | | asm volatile ( |
|---|
| 1284 | | "STMFD SP!, {R4-R6,LR}\n" |
|---|
| 1285 | | "LDR R5, =0x2BA0\n" |
|---|
| 1286 | | "MOV R6, R0\n" |
|---|
| 1287 | | "LDR R0, [R5,#0x10]\n" |
|---|
| 1288 | | "CMP R0, #0\n" |
|---|
| 1289 | | "MOVNE R0, #1\n" |
|---|
| 1290 | | "LDMNEFD SP!, {R4-R6,PC}\n" |
|---|
| 1291 | | "MOV R0, #0x17\n" |
|---|
| 1292 | | "MUL R1, R0, R6\n" |
|---|
| 1293 | | "LDR R0, =0x11800\n" |
|---|
| 1294 | | "ADD R4, R0, R1,LSL#2\n" |
|---|
| 1295 | | "LDR R0, [R4,#0x38]\n" |
|---|
| 1296 | | "MOV R1, R6\n" |
|---|
| 1297 | | "BL sub_FFC3EDA0_my\n" // continue to SDHC-hook here! |
|---|
| 1298 | | "CMP R0, #0\n" |
|---|
| 1299 | | "LDMEQFD SP!, {R4-R6,PC}\n" |
|---|
| 1300 | | "LDR R0, [R4,#0x38]\n" |
|---|
| 1301 | | "MOV R1, R6\n" |
|---|
| 1302 | | "BL sub_FFC3F77C\n" |
|---|
| 1303 | | "CMP R0, #0\n" |
|---|
| 1304 | | "LDMEQFD SP!, {R4-R6,PC}\n" |
|---|
| 1305 | | "MOV R0, R6\n" |
|---|
| 1306 | | "BL sub_FFC3E8BC\n" |
|---|
| 1307 | | "CMP R0, #0\n" |
|---|
| 1308 | | "MOVNE R1, #1\n" |
|---|
| 1309 | | "STRNE R1, [R5,#0x10]\n" |
|---|
| 1310 | | "LDMFD SP!, {R4-R6,PC}\n" |
|---|
| 1311 | | ); |
|---|
| 1312 | | }; //#fe |
|---|
| 1313 | | |
|---|
| 1314 | | void __attribute__((naked,noinline)) sub_FFC3EDA0_my() { //#fs ; Partition table parse takes place here. => SDHC-boot |
|---|
| 1315 | | asm volatile ( |
|---|
| 1316 | | "STMFD SP!, {R4-R8,LR} \n" |
|---|
| 1317 | | "MOV R8, R0\n" |
|---|
| 1318 | | "MOV R0, #0x17\n" |
|---|
| 1319 | | "MUL R1, R0, R1\n" |
|---|
| 1320 | | "LDR R0, =0x11800\n" |
|---|
| 1321 | | "MOV R6, #0\n" |
|---|
| 1322 | | "ADD R7, R0, R1,LSL#2\n" |
|---|
| 1323 | | "LDR R0, [R7,#0x3C]\n" |
|---|
| 1324 | | "MOV R5, #0\n" |
|---|
| 1325 | | "CMP R0, #6\n" |
|---|
| 1326 | | "ADDLS PC, PC, R0,LSL#2\n" |
|---|
| 1327 | | "B loc_FFC3EEEC\n" |
|---|
| 1328 | | "loc_FFC3EDD0:\n" |
|---|
| 1329 | | "B loc_FFC3EE04\n" |
|---|
| 1330 | | "loc_FFC3EDD4:\n" |
|---|
| 1331 | | "B loc_FFC3EDEC\n" |
|---|
| 1332 | | "loc_FFC3EDD8:\n" |
|---|
| 1333 | | "B loc_FFC3EDEC\n" |
|---|
| 1334 | | "loc_FFC3EDDC:\n" |
|---|
| 1335 | | "B loc_FFC3EDEC\n" |
|---|
| 1336 | | "loc_FFC3EDE0:\n" |
|---|
| 1337 | | "B loc_FFC3EDEC\n" |
|---|
| 1338 | | "loc_FFC3EDE4:\n" |
|---|
| 1339 | | "B loc_FFC3EEE4\n" |
|---|
| 1340 | | "loc_FFC3EDE8:\n" |
|---|
| 1341 | | "B loc_FFC3EDEC\n" |
|---|
| 1342 | | "loc_FFC3EDEC:\n" |
|---|
| 1343 | | "MOV R2, #0\n" |
|---|
| 1344 | | "MOV R1, #0x200\n" |
|---|
| 1345 | | "MOV R0, #3\n" |
|---|
| 1346 | | "BL sub_FFC56994\n" |
|---|
| 1347 | | "MOVS R4, R0\n" |
|---|
| 1348 | | "BNE loc_FFC3EE0C\n" |
|---|
| 1349 | | "loc_FFC3EE04:\n" |
|---|
| 1350 | | "MOV R0, #0\n" |
|---|
| 1351 | | "LDMFD SP!, {R4-R8,PC}\n" |
|---|
| 1352 | | "loc_FFC3EE0C:\n" |
|---|
| 1353 | | "LDR R12, [R7,#0x4C]\n" |
|---|
| 1354 | | "MOV R3, R4\n" |
|---|
| 1355 | | "MOV R2, #1\n" |
|---|
| 1356 | | "MOV R1, #0\n" |
|---|
| 1357 | | "MOV R0, R8\n" |
|---|
| 1358 | | |
|---|
| 1359 | | //"BLX R12\n" // !! Workaround !! |
|---|
| 1360 | | "MOV LR, PC\n" // gcc won't compile "BLX R12" nor "BL R12". |
|---|
| 1361 | | "MOV PC, R12\n" // workaround: make your own "BL" and hope we don't need the change to thumb-mode |
|---|
| 1362 | | |
|---|
| 1363 | | "CMP R0, #1\n" |
|---|
| 1364 | | "BNE loc_FFC3EE38\n" |
|---|
| 1365 | | "MOV R0, #3\n" |
|---|
| 1366 | | "BL sub_FFC56AD4\n" |
|---|
| 1367 | | "B loc_FFC3EE04\n" |
|---|
| 1368 | | |
|---|
| 1369 | | "loc_FFC3EE38:\n" |
|---|
| 1370 | | "MOV R0, R8\n" |
|---|
| 1371 | | "BL sub_FFCF554C\n" // Add FAT32 autodetect-code after this line\n" |
|---|
| 1372 | | |
|---|
| 1373 | | // Start of DataGhost's FAT32 autodetection code |
|---|
| 1374 | | // Policy: If there is a partition which has type W95 FAT32, use the first one of those for image storage |
|---|
| 1375 | | // According to the code below, we can use R1, R2, R3 and R12. |
|---|
| 1376 | | // LR wasn't really used anywhere but for storing a part of the partition signature. This is the only thing |
|---|
| 1377 | | // that won't work with an offset, but since we can load from LR+offset into LR, we can use this to do that :) |
|---|
| 1378 | | "MOV R12, R4\n" // Copy the MBR start address so we have something to work with |
|---|
| 1379 | | "MOV LR, R4\n" // Save old offset for MBR signature |
|---|
| 1380 | | "MOV R1, #1\n" // Note the current partition number |
|---|
| 1381 | | "B dg_sd_fat32_enter\n" // We actually need to check the first partition as well, no increments yet! |
|---|
| 1382 | | "dg_sd_fat32:\n" |
|---|
| 1383 | | "CMP R1, #4\n" // Did we already see the 4th partition? |
|---|
| 1384 | | "BEQ dg_sd_fat32_end\n" // Yes, break. We didn't find anything, so don't change anything. |
|---|
| 1385 | | "ADD R12, R12, #0x10\n" // Second partition |
|---|
| 1386 | | "ADD R1, R1, #1\n" // Second partition for the loop |
|---|
| 1387 | | "dg_sd_fat32_enter:\n" |
|---|
| 1388 | | "LDRB R2, [R12, #0x1BE]\n" // Partition status |
|---|
| 1389 | | "LDRB R3, [R12, #0x1C2]\n" // Partition type (FAT32 = 0xB) |
|---|
| 1390 | | "CMP R3, #0xB\n" // Is this a FAT32 partition? |
|---|
| 1391 | | "BNE dg_sd_fat32\n" // No, it isn't. |
|---|
| 1392 | | "CMP R2, #0x00\n" // It is, check the validity of the partition type |
|---|
| 1393 | | "CMPNE R2, #0x80\n" |
|---|
| 1394 | | "BNE dg_sd_fat32\n" // Invalid, go to next partition |
|---|
| 1395 | | // This partition is valid, it's the first one, bingo! |
|---|
| 1396 | | "MOV R4, R12\n" // Move the new MBR offset for the partition detection. |
|---|
| 1397 | | |
|---|
| 1398 | | "dg_sd_fat32_end:\n" |
|---|
| 1399 | | // End of DataGhost's FAT32 autodetection code |
|---|
| 1400 | | |
|---|
| 1401 | | "LDRB R1, [R4,#0x1C9]\n" // Continue with firmware |
|---|
| 1402 | | "LDRB R3, [R4,#0x1C8]\n" |
|---|
| 1403 | | "LDRB R12, [R4,#0x1CC]\n" |
|---|
| 1404 | | "MOV R1, R1,LSL#24\n" |
|---|
| 1405 | | "ORR R1, R1, R3,LSL#16\n" |
|---|
| 1406 | | "LDRB R3, [R4,#0x1C7]\n" |
|---|
| 1407 | | "LDRB R2, [R4,#0x1BE]\n" |
|---|
| 1408 | | //"LDRB LR, [R4,#0x1FF]\n" // replaced, see below |
|---|
| 1409 | | "ORR R1, R1, R3,LSL#8\n" |
|---|
| 1410 | | "LDRB R3, [R4,#0x1C6]\n" |
|---|
| 1411 | | "CMP R2, #0\n" |
|---|
| 1412 | | "CMPNE R2, #0x80\n" |
|---|
| 1413 | | "ORR R1, R1, R3\n" |
|---|
| 1414 | | "LDRB R3, [R4,#0x1CD]\n" |
|---|
| 1415 | | "MOV R3, R3,LSL#24\n" |
|---|
| 1416 | | "ORR R3, R3, R12,LSL#16\n" |
|---|
| 1417 | | "LDRB R12, [R4,#0x1CB]\n" |
|---|
| 1418 | | "ORR R3, R3, R12,LSL#8\n" |
|---|
| 1419 | | "LDRB R12, [R4,#0x1CA]\n" |
|---|
| 1420 | | "ORR R3, R3, R12\n" |
|---|
| 1421 | | //"LDRB R12, [R4,#0x1FE]\n" // replaced, see below |
|---|
| 1422 | | |
|---|
| 1423 | | "LDRB R12, [LR,#0x1FE]\n" // New! First MBR signature byte (0x55) |
|---|
| 1424 | | "LDRB LR, [LR,#0x1FF]\n" // Last MBR signature byte (0xAA) |
|---|
| 1425 | | |
|---|
| 1426 | | "MOV R4, #0\n" |
|---|
| 1427 | | "BNE loc_FFC3EEC0\n" |
|---|
| 1428 | | "CMP R0, R1\n" |
|---|
| 1429 | | "BCC loc_FFC3EEC0\n" |
|---|
| 1430 | | "ADD R2, R1, R3\n" |
|---|
| 1431 | | "CMP R2, R0\n" |
|---|
| 1432 | | "CMPLS R12, #0x55\n" |
|---|
| 1433 | | "CMPEQ LR, #0xAA\n" |
|---|
| 1434 | | "MOVEQ R6, R1\n" |
|---|
| 1435 | | "MOVEQ R5, R3\n" |
|---|
| 1436 | | "MOVEQ R4, #1\n" |
|---|
| 1437 | | "loc_FFC3EEC0:\n" |
|---|
| 1438 | | "MOV R0, #3\n" |
|---|
| 1439 | | "BL sub_FFC56AD4\n" |
|---|
| 1440 | | "CMP R4, #0\n" |
|---|
| 1441 | | "BNE loc_FFC3EEF8\n" |
|---|
| 1442 | | "MOV R6, #0\n" |
|---|
| 1443 | | "MOV R0, R8\n" |
|---|
| 1444 | | "BL sub_FFCF554C\n" |
|---|
| 1445 | | "MOV R5, R0\n" |
|---|
| 1446 | | "B loc_FFC3EEF8\n" |
|---|
| 1447 | | "loc_FFC3EEE4:\n" |
|---|
| 1448 | | "MOV R5, #0x40\n" |
|---|
| 1449 | | "B loc_FFC3EEF8\n" |
|---|
| 1450 | | "loc_FFC3EEEC:\n" |
|---|
| 1451 | | "LDR R1, =0x365\n" |
|---|
| 1452 | | "LDR R0, =0xFFC3ED94\n" // aMounter_c ; "Mounter.c" |
|---|
| 1453 | | "BL sub_FFC0C098\n" // Assert |
|---|
| 1454 | | "loc_FFC3EEF8:\n" |
|---|
| 1455 | | "STR R6, [R7,#0x44]!\n" |
|---|
| 1456 | | "MOV R0, #1\n" |
|---|
| 1457 | | "STR R5, [R7,#4]\n" |
|---|
| 1458 | | "LDMFD SP!, {R4-R8,PC}\n" |
|---|
| 1459 | | ); |
|---|
| 1460 | | }; //#fe |
|---|
| 1461 | | */ |
|---|
| 1462 | | |
|---|