diff --git a/asm/f/pc/f_pc_pause.s b/asm/f/pc/f_pc_pause.s deleted file mode 100644 index cfc5d3dea9e..00000000000 --- a/asm/f/pc/f_pc_pause.s +++ /dev/null @@ -1,87 +0,0 @@ -.include "macros.inc" - -.section .text, "ax" # 80023844 - - -.global fpcPause_IsEnable -fpcPause_IsEnable: -/* 80023844 00020784 54 84 06 3E */ clrlwi r4, r4, 0x18 -/* 80023848 00020788 88 03 00 0B */ lbz r0, 0xb(r3) -/* 8002384C 0002078C 7C 80 00 38 */ and r0, r4, r0 -/* 80023850 00020790 7C 64 00 50 */ subf r3, r4, r0 -/* 80023854 00020794 30 03 FF FF */ addic r0, r3, -1 -/* 80023858 00020798 7C 00 19 10 */ subfe r0, r0, r3 -/* 8002385C 0002079C 7C 00 00 34 */ cntlzw r0, r0 -/* 80023860 000207A0 54 03 D9 7E */ srwi r3, r0, 5 -/* 80023864 000207A4 4E 80 00 20 */ blr - -.global fpcPause_Enable -fpcPause_Enable: -/* 80023868 000207A8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8002386C 000207AC 7C 08 02 A6 */ mflr r0 -/* 80023870 000207B0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80023874 000207B4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80023878 000207B8 93 C1 00 08 */ stw r30, 8(r1) -/* 8002387C 000207BC 7C 7E 1B 78 */ mr r30, r3 -/* 80023880 000207C0 7C 9F 23 78 */ mr r31, r4 -/* 80023884 000207C4 88 03 00 0B */ lbz r0, 0xb(r3) -/* 80023888 000207C8 7C 00 FB 78 */ or r0, r0, r31 -/* 8002388C 000207CC 98 03 00 0B */ stb r0, 0xb(r3) -/* 80023890 000207D0 80 6D 87 C0 */ lwz r3, lbl_80450D40-_SDA_BASE_(r13) -/* 80023894 000207D4 80 9E 00 B4 */ lwz r4, 0xb4(r30) -/* 80023898 000207D8 4B FF CD B5 */ bl fpcBs_Is_JustOfType -/* 8002389C 000207DC 2C 03 00 00 */ cmpwi r3, 0 -/* 800238A0 000207E0 41 82 00 18 */ beq lbl_800238B8 -/* 800238A4 000207E4 38 7E 00 BC */ addi r3, r30, 0xbc -/* 800238A8 000207E8 3C 80 80 02 */ lis r4, fpcPause_Enable@ha -/* 800238AC 000207EC 38 84 38 68 */ addi r4, r4, fpcPause_Enable@l -/* 800238B0 000207F0 57 E5 06 3E */ clrlwi r5, r31, 0x18 -/* 800238B4 000207F4 4B FF E2 D5 */ bl fpcLyIt_OnlyHere -lbl_800238B8: -/* 800238B8 000207F8 38 60 00 01 */ li r3, 1 -/* 800238BC 000207FC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800238C0 00020800 83 C1 00 08 */ lwz r30, 8(r1) -/* 800238C4 00020804 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800238C8 00020808 7C 08 03 A6 */ mtlr r0 -/* 800238CC 0002080C 38 21 00 10 */ addi r1, r1, 0x10 -/* 800238D0 00020810 4E 80 00 20 */ blr - -.global fpcPause_Disable -fpcPause_Disable: -/* 800238D4 00020814 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800238D8 00020818 7C 08 02 A6 */ mflr r0 -/* 800238DC 0002081C 90 01 00 14 */ stw r0, 0x14(r1) -/* 800238E0 00020820 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800238E4 00020824 93 C1 00 08 */ stw r30, 8(r1) -/* 800238E8 00020828 7C 7E 1B 78 */ mr r30, r3 -/* 800238EC 0002082C 7C 9F 23 78 */ mr r31, r4 -/* 800238F0 00020830 88 63 00 0B */ lbz r3, 0xb(r3) -/* 800238F4 00020834 20 1F 00 FF */ subfic r0, r31, 0xff -/* 800238F8 00020838 54 00 06 3E */ clrlwi r0, r0, 0x18 -/* 800238FC 0002083C 7C 60 00 38 */ and r0, r3, r0 -/* 80023900 00020840 98 1E 00 0B */ stb r0, 0xb(r30) -/* 80023904 00020844 80 6D 87 C0 */ lwz r3, lbl_80450D40-_SDA_BASE_(r13) -/* 80023908 00020848 80 9E 00 B4 */ lwz r4, 0xb4(r30) -/* 8002390C 0002084C 4B FF CD 41 */ bl fpcBs_Is_JustOfType -/* 80023910 00020850 2C 03 00 00 */ cmpwi r3, 0 -/* 80023914 00020854 41 82 00 18 */ beq lbl_8002392C -/* 80023918 00020858 38 7E 00 BC */ addi r3, r30, 0xbc -/* 8002391C 0002085C 3C 80 80 02 */ lis r4, fpcPause_Disable@ha -/* 80023920 00020860 38 84 38 D4 */ addi r4, r4, fpcPause_Disable@l -/* 80023924 00020864 57 E5 06 3E */ clrlwi r5, r31, 0x18 -/* 80023928 00020868 4B FF E2 61 */ bl fpcLyIt_OnlyHere -lbl_8002392C: -/* 8002392C 0002086C 38 60 00 01 */ li r3, 1 -/* 80023930 00020870 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80023934 00020874 83 C1 00 08 */ lwz r30, 8(r1) -/* 80023938 00020878 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8002393C 0002087C 7C 08 03 A6 */ mtlr r0 -/* 80023940 00020880 38 21 00 10 */ addi r1, r1, 0x10 -/* 80023944 00020884 4E 80 00 20 */ blr - -.global fpcPause_Init -fpcPause_Init: -/* 80023948 00020888 38 00 00 00 */ li r0, 0 -/* 8002394C 0002088C 98 03 00 0B */ stb r0, 0xb(r3) -/* 80023950 00020890 4E 80 00 20 */ blr - diff --git a/asm/f/pc/f_pc_priority.s b/asm/f/pc/f_pc_priority.s deleted file mode 100644 index 9d50dc14f76..00000000000 --- a/asm/f/pc/f_pc_priority.s +++ /dev/null @@ -1,322 +0,0 @@ -.include "macros.inc" - -.section .text, "ax" # 80023130 - - -.global fpcPi_IsInQueue -fpcPi_IsInQueue: -/* 80023130 00020070 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80023134 00020074 7C 08 02 A6 */ mflr r0 -/* 80023138 00020078 90 01 00 14 */ stw r0, 0x14(r1) -/* 8002313C 0002007C 48 24 37 45 */ bl cTg_IsUse -/* 80023140 00020080 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80023144 00020084 7C 08 03 A6 */ mtlr r0 -/* 80023148 00020088 38 21 00 10 */ addi r1, r1, 0x10 -/* 8002314C 0002008C 4E 80 00 20 */ blr - -.global fpcPi_QueueTo -fpcPi_QueueTo: -/* 80023150 00020090 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80023154 00020094 7C 08 02 A6 */ mflr r0 -/* 80023158 00020098 90 01 00 14 */ stw r0, 0x14(r1) -/* 8002315C 0002009C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80023160 000200A0 7C 7F 1B 78 */ mr r31, r3 -/* 80023164 000200A4 48 24 38 41 */ bl cTg_SingleCut -/* 80023168 000200A8 38 7F 00 14 */ addi r3, r31, 0x14 -/* 8002316C 000200AC 4B FF E4 1D */ bl fpcLy_CancelQTo -/* 80023170 000200B0 38 60 00 01 */ li r3, 1 -/* 80023174 000200B4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80023178 000200B8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8002317C 000200BC 7C 08 03 A6 */ mtlr r0 -/* 80023180 000200C0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80023184 000200C4 4E 80 00 20 */ blr - -.global fpcPi_ToQueue -fpcPi_ToQueue: -/* 80023188 000200C8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8002318C 000200CC 7C 08 02 A6 */ mflr r0 -/* 80023190 000200D0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80023194 000200D4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80023198 000200D8 93 C1 00 08 */ stw r30, 8(r1) -/* 8002319C 000200DC 7C 7E 1B 78 */ mr r30, r3 -/* 800231A0 000200E0 83 E3 00 30 */ lwz r31, 0x30(r3) -/* 800231A4 000200E4 3C 60 80 3F */ lis r3, lbl_803F4E58@ha -/* 800231A8 000200E8 38 63 4E 58 */ addi r3, r3, lbl_803F4E58@l -/* 800231AC 000200EC 7F C4 F3 78 */ mr r4, r30 -/* 800231B0 000200F0 48 24 38 35 */ bl cTg_Addition -/* 800231B4 000200F4 2C 03 00 00 */ cmpwi r3, 0 -/* 800231B8 000200F8 41 82 00 40 */ beq lbl_800231F8 -/* 800231BC 000200FC 3C 1F 00 01 */ addis r0, r31, 1 -/* 800231C0 00020100 28 00 FF FD */ cmplwi r0, 0xfffd -/* 800231C4 00020104 41 82 00 2C */ beq lbl_800231F0 -/* 800231C8 00020108 7F E3 FB 78 */ mr r3, r31 -/* 800231CC 0002010C 4B FF E5 81 */ bl fpcLy_Layer -/* 800231D0 00020110 38 9E 00 14 */ addi r4, r30, 0x14 -/* 800231D4 00020114 4B FF E3 D5 */ bl fpcLy_ToCancelQ -/* 800231D8 00020118 2C 03 00 00 */ cmpwi r3, 0 -/* 800231DC 0002011C 40 82 00 14 */ bne lbl_800231F0 -/* 800231E0 00020120 7F C3 F3 78 */ mr r3, r30 -/* 800231E4 00020124 48 24 37 C1 */ bl cTg_SingleCut -/* 800231E8 00020128 38 60 00 00 */ li r3, 0 -/* 800231EC 0002012C 48 00 00 10 */ b lbl_800231FC -lbl_800231F0: -/* 800231F0 00020130 38 60 00 01 */ li r3, 1 -/* 800231F4 00020134 48 00 00 08 */ b lbl_800231FC -lbl_800231F8: -/* 800231F8 00020138 38 60 00 00 */ li r3, 0 -lbl_800231FC: -/* 800231FC 0002013C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80023200 00020140 83 C1 00 08 */ lwz r30, 8(r1) -/* 80023204 00020144 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80023208 00020148 7C 08 03 A6 */ mtlr r0 -/* 8002320C 0002014C 38 21 00 10 */ addi r1, r1, 0x10 -/* 80023210 00020150 4E 80 00 20 */ blr - -.global fpcPi_GetFromQueue -fpcPi_GetFromQueue: -/* 80023214 00020154 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80023218 00020158 7C 08 02 A6 */ mflr r0 -/* 8002321C 0002015C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80023220 00020160 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80023224 00020164 3C 60 80 3F */ lis r3, lbl_803F4E58@ha -/* 80023228 00020168 38 63 4E 58 */ addi r3, r3, lbl_803F4E58@l -/* 8002322C 0002016C 48 24 37 41 */ bl cTg_GetFirst -/* 80023230 00020170 28 03 00 00 */ cmplwi r3, 0 -/* 80023234 00020174 41 82 00 1C */ beq lbl_80023250 -/* 80023238 00020178 80 63 00 0C */ lwz r3, 0xc(r3) -/* 8002323C 0002017C 3B E3 00 68 */ addi r31, r3, 0x68 -/* 80023240 00020180 38 7F 00 14 */ addi r3, r31, 0x14 -/* 80023244 00020184 4B FF E3 45 */ bl fpcLy_CancelQTo -/* 80023248 00020188 7F E3 FB 78 */ mr r3, r31 -/* 8002324C 0002018C 48 00 00 08 */ b lbl_80023254 -lbl_80023250: -/* 80023250 00020190 38 60 00 00 */ li r3, 0 -lbl_80023254: -/* 80023254 00020194 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80023258 00020198 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8002325C 0002019C 7C 08 03 A6 */ mtlr r0 -/* 80023260 000201A0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80023264 000201A4 4E 80 00 20 */ blr - -.global fpcPi_Delete -fpcPi_Delete: -/* 80023268 000201A8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8002326C 000201AC 7C 08 02 A6 */ mflr r0 -/* 80023270 000201B0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80023274 000201B4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80023278 000201B8 7C 7F 1B 78 */ mr r31, r3 -/* 8002327C 000201BC 4B FF FE D5 */ bl fpcPi_QueueTo -/* 80023280 000201C0 80 0D 80 68 */ lwz r0, lbl_804505E8-_SDA_BASE_(r13) -/* 80023284 000201C4 90 1F 00 30 */ stw r0, 0x30(r31) -/* 80023288 000201C8 38 6D 80 68 */ addi r3, r13, lbl_804505E8-_SDA_BASE_ -/* 8002328C 000201CC A0 03 00 04 */ lhz r0, 4(r3) -/* 80023290 000201D0 B0 1F 00 34 */ sth r0, 0x34(r31) -/* 80023294 000201D4 A0 03 00 06 */ lhz r0, 6(r3) -/* 80023298 000201D8 B0 1F 00 36 */ sth r0, 0x36(r31) -/* 8002329C 000201DC 38 60 00 01 */ li r3, 1 -/* 800232A0 000201E0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800232A4 000201E4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800232A8 000201E8 7C 08 03 A6 */ mtlr r0 -/* 800232AC 000201EC 38 21 00 10 */ addi r1, r1, 0x10 -/* 800232B0 000201F0 4E 80 00 20 */ blr - -.global fpcPi_IsNormal -fpcPi_IsNormal: -/* 800232B4 000201F4 38 00 FF FE */ li r0, -2 -/* 800232B8 000201F8 7C 03 00 40 */ cmplw r3, r0 -/* 800232BC 000201FC 40 80 00 24 */ bge lbl_800232E0 -/* 800232C0 00020200 54 80 04 3E */ clrlwi r0, r4, 0x10 -/* 800232C4 00020204 28 00 FF FE */ cmplwi r0, 0xfffe -/* 800232C8 00020208 40 80 00 18 */ bge lbl_800232E0 -/* 800232CC 0002020C 54 A0 04 3E */ clrlwi r0, r5, 0x10 -/* 800232D0 00020210 28 00 FF FE */ cmplwi r0, 0xfffe -/* 800232D4 00020214 40 80 00 0C */ bge lbl_800232E0 -/* 800232D8 00020218 38 60 00 01 */ li r3, 1 -/* 800232DC 0002021C 4E 80 00 20 */ blr -lbl_800232E0: -/* 800232E0 00020220 38 60 00 00 */ li r3, 0 -/* 800232E4 00020224 4E 80 00 20 */ blr - -.global fpcPi_Change -fpcPi_Change: -/* 800232E8 00020228 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 800232EC 0002022C 7C 08 02 A6 */ mflr r0 -/* 800232F0 00020230 90 01 00 24 */ stw r0, 0x24(r1) -/* 800232F4 00020234 39 61 00 20 */ addi r11, r1, 0x20 -/* 800232F8 00020238 48 33 EE D9 */ bl _savegpr_26 -/* 800232FC 0002023C 7C 7F 1B 78 */ mr r31, r3 -/* 80023300 00020240 7C 9A 23 78 */ mr r26, r4 -/* 80023304 00020244 7C BB 2B 78 */ mr r27, r5 -/* 80023308 00020248 7C DC 33 78 */ mr r28, r6 -/* 8002330C 0002024C 83 C3 00 0C */ lwz r30, 0xc(r3) -/* 80023310 00020250 3B A0 00 00 */ li r29, 0 -/* 80023314 00020254 88 1E 00 0C */ lbz r0, 0xc(r30) -/* 80023318 00020258 2C 00 00 03 */ cmpwi r0, 3 -/* 8002331C 0002025C 40 82 00 0C */ bne lbl_80023328 -/* 80023320 00020260 38 60 00 00 */ li r3, 0 -/* 80023324 00020264 48 00 00 EC */ b lbl_80023410 -lbl_80023328: -/* 80023328 00020268 7F 43 D3 78 */ mr r3, r26 -/* 8002332C 0002026C 7F 64 DB 78 */ mr r4, r27 -/* 80023330 00020270 7F 85 E3 78 */ mr r5, r28 -/* 80023334 00020274 4B FF FF 81 */ bl fpcPi_IsNormal -/* 80023338 00020278 2C 03 00 00 */ cmpwi r3, 0 -/* 8002333C 0002027C 40 82 00 0C */ bne lbl_80023348 -/* 80023340 00020280 38 60 00 00 */ li r3, 0 -/* 80023344 00020284 48 00 00 CC */ b lbl_80023410 -lbl_80023348: -/* 80023348 00020288 80 1F 00 38 */ lwz r0, 0x38(r31) -/* 8002334C 0002028C 90 1F 00 30 */ stw r0, 0x30(r31) -/* 80023350 00020290 A0 1F 00 3C */ lhz r0, 0x3c(r31) -/* 80023354 00020294 B0 1F 00 34 */ sth r0, 0x34(r31) -/* 80023358 00020298 A0 1F 00 3E */ lhz r0, 0x3e(r31) -/* 8002335C 0002029C B0 1F 00 36 */ sth r0, 0x36(r31) -/* 80023360 000202A0 3C 1A 00 01 */ addis r0, r26, 1 -/* 80023364 000202A4 28 00 FF FD */ cmplwi r0, 0xfffd -/* 80023368 000202A8 41 82 00 18 */ beq lbl_80023380 -/* 8002336C 000202AC 80 1F 00 38 */ lwz r0, 0x38(r31) -/* 80023370 000202B0 7C 00 D0 40 */ cmplw r0, r26 -/* 80023374 000202B4 41 82 00 0C */ beq lbl_80023380 -/* 80023378 000202B8 93 5F 00 30 */ stw r26, 0x30(r31) -/* 8002337C 000202BC 3B A0 00 01 */ li r29, 1 -lbl_80023380: -/* 80023380 000202C0 57 63 04 3E */ clrlwi r3, r27, 0x10 -/* 80023384 000202C4 28 03 FF FD */ cmplwi r3, 0xfffd -/* 80023388 000202C8 41 82 00 18 */ beq lbl_800233A0 -/* 8002338C 000202CC A0 1F 00 3C */ lhz r0, 0x3c(r31) -/* 80023390 000202D0 7C 00 18 40 */ cmplw r0, r3 -/* 80023394 000202D4 41 82 00 0C */ beq lbl_800233A0 -/* 80023398 000202D8 B3 7F 00 34 */ sth r27, 0x34(r31) -/* 8002339C 000202DC 3B A0 00 01 */ li r29, 1 -lbl_800233A0: -/* 800233A0 000202E0 57 83 04 3E */ clrlwi r3, r28, 0x10 -/* 800233A4 000202E4 28 03 FF FD */ cmplwi r3, 0xfffd -/* 800233A8 000202E8 41 82 00 18 */ beq lbl_800233C0 -/* 800233AC 000202EC A0 1F 00 3E */ lhz r0, 0x3e(r31) -/* 800233B0 000202F0 7C 00 18 40 */ cmplw r0, r3 -/* 800233B4 000202F4 41 82 00 0C */ beq lbl_800233C0 -/* 800233B8 000202F8 B3 9F 00 36 */ sth r28, 0x36(r31) -/* 800233BC 000202FC 3B A0 00 01 */ li r29, 1 -lbl_800233C0: -/* 800233C0 00020300 88 7E 00 0C */ lbz r3, 0xc(r30) -/* 800233C4 00020304 7C 60 07 75 */ extsb. r0, r3 -/* 800233C8 00020308 41 82 00 10 */ beq lbl_800233D8 -/* 800233CC 0002030C 7C 60 07 74 */ extsb r0, r3 -/* 800233D0 00020310 2C 00 00 01 */ cmpwi r0, 1 -/* 800233D4 00020314 40 82 00 24 */ bne lbl_800233F8 -lbl_800233D8: -/* 800233D8 00020318 80 1F 00 30 */ lwz r0, 0x30(r31) -/* 800233DC 0002031C 90 1F 00 38 */ stw r0, 0x38(r31) -/* 800233E0 00020320 A0 1F 00 34 */ lhz r0, 0x34(r31) -/* 800233E4 00020324 B0 1F 00 3C */ sth r0, 0x3c(r31) -/* 800233E8 00020328 A0 1F 00 36 */ lhz r0, 0x36(r31) -/* 800233EC 0002032C B0 1F 00 3E */ sth r0, 0x3e(r31) -/* 800233F0 00020330 38 60 00 01 */ li r3, 1 -/* 800233F4 00020334 48 00 00 1C */ b lbl_80023410 -lbl_800233F8: -/* 800233F8 00020338 2C 1D 00 01 */ cmpwi r29, 1 -/* 800233FC 0002033C 40 82 00 10 */ bne lbl_8002340C -/* 80023400 00020340 7F E3 FB 78 */ mr r3, r31 -/* 80023404 00020344 4B FF FD 85 */ bl fpcPi_ToQueue -/* 80023408 00020348 48 00 00 08 */ b lbl_80023410 -lbl_8002340C: -/* 8002340C 0002034C 38 60 00 00 */ li r3, 0 -lbl_80023410: -/* 80023410 00020350 39 61 00 20 */ addi r11, r1, 0x20 -/* 80023414 00020354 48 33 EE 09 */ bl _restgpr_26 -/* 80023418 00020358 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8002341C 0002035C 7C 08 03 A6 */ mtlr r0 -/* 80023420 00020360 38 21 00 20 */ addi r1, r1, 0x20 -/* 80023424 00020364 4E 80 00 20 */ blr - -.global fpcPi_Handler -fpcPi_Handler: -/* 80023428 00020368 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8002342C 0002036C 7C 08 02 A6 */ mflr r0 -/* 80023430 00020370 90 01 00 14 */ stw r0, 0x14(r1) -/* 80023434 00020374 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80023438 00020378 93 C1 00 08 */ stw r30, 8(r1) -/* 8002343C 0002037C 48 00 00 58 */ b lbl_80023494 -lbl_80023440: -/* 80023440 00020380 80 7F 00 0C */ lwz r3, 0xc(r31) -/* 80023444 00020384 3B C3 00 34 */ addi r30, r3, 0x34 -/* 80023448 00020388 38 63 00 18 */ addi r3, r3, 0x18 -/* 8002344C 0002038C 80 9F 00 30 */ lwz r4, 0x30(r31) -/* 80023450 00020390 A0 BF 00 34 */ lhz r5, 0x34(r31) -/* 80023454 00020394 A0 DF 00 36 */ lhz r6, 0x36(r31) -/* 80023458 00020398 4B FF E9 D5 */ bl fpcLyTg_Move -/* 8002345C 0002039C 2C 03 00 01 */ cmpwi r3, 1 -/* 80023460 000203A0 40 82 00 2C */ bne lbl_8002348C -/* 80023464 000203A4 7F C3 F3 78 */ mr r3, r30 -/* 80023468 000203A8 A0 9F 00 3C */ lhz r4, 0x3c(r31) -/* 8002346C 000203AC 48 00 01 3D */ bl fpcLnTg_Move -/* 80023470 000203B0 80 1F 00 30 */ lwz r0, 0x30(r31) -/* 80023474 000203B4 90 1F 00 38 */ stw r0, 0x38(r31) -/* 80023478 000203B8 A0 1F 00 34 */ lhz r0, 0x34(r31) -/* 8002347C 000203BC B0 1F 00 3C */ sth r0, 0x3c(r31) -/* 80023480 000203C0 A0 1F 00 36 */ lhz r0, 0x36(r31) -/* 80023484 000203C4 B0 1F 00 3E */ sth r0, 0x3e(r31) -/* 80023488 000203C8 48 00 00 0C */ b lbl_80023494 -lbl_8002348C: -/* 8002348C 000203CC 38 60 00 00 */ li r3, 0 -/* 80023490 000203D0 48 00 00 14 */ b lbl_800234A4 -lbl_80023494: -/* 80023494 000203D4 4B FF FD 81 */ bl fpcPi_GetFromQueue -/* 80023498 000203D8 7C 7F 1B 79 */ or. r31, r3, r3 -/* 8002349C 000203DC 40 82 FF A4 */ bne lbl_80023440 -/* 800234A0 000203E0 38 60 00 01 */ li r3, 1 -lbl_800234A4: -/* 800234A4 000203E4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800234A8 000203E8 83 C1 00 08 */ lwz r30, 8(r1) -/* 800234AC 000203EC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800234B0 000203F0 7C 08 03 A6 */ mtlr r0 -/* 800234B4 000203F4 38 21 00 10 */ addi r1, r1, 0x10 -/* 800234B8 000203F8 4E 80 00 20 */ blr - -.global fpcPi_Init -fpcPi_Init: -/* 800234BC 000203FC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 800234C0 00020400 7C 08 02 A6 */ mflr r0 -/* 800234C4 00020404 90 01 00 24 */ stw r0, 0x24(r1) -/* 800234C8 00020408 39 61 00 20 */ addi r11, r1, 0x20 -/* 800234CC 0002040C 48 33 ED 09 */ bl _savegpr_27 -/* 800234D0 00020410 7C 7B 1B 78 */ mr r27, r3 -/* 800234D4 00020414 7C 9C 23 78 */ mr r28, r4 -/* 800234D8 00020418 7C BD 2B 78 */ mr r29, r5 -/* 800234DC 0002041C 7C DE 33 78 */ mr r30, r6 -/* 800234E0 00020420 7C FF 3B 78 */ mr r31, r7 -/* 800234E4 00020424 7F A3 EB 78 */ mr r3, r29 -/* 800234E8 00020428 7F C4 F3 78 */ mr r4, r30 -/* 800234EC 0002042C 7F E5 FB 78 */ mr r5, r31 -/* 800234F0 00020430 4B FF FD C5 */ bl fpcPi_IsNormal -/* 800234F4 00020434 2C 03 00 00 */ cmpwi r3, 0 -/* 800234F8 00020438 40 82 00 0C */ bne lbl_80023504 -/* 800234FC 0002043C 38 60 00 00 */ li r3, 0 -/* 80023500 00020440 48 00 00 4C */ b lbl_8002354C -lbl_80023504: -/* 80023504 00020444 93 BB 00 30 */ stw r29, 0x30(r27) -/* 80023508 00020448 B3 DB 00 34 */ sth r30, 0x34(r27) -/* 8002350C 0002044C B3 FB 00 36 */ sth r31, 0x36(r27) -/* 80023510 00020450 80 1B 00 30 */ lwz r0, 0x30(r27) -/* 80023514 00020454 90 1B 00 38 */ stw r0, 0x38(r27) -/* 80023518 00020458 A0 1B 00 34 */ lhz r0, 0x34(r27) -/* 8002351C 0002045C B0 1B 00 3C */ sth r0, 0x3c(r27) -/* 80023520 00020460 A0 1B 00 36 */ lhz r0, 0x36(r27) -/* 80023524 00020464 B0 1B 00 3E */ sth r0, 0x3e(r27) -/* 80023528 00020468 7F 63 DB 78 */ mr r3, r27 -/* 8002352C 0002046C 7F 84 E3 78 */ mr r4, r28 -/* 80023530 00020470 48 24 35 05 */ bl cTg_Create -/* 80023534 00020474 38 7B 00 14 */ addi r3, r27, 0x14 -/* 80023538 00020478 3C 80 80 02 */ lis r4, fpcPi_Delete@ha -/* 8002353C 0002047C 38 84 32 68 */ addi r4, r4, fpcPi_Delete@l -/* 80023540 00020480 7F 65 DB 78 */ mr r5, r27 -/* 80023544 00020484 48 00 02 B5 */ bl fpcMtdTg_Init -/* 80023548 00020488 38 60 00 01 */ li r3, 1 -lbl_8002354C: -/* 8002354C 0002048C 39 61 00 20 */ addi r11, r1, 0x20 -/* 80023550 00020490 48 33 EC D1 */ bl _restgpr_27 -/* 80023554 00020494 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80023558 00020498 7C 08 03 A6 */ mtlr r0 -/* 8002355C 0002049C 38 21 00 20 */ addi r1, r1, 0x20 -/* 80023560 000204A0 4E 80 00 20 */ blr - diff --git a/include/SComponent/c_tag.h b/include/SComponent/c_tag.h index efb0419644f..316a5ee4b22 100644 --- a/include/SComponent/c_tag.h +++ b/include/SComponent/c_tag.h @@ -8,7 +8,7 @@ #include "SComponent/c_tree.h" struct create_tag_class { - node_class pNode; + node_class mpNode; void *mpTagData; s8 mbIsUse; }; diff --git a/include/f/f_pc/f_pc_base.h b/include/f/f_pc/f_pc_base.h index a5a5e81b627..f3fe09b97c6 100644 --- a/include/f/f_pc/f_pc_base.h +++ b/include/f/f_pc/f_pc_base.h @@ -17,7 +17,7 @@ struct base_process_class { u32 mBsPcId; s16 mProcName; u8 mUnk0; - u8 mUnk1; + u8 mPauseFlag; s8 mInitState; u8 mUnk2; s16 mBsTypeId; diff --git a/include/f/f_pc/f_pc_layer.h b/include/f/f_pc/f_pc_layer.h index a22d2d47989..69b0bf66752 100644 --- a/include/f/f_pc/f_pc_layer.h +++ b/include/f/f_pc/f_pc_layer.h @@ -44,7 +44,7 @@ void fpcLy_Cancel(layer_class *pLayer); bool fpcLy_CancelMethod(process_method_tag_class *pLayer); void fpcLy_CancelQTo(process_method_tag_class *pMthd); -void fpcLy_ToCancelQ(layer_class *pLayer, process_method_tag_class *pMthd); +int fpcLy_ToCancelQ(layer_class *pLayer, process_method_tag_class *pMthd); void fpcLy_Create(layer_class *pLayer, process_node_class *pPcNode, node_list_class *pLists, int listNum); int fpcLy_Delete(layer_class *pLayer); diff --git a/include/f/f_pc/f_pc_method_tag.h b/include/f/f_pc/f_pc_method_tag.h index 1f4a91e06ec..f97c3ddce39 100644 --- a/include/f/f_pc/f_pc_method_tag.h +++ b/include/f/f_pc/f_pc_method_tag.h @@ -14,8 +14,8 @@ struct process_method_tag_class : public create_tag_class { extern "C" { int fpcMtdTg_Do(process_method_tag_class *pMthd); +int fpcMtdTg_ToMethodQ(node_list_class *pList, process_method_tag_class *pMthd); void fpcMtdTg_MethodQTo(process_method_tag_class *pMthd); -void fpcMtdTg_ToMethodQ(node_list_class *pList, process_method_tag_class *pMthd); int fpcMtdTg_Init(process_method_tag_class *pMthd, process_method_tag_func pFunc, void *pMthdData); }; diff --git a/include/f/f_pc/f_pc_pause.h b/include/f/f_pc/f_pc_pause.h new file mode 100644 index 00000000000..57e19501515 --- /dev/null +++ b/include/f/f_pc/f_pc_pause.h @@ -0,0 +1,16 @@ + +#ifndef F_PC_PAUSE_H +#define F_PC_PAUSE_H + +#include "global.h" + +extern "C" { + +bool fpcPause_IsEnable(void *pProcess, u8 flag); +int fpcPause_Enable(void *pProcess, u8 flag); +int fpcPause_Disable(void *pProcess, u32 flag); +void fpcPause_Init(void *pProcess); + +}; + +#endif diff --git a/include/f/f_pc/f_pc_priority.h b/include/f/f_pc/f_pc_priority.h index ce6cf407994..81145037192 100644 --- a/include/f/f_pc/f_pc_priority.h +++ b/include/f/f_pc/f_pc_priority.h @@ -6,26 +6,29 @@ #include "SComponent/c_tag.h" #include "f/f_pc/f_pc_method_tag.h" +struct process_priority_queue_info { + u32 mLayer; + u16 mListID; + u16 mListPrio; +}; + struct process_priority_class : public create_tag_class { process_method_tag_class mMtdTag; - struct { - u32 mLayer; - u16 mListID; - u16 mListPrio; - } a, b; + process_priority_queue_info mInfoQ; + process_priority_queue_info mInfoCurr; }; extern "C" { -int fpcPi_IsInQueue(process_priority_class *pProc); -int fpcPi_QueueTo(process_priority_class *pProc); -int fpcPi_ToQueue(process_priority_class *pProc); +int fpcPi_IsInQueue(process_priority_class *pPi); +int fpcPi_QueueTo(process_priority_class *pPi); +int fpcPi_ToQueue(process_priority_class *pPi); process_priority_class * fpcPi_GetFromQueue(void); -int fpcPi_Delete(process_priority_class *pProc); -int fpcPi_IsNormal(process_priority_class *pProc); -int fpcPi_Change(process_priority_class *pProc, unsigned int layer, unsigned short listID, unsigned short priority); -void fpcPi_Handler(void); -int fpcPi_Init(process_priority_class *pProc, void *pUserData, unsigned int layer, unsigned short listID, unsigned short priority); +int fpcPi_Delete(process_priority_class *pPi); +int fpcPi_IsNormal(unsigned int layer, unsigned short listID, unsigned short priority); +int fpcPi_Change(process_priority_class *pPi, unsigned int layer, unsigned short listID, unsigned short priority); +int fpcPi_Handler(void); +int fpcPi_Init(process_priority_class *pPi, void *pUserData, unsigned int layer, unsigned short listID, unsigned short priority); }; diff --git a/libs/SSystem/SComponent/c_tag.cpp b/libs/SSystem/SComponent/c_tag.cpp index 4765efb2bf3..7e4c62e902f 100644 --- a/libs/SSystem/SComponent/c_tag.cpp +++ b/libs/SSystem/SComponent/c_tag.cpp @@ -13,7 +13,7 @@ int cTg_SingleCutFromTree(create_tag_class *pTag) { if (pTag->mbIsUse == true) { pTag->mbIsUse = false; - cTr_SingleCut(&pTag->pNode); + cTr_SingleCut(&pTag->mpNode); return true; } else { return false; @@ -23,7 +23,7 @@ int cTg_SingleCutFromTree(create_tag_class *pTag) int cTg_AdditionToTree(node_lists_tree_class *pTree, int listIdx, create_tag_class *pTag) { if (!pTag->mbIsUse) { - int ret = cTr_Addition(pTree, listIdx, &pTag->pNode); + int ret = cTr_Addition(pTree, listIdx, &pTag->mpNode); if (ret) { pTag->mbIsUse = true; return ret; @@ -36,7 +36,7 @@ int cTg_AdditionToTree(node_lists_tree_class *pTree, int listIdx, create_tag_cla int cTg_InsertToTree(node_lists_tree_class *pTree, int listIdx, create_tag_class *pTag, int idx) { if (!pTag->mbIsUse) { - int ret = cTr_Insert(pTree, listIdx, &pTag->pNode, idx); + int ret = cTr_Insert(pTree, listIdx, &pTag->mpNode, idx); if (ret) { pTag->mbIsUse = true; return ret; @@ -54,14 +54,14 @@ node_class * cTg_GetFirst(node_list_class *pList) } else { pTag = NULL; } - return &pTag->pNode; + return &pTag->mpNode; } int cTg_SingleCut(create_tag_class *pTag) { if (pTag->mbIsUse == 1) { pTag->mbIsUse = false; - cLs_SingleCut(&pTag->pNode); + cLs_SingleCut(&pTag->mpNode); return 1; } @@ -71,7 +71,7 @@ int cTg_SingleCut(create_tag_class *pTag) int cTg_Addition(node_list_class *pList, create_tag_class *pTag) { if (!pTag->mbIsUse) { - int ret = cLs_Addition(pList, &pTag->pNode); + int ret = cLs_Addition(pList, &pTag->mpNode); if (ret) { pTag->mbIsUse = true; return ret; @@ -83,7 +83,7 @@ int cTg_Addition(node_list_class *pList, create_tag_class *pTag) void cTg_Create(create_tag_class *pTag, void *pData) { - cNd_Create(&pTag->pNode, NULL); + cNd_Create(&pTag->mpNode, NULL); pTag->mpTagData = pData; pTag->mbIsUse = false; } diff --git a/obj_files.mk b/obj_files.mk index 6c056c62562..8b7f2329d8e 100644 --- a/obj_files.mk +++ b/obj_files.mk @@ -71,14 +71,14 @@ TEXT_O_FILES := \ $(BUILD_DIR)/src/f/f_pc/f_pc_method.o \ $(BUILD_DIR)/asm/f/pc/f_pc_node.o \ $(BUILD_DIR)/asm/f/pc/node/f_pc_node_req.o \ - $(BUILD_DIR)/asm/f/pc/f_pc_priority.o \ + $(BUILD_DIR)/src/f/f_pc/f_pc_priority.o \ $(BUILD_DIR)/src/f/f_pc/f_pc_profile.o \ $(BUILD_DIR)/src/f/f_pc/f_pc_searcher.o \ $(BUILD_DIR)/src/f/f_pc/f_pc_line_tag.o \ $(BUILD_DIR)/src/f/f_pc/f_pc_line_iter.o \ $(BUILD_DIR)/src/f/f_pc/f_pc_method_iter.o \ $(BUILD_DIR)/src/f/f_pc/f_pc_method_tag.o \ - $(BUILD_DIR)/asm/f/pc/f_pc_pause.o \ + $(BUILD_DIR)/src/f/f_pc/f_pc_pause.o \ $(BUILD_DIR)/asm/f/pc/f_pc_draw.o \ $(BUILD_DIR)/asm/f/pc/fstcreate/f_pc_fstcreate_req.o \ $(BUILD_DIR)/asm/f/pc/stdcreate/f_pc_stdcreate_req.o \ diff --git a/src/f/f_pc/f_pc_executor.cpp b/src/f/f_pc/f_pc_executor.cpp index fc3f39fb513..b78af1e42f3 100644 --- a/src/f/f_pc/f_pc_executor.cpp +++ b/src/f/f_pc/f_pc_executor.cpp @@ -47,7 +47,7 @@ int fpcEx_ToLineQ(base_process_class *pProc) base_process_class *pLayerPcNode = pLayer->mpPcNode; if (pLayer->mLayerID == 0 || cTg_IsUse(&pLayerPcNode->mLnTg) == true) { - int ret = fpcLnTg_ToQueue(&pProc->mLnTg, pProc->mPi.b.mListID); + int ret = fpcLnTg_ToQueue(&pProc->mLnTg, pProc->mPi.mInfoCurr.mListID); if (ret == 0) { fpcLyTg_QueueTo(&pProc->mLyTg); return 0; @@ -78,7 +78,7 @@ int fpcEx_ExecuteQTo(base_process_class *pProc) int fpcEx_ToExecuteQ(base_process_class *pProc) { - int ret = fpcLyTg_ToQueue(&pProc->mLyTg, pProc->mPi.b.mLayer, pProc->mPi.b.mListID, pProc->mPi.b.mListPrio); + int ret = fpcLyTg_ToQueue(&pProc->mLyTg, pProc->mPi.mInfoCurr.mLayer, pProc->mPi.mInfoCurr.mListID, pProc->mPi.mInfoCurr.mListPrio); if (ret == 1) { fpcEx_ToLineQ(pProc); return 1; diff --git a/src/f/f_pc/f_pc_layer.cpp b/src/f/f_pc/f_pc_layer.cpp index fcdae0b270d..9b963e28a80 100644 --- a/src/f/f_pc/f_pc_layer.cpp +++ b/src/f/f_pc/f_pc_layer.cpp @@ -22,8 +22,8 @@ void fpcLy_CancelQTo(process_method_tag_class *pMthd) { fpcMtdTg_MethodQTo(pMthd); } -void fpcLy_ToCancelQ(layer_class *pLayer, process_method_tag_class *pMthd) { - fpcMtdTg_ToMethodQ(&pLayer->mCancelList, pMthd); +int fpcLy_ToCancelQ(layer_class *pLayer, process_method_tag_class *pMthd) { + return fpcMtdTg_ToMethodQ(&pLayer->mCancelList, pMthd); } bool fpcLy_CancelMethod(process_method_tag_class *pLayer) { diff --git a/src/f/f_pc/f_pc_method_tag.cpp b/src/f/f_pc/f_pc_method_tag.cpp index a0cdb37a1d9..693ab568110 100644 --- a/src/f/f_pc/f_pc_method_tag.cpp +++ b/src/f/f_pc/f_pc_method_tag.cpp @@ -11,9 +11,9 @@ int fpcMtdTg_Do(process_method_tag_class *pMthd) return pMthd->mpFunc(pMthd->mpMthdData); } -void fpcMtdTg_ToMethodQ(node_list_class *pList, process_method_tag_class *pMthd) +int fpcMtdTg_ToMethodQ(node_list_class *pList, process_method_tag_class *pMthd) { - cTg_Addition(pList, pMthd); + return cTg_Addition(pList, pMthd); } void fpcMtdTg_MethodQTo(process_method_tag_class *pMthd) diff --git a/src/f/f_pc/f_pc_pause.cpp b/src/f/f_pc/f_pc_pause.cpp index 4bf93c8658d..0c97d487f23 100644 --- a/src/f/f_pc/f_pc_pause.cpp +++ b/src/f/f_pc/f_pc_pause.cpp @@ -1 +1,68 @@ -// ok + +#include "f/f_pc/f_pc_pause.h" +#include "f/f_pc/f_pc_base.h" +#include "f/f_pc/f_pc_layer_iter.h" +#include "f/f_pc/f_pc_node.h" + +extern "C" +{ + +// f_pc_node::g_fpcNd_type +extern int lbl_80450D40; + +#if NON_MATCHING +bool fpcPause_IsEnable(void *pProcess, u8 flag) +{ + base_process_class *pProc = (base_process_class *) pProcess; + // extra addic/subfe? + return (pProc->mPauseFlag & flag) == flag; +} +#else +asm bool fpcPause_IsEnable(void *pProcess, u8 flag) +{ + nofralloc +/* 80023844 00020784 54 84 06 3E */ clrlwi r4, r4, 0x18 +/* 80023848 00020788 88 03 00 0B */ lbz r0, 0xb(r3) +/* 8002384C 0002078C 7C 80 00 38 */ and r0, r4, r0 +/* 80023850 00020790 7C 64 00 50 */ subf r3, r4, r0 +/* 80023854 00020794 30 03 FF FF */ addic r0, r3, -1 +/* 80023858 00020798 7C 00 19 10 */ subfe r0, r0, r3 +/* 8002385C 0002079C 7C 00 00 34 */ cntlzw r0, r0 +/* 80023860 000207A0 54 03 D9 7E */ srwi r3, r0, 5 +/* 80023864 000207A4 4E 80 00 20 */ blr +} +#endif + +int fpcPause_Enable(void *pProcess, u8 flag) +{ + base_process_class *pProc = (base_process_class *) pProcess; + pProc->mPauseFlag |= flag; + + if (fpcBs_Is_JustOfType(lbl_80450D40, pProc->mSubType)) { + process_node_class *pNode = (process_node_class *) pProc; + fpcLyIt_OnlyHere(&pNode->mLayer, (cNdIt_MethodFunc)fpcPause_Enable, (void*) (flag & 0xFF)); + } + return 1; +} + +// According to symbols, they used u8 instead of u32, but I can't get a match with u8 here. This is the best I got... +int fpcPause_Disable(void *pProcess, u32 flag) +{ + base_process_class *pProc = (base_process_class *) pProcess; + pProc->mPauseFlag &= (0xFF - flag) & 0xFF; + + if (fpcBs_Is_JustOfType(lbl_80450D40, pProc->mSubType)) { + process_node_class *pNode = (process_node_class *) pProc; + fpcLyIt_OnlyHere(&pNode->mLayer, (cNdIt_MethodFunc)fpcPause_Disable, (void*) (flag & 0xFF)); + } + + return 1; +} + +void fpcPause_Init(void *pProcess) +{ + base_process_class *pProc = (base_process_class *) pProcess; + pProc->mPauseFlag = 0; +} + +} diff --git a/src/f/f_pc/f_pc_priority.cpp b/src/f/f_pc/f_pc_priority.cpp index 4bf93c8658d..c1495da27e3 100644 --- a/src/f/f_pc/f_pc_priority.cpp +++ b/src/f/f_pc/f_pc_priority.cpp @@ -1 +1,147 @@ -// ok + +#include "f/f_pc/f_pc_priority.h" +#include "f/f_pc/f_pc_layer.h" +#include "f/f_pc/f_pc_layer_tag.h" +#include "f/f_pc/f_pc_base.h" + +extern "C" +{ + +// f_pc_priority::crear$2186 +extern process_priority_queue_info lbl_804505E8; + +// f_pc_priority::l_fpcPi_Queue +extern node_list_class lbl_803F4E58; + +int fpcPi_IsInQueue(process_priority_class *pPi) +{ + return cTg_IsUse(pPi); +} + +int fpcPi_QueueTo(process_priority_class *pPi) +{ + cTg_SingleCut(pPi); + fpcLy_CancelQTo(&pPi->mMtdTag); + return 1; +} + +int fpcPi_ToQueue(process_priority_class *pPi) +{ + u32 layer = pPi->mInfoQ.mLayer; + + if (cTg_Addition(&lbl_803F4E58, pPi)) { + if (layer != 0xFFFFFFFD) { + layer_class *pLayer = fpcLy_Layer(layer); + + if (!fpcLy_ToCancelQ(pLayer, &pPi->mMtdTag)) { + cTg_SingleCut(pPi); + return 0; + } + } + + return 1; + } + + return 0; +} + +process_priority_class * fpcPi_GetFromQueue(void) +{ + process_priority_class *pPi = (process_priority_class *) cTg_GetFirst(&lbl_803F4E58); + + if (pPi != NULL) { + base_process_class *pProc = (base_process_class *) pPi->mpTagData; + process_priority_class *pProcPi = &pProc->mPi; + fpcLy_CancelQTo(&pProcPi->mMtdTag); + return pProcPi; + } + + return NULL; +} + +int fpcPi_Delete(process_priority_class *pPi) +{ + fpcPi_QueueTo(pPi); + pPi->mInfoQ = lbl_804505E8; + return 1; +} + +int fpcPi_IsNormal(unsigned int layer, unsigned short listID, unsigned short priority) +{ + if ((layer < 0xFFFFFFFE) && (listID < 0xFFFE) && (priority < 0xFFFE)) + return 1; + + return 0; +} + +int fpcPi_Change(process_priority_class *pPi, unsigned int layer, unsigned short listID, unsigned short priority) +{ + base_process_class *pProc = (base_process_class *) pPi->mpTagData; + int changed = 0; + + if (pProc->mInitState == 3) + return 0; + + if (!fpcPi_IsNormal(layer, listID, priority)) + return 0; + + pPi->mInfoQ = pPi->mInfoCurr; + + if (layer != 0xFFFFFFFD && pPi->mInfoCurr.mLayer != layer) { + pPi->mInfoQ.mLayer = layer; + changed = 1; + } + + if (listID != 0xFFFD && pPi->mInfoCurr.mListID != listID) { + pPi->mInfoQ.mListID = listID; + changed = 1; + } + + if (priority != 0xFFFD && pPi->mInfoCurr.mListPrio != priority) { + pPi->mInfoQ.mListPrio = priority; + changed = 1; + } + + if (pProc->mInitState == 0 || pProc->mInitState == 1) { + pPi->mInfoCurr = pPi->mInfoQ; + return 1; + } + + if (changed == 1) + return fpcPi_ToQueue(pPi); + else + return 0; +} + +int fpcPi_Handler(void) +{ + while (process_priority_class *pPi = fpcPi_GetFromQueue()) { + base_process_class *pProc = (base_process_class *) pPi->mpTagData; + layer_management_tag_class *pLayerTag = &pProc->mLyTg; + line_tag *pLineTag = &pProc->mLnTg; + if (fpcLyTg_Move(pLayerTag, pPi->mInfoQ.mLayer, pPi->mInfoQ.mListID, pPi->mInfoQ.mListPrio) == 1) { + fpcLnTg_Move(pLineTag, pPi->mInfoCurr.mListID); + pPi->mInfoCurr = pPi->mInfoQ; + } else { + return 0; + } + } + + return 1; +} + +int fpcPi_Init(process_priority_class *pPi, void *pUserData, unsigned int layer, unsigned short listID, unsigned short priority) +{ + if (!fpcPi_IsNormal(layer, listID, priority)) + return 0; + + pPi->mInfoQ.mLayer = layer; + pPi->mInfoQ.mListID = listID; + pPi->mInfoQ.mListPrio = priority; + pPi->mInfoCurr = pPi->mInfoQ; + cTg_Create(pPi, pUserData); + fpcMtdTg_Init(&pPi->mMtdTag, (process_method_tag_func) fpcPi_Delete, pPi); + return 1; +} + +};