.include "macros.inc" .section .text, "ax" # 0x80006980 - 0x803E1E60 .global InitMetroTRK InitMetroTRK: /* 801D9138 001D4D98 38 21 FF FC */ addi r1, r1, -4 /* 801D913C 001D4D9C 90 61 00 00 */ stw r3, 0(r1) /* 801D9140 001D4DA0 3C 60 80 49 */ lis r3, lbl_80490898@h /* 801D9144 001D4DA4 60 63 08 98 */ ori r3, r3, lbl_80490898@l /* 801D9148 001D4DA8 BC 03 00 00 */ stmw r0, 0(r3) /* 801D914C 001D4DAC 80 81 00 00 */ lwz r4, 0(r1) /* 801D9150 001D4DB0 38 21 00 04 */ addi r1, r1, 4 /* 801D9154 001D4DB4 90 23 00 04 */ stw r1, 4(r3) /* 801D9158 001D4DB8 90 83 00 0C */ stw r4, 0xc(r3) /* 801D915C 001D4DBC 7C 88 02 A6 */ mflr r4 /* 801D9160 001D4DC0 90 83 00 84 */ stw r4, 0x84(r3) /* 801D9164 001D4DC4 90 83 00 80 */ stw r4, 0x80(r3) /* 801D9168 001D4DC8 7C 80 00 26 */ mfcr r4 /* 801D916C 001D4DCC 90 83 00 88 */ stw r4, 0x88(r3) /* 801D9170 001D4DD0 7C 80 00 A6 */ mfmsr r4 /* 801D9174 001D4DD4 60 83 80 00 */ ori r3, r4, 0x8000 /* 801D9178 001D4DD8 68 63 80 00 */ xori r3, r3, 0x8000 /* 801D917C 001D4DDC 7C 60 01 24 */ mtmsr r3 /* 801D9180 001D4DE0 7C 9B 03 A6 */ mtspr 0x1b, r4 /* 801D9184 001D4DE4 4B FF FA CD */ bl TRKSaveExtended1Block /* 801D9188 001D4DE8 3C 60 80 49 */ lis r3, lbl_80490898@h /* 801D918C 001D4DEC 60 63 08 98 */ ori r3, r3, lbl_80490898@l /* 801D9190 001D4DF0 B8 03 00 00 */ .4byte 0xB8030000 /* illegal lmw r0, 0(r3) */ /* 801D9194 001D4DF4 38 00 00 00 */ li r0, 0 /* 801D9198 001D4DF8 7C 12 FB A6 */ mtspr 0x3f2, r0 /* 801D919C 001D4DFC 7C 15 FB A6 */ mtspr 0x3f5, r0 /* 801D91A0 001D4E00 3C 20 80 65 */ lis r1, 0x80655050@h /* 801D91A4 001D4E04 60 21 50 50 */ ori r1, r1, 0x80655050@l /* 801D91A8 001D4E08 7C A3 2B 78 */ mr r3, r5 /* 801D91AC 001D4E0C 48 00 05 A1 */ bl InitMetroTRKCommTable /* 801D91B0 001D4E10 2C 03 00 01 */ cmpwi r3, 1 /* 801D91B4 001D4E14 40 82 00 14 */ bne lbl_801D91C8 /* 801D91B8 001D4E18 80 83 00 84 */ lwz r4, 0x84(r3) /* 801D91BC 001D4E1C 7C 88 03 A6 */ mtlr r4 /* 801D91C0 001D4E20 B8 03 00 00 */ .4byte 0xB8030000 /* illegal lmw r0, 0(r3) */ /* 801D91C4 001D4E24 4E 80 00 20 */ blr lbl_801D91C8: /* 801D91C8 001D4E28 48 00 02 8C */ b TRK_main /* 801D91CC 001D4E2C 4E 80 00 20 */ blr .global InitMetroTRK_BBA InitMetroTRK_BBA: /* 801D91D0 001D4E30 38 21 FF FC */ addi r1, r1, -4 /* 801D91D4 001D4E34 90 61 00 00 */ stw r3, 0(r1) /* 801D91D8 001D4E38 3C 60 80 49 */ lis r3, lbl_80490898@h /* 801D91DC 001D4E3C 60 63 08 98 */ ori r3, r3, lbl_80490898@l /* 801D91E0 001D4E40 BC 03 00 00 */ stmw r0, 0(r3) /* 801D91E4 001D4E44 80 81 00 00 */ lwz r4, 0(r1) /* 801D91E8 001D4E48 38 21 00 04 */ addi r1, r1, 4 /* 801D91EC 001D4E4C 90 23 00 04 */ stw r1, 4(r3) /* 801D91F0 001D4E50 90 83 00 0C */ stw r4, 0xc(r3) /* 801D91F4 001D4E54 7C 88 02 A6 */ mflr r4 /* 801D91F8 001D4E58 90 83 00 84 */ stw r4, 0x84(r3) /* 801D91FC 001D4E5C 90 83 00 80 */ stw r4, 0x80(r3) /* 801D9200 001D4E60 7C 80 00 26 */ mfcr r4 /* 801D9204 001D4E64 90 83 00 88 */ stw r4, 0x88(r3) /* 801D9208 001D4E68 7C 80 00 A6 */ mfmsr r4 /* 801D920C 001D4E6C 60 83 80 00 */ ori r3, r4, 0x8000 /* 801D9210 001D4E70 7C 60 01 24 */ mtmsr r3 /* 801D9214 001D4E74 7C 9B 03 A6 */ mtspr 0x1b, r4 /* 801D9218 001D4E78 4B FF FA 39 */ bl TRKSaveExtended1Block /* 801D921C 001D4E7C 3C 60 80 49 */ lis r3, lbl_80490898@h /* 801D9220 001D4E80 60 63 08 98 */ ori r3, r3, lbl_80490898@l /* 801D9224 001D4E84 B8 03 00 00 */ .4byte 0xB8030000 /* illegal lmw r0, 0(r3) */ /* 801D9228 001D4E88 38 00 00 00 */ li r0, 0 /* 801D922C 001D4E8C 7C 12 FB A6 */ mtspr 0x3f2, r0 /* 801D9230 001D4E90 7C 15 FB A6 */ mtspr 0x3f5, r0 /* 801D9234 001D4E94 3C 20 80 65 */ lis r1, 0x80655050@h /* 801D9238 001D4E98 60 21 50 50 */ ori r1, r1, 0x80655050@l /* 801D923C 001D4E9C 38 60 00 02 */ li r3, 2 /* 801D9240 001D4EA0 48 00 05 0D */ bl InitMetroTRKCommTable /* 801D9244 001D4EA4 2C 03 00 01 */ cmpwi r3, 1 /* 801D9248 001D4EA8 40 82 00 14 */ bne lbl_801D925C /* 801D924C 001D4EAC 80 83 00 84 */ lwz r4, 0x84(r3) /* 801D9250 001D4EB0 7C 88 03 A6 */ mtlr r4 /* 801D9254 001D4EB4 B8 03 00 00 */ .4byte 0xB8030000 /* illegal lmw r0, 0(r3) */ /* 801D9258 001D4EB8 4E 80 00 20 */ blr lbl_801D925C: /* 801D925C 001D4EBC 48 00 01 F8 */ b TRK_main /* 801D9260 001D4EC0 4E 80 00 20 */ blr .global TRKInitializeTarget TRKInitializeTarget: /* 801D9264 001D4EC4 94 21 FF F0 */ stwu r1, -0x10(r1) /* 801D9268 001D4EC8 7C 08 02 A6 */ mflr r0 /* 801D926C 001D4ECC 3C 60 80 49 */ lis r3, lbl_804907F4@ha /* 801D9270 001D4ED0 90 01 00 14 */ stw r0, 0x14(r1) /* 801D9274 001D4ED4 38 00 00 01 */ li r0, 1 /* 801D9278 001D4ED8 38 63 07 F4 */ addi r3, r3, lbl_804907F4@l /* 801D927C 001D4EDC 90 03 00 98 */ stw r0, 0x98(r3) /* 801D9280 001D4EE0 4B FF DF 91 */ bl __TRK_get_MSR /* 801D9284 001D4EE4 3C A0 80 49 */ lis r5, lbl_804907F4@ha /* 801D9288 001D4EE8 3C 80 80 49 */ lis r4, lbl_80490D70@ha /* 801D928C 001D4EEC 38 A5 07 F4 */ addi r5, r5, lbl_804907F4@l /* 801D9290 001D4EF0 3C 00 E0 00 */ lis r0, 0xe000 /* 801D9294 001D4EF4 90 65 00 8C */ stw r3, 0x8c(r5) /* 801D9298 001D4EF8 38 60 00 00 */ li r3, 0 /* 801D929C 001D4EFC 90 04 0D 70 */ stw r0, lbl_80490D70@l(r4) /* 801D92A0 001D4F00 80 01 00 14 */ lwz r0, 0x14(r1) /* 801D92A4 001D4F04 7C 08 03 A6 */ mtlr r0 /* 801D92A8 001D4F08 38 21 00 10 */ addi r1, r1, 0x10 /* 801D92AC 001D4F0C 4E 80 00 20 */ blr .global __TRK_copy_vectors __TRK_copy_vectors: /* 801D92B0 001D4F10 94 21 FF E0 */ stwu r1, -0x20(r1) /* 801D92B4 001D4F14 7C 08 02 A6 */ mflr r0 /* 801D92B8 001D4F18 3C 60 80 49 */ lis r3, lbl_80490D70@ha /* 801D92BC 001D4F1C 90 01 00 24 */ stw r0, 0x24(r1) /* 801D92C0 001D4F20 38 63 0D 70 */ addi r3, r3, lbl_80490D70@l /* 801D92C4 001D4F24 BF 61 00 0C */ stmw r27, 0xc(r1) /* 801D92C8 001D4F28 80 63 00 00 */ lwz r3, 0(r3) /* 801D92CC 001D4F2C 28 03 00 44 */ cmplwi r3, 0x44 /* 801D92D0 001D4F30 41 81 00 2C */ bgt lbl_801D92FC /* 801D92D4 001D4F34 38 03 40 00 */ addi r0, r3, 0x4000 /* 801D92D8 001D4F38 28 00 00 44 */ cmplwi r0, 0x44 /* 801D92DC 001D4F3C 40 81 00 20 */ ble lbl_801D92FC /* 801D92E0 001D4F40 3C 60 80 49 */ lis r3, lbl_80490898@ha /* 801D92E4 001D4F44 38 63 08 98 */ addi r3, r3, lbl_80490898@l /* 801D92E8 001D4F48 80 03 02 38 */ lwz r0, 0x238(r3) /* 801D92EC 001D4F4C 54 00 07 BF */ clrlwi. r0, r0, 0x1e /* 801D92F0 001D4F50 41 82 00 0C */ beq lbl_801D92FC /* 801D92F4 001D4F54 38 A0 00 44 */ li r5, 0x44 /* 801D92F8 001D4F58 48 00 00 0C */ b lbl_801D9304 lbl_801D92FC: /* 801D92FC 001D4F5C 3C 60 80 00 */ lis r3, 0x80000044@ha /* 801D9300 001D4F60 38 A3 00 44 */ addi r5, r3, 0x80000044@l lbl_801D9304: /* 801D9304 001D4F64 3C 80 80 42 */ lis r4, lbl_80423260@ha /* 801D9308 001D4F68 3C 60 80 49 */ lis r3, lbl_80490898@ha /* 801D930C 001D4F6C 83 A5 00 00 */ lwz r29, 0(r5) /* 801D9310 001D4F70 3B E4 32 60 */ addi r31, r4, lbl_80423260@l /* 801D9314 001D4F74 3B 83 08 98 */ addi r28, r3, lbl_80490898@l /* 801D9318 001D4F78 3B C0 00 00 */ li r30, 0 lbl_801D931C: /* 801D931C 001D4F7C 38 00 00 01 */ li r0, 1 /* 801D9320 001D4F80 7C 00 F0 30 */ slw r0, r0, r30 /* 801D9324 001D4F84 7F A0 00 39 */ and. r0, r29, r0 /* 801D9328 001D4F88 41 82 00 90 */ beq lbl_801D93B8 /* 801D932C 001D4F8C 2C 1E 00 04 */ cmpwi r30, 4 /* 801D9330 001D4F90 41 82 00 88 */ beq lbl_801D93B8 /* 801D9334 001D4F94 3C 60 80 49 */ lis r3, lbl_80490D70@ha /* 801D9338 001D4F98 80 DF 00 00 */ lwz r6, 0(r31) /* 801D933C 001D4F9C 38 63 0D 70 */ addi r3, r3, lbl_80490D70@l /* 801D9340 001D4FA0 80 63 00 00 */ lwz r3, 0(r3) /* 801D9344 001D4FA4 7C 06 18 40 */ cmplw r6, r3 /* 801D9348 001D4FA8 41 80 00 24 */ blt lbl_801D936C /* 801D934C 001D4FAC 38 03 40 00 */ addi r0, r3, 0x4000 /* 801D9350 001D4FB0 7C 06 00 40 */ cmplw r6, r0 /* 801D9354 001D4FB4 40 80 00 18 */ bge lbl_801D936C /* 801D9358 001D4FB8 80 1C 02 38 */ lwz r0, 0x238(r28) /* 801D935C 001D4FBC 54 00 07 BF */ clrlwi. r0, r0, 0x1e /* 801D9360 001D4FC0 41 82 00 0C */ beq lbl_801D936C /* 801D9364 001D4FC4 7C DB 33 78 */ mr r27, r6 /* 801D9368 001D4FC8 48 00 00 2C */ b lbl_801D9394 lbl_801D936C: /* 801D936C 001D4FCC 3C 00 7E 00 */ lis r0, 0x7e00 /* 801D9370 001D4FD0 7C 06 00 40 */ cmplw r6, r0 /* 801D9374 001D4FD4 41 80 00 18 */ blt lbl_801D938C /* 801D9378 001D4FD8 3C 00 80 00 */ lis r0, 0x8000 /* 801D937C 001D4FDC 7C 06 00 40 */ cmplw r6, r0 /* 801D9380 001D4FE0 41 81 00 0C */ bgt lbl_801D938C /* 801D9384 001D4FE4 7C DB 33 78 */ mr r27, r6 /* 801D9388 001D4FE8 48 00 00 0C */ b lbl_801D9394 lbl_801D938C: /* 801D938C 001D4FEC 54 C0 00 BE */ clrlwi r0, r6, 2 /* 801D9390 001D4FF0 64 1B 80 00 */ oris r27, r0, 0x8000 lbl_801D9394: /* 801D9394 001D4FF4 3C 80 80 00 */ lis r4, lbl_80004188@ha /* 801D9398 001D4FF8 7F 63 DB 78 */ mr r3, r27 /* 801D939C 001D4FFC 38 04 41 88 */ addi r0, r4, lbl_80004188@l /* 801D93A0 001D5000 38 A0 01 00 */ li r5, 0x100 /* 801D93A4 001D5004 7C 80 32 14 */ add r4, r0, r6 /* 801D93A8 001D5008 4B E2 AD BD */ bl TRK_memcpy /* 801D93AC 001D500C 7F 63 DB 78 */ mr r3, r27 /* 801D93B0 001D5010 38 80 01 00 */ li r4, 0x100 /* 801D93B4 001D5014 4B FF DD 51 */ bl TRK_flush_cache lbl_801D93B8: /* 801D93B8 001D5018 3B DE 00 01 */ addi r30, r30, 1 /* 801D93BC 001D501C 3B FF 00 04 */ addi r31, r31, 4 /* 801D93C0 001D5020 2C 1E 00 0E */ cmpwi r30, 0xe /* 801D93C4 001D5024 40 81 FF 58 */ ble lbl_801D931C /* 801D93C8 001D5028 BB 61 00 0C */ lmw r27, 0xc(r1) /* 801D93CC 001D502C 80 01 00 24 */ lwz r0, 0x24(r1) /* 801D93D0 001D5030 7C 08 03 A6 */ mtlr r0 /* 801D93D4 001D5034 38 21 00 20 */ addi r1, r1, 0x20 /* 801D93D8 001D5038 4E 80 00 20 */ blr .global TRKTargetTranslate TRKTargetTranslate: /* 801D93DC 001D503C 3C 80 80 49 */ lis r4, lbl_80490D70@ha /* 801D93E0 001D5040 38 84 0D 70 */ addi r4, r4, lbl_80490D70@l /* 801D93E4 001D5044 80 84 00 00 */ lwz r4, 0(r4) /* 801D93E8 001D5048 7C 03 20 40 */ cmplw r3, r4 /* 801D93EC 001D504C 41 80 00 24 */ blt lbl_801D9410 /* 801D93F0 001D5050 38 04 40 00 */ addi r0, r4, 0x4000 /* 801D93F4 001D5054 7C 03 00 40 */ cmplw r3, r0 /* 801D93F8 001D5058 40 80 00 18 */ bge lbl_801D9410 /* 801D93FC 001D505C 3C 80 80 49 */ lis r4, lbl_80490898@ha /* 801D9400 001D5060 38 84 08 98 */ addi r4, r4, lbl_80490898@l /* 801D9404 001D5064 80 04 02 38 */ lwz r0, 0x238(r4) /* 801D9408 001D5068 54 00 07 BF */ clrlwi. r0, r0, 0x1e /* 801D940C 001D506C 4C 82 00 20 */ bnelr lbl_801D9410: /* 801D9410 001D5070 3C 00 7E 00 */ lis r0, 0x7e00 /* 801D9414 001D5074 7C 03 00 40 */ cmplw r3, r0 /* 801D9418 001D5078 41 80 00 10 */ blt lbl_801D9428 /* 801D941C 001D507C 3C 00 80 00 */ lis r0, 0x8000 /* 801D9420 001D5080 7C 03 00 40 */ cmplw r3, r0 /* 801D9424 001D5084 4C 81 00 20 */ blelr lbl_801D9428: /* 801D9428 001D5088 54 60 00 BE */ clrlwi r0, r3, 2 /* 801D942C 001D508C 64 03 80 00 */ oris r3, r0, 0x8000 /* 801D9430 001D5090 4E 80 00 20 */ blr .global EnableMetroTRKInterrupts EnableMetroTRKInterrupts: /* 801D9434 001D5094 94 21 FF F0 */ stwu r1, -0x10(r1) /* 801D9438 001D5098 7C 08 02 A6 */ mflr r0 /* 801D943C 001D509C 90 01 00 14 */ stw r0, 0x14(r1) /* 801D9440 001D50A0 48 00 02 75 */ bl EnableEXI2Interrupts /* 801D9444 001D50A4 80 01 00 14 */ lwz r0, 0x14(r1) /* 801D9448 001D50A8 7C 08 03 A6 */ mtlr r0 /* 801D944C 001D50AC 38 21 00 10 */ addi r1, r1, 0x10 /* 801D9450 001D50B0 4E 80 00 20 */ blr