Files
oot-gc/asm/CARDRead.s
T

329 lines
15 KiB
ArmAsm

# CARDRead.c
.include "macros.inc"
.section .text, "ax"
.balign 4
glabel __CARDSeek
/* 0BB148 800C06E8 7C0802A6 */ mflr r0
/* 0BB14C 800C06EC 90010004 */ stw r0, 4(r1)
/* 0BB150 800C06F0 9421FFD0 */ stwu r1, -0x30(r1)
/* 0BB154 800C06F4 93E1002C */ stw r31, 0x2c(r1)
/* 0BB158 800C06F8 3BE60000 */ addi r31, r6, 0
/* 0BB15C 800C06FC 93C10028 */ stw r30, 0x28(r1)
/* 0BB160 800C0700 3BC50000 */ addi r30, r5, 0
/* 0BB164 800C0704 93A10024 */ stw r29, 0x24(r1)
/* 0BB168 800C0708 3BA40000 */ addi r29, r4, 0
/* 0BB16C 800C070C 38810018 */ addi r4, r1, 0x18
/* 0BB170 800C0710 93810020 */ stw r28, 0x20(r1)
/* 0BB174 800C0714 7C7C1B78 */ mr r28, r3
/* 0BB178 800C0718 80630000 */ lwz r3, 0(r3)
/* 0BB17C 800C071C 4BFFB5A1 */ bl __CARDGetControlBlock
/* 0BB180 800C0720 2C030000 */ cmpwi r3, 0
/* 0BB184 800C0724 40800008 */ bge lbl_800C072C
/* 0BB188 800C0728 48000158 */ b lbl_800C0880
lbl_800C072C:
/* 0BB18C 800C072C A01C0010 */ lhz r0, 0x10(r28)
/* 0BB190 800C0730 28000005 */ cmplwi r0, 5
/* 0BB194 800C0734 41800028 */ blt lbl_800C075C
/* 0BB198 800C0738 80610018 */ lwz r3, 0x18(r1)
/* 0BB19C 800C073C A0A30010 */ lhz r5, 0x10(r3)
/* 0BB1A0 800C0740 7C002840 */ cmplw r0, r5
/* 0BB1A4 800C0744 40800018 */ bge lbl_800C075C
/* 0BB1A8 800C0748 8083000C */ lwz r4, 0xc(r3)
/* 0BB1AC 800C074C 801C0008 */ lwz r0, 8(r28)
/* 0BB1B0 800C0750 7C8521D6 */ mullw r4, r5, r4
/* 0BB1B4 800C0754 7C040000 */ cmpw r4, r0
/* 0BB1B8 800C0758 41810014 */ bgt lbl_800C076C
lbl_800C075C:
/* 0BB1BC 800C075C 80610018 */ lwz r3, 0x18(r1)
/* 0BB1C0 800C0760 3880FF80 */ li r4, -128
/* 0BB1C4 800C0764 4BFFB611 */ bl __CARDPutControlBlock
/* 0BB1C8 800C0768 48000118 */ b lbl_800C0880
lbl_800C076C:
/* 0BB1CC 800C076C 4BFFD1D1 */ bl __CARDGetDirBlock
/* 0BB1D0 800C0770 801C0004 */ lwz r0, 4(r28)
/* 0BB1D4 800C0774 80A10018 */ lwz r5, 0x18(r1)
/* 0BB1D8 800C0778 54003032 */ slwi r0, r0, 6
/* 0BB1DC 800C077C 7C830214 */ add r4, r3, r0
/* 0BB1E0 800C0780 8065000C */ lwz r3, 0xc(r5)
/* 0BB1E4 800C0784 A0040038 */ lhz r0, 0x38(r4)
/* 0BB1E8 800C0788 7C6019D6 */ mullw r3, r0, r3
/* 0BB1EC 800C078C 7C03F000 */ cmpw r3, r30
/* 0BB1F0 800C0790 40810010 */ ble lbl_800C07A0
/* 0BB1F4 800C0794 7C1EEA14 */ add r0, r30, r29
/* 0BB1F8 800C0798 7C030000 */ cmpw r3, r0
/* 0BB1FC 800C079C 40800014 */ bge lbl_800C07B0
lbl_800C07A0:
/* 0BB200 800C07A0 38650000 */ addi r3, r5, 0
/* 0BB204 800C07A4 3880FFF5 */ li r4, -11
/* 0BB208 800C07A8 4BFFB5CD */ bl __CARDPutControlBlock
/* 0BB20C 800C07AC 480000D4 */ b lbl_800C0880
lbl_800C07B0:
/* 0BB210 800C07B0 938500C0 */ stw r28, 0xc0(r5)
/* 0BB214 800C07B4 93BC000C */ stw r29, 0xc(r28)
/* 0BB218 800C07B8 801C0008 */ lwz r0, 8(r28)
/* 0BB21C 800C07BC 7C1E0000 */ cmpw r30, r0
/* 0BB220 800C07C0 40800040 */ bge lbl_800C0800
/* 0BB224 800C07C4 38000000 */ li r0, 0
/* 0BB228 800C07C8 901C0008 */ stw r0, 8(r28)
/* 0BB22C 800C07CC A0040036 */ lhz r0, 0x36(r4)
/* 0BB230 800C07D0 B01C0010 */ sth r0, 0x10(r28)
/* 0BB234 800C07D4 A09C0010 */ lhz r4, 0x10(r28)
/* 0BB238 800C07D8 28040005 */ cmplwi r4, 5
/* 0BB23C 800C07DC 41800014 */ blt lbl_800C07F0
/* 0BB240 800C07E0 80610018 */ lwz r3, 0x18(r1)
/* 0BB244 800C07E4 A0030010 */ lhz r0, 0x10(r3)
/* 0BB248 800C07E8 7C040040 */ cmplw r4, r0
/* 0BB24C 800C07EC 41800014 */ blt lbl_800C0800
lbl_800C07F0:
/* 0BB250 800C07F0 80610018 */ lwz r3, 0x18(r1)
/* 0BB254 800C07F4 3880FFFA */ li r4, -6
/* 0BB258 800C07F8 4BFFB57D */ bl __CARDPutControlBlock
/* 0BB25C 800C07FC 48000084 */ b lbl_800C0880
lbl_800C0800:
/* 0BB260 800C0800 80610018 */ lwz r3, 0x18(r1)
/* 0BB264 800C0804 4BFFCD35 */ bl __CARDGetFatBlock
/* 0BB268 800C0808 4800004C */ b lbl_800C0854
lbl_800C080C:
/* 0BB26C 800C080C 801C0008 */ lwz r0, 8(r28)
/* 0BB270 800C0810 7C002214 */ add r0, r0, r4
/* 0BB274 800C0814 901C0008 */ stw r0, 8(r28)
/* 0BB278 800C0818 A01C0010 */ lhz r0, 0x10(r28)
/* 0BB27C 800C081C 5400083C */ slwi r0, r0, 1
/* 0BB280 800C0820 7C03022E */ lhzx r0, r3, r0
/* 0BB284 800C0824 B01C0010 */ sth r0, 0x10(r28)
/* 0BB288 800C0828 A0BC0010 */ lhz r5, 0x10(r28)
/* 0BB28C 800C082C 28050005 */ cmplwi r5, 5
/* 0BB290 800C0830 41800014 */ blt lbl_800C0844
/* 0BB294 800C0834 80810018 */ lwz r4, 0x18(r1)
/* 0BB298 800C0838 A0040010 */ lhz r0, 0x10(r4)
/* 0BB29C 800C083C 7C050040 */ cmplw r5, r0
/* 0BB2A0 800C0840 41800014 */ blt lbl_800C0854
lbl_800C0844:
/* 0BB2A4 800C0844 80610018 */ lwz r3, 0x18(r1)
/* 0BB2A8 800C0848 3880FFFA */ li r4, -6
/* 0BB2AC 800C084C 4BFFB529 */ bl __CARDPutControlBlock
/* 0BB2B0 800C0850 48000030 */ b lbl_800C0880
lbl_800C0854:
/* 0BB2B4 800C0854 80810018 */ lwz r4, 0x18(r1)
/* 0BB2B8 800C0858 80BC0008 */ lwz r5, 8(r28)
/* 0BB2BC 800C085C 8084000C */ lwz r4, 0xc(r4)
/* 0BB2C0 800C0860 3804FFFF */ addi r0, r4, -1
/* 0BB2C4 800C0864 7FC00078 */ andc r0, r30, r0
/* 0BB2C8 800C0868 7C050040 */ cmplw r5, r0
/* 0BB2CC 800C086C 4180FFA0 */ blt lbl_800C080C
/* 0BB2D0 800C0870 93DC0008 */ stw r30, 8(r28)
/* 0BB2D4 800C0874 38600000 */ li r3, 0
/* 0BB2D8 800C0878 80010018 */ lwz r0, 0x18(r1)
/* 0BB2DC 800C087C 901F0000 */ stw r0, 0(r31)
lbl_800C0880:
/* 0BB2E0 800C0880 80010034 */ lwz r0, 0x34(r1)
/* 0BB2E4 800C0884 83E1002C */ lwz r31, 0x2c(r1)
/* 0BB2E8 800C0888 83C10028 */ lwz r30, 0x28(r1)
/* 0BB2EC 800C088C 83A10024 */ lwz r29, 0x24(r1)
/* 0BB2F0 800C0890 83810020 */ lwz r28, 0x20(r1)
/* 0BB2F4 800C0894 38210030 */ addi r1, r1, 0x30
/* 0BB2F8 800C0898 7C0803A6 */ mtlr r0
/* 0BB2FC 800C089C 4E800020 */ blr
ReadCallback:
/* 0BB300 800C08A0 7C0802A6 */ mflr r0
/* 0BB304 800C08A4 90010004 */ stw r0, 4(r1)
/* 0BB308 800C08A8 9421FFD8 */ stwu r1, -0x28(r1)
/* 0BB30C 800C08AC BF610014 */ stmw r27, 0x14(r1)
/* 0BB310 800C08B0 3BA30000 */ addi r29, r3, 0
/* 0BB314 800C08B4 3C608013 */ lis r3, __CARDBlock@ha
/* 0BB318 800C08B8 1CBD0110 */ mulli r5, r29, 0x110
/* 0BB31C 800C08BC 380327D0 */ addi r0, r3, __CARDBlock@l
/* 0BB320 800C08C0 7C9E2379 */ or. r30, r4, r4
/* 0BB324 800C08C4 7FE02A14 */ add r31, r0, r5
/* 0BB328 800C08C8 418000C8 */ blt lbl_800C0990
/* 0BB32C 800C08CC 839F00C0 */ lwz r28, 0xc0(r31)
/* 0BB330 800C08D0 809C000C */ lwz r4, 0xc(r28)
/* 0BB334 800C08D4 2C040000 */ cmpwi r4, 0
/* 0BB338 800C08D8 4080000C */ bge lbl_800C08E4
/* 0BB33C 800C08DC 3BC0FFF2 */ li r30, -14
/* 0BB340 800C08E0 480000B0 */ b lbl_800C0990
lbl_800C08E4:
/* 0BB344 800C08E4 80BF000C */ lwz r5, 0xc(r31)
/* 0BB348 800C08E8 80DC0008 */ lwz r6, 8(r28)
/* 0BB34C 800C08EC 3805FFFF */ addi r0, r5, -1
/* 0BB350 800C08F0 7C0300F8 */ nor r3, r0, r0
/* 0BB354 800C08F4 7C062A14 */ add r0, r6, r5
/* 0BB358 800C08F8 7C600038 */ and r0, r3, r0
/* 0BB35C 800C08FC 7F660050 */ subf r27, r6, r0
/* 0BB360 800C0900 7C1B2050 */ subf r0, r27, r4
/* 0BB364 800C0904 901C000C */ stw r0, 0xc(r28)
/* 0BB368 800C0908 801C000C */ lwz r0, 0xc(r28)
/* 0BB36C 800C090C 2C000000 */ cmpwi r0, 0
/* 0BB370 800C0910 40810080 */ ble lbl_800C0990
/* 0BB374 800C0914 7FE3FB78 */ mr r3, r31
/* 0BB378 800C0918 4BFFCC21 */ bl __CARDGetFatBlock
/* 0BB37C 800C091C 801C0008 */ lwz r0, 8(r28)
/* 0BB380 800C0920 7C00DA14 */ add r0, r0, r27
/* 0BB384 800C0924 901C0008 */ stw r0, 8(r28)
/* 0BB388 800C0928 A01C0010 */ lhz r0, 0x10(r28)
/* 0BB38C 800C092C 5400083C */ slwi r0, r0, 1
/* 0BB390 800C0930 7C03022E */ lhzx r0, r3, r0
/* 0BB394 800C0934 B01C0010 */ sth r0, 0x10(r28)
/* 0BB398 800C0938 A07C0010 */ lhz r3, 0x10(r28)
/* 0BB39C 800C093C 28030005 */ cmplwi r3, 5
/* 0BB3A0 800C0940 41800010 */ blt lbl_800C0950
/* 0BB3A4 800C0944 A01F0010 */ lhz r0, 0x10(r31)
/* 0BB3A8 800C0948 7C030040 */ cmplw r3, r0
/* 0BB3AC 800C094C 4180000C */ blt lbl_800C0958
lbl_800C0950:
/* 0BB3B0 800C0950 3BC0FFFA */ li r30, -6
/* 0BB3B4 800C0954 4800003C */ b lbl_800C0990
lbl_800C0958:
/* 0BB3B8 800C0958 80BC000C */ lwz r5, 0xc(r28)
/* 0BB3BC 800C095C 801F000C */ lwz r0, 0xc(r31)
/* 0BB3C0 800C0960 7C050000 */ cmpw r5, r0
/* 0BB3C4 800C0964 40800008 */ bge lbl_800C096C
/* 0BB3C8 800C0968 48000008 */ b lbl_800C0970
lbl_800C096C:
/* 0BB3CC 800C096C 7C050378 */ mr r5, r0
lbl_800C0970:
/* 0BB3D0 800C0970 7C8019D6 */ mullw r4, r0, r3
/* 0BB3D4 800C0974 80DF00B4 */ lwz r6, 0xb4(r31)
/* 0BB3D8 800C0978 3C60800C */ lis r3, ReadCallback@ha
/* 0BB3DC 800C097C 38E308A0 */ addi r7, r3, ReadCallback@l
/* 0BB3E0 800C0980 387D0000 */ addi r3, r29, 0
/* 0BB3E4 800C0984 4BFFC9F9 */ bl __CARDRead
/* 0BB3E8 800C0988 7C7E1B79 */ or. r30, r3, r3
/* 0BB3EC 800C098C 40800030 */ bge lbl_800C09BC
lbl_800C0990:
/* 0BB3F0 800C0990 837F00D0 */ lwz r27, 0xd0(r31)
/* 0BB3F4 800C0994 38000000 */ li r0, 0
/* 0BB3F8 800C0998 387F0000 */ addi r3, r31, 0
/* 0BB3FC 800C099C 901F00D0 */ stw r0, 0xd0(r31)
/* 0BB400 800C09A0 7FC4F378 */ mr r4, r30
/* 0BB404 800C09A4 4BFFB3D1 */ bl __CARDPutControlBlock
/* 0BB408 800C09A8 399B0000 */ addi r12, r27, 0
/* 0BB40C 800C09AC 7D8803A6 */ mtlr r12
/* 0BB410 800C09B0 387D0000 */ addi r3, r29, 0
/* 0BB414 800C09B4 389E0000 */ addi r4, r30, 0
/* 0BB418 800C09B8 4E800021 */ blrl
lbl_800C09BC:
/* 0BB41C 800C09BC BB610014 */ lmw r27, 0x14(r1)
/* 0BB420 800C09C0 8001002C */ lwz r0, 0x2c(r1)
/* 0BB424 800C09C4 38210028 */ addi r1, r1, 0x28
/* 0BB428 800C09C8 7C0803A6 */ mtlr r0
/* 0BB42C 800C09CC 4E800020 */ blr
glabel CARDReadAsync
/* 0BB430 800C09D0 7C0802A6 */ mflr r0
/* 0BB434 800C09D4 90010004 */ stw r0, 4(r1)
/* 0BB438 800C09D8 54C005FF */ clrlwi. r0, r6, 0x17
/* 0BB43C 800C09DC 9421FFD0 */ stwu r1, -0x30(r1)
/* 0BB440 800C09E0 93E1002C */ stw r31, 0x2c(r1)
/* 0BB444 800C09E4 3BE50000 */ addi r31, r5, 0
/* 0BB448 800C09E8 93C10028 */ stw r30, 0x28(r1)
/* 0BB44C 800C09EC 3BC40000 */ addi r30, r4, 0
/* 0BB450 800C09F0 93A10024 */ stw r29, 0x24(r1)
/* 0BB454 800C09F4 3BA30000 */ addi r29, r3, 0
/* 0BB458 800C09F8 93810020 */ stw r28, 0x20(r1)
/* 0BB45C 800C09FC 3B870000 */ addi r28, r7, 0
/* 0BB460 800C0A00 4082000C */ bne lbl_800C0A0C
/* 0BB464 800C0A04 57E005FF */ clrlwi. r0, r31, 0x17
/* 0BB468 800C0A08 4182000C */ beq lbl_800C0A14
lbl_800C0A0C:
/* 0BB46C 800C0A0C 3860FF80 */ li r3, -128
/* 0BB470 800C0A10 480000E4 */ b lbl_800C0AF4
lbl_800C0A14:
/* 0BB474 800C0A14 387D0000 */ addi r3, r29, 0
/* 0BB478 800C0A18 389F0000 */ addi r4, r31, 0
/* 0BB47C 800C0A1C 38A60000 */ addi r5, r6, 0
/* 0BB480 800C0A20 38C1001C */ addi r6, r1, 0x1c
/* 0BB484 800C0A24 4BFFFCC5 */ bl __CARDSeek
/* 0BB488 800C0A28 2C030000 */ cmpwi r3, 0
/* 0BB48C 800C0A2C 40800008 */ bge lbl_800C0A34
/* 0BB490 800C0A30 480000C4 */ b lbl_800C0AF4
lbl_800C0A34:
/* 0BB494 800C0A34 8061001C */ lwz r3, 0x1c(r1)
/* 0BB498 800C0A38 4BFFCF05 */ bl __CARDGetDirBlock
/* 0BB49C 800C0A3C 801D0004 */ lwz r0, 4(r29)
/* 0BB4A0 800C0A40 54003032 */ slwi r0, r0, 6
/* 0BB4A4 800C0A44 7C830214 */ add r4, r3, r0
/* 0BB4A8 800C0A48 8061001C */ lwz r3, 0x1c(r1)
/* 0BB4AC 800C0A4C 4BFFF591 */ bl __CARDIsReadable
/* 0BB4B0 800C0A50 7C641B79 */ or. r4, r3, r3
/* 0BB4B4 800C0A54 40800010 */ bge lbl_800C0A64
/* 0BB4B8 800C0A58 8061001C */ lwz r3, 0x1c(r1)
/* 0BB4BC 800C0A5C 4BFFB319 */ bl __CARDPutControlBlock
/* 0BB4C0 800C0A60 48000094 */ b lbl_800C0AF4
lbl_800C0A64:
/* 0BB4C4 800C0A64 387E0000 */ addi r3, r30, 0
/* 0BB4C8 800C0A68 389F0000 */ addi r4, r31, 0
/* 0BB4CC 800C0A6C 4BFDCCE5 */ bl DCInvalidateRange
/* 0BB4D0 800C0A70 281C0000 */ cmplwi r28, 0
/* 0BB4D4 800C0A74 4182000C */ beq lbl_800C0A80
/* 0BB4D8 800C0A78 7F80E378 */ mr r0, r28
/* 0BB4DC 800C0A7C 4800000C */ b lbl_800C0A88
lbl_800C0A80:
/* 0BB4E0 800C0A80 3C60800C */ lis r3, __CARDDefaultApiCallback@ha
/* 0BB4E4 800C0A84 3803AD5C */ addi r0, r3, __CARDDefaultApiCallback@l
lbl_800C0A88:
/* 0BB4E8 800C0A88 8061001C */ lwz r3, 0x1c(r1)
/* 0BB4EC 800C0A8C 900300D0 */ stw r0, 0xd0(r3)
/* 0BB4F0 800C0A90 8061001C */ lwz r3, 0x1c(r1)
/* 0BB4F4 800C0A94 809D0008 */ lwz r4, 8(r29)
/* 0BB4F8 800C0A98 80A3000C */ lwz r5, 0xc(r3)
/* 0BB4FC 800C0A9C 3805FFFF */ addi r0, r5, -1
/* 0BB500 800C0AA0 7C880038 */ and r8, r4, r0
/* 0BB504 800C0AA4 7C682850 */ subf r3, r8, r5
/* 0BB508 800C0AA8 7C1F1800 */ cmpw r31, r3
/* 0BB50C 800C0AAC 40800008 */ bge lbl_800C0AB4
/* 0BB510 800C0AB0 7FE3FB78 */ mr r3, r31
lbl_800C0AB4:
/* 0BB514 800C0AB4 A01D0010 */ lhz r0, 0x10(r29)
/* 0BB518 800C0AB8 3C80800C */ lis r4, ReadCallback@ha
/* 0BB51C 800C0ABC 3BE30000 */ addi r31, r3, 0
/* 0BB520 800C0AC0 807D0000 */ lwz r3, 0(r29)
/* 0BB524 800C0AC4 7C0501D6 */ mullw r0, r5, r0
/* 0BB528 800C0AC8 38E408A0 */ addi r7, r4, ReadCallback@l
/* 0BB52C 800C0ACC 38BF0000 */ addi r5, r31, 0
/* 0BB530 800C0AD0 38DE0000 */ addi r6, r30, 0
/* 0BB534 800C0AD4 7C880214 */ add r4, r8, r0
/* 0BB538 800C0AD8 4BFFC8A5 */ bl __CARDRead
/* 0BB53C 800C0ADC 7C7D1B79 */ or. r29, r3, r3
/* 0BB540 800C0AE0 40800010 */ bge lbl_800C0AF0
/* 0BB544 800C0AE4 8061001C */ lwz r3, 0x1c(r1)
/* 0BB548 800C0AE8 7FA4EB78 */ mr r4, r29
/* 0BB54C 800C0AEC 4BFFB289 */ bl __CARDPutControlBlock
lbl_800C0AF0:
/* 0BB550 800C0AF0 7FA3EB78 */ mr r3, r29
lbl_800C0AF4:
/* 0BB554 800C0AF4 80010034 */ lwz r0, 0x34(r1)
/* 0BB558 800C0AF8 83E1002C */ lwz r31, 0x2c(r1)
/* 0BB55C 800C0AFC 83C10028 */ lwz r30, 0x28(r1)
/* 0BB560 800C0B00 83A10024 */ lwz r29, 0x24(r1)
/* 0BB564 800C0B04 83810020 */ lwz r28, 0x20(r1)
/* 0BB568 800C0B08 38210030 */ addi r1, r1, 0x30
/* 0BB56C 800C0B0C 7C0803A6 */ mtlr r0
/* 0BB570 800C0B10 4E800020 */ blr
glabel CARDRead
/* 0BB574 800C0B14 7C0802A6 */ mflr r0
/* 0BB578 800C0B18 3CE0800C */ lis r7, __CARDSyncCallback@ha
/* 0BB57C 800C0B1C 90010004 */ stw r0, 4(r1)
/* 0BB580 800C0B20 38E7AD60 */ addi r7, r7, __CARDSyncCallback@l
/* 0BB584 800C0B24 9421FFE0 */ stwu r1, -0x20(r1)
/* 0BB588 800C0B28 93E1001C */ stw r31, 0x1c(r1)
/* 0BB58C 800C0B2C 3BE30000 */ addi r31, r3, 0
/* 0BB590 800C0B30 4BFFFEA1 */ bl CARDReadAsync
/* 0BB594 800C0B34 2C030000 */ cmpwi r3, 0
/* 0BB598 800C0B38 40800008 */ bge lbl_800C0B40
/* 0BB59C 800C0B3C 4800000C */ b lbl_800C0B48
lbl_800C0B40:
/* 0BB5A0 800C0B40 807F0000 */ lwz r3, 0(r31)
/* 0BB5A4 800C0B44 4BFFB415 */ bl __CARDSync
lbl_800C0B48:
/* 0BB5A8 800C0B48 80010024 */ lwz r0, 0x24(r1)
/* 0BB5AC 800C0B4C 83E1001C */ lwz r31, 0x1c(r1)
/* 0BB5B0 800C0B50 38210020 */ addi r1, r1, 0x20
/* 0BB5B4 800C0B54 7C0803A6 */ mtlr r0
/* 0BB5B8 800C0B58 4E800020 */ blr