Files

235 lines
11 KiB
ArmAsm

# CARDWrite.c
.include "macros.inc"
.section .text, "ax"
.balign 4
WriteCallback:
/* 0BB5BC 800C0B5C 7C0802A6 */ mflr r0
/* 0BB5C0 800C0B60 90010004 */ stw r0, 4(r1)
/* 0BB5C4 800C0B64 9421FFE0 */ stwu r1, -0x20(r1)
/* 0BB5C8 800C0B68 93E1001C */ stw r31, 0x1c(r1)
/* 0BB5CC 800C0B6C 93C10018 */ stw r30, 0x18(r1)
/* 0BB5D0 800C0B70 3BC30000 */ addi r30, r3, 0
/* 0BB5D4 800C0B74 3C608013 */ lis r3, __CARDBlock@ha
/* 0BB5D8 800C0B78 93A10014 */ stw r29, 0x14(r1)
/* 0BB5DC 800C0B7C 1CBE0110 */ mulli r5, r30, 0x110
/* 0BB5E0 800C0B80 93810010 */ stw r28, 0x10(r1)
/* 0BB5E4 800C0B84 380327D0 */ addi r0, r3, __CARDBlock@l
/* 0BB5E8 800C0B88 7C9C2379 */ or. r28, r4, r4
/* 0BB5EC 800C0B8C 7FE02A14 */ add r31, r0, r5
/* 0BB5F0 800C0B90 418000F0 */ blt lbl_800C0C80
/* 0BB5F4 800C0B94 83BF00C0 */ lwz r29, 0xc0(r31)
/* 0BB5F8 800C0B98 807D000C */ lwz r3, 0xc(r29)
/* 0BB5FC 800C0B9C 2C030000 */ cmpwi r3, 0
/* 0BB600 800C0BA0 4080000C */ bge lbl_800C0BAC
/* 0BB604 800C0BA4 3B80FFF2 */ li r28, -14
/* 0BB608 800C0BA8 480000D8 */ b lbl_800C0C80
lbl_800C0BAC:
/* 0BB60C 800C0BAC 801F000C */ lwz r0, 0xc(r31)
/* 0BB610 800C0BB0 7C001850 */ subf r0, r0, r3
/* 0BB614 800C0BB4 901D000C */ stw r0, 0xc(r29)
/* 0BB618 800C0BB8 801D000C */ lwz r0, 0xc(r29)
/* 0BB61C 800C0BBC 2C000000 */ cmpwi r0, 0
/* 0BB620 800C0BC0 41810054 */ bgt lbl_800C0C14
/* 0BB624 800C0BC4 7FE3FB78 */ mr r3, r31
/* 0BB628 800C0BC8 4BFFCD75 */ bl __CARDGetDirBlock
/* 0BB62C 800C0BCC 80BD0004 */ lwz r5, 4(r29)
/* 0BB630 800C0BD0 3C808000 */ lis r4, 0x8000
/* 0BB634 800C0BD4 800400F8 */ lwz r0, 0xf8(r4)
/* 0BB638 800C0BD8 54A43032 */ slwi r4, r5, 6
/* 0BB63C 800C0BDC 7F832214 */ add r28, r3, r4
/* 0BB640 800C0BE0 541DF0BE */ srwi r29, r0, 2
/* 0BB644 800C0BE4 4BFE16C5 */ bl OSGetTime
/* 0BB648 800C0BE8 38DD0000 */ addi r6, r29, 0
/* 0BB64C 800C0BEC 38A00000 */ li r5, 0
/* 0BB650 800C0BF0 4800CE2D */ bl __div2i
/* 0BB654 800C0BF4 909C0028 */ stw r4, 0x28(r28)
/* 0BB658 800C0BF8 38000000 */ li r0, 0
/* 0BB65C 800C0BFC 387E0000 */ addi r3, r30, 0
/* 0BB660 800C0C00 809F00D0 */ lwz r4, 0xd0(r31)
/* 0BB664 800C0C04 901F00D0 */ stw r0, 0xd0(r31)
/* 0BB668 800C0C08 4BFFCED5 */ bl __CARDUpdateDir
/* 0BB66C 800C0C0C 7C7C1B78 */ mr r28, r3
/* 0BB670 800C0C10 48000068 */ b lbl_800C0C78
lbl_800C0C14:
/* 0BB674 800C0C14 7FE3FB78 */ mr r3, r31
/* 0BB678 800C0C18 4BFFC921 */ bl __CARDGetFatBlock
/* 0BB67C 800C0C1C 809D0008 */ lwz r4, 8(r29)
/* 0BB680 800C0C20 801F000C */ lwz r0, 0xc(r31)
/* 0BB684 800C0C24 7C040214 */ add r0, r4, r0
/* 0BB688 800C0C28 901D0008 */ stw r0, 8(r29)
/* 0BB68C 800C0C2C A01D0010 */ lhz r0, 0x10(r29)
/* 0BB690 800C0C30 5400083C */ slwi r0, r0, 1
/* 0BB694 800C0C34 7C03022E */ lhzx r0, r3, r0
/* 0BB698 800C0C38 B01D0010 */ sth r0, 0x10(r29)
/* 0BB69C 800C0C3C A09D0010 */ lhz r4, 0x10(r29)
/* 0BB6A0 800C0C40 28040005 */ cmplwi r4, 5
/* 0BB6A4 800C0C44 41800010 */ blt lbl_800C0C54
/* 0BB6A8 800C0C48 A01F0010 */ lhz r0, 0x10(r31)
/* 0BB6AC 800C0C4C 7C040040 */ cmplw r4, r0
/* 0BB6B0 800C0C50 4180000C */ blt lbl_800C0C5C
lbl_800C0C54:
/* 0BB6B4 800C0C54 3B80FFFA */ li r28, -6
/* 0BB6B8 800C0C58 48000028 */ b lbl_800C0C80
lbl_800C0C5C:
/* 0BB6BC 800C0C5C 801F000C */ lwz r0, 0xc(r31)
/* 0BB6C0 800C0C60 3C60800C */ lis r3, EraseCallback@ha
/* 0BB6C4 800C0C64 38A30CCC */ addi r5, r3, EraseCallback@l
/* 0BB6C8 800C0C68 7C8021D6 */ mullw r4, r0, r4
/* 0BB6CC 800C0C6C 387E0000 */ addi r3, r30, 0
/* 0BB6D0 800C0C70 4BFFAE81 */ bl __CARDEraseSector
/* 0BB6D4 800C0C74 7C7C1B78 */ mr r28, r3
lbl_800C0C78:
/* 0BB6D8 800C0C78 2C1C0000 */ cmpwi r28, 0
/* 0BB6DC 800C0C7C 40800030 */ bge lbl_800C0CAC
lbl_800C0C80:
/* 0BB6E0 800C0C80 83BF00D0 */ lwz r29, 0xd0(r31)
/* 0BB6E4 800C0C84 38000000 */ li r0, 0
/* 0BB6E8 800C0C88 387F0000 */ addi r3, r31, 0
/* 0BB6EC 800C0C8C 901F00D0 */ stw r0, 0xd0(r31)
/* 0BB6F0 800C0C90 7F84E378 */ mr r4, r28
/* 0BB6F4 800C0C94 4BFFB0E1 */ bl __CARDPutControlBlock
/* 0BB6F8 800C0C98 399D0000 */ addi r12, r29, 0
/* 0BB6FC 800C0C9C 7D8803A6 */ mtlr r12
/* 0BB700 800C0CA0 387E0000 */ addi r3, r30, 0
/* 0BB704 800C0CA4 389C0000 */ addi r4, r28, 0
/* 0BB708 800C0CA8 4E800021 */ blrl
lbl_800C0CAC:
/* 0BB70C 800C0CAC 80010024 */ lwz r0, 0x24(r1)
/* 0BB710 800C0CB0 83E1001C */ lwz r31, 0x1c(r1)
/* 0BB714 800C0CB4 83C10018 */ lwz r30, 0x18(r1)
/* 0BB718 800C0CB8 83A10014 */ lwz r29, 0x14(r1)
/* 0BB71C 800C0CBC 83810010 */ lwz r28, 0x10(r1)
/* 0BB720 800C0CC0 38210020 */ addi r1, r1, 0x20
/* 0BB724 800C0CC4 7C0803A6 */ mtlr r0
/* 0BB728 800C0CC8 4E800020 */ blr
EraseCallback:
/* 0BB72C 800C0CCC 7C0802A6 */ mflr r0
/* 0BB730 800C0CD0 90010004 */ stw r0, 4(r1)
/* 0BB734 800C0CD4 9421FFE0 */ stwu r1, -0x20(r1)
/* 0BB738 800C0CD8 93E1001C */ stw r31, 0x1c(r1)
/* 0BB73C 800C0CDC 93C10018 */ stw r30, 0x18(r1)
/* 0BB740 800C0CE0 93A10014 */ stw r29, 0x14(r1)
/* 0BB744 800C0CE4 7C9D2379 */ or. r29, r4, r4
/* 0BB748 800C0CE8 93810010 */ stw r28, 0x10(r1)
/* 0BB74C 800C0CEC 3B830000 */ addi r28, r3, 0
/* 0BB750 800C0CF0 1CBC0110 */ mulli r5, r28, 0x110
/* 0BB754 800C0CF4 3C608013 */ lis r3, __CARDBlock@ha
/* 0BB758 800C0CF8 380327D0 */ addi r0, r3, __CARDBlock@l
/* 0BB75C 800C0CFC 7FE02A14 */ add r31, r0, r5
/* 0BB760 800C0D00 41800030 */ blt lbl_800C0D30
/* 0BB764 800C0D04 809F00C0 */ lwz r4, 0xc0(r31)
/* 0BB768 800C0D08 3C60800C */ lis r3, WriteCallback@ha
/* 0BB76C 800C0D0C 38E30B5C */ addi r7, r3, WriteCallback@l
/* 0BB770 800C0D10 80BF000C */ lwz r5, 0xc(r31)
/* 0BB774 800C0D14 A0040010 */ lhz r0, 0x10(r4)
/* 0BB778 800C0D18 80DF00B4 */ lwz r6, 0xb4(r31)
/* 0BB77C 800C0D1C 387C0000 */ addi r3, r28, 0
/* 0BB780 800C0D20 7C8501D6 */ mullw r4, r5, r0
/* 0BB784 800C0D24 4BFFC799 */ bl __CARDWrite
/* 0BB788 800C0D28 7C7D1B79 */ or. r29, r3, r3
/* 0BB78C 800C0D2C 40800030 */ bge lbl_800C0D5C
lbl_800C0D30:
/* 0BB790 800C0D30 83DF00D0 */ lwz r30, 0xd0(r31)
/* 0BB794 800C0D34 38000000 */ li r0, 0
/* 0BB798 800C0D38 387F0000 */ addi r3, r31, 0
/* 0BB79C 800C0D3C 901F00D0 */ stw r0, 0xd0(r31)
/* 0BB7A0 800C0D40 7FA4EB78 */ mr r4, r29
/* 0BB7A4 800C0D44 4BFFB031 */ bl __CARDPutControlBlock
/* 0BB7A8 800C0D48 399E0000 */ addi r12, r30, 0
/* 0BB7AC 800C0D4C 7D8803A6 */ mtlr r12
/* 0BB7B0 800C0D50 387C0000 */ addi r3, r28, 0
/* 0BB7B4 800C0D54 389D0000 */ addi r4, r29, 0
/* 0BB7B8 800C0D58 4E800021 */ blrl
lbl_800C0D5C:
/* 0BB7BC 800C0D5C 80010024 */ lwz r0, 0x24(r1)
/* 0BB7C0 800C0D60 83E1001C */ lwz r31, 0x1c(r1)
/* 0BB7C4 800C0D64 83C10018 */ lwz r30, 0x18(r1)
/* 0BB7C8 800C0D68 83A10014 */ lwz r29, 0x14(r1)
/* 0BB7CC 800C0D6C 83810010 */ lwz r28, 0x10(r1)
/* 0BB7D0 800C0D70 38210020 */ addi r1, r1, 0x20
/* 0BB7D4 800C0D74 7C0803A6 */ mtlr r0
/* 0BB7D8 800C0D78 4E800020 */ blr
glabel CARDWriteAsync
/* 0BB7DC 800C0D7C 7C0802A6 */ mflr r0
/* 0BB7E0 800C0D80 90010004 */ stw r0, 4(r1)
/* 0BB7E4 800C0D84 9421FFC8 */ stwu r1, -0x38(r1)
/* 0BB7E8 800C0D88 BF610024 */ stmw r27, 0x24(r1)
/* 0BB7EC 800C0D8C 3B860000 */ addi r28, r6, 0
/* 0BB7F0 800C0D90 3B650000 */ addi r27, r5, 0
/* 0BB7F4 800C0D94 3BE40000 */ addi r31, r4, 0
/* 0BB7F8 800C0D98 3BC30000 */ addi r30, r3, 0
/* 0BB7FC 800C0D9C 3BA70000 */ addi r29, r7, 0
/* 0BB800 800C0DA0 389B0000 */ addi r4, r27, 0
/* 0BB804 800C0DA4 38BC0000 */ addi r5, r28, 0
/* 0BB808 800C0DA8 38C1001C */ addi r6, r1, 0x1c
/* 0BB80C 800C0DAC 4BFFF93D */ bl __CARDSeek
/* 0BB810 800C0DB0 2C030000 */ cmpwi r3, 0
/* 0BB814 800C0DB4 40800008 */ bge lbl_800C0DBC
/* 0BB818 800C0DB8 480000C4 */ b lbl_800C0E7C
lbl_800C0DBC:
/* 0BB81C 800C0DBC 8061001C */ lwz r3, 0x1c(r1)
/* 0BB820 800C0DC0 8083000C */ lwz r4, 0xc(r3)
/* 0BB824 800C0DC4 3884FFFF */ addi r4, r4, -1
/* 0BB828 800C0DC8 7F802039 */ and. r0, r28, r4
/* 0BB82C 800C0DCC 4082000C */ bne lbl_800C0DD8
/* 0BB830 800C0DD0 7F602039 */ and. r0, r27, r4
/* 0BB834 800C0DD4 41820010 */ beq lbl_800C0DE4
lbl_800C0DD8:
/* 0BB838 800C0DD8 3880FF80 */ li r4, -128
/* 0BB83C 800C0DDC 4BFFAF99 */ bl __CARDPutControlBlock
/* 0BB840 800C0DE0 4800009C */ b lbl_800C0E7C
lbl_800C0DE4:
/* 0BB844 800C0DE4 4BFFCB59 */ bl __CARDGetDirBlock
/* 0BB848 800C0DE8 801E0004 */ lwz r0, 4(r30)
/* 0BB84C 800C0DEC 54003032 */ slwi r0, r0, 6
/* 0BB850 800C0DF0 7C830214 */ add r4, r3, r0
/* 0BB854 800C0DF4 8061001C */ lwz r3, 0x1c(r1)
/* 0BB858 800C0DF8 4BFFF0B1 */ bl __CARDIsWritable
/* 0BB85C 800C0DFC 7C641B79 */ or. r4, r3, r3
/* 0BB860 800C0E00 40800010 */ bge lbl_800C0E10
/* 0BB864 800C0E04 8061001C */ lwz r3, 0x1c(r1)
/* 0BB868 800C0E08 4BFFAF6D */ bl __CARDPutControlBlock
/* 0BB86C 800C0E0C 48000070 */ b lbl_800C0E7C
lbl_800C0E10:
/* 0BB870 800C0E10 387F0000 */ addi r3, r31, 0
/* 0BB874 800C0E14 389B0000 */ addi r4, r27, 0
/* 0BB878 800C0E18 4BFDC995 */ bl DCStoreRange
/* 0BB87C 800C0E1C 281D0000 */ cmplwi r29, 0
/* 0BB880 800C0E20 4182000C */ beq lbl_800C0E2C
/* 0BB884 800C0E24 7FA0EB78 */ mr r0, r29
/* 0BB888 800C0E28 4800000C */ b lbl_800C0E34
lbl_800C0E2C:
/* 0BB88C 800C0E2C 3C60800C */ lis r3, __CARDDefaultApiCallback@ha
/* 0BB890 800C0E30 3803AD5C */ addi r0, r3, __CARDDefaultApiCallback@l
lbl_800C0E34:
/* 0BB894 800C0E34 8081001C */ lwz r4, 0x1c(r1)
/* 0BB898 800C0E38 3C60800C */ lis r3, EraseCallback@ha
/* 0BB89C 800C0E3C 38A30CCC */ addi r5, r3, EraseCallback@l
/* 0BB8A0 800C0E40 900400D0 */ stw r0, 0xd0(r4)
/* 0BB8A4 800C0E44 8061001C */ lwz r3, 0x1c(r1)
/* 0BB8A8 800C0E48 93E300B4 */ stw r31, 0xb4(r3)
/* 0BB8AC 800C0E4C 8061001C */ lwz r3, 0x1c(r1)
/* 0BB8B0 800C0E50 A01E0010 */ lhz r0, 0x10(r30)
/* 0BB8B4 800C0E54 8083000C */ lwz r4, 0xc(r3)
/* 0BB8B8 800C0E58 807E0000 */ lwz r3, 0(r30)
/* 0BB8BC 800C0E5C 7C8401D6 */ mullw r4, r4, r0
/* 0BB8C0 800C0E60 4BFFAC91 */ bl __CARDEraseSector
/* 0BB8C4 800C0E64 7C7E1B79 */ or. r30, r3, r3
/* 0BB8C8 800C0E68 40800010 */ bge lbl_800C0E78
/* 0BB8CC 800C0E6C 8061001C */ lwz r3, 0x1c(r1)
/* 0BB8D0 800C0E70 7FC4F378 */ mr r4, r30
/* 0BB8D4 800C0E74 4BFFAF01 */ bl __CARDPutControlBlock
lbl_800C0E78:
/* 0BB8D8 800C0E78 7FC3F378 */ mr r3, r30
lbl_800C0E7C:
/* 0BB8DC 800C0E7C BB610024 */ lmw r27, 0x24(r1)
/* 0BB8E0 800C0E80 8001003C */ lwz r0, 0x3c(r1)
/* 0BB8E4 800C0E84 38210038 */ addi r1, r1, 0x38
/* 0BB8E8 800C0E88 7C0803A6 */ mtlr r0
/* 0BB8EC 800C0E8C 4E800020 */ blr