From 0de033925019e8d42916d56261fad02d9e5a4d20 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Thu, 7 Dec 2023 01:57:35 +0200 Subject: [PATCH] Some GX work (#1998) * Some GX work * GXFrameBuf work * Import GXAttr functions and enums * Import most of GXTev * Import most of GXPixel * Import GXFifo * Import some of GXInit * Import and work on GXTransform * Import GXPerf * A little work on GXTexture --- asm/dolphin/gx/GXAttr/GXClearVtxDesc.s | 15 - asm/dolphin/gx/GXAttr/GXInvalidateVtxCache.s | 5 - asm/dolphin/gx/GXAttr/GXSetArray.s | 19 - asm/dolphin/gx/GXAttr/GXSetNumTexGens.s | 16 - asm/dolphin/gx/GXAttr/GXSetTexCoordGen2.s | 172 --- asm/dolphin/gx/GXAttr/GXSetVtxAttrFmt.s | 154 --- asm/dolphin/gx/GXAttr/GXSetVtxAttrFmtv.s | 165 --- asm/dolphin/gx/GXAttr/GXSetVtxDesc.s | 162 --- asm/dolphin/gx/GXAttr/__GXCalculateVLim.s | 76 -- asm/dolphin/gx/GXAttr/__GXSetVAT.s | 37 - asm/dolphin/gx/GXFifo/GXCPInterruptHandler.s | 81 -- asm/dolphin/gx/GXFifo/GXGetGPStatus.s | 21 - asm/dolphin/gx/GXFifo/GXInitFifoBase.s | 28 - asm/dolphin/gx/GXFifo/GXInitFifoPtrs.s | 30 - asm/dolphin/gx/GXFifo/GXSetBreakPtCallback.s | 18 - asm/dolphin/gx/GXFifo/GXSetCPUFifo.s | 78 -- asm/dolphin/gx/GXFifo/GXSetCurrentGXThread.s | 20 - asm/dolphin/gx/GXFifo/GXSetGPFifo.s | 107 -- asm/dolphin/gx/GXFifo/__GXCleanGPFifo.s | 70 -- asm/dolphin/gx/GXFifo/__GXFifoLink.s | 16 - asm/dolphin/gx/GXFifo/__GXFifoReadDisable.s | 10 - asm/dolphin/gx/GXFifo/__GXFifoReadEnable.s | 10 - asm/dolphin/gx/GXFifo/__GXSaveCPUFifoAux.s | 53 - .../gx/GXFifo/__GXWriteFifoIntEnable.s | 13 - asm/dolphin/gx/GXFifo/__GXWriteFifoIntReset.s | 13 - .../gx/GXInit/__GXDefaultTexRegionCallback.s | 71 -- asm/dolphin/gx/GXInit/__GXInitRevisionBits.s | 109 -- asm/dolphin/gx/GXInit/__GXShutdown.s | 110 -- asm/dolphin/gx/GXMisc/GXDrawDone.s | 35 - asm/dolphin/gx/GXMisc/GXFlush.s | 25 - asm/dolphin/gx/GXMisc/GXPeekZ.s | 10 - asm/dolphin/gx/GXMisc/GXPixModeSync.s | 10 - asm/dolphin/gx/GXMisc/GXPokeAlphaMode.s | 6 - asm/dolphin/gx/GXMisc/GXPokeAlphaRead.s | 9 - asm/dolphin/gx/GXMisc/GXPokeAlphaUpdate.s | 7 - asm/dolphin/gx/GXMisc/GXPokeColorUpdate.s | 7 - asm/dolphin/gx/GXMisc/GXPokeDither.s | 7 - asm/dolphin/gx/GXMisc/GXPokeDstAlpha.s | 10 - asm/dolphin/gx/GXMisc/GXPokeZMode.s | 9 - asm/dolphin/gx/GXMisc/GXSetDrawDone.s | 40 - asm/dolphin/gx/GXMisc/GXSetDrawDoneCallback.s | 18 - asm/dolphin/gx/GXMisc/GXSetDrawSyncCallback.s | 18 - asm/dolphin/gx/GXMisc/GXSetMisc.s | 42 - asm/dolphin/gx/GXMisc/__GXPEInit.s | 30 - asm/dolphin/gx/GXPerf/GXClearGPMetric.s | 5 - asm/dolphin/gx/GXPerf/GXReadXfRasMetric.s | 54 - asm/dolphin/gx/GXPerf/GXSetGPMetric.s | 543 --------- asm/dolphin/gx/GXPixel/GXSetAlphaUpdate.s | 12 - asm/dolphin/gx/GXPixel/GXSetBlendMode.s | 22 - asm/dolphin/gx/GXPixel/GXSetColorUpdate.s | 12 - asm/dolphin/gx/GXPixel/GXSetDither.s | 12 - asm/dolphin/gx/GXPixel/GXSetDstAlpha.s | 16 - asm/dolphin/gx/GXPixel/GXSetFieldMask.s | 15 - asm/dolphin/gx/GXPixel/GXSetFieldMode.s | 31 - asm/dolphin/gx/GXPixel/GXSetFogRangeAdj.s | 75 -- asm/dolphin/gx/GXPixel/GXSetZCompLoc.s | 14 - asm/dolphin/gx/GXPixel/GXSetZMode.s | 14 - asm/dolphin/gx/GXTev/GXSetAlphaCompare.s | 18 - asm/dolphin/gx/GXTev/GXSetNumTevStages.s | 11 - asm/dolphin/gx/GXTev/GXSetTevAlphaIn.s | 18 - asm/dolphin/gx/GXTev/GXSetTevAlphaOp.s | 29 - asm/dolphin/gx/GXTev/GXSetTevColorIn.s | 18 - asm/dolphin/gx/GXTev/GXSetTevColorOp.s | 29 - asm/dolphin/gx/GXTev/GXSetTevKAlphaSel.s | 26 - asm/dolphin/gx/GXTev/GXSetTevKColorSel.s | 26 - asm/dolphin/gx/GXTev/GXSetTevOp.s | 38 - asm/dolphin/gx/GXTev/GXSetTevOrder.s | 116 -- asm/dolphin/gx/GXTev/GXSetTevSwapMode.s | 19 - asm/dolphin/gx/GXTev/GXSetTevSwapModeTable.s | 33 - asm/dolphin/gx/GXTev/GXSetZTexture.s | 42 - asm/dolphin/gx/GXTexture/GXGetTexObjFmt.s | 3 - asm/dolphin/gx/GXTexture/GXGetTexObjHeight.s | 5 - asm/dolphin/gx/GXTexture/GXGetTexObjMipMap.s | 7 - asm/dolphin/gx/GXTexture/GXGetTexObjTlut.s | 3 - asm/dolphin/gx/GXTexture/GXGetTexObjWidth.s | 5 - asm/dolphin/gx/GXTexture/GXGetTexObjWrapS.s | 4 - asm/dolphin/gx/GXTexture/GXGetTexObjWrapT.s | 4 - asm/dolphin/gx/GXTexture/GXInvalidateTexAll.s | 19 - .../gx/GXTexture/GXSetTexRegionCallback.s | 6 - .../gx/GXTexture/GXSetTlutRegionCallback.s | 6 - asm/dolphin/gx/GXTransform/GXGetViewportv.s | 10 - asm/dolphin/gx/GXTransform/GXLoadNrmMtxImm.s | 21 - asm/dolphin/gx/GXTransform/GXLoadPosMtxImm.s | 21 - asm/dolphin/gx/GXTransform/GXLoadTexMtxImm.s | 51 - asm/dolphin/gx/GXTransform/GXSetClipMode.s | 11 - asm/dolphin/gx/GXTransform/GXSetCurrentMtx.s | 14 - asm/dolphin/gx/GXTransform/GXSetProjection.s | 44 - asm/dolphin/gx/GXTransform/GXSetScissor.s | 31 - .../gx/GXTransform/GXSetScissorBoxOffset.s | 17 - asm/dolphin/gx/GXTransform/GXSetViewport.s | 19 - .../gx/GXTransform/__GXSetMatrixIndex.s | 36 - include/MSL_C/math.h | 1 + include/dolphin/gx/GX.h | 65 +- include/dolphin/gx/GXAttr.h | 2 +- include/dolphin/gx/GXEnum.h | 1083 ++++++++++++++++- include/dolphin/gx/GXFifo.h | 14 +- include/dolphin/gx/GXInit.h | 161 ++- include/dolphin/gx/GXMisc.h | 6 +- include/dolphin/gx/GXPerf.h | 3 +- include/dolphin/gx/GXStruct.h | 6 +- include/dolphin/gx/GXTexture.h | 2 +- libs/dolphin/gx/GXAttr.c | 673 +++++++--- libs/dolphin/gx/GXBump.c | 38 +- libs/dolphin/gx/GXDisplayList.c | 2 +- libs/dolphin/gx/GXFifo.c | 416 ++++--- libs/dolphin/gx/GXFrameBuf.c | 317 ++++- libs/dolphin/gx/GXGeometry.c | 76 +- libs/dolphin/gx/GXInit.c | 346 +++++- libs/dolphin/gx/GXLight.c | 132 +- libs/dolphin/gx/GXMisc.c | 371 ++++-- libs/dolphin/gx/GXPerf.c | 478 ++++++-- libs/dolphin/gx/GXPixel.c | 282 +++-- libs/dolphin/gx/GXTev.c | 557 ++++++--- libs/dolphin/gx/GXTexture.c | 254 ++-- libs/dolphin/gx/GXTransform.c | 381 ++++-- libs/dolphin/gx/Makefile | 3 + src/d/kankyo/d_kankyo_data.cpp | 4 +- 117 files changed, 4451 insertions(+), 4769 deletions(-) delete mode 100644 asm/dolphin/gx/GXAttr/GXClearVtxDesc.s delete mode 100644 asm/dolphin/gx/GXAttr/GXInvalidateVtxCache.s delete mode 100644 asm/dolphin/gx/GXAttr/GXSetArray.s delete mode 100644 asm/dolphin/gx/GXAttr/GXSetNumTexGens.s delete mode 100644 asm/dolphin/gx/GXAttr/GXSetTexCoordGen2.s delete mode 100644 asm/dolphin/gx/GXAttr/GXSetVtxAttrFmt.s delete mode 100644 asm/dolphin/gx/GXAttr/GXSetVtxAttrFmtv.s delete mode 100644 asm/dolphin/gx/GXAttr/GXSetVtxDesc.s delete mode 100644 asm/dolphin/gx/GXAttr/__GXCalculateVLim.s delete mode 100644 asm/dolphin/gx/GXAttr/__GXSetVAT.s delete mode 100644 asm/dolphin/gx/GXFifo/GXCPInterruptHandler.s delete mode 100644 asm/dolphin/gx/GXFifo/GXGetGPStatus.s delete mode 100644 asm/dolphin/gx/GXFifo/GXInitFifoBase.s delete mode 100644 asm/dolphin/gx/GXFifo/GXInitFifoPtrs.s delete mode 100644 asm/dolphin/gx/GXFifo/GXSetBreakPtCallback.s delete mode 100644 asm/dolphin/gx/GXFifo/GXSetCPUFifo.s delete mode 100644 asm/dolphin/gx/GXFifo/GXSetCurrentGXThread.s delete mode 100644 asm/dolphin/gx/GXFifo/GXSetGPFifo.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXCleanGPFifo.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXFifoLink.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXFifoReadDisable.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXFifoReadEnable.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXSaveCPUFifoAux.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXWriteFifoIntEnable.s delete mode 100644 asm/dolphin/gx/GXFifo/__GXWriteFifoIntReset.s delete mode 100644 asm/dolphin/gx/GXInit/__GXDefaultTexRegionCallback.s delete mode 100644 asm/dolphin/gx/GXInit/__GXInitRevisionBits.s delete mode 100644 asm/dolphin/gx/GXInit/__GXShutdown.s delete mode 100644 asm/dolphin/gx/GXMisc/GXDrawDone.s delete mode 100644 asm/dolphin/gx/GXMisc/GXFlush.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPeekZ.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPixModeSync.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeAlphaMode.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeAlphaRead.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeAlphaUpdate.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeColorUpdate.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeDither.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeDstAlpha.s delete mode 100644 asm/dolphin/gx/GXMisc/GXPokeZMode.s delete mode 100644 asm/dolphin/gx/GXMisc/GXSetDrawDone.s delete mode 100644 asm/dolphin/gx/GXMisc/GXSetDrawDoneCallback.s delete mode 100644 asm/dolphin/gx/GXMisc/GXSetDrawSyncCallback.s delete mode 100644 asm/dolphin/gx/GXMisc/GXSetMisc.s delete mode 100644 asm/dolphin/gx/GXMisc/__GXPEInit.s delete mode 100644 asm/dolphin/gx/GXPerf/GXClearGPMetric.s delete mode 100644 asm/dolphin/gx/GXPerf/GXReadXfRasMetric.s delete mode 100644 asm/dolphin/gx/GXPerf/GXSetGPMetric.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetAlphaUpdate.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetBlendMode.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetColorUpdate.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetDither.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetDstAlpha.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetFieldMask.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetFieldMode.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetFogRangeAdj.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetZCompLoc.s delete mode 100644 asm/dolphin/gx/GXPixel/GXSetZMode.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetAlphaCompare.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetNumTevStages.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevAlphaIn.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevAlphaOp.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevColorIn.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevColorOp.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevKAlphaSel.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevKColorSel.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevOp.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevOrder.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevSwapMode.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetTevSwapModeTable.s delete mode 100644 asm/dolphin/gx/GXTev/GXSetZTexture.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjFmt.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjHeight.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjMipMap.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjTlut.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjWidth.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjWrapS.s delete mode 100644 asm/dolphin/gx/GXTexture/GXGetTexObjWrapT.s delete mode 100644 asm/dolphin/gx/GXTexture/GXInvalidateTexAll.s delete mode 100644 asm/dolphin/gx/GXTexture/GXSetTexRegionCallback.s delete mode 100644 asm/dolphin/gx/GXTexture/GXSetTlutRegionCallback.s delete mode 100644 asm/dolphin/gx/GXTransform/GXGetViewportv.s delete mode 100644 asm/dolphin/gx/GXTransform/GXLoadNrmMtxImm.s delete mode 100644 asm/dolphin/gx/GXTransform/GXLoadPosMtxImm.s delete mode 100644 asm/dolphin/gx/GXTransform/GXLoadTexMtxImm.s delete mode 100644 asm/dolphin/gx/GXTransform/GXSetClipMode.s delete mode 100644 asm/dolphin/gx/GXTransform/GXSetCurrentMtx.s delete mode 100644 asm/dolphin/gx/GXTransform/GXSetProjection.s delete mode 100644 asm/dolphin/gx/GXTransform/GXSetScissor.s delete mode 100644 asm/dolphin/gx/GXTransform/GXSetScissorBoxOffset.s delete mode 100644 asm/dolphin/gx/GXTransform/GXSetViewport.s delete mode 100644 asm/dolphin/gx/GXTransform/__GXSetMatrixIndex.s diff --git a/asm/dolphin/gx/GXAttr/GXClearVtxDesc.s b/asm/dolphin/gx/GXAttr/GXClearVtxDesc.s deleted file mode 100644 index ff8a32e452b..00000000000 --- a/asm/dolphin/gx/GXAttr/GXClearVtxDesc.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_8035B58C: -/* 8035B58C 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035B590 38 A0 00 00 */ li r5, 0 -/* 8035B594 38 00 00 01 */ li r0, 1 -/* 8035B598 90 A4 00 14 */ stw r5, 0x14(r4) -/* 8035B59C 80 64 00 14 */ lwz r3, 0x14(r4) -/* 8035B5A0 50 03 4D 6C */ rlwimi r3, r0, 9, 0x15, 0x16 -/* 8035B5A4 90 64 00 14 */ stw r3, 0x14(r4) -/* 8035B5A8 90 A4 00 18 */ stw r5, 0x18(r4) -/* 8035B5AC 98 A4 04 D4 */ stb r5, 0x4d4(r4) -/* 8035B5B0 98 A4 04 D5 */ stb r5, 0x4d5(r4) -/* 8035B5B4 80 04 05 AC */ lwz r0, 0x5ac(r4) -/* 8035B5B8 60 00 00 08 */ ori r0, r0, 8 -/* 8035B5BC 90 04 05 AC */ stw r0, 0x5ac(r4) -/* 8035B5C0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXInvalidateVtxCache.s b/asm/dolphin/gx/GXAttr/GXInvalidateVtxCache.s deleted file mode 100644 index cdff74b42af..00000000000 --- a/asm/dolphin/gx/GXAttr/GXInvalidateVtxCache.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_8035BB6C: -/* 8035BB6C 38 00 00 48 */ li r0, 0x48 -/* 8035BB70 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035BB74 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035BB78 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXSetArray.s b/asm/dolphin/gx/GXAttr/GXSetArray.s deleted file mode 100644 index 2dd0e3f7ac0..00000000000 --- a/asm/dolphin/gx/GXAttr/GXSetArray.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_8035BB28: -/* 8035BB28 2C 03 00 19 */ cmpwi r3, 0x19 -/* 8035BB2C 40 82 00 08 */ bne lbl_8035BB34 -/* 8035BB30 38 60 00 0A */ li r3, 0xa -lbl_8035BB34: -/* 8035BB34 38 E0 00 08 */ li r7, 8 -/* 8035BB38 38 63 FF F7 */ addi r3, r3, -9 -/* 8035BB3C 3C C0 CC 01 */ lis r6, 0xCC01 /* 0xCC008000@ha */ -/* 8035BB40 98 E6 80 00 */ stb r7, 0x8000(r6) /* 0xCC008000@l */ -/* 8035BB44 60 60 00 A0 */ ori r0, r3, 0xa0 -/* 8035BB48 54 84 00 BE */ clrlwi r4, r4, 2 -/* 8035BB4C 98 06 80 00 */ stb r0, -0x8000(r6) -/* 8035BB50 60 63 00 B0 */ ori r3, r3, 0xb0 -/* 8035BB54 54 A0 06 3E */ clrlwi r0, r5, 0x18 -/* 8035BB58 90 86 80 00 */ stw r4, -0x8000(r6) -/* 8035BB5C 98 E6 80 00 */ stb r7, -0x8000(r6) -/* 8035BB60 98 66 80 00 */ stb r3, -0x8000(r6) -/* 8035BB64 90 06 80 00 */ stw r0, -0x8000(r6) -/* 8035BB68 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXSetNumTexGens.s b/asm/dolphin/gx/GXAttr/GXSetNumTexGens.s deleted file mode 100644 index 2b5f45041fe..00000000000 --- a/asm/dolphin/gx/GXAttr/GXSetNumTexGens.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_8035BDFC: -/* 8035BDFC 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035BE00 54 65 06 3E */ clrlwi r5, r3, 0x18 -/* 8035BE04 38 80 00 10 */ li r4, 0x10 -/* 8035BE08 80 06 02 04 */ lwz r0, 0x204(r6) -/* 8035BE0C 50 60 07 3E */ rlwimi r0, r3, 0, 0x1c, 0x1f -/* 8035BE10 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035BE14 90 06 02 04 */ stw r0, 0x204(r6) -/* 8035BE18 38 00 10 3F */ li r0, 0x103f -/* 8035BE1C 98 83 80 00 */ stb r4, 0x8000(r3) /* 0xCC008000@l */ -/* 8035BE20 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BE24 90 A3 80 00 */ stw r5, -0x8000(r3) -/* 8035BE28 80 06 05 AC */ lwz r0, 0x5ac(r6) -/* 8035BE2C 60 00 00 04 */ ori r0, r0, 4 -/* 8035BE30 90 06 05 AC */ stw r0, 0x5ac(r6) -/* 8035BE34 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXSetTexCoordGen2.s b/asm/dolphin/gx/GXAttr/GXSetTexCoordGen2.s deleted file mode 100644 index a510337a206..00000000000 --- a/asm/dolphin/gx/GXAttr/GXSetTexCoordGen2.s +++ /dev/null @@ -1,172 +0,0 @@ -lbl_8035BB7C: -/* 8035BB7C 7C 08 02 A6 */ mflr r0 -/* 8035BB80 28 05 00 14 */ cmplwi r5, 0x14 -/* 8035BB84 90 01 00 04 */ stw r0, 4(r1) -/* 8035BB88 39 40 00 00 */ li r10, 0 -/* 8035BB8C 39 80 00 00 */ li r12, 0 -/* 8035BB90 94 21 FF F8 */ stwu r1, -8(r1) -/* 8035BB94 39 60 00 05 */ li r11, 5 -/* 8035BB98 41 81 00 98 */ bgt lbl_8035BC30 -/* 8035BB9C 3D 20 80 3D */ lis r9, lit_739@ha /* 0x803D23F4@ha */ -/* 8035BBA0 39 29 23 F4 */ addi r9, r9, lit_739@l /* 0x803D23F4@l */ -/* 8035BBA4 54 A0 10 3A */ slwi r0, r5, 2 -/* 8035BBA8 7C 09 00 2E */ lwzx r0, r9, r0 -/* 8035BBAC 7C 09 03 A6 */ mtctr r0 -/* 8035BBB0 4E 80 04 20 */ bctr -/* 8035BBB4 39 60 00 00 */ li r11, 0 -/* 8035BBB8 39 80 00 01 */ li r12, 1 -/* 8035BBBC 48 00 00 74 */ b lbl_8035BC30 -/* 8035BBC0 39 60 00 01 */ li r11, 1 -/* 8035BBC4 39 80 00 01 */ li r12, 1 -/* 8035BBC8 48 00 00 68 */ b lbl_8035BC30 -/* 8035BBCC 39 60 00 03 */ li r11, 3 -/* 8035BBD0 39 80 00 01 */ li r12, 1 -/* 8035BBD4 48 00 00 5C */ b lbl_8035BC30 -/* 8035BBD8 39 60 00 04 */ li r11, 4 -/* 8035BBDC 39 80 00 01 */ li r12, 1 -/* 8035BBE0 48 00 00 50 */ b lbl_8035BC30 -/* 8035BBE4 39 60 00 02 */ li r11, 2 -/* 8035BBE8 48 00 00 48 */ b lbl_8035BC30 -/* 8035BBEC 39 60 00 02 */ li r11, 2 -/* 8035BBF0 48 00 00 40 */ b lbl_8035BC30 -/* 8035BBF4 39 60 00 05 */ li r11, 5 -/* 8035BBF8 48 00 00 38 */ b lbl_8035BC30 -/* 8035BBFC 39 60 00 06 */ li r11, 6 -/* 8035BC00 48 00 00 30 */ b lbl_8035BC30 -/* 8035BC04 39 60 00 07 */ li r11, 7 -/* 8035BC08 48 00 00 28 */ b lbl_8035BC30 -/* 8035BC0C 39 60 00 08 */ li r11, 8 -/* 8035BC10 48 00 00 20 */ b lbl_8035BC30 -/* 8035BC14 39 60 00 09 */ li r11, 9 -/* 8035BC18 48 00 00 18 */ b lbl_8035BC30 -/* 8035BC1C 39 60 00 0A */ li r11, 0xa -/* 8035BC20 48 00 00 10 */ b lbl_8035BC30 -/* 8035BC24 39 60 00 0B */ li r11, 0xb -/* 8035BC28 48 00 00 08 */ b lbl_8035BC30 -/* 8035BC2C 39 60 00 0C */ li r11, 0xc -lbl_8035BC30: -/* 8035BC30 2C 04 00 01 */ cmpwi r4, 1 -/* 8035BC34 41 82 00 24 */ beq lbl_8035BC58 -/* 8035BC38 40 80 00 10 */ bge lbl_8035BC48 -/* 8035BC3C 2C 04 00 00 */ cmpwi r4, 0 -/* 8035BC40 40 80 00 38 */ bge lbl_8035BC78 -/* 8035BC44 48 00 00 AC */ b lbl_8035BCF0 -lbl_8035BC48: -/* 8035BC48 2C 04 00 0A */ cmpwi r4, 0xa -/* 8035BC4C 41 82 00 74 */ beq lbl_8035BCC0 -/* 8035BC50 40 80 00 A0 */ bge lbl_8035BCF0 -/* 8035BC54 48 00 00 40 */ b lbl_8035BC94 -lbl_8035BC58: -/* 8035BC58 38 00 00 00 */ li r0, 0 -/* 8035BC5C 50 0A 0F BC */ rlwimi r10, r0, 1, 0x1e, 0x1e -/* 8035BC60 38 8A 00 00 */ addi r4, r10, 0 -/* 8035BC64 51 84 17 7A */ rlwimi r4, r12, 2, 0x1d, 0x1d -/* 8035BC68 39 44 00 00 */ addi r10, r4, 0 -/* 8035BC6C 50 0A 26 76 */ rlwimi r10, r0, 4, 0x19, 0x1b -/* 8035BC70 51 6A 3D 30 */ rlwimi r10, r11, 7, 0x14, 0x18 -/* 8035BC74 48 00 00 7C */ b lbl_8035BCF0 -lbl_8035BC78: -/* 8035BC78 38 00 00 01 */ li r0, 1 -/* 8035BC7C 50 0A 0F BC */ rlwimi r10, r0, 1, 0x1e, 0x1e -/* 8035BC80 38 00 00 00 */ li r0, 0 -/* 8035BC84 51 8A 17 7A */ rlwimi r10, r12, 2, 0x1d, 0x1d -/* 8035BC88 50 0A 26 76 */ rlwimi r10, r0, 4, 0x19, 0x1b -/* 8035BC8C 51 6A 3D 30 */ rlwimi r10, r11, 7, 0x14, 0x18 -/* 8035BC90 48 00 00 60 */ b lbl_8035BCF0 -lbl_8035BC94: -/* 8035BC94 38 00 00 00 */ li r0, 0 -/* 8035BC98 50 0A 0F BC */ rlwimi r10, r0, 1, 0x1e, 0x1e -/* 8035BC9C 38 00 00 01 */ li r0, 1 -/* 8035BCA0 51 8A 17 7A */ rlwimi r10, r12, 2, 0x1d, 0x1d -/* 8035BCA4 50 0A 26 76 */ rlwimi r10, r0, 4, 0x19, 0x1b -/* 8035BCA8 38 05 FF F4 */ addi r0, r5, -12 -/* 8035BCAC 51 6A 3D 30 */ rlwimi r10, r11, 7, 0x14, 0x18 -/* 8035BCB0 50 0A 64 66 */ rlwimi r10, r0, 0xc, 0x11, 0x13 -/* 8035BCB4 38 04 FF FE */ addi r0, r4, -2 -/* 8035BCB8 50 0A 7B A0 */ rlwimi r10, r0, 0xf, 0xe, 0x10 -/* 8035BCBC 48 00 00 34 */ b lbl_8035BCF0 -lbl_8035BCC0: -/* 8035BCC0 2C 05 00 13 */ cmpwi r5, 0x13 -/* 8035BCC4 38 00 00 00 */ li r0, 0 -/* 8035BCC8 50 0A 0F BC */ rlwimi r10, r0, 1, 0x1e, 0x1e -/* 8035BCCC 51 8A 17 7A */ rlwimi r10, r12, 2, 0x1d, 0x1d -/* 8035BCD0 40 82 00 10 */ bne lbl_8035BCE0 -/* 8035BCD4 38 00 00 02 */ li r0, 2 -/* 8035BCD8 50 0A 26 76 */ rlwimi r10, r0, 4, 0x19, 0x1b -/* 8035BCDC 48 00 00 0C */ b lbl_8035BCE8 -lbl_8035BCE0: -/* 8035BCE0 38 00 00 03 */ li r0, 3 -/* 8035BCE4 50 0A 26 76 */ rlwimi r10, r0, 4, 0x19, 0x1b -lbl_8035BCE8: -/* 8035BCE8 38 00 00 02 */ li r0, 2 -/* 8035BCEC 50 0A 3D 30 */ rlwimi r10, r0, 7, 0x14, 0x18 -lbl_8035BCF0: -/* 8035BCF0 39 20 00 10 */ li r9, 0x10 -/* 8035BCF4 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035BCF8 99 25 80 00 */ stb r9, 0x8000(r5) /* 0xCC008000@l */ -/* 8035BCFC 38 83 10 40 */ addi r4, r3, 0x1040 -/* 8035BD00 38 08 FF C0 */ addi r0, r8, -64 -/* 8035BD04 90 85 80 00 */ stw r4, -0x8000(r5) -/* 8035BD08 39 00 00 00 */ li r8, 0 -/* 8035BD0C 50 08 06 BE */ rlwimi r8, r0, 0, 0x1a, 0x1f -/* 8035BD10 91 45 80 00 */ stw r10, -0x8000(r5) -/* 8035BD14 38 03 10 50 */ addi r0, r3, 0x1050 -/* 8035BD18 28 03 00 06 */ cmplwi r3, 6 -/* 8035BD1C 99 25 80 00 */ stb r9, -0x8000(r5) -/* 8035BD20 50 E8 45 EE */ rlwimi r8, r7, 8, 0x17, 0x17 -/* 8035BD24 90 05 80 00 */ stw r0, -0x8000(r5) -/* 8035BD28 91 05 80 00 */ stw r8, -0x8000(r5) -/* 8035BD2C 41 81 00 A8 */ bgt lbl_8035BDD4 -/* 8035BD30 3C 80 80 3D */ lis r4, lit_740@ha /* 0x803D23D8@ha */ -/* 8035BD34 38 84 23 D8 */ addi r4, r4, lit_740@l /* 0x803D23D8@l */ -/* 8035BD38 54 60 10 3A */ slwi r0, r3, 2 -/* 8035BD3C 7C 04 00 2E */ lwzx r0, r4, r0 -/* 8035BD40 7C 09 03 A6 */ mtctr r0 -/* 8035BD44 4E 80 04 20 */ bctr -/* 8035BD48 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BD4C 80 04 00 80 */ lwz r0, 0x80(r4) -/* 8035BD50 50 C0 35 32 */ rlwimi r0, r6, 6, 0x14, 0x19 -/* 8035BD54 90 04 00 80 */ stw r0, 0x80(r4) -/* 8035BD58 48 00 00 8C */ b lbl_8035BDE4 -/* 8035BD5C 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BD60 80 04 00 80 */ lwz r0, 0x80(r4) -/* 8035BD64 50 C0 63 A6 */ rlwimi r0, r6, 0xc, 0xe, 0x13 -/* 8035BD68 90 04 00 80 */ stw r0, 0x80(r4) -/* 8035BD6C 48 00 00 78 */ b lbl_8035BDE4 -/* 8035BD70 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BD74 80 04 00 80 */ lwz r0, 0x80(r4) -/* 8035BD78 50 C0 92 1A */ rlwimi r0, r6, 0x12, 8, 0xd -/* 8035BD7C 90 04 00 80 */ stw r0, 0x80(r4) -/* 8035BD80 48 00 00 64 */ b lbl_8035BDE4 -/* 8035BD84 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BD88 80 04 00 80 */ lwz r0, 0x80(r4) -/* 8035BD8C 50 C0 C0 8E */ rlwimi r0, r6, 0x18, 2, 7 -/* 8035BD90 90 04 00 80 */ stw r0, 0x80(r4) -/* 8035BD94 48 00 00 50 */ b lbl_8035BDE4 -/* 8035BD98 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BD9C 80 04 00 84 */ lwz r0, 0x84(r4) -/* 8035BDA0 50 C0 06 BE */ rlwimi r0, r6, 0, 0x1a, 0x1f -/* 8035BDA4 90 04 00 84 */ stw r0, 0x84(r4) -/* 8035BDA8 48 00 00 3C */ b lbl_8035BDE4 -/* 8035BDAC 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BDB0 80 04 00 84 */ lwz r0, 0x84(r4) -/* 8035BDB4 50 C0 35 32 */ rlwimi r0, r6, 6, 0x14, 0x19 -/* 8035BDB8 90 04 00 84 */ stw r0, 0x84(r4) -/* 8035BDBC 48 00 00 28 */ b lbl_8035BDE4 -/* 8035BDC0 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BDC4 80 04 00 84 */ lwz r0, 0x84(r4) -/* 8035BDC8 50 C0 63 A6 */ rlwimi r0, r6, 0xc, 0xe, 0x13 -/* 8035BDCC 90 04 00 84 */ stw r0, 0x84(r4) -/* 8035BDD0 48 00 00 14 */ b lbl_8035BDE4 -lbl_8035BDD4: -/* 8035BDD4 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035BDD8 80 04 00 84 */ lwz r0, 0x84(r4) -/* 8035BDDC 50 C0 92 1A */ rlwimi r0, r6, 0x12, 8, 0xd -/* 8035BDE0 90 04 00 84 */ stw r0, 0x84(r4) -lbl_8035BDE4: -/* 8035BDE4 38 63 00 01 */ addi r3, r3, 1 -/* 8035BDE8 48 00 48 11 */ bl __GXSetMatrixIndex -/* 8035BDEC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8035BDF0 38 21 00 08 */ addi r1, r1, 8 -/* 8035BDF4 7C 08 03 A6 */ mtlr r0 -/* 8035BDF8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXSetVtxAttrFmt.s b/asm/dolphin/gx/GXAttr/GXSetVtxAttrFmt.s deleted file mode 100644 index f5140748d4e..00000000000 --- a/asm/dolphin/gx/GXAttr/GXSetVtxAttrFmt.s +++ /dev/null @@ -1,154 +0,0 @@ -lbl_8035B5C4: -/* 8035B5C4 38 04 FF F7 */ addi r0, r4, -9 -/* 8035B5C8 81 02 CB 80 */ lwz r8, __GXData(r2) -/* 8035B5CC 54 64 10 3A */ slwi r4, r3, 2 -/* 8035B5D0 7D 08 22 14 */ add r8, r8, r4 -/* 8035B5D4 28 00 00 10 */ cmplwi r0, 0x10 -/* 8035B5D8 38 88 00 1C */ addi r4, r8, 0x1c -/* 8035B5DC 39 28 00 3C */ addi r9, r8, 0x3c -/* 8035B5E0 39 48 00 5C */ addi r10, r8, 0x5c -/* 8035B5E4 41 81 02 0C */ bgt lbl_8035B7F0 -/* 8035B5E8 3D 00 80 3D */ lis r8, lit_476@ha /* 0x803D2350@ha */ -/* 8035B5EC 39 08 23 50 */ addi r8, r8, lit_476@l /* 0x803D2350@l */ -/* 8035B5F0 54 00 10 3A */ slwi r0, r0, 2 -/* 8035B5F4 7C 08 00 2E */ lwzx r0, r8, r0 -/* 8035B5F8 7C 09 03 A6 */ mtctr r0 -/* 8035B5FC 4E 80 04 20 */ bctr -/* 8035B600 81 04 00 00 */ lwz r8, 0(r4) -/* 8035B604 50 A8 07 FE */ rlwimi r8, r5, 0, 0x1f, 0x1f -/* 8035B608 91 04 00 00 */ stw r8, 0(r4) -/* 8035B60C 80 A4 00 00 */ lwz r5, 0(r4) -/* 8035B610 50 C5 0F 3C */ rlwimi r5, r6, 1, 0x1c, 0x1e -/* 8035B614 90 A4 00 00 */ stw r5, 0(r4) -/* 8035B618 80 A4 00 00 */ lwz r5, 0(r4) -/* 8035B61C 50 E5 25 F6 */ rlwimi r5, r7, 4, 0x17, 0x1b -/* 8035B620 90 A4 00 00 */ stw r5, 0(r4) -/* 8035B624 48 00 01 CC */ b lbl_8035B7F0 -/* 8035B628 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B62C 50 C0 54 EA */ rlwimi r0, r6, 0xa, 0x13, 0x15 -/* 8035B630 2C 05 00 02 */ cmpwi r5, 2 -/* 8035B634 90 04 00 00 */ stw r0, 0(r4) -/* 8035B638 40 82 00 24 */ bne lbl_8035B65C -/* 8035B63C 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B640 38 A0 00 01 */ li r5, 1 -/* 8035B644 50 A0 4D AC */ rlwimi r0, r5, 9, 0x16, 0x16 -/* 8035B648 90 04 00 00 */ stw r0, 0(r4) -/* 8035B64C 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B650 50 A0 F8 00 */ rlwimi r0, r5, 0x1f, 0, 0 -/* 8035B654 90 04 00 00 */ stw r0, 0(r4) -/* 8035B658 48 00 01 98 */ b lbl_8035B7F0 -lbl_8035B65C: -/* 8035B65C 80 C4 00 00 */ lwz r6, 0(r4) -/* 8035B660 50 A6 4D AC */ rlwimi r6, r5, 9, 0x16, 0x16 -/* 8035B664 38 00 00 00 */ li r0, 0 -/* 8035B668 90 C4 00 00 */ stw r6, 0(r4) -/* 8035B66C 80 A4 00 00 */ lwz r5, 0(r4) -/* 8035B670 50 05 F8 00 */ rlwimi r5, r0, 0x1f, 0, 0 -/* 8035B674 90 A4 00 00 */ stw r5, 0(r4) -/* 8035B678 48 00 01 78 */ b lbl_8035B7F0 -/* 8035B67C 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B680 50 A0 6C A4 */ rlwimi r0, r5, 0xd, 0x12, 0x12 -/* 8035B684 90 04 00 00 */ stw r0, 0(r4) -/* 8035B688 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B68C 50 C0 73 E2 */ rlwimi r0, r6, 0xe, 0xf, 0x11 -/* 8035B690 90 04 00 00 */ stw r0, 0(r4) -/* 8035B694 48 00 01 5C */ b lbl_8035B7F0 -/* 8035B698 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B69C 50 A0 8B 9C */ rlwimi r0, r5, 0x11, 0xe, 0xe -/* 8035B6A0 90 04 00 00 */ stw r0, 0(r4) -/* 8035B6A4 80 04 00 00 */ lwz r0, 0(r4) -/* 8035B6A8 50 C0 92 DA */ rlwimi r0, r6, 0x12, 0xb, 0xd -/* 8035B6AC 90 04 00 00 */ stw r0, 0(r4) -/* 8035B6B0 48 00 01 40 */ b lbl_8035B7F0 -/* 8035B6B4 81 04 00 00 */ lwz r8, 0(r4) -/* 8035B6B8 50 A8 AA 94 */ rlwimi r8, r5, 0x15, 0xa, 0xa -/* 8035B6BC 91 04 00 00 */ stw r8, 0(r4) -/* 8035B6C0 80 A4 00 00 */ lwz r5, 0(r4) -/* 8035B6C4 50 C5 B1 D2 */ rlwimi r5, r6, 0x16, 7, 9 -/* 8035B6C8 90 A4 00 00 */ stw r5, 0(r4) -/* 8035B6CC 80 A4 00 00 */ lwz r5, 0(r4) -/* 8035B6D0 50 E5 C8 8C */ rlwimi r5, r7, 0x19, 2, 6 -/* 8035B6D4 90 A4 00 00 */ stw r5, 0(r4) -/* 8035B6D8 48 00 01 18 */ b lbl_8035B7F0 -/* 8035B6DC 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B6E0 50 A4 07 FE */ rlwimi r4, r5, 0, 0x1f, 0x1f -/* 8035B6E4 90 89 00 00 */ stw r4, 0(r9) -/* 8035B6E8 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B6EC 50 C4 0F 3C */ rlwimi r4, r6, 1, 0x1c, 0x1e -/* 8035B6F0 90 89 00 00 */ stw r4, 0(r9) -/* 8035B6F4 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B6F8 50 E4 25 F6 */ rlwimi r4, r7, 4, 0x17, 0x1b -/* 8035B6FC 90 89 00 00 */ stw r4, 0(r9) -/* 8035B700 48 00 00 F0 */ b lbl_8035B7F0 -/* 8035B704 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B708 50 A4 4D AC */ rlwimi r4, r5, 9, 0x16, 0x16 -/* 8035B70C 90 89 00 00 */ stw r4, 0(r9) -/* 8035B710 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B714 50 C4 54 EA */ rlwimi r4, r6, 0xa, 0x13, 0x15 -/* 8035B718 90 89 00 00 */ stw r4, 0(r9) -/* 8035B71C 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B720 50 E4 6B A4 */ rlwimi r4, r7, 0xd, 0xe, 0x12 -/* 8035B724 90 89 00 00 */ stw r4, 0(r9) -/* 8035B728 48 00 00 C8 */ b lbl_8035B7F0 -/* 8035B72C 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B730 50 A4 93 5A */ rlwimi r4, r5, 0x12, 0xd, 0xd -/* 8035B734 90 89 00 00 */ stw r4, 0(r9) -/* 8035B738 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B73C 50 C4 9A 98 */ rlwimi r4, r6, 0x13, 0xa, 0xc -/* 8035B740 90 89 00 00 */ stw r4, 0(r9) -/* 8035B744 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B748 50 E4 B1 52 */ rlwimi r4, r7, 0x16, 5, 9 -/* 8035B74C 90 89 00 00 */ stw r4, 0(r9) -/* 8035B750 48 00 00 A0 */ b lbl_8035B7F0 -/* 8035B754 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B758 50 A4 D9 08 */ rlwimi r4, r5, 0x1b, 4, 4 -/* 8035B75C 90 89 00 00 */ stw r4, 0(r9) -/* 8035B760 80 89 00 00 */ lwz r4, 0(r9) -/* 8035B764 50 C4 E0 46 */ rlwimi r4, r6, 0x1c, 1, 3 -/* 8035B768 90 89 00 00 */ stw r4, 0(r9) -/* 8035B76C 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B770 50 E4 06 FE */ rlwimi r4, r7, 0, 0x1b, 0x1f -/* 8035B774 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B778 48 00 00 78 */ b lbl_8035B7F0 -/* 8035B77C 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B780 50 A4 2E B4 */ rlwimi r4, r5, 5, 0x1a, 0x1a -/* 8035B784 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B788 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B78C 50 C4 35 F2 */ rlwimi r4, r6, 6, 0x17, 0x19 -/* 8035B790 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B794 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B798 50 E4 4C AC */ rlwimi r4, r7, 9, 0x12, 0x16 -/* 8035B79C 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B7A0 48 00 00 50 */ b lbl_8035B7F0 -/* 8035B7A4 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B7A8 50 A4 74 62 */ rlwimi r4, r5, 0xe, 0x11, 0x11 -/* 8035B7AC 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B7B0 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B7B4 50 C4 7B A0 */ rlwimi r4, r6, 0xf, 0xe, 0x10 -/* 8035B7B8 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B7BC 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B7C0 50 E4 92 5A */ rlwimi r4, r7, 0x12, 9, 0xd -/* 8035B7C4 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B7C8 48 00 00 28 */ b lbl_8035B7F0 -/* 8035B7CC 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B7D0 50 A4 BA 10 */ rlwimi r4, r5, 0x17, 8, 8 -/* 8035B7D4 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B7D8 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B7DC 50 C4 C1 4E */ rlwimi r4, r6, 0x18, 5, 7 -/* 8035B7E0 90 8A 00 00 */ stw r4, 0(r10) -/* 8035B7E4 80 8A 00 00 */ lwz r4, 0(r10) -/* 8035B7E8 50 E4 D8 08 */ rlwimi r4, r7, 0x1b, 0, 4 -/* 8035B7EC 90 8A 00 00 */ stw r4, 0(r10) -lbl_8035B7F0: -/* 8035B7F0 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035B7F4 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035B7F8 38 60 00 01 */ li r3, 1 -/* 8035B7FC 80 85 05 AC */ lwz r4, 0x5ac(r5) -/* 8035B800 7C 60 00 30 */ slw r0, r3, r0 -/* 8035B804 54 00 06 3E */ clrlwi r0, r0, 0x18 -/* 8035B808 60 83 00 10 */ ori r3, r4, 0x10 -/* 8035B80C 90 65 05 AC */ stw r3, 0x5ac(r5) -/* 8035B810 88 65 05 AB */ lbz r3, 0x5ab(r5) -/* 8035B814 7C 60 03 78 */ or r0, r3, r0 -/* 8035B818 98 05 05 AB */ stb r0, 0x5ab(r5) -/* 8035B81C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXSetVtxAttrFmtv.s b/asm/dolphin/gx/GXAttr/GXSetVtxAttrFmtv.s deleted file mode 100644 index 8074ffc8d02..00000000000 --- a/asm/dolphin/gx/GXAttr/GXSetVtxAttrFmtv.s +++ /dev/null @@ -1,165 +0,0 @@ -lbl_8035B820: -/* 8035B820 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035B824 54 60 10 3A */ slwi r0, r3, 2 -/* 8035B828 3C A0 80 3D */ lis r5, lit_503@ha /* 0x803D2394@ha */ -/* 8035B82C 7C C6 02 14 */ add r6, r6, r0 -/* 8035B830 38 E6 00 1C */ addi r7, r6, 0x1c -/* 8035B834 39 06 00 3C */ addi r8, r6, 0x3c -/* 8035B838 39 26 00 5C */ addi r9, r6, 0x5c -/* 8035B83C 38 A5 23 94 */ addi r5, r5, lit_503@l /* 0x803D2394@l */ -/* 8035B840 48 00 02 24 */ b lbl_8035BA64 -lbl_8035B844: -/* 8035B844 81 44 00 00 */ lwz r10, 0(r4) -/* 8035B848 88 C4 00 0C */ lbz r6, 0xc(r4) -/* 8035B84C 39 4A FF F7 */ addi r10, r10, -9 -/* 8035B850 80 04 00 08 */ lwz r0, 8(r4) -/* 8035B854 28 0A 00 10 */ cmplwi r10, 0x10 -/* 8035B858 81 64 00 04 */ lwz r11, 4(r4) -/* 8035B85C 41 81 02 04 */ bgt lbl_8035BA60 -/* 8035B860 55 4A 10 3A */ slwi r10, r10, 2 -/* 8035B864 7D 45 50 2E */ lwzx r10, r5, r10 -/* 8035B868 7D 49 03 A6 */ mtctr r10 -/* 8035B86C 4E 80 04 20 */ bctr -/* 8035B870 81 47 00 00 */ lwz r10, 0(r7) -/* 8035B874 51 6A 07 FE */ rlwimi r10, r11, 0, 0x1f, 0x1f -/* 8035B878 91 47 00 00 */ stw r10, 0(r7) -/* 8035B87C 81 47 00 00 */ lwz r10, 0(r7) -/* 8035B880 50 0A 0F 3C */ rlwimi r10, r0, 1, 0x1c, 0x1e -/* 8035B884 91 47 00 00 */ stw r10, 0(r7) -/* 8035B888 80 07 00 00 */ lwz r0, 0(r7) -/* 8035B88C 50 C0 25 F6 */ rlwimi r0, r6, 4, 0x17, 0x1b -/* 8035B890 90 07 00 00 */ stw r0, 0(r7) -/* 8035B894 48 00 01 CC */ b lbl_8035BA60 -/* 8035B898 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B89C 50 06 54 EA */ rlwimi r6, r0, 0xa, 0x13, 0x15 -/* 8035B8A0 2C 0B 00 02 */ cmpwi r11, 2 -/* 8035B8A4 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B8A8 40 82 00 24 */ bne lbl_8035B8CC -/* 8035B8AC 80 07 00 00 */ lwz r0, 0(r7) -/* 8035B8B0 38 C0 00 01 */ li r6, 1 -/* 8035B8B4 50 C0 4D AC */ rlwimi r0, r6, 9, 0x16, 0x16 -/* 8035B8B8 90 07 00 00 */ stw r0, 0(r7) -/* 8035B8BC 80 07 00 00 */ lwz r0, 0(r7) -/* 8035B8C0 50 C0 F8 00 */ rlwimi r0, r6, 0x1f, 0, 0 -/* 8035B8C4 90 07 00 00 */ stw r0, 0(r7) -/* 8035B8C8 48 00 01 98 */ b lbl_8035BA60 -lbl_8035B8CC: -/* 8035B8CC 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B8D0 51 66 4D AC */ rlwimi r6, r11, 9, 0x16, 0x16 -/* 8035B8D4 38 00 00 00 */ li r0, 0 -/* 8035B8D8 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B8DC 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B8E0 50 06 F8 00 */ rlwimi r6, r0, 0x1f, 0, 0 -/* 8035B8E4 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B8E8 48 00 01 78 */ b lbl_8035BA60 -/* 8035B8EC 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B8F0 51 66 6C A4 */ rlwimi r6, r11, 0xd, 0x12, 0x12 -/* 8035B8F4 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B8F8 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B8FC 50 06 73 E2 */ rlwimi r6, r0, 0xe, 0xf, 0x11 -/* 8035B900 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B904 48 00 01 5C */ b lbl_8035BA60 -/* 8035B908 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B90C 51 66 8B 9C */ rlwimi r6, r11, 0x11, 0xe, 0xe -/* 8035B910 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B914 80 C7 00 00 */ lwz r6, 0(r7) -/* 8035B918 50 06 92 DA */ rlwimi r6, r0, 0x12, 0xb, 0xd -/* 8035B91C 90 C7 00 00 */ stw r6, 0(r7) -/* 8035B920 48 00 01 40 */ b lbl_8035BA60 -/* 8035B924 81 47 00 00 */ lwz r10, 0(r7) -/* 8035B928 51 6A AA 94 */ rlwimi r10, r11, 0x15, 0xa, 0xa -/* 8035B92C 91 47 00 00 */ stw r10, 0(r7) -/* 8035B930 81 47 00 00 */ lwz r10, 0(r7) -/* 8035B934 50 0A B1 D2 */ rlwimi r10, r0, 0x16, 7, 9 -/* 8035B938 91 47 00 00 */ stw r10, 0(r7) -/* 8035B93C 80 07 00 00 */ lwz r0, 0(r7) -/* 8035B940 50 C0 C8 8C */ rlwimi r0, r6, 0x19, 2, 6 -/* 8035B944 90 07 00 00 */ stw r0, 0(r7) -/* 8035B948 48 00 01 18 */ b lbl_8035BA60 -/* 8035B94C 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B950 51 6A 07 FE */ rlwimi r10, r11, 0, 0x1f, 0x1f -/* 8035B954 91 48 00 00 */ stw r10, 0(r8) -/* 8035B958 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B95C 50 0A 0F 3C */ rlwimi r10, r0, 1, 0x1c, 0x1e -/* 8035B960 91 48 00 00 */ stw r10, 0(r8) -/* 8035B964 80 08 00 00 */ lwz r0, 0(r8) -/* 8035B968 50 C0 25 F6 */ rlwimi r0, r6, 4, 0x17, 0x1b -/* 8035B96C 90 08 00 00 */ stw r0, 0(r8) -/* 8035B970 48 00 00 F0 */ b lbl_8035BA60 -/* 8035B974 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B978 51 6A 4D AC */ rlwimi r10, r11, 9, 0x16, 0x16 -/* 8035B97C 91 48 00 00 */ stw r10, 0(r8) -/* 8035B980 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B984 50 0A 54 EA */ rlwimi r10, r0, 0xa, 0x13, 0x15 -/* 8035B988 91 48 00 00 */ stw r10, 0(r8) -/* 8035B98C 80 08 00 00 */ lwz r0, 0(r8) -/* 8035B990 50 C0 6B A4 */ rlwimi r0, r6, 0xd, 0xe, 0x12 -/* 8035B994 90 08 00 00 */ stw r0, 0(r8) -/* 8035B998 48 00 00 C8 */ b lbl_8035BA60 -/* 8035B99C 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B9A0 51 6A 93 5A */ rlwimi r10, r11, 0x12, 0xd, 0xd -/* 8035B9A4 91 48 00 00 */ stw r10, 0(r8) -/* 8035B9A8 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B9AC 50 0A 9A 98 */ rlwimi r10, r0, 0x13, 0xa, 0xc -/* 8035B9B0 91 48 00 00 */ stw r10, 0(r8) -/* 8035B9B4 80 08 00 00 */ lwz r0, 0(r8) -/* 8035B9B8 50 C0 B1 52 */ rlwimi r0, r6, 0x16, 5, 9 -/* 8035B9BC 90 08 00 00 */ stw r0, 0(r8) -/* 8035B9C0 48 00 00 A0 */ b lbl_8035BA60 -/* 8035B9C4 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B9C8 51 6A D9 08 */ rlwimi r10, r11, 0x1b, 4, 4 -/* 8035B9CC 91 48 00 00 */ stw r10, 0(r8) -/* 8035B9D0 81 48 00 00 */ lwz r10, 0(r8) -/* 8035B9D4 50 0A E0 46 */ rlwimi r10, r0, 0x1c, 1, 3 -/* 8035B9D8 91 48 00 00 */ stw r10, 0(r8) -/* 8035B9DC 80 09 00 00 */ lwz r0, 0(r9) -/* 8035B9E0 50 C0 06 FE */ rlwimi r0, r6, 0, 0x1b, 0x1f -/* 8035B9E4 90 09 00 00 */ stw r0, 0(r9) -/* 8035B9E8 48 00 00 78 */ b lbl_8035BA60 -/* 8035B9EC 81 49 00 00 */ lwz r10, 0(r9) -/* 8035B9F0 51 6A 2E B4 */ rlwimi r10, r11, 5, 0x1a, 0x1a -/* 8035B9F4 91 49 00 00 */ stw r10, 0(r9) -/* 8035B9F8 81 49 00 00 */ lwz r10, 0(r9) -/* 8035B9FC 50 0A 35 F2 */ rlwimi r10, r0, 6, 0x17, 0x19 -/* 8035BA00 91 49 00 00 */ stw r10, 0(r9) -/* 8035BA04 80 09 00 00 */ lwz r0, 0(r9) -/* 8035BA08 50 C0 4C AC */ rlwimi r0, r6, 9, 0x12, 0x16 -/* 8035BA0C 90 09 00 00 */ stw r0, 0(r9) -/* 8035BA10 48 00 00 50 */ b lbl_8035BA60 -/* 8035BA14 81 49 00 00 */ lwz r10, 0(r9) -/* 8035BA18 51 6A 74 62 */ rlwimi r10, r11, 0xe, 0x11, 0x11 -/* 8035BA1C 91 49 00 00 */ stw r10, 0(r9) -/* 8035BA20 81 49 00 00 */ lwz r10, 0(r9) -/* 8035BA24 50 0A 7B A0 */ rlwimi r10, r0, 0xf, 0xe, 0x10 -/* 8035BA28 91 49 00 00 */ stw r10, 0(r9) -/* 8035BA2C 80 09 00 00 */ lwz r0, 0(r9) -/* 8035BA30 50 C0 92 5A */ rlwimi r0, r6, 0x12, 9, 0xd -/* 8035BA34 90 09 00 00 */ stw r0, 0(r9) -/* 8035BA38 48 00 00 28 */ b lbl_8035BA60 -/* 8035BA3C 81 49 00 00 */ lwz r10, 0(r9) -/* 8035BA40 51 6A BA 10 */ rlwimi r10, r11, 0x17, 8, 8 -/* 8035BA44 91 49 00 00 */ stw r10, 0(r9) -/* 8035BA48 81 49 00 00 */ lwz r10, 0(r9) -/* 8035BA4C 50 0A C1 4E */ rlwimi r10, r0, 0x18, 5, 7 -/* 8035BA50 91 49 00 00 */ stw r10, 0(r9) -/* 8035BA54 80 09 00 00 */ lwz r0, 0(r9) -/* 8035BA58 50 C0 D8 08 */ rlwimi r0, r6, 0x1b, 0, 4 -/* 8035BA5C 90 09 00 00 */ stw r0, 0(r9) -lbl_8035BA60: -/* 8035BA60 38 84 00 10 */ addi r4, r4, 0x10 -lbl_8035BA64: -/* 8035BA64 80 04 00 00 */ lwz r0, 0(r4) -/* 8035BA68 2C 00 00 FF */ cmpwi r0, 0xff -/* 8035BA6C 40 82 FD D8 */ bne lbl_8035B844 -/* 8035BA70 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035BA74 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035BA78 38 60 00 01 */ li r3, 1 -/* 8035BA7C 80 85 05 AC */ lwz r4, 0x5ac(r5) -/* 8035BA80 7C 60 00 30 */ slw r0, r3, r0 -/* 8035BA84 54 00 06 3E */ clrlwi r0, r0, 0x18 -/* 8035BA88 60 83 00 10 */ ori r3, r4, 0x10 -/* 8035BA8C 90 65 05 AC */ stw r3, 0x5ac(r5) -/* 8035BA90 88 65 05 AB */ lbz r3, 0x5ab(r5) -/* 8035BA94 7C 60 03 78 */ or r0, r3, r0 -/* 8035BA98 98 05 05 AB */ stb r0, 0x5ab(r5) -/* 8035BA9C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/GXSetVtxDesc.s b/asm/dolphin/gx/GXAttr/GXSetVtxDesc.s deleted file mode 100644 index 83bef299c47..00000000000 --- a/asm/dolphin/gx/GXAttr/GXSetVtxDesc.s +++ /dev/null @@ -1,162 +0,0 @@ -lbl_8035AEB8: -/* 8035AEB8 28 03 00 19 */ cmplwi r3, 0x19 -/* 8035AEBC 41 81 02 10 */ bgt lbl_8035B0CC -/* 8035AEC0 3C A0 80 3D */ lis r5, lit_176@ha /* 0x803D2280@ha */ -/* 8035AEC4 38 A5 22 80 */ addi r5, r5, lit_176@l /* 0x803D2280@l */ -/* 8035AEC8 54 60 10 3A */ slwi r0, r3, 2 -/* 8035AECC 7C 05 00 2E */ lwzx r0, r5, r0 -/* 8035AED0 7C 09 03 A6 */ mtctr r0 -/* 8035AED4 4E 80 04 20 */ bctr -/* 8035AED8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AEDC 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AEE0 50 80 07 FE */ rlwimi r0, r4, 0, 0x1f, 0x1f -/* 8035AEE4 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AEE8 48 00 01 E4 */ b lbl_8035B0CC -/* 8035AEEC 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AEF0 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AEF4 50 80 0F BC */ rlwimi r0, r4, 1, 0x1e, 0x1e -/* 8035AEF8 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AEFC 48 00 01 D0 */ b lbl_8035B0CC -/* 8035AF00 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF04 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF08 50 80 17 7A */ rlwimi r0, r4, 2, 0x1d, 0x1d -/* 8035AF0C 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF10 48 00 01 BC */ b lbl_8035B0CC -/* 8035AF14 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF18 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF1C 50 80 1F 38 */ rlwimi r0, r4, 3, 0x1c, 0x1c -/* 8035AF20 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF24 48 00 01 A8 */ b lbl_8035B0CC -/* 8035AF28 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF2C 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF30 50 80 26 F6 */ rlwimi r0, r4, 4, 0x1b, 0x1b -/* 8035AF34 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF38 48 00 01 94 */ b lbl_8035B0CC -/* 8035AF3C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF40 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF44 50 80 2E B4 */ rlwimi r0, r4, 5, 0x1a, 0x1a -/* 8035AF48 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF4C 48 00 01 80 */ b lbl_8035B0CC -/* 8035AF50 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF54 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF58 50 80 36 72 */ rlwimi r0, r4, 6, 0x19, 0x19 -/* 8035AF5C 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF60 48 00 01 6C */ b lbl_8035B0CC -/* 8035AF64 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF68 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF6C 50 80 3E 30 */ rlwimi r0, r4, 7, 0x18, 0x18 -/* 8035AF70 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF74 48 00 01 58 */ b lbl_8035B0CC -/* 8035AF78 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF7C 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF80 50 80 45 EE */ rlwimi r0, r4, 8, 0x17, 0x17 -/* 8035AF84 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF88 48 00 01 44 */ b lbl_8035B0CC -/* 8035AF8C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AF90 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035AF94 50 80 4D 6C */ rlwimi r0, r4, 9, 0x15, 0x16 -/* 8035AF98 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035AF9C 48 00 01 30 */ b lbl_8035B0CC -/* 8035AFA0 2C 04 00 00 */ cmpwi r4, 0 -/* 8035AFA4 41 82 00 20 */ beq lbl_8035AFC4 -/* 8035AFA8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AFAC 38 A0 00 01 */ li r5, 1 -/* 8035AFB0 38 00 00 00 */ li r0, 0 -/* 8035AFB4 98 A3 04 D4 */ stb r5, 0x4d4(r3) -/* 8035AFB8 98 03 04 D5 */ stb r0, 0x4d5(r3) -/* 8035AFBC 90 83 04 D0 */ stw r4, 0x4d0(r3) -/* 8035AFC0 48 00 01 0C */ b lbl_8035B0CC -lbl_8035AFC4: -/* 8035AFC4 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AFC8 38 00 00 00 */ li r0, 0 -/* 8035AFCC 98 03 04 D4 */ stb r0, 0x4d4(r3) -/* 8035AFD0 48 00 00 FC */ b lbl_8035B0CC -/* 8035AFD4 2C 04 00 00 */ cmpwi r4, 0 -/* 8035AFD8 41 82 00 20 */ beq lbl_8035AFF8 -/* 8035AFDC 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AFE0 38 A0 00 01 */ li r5, 1 -/* 8035AFE4 38 00 00 00 */ li r0, 0 -/* 8035AFE8 98 A3 04 D5 */ stb r5, 0x4d5(r3) -/* 8035AFEC 98 03 04 D4 */ stb r0, 0x4d4(r3) -/* 8035AFF0 90 83 04 D0 */ stw r4, 0x4d0(r3) -/* 8035AFF4 48 00 00 D8 */ b lbl_8035B0CC -lbl_8035AFF8: -/* 8035AFF8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035AFFC 38 00 00 00 */ li r0, 0 -/* 8035B000 98 03 04 D5 */ stb r0, 0x4d5(r3) -/* 8035B004 48 00 00 C8 */ b lbl_8035B0CC -/* 8035B008 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B00C 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035B010 50 80 6C 64 */ rlwimi r0, r4, 0xd, 0x11, 0x12 -/* 8035B014 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035B018 48 00 00 B4 */ b lbl_8035B0CC -/* 8035B01C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B020 80 03 00 14 */ lwz r0, 0x14(r3) -/* 8035B024 50 80 7B E0 */ rlwimi r0, r4, 0xf, 0xf, 0x10 -/* 8035B028 90 03 00 14 */ stw r0, 0x14(r3) -/* 8035B02C 48 00 00 A0 */ b lbl_8035B0CC -/* 8035B030 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B034 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B038 50 80 07 BE */ rlwimi r0, r4, 0, 0x1e, 0x1f -/* 8035B03C 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B040 48 00 00 8C */ b lbl_8035B0CC -/* 8035B044 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B048 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B04C 50 80 17 3A */ rlwimi r0, r4, 2, 0x1c, 0x1d -/* 8035B050 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B054 48 00 00 78 */ b lbl_8035B0CC -/* 8035B058 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B05C 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B060 50 80 26 B6 */ rlwimi r0, r4, 4, 0x1a, 0x1b -/* 8035B064 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B068 48 00 00 64 */ b lbl_8035B0CC -/* 8035B06C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B070 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B074 50 80 36 32 */ rlwimi r0, r4, 6, 0x18, 0x19 -/* 8035B078 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B07C 48 00 00 50 */ b lbl_8035B0CC -/* 8035B080 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B084 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B088 50 80 45 AE */ rlwimi r0, r4, 8, 0x16, 0x17 -/* 8035B08C 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B090 48 00 00 3C */ b lbl_8035B0CC -/* 8035B094 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B098 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B09C 50 80 55 2A */ rlwimi r0, r4, 0xa, 0x14, 0x15 -/* 8035B0A0 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B0A4 48 00 00 28 */ b lbl_8035B0CC -/* 8035B0A8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B0AC 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B0B0 50 80 64 A6 */ rlwimi r0, r4, 0xc, 0x12, 0x13 -/* 8035B0B4 90 03 00 18 */ stw r0, 0x18(r3) -/* 8035B0B8 48 00 00 14 */ b lbl_8035B0CC -/* 8035B0BC 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B0C0 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8035B0C4 50 80 74 22 */ rlwimi r0, r4, 0xe, 0x10, 0x11 -/* 8035B0C8 90 03 00 18 */ stw r0, 0x18(r3) -lbl_8035B0CC: -/* 8035B0CC 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035B0D0 88 04 04 D4 */ lbz r0, 0x4d4(r4) -/* 8035B0D4 28 00 00 00 */ cmplwi r0, 0 -/* 8035B0D8 40 82 00 10 */ bne lbl_8035B0E8 -/* 8035B0DC 88 04 04 D5 */ lbz r0, 0x4d5(r4) -/* 8035B0E0 28 00 00 00 */ cmplwi r0, 0 -/* 8035B0E4 41 82 00 1C */ beq lbl_8035B100 -lbl_8035B0E8: -/* 8035B0E8 80 04 04 D0 */ lwz r0, 0x4d0(r4) -/* 8035B0EC 80 84 00 14 */ lwz r4, 0x14(r4) -/* 8035B0F0 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B0F4 50 04 5C E8 */ rlwimi r4, r0, 0xb, 0x13, 0x14 -/* 8035B0F8 90 83 00 14 */ stw r4, 0x14(r3) -/* 8035B0FC 48 00 00 14 */ b lbl_8035B110 -lbl_8035B100: -/* 8035B100 80 64 00 14 */ lwz r3, 0x14(r4) -/* 8035B104 38 00 00 00 */ li r0, 0 -/* 8035B108 50 03 5C E8 */ rlwimi r3, r0, 0xb, 0x13, 0x14 -/* 8035B10C 90 64 00 14 */ stw r3, 0x14(r4) -lbl_8035B110: -/* 8035B110 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B114 80 03 05 AC */ lwz r0, 0x5ac(r3) -/* 8035B118 60 00 00 08 */ ori r0, r0, 8 -/* 8035B11C 90 03 05 AC */ stw r0, 0x5ac(r3) -/* 8035B120 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/__GXCalculateVLim.s b/asm/dolphin/gx/GXAttr/__GXCalculateVLim.s deleted file mode 100644 index c31632a79fb..00000000000 --- a/asm/dolphin/gx/GXAttr/__GXCalculateVLim.s +++ /dev/null @@ -1,76 +0,0 @@ -lbl_8035B468: -/* 8035B468 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035B46C A0 03 00 04 */ lhz r0, 4(r3) -/* 8035B470 28 00 00 00 */ cmplwi r0, 0 -/* 8035B474 4D 82 00 20 */ beqlr -/* 8035B478 81 23 00 14 */ lwz r9, 0x14(r3) -/* 8035B47C 38 AD 85 08 */ la r5, tbl3(r13) /* 80450A88-_SDA_BASE_ */ -/* 8035B480 81 03 00 1C */ lwz r8, 0x1c(r3) -/* 8035B484 55 20 07 FE */ clrlwi r0, r9, 0x1f -/* 8035B488 80 83 00 18 */ lwz r4, 0x18(r3) -/* 8035B48C 55 26 FF FE */ rlwinm r6, r9, 0x1f, 0x1f, 0x1f -/* 8035B490 7C 00 32 14 */ add r0, r0, r6 -/* 8035B494 55 26 F7 FE */ rlwinm r6, r9, 0x1e, 0x1f, 0x1f -/* 8035B498 7C 00 32 14 */ add r0, r0, r6 -/* 8035B49C 55 27 EF FE */ rlwinm r7, r9, 0x1d, 0x1f, 0x1f -/* 8035B4A0 55 26 BF BE */ rlwinm r6, r9, 0x17, 0x1e, 0x1f -/* 8035B4A4 7C A5 30 AE */ lbzx r5, r5, r6 -/* 8035B4A8 55 08 BF FE */ rlwinm r8, r8, 0x17, 0x1f, 0x1f -/* 8035B4AC 7C 00 3A 14 */ add r0, r0, r7 -/* 8035B4B0 55 26 E7 FE */ rlwinm r6, r9, 0x1c, 0x1f, 0x1f -/* 8035B4B4 7C 00 32 14 */ add r0, r0, r6 -/* 8035B4B8 55 26 DF FE */ rlwinm r6, r9, 0x1b, 0x1f, 0x1f -/* 8035B4BC 7C 00 32 14 */ add r0, r0, r6 -/* 8035B4C0 55 26 D7 FE */ rlwinm r6, r9, 0x1a, 0x1f, 0x1f -/* 8035B4C4 7C 00 32 14 */ add r0, r0, r6 -/* 8035B4C8 55 26 CF FE */ rlwinm r6, r9, 0x19, 0x1f, 0x1f -/* 8035B4CC 7C 00 32 14 */ add r0, r0, r6 -/* 8035B4D0 55 26 C7 FE */ rlwinm r6, r9, 0x18, 0x1f, 0x1f -/* 8035B4D4 7C 00 32 14 */ add r0, r0, r6 -/* 8035B4D8 2C 08 00 01 */ cmpwi r8, 1 -/* 8035B4DC 7C 00 2A 14 */ add r0, r0, r5 -/* 8035B4E0 40 82 00 0C */ bne lbl_8035B4EC -/* 8035B4E4 39 00 00 03 */ li r8, 3 -/* 8035B4E8 48 00 00 08 */ b lbl_8035B4F0 -lbl_8035B4EC: -/* 8035B4EC 39 00 00 01 */ li r8, 1 -lbl_8035B4F0: -/* 8035B4F0 55 26 AF BE */ rlwinm r6, r9, 0x15, 0x1e, 0x1f -/* 8035B4F4 38 AD 85 08 */ la r5, tbl3(r13) /* 80450A88-_SDA_BASE_ */ -/* 8035B4F8 7C C5 30 AE */ lbzx r6, r5, r6 -/* 8035B4FC 55 25 9F BE */ rlwinm r5, r9, 0x13, 0x1e, 0x1f -/* 8035B500 38 ED 85 00 */ la r7, tbl1(r13) /* 80450A80-_SDA_BASE_ */ -/* 8035B504 7D 06 41 D6 */ mullw r8, r6, r8 -/* 8035B508 7C C7 28 AE */ lbzx r6, r7, r5 -/* 8035B50C 7C 00 42 14 */ add r0, r0, r8 -/* 8035B510 55 25 8F BE */ rlwinm r5, r9, 0x11, 0x1e, 0x1f -/* 8035B514 7D 27 28 AE */ lbzx r9, r7, r5 -/* 8035B518 7C 00 32 14 */ add r0, r0, r6 -/* 8035B51C 54 86 07 BE */ clrlwi r6, r4, 0x1e -/* 8035B520 39 0D 85 04 */ la r8, tbl2(r13) /* 80450A84-_SDA_BASE_ */ -/* 8035B524 54 85 F7 BE */ rlwinm r5, r4, 0x1e, 0x1e, 0x1f -/* 8035B528 7C E8 30 AE */ lbzx r7, r8, r6 -/* 8035B52C 7C 00 4A 14 */ add r0, r0, r9 -/* 8035B530 7C C8 28 AE */ lbzx r6, r8, r5 -/* 8035B534 7C 00 3A 14 */ add r0, r0, r7 -/* 8035B538 54 85 E7 BE */ rlwinm r5, r4, 0x1c, 0x1e, 0x1f -/* 8035B53C 7C E8 28 AE */ lbzx r7, r8, r5 -/* 8035B540 7C 00 32 14 */ add r0, r0, r6 -/* 8035B544 54 85 D7 BE */ rlwinm r5, r4, 0x1a, 0x1e, 0x1f -/* 8035B548 7C C8 28 AE */ lbzx r6, r8, r5 -/* 8035B54C 7C 00 3A 14 */ add r0, r0, r7 -/* 8035B550 54 85 C7 BE */ rlwinm r5, r4, 0x18, 0x1e, 0x1f -/* 8035B554 7C E8 28 AE */ lbzx r7, r8, r5 -/* 8035B558 7C 00 32 14 */ add r0, r0, r6 -/* 8035B55C 54 85 B7 BE */ rlwinm r5, r4, 0x16, 0x1e, 0x1f -/* 8035B560 7C C8 28 AE */ lbzx r6, r8, r5 -/* 8035B564 54 85 A7 BE */ rlwinm r5, r4, 0x14, 0x1e, 0x1f -/* 8035B568 7C 00 3A 14 */ add r0, r0, r7 -/* 8035B56C 7C A8 28 AE */ lbzx r5, r8, r5 -/* 8035B570 54 84 97 BE */ rlwinm r4, r4, 0x12, 0x1e, 0x1f -/* 8035B574 7C 00 32 14 */ add r0, r0, r6 -/* 8035B578 7C 88 20 AE */ lbzx r4, r8, r4 -/* 8035B57C 7C 00 2A 14 */ add r0, r0, r5 -/* 8035B580 7C 00 22 14 */ add r0, r0, r4 -/* 8035B584 B0 03 00 06 */ sth r0, 6(r3) -/* 8035B588 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXAttr/__GXSetVAT.s b/asm/dolphin/gx/GXAttr/__GXSetVAT.s deleted file mode 100644 index 730de6d8df2..00000000000 --- a/asm/dolphin/gx/GXAttr/__GXSetVAT.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_8035BAA0: -/* 8035BAA0 81 22 CB 80 */ lwz r9, __GXData(r2) -/* 8035BAA4 39 60 00 00 */ li r11, 0 -/* 8035BAA8 39 40 00 00 */ li r10, 0 -/* 8035BAAC 89 89 05 AB */ lbz r12, 0x5ab(r9) -/* 8035BAB0 3C E0 CC 01 */ lis r7, 0xcc01 -lbl_8035BAB4: -/* 8035BAB4 55 80 07 FF */ clrlwi. r0, r12, 0x1f -/* 8035BAB8 41 82 00 50 */ beq lbl_8035BB08 -/* 8035BABC 39 00 00 08 */ li r8, 8 -/* 8035BAC0 99 07 80 00 */ stb r8, -0x8000(r7) -/* 8035BAC4 61 63 00 70 */ ori r3, r11, 0x70 -/* 8035BAC8 38 0A 00 1C */ addi r0, r10, 0x1c -/* 8035BACC 98 67 80 00 */ stb r3, -0x8000(r7) -/* 8035BAD0 61 65 00 80 */ ori r5, r11, 0x80 -/* 8035BAD4 38 8A 00 3C */ addi r4, r10, 0x3c -/* 8035BAD8 7C C9 00 2E */ lwzx r6, r9, r0 -/* 8035BADC 61 63 00 90 */ ori r3, r11, 0x90 -/* 8035BAE0 38 0A 00 5C */ addi r0, r10, 0x5c -/* 8035BAE4 90 C7 80 00 */ stw r6, -0x8000(r7) -/* 8035BAE8 99 07 80 00 */ stb r8, -0x8000(r7) -/* 8035BAEC 98 A7 80 00 */ stb r5, -0x8000(r7) -/* 8035BAF0 7C 89 20 2E */ lwzx r4, r9, r4 -/* 8035BAF4 90 87 80 00 */ stw r4, -0x8000(r7) -/* 8035BAF8 99 07 80 00 */ stb r8, -0x8000(r7) -/* 8035BAFC 98 67 80 00 */ stb r3, -0x8000(r7) -/* 8035BB00 7C 09 00 2E */ lwzx r0, r9, r0 -/* 8035BB04 90 07 80 00 */ stw r0, -0x8000(r7) -lbl_8035BB08: -/* 8035BB08 55 8C F8 7F */ rlwinm. r12, r12, 0x1f, 1, 0x1f -/* 8035BB0C 39 4A 00 04 */ addi r10, r10, 4 -/* 8035BB10 39 6B 00 01 */ addi r11, r11, 1 -/* 8035BB14 40 82 FF A0 */ bne lbl_8035BAB4 -/* 8035BB18 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035BB1C 38 00 00 00 */ li r0, 0 -/* 8035BB20 98 03 05 AB */ stb r0, 0x5ab(r3) -/* 8035BB24 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXCPInterruptHandler.s b/asm/dolphin/gx/GXFifo/GXCPInterruptHandler.s deleted file mode 100644 index 630a617f560..00000000000 --- a/asm/dolphin/gx/GXFifo/GXCPInterruptHandler.s +++ /dev/null @@ -1,81 +0,0 @@ -lbl_8035A5A8: -/* 8035A5A8 7C 08 02 A6 */ mflr r0 -/* 8035A5AC 90 01 00 04 */ stw r0, 4(r1) -/* 8035A5B0 94 21 FD 20 */ stwu r1, -0x2e0(r1) -/* 8035A5B4 93 E1 02 DC */ stw r31, 0x2dc(r1) -/* 8035A5B8 7C 9F 23 78 */ mr r31, r4 -/* 8035A5BC 80 AD 93 A4 */ lwz r5, __cpReg(r13) -/* 8035A5C0 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035A5C4 A0 05 00 00 */ lhz r0, 0(r5) -/* 8035A5C8 90 03 00 0C */ stw r0, 0xc(r3) -/* 8035A5CC 80 03 00 08 */ lwz r0, 8(r3) -/* 8035A5D0 54 00 EF FF */ rlwinm. r0, r0, 0x1d, 0x1f, 0x1f -/* 8035A5D4 41 82 00 38 */ beq lbl_8035A60C -/* 8035A5D8 80 03 00 0C */ lwz r0, 0xc(r3) -/* 8035A5DC 54 00 FF FF */ rlwinm. r0, r0, 0x1f, 0x1f, 0x1f -/* 8035A5E0 41 82 00 2C */ beq lbl_8035A60C -/* 8035A5E4 80 6D 93 D0 */ lwz r3, __GXCurrentThread(r13) -/* 8035A5E8 4B FE 71 CD */ bl OSResumeThread -/* 8035A5EC 38 00 00 00 */ li r0, 0 -/* 8035A5F0 90 0D 93 D8 */ stw r0, GXOverflowSuspendInProgress(r13) -/* 8035A5F4 38 60 00 01 */ li r3, 1 -/* 8035A5F8 38 80 00 01 */ li r4, 1 -/* 8035A5FC 48 00 07 29 */ bl __GXWriteFifoIntReset -/* 8035A600 38 60 00 01 */ li r3, 1 -/* 8035A604 38 80 00 00 */ li r4, 0 -/* 8035A608 48 00 06 ED */ bl __GXWriteFifoIntEnable -lbl_8035A60C: -/* 8035A60C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035A610 80 03 00 08 */ lwz r0, 8(r3) -/* 8035A614 54 00 F7 FF */ rlwinm. r0, r0, 0x1e, 0x1f, 0x1f -/* 8035A618 41 82 00 44 */ beq lbl_8035A65C -/* 8035A61C 80 03 00 0C */ lwz r0, 0xc(r3) -/* 8035A620 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 8035A624 41 82 00 38 */ beq lbl_8035A65C -/* 8035A628 80 AD 93 E0 */ lwz r5, __GXOverflowCount(r13) -/* 8035A62C 38 60 00 00 */ li r3, 0 -/* 8035A630 38 80 00 01 */ li r4, 1 -/* 8035A634 38 05 00 01 */ addi r0, r5, 1 -/* 8035A638 90 0D 93 E0 */ stw r0, __GXOverflowCount(r13) -/* 8035A63C 48 00 06 B9 */ bl __GXWriteFifoIntEnable -/* 8035A640 38 60 00 01 */ li r3, 1 -/* 8035A644 38 80 00 00 */ li r4, 0 -/* 8035A648 48 00 06 DD */ bl __GXWriteFifoIntReset -/* 8035A64C 38 00 00 01 */ li r0, 1 -/* 8035A650 80 6D 93 D0 */ lwz r3, __GXCurrentThread(r13) -/* 8035A654 90 0D 93 D8 */ stw r0, GXOverflowSuspendInProgress(r13) -/* 8035A658 4B FE 73 E5 */ bl OSSuspendThread -lbl_8035A65C: -/* 8035A65C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035A660 80 83 00 08 */ lwz r4, 8(r3) -/* 8035A664 54 80 DF FF */ rlwinm. r0, r4, 0x1b, 0x1f, 0x1f -/* 8035A668 41 82 00 60 */ beq lbl_8035A6C8 -/* 8035A66C 80 03 00 0C */ lwz r0, 0xc(r3) -/* 8035A670 54 00 E7 FF */ rlwinm. r0, r0, 0x1c, 0x1f, 0x1f -/* 8035A674 41 82 00 54 */ beq lbl_8035A6C8 -/* 8035A678 38 00 00 00 */ li r0, 0 -/* 8035A67C 50 04 2E B4 */ rlwimi r4, r0, 5, 0x1a, 0x1a -/* 8035A680 90 83 00 08 */ stw r4, 8(r3) -/* 8035A684 80 03 00 08 */ lwz r0, 8(r3) -/* 8035A688 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A68C B0 03 00 02 */ sth r0, 2(r3) -/* 8035A690 80 0D 93 DC */ lwz r0, BreakPointCB(r13) -/* 8035A694 28 00 00 00 */ cmplwi r0, 0 -/* 8035A698 41 82 00 30 */ beq lbl_8035A6C8 -/* 8035A69C 38 61 00 10 */ addi r3, r1, 0x10 -/* 8035A6A0 4B FE 19 61 */ bl OSClearContext -/* 8035A6A4 38 61 00 10 */ addi r3, r1, 0x10 -/* 8035A6A8 4B FE 17 91 */ bl OSSetCurrentContext -/* 8035A6AC 81 8D 93 DC */ lwz r12, BreakPointCB(r13) -/* 8035A6B0 7D 88 03 A6 */ mtlr r12 -/* 8035A6B4 4E 80 00 21 */ blrl -/* 8035A6B8 38 61 00 10 */ addi r3, r1, 0x10 -/* 8035A6BC 4B FE 19 45 */ bl OSClearContext -/* 8035A6C0 7F E3 FB 78 */ mr r3, r31 -/* 8035A6C4 4B FE 17 75 */ bl OSSetCurrentContext -lbl_8035A6C8: -/* 8035A6C8 80 01 02 E4 */ lwz r0, 0x2e4(r1) -/* 8035A6CC 83 E1 02 DC */ lwz r31, 0x2dc(r1) -/* 8035A6D0 38 21 02 E0 */ addi r1, r1, 0x2e0 -/* 8035A6D4 7C 08 03 A6 */ mtlr r0 -/* 8035A6D8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXGetGPStatus.s b/asm/dolphin/gx/GXFifo/GXGetGPStatus.s deleted file mode 100644 index 57a50546bd1..00000000000 --- a/asm/dolphin/gx/GXFifo/GXGetGPStatus.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_8035AB88: -/* 8035AB88 81 2D 93 A4 */ lwz r9, __cpReg(r13) -/* 8035AB8C 81 02 CB 80 */ lwz r8, __GXData(r2) -/* 8035AB90 A0 09 00 00 */ lhz r0, 0(r9) -/* 8035AB94 90 08 00 0C */ stw r0, 0xc(r8) -/* 8035AB98 80 08 00 0C */ lwz r0, 0xc(r8) -/* 8035AB9C 54 00 07 FE */ clrlwi r0, r0, 0x1f -/* 8035ABA0 98 03 00 00 */ stb r0, 0(r3) -/* 8035ABA4 80 08 00 0C */ lwz r0, 0xc(r8) -/* 8035ABA8 54 00 FF FE */ rlwinm r0, r0, 0x1f, 0x1f, 0x1f -/* 8035ABAC 98 04 00 00 */ stb r0, 0(r4) -/* 8035ABB0 80 08 00 0C */ lwz r0, 0xc(r8) -/* 8035ABB4 54 00 F7 FE */ rlwinm r0, r0, 0x1e, 0x1f, 0x1f -/* 8035ABB8 98 05 00 00 */ stb r0, 0(r5) -/* 8035ABBC 80 08 00 0C */ lwz r0, 0xc(r8) -/* 8035ABC0 54 00 EF FE */ rlwinm r0, r0, 0x1d, 0x1f, 0x1f -/* 8035ABC4 98 06 00 00 */ stb r0, 0(r6) -/* 8035ABC8 80 08 00 0C */ lwz r0, 0xc(r8) -/* 8035ABCC 54 00 E7 FE */ rlwinm r0, r0, 0x1c, 0x1f, 0x1f -/* 8035ABD0 98 07 00 00 */ stb r0, 0(r7) -/* 8035ABD4 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXInitFifoBase.s b/asm/dolphin/gx/GXFifo/GXInitFifoBase.s deleted file mode 100644 index 8f8ded99ab9..00000000000 --- a/asm/dolphin/gx/GXFifo/GXInitFifoBase.s +++ /dev/null @@ -1,28 +0,0 @@ -lbl_8035A6DC: -/* 8035A6DC 7C 08 02 A6 */ mflr r0 -/* 8035A6E0 90 01 00 04 */ stw r0, 4(r1) -/* 8035A6E4 38 05 FF FC */ addi r0, r5, -4 -/* 8035A6E8 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8035A6EC 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8035A6F0 3B E4 00 00 */ addi r31, r4, 0 -/* 8035A6F4 7C 1F 02 14 */ add r0, r31, r0 -/* 8035A6F8 93 C1 00 18 */ stw r30, 0x18(r1) -/* 8035A6FC 3B C3 00 00 */ addi r30, r3, 0 -/* 8035A700 38 85 C0 00 */ addi r4, r5, -16384 -/* 8035A704 93 E3 00 00 */ stw r31, 0(r3) -/* 8035A708 90 03 00 04 */ stw r0, 4(r3) -/* 8035A70C 38 00 00 00 */ li r0, 0 -/* 8035A710 90 A3 00 08 */ stw r5, 8(r3) -/* 8035A714 54 A5 F8 74 */ rlwinm r5, r5, 0x1f, 1, 0x1a -/* 8035A718 90 1E 00 1C */ stw r0, 0x1c(r30) -/* 8035A71C 48 00 00 9D */ bl GXInitFifoLimits -/* 8035A720 38 7E 00 00 */ addi r3, r30, 0 -/* 8035A724 38 9F 00 00 */ addi r4, r31, 0 -/* 8035A728 38 BF 00 00 */ addi r5, r31, 0 -/* 8035A72C 48 00 00 1D */ bl GXInitFifoPtrs -/* 8035A730 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8035A734 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 8035A738 83 C1 00 18 */ lwz r30, 0x18(r1) -/* 8035A73C 38 21 00 20 */ addi r1, r1, 0x20 -/* 8035A740 7C 08 03 A6 */ mtlr r0 -/* 8035A744 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXInitFifoPtrs.s b/asm/dolphin/gx/GXFifo/GXInitFifoPtrs.s deleted file mode 100644 index fa8b5245e32..00000000000 --- a/asm/dolphin/gx/GXFifo/GXInitFifoPtrs.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_8035A748: -/* 8035A748 7C 08 02 A6 */ mflr r0 -/* 8035A74C 90 01 00 04 */ stw r0, 4(r1) -/* 8035A750 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 8035A754 93 E1 00 24 */ stw r31, 0x24(r1) -/* 8035A758 3B E5 00 00 */ addi r31, r5, 0 -/* 8035A75C 93 C1 00 20 */ stw r30, 0x20(r1) -/* 8035A760 3B C4 00 00 */ addi r30, r4, 0 -/* 8035A764 93 A1 00 1C */ stw r29, 0x1c(r1) -/* 8035A768 3B A3 00 00 */ addi r29, r3, 0 -/* 8035A76C 4B FE 2F 89 */ bl OSDisableInterrupts -/* 8035A770 93 DD 00 14 */ stw r30, 0x14(r29) -/* 8035A774 7C 1E F8 50 */ subf r0, r30, r31 -/* 8035A778 93 FD 00 18 */ stw r31, 0x18(r29) -/* 8035A77C 90 1D 00 1C */ stw r0, 0x1c(r29) -/* 8035A780 80 9D 00 1C */ lwz r4, 0x1c(r29) -/* 8035A784 2C 04 00 00 */ cmpwi r4, 0 -/* 8035A788 40 80 00 10 */ bge lbl_8035A798 -/* 8035A78C 80 1D 00 08 */ lwz r0, 8(r29) -/* 8035A790 7C 04 02 14 */ add r0, r4, r0 -/* 8035A794 90 1D 00 1C */ stw r0, 0x1c(r29) -lbl_8035A798: -/* 8035A798 4B FE 2F 85 */ bl OSRestoreInterrupts -/* 8035A79C 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 8035A7A0 83 E1 00 24 */ lwz r31, 0x24(r1) -/* 8035A7A4 83 C1 00 20 */ lwz r30, 0x20(r1) -/* 8035A7A8 83 A1 00 1C */ lwz r29, 0x1c(r1) -/* 8035A7AC 38 21 00 28 */ addi r1, r1, 0x28 -/* 8035A7B0 7C 08 03 A6 */ mtlr r0 -/* 8035A7B4 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXSetBreakPtCallback.s b/asm/dolphin/gx/GXFifo/GXSetBreakPtCallback.s deleted file mode 100644 index 1a65f92cc26..00000000000 --- a/asm/dolphin/gx/GXFifo/GXSetBreakPtCallback.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8035ABE8: -/* 8035ABE8 7C 08 02 A6 */ mflr r0 -/* 8035ABEC 90 01 00 04 */ stw r0, 4(r1) -/* 8035ABF0 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035ABF4 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035ABF8 93 C1 00 10 */ stw r30, 0x10(r1) -/* 8035ABFC 7C 7E 1B 78 */ mr r30, r3 -/* 8035AC00 83 ED 93 DC */ lwz r31, BreakPointCB(r13) -/* 8035AC04 4B FE 2A F1 */ bl OSDisableInterrupts -/* 8035AC08 93 CD 93 DC */ stw r30, BreakPointCB(r13) -/* 8035AC0C 4B FE 2B 11 */ bl OSRestoreInterrupts -/* 8035AC10 7F E3 FB 78 */ mr r3, r31 -/* 8035AC14 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035AC18 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035AC1C 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 8035AC20 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035AC24 7C 08 03 A6 */ mtlr r0 -/* 8035AC28 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXSetCPUFifo.s b/asm/dolphin/gx/GXFifo/GXSetCPUFifo.s deleted file mode 100644 index f13def54c90..00000000000 --- a/asm/dolphin/gx/GXFifo/GXSetCPUFifo.s +++ /dev/null @@ -1,78 +0,0 @@ -lbl_8035A7C4: -/* 8035A7C4 7C 08 02 A6 */ mflr r0 -/* 8035A7C8 90 01 00 04 */ stw r0, 4(r1) -/* 8035A7CC 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035A7D0 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035A7D4 93 C1 00 10 */ stw r30, 0x10(r1) -/* 8035A7D8 7C 7E 1B 78 */ mr r30, r3 -/* 8035A7DC 4B FE 2F 19 */ bl OSDisableInterrupts -/* 8035A7E0 80 0D 93 CC */ lwz r0, GPFifo(r13) -/* 8035A7E4 3B E3 00 00 */ addi r31, r3, 0 -/* 8035A7E8 93 CD 93 C8 */ stw r30, CPUFifo(r13) -/* 8035A7EC 7C 1E 00 40 */ cmplw r30, r0 -/* 8035A7F0 40 82 00 70 */ bne lbl_8035A860 -/* 8035A7F4 80 1E 00 00 */ lwz r0, 0(r30) -/* 8035A7F8 39 00 00 00 */ li r8, 0 -/* 8035A7FC 80 6D 93 A0 */ lwz r3, __piReg(r13) -/* 8035A800 38 C0 00 00 */ li r6, 0 -/* 8035A804 54 00 00 BE */ clrlwi r0, r0, 2 -/* 8035A808 90 03 00 0C */ stw r0, 0xc(r3) -/* 8035A80C 38 00 00 01 */ li r0, 1 -/* 8035A810 38 60 00 01 */ li r3, 1 -/* 8035A814 80 FE 00 04 */ lwz r7, 4(r30) -/* 8035A818 38 80 00 01 */ li r4, 1 -/* 8035A81C 80 AD 93 A0 */ lwz r5, __piReg(r13) -/* 8035A820 54 E7 00 BE */ clrlwi r7, r7, 2 -/* 8035A824 90 E5 00 10 */ stw r7, 0x10(r5) -/* 8035A828 80 FE 00 18 */ lwz r7, 0x18(r30) -/* 8035A82C 80 AD 93 A0 */ lwz r5, __piReg(r13) -/* 8035A830 50 E8 01 B4 */ rlwimi r8, r7, 0, 6, 0x1a -/* 8035A834 38 E8 00 00 */ addi r7, r8, 0 -/* 8035A838 50 C7 D1 4A */ rlwimi r7, r6, 0x1a, 5, 5 -/* 8035A83C 90 E5 00 14 */ stw r7, 0x14(r5) -/* 8035A840 98 0D 93 D4 */ stb r0, data_80451954(r13) -/* 8035A844 48 00 04 E1 */ bl __GXWriteFifoIntReset -/* 8035A848 38 60 00 01 */ li r3, 1 -/* 8035A84C 38 80 00 00 */ li r4, 0 -/* 8035A850 48 00 04 A5 */ bl __GXWriteFifoIntEnable -/* 8035A854 38 60 00 01 */ li r3, 1 -/* 8035A858 48 00 04 69 */ bl __GXFifoLink -/* 8035A85C 48 00 00 6C */ b lbl_8035A8C8 -lbl_8035A860: -/* 8035A860 88 0D 93 D4 */ lbz r0, data_80451954(r13) -/* 8035A864 28 00 00 00 */ cmplwi r0, 0 -/* 8035A868 41 82 00 14 */ beq lbl_8035A87C -/* 8035A86C 38 60 00 00 */ li r3, 0 -/* 8035A870 48 00 04 51 */ bl __GXFifoLink -/* 8035A874 38 00 00 00 */ li r0, 0 -/* 8035A878 98 0D 93 D4 */ stb r0, data_80451954(r13) -lbl_8035A87C: -/* 8035A87C 38 60 00 00 */ li r3, 0 -/* 8035A880 38 80 00 00 */ li r4, 0 -/* 8035A884 48 00 04 71 */ bl __GXWriteFifoIntEnable -/* 8035A888 80 9E 00 00 */ lwz r4, 0(r30) -/* 8035A88C 38 A0 00 00 */ li r5, 0 -/* 8035A890 80 6D 93 A0 */ lwz r3, __piReg(r13) -/* 8035A894 38 00 00 00 */ li r0, 0 -/* 8035A898 54 84 00 BE */ clrlwi r4, r4, 2 -/* 8035A89C 90 83 00 0C */ stw r4, 0xc(r3) -/* 8035A8A0 80 9E 00 04 */ lwz r4, 4(r30) -/* 8035A8A4 80 6D 93 A0 */ lwz r3, __piReg(r13) -/* 8035A8A8 54 84 00 BE */ clrlwi r4, r4, 2 -/* 8035A8AC 90 83 00 10 */ stw r4, 0x10(r3) -/* 8035A8B0 80 9E 00 18 */ lwz r4, 0x18(r30) -/* 8035A8B4 80 6D 93 A0 */ lwz r3, __piReg(r13) -/* 8035A8B8 50 85 01 B4 */ rlwimi r5, r4, 0, 6, 0x1a -/* 8035A8BC 38 85 00 00 */ addi r4, r5, 0 -/* 8035A8C0 50 04 D1 4A */ rlwimi r4, r0, 0x1a, 5, 5 -/* 8035A8C4 90 83 00 14 */ stw r4, 0x14(r3) -lbl_8035A8C8: -/* 8035A8C8 4B FD F4 31 */ bl PPCSync -/* 8035A8CC 7F E3 FB 78 */ mr r3, r31 -/* 8035A8D0 4B FE 2E 4D */ bl OSRestoreInterrupts -/* 8035A8D4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035A8D8 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035A8DC 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 8035A8E0 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035A8E4 7C 08 03 A6 */ mtlr r0 -/* 8035A8E8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXSetCurrentGXThread.s b/asm/dolphin/gx/GXFifo/GXSetCurrentGXThread.s deleted file mode 100644 index 37e69983bb4..00000000000 --- a/asm/dolphin/gx/GXFifo/GXSetCurrentGXThread.s +++ /dev/null @@ -1,20 +0,0 @@ -lbl_8035AE54: -/* 8035AE54 7C 08 02 A6 */ mflr r0 -/* 8035AE58 90 01 00 04 */ stw r0, 4(r1) -/* 8035AE5C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8035AE60 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8035AE64 93 C1 00 08 */ stw r30, 8(r1) -/* 8035AE68 4B FE 28 8D */ bl OSDisableInterrupts -/* 8035AE6C 83 CD 93 D0 */ lwz r30, __GXCurrentThread(r13) -/* 8035AE70 7C 7F 1B 78 */ mr r31, r3 -/* 8035AE74 4B FE 5E 11 */ bl OSGetCurrentThread -/* 8035AE78 90 6D 93 D0 */ stw r3, __GXCurrentThread(r13) -/* 8035AE7C 7F E3 FB 78 */ mr r3, r31 -/* 8035AE80 4B FE 28 9D */ bl OSRestoreInterrupts -/* 8035AE84 7F C3 F3 78 */ mr r3, r30 -/* 8035AE88 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8035AE8C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8035AE90 83 C1 00 08 */ lwz r30, 8(r1) -/* 8035AE94 38 21 00 10 */ addi r1, r1, 0x10 -/* 8035AE98 7C 08 03 A6 */ mtlr r0 -/* 8035AE9C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/GXSetGPFifo.s b/asm/dolphin/gx/GXFifo/GXSetGPFifo.s deleted file mode 100644 index d9a92a3ec58..00000000000 --- a/asm/dolphin/gx/GXFifo/GXSetGPFifo.s +++ /dev/null @@ -1,107 +0,0 @@ -lbl_8035A8EC: -/* 8035A8EC 7C 08 02 A6 */ mflr r0 -/* 8035A8F0 90 01 00 04 */ stw r0, 4(r1) -/* 8035A8F4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035A8F8 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035A8FC 93 C1 00 10 */ stw r30, 0x10(r1) -/* 8035A900 7C 7E 1B 78 */ mr r30, r3 -/* 8035A904 4B FE 2D F1 */ bl OSDisableInterrupts -/* 8035A908 7C 7F 1B 78 */ mr r31, r3 -/* 8035A90C 48 00 03 91 */ bl __GXFifoReadDisable -/* 8035A910 38 60 00 00 */ li r3, 0 -/* 8035A914 38 80 00 00 */ li r4, 0 -/* 8035A918 48 00 03 DD */ bl __GXWriteFifoIntEnable -/* 8035A91C 93 CD 93 CC */ stw r30, GPFifo(r13) -/* 8035A920 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A924 80 1E 00 00 */ lwz r0, 0(r30) -/* 8035A928 B0 03 00 20 */ sth r0, 0x20(r3) -/* 8035A92C 80 1E 00 04 */ lwz r0, 4(r30) -/* 8035A930 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A934 B0 03 00 24 */ sth r0, 0x24(r3) -/* 8035A938 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 8035A93C 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A940 B0 03 00 30 */ sth r0, 0x30(r3) -/* 8035A944 80 1E 00 18 */ lwz r0, 0x18(r30) -/* 8035A948 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A94C B0 03 00 34 */ sth r0, 0x34(r3) -/* 8035A950 80 1E 00 14 */ lwz r0, 0x14(r30) -/* 8035A954 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A958 B0 03 00 38 */ sth r0, 0x38(r3) -/* 8035A95C 80 1E 00 0C */ lwz r0, 0xc(r30) -/* 8035A960 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A964 B0 03 00 28 */ sth r0, 0x28(r3) -/* 8035A968 80 1E 00 10 */ lwz r0, 0x10(r30) -/* 8035A96C 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A970 B0 03 00 2C */ sth r0, 0x2c(r3) -/* 8035A974 80 1E 00 00 */ lwz r0, 0(r30) -/* 8035A978 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A97C 54 00 84 BE */ rlwinm r0, r0, 0x10, 0x12, 0x1f -/* 8035A980 B0 03 00 22 */ sth r0, 0x22(r3) -/* 8035A984 80 1E 00 04 */ lwz r0, 4(r30) -/* 8035A988 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A98C 54 00 84 BE */ rlwinm r0, r0, 0x10, 0x12, 0x1f -/* 8035A990 B0 03 00 26 */ sth r0, 0x26(r3) -/* 8035A994 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 8035A998 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A99C 7C 00 86 70 */ srawi r0, r0, 0x10 -/* 8035A9A0 B0 03 00 32 */ sth r0, 0x32(r3) -/* 8035A9A4 80 1E 00 18 */ lwz r0, 0x18(r30) -/* 8035A9A8 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A9AC 54 00 84 BE */ rlwinm r0, r0, 0x10, 0x12, 0x1f -/* 8035A9B0 B0 03 00 36 */ sth r0, 0x36(r3) -/* 8035A9B4 80 1E 00 14 */ lwz r0, 0x14(r30) -/* 8035A9B8 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A9BC 54 00 84 BE */ rlwinm r0, r0, 0x10, 0x12, 0x1f -/* 8035A9C0 B0 03 00 3A */ sth r0, 0x3a(r3) -/* 8035A9C4 80 1E 00 0C */ lwz r0, 0xc(r30) -/* 8035A9C8 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A9CC 54 00 84 3E */ srwi r0, r0, 0x10 -/* 8035A9D0 B0 03 00 2A */ sth r0, 0x2a(r3) -/* 8035A9D4 80 1E 00 10 */ lwz r0, 0x10(r30) -/* 8035A9D8 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035A9DC 54 00 84 3E */ srwi r0, r0, 0x10 -/* 8035A9E0 B0 03 00 2E */ sth r0, 0x2e(r3) -/* 8035A9E4 4B FD F3 15 */ bl PPCSync -/* 8035A9E8 80 6D 93 C8 */ lwz r3, CPUFifo(r13) -/* 8035A9EC 80 0D 93 CC */ lwz r0, GPFifo(r13) -/* 8035A9F0 7C 03 00 40 */ cmplw r3, r0 -/* 8035A9F4 40 82 00 24 */ bne lbl_8035AA18 -/* 8035A9F8 38 00 00 01 */ li r0, 1 -/* 8035A9FC 98 0D 93 D4 */ stb r0, data_80451954(r13) -/* 8035AA00 38 60 00 01 */ li r3, 1 -/* 8035AA04 38 80 00 00 */ li r4, 0 -/* 8035AA08 48 00 02 ED */ bl __GXWriteFifoIntEnable -/* 8035AA0C 38 60 00 01 */ li r3, 1 -/* 8035AA10 48 00 02 B1 */ bl __GXFifoLink -/* 8035AA14 48 00 00 20 */ b lbl_8035AA34 -lbl_8035AA18: -/* 8035AA18 38 00 00 00 */ li r0, 0 -/* 8035AA1C 98 0D 93 D4 */ stb r0, data_80451954(r13) -/* 8035AA20 38 60 00 00 */ li r3, 0 -/* 8035AA24 38 80 00 00 */ li r4, 0 -/* 8035AA28 48 00 02 CD */ bl __GXWriteFifoIntEnable -/* 8035AA2C 38 60 00 00 */ li r3, 0 -/* 8035AA30 48 00 02 91 */ bl __GXFifoLink -lbl_8035AA34: -/* 8035AA34 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035AA38 38 00 00 00 */ li r0, 0 -/* 8035AA3C 80 8D 93 A4 */ lwz r4, __cpReg(r13) -/* 8035AA40 38 60 00 01 */ li r3, 1 -/* 8035AA44 80 C5 00 08 */ lwz r6, 8(r5) -/* 8035AA48 50 06 0F BC */ rlwimi r6, r0, 1, 0x1e, 0x1e -/* 8035AA4C 50 06 2E B4 */ rlwimi r6, r0, 5, 0x1a, 0x1a -/* 8035AA50 B0 C4 00 02 */ sth r6, 2(r4) -/* 8035AA54 38 80 00 01 */ li r4, 1 -/* 8035AA58 80 05 00 08 */ lwz r0, 8(r5) -/* 8035AA5C 80 AD 93 A4 */ lwz r5, __cpReg(r13) -/* 8035AA60 B0 05 00 02 */ sth r0, 2(r5) -/* 8035AA64 48 00 02 C1 */ bl __GXWriteFifoIntReset -/* 8035AA68 48 00 02 11 */ bl __GXFifoReadEnable -/* 8035AA6C 7F E3 FB 78 */ mr r3, r31 -/* 8035AA70 4B FE 2C AD */ bl OSRestoreInterrupts -/* 8035AA74 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035AA78 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035AA7C 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 8035AA80 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035AA84 7C 08 03 A6 */ mtlr r0 -/* 8035AA88 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXCleanGPFifo.s b/asm/dolphin/gx/GXFifo/__GXCleanGPFifo.s deleted file mode 100644 index ca0fa883937..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXCleanGPFifo.s +++ /dev/null @@ -1,70 +0,0 @@ -lbl_8035AD54: -/* 8035AD54 7C 08 02 A6 */ mflr r0 -/* 8035AD58 90 01 00 04 */ stw r0, 4(r1) -/* 8035AD5C 94 21 FF 58 */ stwu r1, -0xa8(r1) -/* 8035AD60 93 E1 00 A4 */ stw r31, 0xa4(r1) -/* 8035AD64 93 C1 00 A0 */ stw r30, 0xa0(r1) -/* 8035AD68 93 A1 00 9C */ stw r29, 0x9c(r1) -/* 8035AD6C 48 00 01 45 */ bl GXGetGPFifo -/* 8035AD70 7C 7F 1B 79 */ or. r31, r3, r3 -/* 8035AD74 41 82 00 C4 */ beq lbl_8035AE38 -/* 8035AD78 48 00 01 31 */ bl GXGetCPUFifo -/* 8035AD7C 38 00 00 10 */ li r0, 0x10 -/* 8035AD80 83 BF 00 00 */ lwz r29, 0(r31) -/* 8035AD84 7C 09 03 A6 */ mtctr r0 -/* 8035AD88 3B C3 00 00 */ addi r30, r3, 0 -/* 8035AD8C 38 A1 00 0C */ addi r5, r1, 0xc -/* 8035AD90 38 9F FF F8 */ addi r4, r31, -8 -lbl_8035AD94: -/* 8035AD94 84 64 00 08 */ lwzu r3, 8(r4) -/* 8035AD98 80 04 00 04 */ lwz r0, 4(r4) -/* 8035AD9C 94 65 00 08 */ stwu r3, 8(r5) -/* 8035ADA0 90 05 00 04 */ stw r0, 4(r5) -/* 8035ADA4 42 00 FF F0 */ bdnz lbl_8035AD94 -/* 8035ADA8 4B FE 29 4D */ bl OSDisableInterrupts -/* 8035ADAC 93 A1 00 28 */ stw r29, 0x28(r1) -/* 8035ADB0 38 00 00 00 */ li r0, 0 -/* 8035ADB4 93 A1 00 2C */ stw r29, 0x2c(r1) -/* 8035ADB8 90 01 00 30 */ stw r0, 0x30(r1) -/* 8035ADBC 80 81 00 30 */ lwz r4, 0x30(r1) -/* 8035ADC0 2C 04 00 00 */ cmpwi r4, 0 -/* 8035ADC4 40 80 00 10 */ bge lbl_8035ADD4 -/* 8035ADC8 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035ADCC 7C 04 02 14 */ add r0, r4, r0 -/* 8035ADD0 90 01 00 30 */ stw r0, 0x30(r1) -lbl_8035ADD4: -/* 8035ADD4 4B FE 29 49 */ bl OSRestoreInterrupts -/* 8035ADD8 38 61 00 14 */ addi r3, r1, 0x14 -/* 8035ADDC 4B FF FB 11 */ bl GXSetGPFifo -/* 8035ADE0 7C 1E F8 40 */ cmplw r30, r31 -/* 8035ADE4 40 82 00 0C */ bne lbl_8035ADF0 -/* 8035ADE8 38 61 00 14 */ addi r3, r1, 0x14 -/* 8035ADEC 4B FF F9 D9 */ bl GXSetCPUFifo -lbl_8035ADF0: -/* 8035ADF0 4B FE 29 05 */ bl OSDisableInterrupts -/* 8035ADF4 93 BF 00 14 */ stw r29, 0x14(r31) -/* 8035ADF8 38 00 00 00 */ li r0, 0 -/* 8035ADFC 93 BF 00 18 */ stw r29, 0x18(r31) -/* 8035AE00 90 1F 00 1C */ stw r0, 0x1c(r31) -/* 8035AE04 80 9F 00 1C */ lwz r4, 0x1c(r31) -/* 8035AE08 2C 04 00 00 */ cmpwi r4, 0 -/* 8035AE0C 40 80 00 10 */ bge lbl_8035AE1C -/* 8035AE10 80 1F 00 08 */ lwz r0, 8(r31) -/* 8035AE14 7C 04 02 14 */ add r0, r4, r0 -/* 8035AE18 90 1F 00 1C */ stw r0, 0x1c(r31) -lbl_8035AE1C: -/* 8035AE1C 4B FE 29 01 */ bl OSRestoreInterrupts -/* 8035AE20 7F E3 FB 78 */ mr r3, r31 -/* 8035AE24 4B FF FA C9 */ bl GXSetGPFifo -/* 8035AE28 7C 1E F8 40 */ cmplw r30, r31 -/* 8035AE2C 40 82 00 0C */ bne lbl_8035AE38 -/* 8035AE30 7F C3 F3 78 */ mr r3, r30 -/* 8035AE34 4B FF F9 91 */ bl GXSetCPUFifo -lbl_8035AE38: -/* 8035AE38 80 01 00 AC */ lwz r0, 0xac(r1) -/* 8035AE3C 83 E1 00 A4 */ lwz r31, 0xa4(r1) -/* 8035AE40 83 C1 00 A0 */ lwz r30, 0xa0(r1) -/* 8035AE44 83 A1 00 9C */ lwz r29, 0x9c(r1) -/* 8035AE48 38 21 00 A8 */ addi r1, r1, 0xa8 -/* 8035AE4C 7C 08 03 A6 */ mtlr r0 -/* 8035AE50 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXFifoLink.s b/asm/dolphin/gx/GXFifo/__GXFifoLink.s deleted file mode 100644 index 2e796ee302a..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXFifoLink.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_8035ACC0: -/* 8035ACC0 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 8035ACC4 41 82 00 0C */ beq lbl_8035ACD0 -/* 8035ACC8 38 80 00 01 */ li r4, 1 -/* 8035ACCC 48 00 00 08 */ b lbl_8035ACD4 -lbl_8035ACD0: -/* 8035ACD0 38 80 00 00 */ li r4, 0 -lbl_8035ACD4: -/* 8035ACD4 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035ACD8 80 03 00 08 */ lwz r0, 8(r3) -/* 8035ACDC 50 80 26 F6 */ rlwimi r0, r4, 4, 0x1b, 0x1b -/* 8035ACE0 90 03 00 08 */ stw r0, 8(r3) -/* 8035ACE4 80 03 00 08 */ lwz r0, 8(r3) -/* 8035ACE8 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035ACEC B0 03 00 02 */ sth r0, 2(r3) -/* 8035ACF0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXFifoReadDisable.s b/asm/dolphin/gx/GXFifo/__GXFifoReadDisable.s deleted file mode 100644 index 0c922f239d2..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXFifoReadDisable.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_8035AC9C: -/* 8035AC9C 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035ACA0 38 00 00 00 */ li r0, 0 -/* 8035ACA4 80 64 00 08 */ lwz r3, 8(r4) -/* 8035ACA8 50 03 07 FE */ rlwimi r3, r0, 0, 0x1f, 0x1f -/* 8035ACAC 90 64 00 08 */ stw r3, 8(r4) -/* 8035ACB0 80 04 00 08 */ lwz r0, 8(r4) -/* 8035ACB4 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035ACB8 B0 03 00 02 */ sth r0, 2(r3) -/* 8035ACBC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXFifoReadEnable.s b/asm/dolphin/gx/GXFifo/__GXFifoReadEnable.s deleted file mode 100644 index 75cadf1a34a..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXFifoReadEnable.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_8035AC78: -/* 8035AC78 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035AC7C 38 00 00 01 */ li r0, 1 -/* 8035AC80 80 64 00 08 */ lwz r3, 8(r4) -/* 8035AC84 50 03 07 FE */ rlwimi r3, r0, 0, 0x1f, 0x1f -/* 8035AC88 90 64 00 08 */ stw r3, 8(r4) -/* 8035AC8C 80 04 00 08 */ lwz r0, 8(r4) -/* 8035AC90 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035AC94 B0 03 00 02 */ sth r0, 2(r3) -/* 8035AC98 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXSaveCPUFifoAux.s b/asm/dolphin/gx/GXFifo/__GXSaveCPUFifoAux.s deleted file mode 100644 index 3fecdc69b6c..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXSaveCPUFifoAux.s +++ /dev/null @@ -1,53 +0,0 @@ -lbl_8035AAC0: -/* 8035AAC0 7C 08 02 A6 */ mflr r0 -/* 8035AAC4 90 01 00 04 */ stw r0, 4(r1) -/* 8035AAC8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035AACC 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035AAD0 7C 7F 1B 78 */ mr r31, r3 -/* 8035AAD4 4B FE 2C 21 */ bl OSDisableInterrupts -/* 8035AAD8 80 8D 93 A0 */ lwz r4, __piReg(r13) -/* 8035AADC 80 84 00 0C */ lwz r4, 0xc(r4) -/* 8035AAE0 3C 04 80 00 */ addis r0, r4, 0x8000 -/* 8035AAE4 90 1F 00 00 */ stw r0, 0(r31) -/* 8035AAE8 80 8D 93 A0 */ lwz r4, __piReg(r13) -/* 8035AAEC 80 84 00 10 */ lwz r4, 0x10(r4) -/* 8035AAF0 3C 04 80 00 */ addis r0, r4, 0x8000 -/* 8035AAF4 90 1F 00 04 */ stw r0, 4(r31) -/* 8035AAF8 80 8D 93 A0 */ lwz r4, __piReg(r13) -/* 8035AAFC 80 04 00 14 */ lwz r0, 0x14(r4) -/* 8035AB00 54 04 01 88 */ rlwinm r4, r0, 0, 6, 4 -/* 8035AB04 3C 04 80 00 */ addis r0, r4, 0x8000 -/* 8035AB08 90 1F 00 18 */ stw r0, 0x18(r31) -/* 8035AB0C 88 0D 93 D4 */ lbz r0, data_80451954(r13) -/* 8035AB10 28 00 00 00 */ cmplwi r0, 0 -/* 8035AB14 41 82 00 34 */ beq lbl_8035AB48 -/* 8035AB18 80 8D 93 A4 */ lwz r4, __cpReg(r13) -/* 8035AB1C A0 04 00 3A */ lhz r0, 0x3a(r4) -/* 8035AB20 A0 84 00 38 */ lhz r4, 0x38(r4) -/* 8035AB24 50 04 80 1E */ rlwimi r4, r0, 0x10, 0, 0xf -/* 8035AB28 3C 04 80 00 */ addis r0, r4, 0x8000 -/* 8035AB2C 90 1F 00 14 */ stw r0, 0x14(r31) -/* 8035AB30 80 8D 93 A4 */ lwz r4, __cpReg(r13) -/* 8035AB34 A0 04 00 32 */ lhz r0, 0x32(r4) -/* 8035AB38 A0 84 00 30 */ lhz r4, 0x30(r4) -/* 8035AB3C 50 04 80 1E */ rlwimi r4, r0, 0x10, 0, 0xf -/* 8035AB40 90 9F 00 1C */ stw r4, 0x1c(r31) -/* 8035AB44 48 00 00 2C */ b lbl_8035AB70 -lbl_8035AB48: -/* 8035AB48 80 9F 00 14 */ lwz r4, 0x14(r31) -/* 8035AB4C 80 1F 00 18 */ lwz r0, 0x18(r31) -/* 8035AB50 7C 04 00 50 */ subf r0, r4, r0 -/* 8035AB54 90 1F 00 1C */ stw r0, 0x1c(r31) -/* 8035AB58 80 9F 00 1C */ lwz r4, 0x1c(r31) -/* 8035AB5C 2C 04 00 00 */ cmpwi r4, 0 -/* 8035AB60 40 80 00 10 */ bge lbl_8035AB70 -/* 8035AB64 80 1F 00 08 */ lwz r0, 8(r31) -/* 8035AB68 7C 04 02 14 */ add r0, r4, r0 -/* 8035AB6C 90 1F 00 1C */ stw r0, 0x1c(r31) -lbl_8035AB70: -/* 8035AB70 4B FE 2B AD */ bl OSRestoreInterrupts -/* 8035AB74 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035AB78 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035AB7C 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035AB80 7C 08 03 A6 */ mtlr r0 -/* 8035AB84 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXWriteFifoIntEnable.s b/asm/dolphin/gx/GXFifo/__GXWriteFifoIntEnable.s deleted file mode 100644 index 390eb5ec0fb..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXWriteFifoIntEnable.s +++ /dev/null @@ -1,13 +0,0 @@ -lbl_8035ACF4: -/* 8035ACF4 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035ACF8 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035ACFC 80 85 00 08 */ lwz r4, 8(r5) -/* 8035AD00 50 64 17 7A */ rlwimi r4, r3, 2, 0x1d, 0x1d -/* 8035AD04 90 85 00 08 */ stw r4, 8(r5) -/* 8035AD08 80 65 00 08 */ lwz r3, 8(r5) -/* 8035AD0C 50 03 1F 38 */ rlwimi r3, r0, 3, 0x1c, 0x1c -/* 8035AD10 90 65 00 08 */ stw r3, 8(r5) -/* 8035AD14 80 05 00 08 */ lwz r0, 8(r5) -/* 8035AD18 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035AD1C B0 03 00 02 */ sth r0, 2(r3) -/* 8035AD20 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXFifo/__GXWriteFifoIntReset.s b/asm/dolphin/gx/GXFifo/__GXWriteFifoIntReset.s deleted file mode 100644 index a9aaca9582b..00000000000 --- a/asm/dolphin/gx/GXFifo/__GXWriteFifoIntReset.s +++ /dev/null @@ -1,13 +0,0 @@ -lbl_8035AD24: -/* 8035AD24 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035AD28 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035AD2C 80 85 00 10 */ lwz r4, 0x10(r5) -/* 8035AD30 50 64 07 FE */ rlwimi r4, r3, 0, 0x1f, 0x1f -/* 8035AD34 90 85 00 10 */ stw r4, 0x10(r5) -/* 8035AD38 80 65 00 10 */ lwz r3, 0x10(r5) -/* 8035AD3C 50 03 0F BC */ rlwimi r3, r0, 1, 0x1e, 0x1e -/* 8035AD40 90 65 00 10 */ stw r3, 0x10(r5) -/* 8035AD44 80 05 00 10 */ lwz r0, 0x10(r5) -/* 8035AD48 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 8035AD4C B0 03 00 04 */ sth r0, 4(r3) -/* 8035AD50 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXInit/__GXDefaultTexRegionCallback.s b/asm/dolphin/gx/GXInit/__GXDefaultTexRegionCallback.s deleted file mode 100644 index 58bbc6ce0f4..00000000000 --- a/asm/dolphin/gx/GXInit/__GXDefaultTexRegionCallback.s +++ /dev/null @@ -1,71 +0,0 @@ -lbl_8035921C: -/* 8035921C 7C 08 02 A6 */ mflr r0 -/* 80359220 90 01 00 04 */ stw r0, 4(r1) -/* 80359224 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80359228 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8035922C 93 C1 00 18 */ stw r30, 0x18(r1) -/* 80359230 93 A1 00 14 */ stw r29, 0x14(r1) -/* 80359234 7C 7D 1B 78 */ mr r29, r3 -/* 80359238 7C 9E 23 78 */ mr r30, r4 -/* 8035923C 7F A3 EB 78 */ mr r3, r29 -/* 80359240 48 00 50 19 */ bl GXGetTexObjFmt -/* 80359244 7C 7F 1B 78 */ mr r31, r3 -/* 80359248 7F A3 EB 78 */ mr r3, r29 -/* 8035924C 48 00 50 2D */ bl GXGetTexObjMipMap -/* 80359250 7F C4 1E 70 */ srawi r4, r30, 3 -/* 80359254 7C 84 01 94 */ addze r4, r4 -/* 80359258 54 84 18 38 */ slwi r4, r4, 3 -/* 8035925C 2C 1F 00 07 */ cmpwi r31, 7 -/* 80359260 7C 84 F0 10 */ subfc r4, r4, r30 -/* 80359264 41 82 00 68 */ beq lbl_803592CC -/* 80359268 40 80 00 10 */ bge lbl_80359278 -/* 8035926C 2C 1F 00 06 */ cmpwi r31, 6 -/* 80359270 40 80 00 14 */ bge lbl_80359284 -/* 80359274 48 00 00 58 */ b lbl_803592CC -lbl_80359278: -/* 80359278 2C 1F 00 0B */ cmpwi r31, 0xb -/* 8035927C 40 80 00 50 */ bge lbl_803592CC -/* 80359280 48 00 00 38 */ b lbl_803592B8 -lbl_80359284: -/* 80359284 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 80359288 28 00 00 00 */ cmplwi r0, 0 -/* 8035928C 41 82 00 18 */ beq lbl_803592A4 -/* 80359290 54 83 20 36 */ slwi r3, r4, 4 -/* 80359294 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 80359298 38 63 03 08 */ addi r3, r3, 0x308 -/* 8035929C 7C 60 1A 14 */ add r3, r0, r3 -/* 803592A0 48 00 00 5C */ b lbl_803592FC -lbl_803592A4: -/* 803592A4 54 83 20 36 */ slwi r3, r4, 4 -/* 803592A8 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 803592AC 38 63 02 88 */ addi r3, r3, 0x288 -/* 803592B0 7C 60 1A 14 */ add r3, r0, r3 -/* 803592B4 48 00 00 48 */ b lbl_803592FC -lbl_803592B8: -/* 803592B8 54 83 20 36 */ slwi r3, r4, 4 -/* 803592BC 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 803592C0 38 63 02 08 */ addi r3, r3, 0x208 -/* 803592C4 7C 60 1A 14 */ add r3, r0, r3 -/* 803592C8 48 00 00 34 */ b lbl_803592FC -lbl_803592CC: -/* 803592CC 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 803592D0 28 00 00 00 */ cmplwi r0, 0 -/* 803592D4 41 82 00 18 */ beq lbl_803592EC -/* 803592D8 54 83 20 36 */ slwi r3, r4, 4 -/* 803592DC 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 803592E0 38 63 02 88 */ addi r3, r3, 0x288 -/* 803592E4 7C 60 1A 14 */ add r3, r0, r3 -/* 803592E8 48 00 00 14 */ b lbl_803592FC -lbl_803592EC: -/* 803592EC 54 83 20 36 */ slwi r3, r4, 4 -/* 803592F0 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 803592F4 38 63 02 08 */ addi r3, r3, 0x208 -/* 803592F8 7C 60 1A 14 */ add r3, r0, r3 -lbl_803592FC: -/* 803592FC 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80359300 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80359304 83 C1 00 18 */ lwz r30, 0x18(r1) -/* 80359308 83 A1 00 14 */ lwz r29, 0x14(r1) -/* 8035930C 38 21 00 20 */ addi r1, r1, 0x20 -/* 80359310 7C 08 03 A6 */ mtlr r0 -/* 80359314 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXInit/__GXInitRevisionBits.s b/asm/dolphin/gx/GXInit/__GXInitRevisionBits.s deleted file mode 100644 index 5904d0ceeb5..00000000000 --- a/asm/dolphin/gx/GXInit/__GXInitRevisionBits.s +++ /dev/null @@ -1,109 +0,0 @@ -lbl_803594CC: -/* 803594CC 39 60 00 00 */ li r11, 0 -/* 803594D0 55 6A 10 3A */ slwi r10, r11, 2 -/* 803594D4 48 00 00 04 */ b lbl_803594D8 -lbl_803594D8: -/* 803594D8 38 00 00 02 */ li r0, 2 -/* 803594DC 7C 09 03 A6 */ mtctr r0 -/* 803594E0 38 E0 00 01 */ li r7, 1 -/* 803594E4 38 A0 00 08 */ li r5, 8 -/* 803594E8 3C 80 CC 01 */ lis r4, 0xcc01 -/* 803594EC 48 00 00 04 */ b lbl_803594F0 -lbl_803594F0: -/* 803594F0 48 00 00 04 */ b lbl_803594F4 -lbl_803594F4: -/* 803594F4 81 22 CB 80 */ lwz r9, __GXData(r2) -/* 803594F8 39 0A 00 1C */ addi r8, r10, 0x1c -/* 803594FC 38 CA 00 3C */ addi r6, r10, 0x3c -/* 80359500 7C 09 40 2E */ lwzx r0, r9, r8 -/* 80359504 50 E0 F0 42 */ rlwimi r0, r7, 0x1e, 1, 1 -/* 80359508 61 63 00 80 */ ori r3, r11, 0x80 -/* 8035950C 7C 09 41 2E */ stwx r0, r9, r8 -/* 80359510 39 4A 00 04 */ addi r10, r10, 4 -/* 80359514 39 0A 00 1C */ addi r8, r10, 0x1c -/* 80359518 7C 09 30 2E */ lwzx r0, r9, r6 -/* 8035951C 50 E0 F8 00 */ rlwimi r0, r7, 0x1f, 0, 0 -/* 80359520 39 6B 00 01 */ addi r11, r11, 1 -/* 80359524 7C 09 31 2E */ stwx r0, r9, r6 -/* 80359528 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 8035952C 98 64 80 00 */ stb r3, -0x8000(r4) -/* 80359530 61 63 00 80 */ ori r3, r11, 0x80 -/* 80359534 39 6B 00 01 */ addi r11, r11, 1 -/* 80359538 7C 09 30 2E */ lwzx r0, r9, r6 -/* 8035953C 38 CA 00 3C */ addi r6, r10, 0x3c -/* 80359540 39 4A 00 04 */ addi r10, r10, 4 -/* 80359544 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80359548 7C 09 40 2E */ lwzx r0, r9, r8 -/* 8035954C 50 E0 F0 42 */ rlwimi r0, r7, 0x1e, 1, 1 -/* 80359550 7C 09 41 2E */ stwx r0, r9, r8 -/* 80359554 39 0A 00 1C */ addi r8, r10, 0x1c -/* 80359558 7C 09 30 2E */ lwzx r0, r9, r6 -/* 8035955C 50 E0 F8 00 */ rlwimi r0, r7, 0x1f, 0, 0 -/* 80359560 7C 09 31 2E */ stwx r0, r9, r6 -/* 80359564 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 80359568 98 64 80 00 */ stb r3, -0x8000(r4) -/* 8035956C 61 63 00 80 */ ori r3, r11, 0x80 -/* 80359570 39 6B 00 01 */ addi r11, r11, 1 -/* 80359574 7C 09 30 2E */ lwzx r0, r9, r6 -/* 80359578 38 CA 00 3C */ addi r6, r10, 0x3c -/* 8035957C 39 4A 00 04 */ addi r10, r10, 4 -/* 80359580 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80359584 7C 09 40 2E */ lwzx r0, r9, r8 -/* 80359588 50 E0 F0 42 */ rlwimi r0, r7, 0x1e, 1, 1 -/* 8035958C 7C 09 41 2E */ stwx r0, r9, r8 -/* 80359590 39 0A 00 1C */ addi r8, r10, 0x1c -/* 80359594 7C 09 30 2E */ lwzx r0, r9, r6 -/* 80359598 50 E0 F8 00 */ rlwimi r0, r7, 0x1f, 0, 0 -/* 8035959C 7C 09 31 2E */ stwx r0, r9, r6 -/* 803595A0 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 803595A4 98 64 80 00 */ stb r3, -0x8000(r4) -/* 803595A8 61 63 00 80 */ ori r3, r11, 0x80 -/* 803595AC 39 6B 00 01 */ addi r11, r11, 1 -/* 803595B0 7C 09 30 2E */ lwzx r0, r9, r6 -/* 803595B4 38 CA 00 3C */ addi r6, r10, 0x3c -/* 803595B8 39 4A 00 04 */ addi r10, r10, 4 -/* 803595BC 90 04 80 00 */ stw r0, -0x8000(r4) -/* 803595C0 7C 09 40 2E */ lwzx r0, r9, r8 -/* 803595C4 50 E0 F0 42 */ rlwimi r0, r7, 0x1e, 1, 1 -/* 803595C8 7C 09 41 2E */ stwx r0, r9, r8 -/* 803595CC 7C 09 30 2E */ lwzx r0, r9, r6 -/* 803595D0 50 E0 F8 00 */ rlwimi r0, r7, 0x1f, 0, 0 -/* 803595D4 7C 09 31 2E */ stwx r0, r9, r6 -/* 803595D8 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 803595DC 98 64 80 00 */ stb r3, -0x8000(r4) -/* 803595E0 7C 09 30 2E */ lwzx r0, r9, r6 -/* 803595E4 90 04 80 00 */ stw r0, -0x8000(r4) -/* 803595E8 42 00 FF 0C */ bdnz lbl_803594F4 -/* 803595EC 38 60 00 01 */ li r3, 1 -/* 803595F0 38 00 00 00 */ li r0, 0 -/* 803595F4 50 60 07 FE */ rlwimi r0, r3, 0, 0x1f, 0x1f -/* 803595F8 7C 07 03 78 */ mr r7, r0 -/* 803595FC 38 00 00 00 */ li r0, 0 -/* 80359600 50 60 07 FE */ rlwimi r0, r3, 0, 0x1f, 0x1f -/* 80359604 7C 08 03 78 */ mr r8, r0 -/* 80359608 50 67 0F BC */ rlwimi r7, r3, 1, 0x1e, 0x1e -/* 8035960C 50 67 17 7A */ rlwimi r7, r3, 2, 0x1d, 0x1d -/* 80359610 50 67 1F 38 */ rlwimi r7, r3, 3, 0x1c, 0x1c -/* 80359614 50 67 26 F6 */ rlwimi r7, r3, 4, 0x1b, 0x1b -/* 80359618 39 20 00 00 */ li r9, 0 -/* 8035961C 38 C0 00 10 */ li r6, 0x10 -/* 80359620 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80359624 50 68 0F BC */ rlwimi r8, r3, 1, 0x1e, 0x1e -/* 80359628 98 C5 80 00 */ stb r6, 0x8000(r5) /* 0xCC008000@l */ -/* 8035962C 38 00 10 00 */ li r0, 0x1000 -/* 80359630 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80359634 50 67 2E B4 */ rlwimi r7, r3, 5, 0x1a, 0x1a -/* 80359638 50 68 17 7A */ rlwimi r8, r3, 2, 0x1d, 0x1d -/* 8035963C 90 E5 80 00 */ stw r7, -0x8000(r5) -/* 80359640 38 80 10 12 */ li r4, 0x1012 -/* 80359644 50 69 07 FE */ rlwimi r9, r3, 0, 0x1f, 0x1f -/* 80359648 98 C5 80 00 */ stb r6, -0x8000(r5) -/* 8035964C 50 68 1F 38 */ rlwimi r8, r3, 3, 0x1c, 0x1c -/* 80359650 38 60 00 58 */ li r3, 0x58 -/* 80359654 90 85 80 00 */ stw r4, -0x8000(r5) -/* 80359658 38 00 00 61 */ li r0, 0x61 -/* 8035965C 50 68 C0 0E */ rlwimi r8, r3, 0x18, 0, 7 -/* 80359660 91 25 80 00 */ stw r9, -0x8000(r5) -/* 80359664 98 05 80 00 */ stb r0, -0x8000(r5) -/* 80359668 91 05 80 00 */ stw r8, -0x8000(r5) -/* 8035966C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXInit/__GXShutdown.s b/asm/dolphin/gx/GXInit/__GXShutdown.s deleted file mode 100644 index a289a7ddac1..00000000000 --- a/asm/dolphin/gx/GXInit/__GXShutdown.s +++ /dev/null @@ -1,110 +0,0 @@ -lbl_8035933C: -/* 8035933C 7C 08 02 A6 */ mflr r0 -/* 80359340 90 01 00 04 */ stw r0, 4(r1) -/* 80359344 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80359348 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8035934C 2C 03 00 00 */ cmpwi r3, 0 -/* 80359350 40 82 00 FC */ bne lbl_8035944C -/* 80359354 80 0D 93 C0 */ lwz r0, calledOnce(r13) -/* 80359358 28 00 00 00 */ cmplwi r0, 0 -/* 8035935C 40 82 00 58 */ bne lbl_803593B4 -/* 80359360 80 6D 93 AC */ lwz r3, __memReg(r13) -/* 80359364 38 C3 00 4E */ addi r6, r3, 0x4e -/* 80359368 A0 86 00 00 */ lhz r4, 0(r6) -/* 8035936C 38 A3 00 50 */ addi r5, r3, 0x50 -/* 80359370 48 00 00 04 */ b lbl_80359374 -lbl_80359374: -/* 80359374 48 00 00 04 */ b lbl_80359378 -lbl_80359378: -/* 80359378 7C 80 23 78 */ mr r0, r4 -/* 8035937C A0 86 00 00 */ lhz r4, 0(r6) -/* 80359380 A0 65 00 00 */ lhz r3, 0(r5) -/* 80359384 7C 04 00 40 */ cmplw r4, r0 -/* 80359388 40 82 FF F0 */ bne lbl_80359378 -/* 8035938C 54 80 80 1E */ slwi r0, r4, 0x10 -/* 80359390 7C 00 1B 78 */ or r0, r0, r3 -/* 80359394 90 0D 93 B0 */ stw r0, peCount(r13) -/* 80359398 4B FE 93 65 */ bl OSGetTime -/* 8035939C 90 8D 93 BC */ stw r4, data_8045193C(r13) -/* 803593A0 38 00 00 01 */ li r0, 1 -/* 803593A4 90 6D 93 B8 */ stw r3, time(r13) -/* 803593A8 38 60 00 00 */ li r3, 0 -/* 803593AC 90 0D 93 C0 */ stw r0, calledOnce(r13) -/* 803593B0 48 00 01 08 */ b lbl_803594B8 -lbl_803593B4: -/* 803593B4 4B FE 93 49 */ bl OSGetTime -/* 803593B8 80 AD 93 AC */ lwz r5, __memReg(r13) -/* 803593BC 38 C5 00 4E */ addi r6, r5, 0x4e -/* 803593C0 A0 E6 00 00 */ lhz r7, 0(r6) -/* 803593C4 38 A5 00 50 */ addi r5, r5, 0x50 -/* 803593C8 48 00 00 04 */ b lbl_803593CC -lbl_803593CC: -/* 803593CC 48 00 00 04 */ b lbl_803593D0 -lbl_803593D0: -/* 803593D0 7C E0 3B 78 */ mr r0, r7 -/* 803593D4 A0 E6 00 00 */ lhz r7, 0(r6) -/* 803593D8 A1 45 00 00 */ lhz r10, 0(r5) -/* 803593DC 7C 07 00 40 */ cmplw r7, r0 -/* 803593E0 40 82 FF F0 */ bne lbl_803593D0 -/* 803593E4 80 CD 93 BC */ lwz r6, data_8045193C(r13) -/* 803593E8 38 00 00 00 */ li r0, 0 -/* 803593EC 80 AD 93 B8 */ lwz r5, time(r13) -/* 803593F0 54 E9 80 1E */ slwi r9, r7, 0x10 -/* 803593F4 7D 06 20 10 */ subfc r8, r6, r4 -/* 803593F8 7C A5 19 10 */ subfe r5, r5, r3 -/* 803593FC 38 E0 00 0A */ li r7, 0xa -/* 80359400 6C A6 80 00 */ xoris r6, r5, 0x8000 -/* 80359404 6C 05 80 00 */ xoris r5, r0, 0x8000 -/* 80359408 7C 07 40 10 */ subfc r0, r7, r8 -/* 8035940C 7C A5 31 10 */ subfe r5, r5, r6 -/* 80359410 7C A6 31 10 */ subfe r5, r6, r6 -/* 80359414 7C A5 00 D0 */ neg r5, r5 -/* 80359418 2C 05 00 00 */ cmpwi r5, 0 -/* 8035941C 7D 25 53 78 */ or r5, r9, r10 -/* 80359420 41 82 00 0C */ beq lbl_8035942C -/* 80359424 38 60 00 00 */ li r3, 0 -/* 80359428 48 00 00 90 */ b lbl_803594B8 -lbl_8035942C: -/* 8035942C 80 0D 93 B0 */ lwz r0, peCount(r13) -/* 80359430 7C 05 00 40 */ cmplw r5, r0 -/* 80359434 41 82 00 80 */ beq lbl_803594B4 -/* 80359438 90 8D 93 BC */ stw r4, data_8045193C(r13) -/* 8035943C 90 6D 93 B8 */ stw r3, time(r13) -/* 80359440 38 60 00 00 */ li r3, 0 -/* 80359444 90 AD 93 B0 */ stw r5, peCount(r13) -/* 80359448 48 00 00 70 */ b lbl_803594B8 -lbl_8035944C: -/* 8035944C 38 60 00 00 */ li r3, 0 -/* 80359450 48 00 17 99 */ bl GXSetBreakPtCallback -/* 80359454 38 60 00 00 */ li r3, 0 -/* 80359458 48 00 30 89 */ bl GXSetDrawSyncCallback -/* 8035945C 38 60 00 00 */ li r3, 0 -/* 80359460 48 00 31 4D */ bl GXSetDrawDoneCallback -/* 80359464 3B E0 00 00 */ li r31, 0 -/* 80359468 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035946C 93 E3 80 00 */ stw r31, 0x8000(r3) /* 0xCC008000@l */ -/* 80359470 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 80359474 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 80359478 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035947C 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 80359480 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 80359484 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 80359488 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035948C 4B FE 08 6D */ bl PPCSync -/* 80359490 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80359494 38 80 00 03 */ li r4, 3 -/* 80359498 38 00 00 01 */ li r0, 1 -/* 8035949C B3 E3 00 02 */ sth r31, 2(r3) -/* 803594A0 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 803594A4 B0 83 00 04 */ sth r4, 4(r3) -/* 803594A8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 803594AC 98 03 05 AA */ stb r0, 0x5aa(r3) -/* 803594B0 48 00 2A 79 */ bl __GXAbort -lbl_803594B4: -/* 803594B4 38 60 00 01 */ li r3, 1 -lbl_803594B8: -/* 803594B8 80 01 00 24 */ lwz r0, 0x24(r1) -/* 803594BC 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 803594C0 38 21 00 20 */ addi r1, r1, 0x20 -/* 803594C4 7C 08 03 A6 */ mtlr r0 -/* 803594C8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXDrawDone.s b/asm/dolphin/gx/GXMisc/GXDrawDone.s deleted file mode 100644 index 5923c061ff4..00000000000 --- a/asm/dolphin/gx/GXMisc/GXDrawDone.s +++ /dev/null @@ -1,35 +0,0 @@ -lbl_8035C2F4: -/* 8035C2F4 7C 08 02 A6 */ mflr r0 -/* 8035C2F8 90 01 00 04 */ stw r0, 4(r1) -/* 8035C2FC 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035C300 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035C304 4B FE 13 F1 */ bl OSDisableInterrupts -/* 8035C308 38 00 00 61 */ li r0, 0x61 -/* 8035C30C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035C310 3C 80 45 00 */ lis r4, 0x4500 /* 0x45000002@ha */ -/* 8035C314 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035C318 38 04 00 02 */ addi r0, r4, 0x0002 /* 0x45000002@l */ -/* 8035C31C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 8035C320 7C 7F 1B 78 */ mr r31, r3 -/* 8035C324 4B FF FB A9 */ bl GXFlush -/* 8035C328 38 00 00 00 */ li r0, 0 -/* 8035C32C 98 0D 93 F0 */ stb r0, data_80451970(r13) -/* 8035C330 7F E3 FB 78 */ mr r3, r31 -/* 8035C334 4B FE 13 E9 */ bl OSRestoreInterrupts -/* 8035C338 4B FE 13 BD */ bl OSDisableInterrupts -/* 8035C33C 7C 7F 1B 78 */ mr r31, r3 -/* 8035C340 48 00 00 0C */ b lbl_8035C34C -lbl_8035C344: -/* 8035C344 38 6D 93 F4 */ la r3, FinishQueue(r13) /* 80451974-_SDA_BASE_ */ -/* 8035C348 4B FE 58 65 */ bl OSSleepThread -lbl_8035C34C: -/* 8035C34C 88 0D 93 F0 */ lbz r0, data_80451970(r13) -/* 8035C350 28 00 00 00 */ cmplwi r0, 0 -/* 8035C354 41 82 FF F0 */ beq lbl_8035C344 -/* 8035C358 7F E3 FB 78 */ mr r3, r31 -/* 8035C35C 4B FE 13 C1 */ bl OSRestoreInterrupts -/* 8035C360 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035C364 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035C368 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035C36C 7C 08 03 A6 */ mtlr r0 -/* 8035C370 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXFlush.s b/asm/dolphin/gx/GXMisc/GXFlush.s deleted file mode 100644 index 83df7dbafc9..00000000000 --- a/asm/dolphin/gx/GXMisc/GXFlush.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_8035BECC: -/* 8035BECC 7C 08 02 A6 */ mflr r0 -/* 8035BED0 90 01 00 04 */ stw r0, 4(r1) -/* 8035BED4 94 21 FF F8 */ stwu r1, -8(r1) -/* 8035BED8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035BEDC 80 03 05 AC */ lwz r0, 0x5ac(r3) -/* 8035BEE0 28 00 00 00 */ cmplwi r0, 0 -/* 8035BEE4 41 82 00 08 */ beq lbl_8035BEEC -/* 8035BEE8 48 00 07 FD */ bl __GXSetDirtyState -lbl_8035BEEC: -/* 8035BEEC 38 00 00 00 */ li r0, 0 -/* 8035BEF0 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035BEF4 90 03 80 00 */ stw r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035BEF8 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BEFC 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BF00 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BF04 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BF08 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BF0C 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BF10 90 03 80 00 */ stw r0, -0x8000(r3) -/* 8035BF14 4B FD DD E5 */ bl PPCSync -/* 8035BF18 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8035BF1C 38 21 00 08 */ addi r1, r1, 8 -/* 8035BF20 7C 08 03 A6 */ mtlr r0 -/* 8035BF24 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPeekZ.s b/asm/dolphin/gx/GXMisc/GXPeekZ.s deleted file mode 100644 index a7679e9262d..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPeekZ.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_8035C4BC: -/* 8035C4BC 54 60 04 3E */ clrlwi r0, r3, 0x10 -/* 8035C4C0 3C 60 C8 00 */ lis r3, 0xc800 -/* 8035C4C4 50 03 15 3A */ rlwimi r3, r0, 2, 0x14, 0x1d -/* 8035C4C8 38 00 00 01 */ li r0, 1 -/* 8035C4CC 50 83 62 A6 */ rlwimi r3, r4, 0xc, 0xa, 0x13 -/* 8035C4D0 50 03 B2 12 */ rlwimi r3, r0, 0x16, 8, 9 -/* 8035C4D4 80 03 00 00 */ lwz r0, 0(r3) -/* 8035C4D8 90 05 00 00 */ stw r0, 0(r5) -/* 8035C4DC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPixModeSync.s b/asm/dolphin/gx/GXMisc/GXPixModeSync.s deleted file mode 100644 index 3c820c0c870..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPixModeSync.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_8035C374: -/* 8035C374 38 00 00 61 */ li r0, 0x61 -/* 8035C378 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035C37C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035C380 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035C384 38 00 00 00 */ li r0, 0 -/* 8035C388 80 64 01 DC */ lwz r3, 0x1dc(r4) -/* 8035C38C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 8035C390 B0 04 00 02 */ sth r0, 2(r4) -/* 8035C394 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeAlphaMode.s b/asm/dolphin/gx/GXMisc/GXPokeAlphaMode.s deleted file mode 100644 index 613e3ca4411..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeAlphaMode.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_8035C398: -/* 8035C398 80 AD 93 A8 */ lwz r5, __peReg(r13) -/* 8035C39C 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035C3A0 50 60 40 2E */ rlwimi r0, r3, 8, 0, 0x17 -/* 8035C3A4 B0 05 00 06 */ sth r0, 6(r5) -/* 8035C3A8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeAlphaRead.s b/asm/dolphin/gx/GXMisc/GXPokeAlphaRead.s deleted file mode 100644 index 33e4128897d..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeAlphaRead.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8035C3AC: -/* 8035C3AC 38 A0 00 00 */ li r5, 0 -/* 8035C3B0 80 8D 93 A8 */ lwz r4, __peReg(r13) -/* 8035C3B4 50 65 07 BE */ rlwimi r5, r3, 0, 0x1e, 0x1f -/* 8035C3B8 38 00 00 01 */ li r0, 1 -/* 8035C3BC 38 65 00 00 */ addi r3, r5, 0 -/* 8035C3C0 50 03 17 7A */ rlwimi r3, r0, 2, 0x1d, 0x1d -/* 8035C3C4 B0 64 00 08 */ sth r3, 8(r4) -/* 8035C3C8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeAlphaUpdate.s b/asm/dolphin/gx/GXMisc/GXPokeAlphaUpdate.s deleted file mode 100644 index 250031696e2..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeAlphaUpdate.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_8035C3CC: -/* 8035C3CC 80 8D 93 A8 */ lwz r4, __peReg(r13) -/* 8035C3D0 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035C3D4 A0 64 00 02 */ lhz r3, 2(r4) -/* 8035C3D8 50 03 26 F6 */ rlwimi r3, r0, 4, 0x1b, 0x1b -/* 8035C3DC B0 64 00 02 */ sth r3, 2(r4) -/* 8035C3E0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeColorUpdate.s b/asm/dolphin/gx/GXMisc/GXPokeColorUpdate.s deleted file mode 100644 index 8b38b2cc3a6..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeColorUpdate.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_8035C448: -/* 8035C448 80 8D 93 A8 */ lwz r4, __peReg(r13) -/* 8035C44C 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035C450 A0 64 00 02 */ lhz r3, 2(r4) -/* 8035C454 50 03 1F 38 */ rlwimi r3, r0, 3, 0x1c, 0x1c -/* 8035C458 B0 64 00 02 */ sth r3, 2(r4) -/* 8035C45C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeDither.s b/asm/dolphin/gx/GXMisc/GXPokeDither.s deleted file mode 100644 index bd0c77e28aa..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeDither.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_8035C484: -/* 8035C484 80 8D 93 A8 */ lwz r4, __peReg(r13) -/* 8035C488 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035C48C A0 64 00 02 */ lhz r3, 2(r4) -/* 8035C490 50 03 17 7A */ rlwimi r3, r0, 2, 0x1d, 0x1d -/* 8035C494 B0 64 00 02 */ sth r3, 2(r4) -/* 8035C498 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeDstAlpha.s b/asm/dolphin/gx/GXMisc/GXPokeDstAlpha.s deleted file mode 100644 index 33efefe5e51..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeDstAlpha.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_8035C460: -/* 8035C460 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035C464 80 8D 93 A8 */ lwz r4, __peReg(r13) -/* 8035C468 38 A0 00 00 */ li r5, 0 -/* 8035C46C 50 05 06 3E */ rlwimi r5, r0, 0, 0x18, 0x1f -/* 8035C470 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035C474 38 65 00 00 */ addi r3, r5, 0 -/* 8035C478 50 03 45 EE */ rlwimi r3, r0, 8, 0x17, 0x17 -/* 8035C47C B0 64 00 04 */ sth r3, 4(r4) -/* 8035C480 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXPokeZMode.s b/asm/dolphin/gx/GXMisc/GXPokeZMode.s deleted file mode 100644 index 5e1f738752f..00000000000 --- a/asm/dolphin/gx/GXMisc/GXPokeZMode.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8035C49C: -/* 8035C49C 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035C4A0 80 6D 93 A8 */ lwz r3, __peReg(r13) -/* 8035C4A4 38 C0 00 00 */ li r6, 0 -/* 8035C4A8 50 06 07 FE */ rlwimi r6, r0, 0, 0x1f, 0x1f -/* 8035C4AC 50 86 0F 3C */ rlwimi r6, r4, 1, 0x1c, 0x1e -/* 8035C4B0 50 A6 26 F6 */ rlwimi r6, r5, 4, 0x1b, 0x1b -/* 8035C4B4 B0 C3 00 00 */ sth r6, 0(r3) -/* 8035C4B8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXSetDrawDone.s b/asm/dolphin/gx/GXMisc/GXSetDrawDone.s deleted file mode 100644 index 1542c8f2513..00000000000 --- a/asm/dolphin/gx/GXMisc/GXSetDrawDone.s +++ /dev/null @@ -1,40 +0,0 @@ -lbl_8035C25C: -/* 8035C25C 7C 08 02 A6 */ mflr r0 -/* 8035C260 90 01 00 04 */ stw r0, 4(r1) -/* 8035C264 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035C268 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035C26C 93 C1 00 10 */ stw r30, 0x10(r1) -/* 8035C270 4B FE 14 85 */ bl OSDisableInterrupts -/* 8035C274 38 00 00 61 */ li r0, 0x61 -/* 8035C278 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035C27C 3C C0 CC 01 */ lis r6, 0xCC01 /* 0xCC008000@ha */ -/* 8035C280 3C A0 45 00 */ lis r5, 0x4500 /* 0x45000002@ha */ -/* 8035C284 98 06 80 00 */ stb r0, 0x8000(r6) /* 0xCC008000@l */ -/* 8035C288 38 05 00 02 */ addi r0, r5, 0x0002 /* 0x45000002@l */ -/* 8035C28C 90 06 80 00 */ stw r0, -0x8000(r6) -/* 8035C290 7C 7E 1B 78 */ mr r30, r3 -/* 8035C294 80 04 05 AC */ lwz r0, 0x5ac(r4) -/* 8035C298 28 00 00 00 */ cmplwi r0, 0 -/* 8035C29C 41 82 00 08 */ beq lbl_8035C2A4 -/* 8035C2A0 48 00 04 45 */ bl __GXSetDirtyState -lbl_8035C2A4: -/* 8035C2A4 3B E0 00 00 */ li r31, 0 -/* 8035C2A8 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035C2AC 93 E3 80 00 */ stw r31, 0x8000(r3) /* 0xCC008000@l */ -/* 8035C2B0 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2B4 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2B8 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2BC 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2C0 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2C4 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2C8 93 E3 80 00 */ stw r31, -0x8000(r3) -/* 8035C2CC 4B FD DA 2D */ bl PPCSync -/* 8035C2D0 9B ED 93 F0 */ stb r31, data_80451970(r13) -/* 8035C2D4 7F C3 F3 78 */ mr r3, r30 -/* 8035C2D8 4B FE 14 45 */ bl OSRestoreInterrupts -/* 8035C2DC 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035C2E0 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035C2E4 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 8035C2E8 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035C2EC 7C 08 03 A6 */ mtlr r0 -/* 8035C2F0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXSetDrawDoneCallback.s b/asm/dolphin/gx/GXMisc/GXSetDrawDoneCallback.s deleted file mode 100644 index 22afbb3736c..00000000000 --- a/asm/dolphin/gx/GXMisc/GXSetDrawDoneCallback.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8035C5AC: -/* 8035C5AC 7C 08 02 A6 */ mflr r0 -/* 8035C5B0 90 01 00 04 */ stw r0, 4(r1) -/* 8035C5B4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035C5B8 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035C5BC 93 C1 00 10 */ stw r30, 0x10(r1) -/* 8035C5C0 7C 7E 1B 78 */ mr r30, r3 -/* 8035C5C4 83 ED 93 EC */ lwz r31, DrawDoneCB(r13) -/* 8035C5C8 4B FE 11 2D */ bl OSDisableInterrupts -/* 8035C5CC 93 CD 93 EC */ stw r30, DrawDoneCB(r13) -/* 8035C5D0 4B FE 11 4D */ bl OSRestoreInterrupts -/* 8035C5D4 7F E3 FB 78 */ mr r3, r31 -/* 8035C5D8 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035C5DC 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035C5E0 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 8035C5E4 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035C5E8 7C 08 03 A6 */ mtlr r0 -/* 8035C5EC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXSetDrawSyncCallback.s b/asm/dolphin/gx/GXMisc/GXSetDrawSyncCallback.s deleted file mode 100644 index a140e209343..00000000000 --- a/asm/dolphin/gx/GXMisc/GXSetDrawSyncCallback.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8035C4E0: -/* 8035C4E0 7C 08 02 A6 */ mflr r0 -/* 8035C4E4 90 01 00 04 */ stw r0, 4(r1) -/* 8035C4E8 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8035C4EC 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035C4F0 93 C1 00 10 */ stw r30, 0x10(r1) -/* 8035C4F4 7C 7E 1B 78 */ mr r30, r3 -/* 8035C4F8 83 ED 93 E8 */ lwz r31, TokenCB(r13) -/* 8035C4FC 4B FE 11 F9 */ bl OSDisableInterrupts -/* 8035C500 93 CD 93 E8 */ stw r30, TokenCB(r13) -/* 8035C504 4B FE 12 19 */ bl OSRestoreInterrupts -/* 8035C508 7F E3 FB 78 */ mr r3, r31 -/* 8035C50C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8035C510 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035C514 83 C1 00 10 */ lwz r30, 0x10(r1) -/* 8035C518 38 21 00 18 */ addi r1, r1, 0x18 -/* 8035C51C 7C 08 03 A6 */ mtlr r0 -/* 8035C520 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/GXSetMisc.s b/asm/dolphin/gx/GXMisc/GXSetMisc.s deleted file mode 100644 index 4f6b775b238..00000000000 --- a/asm/dolphin/gx/GXMisc/GXSetMisc.s +++ /dev/null @@ -1,42 +0,0 @@ -lbl_8035BE38: -/* 8035BE38 2C 03 00 02 */ cmpwi r3, 2 -/* 8035BE3C 41 82 00 60 */ beq lbl_8035BE9C -/* 8035BE40 40 80 00 14 */ bge lbl_8035BE54 -/* 8035BE44 2C 03 00 00 */ cmpwi r3, 0 -/* 8035BE48 4D 82 00 20 */ beqlr -/* 8035BE4C 40 80 00 14 */ bge lbl_8035BE60 -/* 8035BE50 4E 80 00 20 */ blr -lbl_8035BE54: -/* 8035BE54 2C 03 00 04 */ cmpwi r3, 4 -/* 8035BE58 4C 80 00 20 */ bgelr -/* 8035BE5C 48 00 00 58 */ b lbl_8035BEB4 -lbl_8035BE60: -/* 8035BE60 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035BE64 38 00 00 01 */ li r0, 1 -/* 8035BE68 B0 85 00 04 */ sth r4, 4(r5) -/* 8035BE6C A0 65 00 04 */ lhz r3, 4(r5) -/* 8035BE70 7C 63 00 34 */ cntlzw r3, r3 -/* 8035BE74 54 63 DC 3E */ rlwinm r3, r3, 0x1b, 0x10, 0x1f -/* 8035BE78 B0 65 00 00 */ sth r3, 0(r5) -/* 8035BE7C B0 05 00 02 */ sth r0, 2(r5) -/* 8035BE80 A0 05 00 04 */ lhz r0, 4(r5) -/* 8035BE84 28 00 00 00 */ cmplwi r0, 0 -/* 8035BE88 4D 82 00 20 */ beqlr -/* 8035BE8C 80 05 05 AC */ lwz r0, 0x5ac(r5) -/* 8035BE90 60 00 00 08 */ ori r0, r0, 8 -/* 8035BE94 90 05 05 AC */ stw r0, 0x5ac(r5) -/* 8035BE98 4E 80 00 20 */ blr -lbl_8035BE9C: -/* 8035BE9C 7C 84 00 D0 */ neg r4, r4 -/* 8035BEA0 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035BEA4 30 04 FF FF */ addic r0, r4, -1 -/* 8035BEA8 7C 00 21 10 */ subfe r0, r0, r4 -/* 8035BEAC 98 03 05 A9 */ stb r0, 0x5a9(r3) -/* 8035BEB0 4E 80 00 20 */ blr -lbl_8035BEB4: -/* 8035BEB4 7C 84 00 D0 */ neg r4, r4 -/* 8035BEB8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035BEBC 30 04 FF FF */ addic r0, r4, -1 -/* 8035BEC0 7C 00 21 10 */ subfe r0, r0, r4 -/* 8035BEC4 98 03 05 AA */ stb r0, 0x5aa(r3) -/* 8035BEC8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXMisc/__GXPEInit.s b/asm/dolphin/gx/GXMisc/__GXPEInit.s deleted file mode 100644 index a4aef45a47e..00000000000 --- a/asm/dolphin/gx/GXMisc/__GXPEInit.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_8035C670: -/* 8035C670 7C 08 02 A6 */ mflr r0 -/* 8035C674 3C 60 80 36 */ lis r3, GXTokenInterruptHandler@ha /* 0x8035C524@ha */ -/* 8035C678 90 01 00 04 */ stw r0, 4(r1) -/* 8035C67C 38 83 C5 24 */ addi r4, r3, GXTokenInterruptHandler@l /* 0x8035C524@l */ -/* 8035C680 38 60 00 12 */ li r3, 0x12 -/* 8035C684 94 21 FF F8 */ stwu r1, -8(r1) -/* 8035C688 4B FE 10 B9 */ bl __OSSetInterruptHandler -/* 8035C68C 3C 60 80 36 */ lis r3, GXFinishInterruptHandler@ha /* 0x8035C5F0@ha */ -/* 8035C690 38 83 C5 F0 */ addi r4, r3, GXFinishInterruptHandler@l /* 0x8035C5F0@l */ -/* 8035C694 38 60 00 13 */ li r3, 0x13 -/* 8035C698 4B FE 10 A9 */ bl __OSSetInterruptHandler -/* 8035C69C 38 6D 93 F4 */ la r3, FinishQueue(r13) /* 80451974-_SDA_BASE_ */ -/* 8035C6A0 4B FE 45 D5 */ bl OSInitThreadQueue -/* 8035C6A4 38 60 20 00 */ li r3, 0x2000 -/* 8035C6A8 4B FE 14 9D */ bl __OSUnmaskInterrupts -/* 8035C6AC 38 60 10 00 */ li r3, 0x1000 -/* 8035C6B0 4B FE 14 95 */ bl __OSUnmaskInterrupts -/* 8035C6B4 80 6D 93 A8 */ lwz r3, __peReg(r13) -/* 8035C6B8 38 00 00 01 */ li r0, 1 -/* 8035C6BC A0 83 00 0A */ lhz r4, 0xa(r3) -/* 8035C6C0 50 04 17 7A */ rlwimi r4, r0, 2, 0x1d, 0x1d -/* 8035C6C4 50 04 1F 38 */ rlwimi r4, r0, 3, 0x1c, 0x1c -/* 8035C6C8 50 04 07 FE */ rlwimi r4, r0, 0, 0x1f, 0x1f -/* 8035C6CC 50 04 0F BC */ rlwimi r4, r0, 1, 0x1e, 0x1e -/* 8035C6D0 B0 83 00 0A */ sth r4, 0xa(r3) -/* 8035C6D4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8035C6D8 38 21 00 08 */ addi r1, r1, 8 -/* 8035C6DC 7C 08 03 A6 */ mtlr r0 -/* 8035C6E0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPerf/GXClearGPMetric.s b/asm/dolphin/gx/GXPerf/GXClearGPMetric.s deleted file mode 100644 index b478425ba03..00000000000 --- a/asm/dolphin/gx/GXPerf/GXClearGPMetric.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80360EC4: -/* 80360EC4 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80360EC8 38 00 00 04 */ li r0, 4 -/* 80360ECC B0 03 00 04 */ sth r0, 4(r3) -/* 80360ED0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPerf/GXReadXfRasMetric.s b/asm/dolphin/gx/GXPerf/GXReadXfRasMetric.s deleted file mode 100644 index e1470c61eb4..00000000000 --- a/asm/dolphin/gx/GXPerf/GXReadXfRasMetric.s +++ /dev/null @@ -1,54 +0,0 @@ -lbl_80360ED4: -/* 80360ED4 80 ED 93 A4 */ lwz r7, __cpReg(r13) -/* 80360ED8 39 47 00 42 */ addi r10, r7, 0x42 -/* 80360EDC A1 07 00 42 */ lhz r8, 0x42(r7) -/* 80360EE0 39 27 00 40 */ addi r9, r7, 0x40 -lbl_80360EE4: -/* 80360EE4 7D 00 43 78 */ mr r0, r8 -/* 80360EE8 A0 E9 00 00 */ lhz r7, 0(r9) -/* 80360EEC A1 0A 00 00 */ lhz r8, 0(r10) -/* 80360EF0 7C 08 00 40 */ cmplw r8, r0 -/* 80360EF4 40 82 FF F0 */ bne lbl_80360EE4 -/* 80360EF8 55 00 80 1E */ slwi r0, r8, 0x10 -/* 80360EFC 7C 00 3B 78 */ or r0, r0, r7 -/* 80360F00 90 05 00 00 */ stw r0, 0(r5) -/* 80360F04 80 AD 93 A4 */ lwz r5, __cpReg(r13) -/* 80360F08 39 25 00 46 */ addi r9, r5, 0x46 -/* 80360F0C A0 E5 00 46 */ lhz r7, 0x46(r5) -/* 80360F10 39 05 00 44 */ addi r8, r5, 0x44 -lbl_80360F14: -/* 80360F14 7C E0 3B 78 */ mr r0, r7 -/* 80360F18 A0 A8 00 00 */ lhz r5, 0(r8) -/* 80360F1C A0 E9 00 00 */ lhz r7, 0(r9) -/* 80360F20 7C 07 00 40 */ cmplw r7, r0 -/* 80360F24 40 82 FF F0 */ bne lbl_80360F14 -/* 80360F28 54 E0 80 1E */ slwi r0, r7, 0x10 -/* 80360F2C 7C 00 2B 78 */ or r0, r0, r5 -/* 80360F30 90 06 00 00 */ stw r0, 0(r6) -/* 80360F34 80 AD 93 A4 */ lwz r5, __cpReg(r13) -/* 80360F38 39 05 00 4A */ addi r8, r5, 0x4a -/* 80360F3C A0 C5 00 4A */ lhz r6, 0x4a(r5) -/* 80360F40 38 E5 00 48 */ addi r7, r5, 0x48 -lbl_80360F44: -/* 80360F44 7C C0 33 78 */ mr r0, r6 -/* 80360F48 A0 A7 00 00 */ lhz r5, 0(r7) -/* 80360F4C A0 C8 00 00 */ lhz r6, 0(r8) -/* 80360F50 7C 06 00 40 */ cmplw r6, r0 -/* 80360F54 40 82 FF F0 */ bne lbl_80360F44 -/* 80360F58 54 C0 80 1E */ slwi r0, r6, 0x10 -/* 80360F5C 7C 00 2B 78 */ or r0, r0, r5 -/* 80360F60 90 03 00 00 */ stw r0, 0(r3) -/* 80360F64 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80360F68 38 E3 00 4E */ addi r7, r3, 0x4e -/* 80360F6C A0 A3 00 4E */ lhz r5, 0x4e(r3) -/* 80360F70 38 C3 00 4C */ addi r6, r3, 0x4c -lbl_80360F74: -/* 80360F74 7C A0 2B 78 */ mr r0, r5 -/* 80360F78 A0 66 00 00 */ lhz r3, 0(r6) -/* 80360F7C A0 A7 00 00 */ lhz r5, 0(r7) -/* 80360F80 7C 05 00 40 */ cmplw r5, r0 -/* 80360F84 40 82 FF F0 */ bne lbl_80360F74 -/* 80360F88 54 A0 80 1E */ slwi r0, r5, 0x10 -/* 80360F8C 7C 00 1B 78 */ or r0, r0, r3 -/* 80360F90 90 04 00 00 */ stw r0, 0(r4) -/* 80360F94 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPerf/GXSetGPMetric.s b/asm/dolphin/gx/GXPerf/GXSetGPMetric.s deleted file mode 100644 index d5f9576983e..00000000000 --- a/asm/dolphin/gx/GXPerf/GXSetGPMetric.s +++ /dev/null @@ -1,543 +0,0 @@ -lbl_8036067C: -/* 8036067C 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 80360680 80 05 05 9C */ lwz r0, 0x59c(r5) -/* 80360684 2C 00 00 22 */ cmpwi r0, 0x22 -/* 80360688 41 82 00 2C */ beq lbl_803606B4 -/* 8036068C 40 80 00 74 */ bge lbl_80360700 -/* 80360690 2C 00 00 0B */ cmpwi r0, 0xb -/* 80360694 40 80 00 10 */ bge lbl_803606A4 -/* 80360698 2C 00 00 00 */ cmpwi r0, 0 -/* 8036069C 40 80 00 18 */ bge lbl_803606B4 -/* 803606A0 48 00 00 60 */ b lbl_80360700 -lbl_803606A4: -/* 803606A4 2C 00 00 1B */ cmpwi r0, 0x1b -/* 803606A8 40 80 00 44 */ bge lbl_803606EC -/* 803606AC 48 00 00 28 */ b lbl_803606D4 -/* 803606B0 48 00 00 50 */ b lbl_80360700 -lbl_803606B4: -/* 803606B4 38 00 00 10 */ li r0, 0x10 -/* 803606B8 3C C0 CC 01 */ lis r6, 0xCC01 /* 0xCC008000@ha */ -/* 803606BC 98 06 80 00 */ stb r0, 0x8000(r6) /* 0xCC008000@l */ -/* 803606C0 38 A0 10 06 */ li r5, 0x1006 -/* 803606C4 38 00 00 00 */ li r0, 0 -/* 803606C8 90 A6 80 00 */ stw r5, -0x8000(r6) -/* 803606CC 90 06 80 00 */ stw r0, -0x8000(r6) -/* 803606D0 48 00 00 30 */ b lbl_80360700 -lbl_803606D4: -/* 803606D4 38 00 00 61 */ li r0, 0x61 -/* 803606D8 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803606DC 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803606E0 3C 00 23 00 */ lis r0, 0x2300 -/* 803606E4 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803606E8 48 00 00 18 */ b lbl_80360700 -lbl_803606EC: -/* 803606EC 38 00 00 61 */ li r0, 0x61 -/* 803606F0 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803606F4 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803606F8 3C 00 24 00 */ lis r0, 0x2400 -/* 803606FC 90 05 80 00 */ stw r0, -0x8000(r5) -lbl_80360700: -/* 80360700 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 80360704 80 06 05 A0 */ lwz r0, 0x5a0(r6) -/* 80360708 2C 00 00 15 */ cmpwi r0, 0x15 -/* 8036070C 41 82 00 2C */ beq lbl_80360738 -/* 80360710 40 80 00 7C */ bge lbl_8036078C -/* 80360714 2C 00 00 09 */ cmpwi r0, 9 -/* 80360718 40 80 00 10 */ bge lbl_80360728 -/* 8036071C 2C 00 00 00 */ cmpwi r0, 0 -/* 80360720 40 80 00 18 */ bge lbl_80360738 -/* 80360724 48 00 00 68 */ b lbl_8036078C -lbl_80360728: -/* 80360728 2C 00 00 11 */ cmpwi r0, 0x11 -/* 8036072C 40 80 00 54 */ bge lbl_80360780 -/* 80360730 48 00 00 20 */ b lbl_80360750 -/* 80360734 48 00 00 58 */ b lbl_8036078C -lbl_80360738: -/* 80360738 38 00 00 61 */ li r0, 0x61 -/* 8036073C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360740 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360744 3C 00 67 00 */ lis r0, 0x6700 -/* 80360748 90 05 80 00 */ stw r0, -0x8000(r5) -/* 8036074C 48 00 00 40 */ b lbl_8036078C -lbl_80360750: -/* 80360750 80 A6 05 A4 */ lwz r5, 0x5a4(r6) -/* 80360754 38 00 00 00 */ li r0, 0 -/* 80360758 50 05 26 36 */ rlwimi r5, r0, 4, 0x18, 0x1b -/* 8036075C 90 A6 05 A4 */ stw r5, 0x5a4(r6) -/* 80360760 38 00 00 08 */ li r0, 8 -/* 80360764 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360768 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8036076C 38 00 00 20 */ li r0, 0x20 -/* 80360770 98 05 80 00 */ stb r0, -0x8000(r5) -/* 80360774 80 06 05 A4 */ lwz r0, 0x5a4(r6) -/* 80360778 90 05 80 00 */ stw r0, -0x8000(r5) -/* 8036077C 48 00 00 10 */ b lbl_8036078C -lbl_80360780: -/* 80360780 80 AD 93 A4 */ lwz r5, __cpReg(r13) -/* 80360784 38 00 00 00 */ li r0, 0 -/* 80360788 B0 05 00 06 */ sth r0, 6(r5) -lbl_8036078C: -/* 8036078C 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 80360790 90 65 05 9C */ stw r3, 0x59c(r5) -/* 80360794 80 05 05 9C */ lwz r0, 0x59c(r5) -/* 80360798 28 00 00 23 */ cmplwi r0, 0x23 -/* 8036079C 41 81 04 1C */ bgt lbl_80360BB8 -/* 803607A0 3C 60 80 3D */ lis r3, lit_181@ha /* 0x803D28B4@ha */ -/* 803607A4 38 63 28 B4 */ addi r3, r3, lit_181@l /* 0x803D28B4@l */ -/* 803607A8 54 00 10 3A */ slwi r0, r0, 2 -/* 803607AC 7C 03 00 2E */ lwzx r0, r3, r0 -/* 803607B0 7C 09 03 A6 */ mtctr r0 -/* 803607B4 4E 80 04 20 */ bctr -/* 803607B8 38 00 00 10 */ li r0, 0x10 -/* 803607BC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803607C0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803607C4 38 60 10 06 */ li r3, 0x1006 -/* 803607C8 38 00 02 73 */ li r0, 0x273 -/* 803607CC 90 65 80 00 */ stw r3, -0x8000(r5) -/* 803607D0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803607D4 48 00 03 E4 */ b lbl_80360BB8 -/* 803607D8 38 00 00 10 */ li r0, 0x10 -/* 803607DC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803607E0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803607E4 38 60 10 06 */ li r3, 0x1006 -/* 803607E8 38 00 01 4A */ li r0, 0x14a -/* 803607EC 90 65 80 00 */ stw r3, -0x8000(r5) -/* 803607F0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803607F4 48 00 03 C4 */ b lbl_80360BB8 -/* 803607F8 38 00 00 10 */ li r0, 0x10 -/* 803607FC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360800 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360804 38 60 10 06 */ li r3, 0x1006 -/* 80360808 38 00 01 6B */ li r0, 0x16b -/* 8036080C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360810 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360814 48 00 03 A4 */ b lbl_80360BB8 -/* 80360818 38 00 00 10 */ li r0, 0x10 -/* 8036081C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360820 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360824 38 60 10 06 */ li r3, 0x1006 -/* 80360828 38 00 00 84 */ li r0, 0x84 -/* 8036082C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360830 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360834 48 00 03 84 */ b lbl_80360BB8 -/* 80360838 38 00 00 10 */ li r0, 0x10 -/* 8036083C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360840 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360844 38 60 10 06 */ li r3, 0x1006 -/* 80360848 38 00 00 C6 */ li r0, 0xc6 -/* 8036084C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360850 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360854 48 00 03 64 */ b lbl_80360BB8 -/* 80360858 38 00 00 10 */ li r0, 0x10 -/* 8036085C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360860 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360864 38 60 10 06 */ li r3, 0x1006 -/* 80360868 38 00 02 10 */ li r0, 0x210 -/* 8036086C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360870 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360874 48 00 03 44 */ b lbl_80360BB8 -/* 80360878 38 00 00 10 */ li r0, 0x10 -/* 8036087C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360880 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360884 38 60 10 06 */ li r3, 0x1006 -/* 80360888 38 00 02 52 */ li r0, 0x252 -/* 8036088C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360890 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360894 48 00 03 24 */ b lbl_80360BB8 -/* 80360898 38 00 00 10 */ li r0, 0x10 -/* 8036089C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803608A0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803608A4 38 60 10 06 */ li r3, 0x1006 -/* 803608A8 38 00 02 31 */ li r0, 0x231 -/* 803608AC 90 65 80 00 */ stw r3, -0x8000(r5) -/* 803608B0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803608B4 48 00 03 04 */ b lbl_80360BB8 -/* 803608B8 38 00 00 10 */ li r0, 0x10 -/* 803608BC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803608C0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803608C4 38 60 10 06 */ li r3, 0x1006 -/* 803608C8 38 00 01 AD */ li r0, 0x1ad -/* 803608CC 90 65 80 00 */ stw r3, -0x8000(r5) -/* 803608D0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803608D4 48 00 02 E4 */ b lbl_80360BB8 -/* 803608D8 38 00 00 10 */ li r0, 0x10 -/* 803608DC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803608E0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803608E4 38 60 10 06 */ li r3, 0x1006 -/* 803608E8 38 00 01 CE */ li r0, 0x1ce -/* 803608EC 90 65 80 00 */ stw r3, -0x8000(r5) -/* 803608F0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803608F4 48 00 02 C4 */ b lbl_80360BB8 -/* 803608F8 38 00 00 10 */ li r0, 0x10 -/* 803608FC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360900 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360904 38 60 10 06 */ li r3, 0x1006 -/* 80360908 38 00 00 21 */ li r0, 0x21 -/* 8036090C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360910 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360914 48 00 02 A4 */ b lbl_80360BB8 -/* 80360918 38 00 00 10 */ li r0, 0x10 -/* 8036091C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360920 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360924 38 60 10 06 */ li r3, 0x1006 -/* 80360928 38 00 01 53 */ li r0, 0x153 -/* 8036092C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360930 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360934 48 00 02 84 */ b lbl_80360BB8 -/* 80360938 38 00 00 61 */ li r0, 0x61 -/* 8036093C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360940 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AE7F@ha */ -/* 80360944 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360948 38 03 AE 7F */ addi r0, r3, 0xAE7F /* 0x2300AE7F@l */ -/* 8036094C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360950 48 00 02 68 */ b lbl_80360BB8 -/* 80360954 38 00 00 61 */ li r0, 0x61 -/* 80360958 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8036095C 3C 60 23 01 */ lis r3, 0x2301 /* 0x23008E7F@ha */ -/* 80360960 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360964 38 03 8E 7F */ addi r0, r3, 0x8E7F /* 0x23008E7F@l */ -/* 80360968 90 05 80 00 */ stw r0, -0x8000(r5) -/* 8036096C 48 00 02 4C */ b lbl_80360BB8 -/* 80360970 38 00 00 61 */ li r0, 0x61 -/* 80360974 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360978 3C 60 23 01 */ lis r3, 0x2301 /* 0x23009E7F@ha */ -/* 8036097C 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360980 38 03 9E 7F */ addi r0, r3, 0x9E7F /* 0x23009E7F@l */ -/* 80360984 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360988 48 00 02 30 */ b lbl_80360BB8 -/* 8036098C 38 00 00 61 */ li r0, 0x61 -/* 80360990 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360994 3C 60 23 00 */ lis r3, 0x2300 /* 0x23001E7F@ha */ -/* 80360998 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8036099C 38 03 1E 7F */ addi r0, r3, 0x1E7F /* 0x23001E7F@l */ -/* 803609A0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803609A4 48 00 02 14 */ b lbl_80360BB8 -/* 803609A8 38 00 00 61 */ li r0, 0x61 -/* 803609AC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803609B0 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AC3F@ha */ -/* 803609B4 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803609B8 38 03 AC 3F */ addi r0, r3, 0xAC3F /* 0x2300AC3F@l */ -/* 803609BC 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803609C0 48 00 01 F8 */ b lbl_80360BB8 -/* 803609C4 38 00 00 61 */ li r0, 0x61 -/* 803609C8 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803609CC 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AC7F@ha */ -/* 803609D0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803609D4 38 03 AC 7F */ addi r0, r3, 0xAC7F /* 0x2300AC7F@l */ -/* 803609D8 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803609DC 48 00 01 DC */ b lbl_80360BB8 -/* 803609E0 38 00 00 61 */ li r0, 0x61 -/* 803609E4 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 803609E8 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300ACBF@ha */ -/* 803609EC 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 803609F0 38 03 AC BF */ addi r0, r3, 0xACBF /* 0x2300ACBF@l */ -/* 803609F4 90 05 80 00 */ stw r0, -0x8000(r5) -/* 803609F8 48 00 01 C0 */ b lbl_80360BB8 -/* 803609FC 38 00 00 61 */ li r0, 0x61 -/* 80360A00 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360A04 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300ACFF@ha */ -/* 80360A08 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360A0C 38 03 AC FF */ addi r0, r3, 0xACFF /* 0x2300ACFF@l */ -/* 80360A10 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360A14 48 00 01 A4 */ b lbl_80360BB8 -/* 80360A18 38 00 00 61 */ li r0, 0x61 -/* 80360A1C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360A20 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AD3F@ha */ -/* 80360A24 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360A28 38 03 AD 3F */ addi r0, r3, 0xAD3F /* 0x2300AD3F@l */ -/* 80360A2C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360A30 48 00 01 88 */ b lbl_80360BB8 -/* 80360A34 38 00 00 61 */ li r0, 0x61 -/* 80360A38 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360A3C 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AD7F@ha */ -/* 80360A40 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360A44 38 03 AD 7F */ addi r0, r3, 0xAD7F /* 0x2300AD7F@l */ -/* 80360A48 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360A4C 48 00 01 6C */ b lbl_80360BB8 -/* 80360A50 38 00 00 61 */ li r0, 0x61 -/* 80360A54 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360A58 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300ADBF@ha */ -/* 80360A5C 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360A60 38 03 AD BF */ addi r0, r3, 0xADBF /* 0x2300ADBF@l */ -/* 80360A64 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360A68 48 00 01 50 */ b lbl_80360BB8 -/* 80360A6C 38 00 00 61 */ li r0, 0x61 -/* 80360A70 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360A74 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300ADFF@ha */ -/* 80360A78 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360A7C 38 03 AD FF */ addi r0, r3, 0xADFF /* 0x2300ADFF@l */ -/* 80360A80 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360A84 48 00 01 34 */ b lbl_80360BB8 -/* 80360A88 38 00 00 61 */ li r0, 0x61 -/* 80360A8C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360A90 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AE3F@ha */ -/* 80360A94 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360A98 38 03 AE 3F */ addi r0, r3, 0xAE3F /* 0x2300AE3F@l */ -/* 80360A9C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360AA0 48 00 01 18 */ b lbl_80360BB8 -/* 80360AA4 38 00 00 61 */ li r0, 0x61 -/* 80360AA8 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360AAC 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300A27F@ha */ -/* 80360AB0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360AB4 38 03 A2 7F */ addi r0, r3, 0xA27F /* 0x2300A27F@l */ -/* 80360AB8 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360ABC 48 00 00 FC */ b lbl_80360BB8 -/* 80360AC0 38 00 00 61 */ li r0, 0x61 -/* 80360AC4 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360AC8 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300A67F@ha */ -/* 80360ACC 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360AD0 38 03 A6 7F */ addi r0, r3, 0xA67F /* 0x2300A67F@l */ -/* 80360AD4 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360AD8 48 00 00 E0 */ b lbl_80360BB8 -/* 80360ADC 38 00 00 61 */ li r0, 0x61 -/* 80360AE0 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360AE4 3C 60 23 01 */ lis r3, 0x2301 /* 0x2300AA7F@ha */ -/* 80360AE8 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360AEC 38 03 AA 7F */ addi r0, r3, 0xAA7F /* 0x2300AA7F@l */ -/* 80360AF0 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360AF4 48 00 00 C4 */ b lbl_80360BB8 -/* 80360AF8 38 00 00 61 */ li r0, 0x61 -/* 80360AFC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360B00 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C0C6@ha */ -/* 80360B04 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360B08 38 03 C0 C6 */ addi r0, r3, 0xC0C6 /* 0x2402C0C6@l */ -/* 80360B0C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360B10 48 00 00 A8 */ b lbl_80360BB8 -/* 80360B14 38 00 00 61 */ li r0, 0x61 -/* 80360B18 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360B1C 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C16B@ha */ -/* 80360B20 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360B24 38 03 C1 6B */ addi r0, r3, 0xC16B /* 0x2402C16B@l */ -/* 80360B28 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360B2C 48 00 00 8C */ b lbl_80360BB8 -/* 80360B30 38 00 00 61 */ li r0, 0x61 -/* 80360B34 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360B38 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C0E7@ha */ -/* 80360B3C 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360B40 38 03 C0 E7 */ addi r0, r3, 0xC0E7 /* 0x2402C0E7@l */ -/* 80360B44 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360B48 48 00 00 70 */ b lbl_80360BB8 -/* 80360B4C 38 00 00 61 */ li r0, 0x61 -/* 80360B50 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360B54 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C108@ha */ -/* 80360B58 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360B5C 38 03 C1 08 */ addi r0, r3, 0xC108 /* 0x2402C108@l */ -/* 80360B60 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360B64 48 00 00 54 */ b lbl_80360BB8 -/* 80360B68 38 00 00 61 */ li r0, 0x61 -/* 80360B6C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360B70 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C129@ha */ -/* 80360B74 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360B78 38 03 C1 29 */ addi r0, r3, 0xC129 /* 0x2402C129@l */ -/* 80360B7C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360B80 48 00 00 38 */ b lbl_80360BB8 -/* 80360B84 38 00 00 61 */ li r0, 0x61 -/* 80360B88 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360B8C 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C14A@ha */ -/* 80360B90 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360B94 38 03 C1 4A */ addi r0, r3, 0xC14A /* 0x2402C14A@l */ -/* 80360B98 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360B9C 48 00 00 1C */ b lbl_80360BB8 -/* 80360BA0 38 00 00 61 */ li r0, 0x61 -/* 80360BA4 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360BA8 3C 60 24 03 */ lis r3, 0x2403 /* 0x2402C1AD@ha */ -/* 80360BAC 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360BB0 38 03 C1 AD */ addi r0, r3, 0xC1AD /* 0x2402C1AD@l */ -/* 80360BB4 90 05 80 00 */ stw r0, -0x8000(r5) -lbl_80360BB8: -/* 80360BB8 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 80360BBC 90 83 05 A0 */ stw r4, 0x5a0(r3) -/* 80360BC0 80 03 05 A0 */ lwz r0, 0x5a0(r3) -/* 80360BC4 28 00 00 16 */ cmplwi r0, 0x16 -/* 80360BC8 41 81 02 EC */ bgt lbl_80360EB4 -/* 80360BCC 3C 80 80 3D */ lis r4, lit_182@ha /* 0x803D2858@ha */ -/* 80360BD0 38 84 28 58 */ addi r4, r4, lit_182@l /* 0x803D2858@l */ -/* 80360BD4 54 00 10 3A */ slwi r0, r0, 2 -/* 80360BD8 7C 04 00 2E */ lwzx r0, r4, r0 -/* 80360BDC 7C 09 03 A6 */ mtctr r0 -/* 80360BE0 4E 80 04 20 */ bctr -/* 80360BE4 38 00 00 61 */ li r0, 0x61 -/* 80360BE8 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360BEC 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000042@ha */ -/* 80360BF0 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360BF4 38 03 00 42 */ addi r0, r3, 0x0042 /* 0x67000042@l */ -/* 80360BF8 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360BFC 48 00 02 B8 */ b lbl_80360EB4 -/* 80360C00 38 00 00 61 */ li r0, 0x61 -/* 80360C04 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360C08 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000084@ha */ -/* 80360C0C 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360C10 38 03 00 84 */ addi r0, r3, 0x0084 /* 0x67000084@l */ -/* 80360C14 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360C18 48 00 02 9C */ b lbl_80360EB4 -/* 80360C1C 38 00 00 61 */ li r0, 0x61 -/* 80360C20 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360C24 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000063@ha */ -/* 80360C28 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360C2C 38 03 00 63 */ addi r0, r3, 0x0063 /* 0x67000063@l */ -/* 80360C30 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360C34 48 00 02 80 */ b lbl_80360EB4 -/* 80360C38 38 00 00 61 */ li r0, 0x61 -/* 80360C3C 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360C40 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000129@ha */ -/* 80360C44 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360C48 38 03 01 29 */ addi r0, r3, 0x0129 /* 0x67000129@l */ -/* 80360C4C 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360C50 48 00 02 64 */ b lbl_80360EB4 -/* 80360C54 38 00 00 61 */ li r0, 0x61 -/* 80360C58 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360C5C 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000252@ha */ -/* 80360C60 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360C64 38 03 02 52 */ addi r0, r3, 0x0252 /* 0x67000252@l */ -/* 80360C68 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360C6C 48 00 02 48 */ b lbl_80360EB4 -/* 80360C70 38 00 00 61 */ li r0, 0x61 -/* 80360C74 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360C78 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000021@ha */ -/* 80360C7C 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360C80 38 03 00 21 */ addi r0, r3, 0x0021 /* 0x67000021@l */ -/* 80360C84 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360C88 48 00 02 2C */ b lbl_80360EB4 -/* 80360C8C 38 00 00 61 */ li r0, 0x61 -/* 80360C90 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360C94 3C 60 67 00 */ lis r3, 0x6700 /* 0x6700014B@ha */ -/* 80360C98 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360C9C 38 03 01 4B */ addi r0, r3, 0x014B /* 0x6700014B@l */ -/* 80360CA0 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360CA4 48 00 02 10 */ b lbl_80360EB4 -/* 80360CA8 38 00 00 61 */ li r0, 0x61 -/* 80360CAC 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360CB0 3C 60 67 00 */ lis r3, 0x6700 /* 0x6700018D@ha */ -/* 80360CB4 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360CB8 38 03 01 8D */ addi r0, r3, 0x018D /* 0x6700018D@l */ -/* 80360CBC 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360CC0 48 00 01 F4 */ b lbl_80360EB4 -/* 80360CC4 38 00 00 61 */ li r0, 0x61 -/* 80360CC8 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360CCC 3C 60 67 00 */ lis r3, 0x6700 /* 0x670001CF@ha */ -/* 80360CD0 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360CD4 38 03 01 CF */ addi r0, r3, 0x01CF /* 0x670001CF@l */ -/* 80360CD8 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360CDC 48 00 01 D8 */ b lbl_80360EB4 -/* 80360CE0 38 00 00 61 */ li r0, 0x61 -/* 80360CE4 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360CE8 3C 60 67 00 */ lis r3, 0x6700 /* 0x67000211@ha */ -/* 80360CEC 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360CF0 38 03 02 11 */ addi r0, r3, 0x0211 /* 0x67000211@l */ -/* 80360CF4 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360CF8 48 00 01 BC */ b lbl_80360EB4 -/* 80360CFC 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360D00 38 00 00 02 */ li r0, 2 -/* 80360D04 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360D08 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360D0C 38 00 00 08 */ li r0, 8 -/* 80360D10 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360D14 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360D18 38 00 00 20 */ li r0, 0x20 -/* 80360D1C 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360D20 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360D24 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360D28 48 00 01 8C */ b lbl_80360EB4 -/* 80360D2C 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360D30 38 00 00 03 */ li r0, 3 -/* 80360D34 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360D38 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360D3C 38 00 00 08 */ li r0, 8 -/* 80360D40 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360D44 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360D48 38 00 00 20 */ li r0, 0x20 -/* 80360D4C 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360D50 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360D54 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360D58 48 00 01 5C */ b lbl_80360EB4 -/* 80360D5C 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360D60 38 00 00 04 */ li r0, 4 -/* 80360D64 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360D68 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360D6C 38 00 00 08 */ li r0, 8 -/* 80360D70 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360D74 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360D78 38 00 00 20 */ li r0, 0x20 -/* 80360D7C 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360D80 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360D84 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360D88 48 00 01 2C */ b lbl_80360EB4 -/* 80360D8C 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360D90 38 00 00 05 */ li r0, 5 -/* 80360D94 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360D98 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360D9C 38 00 00 08 */ li r0, 8 -/* 80360DA0 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360DA4 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360DA8 38 00 00 20 */ li r0, 0x20 -/* 80360DAC 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360DB0 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360DB4 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360DB8 48 00 00 FC */ b lbl_80360EB4 -/* 80360DBC 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360DC0 38 00 00 06 */ li r0, 6 -/* 80360DC4 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360DC8 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360DCC 38 00 00 08 */ li r0, 8 -/* 80360DD0 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360DD4 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360DD8 38 00 00 20 */ li r0, 0x20 -/* 80360DDC 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360DE0 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360DE4 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360DE8 48 00 00 CC */ b lbl_80360EB4 -/* 80360DEC 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360DF0 38 00 00 07 */ li r0, 7 -/* 80360DF4 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360DF8 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360DFC 38 00 00 08 */ li r0, 8 -/* 80360E00 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360E04 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360E08 38 00 00 20 */ li r0, 0x20 -/* 80360E0C 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360E10 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360E14 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360E18 48 00 00 9C */ b lbl_80360EB4 -/* 80360E1C 80 83 05 A4 */ lwz r4, 0x5a4(r3) -/* 80360E20 38 00 00 09 */ li r0, 9 -/* 80360E24 50 04 26 36 */ rlwimi r4, r0, 4, 0x18, 0x1b -/* 80360E28 90 83 05 A4 */ stw r4, 0x5a4(r3) -/* 80360E2C 38 00 00 08 */ li r0, 8 -/* 80360E30 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360E34 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360E38 38 00 00 20 */ li r0, 0x20 -/* 80360E3C 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360E40 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360E44 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360E48 48 00 00 6C */ b lbl_80360EB4 -/* 80360E4C 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360E50 38 A0 00 08 */ li r5, 8 -/* 80360E54 50 A0 26 36 */ rlwimi r0, r5, 4, 0x18, 0x1b -/* 80360E58 90 03 05 A4 */ stw r0, 0x5a4(r3) -/* 80360E5C 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360E60 38 00 00 20 */ li r0, 0x20 -/* 80360E64 98 A4 80 00 */ stb r5, 0x8000(r4) /* 0xCC008000@l */ -/* 80360E68 98 04 80 00 */ stb r0, -0x8000(r4) -/* 80360E6C 80 03 05 A4 */ lwz r0, 0x5a4(r3) -/* 80360E70 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360E74 48 00 00 40 */ b lbl_80360EB4 -/* 80360E78 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80360E7C 38 00 00 02 */ li r0, 2 -/* 80360E80 B0 03 00 06 */ sth r0, 6(r3) -/* 80360E84 48 00 00 30 */ b lbl_80360EB4 -/* 80360E88 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80360E8C 38 00 00 03 */ li r0, 3 -/* 80360E90 B0 03 00 06 */ sth r0, 6(r3) -/* 80360E94 48 00 00 20 */ b lbl_80360EB4 -/* 80360E98 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80360E9C 38 00 00 04 */ li r0, 4 -/* 80360EA0 B0 03 00 06 */ sth r0, 6(r3) -/* 80360EA4 48 00 00 10 */ b lbl_80360EB4 -/* 80360EA8 80 6D 93 A4 */ lwz r3, __cpReg(r13) -/* 80360EAC 38 00 00 05 */ li r0, 5 -/* 80360EB0 B0 03 00 06 */ sth r0, 6(r3) -lbl_80360EB4: -/* 80360EB4 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 80360EB8 38 00 00 00 */ li r0, 0 -/* 80360EBC B0 03 00 02 */ sth r0, 2(r3) -/* 80360EC0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetAlphaUpdate.s b/asm/dolphin/gx/GXPixel/GXSetAlphaUpdate.s deleted file mode 100644 index e95577c7b78..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetAlphaUpdate.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_8035FC70: -/* 8035FC70 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035FC74 38 00 00 61 */ li r0, 0x61 -/* 8035FC78 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035FC7C 80 C5 01 D0 */ lwz r6, 0x1d0(r5) -/* 8035FC80 50 66 26 F6 */ rlwimi r6, r3, 4, 0x1b, 0x1b -/* 8035FC84 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 8035FC88 38 00 00 00 */ li r0, 0 -/* 8035FC8C 90 C4 80 00 */ stw r6, -0x8000(r4) -/* 8035FC90 90 C5 01 D0 */ stw r6, 0x1d0(r5) -/* 8035FC94 B0 05 00 02 */ sth r0, 2(r5) -/* 8035FC98 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetBlendMode.s b/asm/dolphin/gx/GXPixel/GXSetBlendMode.s deleted file mode 100644 index 47ceae751c4..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetBlendMode.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_8035FBF0: -/* 8035FBF0 81 02 CB 80 */ lwz r8, __GXData(r2) -/* 8035FBF4 20 03 00 03 */ subfic r0, r3, 3 -/* 8035FBF8 7C 07 00 34 */ cntlzw r7, r0 -/* 8035FBFC 20 03 00 02 */ subfic r0, r3, 2 -/* 8035FC00 81 28 01 D0 */ lwz r9, 0x1d0(r8) -/* 8035FC04 50 E9 35 28 */ rlwimi r9, r7, 6, 0x14, 0x14 -/* 8035FC08 38 E9 00 00 */ addi r7, r9, 0 -/* 8035FC0C 50 67 07 FE */ rlwimi r7, r3, 0, 0x1f, 0x1f -/* 8035FC10 7C 00 00 34 */ cntlzw r0, r0 -/* 8035FC14 50 07 E7 BC */ rlwimi r7, r0, 0x1c, 0x1e, 0x1e -/* 8035FC18 50 C7 64 26 */ rlwimi r7, r6, 0xc, 0x10, 0x13 -/* 8035FC1C 50 87 45 6E */ rlwimi r7, r4, 8, 0x15, 0x17 -/* 8035FC20 38 00 00 61 */ li r0, 0x61 -/* 8035FC24 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035FC28 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035FC2C 50 A7 2E 34 */ rlwimi r7, r5, 5, 0x18, 0x1a -/* 8035FC30 38 00 00 00 */ li r0, 0 -/* 8035FC34 90 E3 80 00 */ stw r7, -0x8000(r3) -/* 8035FC38 90 E8 01 D0 */ stw r7, 0x1d0(r8) -/* 8035FC3C B0 08 00 02 */ sth r0, 2(r8) -/* 8035FC40 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetColorUpdate.s b/asm/dolphin/gx/GXPixel/GXSetColorUpdate.s deleted file mode 100644 index c3afabdc784..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetColorUpdate.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_8035FC44: -/* 8035FC44 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035FC48 38 00 00 61 */ li r0, 0x61 -/* 8035FC4C 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035FC50 80 C5 01 D0 */ lwz r6, 0x1d0(r5) -/* 8035FC54 50 66 1F 38 */ rlwimi r6, r3, 3, 0x1c, 0x1c -/* 8035FC58 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 8035FC5C 38 00 00 00 */ li r0, 0 -/* 8035FC60 90 C4 80 00 */ stw r6, -0x8000(r4) -/* 8035FC64 90 C5 01 D0 */ stw r6, 0x1d0(r5) -/* 8035FC68 B0 05 00 02 */ sth r0, 2(r5) -/* 8035FC6C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetDither.s b/asm/dolphin/gx/GXPixel/GXSetDither.s deleted file mode 100644 index c49add61c73..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetDither.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_8035FDD8: -/* 8035FDD8 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035FDDC 38 00 00 61 */ li r0, 0x61 -/* 8035FDE0 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035FDE4 80 C5 01 D0 */ lwz r6, 0x1d0(r5) -/* 8035FDE8 50 66 17 7A */ rlwimi r6, r3, 2, 0x1d, 0x1d -/* 8035FDEC 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 8035FDF0 38 00 00 00 */ li r0, 0 -/* 8035FDF4 90 C4 80 00 */ stw r6, -0x8000(r4) -/* 8035FDF8 90 C5 01 D0 */ stw r6, 0x1d0(r5) -/* 8035FDFC B0 05 00 02 */ sth r0, 2(r5) -/* 8035FE00 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetDstAlpha.s b/asm/dolphin/gx/GXPixel/GXSetDstAlpha.s deleted file mode 100644 index 172ef780530..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetDstAlpha.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_8035FE04: -/* 8035FE04 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035FE08 54 85 06 3E */ clrlwi r5, r4, 0x18 -/* 8035FE0C 38 00 00 61 */ li r0, 0x61 -/* 8035FE10 80 E6 01 D4 */ lwz r7, 0x1d4(r6) -/* 8035FE14 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035FE18 50 A7 06 3E */ rlwimi r7, r5, 0, 0x18, 0x1f -/* 8035FE1C 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 8035FE20 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035FE24 38 67 00 00 */ addi r3, r7, 0 -/* 8035FE28 50 03 45 EE */ rlwimi r3, r0, 8, 0x17, 0x17 -/* 8035FE2C 90 64 80 00 */ stw r3, -0x8000(r4) -/* 8035FE30 38 00 00 00 */ li r0, 0 -/* 8035FE34 90 66 01 D4 */ stw r3, 0x1d4(r6) -/* 8035FE38 B0 06 00 02 */ sth r0, 2(r6) -/* 8035FE3C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetFieldMask.s b/asm/dolphin/gx/GXPixel/GXSetFieldMask.s deleted file mode 100644 index 5e68c287c1e..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetFieldMask.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_8035FE40: -/* 8035FE40 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035FE44 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035FE48 38 A0 00 00 */ li r5, 0 -/* 8035FE4C 50 05 07 FE */ rlwimi r5, r0, 0, 0x1f, 0x1f -/* 8035FE50 50 65 0F BC */ rlwimi r5, r3, 1, 0x1e, 0x1e -/* 8035FE54 38 00 00 61 */ li r0, 0x61 -/* 8035FE58 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035FE5C 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035FE60 38 00 00 44 */ li r0, 0x44 -/* 8035FE64 50 05 C0 0E */ rlwimi r5, r0, 0x18, 0, 7 -/* 8035FE68 90 A3 80 00 */ stw r5, -0x8000(r3) -/* 8035FE6C 38 00 00 00 */ li r0, 0 -/* 8035FE70 B0 04 00 02 */ sth r0, 2(r4) -/* 8035FE74 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetFieldMode.s b/asm/dolphin/gx/GXPixel/GXSetFieldMode.s deleted file mode 100644 index bdae64841dc..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetFieldMode.s +++ /dev/null @@ -1,31 +0,0 @@ -lbl_8035FE78: -/* 8035FE78 7C 08 02 A6 */ mflr r0 -/* 8035FE7C 90 01 00 04 */ stw r0, 4(r1) -/* 8035FE80 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035FE84 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8035FE88 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8035FE8C 3F E0 CC 01 */ lis r31, 0xCC01 /* 0xCC008000@ha */ -/* 8035FE90 93 C1 00 18 */ stw r30, 0x18(r1) -/* 8035FE94 3B C0 00 61 */ li r30, 0x61 -/* 8035FE98 93 A1 00 14 */ stw r29, 0x14(r1) -/* 8035FE9C 7C 7D 1B 78 */ mr r29, r3 -/* 8035FEA0 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 8035FEA4 80 85 00 7C */ lwz r4, 0x7c(r5) -/* 8035FEA8 50 04 B2 52 */ rlwimi r4, r0, 0x16, 9, 9 -/* 8035FEAC 90 85 00 7C */ stw r4, 0x7c(r5) -/* 8035FEB0 9B DF 80 00 */ stb r30, 0x8000(r31) /* 0xCC008000@l */ -/* 8035FEB4 80 05 00 7C */ lwz r0, 0x7c(r5) -/* 8035FEB8 90 1F 80 00 */ stw r0, -0x8000(r31) -/* 8035FEBC 4B FF F2 B9 */ bl __GXFlushTextureState -/* 8035FEC0 57 A0 06 3E */ clrlwi r0, r29, 0x18 -/* 8035FEC4 9B DF 80 00 */ stb r30, -0x8000(r31) -/* 8035FEC8 64 00 68 00 */ oris r0, r0, 0x6800 -/* 8035FECC 90 1F 80 00 */ stw r0, -0x8000(r31) -/* 8035FED0 4B FF F2 A5 */ bl __GXFlushTextureState -/* 8035FED4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8035FED8 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 8035FEDC 83 C1 00 18 */ lwz r30, 0x18(r1) -/* 8035FEE0 83 A1 00 14 */ lwz r29, 0x14(r1) -/* 8035FEE4 38 21 00 20 */ addi r1, r1, 0x20 -/* 8035FEE8 7C 08 03 A6 */ mtlr r0 -/* 8035FEEC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetFogRangeAdj.s b/asm/dolphin/gx/GXPixel/GXSetFogRangeAdj.s deleted file mode 100644 index 776965c9531..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetFogRangeAdj.s +++ /dev/null @@ -1,75 +0,0 @@ -lbl_8035FACC: -/* 8035FACC 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 8035FAD0 41 82 00 E4 */ beq lbl_8035FBB4 -/* 8035FAD4 38 C0 00 00 */ li r6, 0 -/* 8035FAD8 54 C0 08 3C */ slwi r0, r6, 1 -/* 8035FADC 7D 25 02 14 */ add r9, r5, r0 -/* 8035FAE0 A1 09 00 00 */ lhz r8, 0(r9) -/* 8035FAE4 54 CA F8 7E */ srwi r10, r6, 1 -/* 8035FAE8 A0 E9 00 02 */ lhz r7, 2(r9) -/* 8035FAEC 38 00 00 61 */ li r0, 0x61 -/* 8035FAF0 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035FAF4 39 60 00 00 */ li r11, 0 -/* 8035FAF8 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035FAFC 51 0B 05 3E */ rlwimi r11, r8, 0, 0x14, 0x1f -/* 8035FB00 39 0B 00 00 */ addi r8, r11, 0 -/* 8035FB04 38 CA 00 E9 */ addi r6, r10, 0xe9 -/* 8035FB08 50 E8 62 26 */ rlwimi r8, r7, 0xc, 8, 0x13 -/* 8035FB0C 50 C8 C0 0E */ rlwimi r8, r6, 0x18, 0, 7 -/* 8035FB10 91 05 80 00 */ stw r8, -0x8000(r5) -/* 8035FB14 38 CA 00 EA */ addi r6, r10, 0xea -/* 8035FB18 39 60 00 00 */ li r11, 0 -/* 8035FB1C A1 09 00 04 */ lhz r8, 4(r9) -/* 8035FB20 A0 E9 00 06 */ lhz r7, 6(r9) -/* 8035FB24 51 0B 05 3E */ rlwimi r11, r8, 0, 0x14, 0x1f -/* 8035FB28 39 0B 00 00 */ addi r8, r11, 0 -/* 8035FB2C 98 05 80 00 */ stb r0, -0x8000(r5) -/* 8035FB30 50 E8 62 26 */ rlwimi r8, r7, 0xc, 8, 0x13 -/* 8035FB34 50 C8 C0 0E */ rlwimi r8, r6, 0x18, 0, 7 -/* 8035FB38 91 05 80 00 */ stw r8, -0x8000(r5) -/* 8035FB3C 38 CA 00 EB */ addi r6, r10, 0xeb -/* 8035FB40 39 60 00 00 */ li r11, 0 -/* 8035FB44 A1 09 00 08 */ lhz r8, 8(r9) -/* 8035FB48 A0 E9 00 0A */ lhz r7, 0xa(r9) -/* 8035FB4C 51 0B 05 3E */ rlwimi r11, r8, 0, 0x14, 0x1f -/* 8035FB50 39 0B 00 00 */ addi r8, r11, 0 -/* 8035FB54 98 05 80 00 */ stb r0, -0x8000(r5) -/* 8035FB58 50 E8 62 26 */ rlwimi r8, r7, 0xc, 8, 0x13 -/* 8035FB5C 50 C8 C0 0E */ rlwimi r8, r6, 0x18, 0, 7 -/* 8035FB60 91 05 80 00 */ stw r8, -0x8000(r5) -/* 8035FB64 38 CA 00 EC */ addi r6, r10, 0xec -/* 8035FB68 39 60 00 00 */ li r11, 0 -/* 8035FB6C A1 09 00 0C */ lhz r8, 0xc(r9) -/* 8035FB70 A0 E9 00 0E */ lhz r7, 0xe(r9) -/* 8035FB74 51 0B 05 3E */ rlwimi r11, r8, 0, 0x14, 0x1f -/* 8035FB78 39 0B 00 00 */ addi r8, r11, 0 -/* 8035FB7C 98 05 80 00 */ stb r0, -0x8000(r5) -/* 8035FB80 50 E8 62 26 */ rlwimi r8, r7, 0xc, 8, 0x13 -/* 8035FB84 50 C8 C0 0E */ rlwimi r8, r6, 0x18, 0, 7 -/* 8035FB88 91 05 80 00 */ stw r8, -0x8000(r5) -/* 8035FB8C 38 CA 00 ED */ addi r6, r10, 0xed -/* 8035FB90 39 60 00 00 */ li r11, 0 -/* 8035FB94 A1 09 00 10 */ lhz r8, 0x10(r9) -/* 8035FB98 A0 E9 00 12 */ lhz r7, 0x12(r9) -/* 8035FB9C 51 0B 05 3E */ rlwimi r11, r8, 0, 0x14, 0x1f -/* 8035FBA0 39 0B 00 00 */ addi r8, r11, 0 -/* 8035FBA4 98 05 80 00 */ stb r0, -0x8000(r5) -/* 8035FBA8 50 E8 62 26 */ rlwimi r8, r7, 0xc, 8, 0x13 -/* 8035FBAC 50 C8 C0 0E */ rlwimi r8, r6, 0x18, 0, 7 -/* 8035FBB0 91 05 80 00 */ stw r8, -0x8000(r5) -lbl_8035FBB4: -/* 8035FBB4 54 85 04 3E */ clrlwi r5, r4, 0x10 -/* 8035FBB8 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035FBBC 38 05 01 56 */ addi r0, r5, 0x156 -/* 8035FBC0 38 A0 00 00 */ li r5, 0 -/* 8035FBC4 50 05 05 BE */ rlwimi r5, r0, 0, 0x16, 0x1f -/* 8035FBC8 50 65 55 6A */ rlwimi r5, r3, 0xa, 0x15, 0x15 -/* 8035FBCC 38 00 00 61 */ li r0, 0x61 -/* 8035FBD0 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035FBD4 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035FBD8 38 00 00 E8 */ li r0, 0xe8 -/* 8035FBDC 50 05 C0 0E */ rlwimi r5, r0, 0x18, 0, 7 -/* 8035FBE0 90 A3 80 00 */ stw r5, -0x8000(r3) -/* 8035FBE4 38 00 00 00 */ li r0, 0 -/* 8035FBE8 B0 04 00 02 */ sth r0, 2(r4) -/* 8035FBEC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetZCompLoc.s b/asm/dolphin/gx/GXPixel/GXSetZCompLoc.s deleted file mode 100644 index 878b72f3c75..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetZCompLoc.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_8035FCD0: -/* 8035FCD0 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035FCD4 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8035FCD8 38 60 00 61 */ li r3, 0x61 -/* 8035FCDC 80 A6 01 DC */ lwz r5, 0x1dc(r6) -/* 8035FCE0 50 05 36 72 */ rlwimi r5, r0, 6, 0x19, 0x19 -/* 8035FCE4 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035FCE8 90 A6 01 DC */ stw r5, 0x1dc(r6) -/* 8035FCEC 38 00 00 00 */ li r0, 0 -/* 8035FCF0 98 64 80 00 */ stb r3, 0x8000(r4) /* 0xCC008000@l */ -/* 8035FCF4 80 66 01 DC */ lwz r3, 0x1dc(r6) -/* 8035FCF8 90 64 80 00 */ stw r3, -0x8000(r4) -/* 8035FCFC B0 06 00 02 */ sth r0, 2(r6) -/* 8035FD00 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXPixel/GXSetZMode.s b/asm/dolphin/gx/GXPixel/GXSetZMode.s deleted file mode 100644 index 8495ab721bd..00000000000 --- a/asm/dolphin/gx/GXPixel/GXSetZMode.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_8035FC9C: -/* 8035FC9C 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035FCA0 38 00 00 61 */ li r0, 0x61 -/* 8035FCA4 80 E6 01 D8 */ lwz r7, 0x1d8(r6) -/* 8035FCA8 50 67 07 FE */ rlwimi r7, r3, 0, 0x1f, 0x1f -/* 8035FCAC 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035FCB0 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035FCB4 50 87 0F 3C */ rlwimi r7, r4, 1, 0x1c, 0x1e -/* 8035FCB8 50 A7 26 F6 */ rlwimi r7, r5, 4, 0x1b, 0x1b -/* 8035FCBC 90 E3 80 00 */ stw r7, -0x8000(r3) -/* 8035FCC0 38 00 00 00 */ li r0, 0 -/* 8035FCC4 90 E6 01 D8 */ stw r7, 0x1d8(r6) -/* 8035FCC8 B0 06 00 02 */ sth r0, 2(r6) -/* 8035FCCC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetAlphaCompare.s b/asm/dolphin/gx/GXTev/GXSetAlphaCompare.s deleted file mode 100644 index 5865f41a202..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetAlphaCompare.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8035F624: -/* 8035F624 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 8035F628 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035F62C 3D 00 F3 00 */ lis r8, 0xf300 -/* 8035F630 50 08 06 3E */ rlwimi r8, r0, 0, 0x18, 0x1f -/* 8035F634 54 E0 06 3E */ clrlwi r0, r7, 0x18 -/* 8035F638 38 E8 00 00 */ addi r7, r8, 0 -/* 8035F63C 50 07 44 2E */ rlwimi r7, r0, 8, 0x10, 0x17 -/* 8035F640 50 67 83 5E */ rlwimi r7, r3, 0x10, 0xd, 0xf -/* 8035F644 50 C7 9A 98 */ rlwimi r7, r6, 0x13, 0xa, 0xc -/* 8035F648 38 00 00 61 */ li r0, 0x61 -/* 8035F64C 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035F650 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035F654 50 A7 B2 12 */ rlwimi r7, r5, 0x16, 8, 9 -/* 8035F658 38 00 00 00 */ li r0, 0 -/* 8035F65C 90 E3 80 00 */ stw r7, -0x8000(r3) -/* 8035F660 B0 04 00 02 */ sth r0, 2(r4) -/* 8035F664 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetNumTevStages.s b/asm/dolphin/gx/GXTev/GXSetNumTevStages.s deleted file mode 100644 index 0c5a1b0ee20..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetNumTevStages.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_8035F890: -/* 8035F890 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035F894 54 63 06 3E */ clrlwi r3, r3, 0x18 -/* 8035F898 38 03 FF FF */ addi r0, r3, -1 -/* 8035F89C 80 64 02 04 */ lwz r3, 0x204(r4) -/* 8035F8A0 50 03 54 AA */ rlwimi r3, r0, 0xa, 0x12, 0x15 -/* 8035F8A4 90 64 02 04 */ stw r3, 0x204(r4) -/* 8035F8A8 80 04 05 AC */ lwz r0, 0x5ac(r4) -/* 8035F8AC 60 00 00 04 */ ori r0, r0, 4 -/* 8035F8B0 90 04 05 AC */ stw r0, 0x5ac(r4) -/* 8035F8B4 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevAlphaIn.s b/asm/dolphin/gx/GXTev/GXSetTevAlphaIn.s deleted file mode 100644 index 1dba62c52d6..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevAlphaIn.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8035F268: -/* 8035F268 81 22 CB 80 */ lwz r9, __GXData(r2) -/* 8035F26C 54 63 10 3A */ slwi r3, r3, 2 -/* 8035F270 38 00 00 61 */ li r0, 0x61 -/* 8035F274 7D 09 1A 14 */ add r8, r9, r3 -/* 8035F278 81 48 01 70 */ lwz r10, 0x170(r8) -/* 8035F27C 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035F280 50 8A 6C 24 */ rlwimi r10, r4, 0xd, 0x10, 0x12 -/* 8035F284 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035F288 38 8A 00 00 */ addi r4, r10, 0 -/* 8035F28C 50 A4 54 EA */ rlwimi r4, r5, 0xa, 0x13, 0x15 -/* 8035F290 50 C4 3D B0 */ rlwimi r4, r6, 7, 0x16, 0x18 -/* 8035F294 50 E4 26 76 */ rlwimi r4, r7, 4, 0x19, 0x1b -/* 8035F298 90 83 80 00 */ stw r4, -0x8000(r3) -/* 8035F29C 38 00 00 00 */ li r0, 0 -/* 8035F2A0 90 88 01 70 */ stw r4, 0x170(r8) -/* 8035F2A4 B0 09 00 02 */ sth r0, 2(r9) -/* 8035F2A8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevAlphaOp.s b/asm/dolphin/gx/GXTev/GXSetTevAlphaOp.s deleted file mode 100644 index cdf64632346..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevAlphaOp.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_8035F314: -/* 8035F314 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 8035F318 54 69 10 3A */ slwi r9, r3, 2 -/* 8035F31C 2C 04 00 01 */ cmpwi r4, 1 -/* 8035F320 7C 60 4A 14 */ add r3, r0, r9 -/* 8035F324 80 63 01 70 */ lwz r3, 0x170(r3) -/* 8035F328 50 83 93 5A */ rlwimi r3, r4, 0x12, 0xd, 0xd -/* 8035F32C 39 43 00 00 */ addi r10, r3, 0 -/* 8035F330 41 81 00 10 */ bgt lbl_8035F340 -/* 8035F334 50 CA A2 96 */ rlwimi r10, r6, 0x14, 0xa, 0xb -/* 8035F338 50 AA 83 9E */ rlwimi r10, r5, 0x10, 0xe, 0xf -/* 8035F33C 48 00 00 10 */ b lbl_8035F34C -lbl_8035F340: -/* 8035F340 38 00 00 03 */ li r0, 3 -/* 8035F344 50 8A 9A 96 */ rlwimi r10, r4, 0x13, 0xa, 0xb -/* 8035F348 50 0A 83 9E */ rlwimi r10, r0, 0x10, 0xe, 0xf -lbl_8035F34C: -/* 8035F34C 38 00 00 61 */ li r0, 0x61 -/* 8035F350 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035F354 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035F358 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035F35C 50 EA 9B 18 */ rlwimi r10, r7, 0x13, 0xc, 0xc -/* 8035F360 51 0A B2 12 */ rlwimi r10, r8, 0x16, 8, 9 -/* 8035F364 91 45 80 00 */ stw r10, -0x8000(r5) -/* 8035F368 7C 64 4A 14 */ add r3, r4, r9 -/* 8035F36C 38 00 00 00 */ li r0, 0 -/* 8035F370 91 43 01 70 */ stw r10, 0x170(r3) -/* 8035F374 B0 04 00 02 */ sth r0, 2(r4) -/* 8035F378 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevColorIn.s b/asm/dolphin/gx/GXTev/GXSetTevColorIn.s deleted file mode 100644 index 24c978b18ba..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevColorIn.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8035F224: -/* 8035F224 81 22 CB 80 */ lwz r9, __GXData(r2) -/* 8035F228 54 63 10 3A */ slwi r3, r3, 2 -/* 8035F22C 38 00 00 61 */ li r0, 0x61 -/* 8035F230 7D 09 1A 14 */ add r8, r9, r3 -/* 8035F234 81 48 01 30 */ lwz r10, 0x130(r8) -/* 8035F238 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */ -/* 8035F23C 50 8A 64 26 */ rlwimi r10, r4, 0xc, 0x10, 0x13 -/* 8035F240 98 03 80 00 */ stb r0, 0x8000(r3) /* 0xCC008000@l */ -/* 8035F244 38 8A 00 00 */ addi r4, r10, 0 -/* 8035F248 50 A4 45 2E */ rlwimi r4, r5, 8, 0x14, 0x17 -/* 8035F24C 50 C4 26 36 */ rlwimi r4, r6, 4, 0x18, 0x1b -/* 8035F250 50 E4 07 3E */ rlwimi r4, r7, 0, 0x1c, 0x1f -/* 8035F254 90 83 80 00 */ stw r4, -0x8000(r3) -/* 8035F258 38 00 00 00 */ li r0, 0 -/* 8035F25C 90 88 01 30 */ stw r4, 0x130(r8) -/* 8035F260 B0 09 00 02 */ sth r0, 2(r9) -/* 8035F264 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevColorOp.s b/asm/dolphin/gx/GXTev/GXSetTevColorOp.s deleted file mode 100644 index 6d1acd2d544..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevColorOp.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_8035F2AC: -/* 8035F2AC 80 02 CB 80 */ lwz r0, __GXData(r2) -/* 8035F2B0 54 69 10 3A */ slwi r9, r3, 2 -/* 8035F2B4 2C 04 00 01 */ cmpwi r4, 1 -/* 8035F2B8 7C 60 4A 14 */ add r3, r0, r9 -/* 8035F2BC 80 63 01 30 */ lwz r3, 0x130(r3) -/* 8035F2C0 50 83 93 5A */ rlwimi r3, r4, 0x12, 0xd, 0xd -/* 8035F2C4 39 43 00 00 */ addi r10, r3, 0 -/* 8035F2C8 41 81 00 10 */ bgt lbl_8035F2D8 -/* 8035F2CC 50 CA A2 96 */ rlwimi r10, r6, 0x14, 0xa, 0xb -/* 8035F2D0 50 AA 83 9E */ rlwimi r10, r5, 0x10, 0xe, 0xf -/* 8035F2D4 48 00 00 10 */ b lbl_8035F2E4 -lbl_8035F2D8: -/* 8035F2D8 38 00 00 03 */ li r0, 3 -/* 8035F2DC 50 8A 9A 96 */ rlwimi r10, r4, 0x13, 0xa, 0xb -/* 8035F2E0 50 0A 83 9E */ rlwimi r10, r0, 0x10, 0xe, 0xf -lbl_8035F2E4: -/* 8035F2E4 38 00 00 61 */ li r0, 0x61 -/* 8035F2E8 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035F2EC 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035F2F0 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035F2F4 50 EA 9B 18 */ rlwimi r10, r7, 0x13, 0xc, 0xc -/* 8035F2F8 51 0A B2 12 */ rlwimi r10, r8, 0x16, 8, 9 -/* 8035F2FC 91 45 80 00 */ stw r10, -0x8000(r5) -/* 8035F300 7C 64 4A 14 */ add r3, r4, r9 -/* 8035F304 38 00 00 00 */ li r0, 0 -/* 8035F308 91 43 01 30 */ stw r10, 0x130(r3) -/* 8035F30C B0 04 00 02 */ sth r0, 2(r4) -/* 8035F310 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevKAlphaSel.s b/asm/dolphin/gx/GXTev/GXSetTevKAlphaSel.s deleted file mode 100644 index 4a51794b313..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevKAlphaSel.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_8035F500: -/* 8035F500 7C 65 0E 70 */ srawi r5, r3, 1 -/* 8035F504 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035F508 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 8035F50C 54 A3 10 3A */ slwi r3, r5, 2 -/* 8035F510 38 E3 01 B0 */ addi r7, r3, 0x1b0 -/* 8035F514 7C E6 3A 14 */ add r7, r6, r7 -/* 8035F518 41 82 00 14 */ beq lbl_8035F52C -/* 8035F51C 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F520 50 80 9A 18 */ rlwimi r0, r4, 0x13, 8, 0xc -/* 8035F524 90 07 00 00 */ stw r0, 0(r7) -/* 8035F528 48 00 00 10 */ b lbl_8035F538 -lbl_8035F52C: -/* 8035F52C 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F530 50 80 4C AC */ rlwimi r0, r4, 9, 0x12, 0x16 -/* 8035F534 90 07 00 00 */ stw r0, 0(r7) -lbl_8035F538: -/* 8035F538 38 00 00 61 */ li r0, 0x61 -/* 8035F53C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035F540 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035F544 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035F548 38 00 00 00 */ li r0, 0 -/* 8035F54C 80 87 00 00 */ lwz r4, 0(r7) -/* 8035F550 90 85 80 00 */ stw r4, -0x8000(r5) -/* 8035F554 B0 03 00 02 */ sth r0, 2(r3) -/* 8035F558 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevKColorSel.s b/asm/dolphin/gx/GXTev/GXSetTevKColorSel.s deleted file mode 100644 index e844f50e128..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevKColorSel.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_8035F4A4: -/* 8035F4A4 7C 65 0E 70 */ srawi r5, r3, 1 -/* 8035F4A8 80 C2 CB 80 */ lwz r6, __GXData(r2) -/* 8035F4AC 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 8035F4B0 54 A3 10 3A */ slwi r3, r5, 2 -/* 8035F4B4 38 E3 01 B0 */ addi r7, r3, 0x1b0 -/* 8035F4B8 7C E6 3A 14 */ add r7, r6, r7 -/* 8035F4BC 41 82 00 14 */ beq lbl_8035F4D0 -/* 8035F4C0 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F4C4 50 80 73 62 */ rlwimi r0, r4, 0xe, 0xd, 0x11 -/* 8035F4C8 90 07 00 00 */ stw r0, 0(r7) -/* 8035F4CC 48 00 00 10 */ b lbl_8035F4DC -lbl_8035F4D0: -/* 8035F4D0 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F4D4 50 80 25 F6 */ rlwimi r0, r4, 4, 0x17, 0x1b -/* 8035F4D8 90 07 00 00 */ stw r0, 0(r7) -lbl_8035F4DC: -/* 8035F4DC 38 00 00 61 */ li r0, 0x61 -/* 8035F4E0 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035F4E4 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035F4E8 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035F4EC 38 00 00 00 */ li r0, 0 -/* 8035F4F0 80 87 00 00 */ lwz r4, 0(r7) -/* 8035F4F4 90 85 80 00 */ stw r4, -0x8000(r5) -/* 8035F4F8 B0 03 00 02 */ sth r0, 2(r3) -/* 8035F4FC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevOp.s b/asm/dolphin/gx/GXTev/GXSetTevOp.s deleted file mode 100644 index bba69d72c91..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevOp.s +++ /dev/null @@ -1,38 +0,0 @@ -lbl_8035F198: -/* 8035F198 2C 03 00 00 */ cmpwi r3, 0 -/* 8035F19C 3C A0 80 3D */ lis r5, TEVCOpTableST0@ha /* 0x803D27C0@ha */ -/* 8035F1A0 38 05 27 C0 */ addi r0, r5, TEVCOpTableST0@l /* 0x803D27C0@l */ -/* 8035F1A4 40 82 00 14 */ bne lbl_8035F1B8 -/* 8035F1A8 54 84 10 3A */ slwi r4, r4, 2 -/* 8035F1AC 7C A0 22 14 */ add r5, r0, r4 -/* 8035F1B0 39 25 00 28 */ addi r9, r5, 0x28 -/* 8035F1B4 48 00 00 18 */ b lbl_8035F1CC -lbl_8035F1B8: -/* 8035F1B8 54 84 10 3A */ slwi r4, r4, 2 -/* 8035F1BC 7C A0 22 14 */ add r5, r0, r4 -/* 8035F1C0 7D 20 22 14 */ add r9, r0, r4 -/* 8035F1C4 38 A5 00 14 */ addi r5, r5, 0x14 -/* 8035F1C8 39 29 00 3C */ addi r9, r9, 0x3c -lbl_8035F1CC: -/* 8035F1CC 80 E2 CB 80 */ lwz r7, __GXData(r2) -/* 8035F1D0 54 63 10 3A */ slwi r3, r3, 2 -/* 8035F1D4 80 05 00 00 */ lwz r0, 0(r5) -/* 8035F1D8 38 A0 00 61 */ li r5, 0x61 -/* 8035F1DC 7C C7 1A 14 */ add r6, r7, r3 -/* 8035F1E0 80 66 01 30 */ lwz r3, 0x130(r6) -/* 8035F1E4 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035F1E8 98 A4 80 00 */ stb r5, 0x8000(r4) /* 0xCC008000@l */ -/* 8035F1EC 54 63 00 0E */ rlwinm r3, r3, 0, 0, 7 -/* 8035F1F0 50 03 02 3E */ rlwimi r3, r0, 0, 8, 0x1f -/* 8035F1F4 90 64 80 00 */ stw r3, -0x8000(r4) -/* 8035F1F8 38 00 00 00 */ li r0, 0 -/* 8035F1FC 90 66 01 30 */ stw r3, 0x130(r6) -/* 8035F200 81 06 01 70 */ lwz r8, 0x170(r6) -/* 8035F204 80 69 00 00 */ lwz r3, 0(r9) -/* 8035F208 55 08 07 0E */ rlwinm r8, r8, 0, 0x1c, 7 -/* 8035F20C 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 8035F210 50 68 02 36 */ rlwimi r8, r3, 0, 8, 0x1b -/* 8035F214 91 04 80 00 */ stw r8, -0x8000(r4) -/* 8035F218 91 06 01 70 */ stw r8, 0x170(r6) -/* 8035F21C B0 07 00 02 */ sth r0, 2(r7) -/* 8035F220 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevOrder.s b/asm/dolphin/gx/GXTev/GXSetTevOrder.s deleted file mode 100644 index 28c02da6281..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevOrder.s +++ /dev/null @@ -1,116 +0,0 @@ -lbl_8035F6F4: -/* 8035F6F4 7C 67 0E 70 */ srawi r7, r3, 1 -/* 8035F6F8 81 22 CB 80 */ lwz r9, __GXData(r2) -/* 8035F6FC 54 AA 06 2C */ rlwinm r10, r5, 0, 0x18, 0x16 -/* 8035F700 7C E7 01 94 */ addze r7, r7 -/* 8035F704 54 60 10 3A */ slwi r0, r3, 2 -/* 8035F708 7D 09 02 14 */ add r8, r9, r0 -/* 8035F70C 54 E7 10 3A */ slwi r7, r7, 2 -/* 8035F710 90 A8 05 54 */ stw r5, 0x554(r8) -/* 8035F714 38 E7 01 00 */ addi r7, r7, 0x100 -/* 8035F718 28 0A 00 08 */ cmplwi r10, 8 -/* 8035F71C 38 0A 00 00 */ addi r0, r10, 0 -/* 8035F720 7C E9 3A 14 */ add r7, r9, r7 -/* 8035F724 41 80 00 0C */ blt lbl_8035F730 -/* 8035F728 39 20 00 00 */ li r9, 0 -/* 8035F72C 48 00 00 08 */ b lbl_8035F734 -lbl_8035F730: -/* 8035F730 7C 09 03 78 */ mr r9, r0 -lbl_8035F734: -/* 8035F734 2C 04 00 08 */ cmpwi r4, 8 -/* 8035F738 41 80 00 28 */ blt lbl_8035F760 -/* 8035F73C 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035F740 38 00 00 01 */ li r0, 1 -/* 8035F744 7C 00 18 30 */ slw r0, r0, r3 -/* 8035F748 81 04 05 98 */ lwz r8, 0x598(r4) -/* 8035F74C 39 44 05 98 */ addi r10, r4, 0x598 -/* 8035F750 38 80 00 00 */ li r4, 0 -/* 8035F754 7D 00 00 78 */ andc r0, r8, r0 -/* 8035F758 90 0A 00 00 */ stw r0, 0(r10) -/* 8035F75C 48 00 00 20 */ b lbl_8035F77C -lbl_8035F760: -/* 8035F760 81 02 CB 80 */ lwz r8, __GXData(r2) -/* 8035F764 38 00 00 01 */ li r0, 1 -/* 8035F768 7C 00 18 30 */ slw r0, r0, r3 -/* 8035F76C 39 48 05 98 */ addi r10, r8, 0x598 -/* 8035F770 81 08 05 98 */ lwz r8, 0x598(r8) -/* 8035F774 7D 00 03 78 */ or r0, r8, r0 -/* 8035F778 90 0A 00 00 */ stw r0, 0(r10) -lbl_8035F77C: -/* 8035F77C 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 8035F780 41 82 00 74 */ beq lbl_8035F7F4 -/* 8035F784 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F788 51 20 64 66 */ rlwimi r0, r9, 0xc, 0x11, 0x13 -/* 8035F78C 2C 06 00 FF */ cmpwi r6, 0xff -/* 8035F790 90 07 00 00 */ stw r0, 0(r7) -/* 8035F794 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F798 50 80 7B A0 */ rlwimi r0, r4, 0xf, 0xe, 0x10 -/* 8035F79C 90 07 00 00 */ stw r0, 0(r7) -/* 8035F7A0 40 82 00 0C */ bne lbl_8035F7AC -/* 8035F7A4 38 60 00 07 */ li r3, 7 -/* 8035F7A8 48 00 00 18 */ b lbl_8035F7C0 -lbl_8035F7AC: -/* 8035F7AC 3C 60 80 3D */ lis r3, c2r@ha /* 0x803D2810@ha */ -/* 8035F7B0 54 C4 10 3A */ slwi r4, r6, 2 -/* 8035F7B4 38 03 28 10 */ addi r0, r3, c2r@l /* 0x803D2810@l */ -/* 8035F7B8 7C 60 22 14 */ add r3, r0, r4 -/* 8035F7BC 80 63 00 00 */ lwz r3, 0(r3) -lbl_8035F7C0: -/* 8035F7C0 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F7C4 50 60 9A 98 */ rlwimi r0, r3, 0x13, 0xa, 0xc -/* 8035F7C8 2C 05 00 FF */ cmpwi r5, 0xff -/* 8035F7CC 90 07 00 00 */ stw r0, 0(r7) -/* 8035F7D0 38 60 00 00 */ li r3, 0 -/* 8035F7D4 41 82 00 10 */ beq lbl_8035F7E4 -/* 8035F7D8 54 A0 05 EF */ rlwinm. r0, r5, 0, 0x17, 0x17 -/* 8035F7DC 40 82 00 08 */ bne lbl_8035F7E4 -/* 8035F7E0 38 60 00 01 */ li r3, 1 -lbl_8035F7E4: -/* 8035F7E4 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F7E8 50 60 93 5A */ rlwimi r0, r3, 0x12, 0xd, 0xd -/* 8035F7EC 90 07 00 00 */ stw r0, 0(r7) -/* 8035F7F0 48 00 00 70 */ b lbl_8035F860 -lbl_8035F7F4: -/* 8035F7F4 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F7F8 51 20 07 7E */ rlwimi r0, r9, 0, 0x1d, 0x1f -/* 8035F7FC 2C 06 00 FF */ cmpwi r6, 0xff -/* 8035F800 90 07 00 00 */ stw r0, 0(r7) -/* 8035F804 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F808 50 80 1E B8 */ rlwimi r0, r4, 3, 0x1a, 0x1c -/* 8035F80C 90 07 00 00 */ stw r0, 0(r7) -/* 8035F810 40 82 00 0C */ bne lbl_8035F81C -/* 8035F814 38 60 00 07 */ li r3, 7 -/* 8035F818 48 00 00 18 */ b lbl_8035F830 -lbl_8035F81C: -/* 8035F81C 3C 60 80 3D */ lis r3, c2r@ha /* 0x803D2810@ha */ -/* 8035F820 54 C4 10 3A */ slwi r4, r6, 2 -/* 8035F824 38 03 28 10 */ addi r0, r3, c2r@l /* 0x803D2810@l */ -/* 8035F828 7C 60 22 14 */ add r3, r0, r4 -/* 8035F82C 80 63 00 00 */ lwz r3, 0(r3) -lbl_8035F830: -/* 8035F830 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F834 50 60 3D B0 */ rlwimi r0, r3, 7, 0x16, 0x18 -/* 8035F838 2C 05 00 FF */ cmpwi r5, 0xff -/* 8035F83C 90 07 00 00 */ stw r0, 0(r7) -/* 8035F840 38 60 00 00 */ li r3, 0 -/* 8035F844 41 82 00 10 */ beq lbl_8035F854 -/* 8035F848 54 A0 05 EF */ rlwinm. r0, r5, 0, 0x17, 0x17 -/* 8035F84C 40 82 00 08 */ bne lbl_8035F854 -/* 8035F850 38 60 00 01 */ li r3, 1 -lbl_8035F854: -/* 8035F854 80 07 00 00 */ lwz r0, 0(r7) -/* 8035F858 50 60 36 72 */ rlwimi r0, r3, 6, 0x19, 0x19 -/* 8035F85C 90 07 00 00 */ stw r0, 0(r7) -lbl_8035F860: -/* 8035F860 38 00 00 61 */ li r0, 0x61 -/* 8035F864 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 8035F868 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035F86C 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035F870 38 00 00 00 */ li r0, 0 -/* 8035F874 80 87 00 00 */ lwz r4, 0(r7) -/* 8035F878 90 85 80 00 */ stw r4, -0x8000(r5) -/* 8035F87C B0 03 00 02 */ sth r0, 2(r3) -/* 8035F880 80 03 05 AC */ lwz r0, 0x5ac(r3) -/* 8035F884 60 00 00 01 */ ori r0, r0, 1 -/* 8035F888 90 03 05 AC */ stw r0, 0x5ac(r3) -/* 8035F88C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevSwapMode.s b/asm/dolphin/gx/GXTev/GXSetTevSwapMode.s deleted file mode 100644 index a085c1f8c76..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevSwapMode.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_8035F55C: -/* 8035F55C 54 63 10 3A */ slwi r3, r3, 2 -/* 8035F560 80 E2 CB 80 */ lwz r7, __GXData(r2) -/* 8035F564 39 03 01 70 */ addi r8, r3, 0x170 -/* 8035F568 7D 07 42 14 */ add r8, r7, r8 -/* 8035F56C 80 08 00 00 */ lwz r0, 0(r8) -/* 8035F570 50 80 07 BE */ rlwimi r0, r4, 0, 0x1e, 0x1f -/* 8035F574 38 60 00 61 */ li r3, 0x61 -/* 8035F578 90 08 00 00 */ stw r0, 0(r8) -/* 8035F57C 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035F580 38 00 00 00 */ li r0, 0 -/* 8035F584 80 C8 00 00 */ lwz r6, 0(r8) -/* 8035F588 50 A6 17 3A */ rlwimi r6, r5, 2, 0x1c, 0x1d -/* 8035F58C 90 C8 00 00 */ stw r6, 0(r8) -/* 8035F590 98 64 80 00 */ stb r3, 0x8000(r4) /* 0xCC008000@l */ -/* 8035F594 80 68 00 00 */ lwz r3, 0(r8) -/* 8035F598 90 64 80 00 */ stw r3, -0x8000(r4) -/* 8035F59C B0 07 00 02 */ sth r0, 2(r7) -/* 8035F5A0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetTevSwapModeTable.s b/asm/dolphin/gx/GXTev/GXSetTevSwapModeTable.s deleted file mode 100644 index 8b15047c0eb..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetTevSwapModeTable.s +++ /dev/null @@ -1,33 +0,0 @@ -lbl_8035F5A4: -/* 8035F5A4 54 69 08 3C */ slwi r9, r3, 1 -/* 8035F5A8 81 02 CB 80 */ lwz r8, __GXData(r2) -/* 8035F5AC 54 63 18 38 */ slwi r3, r3, 3 -/* 8035F5B0 39 43 01 B0 */ addi r10, r3, 0x1b0 -/* 8035F5B4 7D 48 52 14 */ add r10, r8, r10 -/* 8035F5B8 80 6A 00 00 */ lwz r3, 0(r10) -/* 8035F5BC 50 83 07 BE */ rlwimi r3, r4, 0, 0x1e, 0x1f -/* 8035F5C0 38 09 00 01 */ addi r0, r9, 1 -/* 8035F5C4 90 6A 00 00 */ stw r3, 0(r10) -/* 8035F5C8 54 03 10 3A */ slwi r3, r0, 2 -/* 8035F5CC 39 23 01 B0 */ addi r9, r3, 0x1b0 -/* 8035F5D0 80 0A 00 00 */ lwz r0, 0(r10) -/* 8035F5D4 50 A0 17 3A */ rlwimi r0, r5, 2, 0x1c, 0x1d -/* 8035F5D8 38 A0 00 61 */ li r5, 0x61 -/* 8035F5DC 90 0A 00 00 */ stw r0, 0(r10) -/* 8035F5E0 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8035F5E4 7D 28 4A 14 */ add r9, r8, r9 -/* 8035F5E8 98 A4 80 00 */ stb r5, 0x8000(r4) /* 0xCC008000@l */ -/* 8035F5EC 38 00 00 00 */ li r0, 0 -/* 8035F5F0 80 6A 00 00 */ lwz r3, 0(r10) -/* 8035F5F4 90 64 80 00 */ stw r3, -0x8000(r4) -/* 8035F5F8 80 69 00 00 */ lwz r3, 0(r9) -/* 8035F5FC 50 C3 07 BE */ rlwimi r3, r6, 0, 0x1e, 0x1f -/* 8035F600 90 69 00 00 */ stw r3, 0(r9) -/* 8035F604 80 69 00 00 */ lwz r3, 0(r9) -/* 8035F608 50 E3 17 3A */ rlwimi r3, r7, 2, 0x1c, 0x1d -/* 8035F60C 90 69 00 00 */ stw r3, 0(r9) -/* 8035F610 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 8035F614 80 69 00 00 */ lwz r3, 0(r9) -/* 8035F618 90 64 80 00 */ stw r3, -0x8000(r4) -/* 8035F61C B0 08 00 02 */ sth r0, 2(r8) -/* 8035F620 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTev/GXSetZTexture.s b/asm/dolphin/gx/GXTev/GXSetZTexture.s deleted file mode 100644 index 29835810dea..00000000000 --- a/asm/dolphin/gx/GXTev/GXSetZTexture.s +++ /dev/null @@ -1,42 +0,0 @@ -lbl_8035F668: -/* 8035F668 2C 04 00 13 */ cmpwi r4, 0x13 -/* 8035F66C 38 00 00 F4 */ li r0, 0xf4 -/* 8035F670 38 C0 00 00 */ li r6, 0 -/* 8035F674 50 A6 02 3E */ rlwimi r6, r5, 0, 8, 0x1f -/* 8035F678 50 06 C0 0E */ rlwimi r6, r0, 0x18, 0, 7 -/* 8035F67C 38 E0 00 00 */ li r7, 0 -/* 8035F680 41 82 00 28 */ beq lbl_8035F6A8 -/* 8035F684 40 80 00 10 */ bge lbl_8035F694 -/* 8035F688 2C 04 00 11 */ cmpwi r4, 0x11 -/* 8035F68C 41 82 00 14 */ beq lbl_8035F6A0 -/* 8035F690 48 00 00 28 */ b lbl_8035F6B8 -lbl_8035F694: -/* 8035F694 2C 04 00 16 */ cmpwi r4, 0x16 -/* 8035F698 41 82 00 18 */ beq lbl_8035F6B0 -/* 8035F69C 48 00 00 1C */ b lbl_8035F6B8 -lbl_8035F6A0: -/* 8035F6A0 39 00 00 00 */ li r8, 0 -/* 8035F6A4 48 00 00 18 */ b lbl_8035F6BC -lbl_8035F6A8: -/* 8035F6A8 39 00 00 01 */ li r8, 1 -/* 8035F6AC 48 00 00 10 */ b lbl_8035F6BC -lbl_8035F6B0: -/* 8035F6B0 39 00 00 02 */ li r8, 2 -/* 8035F6B4 48 00 00 08 */ b lbl_8035F6BC -lbl_8035F6B8: -/* 8035F6B8 39 00 00 02 */ li r8, 2 -lbl_8035F6BC: -/* 8035F6BC 38 00 00 61 */ li r0, 0x61 -/* 8035F6C0 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035F6C4 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035F6C8 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8035F6CC 51 07 07 BE */ rlwimi r7, r8, 0, 0x1e, 0x1f -/* 8035F6D0 50 67 17 3A */ rlwimi r7, r3, 2, 0x1c, 0x1d -/* 8035F6D4 90 C5 80 00 */ stw r6, -0x8000(r5) -/* 8035F6D8 38 60 00 F5 */ li r3, 0xf5 -/* 8035F6DC 50 67 C0 0E */ rlwimi r7, r3, 0x18, 0, 7 -/* 8035F6E0 98 05 80 00 */ stb r0, -0x8000(r5) -/* 8035F6E4 38 00 00 00 */ li r0, 0 -/* 8035F6E8 90 E5 80 00 */ stw r7, -0x8000(r5) -/* 8035F6EC B0 04 00 02 */ sth r0, 2(r4) -/* 8035F6F0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjFmt.s b/asm/dolphin/gx/GXTexture/GXGetTexObjFmt.s deleted file mode 100644 index c4beb07c31b..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjFmt.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_8035E258: -/* 8035E258 80 63 00 14 */ lwz r3, 0x14(r3) -/* 8035E25C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjHeight.s b/asm/dolphin/gx/GXTexture/GXGetTexObjHeight.s deleted file mode 100644 index baf46ffcd03..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjHeight.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_8035E248: -/* 8035E248 80 03 00 08 */ lwz r0, 8(r3) -/* 8035E24C 54 03 B5 BE */ rlwinm r3, r0, 0x16, 0x16, 0x1f -/* 8035E250 38 63 00 01 */ addi r3, r3, 1 -/* 8035E254 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjMipMap.s b/asm/dolphin/gx/GXTexture/GXGetTexObjMipMap.s deleted file mode 100644 index eb3c64db2b6..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjMipMap.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_8035E278: -/* 8035E278 88 03 00 1F */ lbz r0, 0x1f(r3) -/* 8035E27C 54 03 07 FE */ clrlwi r3, r0, 0x1f -/* 8035E280 38 03 FF FF */ addi r0, r3, -1 -/* 8035E284 7C 00 00 34 */ cntlzw r0, r0 -/* 8035E288 54 03 DE 3E */ rlwinm r3, r0, 0x1b, 0x18, 0x1f -/* 8035E28C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjTlut.s b/asm/dolphin/gx/GXTexture/GXGetTexObjTlut.s deleted file mode 100644 index c287830fc11..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjTlut.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_8035E290: -/* 8035E290 80 63 00 18 */ lwz r3, 0x18(r3) -/* 8035E294 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjWidth.s b/asm/dolphin/gx/GXTexture/GXGetTexObjWidth.s deleted file mode 100644 index 81c3b76ed27..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjWidth.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_8035E238: -/* 8035E238 80 03 00 08 */ lwz r0, 8(r3) -/* 8035E23C 54 03 05 BE */ clrlwi r3, r0, 0x16 -/* 8035E240 38 63 00 01 */ addi r3, r3, 1 -/* 8035E244 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjWrapS.s b/asm/dolphin/gx/GXTexture/GXGetTexObjWrapS.s deleted file mode 100644 index 32169ae5e8c..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjWrapS.s +++ /dev/null @@ -1,4 +0,0 @@ -lbl_8035E260: -/* 8035E260 80 03 00 00 */ lwz r0, 0(r3) -/* 8035E264 54 03 07 BE */ clrlwi r3, r0, 0x1e -/* 8035E268 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXGetTexObjWrapT.s b/asm/dolphin/gx/GXTexture/GXGetTexObjWrapT.s deleted file mode 100644 index 9e22fc92383..00000000000 --- a/asm/dolphin/gx/GXTexture/GXGetTexObjWrapT.s +++ /dev/null @@ -1,4 +0,0 @@ -lbl_8035E26C: -/* 8035E26C 80 03 00 00 */ lwz r0, 0(r3) -/* 8035E270 54 03 F7 BE */ rlwinm r3, r0, 0x1e, 0x1e, 0x1f -/* 8035E274 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXInvalidateTexAll.s b/asm/dolphin/gx/GXTexture/GXInvalidateTexAll.s deleted file mode 100644 index ad5ab063f5d..00000000000 --- a/asm/dolphin/gx/GXTexture/GXInvalidateTexAll.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_8035E664: -/* 8035E664 7C 08 02 A6 */ mflr r0 -/* 8035E668 90 01 00 04 */ stw r0, 4(r1) -/* 8035E66C 94 21 FF F8 */ stwu r1, -8(r1) -/* 8035E670 48 00 0B 05 */ bl __GXFlushTextureState -/* 8035E674 38 C0 00 61 */ li r6, 0x61 -/* 8035E678 3C 60 66 00 */ lis r3, 0x6600 /* 0x66001000@ha */ -/* 8035E67C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8035E680 98 C5 80 00 */ stb r6, 0x8000(r5) /* 0xCC008000@l */ -/* 8035E684 38 83 10 00 */ addi r4, r3, 0x1000 /* 0x66001000@l */ -/* 8035E688 38 03 11 00 */ addi r0, r3, 0x1100 -/* 8035E68C 90 85 80 00 */ stw r4, -0x8000(r5) -/* 8035E690 98 C5 80 00 */ stb r6, -0x8000(r5) -/* 8035E694 90 05 80 00 */ stw r0, -0x8000(r5) -/* 8035E698 48 00 0A DD */ bl __GXFlushTextureState -/* 8035E69C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8035E6A0 38 21 00 08 */ addi r1, r1, 8 -/* 8035E6A4 7C 08 03 A6 */ mtlr r0 -/* 8035E6A8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXSetTexRegionCallback.s b/asm/dolphin/gx/GXTexture/GXSetTexRegionCallback.s deleted file mode 100644 index 473bb05a9d2..00000000000 --- a/asm/dolphin/gx/GXTexture/GXSetTexRegionCallback.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_8035E6AC: -/* 8035E6AC 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035E6B0 84 04 04 C8 */ lwzu r0, 0x4c8(r4) -/* 8035E6B4 90 64 00 00 */ stw r3, 0(r4) -/* 8035E6B8 7C 03 03 78 */ mr r3, r0 -/* 8035E6BC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTexture/GXSetTlutRegionCallback.s b/asm/dolphin/gx/GXTexture/GXSetTlutRegionCallback.s deleted file mode 100644 index 1a3f46629a9..00000000000 --- a/asm/dolphin/gx/GXTexture/GXSetTlutRegionCallback.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_8035E6C0: -/* 8035E6C0 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 8035E6C4 84 04 04 CC */ lwzu r0, 0x4cc(r4) -/* 8035E6C8 90 64 00 00 */ stw r3, 0(r4) -/* 8035E6CC 7C 03 03 78 */ mr r3, r0 -/* 8035E6D0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXGetViewportv.s b/asm/dolphin/gx/GXTransform/GXGetViewportv.s deleted file mode 100644 index 1a7459163a1..00000000000 --- a/asm/dolphin/gx/GXTransform/GXGetViewportv.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_803604AC: -/* 803604AC 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 803604B0 38 84 04 F4 */ addi r4, r4, 0x4f4 -/* 803604B4 E0 44 00 00 */ psq_l f2, 0(r4), 0, 0 /* qr0 */ -/* 803604B8 E0 24 00 08 */ psq_l f1, 8(r4), 0, 0 /* qr0 */ -/* 803604BC E0 04 00 10 */ psq_l f0, 16(r4), 0, 0 /* qr0 */ -/* 803604C0 F0 43 00 00 */ psq_st f2, 0(r3), 0, 0 /* qr0 */ -/* 803604C4 F0 23 00 08 */ psq_st f1, 8(r3), 0, 0 /* qr0 */ -/* 803604C8 F0 03 00 10 */ psq_st f0, 16(r3), 0, 0 /* qr0 */ -/* 803604CC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXLoadNrmMtxImm.s b/asm/dolphin/gx/GXTransform/GXLoadNrmMtxImm.s deleted file mode 100644 index aaf3d2c72cf..00000000000 --- a/asm/dolphin/gx/GXTransform/GXLoadNrmMtxImm.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_8036029C: -/* 8036029C 1C A4 00 03 */ mulli r5, r4, 3 -/* 803602A0 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 803602A4 38 00 00 10 */ li r0, 0x10 -/* 803602A8 38 A5 04 00 */ addi r5, r5, 0x400 -/* 803602AC 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 803602B0 64 A0 00 08 */ oris r0, r5, 8 -/* 803602B4 94 04 80 00 */ stwu r0, -0x8000(r4) -/* 803602B8 E0 A3 00 00 */ psq_l f5, 0(r3), 0, 0 /* qr0 */ -/* 803602BC C0 83 00 08 */ lfs f4, 8(r3) -/* 803602C0 E0 63 00 10 */ psq_l f3, 16(r3), 0, 0 /* qr0 */ -/* 803602C4 C0 43 00 18 */ lfs f2, 0x18(r3) -/* 803602C8 E0 23 00 20 */ psq_l f1, 32(r3), 0, 0 /* qr0 */ -/* 803602CC C0 03 00 28 */ lfs f0, 0x28(r3) -/* 803602D0 F0 A4 00 00 */ psq_st f5, 0(r4), 0, 0 /* qr0 */ -/* 803602D4 D0 84 00 00 */ stfs f4, 0(r4) -/* 803602D8 F0 64 00 00 */ psq_st f3, 0(r4), 0, 0 /* qr0 */ -/* 803602DC D0 44 00 00 */ stfs f2, 0(r4) -/* 803602E0 F0 24 00 00 */ psq_st f1, 0(r4), 0, 0 /* qr0 */ -/* 803602E4 D0 04 00 00 */ stfs f0, 0(r4) -/* 803602E8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXLoadPosMtxImm.s b/asm/dolphin/gx/GXTransform/GXLoadPosMtxImm.s deleted file mode 100644 index 7b299b6af64..00000000000 --- a/asm/dolphin/gx/GXTransform/GXLoadPosMtxImm.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_8036024C: -/* 8036024C 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360250 38 00 00 10 */ li r0, 0x10 -/* 80360254 54 84 10 3A */ slwi r4, r4, 2 -/* 80360258 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8036025C 64 80 00 0B */ oris r0, r4, 0xb -/* 80360260 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360264 38 85 80 00 */ addi r4, r5, -32768 -/* 80360268 E0 A3 00 00 */ psq_l f5, 0(r3), 0, 0 /* qr0 */ -/* 8036026C E0 83 00 08 */ psq_l f4, 8(r3), 0, 0 /* qr0 */ -/* 80360270 E0 63 00 10 */ psq_l f3, 16(r3), 0, 0 /* qr0 */ -/* 80360274 E0 43 00 18 */ psq_l f2, 24(r3), 0, 0 /* qr0 */ -/* 80360278 E0 23 00 20 */ psq_l f1, 32(r3), 0, 0 /* qr0 */ -/* 8036027C E0 03 00 28 */ psq_l f0, 40(r3), 0, 0 /* qr0 */ -/* 80360280 F0 A4 00 00 */ psq_st f5, 0(r4), 0, 0 /* qr0 */ -/* 80360284 F0 84 00 00 */ psq_st f4, 0(r4), 0, 0 /* qr0 */ -/* 80360288 F0 64 00 00 */ psq_st f3, 0(r4), 0, 0 /* qr0 */ -/* 8036028C F0 44 00 00 */ psq_st f2, 0(r4), 0, 0 /* qr0 */ -/* 80360290 F0 24 00 00 */ psq_st f1, 0(r4), 0, 0 /* qr0 */ -/* 80360294 F0 04 00 00 */ psq_st f0, 0(r4), 0, 0 /* qr0 */ -/* 80360298 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXLoadTexMtxImm.s b/asm/dolphin/gx/GXTransform/GXLoadTexMtxImm.s deleted file mode 100644 index 70caed9a65f..00000000000 --- a/asm/dolphin/gx/GXTransform/GXLoadTexMtxImm.s +++ /dev/null @@ -1,51 +0,0 @@ -lbl_80360320: -/* 80360320 28 04 00 40 */ cmplwi r4, 0x40 -/* 80360324 41 80 00 14 */ blt lbl_80360338 -/* 80360328 38 04 FF C0 */ addi r0, r4, -64 -/* 8036032C 54 04 10 3A */ slwi r4, r0, 2 -/* 80360330 38 E4 05 00 */ addi r7, r4, 0x500 -/* 80360334 48 00 00 08 */ b lbl_8036033C -lbl_80360338: -/* 80360338 54 87 10 3A */ slwi r7, r4, 2 -lbl_8036033C: -/* 8036033C 2C 05 00 01 */ cmpwi r5, 1 -/* 80360340 40 82 00 0C */ bne lbl_8036034C -/* 80360344 38 80 00 08 */ li r4, 8 -/* 80360348 48 00 00 08 */ b lbl_80360350 -lbl_8036034C: -/* 8036034C 38 80 00 0C */ li r4, 0xc -lbl_80360350: -/* 80360350 38 04 FF FF */ addi r0, r4, -1 -/* 80360354 54 06 80 1E */ slwi r6, r0, 0x10 -/* 80360358 38 00 00 10 */ li r0, 0x10 -/* 8036035C 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 80360360 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 80360364 7C E0 33 78 */ or r0, r7, r6 -/* 80360368 2C 05 00 00 */ cmpwi r5, 0 -/* 8036036C 90 04 80 00 */ stw r0, -0x8000(r4) -/* 80360370 40 82 00 3C */ bne lbl_803603AC -/* 80360374 38 84 80 00 */ addi r4, r4, -32768 -/* 80360378 E0 A3 00 00 */ psq_l f5, 0(r3), 0, 0 /* qr0 */ -/* 8036037C E0 83 00 08 */ psq_l f4, 8(r3), 0, 0 /* qr0 */ -/* 80360380 E0 63 00 10 */ psq_l f3, 16(r3), 0, 0 /* qr0 */ -/* 80360384 E0 43 00 18 */ psq_l f2, 24(r3), 0, 0 /* qr0 */ -/* 80360388 E0 23 00 20 */ psq_l f1, 32(r3), 0, 0 /* qr0 */ -/* 8036038C E0 03 00 28 */ psq_l f0, 40(r3), 0, 0 /* qr0 */ -/* 80360390 F0 A4 00 00 */ psq_st f5, 0(r4), 0, 0 /* qr0 */ -/* 80360394 F0 84 00 00 */ psq_st f4, 0(r4), 0, 0 /* qr0 */ -/* 80360398 F0 64 00 00 */ psq_st f3, 0(r4), 0, 0 /* qr0 */ -/* 8036039C F0 44 00 00 */ psq_st f2, 0(r4), 0, 0 /* qr0 */ -/* 803603A0 F0 24 00 00 */ psq_st f1, 0(r4), 0, 0 /* qr0 */ -/* 803603A4 F0 04 00 00 */ psq_st f0, 0(r4), 0, 0 /* qr0 */ -/* 803603A8 4E 80 00 20 */ blr -lbl_803603AC: -/* 803603AC 38 84 80 00 */ addi r4, r4, -32768 -/* 803603B0 E0 63 00 00 */ psq_l f3, 0(r3), 0, 0 /* qr0 */ -/* 803603B4 E0 43 00 08 */ psq_l f2, 8(r3), 0, 0 /* qr0 */ -/* 803603B8 E0 23 00 10 */ psq_l f1, 16(r3), 0, 0 /* qr0 */ -/* 803603BC E0 03 00 18 */ psq_l f0, 24(r3), 0, 0 /* qr0 */ -/* 803603C0 F0 64 00 00 */ psq_st f3, 0(r4), 0, 0 /* qr0 */ -/* 803603C4 F0 44 00 00 */ psq_st f2, 0(r4), 0, 0 /* qr0 */ -/* 803603C8 F0 24 00 00 */ psq_st f1, 0(r4), 0, 0 /* qr0 */ -/* 803603CC F0 04 00 00 */ psq_st f0, 0(r4), 0, 0 /* qr0 */ -/* 803603D0 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXSetClipMode.s b/asm/dolphin/gx/GXTransform/GXSetClipMode.s deleted file mode 100644 index 1fc1d20d2cc..00000000000 --- a/asm/dolphin/gx/GXTransform/GXSetClipMode.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_803605D0: -/* 803605D0 38 00 00 10 */ li r0, 0x10 -/* 803605D4 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 803605D8 3C C0 CC 01 */ lis r6, 0xCC01 /* 0xCC008000@ha */ -/* 803605DC 98 06 80 00 */ stb r0, 0x8000(r6) /* 0xCC008000@l */ -/* 803605E0 38 A0 10 05 */ li r5, 0x1005 -/* 803605E4 38 00 00 01 */ li r0, 1 -/* 803605E8 90 A6 80 00 */ stw r5, -0x8000(r6) -/* 803605EC 90 66 80 00 */ stw r3, -0x8000(r6) -/* 803605F0 B0 04 00 02 */ sth r0, 2(r4) -/* 803605F4 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXSetCurrentMtx.s b/asm/dolphin/gx/GXTransform/GXSetCurrentMtx.s deleted file mode 100644 index 1024e426779..00000000000 --- a/asm/dolphin/gx/GXTransform/GXSetCurrentMtx.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_803602EC: -/* 803602EC 7C 08 02 A6 */ mflr r0 -/* 803602F0 90 01 00 04 */ stw r0, 4(r1) -/* 803602F4 94 21 FF F8 */ stwu r1, -8(r1) -/* 803602F8 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 803602FC 80 04 00 80 */ lwz r0, 0x80(r4) -/* 80360300 50 60 06 BE */ rlwimi r0, r3, 0, 0x1a, 0x1f -/* 80360304 38 60 00 00 */ li r3, 0 -/* 80360308 90 04 00 80 */ stw r0, 0x80(r4) -/* 8036030C 48 00 02 ED */ bl __GXSetMatrixIndex -/* 80360310 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80360314 38 21 00 08 */ addi r1, r1, 8 -/* 80360318 7C 08 03 A6 */ mtlr r0 -/* 8036031C 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXSetProjection.s b/asm/dolphin/gx/GXTransform/GXSetProjection.s deleted file mode 100644 index 7c301072630..00000000000 --- a/asm/dolphin/gx/GXTransform/GXSetProjection.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_803600D4: -/* 803600D4 80 A2 CB 80 */ lwz r5, __GXData(r2) -/* 803600D8 2C 04 00 01 */ cmpwi r4, 1 -/* 803600DC 90 85 04 D8 */ stw r4, 0x4d8(r5) -/* 803600E0 C0 03 00 00 */ lfs f0, 0(r3) -/* 803600E4 D0 05 04 DC */ stfs f0, 0x4dc(r5) -/* 803600E8 C0 03 00 14 */ lfs f0, 0x14(r3) -/* 803600EC D0 05 04 E4 */ stfs f0, 0x4e4(r5) -/* 803600F0 C0 03 00 28 */ lfs f0, 0x28(r3) -/* 803600F4 D0 05 04 EC */ stfs f0, 0x4ec(r5) -/* 803600F8 C0 03 00 2C */ lfs f0, 0x2c(r3) -/* 803600FC D0 05 04 F0 */ stfs f0, 0x4f0(r5) -/* 80360100 40 82 00 18 */ bne lbl_80360118 -/* 80360104 C0 03 00 0C */ lfs f0, 0xc(r3) -/* 80360108 D0 05 04 E0 */ stfs f0, 0x4e0(r5) -/* 8036010C C0 03 00 1C */ lfs f0, 0x1c(r3) -/* 80360110 D0 05 04 E8 */ stfs f0, 0x4e8(r5) -/* 80360114 48 00 00 14 */ b lbl_80360128 -lbl_80360118: -/* 80360118 C0 03 00 08 */ lfs f0, 8(r3) -/* 8036011C D0 05 04 E0 */ stfs f0, 0x4e0(r5) -/* 80360120 C0 03 00 18 */ lfs f0, 0x18(r3) -/* 80360124 D0 05 04 E8 */ stfs f0, 0x4e8(r5) -lbl_80360128: -/* 80360128 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8036012C 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 80360130 38 00 00 10 */ li r0, 0x10 -/* 80360134 3C 60 00 06 */ lis r3, 0x0006 /* 0x00061020@ha */ -/* 80360138 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 8036013C 38 03 10 20 */ addi r0, r3, 0x1020 /* 0x00061020@l */ -/* 80360140 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360144 38 C5 80 00 */ addi r6, r5, -32768 -/* 80360148 38 64 04 DC */ addi r3, r4, 0x4dc -/* 8036014C E0 43 00 00 */ psq_l f2, 0(r3), 0, 0 /* qr0 */ -/* 80360150 E0 23 00 08 */ psq_l f1, 8(r3), 0, 0 /* qr0 */ -/* 80360154 E0 03 00 10 */ psq_l f0, 16(r3), 0, 0 /* qr0 */ -/* 80360158 F0 46 00 00 */ psq_st f2, 0(r6), 0, 0 /* qr0 */ -/* 8036015C F0 26 00 00 */ psq_st f1, 0(r6), 0, 0 /* qr0 */ -/* 80360160 F0 06 00 00 */ psq_st f0, 0(r6), 0, 0 /* qr0 */ -/* 80360164 80 64 04 D8 */ lwz r3, 0x4d8(r4) -/* 80360168 38 00 00 01 */ li r0, 1 -/* 8036016C 90 65 80 00 */ stw r3, -0x8000(r5) -/* 80360170 B0 04 00 02 */ sth r0, 2(r4) -/* 80360174 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXSetScissor.s b/asm/dolphin/gx/GXTransform/GXSetScissor.s deleted file mode 100644 index a3b597c2a5a..00000000000 --- a/asm/dolphin/gx/GXTransform/GXSetScissor.s +++ /dev/null @@ -1,31 +0,0 @@ -lbl_803604D0: -/* 803604D0 80 E2 CB 80 */ lwz r7, __GXData(r2) -/* 803604D4 38 84 01 56 */ addi r4, r4, 0x156 -/* 803604D8 38 C6 FF FF */ addi r6, r6, -1 -/* 803604DC 80 07 00 F8 */ lwz r0, 0xf8(r7) -/* 803604E0 50 80 05 7E */ rlwimi r0, r4, 0, 0x15, 0x1f -/* 803604E4 38 63 01 56 */ addi r3, r3, 0x156 -/* 803604E8 90 07 00 F8 */ stw r0, 0xf8(r7) -/* 803604EC 39 05 FF FF */ addi r8, r5, -1 -/* 803604F0 7C C4 32 14 */ add r6, r4, r6 -/* 803604F4 80 07 00 F8 */ lwz r0, 0xf8(r7) -/* 803604F8 50 60 62 66 */ rlwimi r0, r3, 0xc, 9, 0x13 -/* 803604FC 7D 03 42 14 */ add r8, r3, r8 -/* 80360500 90 07 00 F8 */ stw r0, 0xf8(r7) -/* 80360504 38 A0 00 61 */ li r5, 0x61 -/* 80360508 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 8036050C 80 67 00 FC */ lwz r3, 0xfc(r7) -/* 80360510 50 C3 05 7E */ rlwimi r3, r6, 0, 0x15, 0x1f -/* 80360514 38 00 00 00 */ li r0, 0 -/* 80360518 90 67 00 FC */ stw r3, 0xfc(r7) -/* 8036051C 80 67 00 FC */ lwz r3, 0xfc(r7) -/* 80360520 51 03 62 66 */ rlwimi r3, r8, 0xc, 9, 0x13 -/* 80360524 90 67 00 FC */ stw r3, 0xfc(r7) -/* 80360528 98 A4 80 00 */ stb r5, 0x8000(r4) /* 0xCC008000@l */ -/* 8036052C 80 67 00 F8 */ lwz r3, 0xf8(r7) -/* 80360530 90 64 80 00 */ stw r3, -0x8000(r4) -/* 80360534 98 A4 80 00 */ stb r5, -0x8000(r4) -/* 80360538 80 67 00 FC */ lwz r3, 0xfc(r7) -/* 8036053C 90 64 80 00 */ stw r3, -0x8000(r4) -/* 80360540 B0 07 00 02 */ sth r0, 2(r7) -/* 80360544 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXSetScissorBoxOffset.s b/asm/dolphin/gx/GXTransform/GXSetScissorBoxOffset.s deleted file mode 100644 index 917fe2b0854..00000000000 --- a/asm/dolphin/gx/GXTransform/GXSetScissorBoxOffset.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_80360590: -/* 80360590 38 A3 01 56 */ addi r5, r3, 0x156 -/* 80360594 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 80360598 38 04 01 56 */ addi r0, r4, 0x156 -/* 8036059C 38 80 00 00 */ li r4, 0 -/* 803605A0 50 A4 FD BE */ rlwimi r4, r5, 0x1f, 0x16, 0x1f -/* 803605A4 38 A4 00 00 */ addi r5, r4, 0 -/* 803605A8 50 05 4B 2A */ rlwimi r5, r0, 9, 0xc, 0x15 -/* 803605AC 38 00 00 61 */ li r0, 0x61 -/* 803605B0 3C 80 CC 01 */ lis r4, 0xCC01 /* 0xCC008000@ha */ -/* 803605B4 98 04 80 00 */ stb r0, 0x8000(r4) /* 0xCC008000@l */ -/* 803605B8 38 00 00 59 */ li r0, 0x59 -/* 803605BC 50 05 C0 0E */ rlwimi r5, r0, 0x18, 0, 7 -/* 803605C0 90 A4 80 00 */ stw r5, -0x8000(r4) -/* 803605C4 38 00 00 00 */ li r0, 0 -/* 803605C8 B0 03 00 02 */ sth r0, 2(r3) -/* 803605CC 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/GXSetViewport.s b/asm/dolphin/gx/GXTransform/GXSetViewport.s deleted file mode 100644 index 4ae13a60f19..00000000000 --- a/asm/dolphin/gx/GXTransform/GXSetViewport.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_80360464: -/* 80360464 7C 08 02 A6 */ mflr r0 -/* 80360468 90 01 00 04 */ stw r0, 4(r1) -/* 8036046C 94 21 FF F8 */ stwu r1, -8(r1) -/* 80360470 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 80360474 D0 23 04 F4 */ stfs f1, 0x4f4(r3) -/* 80360478 D0 43 04 F8 */ stfs f2, 0x4f8(r3) -/* 8036047C D0 63 04 FC */ stfs f3, 0x4fc(r3) -/* 80360480 D0 83 05 00 */ stfs f4, 0x500(r3) -/* 80360484 D0 A3 05 04 */ stfs f5, 0x504(r3) -/* 80360488 D0 C3 05 08 */ stfs f6, 0x508(r3) -/* 8036048C 4B FF FF 49 */ bl __GXSetViewport -/* 80360490 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 80360494 38 00 00 01 */ li r0, 1 -/* 80360498 B0 03 00 02 */ sth r0, 2(r3) -/* 8036049C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803604A0 38 21 00 08 */ addi r1, r1, 8 -/* 803604A4 7C 08 03 A6 */ mtlr r0 -/* 803604A8 4E 80 00 20 */ blr diff --git a/asm/dolphin/gx/GXTransform/__GXSetMatrixIndex.s b/asm/dolphin/gx/GXTransform/__GXSetMatrixIndex.s deleted file mode 100644 index 719c678629a..00000000000 --- a/asm/dolphin/gx/GXTransform/__GXSetMatrixIndex.s +++ /dev/null @@ -1,36 +0,0 @@ -lbl_803605F8: -/* 803605F8 2C 03 00 05 */ cmpwi r3, 5 -/* 803605FC 40 80 00 3C */ bge lbl_80360638 -/* 80360600 38 00 00 08 */ li r0, 8 -/* 80360604 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 80360608 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 8036060C 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360610 38 00 00 30 */ li r0, 0x30 -/* 80360614 38 60 00 10 */ li r3, 0x10 -/* 80360618 98 05 80 00 */ stb r0, -0x8000(r5) -/* 8036061C 38 00 10 18 */ li r0, 0x1018 -/* 80360620 80 84 00 80 */ lwz r4, 0x80(r4) -/* 80360624 90 85 80 00 */ stw r4, -0x8000(r5) -/* 80360628 98 65 80 00 */ stb r3, -0x8000(r5) -/* 8036062C 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360630 90 85 80 00 */ stw r4, -0x8000(r5) -/* 80360634 48 00 00 38 */ b lbl_8036066C -lbl_80360638: -/* 80360638 38 00 00 08 */ li r0, 8 -/* 8036063C 80 82 CB 80 */ lwz r4, __GXData(r2) -/* 80360640 3C A0 CC 01 */ lis r5, 0xCC01 /* 0xCC008000@ha */ -/* 80360644 98 05 80 00 */ stb r0, 0x8000(r5) /* 0xCC008000@l */ -/* 80360648 38 00 00 40 */ li r0, 0x40 -/* 8036064C 38 60 00 10 */ li r3, 0x10 -/* 80360650 98 05 80 00 */ stb r0, -0x8000(r5) -/* 80360654 38 00 10 19 */ li r0, 0x1019 -/* 80360658 80 84 00 84 */ lwz r4, 0x84(r4) -/* 8036065C 90 85 80 00 */ stw r4, -0x8000(r5) -/* 80360660 98 65 80 00 */ stb r3, -0x8000(r5) -/* 80360664 90 05 80 00 */ stw r0, -0x8000(r5) -/* 80360668 90 85 80 00 */ stw r4, -0x8000(r5) -lbl_8036066C: -/* 8036066C 80 62 CB 80 */ lwz r3, __GXData(r2) -/* 80360670 38 00 00 01 */ li r0, 1 -/* 80360674 B0 03 00 02 */ sth r0, 2(r3) -/* 80360678 4E 80 00 20 */ blr diff --git a/include/MSL_C/math.h b/include/MSL_C/math.h index eeae13b1309..51a9bf8f95f 100644 --- a/include/MSL_C/math.h +++ b/include/MSL_C/math.h @@ -7,6 +7,7 @@ #define HUGE_VALF (*(float*) __float_huge) #define M_PI 3.14159265358979323846f +#define M_SQRT3 1.73205f #define DEG_TO_RAD(degrees) (degrees * (M_PI / 180.0f)) #define RAD_TO_DEG(radians) (radians / (180.0f / M_PI)) diff --git a/include/dolphin/gx/GX.h b/include/dolphin/gx/GX.h index cc692a1a393..4eb1bd33932 100644 --- a/include/dolphin/gx/GX.h +++ b/include/dolphin/gx/GX.h @@ -22,10 +22,19 @@ extern "C" { // Pack value into bitfield #define GX_BITFIELD_SET(field, pos, size, value) (field) = __rlwimi((field), (value), 31 - (pos) - (size) + 1, (pos), (pos) + (size)-1) +#define GX_BITGET(field, pos, size) ((field) >> (31 - (pos) - (size) + 1) & ((1 << (size)) - 1)) +#define GX_GET_REG(reg, st, end) GX_BITGET(reg, st, (end - st + 1)) +#define GX_SET_REG(reg, x, st, end) GX_BITFIELD_SET(reg, st, (end - st + 1), x) + #define INSERT_FIELD(reg, value, nbits, shift) \ (reg) = ((u32) (reg) & ~(((1 << (nbits)) - 1) << (shift))) | \ ((u32) (value) << (shift)); +#define FAST_FLAG_SET(regOrg, newFlag, shift, size) \ + do { \ + (regOrg) = (u32)__rlwimi((int)(regOrg), (int)(newFlag), (shift), (32 - (shift) - (size)), (31 - (shift))); \ + } while (0); + #define GX_LOAD_BP_REG 0x61 #define GX_NOP 0 @@ -42,9 +51,49 @@ typedef union { f64 f64; } PPCWGPipe; -volatile PPCWGPipe GXFIFO : 0xCC008000; +#define GXFIFO_ADDR 0xCC008000 +volatile PPCWGPipe GXFIFO : GXFIFO_ADDR; -#define GFX_FIFO(T) (*(volatile T*)0xCC008000) +#define GFX_FIFO(T) (*(volatile T*)GXFIFO_ADDR) + +#define GX_WRITE_U8(data) GXFIFO.u8 = data; +#define GX_WRITE_U32(data) GXFIFO.u32 = data; +#define GX_WRITE_F32(val) (GXFIFO.f32 = (f32)val) + +#define GX_CP_LOAD_REG(addr, data) \ + GXFIFO.s8 = GX_FIFO_CMD_LOAD_CP_REG; \ + GXFIFO.s8 = (addr); \ + GXFIFO.s32 = (data); + +/** + * Header for an XF register load + */ +#define GX_XF_LOAD_REG_HDR(addr) \ + GXFIFO.s8 = GX_FIFO_CMD_LOAD_XF_REG; \ + GXFIFO.s32 = (addr); + +/** + * Load immediate value into XF register + */ +#define GX_XF_LOAD_REG(addr, data) \ + GX_XF_LOAD_REG_HDR(addr); \ + GXFIFO.s32 = (data); + +/** + * Load immediate value into BP register + */ +#define GX_BP_LOAD_REG(data) \ + GXFIFO.s8 = GX_FIFO_CMD_LOAD_BP_REG; \ + GXFIFO.s32 = (data); + +/** + * Load immediate values into multiple XF registers + */ +#define GX_XF_LOAD_REGS(size, addr) \ + { \ + u32 cmd = (size) << 16 | addr; \ + GX_XF_LOAD_REG_HDR(cmd); \ + } inline void GXPosition3f32(f32 x, f32 y, f32 z) { GXFIFO.f32 = x; @@ -131,6 +180,18 @@ inline void GFWriteBPCmd(u32 param_1) { GXFIFO.u32 = param_1; } +static inline u32 GXReadCPReg(u32 addrLo, u32 addrHi) { + u32 hiStart, hiNew, lo; + hiStart = GX_GET_CP_REG(addrHi); + do { + hiNew = hiStart; + lo = GX_GET_CP_REG(addrLo); + hiStart = GX_GET_CP_REG(addrHi); + } while (hiStart != hiNew); + + return ((hiStart << 16) | lo); +} + inline void GFFill(u16 param_1, u32 param_2) { GXFIFO.u8 = 0x10; GXFIFO.u16 = 0; diff --git a/include/dolphin/gx/GXAttr.h b/include/dolphin/gx/GXAttr.h index 7cebd8d6fdd..d820e969798 100644 --- a/include/dolphin/gx/GXAttr.h +++ b/include/dolphin/gx/GXAttr.h @@ -24,7 +24,7 @@ void GXSetVtxDescv(GXVtxDescList* list); void __GXSetVCD(void); void __GXCalculateVLim(void); void GXClearVtxDesc(void); -void GXSetVtxAttrFmt(GXVtxFmt fmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u32); +void GXSetVtxAttrFmt(GXVtxFmt fmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u8); void GXSetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList* list); void __GXSetVAT(void); void GXSetArray(GXAttr attr, void* base, u8); diff --git a/include/dolphin/gx/GXEnum.h b/include/dolphin/gx/GXEnum.h index 591f873efdb..57757364371 100644 --- a/include/dolphin/gx/GXEnum.h +++ b/include/dolphin/gx/GXEnum.h @@ -388,10 +388,12 @@ typedef enum _GXTlut { /* 0x0D */ GX_TLUT13, /* 0x0E */ GX_TLUT14, /* 0x0F */ GX_TLUT15, - /* 0x10 */ GX_BIGTLUT0, + /* 0x10 */ GX_MAX_TLUT, + /* 0x10 */ GX_BIGTLUT0 = 0x10, /* 0x11 */ GX_BIGTLUT1, /* 0x12 */ GX_BIGTLUT2, /* 0x13 */ GX_BIGTLUT3, + /* 0x13 */ GX_MAX_BIGTLUT = 4, } GXTlut; /* 8-bit version of GXTexFmt for use in structures */ @@ -586,6 +588,8 @@ typedef enum _GXTexGenSrc { /* 0x10 */ GX_TG_TEXCOORD4, /* 0x11 */ GX_TG_TEXCOORD5, /* 0x12 */ GX_TG_TEXCOORD6, + /* 0x13 */ GX_TG_COLOR0, + /* 0x14 */ GX_TG_COLOR1, } GXTexGenSrc; typedef enum _GXZTexOp { @@ -756,6 +760,8 @@ typedef enum _GXPixelFmt { /* 0x5 */ GX_PF_U8, /* 0x6 */ GX_PF_V8, /* 0x7 */ GX_PF_YUV420, + /* 0x8 */ GX_PF_MAX, + g } GXPixelFmt; typedef enum _GXZFmt16 { @@ -806,4 +812,1079 @@ typedef enum _GXTlutSize { /* 0x400 */ GX_TLUT_16K = 1024, } GXTlutSize; +typedef enum _GXDirtyFlag { + GX_DIRTY_SU_TEX = (1 << 0), + GX_DIRTY_BP_MASK = (1 << 1), + GX_DIRTY_GEN_MODE = (1 << 2), + GX_DIRTY_VCD = (1 << 3), + GX_DIRTY_VAT = (1 << 4), + GX_DIRTY_AMB_COLOR0 = (1 << 8), + GX_DIRTY_AMB_COLOR1 = (1 << 9), + GX_DIRTY_MAT_COLOR0 = (1 << 10), + GX_DIRTY_MAT_COLOR1 = (1 << 11), + GX_DIRTY_MTX_IDX = (1 << 26), + GX_DIRTY_PROJECTION = (1 << 27), + GX_DIRTY_VIEWPORT = (1 << 28), + + GX_DIRTY_VLIM = GX_DIRTY_VCD | GX_DIRTY_VAT, + + GX_AMB_MAT_MASK = GX_DIRTY_AMB_COLOR0 | GX_DIRTY_AMB_COLOR1 | + GX_DIRTY_MAT_COLOR0 | GX_DIRTY_MAT_COLOR1, + GX_LIGHT_CHAN_MASK = 0x100F000, + GX_TEX_GEN_MASK = 0x2FF0000, +} GXDirtyFlag; + +// CP locator for vertex descriptor (lo). +typedef enum _GXCPVCDLo { + // Position matrix idx [31] + GX_CP_VCD_LO_POSMTXIDX_ST = 31, + GX_CP_VCD_LO_POSMTXIDX_END = 31, + + // Tex 0 matrix idx [30] + GX_CP_VCD_LO_TEX0MTXIDX_ST = 30, + GX_CP_VCD_LO_TEX0MTXIDX_END = 30, + + // Tex 1 matrix idx [29] + GX_CP_VCD_LO_TEX1MTXIDX_ST = 29, + GX_CP_VCD_LO_TEX1MTXIDX_END = 29, + + // Tex 2 matrix idx [28] + GX_CP_VCD_LO_TEX2MTXIDX_ST = 28, + GX_CP_VCD_LO_TEX2MTXIDX_END = 28, + + // Tex 3 matrix idx [27] + GX_CP_VCD_LO_TEX3MTXIDX_ST = 27, + GX_CP_VCD_LO_TEX3MTXIDX_END = 27, + + // Tex 4 matrix idx [26] + GX_CP_VCD_LO_TEX4MTXIDX_ST = 26, + GX_CP_VCD_LO_TEX4MTXIDX_END = 26, + + // Tex 5 matrix idx [25] + GX_CP_VCD_LO_TEX5MTXIDX_ST = 25, + GX_CP_VCD_LO_TEX5MTXIDX_END = 25, + + // Tex 6 matrix idx [24] + GX_CP_VCD_LO_TEX6MTXIDX_ST = 24, + GX_CP_VCD_LO_TEX6MTXIDX_END = 24, + + // Tex 7 matrix idx [23] + GX_CP_VCD_LO_TEX7MTXIDX_ST = 23, + GX_CP_VCD_LO_TEX7MTXIDX_END = 23, + + // Position [21-22] + GX_CP_VCD_LO_POS_ST = 21, + GX_CP_VCD_LO_POS_END = 22, + + // Normal [19-20] + GX_CP_VCD_LO_NRM_ST = 19, + GX_CP_VCD_LO_NRM_END = 20, + + // Color diffused [17-18] + GX_CP_VCD_LO_CLRDIF_ST = 17, + GX_CP_VCD_LO_CLRDIF_END = 18, + + // Color specular [15-16] + GX_CP_VCD_LO_CLRSPEC_ST = 15, + GX_CP_VCD_LO_CLRSPEC_END = 16, +} GXCPVCDLo; + +// CP locators for vertex descriptor (hi). +typedef enum _GXCPVCDHi { + // Tex0 coordinates [30-31] + GX_CP_VCD_HI_TEX0COORD_ST = 30, + GX_CP_VCD_HI_TEX0COORD_END = 31, + + // Tex1 coordinates [28-29] + GX_CP_VCD_HI_TEX1COORD_ST = 28, + GX_CP_VCD_HI_TEX1COORD_END = 29, + + // Tex2 coordinates [26-27] + GX_CP_VCD_HI_TEX2COORD_ST = 26, + GX_CP_VCD_HI_TEX2COORD_END = 27, + + // Tex3 coordinates [24-25] + GX_CP_VCD_HI_TEX3COORD_ST = 24, + GX_CP_VCD_HI_TEX3COORD_END = 25, + + // Tex4 coordinates [22-23] + GX_CP_VCD_HI_TEX4COORD_ST = 22, + GX_CP_VCD_HI_TEX4COORD_END = 23, + + // Tex5 coordinates [20-21] + GX_CP_VCD_HI_TEX5COORD_ST = 20, + GX_CP_VCD_HI_TEX5COORD_END = 21, + + // Tex6 coordinates [18-19] + GX_CP_VCD_HI_TEX6COORD_ST = 18, + GX_CP_VCD_HI_TEX6COORD_END = 19, + + // Tex7 coordinates [16-17] + GX_CP_VCD_HI_TEX7COORD_ST = 16, + GX_CP_VCD_HI_TEX7COORD_END = 17, +} GXCPVCDHi; + +// Command processor registers. +typedef enum _GXCPRegs { + GX_CP_REG_MTXIDXA = 0x30, // Matrix index A + GX_CP_REG_MTXIDXB = 0x40, // Matrix index B + GX_CP_REG_VCD_LO = 0x50, // Vertex descriptor (lo) + GX_CP_REG_VCD_HI = 0x60, // Vertex descriptor (hi) + GX_CP_REG_VAT_GRP0 = 0x70, // Vertex attribute table (group 0) + GX_CP_REG_VAT_GRP1 = 0x80, // Vertex attribute table (group 1) + GX_CP_REG_VAT_GRP2 = 0x90, // Vertex attribute table (group 2) + GX_CP_REG_ARRAYBASE = 0xA0, // Vertex array start/base + GX_CP_REG_ARRAYSTRIDE = 0xB0, // Vertex array stride +} GXCPRegs; + +// Transform unit registers. +typedef enum _GXXFRegs { + GX_XF_REG_ERROR = 0x1000, + GX_XF_REG_DIAGNOSTICS = 0x1001, + GX_XF_REG_STATE0 = 0x1002, + GX_XF_REG_STATE1 = 0x1003, + GX_XF_REG_CLOCK = 0x1004, + GX_XF_REG_CLIPDISABLE = 0x1005, + GX_XF_REG_PERF0 = 0x1006, + GX_XF_REG_PERF1 = 0x1007, + GX_XF_REG_INVERTEXSPEC = 0x1008, + GX_XF_REG_NUMCOLORS = 0x1009, + GX_XF_REG_AMBIENT0 = 0x100A, + GX_XF_REG_AMBIENT1 = 0x100B, + GX_XF_REG_MATERIAL0 = 0x100C, + GX_XF_REG_MATERIAL1 = 0x100D, + GX_XF_REG_COLOR0CNTRL = 0x100E, + GX_XF_REG_COLOR1CNTRL = 0x100F, + GX_XF_REG_ALPHA0CNTRL = 0x1010, + GX_XF_REG_ALPHA1CNTRL = 0x1011, + GX_XF_REG_DUALTEXTRAN = 0x1012, + GX_XF_REG_MATRIXINDEX0 = 0x1018, + GX_XF_REG_MATRIXINDEX1 = 0x1019, + GX_XF_REG_SCALEX = 0x101A, + GX_XF_REG_SCALEY = 0x101B, + GX_XF_REG_SCALEZ = 0x101C, + GX_XF_REG_OFFSETX = 0x101D, + GX_XF_REG_OFFSETY = 0x101E, + GX_XF_REG_OFFSETZ = 0x101F, + GX_XF_REG_PROJECTIONA = 0x1020, + GX_XF_REG_PROJECTIONB = 0x1021, + GX_XF_REG_PROJECTIONC = 0x1022, + GX_XF_REG_PROJECTIOND = 0x1023, + GX_XF_REG_PROJECTIONE = 0x1024, + GX_XF_REG_PROJECTIONF = 0x1025, + GX_XF_REG_PROJECTORTHO = 0x1026, + GX_XF_REG_NUMTEX = 0x103F, + GX_XF_REG_TEX0 = 0x1040, + GX_XF_REG_TEX1 = 0x1041, + GX_XF_REG_TEX2 = 0x1042, + GX_XF_REG_TEX3 = 0x1043, + GX_XF_REG_TEX4 = 0x1044, + GX_XF_REG_TEX5 = 0x1045, + GX_XF_REG_TEX6 = 0x1046, + GX_XF_REG_TEX7 = 0x1047, + GX_XF_REG_DUALTEX0 = 0x1050, + GX_XF_REG_DUALTEX1 = 0x1051, + GX_XF_REG_DUALTEX2 = 0x1052, + GX_XF_REG_DUALTEX3 = 0x1053, + GX_XF_REG_DUALTEX4 = 0x1054, + GX_XF_REG_DUALTEX5 = 0x1055, + GX_XF_REG_DUALTEX6 = 0x1056, + GX_XF_REG_DUALTEX7 = 0x1057, +} GXXFRegs; + +// Commands for interacting with the GXFifo pipe. +typedef enum _GXFifoCmd { + GX_FIFO_CMD_NOOP = 0x00, // no operation + + GX_FIFO_CMD_LOAD_BP_REG = 0x61, // load blitting processor reg + GX_FIFO_CMD_LOAD_CP_REG = 0x08, // load command processor reg + GX_FIFO_CMD_LOAD_XF_REG = 0x10, // load transform unit reg + + GX_FIFO_CMD_LOAD_INDX_A = 0x20, // load index A + GX_FIFO_CMD_LOAD_INDX_B = 0x28, // load index B + GX_FIFO_CMD_LOAD_INDX_C = 0x30, // load index C + GX_FIFO_CMD_LOAD_INDX_D = 0x38, // load index D + + GX_FIFO_CMD_CALL_DL = 0x40, // call displaylist + GX_FIFO_CMD_INVAL_VTX = 0x48, // invalid vertex + +} GXFifoCmd; + +// CP locator for vertex attribute table (group 0). +typedef enum _GXCPVATGrp0 { + // Position count [31-31] + GX_CP_VAT_GRP0_POS_CNT_ST = 31, + GX_CP_VAT_GRP0_POS_CNT_END = 31, + + // Position type [28-30] + GX_CP_VAT_GRP0_POS_TYPE_ST = 28, + GX_CP_VAT_GRP0_POS_TYPE_END = 30, + + // Position shift [23-27] + GX_CP_VAT_GRP0_POS_SHIFT_ST = 23, + GX_CP_VAT_GRP0_POS_SHIFT_END = 27, + + // Normal count [22-22] + GX_CP_VAT_GRP0_NRM_CNT_ST = 22, + GX_CP_VAT_GRP0_NRM_CNT_END = 22, + + // Normal type [19-21] + GX_CP_VAT_GRP0_NRM_TYPE_ST = 19, + GX_CP_VAT_GRP0_NRM_TYPE_END = 21, + + // Color diffused count [18-18] + GX_CP_VAT_GRP0_CLRDIFF_CNT_ST = 18, + GX_CP_VAT_GRP0_CLRDIFF_CNT_END = 18, + + // Color diffused type [15-17] + GX_CP_VAT_GRP0_CLRDIFF_TYPE_ST = 15, + GX_CP_VAT_GRP0_CLRDIFF_TYPE_END = 17, + + // Color specular count [14-14] + GX_CP_VAT_GRP0_CLRSPEC_CNT_ST = 14, + GX_CP_VAT_GRP0_CLRSPEC_CNT_END = 14, + + // Color specular type [11-13] + GX_CP_VAT_GRP0_CLRSPEC_TYPE_ST = 11, + GX_CP_VAT_GRP0_CLRSPEC_TYPE_END = 13, + + // Tex0 coord count [10-10] + GX_CP_VAT_GRP0_TXC0_CNT_ST = 10, + GX_CP_VAT_GRP0_TXC0_CNT_END = 10, + + // Tex0 coord type [7-9] + GX_CP_VAT_GRP0_TXC0_TYPE_ST = 7, + GX_CP_VAT_GRP0_TXC0_TYPE_END = 9, + + // Tex0 coord shift [2-6] + GX_CP_VAT_GRP0_TXC0_SHIFT_ST = 2, + GX_CP_VAT_GRP0_TXC0_SHIFT_END = 6, + + // Byte dequantised [1-1] + GX_CP_VAT_GRP0_BYTEDEQ_ST = 1, + GX_CP_VAT_GRP0_BYTEDEQ_END = 1, + + // Normal index 3 [0-0] (Input will be treated as three staggered indices (one per triple biased by component size) into normal table)) + GX_CP_VAT_GRP0_NRMIDX3_ST = 0, + GX_CP_VAT_GRP0_NRMIDX3_END = 0, +} GXCPVATGrp0; + +// CP locators for vertex attribute table (group 1). +typedef enum _GXCPVATGrp1 { + // Tex1 coord count [31-31] + GX_CP_VAT_GRP1_TXC1_CNT_ST = 31, + GX_CP_VAT_GRP1_TXC1_CNT_END = 31, + + // Tex1 coord type [28-30] + GX_CP_VAT_GRP1_TXC1_TYPE_ST = 28, + GX_CP_VAT_GRP1_TXC1_TYPE_END = 30, + + // Tex1 coord shift [23-27] + GX_CP_VAT_GRP1_TXC1_SHIFT_ST = 23, + GX_CP_VAT_GRP1_TXC1_SHIFT_END = 27, + + // Tex2 coord count [22-22] + GX_CP_VAT_GRP1_TXC2_CNT_ST = 22, + GX_CP_VAT_GRP1_TXC2_CNT_END = 22, + + // Tex2 coord type [19-21] + GX_CP_VAT_GRP1_TXC2_TYPE_ST = 19, + GX_CP_VAT_GRP1_TXC2_TYPE_END = 21, + + // Tex2 coord shift [14-18] + GX_CP_VAT_GRP1_TXC2_SHIFT_ST = 14, + GX_CP_VAT_GRP1_TXC2_SHIFT_END = 18, + + // Tex3 coord count [13-13] + GX_CP_VAT_GRP1_TXC3_CNT_ST = 13, + GX_CP_VAT_GRP1_TXC3_CNT_END = 13, + + // Tex3 coord type [10-12] + GX_CP_VAT_GRP1_TXC3_TYPE_ST = 10, + GX_CP_VAT_GRP1_TXC3_TYPE_END = 12, + + // Tex3 coord shift [5-9] + GX_CP_VAT_GRP1_TXC3_SHIFT_ST = 5, + GX_CP_VAT_GRP1_TXC3_SHIFT_END = 9, + + // Tex4 coord count [4-4] + GX_CP_VAT_GRP1_TXC4_CNT_ST = 4, + GX_CP_VAT_GRP1_TXC4_CNT_END = 4, + + // Tex4 coord type [1-3] + GX_CP_VAT_GRP1_TXC4_TYPE_ST = 1, + GX_CP_VAT_GRP1_TXC4_TYPE_END = 3, + +} GXCPVATGrp1; + +// CP locators for vertex attribute table (group 2). +typedef enum _GXCPVATGrp2 { + // Tex4 coord shift [27-31] + GX_CP_VAT_GRP2_TXC4_SHIFT_ST = 27, + GX_CP_VAT_GRP2_TXC4_SHIFT_END = 31, + + // Tex5 coord count [26-26] + GX_CP_VAT_GRP2_TXC5_CNT_ST = 26, + GX_CP_VAT_GRP2_TXC5_CNT_END = 26, + + // Tex5 coord type [23-25] + GX_CP_VAT_GRP2_TXC5_TYPE_ST = 23, + GX_CP_VAT_GRP2_TXC5_TYPE_END = 25, + + // Tex5 coord shift [18-22] + GX_CP_VAT_GRP2_TXC5_SHIFT_ST = 18, + GX_CP_VAT_GRP2_TXC5_SHIFT_END = 22, + + // Tex6 coord count [17-17] + GX_CP_VAT_GRP2_TXC6_CNT_ST = 17, + GX_CP_VAT_GRP2_TXC6_CNT_END = 17, + + // Tex6 coord type [14-16] + GX_CP_VAT_GRP2_TXC6_TYPE_ST = 14, + GX_CP_VAT_GRP2_TXC6_TYPE_END = 16, + + // Tex6 coord shift [9-13] + GX_CP_VAT_GRP2_TXC6_SHIFT_ST = 9, + GX_CP_VAT_GRP2_TXC6_SHIFT_END = 13, + + // Tex7 coord count [8-8] + GX_CP_VAT_GRP2_TXC7_CNT_ST = 8, + GX_CP_VAT_GRP2_TXC7_CNT_END = 8, + + // Tex7 coord type [5-7] + GX_CP_VAT_GRP2_TXC7_TYPE_ST = 5, + GX_CP_VAT_GRP2_TXC7_TYPE_END = 7, + + // Tex7 coord shift [0-4] + GX_CP_VAT_GRP2_TXC7_SHIFT_ST = 0, + GX_CP_VAT_GRP2_TXC7_SHIFT_END = 4, +} GXCPVATGrp2; + +// BP GenMode locators. +typedef enum _GXBPGenMode { + // Active texture counts [28-31] + GX_BP_GENMODE_NUMTEX_ST = 28, + GX_BP_GENMODE_NUMTEX_END = 31, + + // Color/channel counts [25-27] + GX_BP_GENMODE_NUMCOLORS_ST = 25, + GX_BP_GENMODE_NUMCOLORS_END = 27, + + // Multisample mode [22-22] + GX_BP_GENMODE_MULTISAMPLE_ST = 22, + GX_BP_GENMODE_MULTISAMPLE_END = 22, + + // Cull mode [16-17] + GX_BP_GENMODE_CULLMODE_ST = 16, + GX_BP_GENMODE_CULLMODE_END = 17, + + // Indirect stage counts [13-15] + GX_BP_GENMODE_NUMINDSTAGES_ST = 13, + GX_BP_GENMODE_NUMINDSTAGES_END = 15, + + // Toggle co-planar/Z-freeze [12-12] + GX_BP_GENMODE_COPLANAR_ST = 12, + GX_BP_GENMODE_COPLANAR_END = 12, +} GXBPGenMode; + +// Texture register fields for XF (transform) unit. +typedef enum _GXXfTexReg { + GX_XF_TEX_PROJ_ST = 0, // (s,t) (2x4) + GX_XF_TEX_PROJ_STQ = 1, // (s,t,q) (3x4) + + GX_XF_TEX_FORM_AB11 = 0, // (A, B, 1.0f, 1.0f), used for regular tex src + GX_XF_TEX_FORM_ABC1 = 1, // (A, B, C, 1.0f), used for geometry/normal src +} GXXfTexReg; + +// XF locators for textures. +typedef enum _GXXFTex { + // Projection type [30-30] + GX_XF_TEX_PROJTYPE_ST = 30, + GX_XF_TEX_PROJTYPE_END = 30, + + // Input format [29-29] + GX_XF_TEX_INPUTFORM_ST = 29, + GX_XF_TEX_INPUTFORM_END = 29, + + // Texture gen type [25-27] + GX_XF_TEX_TEXGENTYPE_ST = 25, + GX_XF_TEX_TEXGENTYPE_END = 27, + + // Source row [20-24] + GX_XF_TEX_SRCROW_ST = 20, + GX_XF_TEX_SRCROW_END = 24, + + // Bump source texture [17-19] + GX_XF_TEX_BUMPSRCTEX_ST = 17, + GX_XF_TEX_BUMPSRCTEX_END = 19, + + // Bump source light [14-16] + GX_XF_TEX_BUMPSRCLIGHT_ST = 14, + GX_XF_TEX_BUMPSRCLIGHT_END = 16, +} GXXFTex; + +// XF locators for dual textures. +typedef enum _GXXFDualTex { + // Base row of the transform matrix [26-31] + GX_XF_DUALTEX_BASEROW_ST = 26, + GX_XF_DUALTEX_BASEROW_END = 31, + + // Normalise texcoord before sending transform [23-23] + GX_XF_DUALTEX_NORMALISE_ST = 23, + GX_XF_DUALTEX_NORMALISE_END = 23, +} GXXFDualTex; + +// General texture commands. +typedef enum _GXXfTexGen { + GX_XF_TG_REGULAR = 0, // Regular; transform incoming data. + GX_XF_TG_BUMP = 1, // Texgen bump mapping. + GX_XF_TG_CLR0 = 2, // Color texgen for color 0 (s,t) = (r, g:b) + GX_XF_TG_CLR1 = 3, // Color texgen for color 1 (s,t) = (r, g:b) +} GXXfTexGen; + +// XF locators for matrix index 0. +typedef enum _GXXFMtxIdx0 { + // Geometry [26-31] + GX_XF_MTXIDX0_GEOM_ST = 26, + GX_XF_MTXIDX0_GEOM_END = 31, + + // Tex 0 [20-25] + GX_XF_MTXIDX0_TEX0_ST = 20, + GX_XF_MTXIDX0_TEX0_END = 25, + + // Tex 1 [14-19] + GX_XF_MTXIDX0_TEX1_ST = 14, + GX_XF_MTXIDX0_TEX1_END = 19, + + // Tex 2 [8-13] + GX_XF_MTXIDX0_TEX2_ST = 8, + GX_XF_MTXIDX0_TEX2_END = 13, + + // Tex 3 [2-7] + GX_XF_MTXIDX0_TEX3_ST = 2, + GX_XF_MTXIDX0_TEX3_END = 7, +} GXXFMtxIdx0; + +// XF locators for matrix index 1. +typedef enum _GXXFMtxIdx1 { + // Tex 4 [26-31] + GX_XF_MTXIDX1_TEX4_ST = 26, + GX_XF_MTXIDX1_TEX4_END = 31, + + // Tex 5 [20-25] + GX_XF_MTXIDX1_TEX5_ST = 20, + GX_XF_MTXIDX1_TEX5_END = 25, + + // Tex 6 [14-19] + GX_XF_MTXIDX1_TEX6_ST = 14, + GX_XF_MTXIDX1_TEX6_END = 19, + + // Tex 7 [8-13] + GX_XF_MTXIDX1_TEX7_ST = 8, + GX_XF_MTXIDX1_TEX7_END = 13, +} GXXFMtxIdx1; + +// Blitting processor registers. +typedef enum _GXBPRegs { + // gen mode + GX_BP_REG_GENMODE = 0x0, // gen mode + + // display copy filters + GX_BP_REG_DISPCOPYFILTER0 = 0x1, // display copy filter 0 + GX_BP_REG_DISPCOPYFILTER1 = 0x2, // display copy filter 1 + GX_BP_REG_DISPCOPYFILTER2 = 0x3, // display copy filter 2 + GX_BP_REG_DISPCOPYFILTER3 = 0x4, // display copy filter 3 + + // indirect matrices + GX_BP_REG_INDMTX0A = 0x6, // indirect matrix 0A + GX_BP_REG_INDMTX0B = 0x7, // indirect matrix 0B + GX_BP_REG_INDMTX0C = 0x8, // indirect matrix 0C + GX_BP_REG_INDMTX1A = 0x9, // indirect matrix 1A + GX_BP_REG_INDMTX1B = 0xA, // indirect matrix 1B + GX_BP_REG_INDMTX1C = 0xB, // indirect matrix 1C + GX_BP_REG_INDMTX2A = 0xC, // indirect matrix 2A + GX_BP_REG_INDMTX2B = 0xD, // indirect matrix 2B + GX_BP_REG_INDMTX2C = 0xE, // indirect matrix 2C + GX_BP_REG_INDIMASK = 0xF, // indirect mask + + // indirect TEV stages + GX_BP_REG_INDTEVSTAGE0 = 0x10, // indirect TEV stage 0 + GX_BP_REG_INDTEVSTAGE1 = 0x11, // indirect TEV stage 1 + GX_BP_REG_INDTEVSTAGE2 = 0x12, // indirect TEV stage 2 + GX_BP_REG_INDTEVSTAGE3 = 0x13, // indirect TEV stage 3 + GX_BP_REG_INDTEVSTAGE4 = 0x14, // indirect TEV stage 4 + GX_BP_REG_INDTEVSTAGE5 = 0x15, // indirect TEV stage 5 + GX_BP_REG_INDTEVSTAGE6 = 0x16, // indirect TEV stage 6 + GX_BP_REG_INDTEVSTAGE7 = 0x17, // indirect TEV stage 7 + GX_BP_REG_INDTEVSTAGE8 = 0x18, // indirect TEV stage 8 + GX_BP_REG_INDTEVSTAGE9 = 0x19, // indirect TEV stage 9 + GX_BP_REG_INDTEVSTAGE10 = 0x1A, // indirect TEV stage 10 + GX_BP_REG_INDTEVSTAGE11 = 0x1B, // indirect TEV stage 11 + GX_BP_REG_INDTEVSTAGE12 = 0x1C, // indirect TEV stage 12 + GX_BP_REG_INDTEVSTAGE13 = 0x1D, // indirect TEV stage 13 + GX_BP_REG_INDTEVSTAGE14 = 0x1E, // indirect TEV stage 14 + GX_BP_REG_INDTEVSTAGE15 = 0x1F, // indirect TEV stage 15 + + // performance manips + GX_BP_REG_SCISSORTL = 0x20, // scissor top left + GX_BP_REG_SCISSORBR = 0x21, // scissor bottom right + GX_BP_REG_LINEPTWIDTH = 0x22, // line point width + GX_BP_REG_PERF0TRI = 0x23, // performance 0 (triangle) + GX_BP_REG_PERF0QUAD = 0x24, // performance 0 (quad) + + // rasters + GX_BP_REG_RAS1_SS0 = 0x25, + GX_BP_REG_RAS1_SS1 = 0x26, + GX_BP_REG_RAS1_IREF = 0x27, + GX_BP_REG_RAS1_TREF0 = 0x28, + GX_BP_REG_RAS1_TREF1 = 0x29, + GX_BP_REG_RAS1_TREF2 = 0x2A, + GX_BP_REG_RAS1_TREF3 = 0x2B, + GX_BP_REG_RAS1_TREF4 = 0x2C, + GX_BP_REG_RAS1_TREF5 = 0x2D, + GX_BP_REG_RAS1_TREF6 = 0x2E, + GX_BP_REG_RAS1_TREF7 = 0x2F, + + // setup sizes + GX_BP_REG_SU_SSIZE0 = 0x30, + GX_BP_REG_SU_TSIZE0 = 0x31, + GX_BP_REG_SU_SSIZE1 = 0x32, + GX_BP_REG_SU_TSIZE1 = 0x33, + GX_BP_REG_SU_SSIZE2 = 0x34, + GX_BP_REG_SU_TSIZE2 = 0x35, + GX_BP_REG_SU_SSIZE3 = 0x36, + GX_BP_REG_SU_TSIZE3 = 0x37, + GX_BP_REG_SU_SSIZE4 = 0x38, + GX_BP_REG_SU_TSIZE4 = 0x39, + GX_BP_REG_SU_SSIZE5 = 0x3A, + GX_BP_REG_SU_TSIZE5 = 0x3B, + GX_BP_REG_SU_SSIZE6 = 0x3C, + GX_BP_REG_SU_TSIZE6 = 0x3D, + GX_BP_REG_SU_SSIZE7 = 0x3E, + GX_BP_REG_SU_TSIZE7 = 0x3F, + + // Z and blend controls + GX_BP_REG_ZMODE = 0x40, + GX_BP_REG_BLENDMODE = 0x41, + GX_BP_REG_DSTALPHA = 0x42, + GX_BP_REG_ZCONTROL = 0x43, + GX_BP_REG_FIELDMASK = 0x44, + GX_BP_REG_DRAWDONE = 0x45, + GX_BP_REG_PETOKEN = 0x47, + GX_BP_REG_PETOKENINT = 0x48, + + // copying + GX_BP_REG_TEXCOPYSRCXY = 0x49, + GX_BP_REG_TEXCOPYSRCWH = 0x4A, + GX_BP_REG_TEXCOPYDST = 0x4B, + GX_BP_REG_DISPCOPYSTRIDE = 0x4D, + GX_BP_REG_DISPCOPYSCALEY = 0x4E, + GX_BP_REG_COPYCLEARAR = 0x4F, + GX_BP_REG_COPYCLEARGB = 0x50, + GX_BP_REG_COPYCLEARZ = 0x51, + GX_BP_REG_COPYFILTER0 = 0x53, + GX_BP_REG_COPYFILTER1 = 0x54, + + // + GX_BP_REG_BOUNDINGBOX0 = 0x55, + GX_BP_REG_BOUNDINGBOX1 = 0x56, + + GX_BP_REG_SCISSOROFFSET = 0x59, + + // texture memory + GX_BP_REG_TMEMPRELOADADDR = 0x60, + GX_BP_REG_TMEMPRELOADEVEN = 0x61, + GX_BP_REG_TMEMPRELOADODD = 0x62, + GX_BP_REG_TMEMPRELOADMODE = 0x63, + GX_BP_REG_TMEMTLUTSRC = 0x64, + GX_BP_REG_TMEMTLUTDST = 0x65, + GX_BP_REG_TMEMTEXINVALIDATE = 0x66, + + // performance 1 + GX_BP_REG_PERF1 = 0x67, + GX_BP_REG_FIELDMODE = 0x68, + + // set modes + GX_BP_REG_SETMODE0_TEX0 = 0x80, + GX_BP_REG_SETMODE0_TEX1 = 0x81, + GX_BP_REG_SETMODE0_TEX2 = 0x82, + GX_BP_REG_SETMODE0_TEX3 = 0x83, + GX_BP_REG_SETMODE1_TEX0 = 0x84, + GX_BP_REG_SETMODE1_TEX1 = 0x85, + GX_BP_REG_SETMODE1_TEX2 = 0x86, + GX_BP_REG_SETMODE1_TEX3 = 0x87, + + // set images + GX_BP_REG_SETIMAGE0_TEX0 = 0x88, + GX_BP_REG_SETIMAGE0_TEX1 = 0x89, + GX_BP_REG_SETIMAGE0_TEX2 = 0x8A, + GX_BP_REG_SETIMAGE0_TEX3 = 0x8B, + GX_BP_REG_SETIMAGE1_TEX0 = 0x8C, + GX_BP_REG_SETIMAGE1_TEX1 = 0x8D, + GX_BP_REG_SETIMAGE1_TEX2 = 0x8E, + GX_BP_REG_SETIMAGE1_TEX3 = 0x8F, + GX_BP_REG_SETIMAGE2_TEX0 = 0x90, + GX_BP_REG_SETIMAGE2_TEX1 = 0x91, + GX_BP_REG_SETIMAGE2_TEX2 = 0x92, + GX_BP_REG_SETIMAGE2_TEX3 = 0x93, + GX_BP_REG_SETIMAGE3_TEX0 = 0x94, + GX_BP_REG_SETIMAGE3_TEX1 = 0x95, + GX_BP_REG_SETIMAGE3_TEX2 = 0x96, + GX_BP_REG_SETIMAGE3_TEX3 = 0x97, + + // set texture lookups + GX_BP_REG_SETTLUT_TEX0 = 0x98, + GX_BP_REG_SETTLUT_TEX1 = 0x99, + GX_BP_REG_SETTLUT_TEX2 = 0x9A, + GX_BP_REG_SETTLUT_TEX3 = 0x9B, + + // set modes continued + GX_BP_REG_SETMODE0_TEX4 = 0xA0, + GX_BP_REG_SETMODE0_TEX5 = 0xA1, + GX_BP_REG_SETMODE0_TEX6 = 0xA2, + GX_BP_REG_SETMODE0_TEX7 = 0xA3, + GX_BP_REG_SETMODE1_TEX4 = 0xA4, + GX_BP_REG_SETMODE1_TEX5 = 0xA5, + GX_BP_REG_SETMODE1_TEX6 = 0xA6, + GX_BP_REG_SETMODE1_TEX7 = 0xA7, + + // set images continued + GX_BP_REG_SETIMAGE0_TEX4 = 0xA8, + GX_BP_REG_SETIMAGE0_TEX5 = 0xA9, + GX_BP_REG_SETIMAGE0_TEX6 = 0xAA, + GX_BP_REG_SETIMAGE0_TEX7 = 0xAB, + GX_BP_REG_SETIMAGE1_TEX4 = 0xAC, + GX_BP_REG_SETIMAGE1_TEX5 = 0xAD, + GX_BP_REG_SETIMAGE1_TEX6 = 0xAE, + GX_BP_REG_SETIMAGE1_TEX7 = 0xAF, + GX_BP_REG_SETIMAGE2_TEX4 = 0xB0, + GX_BP_REG_SETIMAGE2_TEX5 = 0xB1, + GX_BP_REG_SETIMAGE2_TEX6 = 0xB2, + GX_BP_REG_SETIMAGE2_TEX7 = 0xB3, + GX_BP_REG_SETIMAGE3_TEX4 = 0xB4, + GX_BP_REG_SETIMAGE3_TEX5 = 0xB5, + GX_BP_REG_SETIMAGE3_TEX6 = 0xB6, + GX_BP_REG_SETIMAGE3_TEX7 = 0xB7, + + // set texture lookups continued + GX_BP_REG_SETTLUT_TEX4 = 0xB8, + GX_BP_REG_SETTLUT_TEX5 = 0xB9, + GX_BP_REG_SETTLUT_TEX6 = 0xBA, + GX_BP_REG_SETTLUT_TEX7 = 0xBB, + + // TEV color manips + GX_BP_REG_TEVCOLORCOMBINER0 = 0xC0, + GX_BP_REG_TEVALPHACOMBINER0 = 0xC1, + GX_BP_REG_TEVCOLORCOMBINER1 = 0xC2, + GX_BP_REG_TEVALPHACOMBINER1 = 0xC3, + GX_BP_REG_TEVCOLORCOMBINER2 = 0xC4, + GX_BP_REG_TEVALPHACOMBINER2 = 0xC5, + GX_BP_REG_TEVCOLORCOMBINER3 = 0xC6, + GX_BP_REG_TEVALPHACOMBINER3 = 0xC7, + GX_BP_REG_TEVCOLORCOMBINER4 = 0xC8, + GX_BP_REG_TEVALPHACOMBINER4 = 0xC9, + GX_BP_REG_TEVCOLORCOMBINER5 = 0xCA, + GX_BP_REG_TEVALPHACOMBINER5 = 0xCB, + GX_BP_REG_TEVCOLORCOMBINER6 = 0xCC, + GX_BP_REG_TEVALPHACOMBINER6 = 0xCD, + GX_BP_REG_TEVCOLORCOMBINER7 = 0xCE, + GX_BP_REG_TEVALPHACOMBINER7 = 0xCF, + GX_BP_REG_TEVCOLORCOMBINER8 = 0xD0, + GX_BP_REG_TEVALPHACOMBINER8 = 0xD1, + GX_BP_REG_TEVCOLORCOMBINER9 = 0xD2, + GX_BP_REG_TEVALPHACOMBINER9 = 0xD3, + GX_BP_REG_TEVCOLORCOMBINER10 = 0xD4, + GX_BP_REG_TEVALPHACOMBINER10 = 0xD5, + GX_BP_REG_TEVCOLORCOMBINER11 = 0xD6, + GX_BP_REG_TEVALPHACOMBINER11 = 0xD7, + GX_BP_REG_TEVCOLORCOMBINER12 = 0xD8, + GX_BP_REG_TEVALPHACOMBINER12 = 0xD9, + GX_BP_REG_TEVCOLORCOMBINER13 = 0xDA, + GX_BP_REG_TEVALPHACOMBINER13 = 0xDB, + GX_BP_REG_TEVCOLORCOMBINER14 = 0xDC, + GX_BP_REG_TEVALPHACOMBINER14 = 0xDD, + GX_BP_REG_TEVCOLORCOMBINER15 = 0xDE, + GX_BP_REG_TEVALPHACOMBINER15 = 0xDF, + + // TEV registers + GX_BP_REG_TEVREG0LO = 0xE0, + GX_BP_REG_TEVREG0HI = 0xE1, + GX_BP_REG_TEVREG1LO = 0xE2, + GX_BP_REG_TEVREG1HI = 0xE3, + GX_BP_REG_TEVREG2LO = 0xE4, + GX_BP_REG_TEVREG2HI = 0xE5, + GX_BP_REG_TEVREG3LO = 0xE6, + GX_BP_REG_TEVREG3HI = 0xE7, + + // fog registers + GX_BP_REG_FOGRANGE = 0xE8, + GX_BP_REG_FOGRANGEK0 = 0xE9, + GX_BP_REG_FOGRANGEK1 = 0xEA, + GX_BP_REG_FOGRANGEK2 = 0xEB, + GX_BP_REG_FOGRANGEK3 = 0xEC, + GX_BP_REG_FOGRANGEK4 = 0xED, + GX_BP_REG_FOGPARAM0 = 0xEE, + GX_BP_REG_FOGPARAM1 = 0xEF, + GX_BP_REG_FOGPARAM2 = 0xF0, + GX_BP_REG_FOGPARAM3 = 0xF1, + GX_BP_REG_FOGCOLOR = 0xF2, + + // performance manip registers + GX_BP_REG_ALPHACOMPARE = 0xF3, + GX_BP_REG_ZTEXTURE0 = 0xF4, + GX_BP_REG_ZTEXTURE1 = 0xF5, + + // TEV K selectors + GX_BP_REG_TEVKSEL0 = 0xF6, + GX_BP_REG_TEVKSEL1 = 0xF7, + GX_BP_REG_TEVKSEL2 = 0xF8, + GX_BP_REG_TEVKSEL3 = 0xF9, + GX_BP_REG_TEVKSEL4 = 0xFA, + GX_BP_REG_TEVKSEL5 = 0xFB, + GX_BP_REG_TEVKSEL6 = 0xFC, + GX_BP_REG_TEVKSEL7 = 0xFD, + + // SS mask + GX_BP_REG_SSMASK = 0xFE, +} GXBPRegs; + +// BP locators for fog parameter 0. +typedef enum _GXBPFogParam0 { + // A mantissa [21-31] + GX_BP_FOGPARAM0_A_MANT_ST = 21, + GX_BP_FOGPARAM0_A_MANT_END = 31, + + // A exponent [13-20] + GX_BP_FOGPARAM0_A_EXP_ST = 13, + GX_BP_FOGPARAM0_A_EXP_END = 20, + + // A sign [12-12] + GX_BP_FOGPARAM0_A_SIGN_ST = 12, + GX_BP_FOGPARAM0_A_SIGN_END = 12, +} GXBPFogParam0; + +// BP locators for fog parameter 1. +typedef enum _GXBPFogParam1 { + // B magnitude [8-31] + GX_BP_FOGPARAM1_B_MAG_ST = 8, + GX_BP_FOGPARAM1_B_MAG_END = 31, +} GXBPFogParam1; + +// BP locators for fog parameter 2. +typedef enum _GXBPFogParam2 { + // B shift [27-31] + GX_BP_FOGPARAM2_B_SHIFT_ST = 27, + GX_BP_FOGPARAM2_B_SHIFT_END = 31, +} GXBPFogParam2; + +// BP locators for fog parameter 3. +typedef enum _GXBPFogParam3 { + // C mantissa [21-31] + GX_BP_FOGPARAM3_C_MANT_ST = 21, + GX_BP_FOGPARAM3_C_MANT_END = 31, + + // C exponent [13-20] + GX_BP_FOGPARAM3_C_EXP_ST = 13, + GX_BP_FOGPARAM3_C_EXP_END = 20, + + // C sign [12-12] + GX_BP_FOGPARAM3_C_SIGN_ST = 12, + GX_BP_FOGPARAM3_C_SIGN_END = 12, + + // Projection [11] + GX_BP_FOGPARAM3_PROJ_ST = 11, + GX_BP_FOGPARAM3_PROJ_END = 11, + + // F select [8-10] + GX_BP_FOGPARAM3_FSEL_ST = 8, + GX_BP_FOGPARAM3_FSEL_END = 10, +} GXBPFogParam3; + +// BP locators for fog color. +typedef enum _GXBPFogColor { + // RGB components of color [8-31] + GX_BP_FOGCOLOR_RGB_ST = 8, + GX_BP_FOGCOLOR_RGB_END = 31, +} GXBPFogColor; + +// BP locators for fog range. +typedef enum _GXBPFogRange { + // Center [22-31] + GX_BP_FOGRANGE_CENTER_ST = 22, + GX_BP_FOGRANGE_CENTER_END = 31, + + // Enabled [21-21] + GX_BP_FOGRANGE_ENABLED_ST = 21, + GX_BP_FOGRANGE_ENABLED_END = 21, +} GXBPFogRange; + +// BP locators for fog range K. +typedef enum _GXBPFogRangeK { + // Hi [20-31] + GX_BP_FOGRANGEK_HI_ST = 20, + GX_BP_FOGRANGEK_HI_END = 31, + + // Lo [8-19] + GX_BP_FOGRANGEK_LO_ST = 8, + GX_BP_FOGRANGEK_LO_END = 19, +} GXBPFogRangeK; + +// BP locators for blend mode. +typedef enum _GXBPBlendMode { + // Blend enable [31-31] + GX_BP_BLENDMODE_ENABLE_ST = 31, + GX_BP_BLENDMODE_ENABLE_END = 31, + + // Logic operation enable [30-30] + GX_BP_BLENDMODE_LOGIC_OP_ST = 30, + GX_BP_BLENDMODE_LOGIC_OP_END = 30, + + // Dither [29-29] + GX_BP_BLENDMODE_DITHER_ST = 29, + GX_BP_BLENDMODE_DITHER_END = 29, + + // Color update [28-28] + GX_BP_BLENDMODE_COLOR_UPDATE_ST = 28, + GX_BP_BLENDMODE_COLOR_UPDATE_END = 28, + + // Alpha update [27-27] + GX_BP_BLENDMODE_ALPHA_UPDATE_ST = 27, + GX_BP_BLENDMODE_ALPHA_UPDATE_END = 27, + + // Destination factor [24-26] + GX_BP_BLENDMODE_DSTFACTOR_ST = 24, + GX_BP_BLENDMODE_DSTFACTOR_END = 26, + + // Source factor [21-23] + GX_BP_BLENDMODE_SRCFACTOR_ST = 21, + GX_BP_BLENDMODE_SRCFACTOR_END = 23, + + // Subtract [20-20] + GX_BP_BLENDMODE_SUBTRACT_ST = 20, + GX_BP_BLENDMODE_SUBTRACT_END = 20, + + // Logic mode [16-19] + GX_BP_BLENDMODE_LOGICMODE_ST = 16, + GX_BP_BLENDMODE_LOGICMODE_END = 19, +} GXBPBlendMode; + +// BP locators for Z mode. +typedef enum _GXBPZMode { + // Test enable [31-31] + GX_BP_ZMODE_TEST_ENABLE_ST = 31, + GX_BP_ZMODE_TEST_ENABLE_END = 31, + + // Compare [28-30] + GX_BP_ZMODE_COMPARE_ST = 28, + GX_BP_ZMODE_COMPARE_END = 30, + + // Update enable [27-27] + GX_BP_ZMODE_UPDATE_ENABLE_ST = 27, + GX_BP_ZMODE_UPDATE_ENABLE_END = 27, +} GXBPZMode; + +// BP locators for Z control. +typedef enum _GXBPZControl { + // Pixel format [29-31] + GX_BP_ZCONTROL_PIXEL_FMT_ST = 29, + GX_BP_ZCONTROL_PIXEL_FMT_END = 31, + + // Z format [26-28] + GX_BP_ZCONTROL_Z_FMT_ST = 26, + GX_BP_ZCONTROL_Z_FMT_END = 28, + + // Whether to do Z-buffering before or after texturing [25-25] + GX_BP_ZCONTROL_BEFORE_TEX_ST = 25, + GX_BP_ZCONTROL_BEFORE_TEX_END = 25, +} GXBPZControl; + +// BP locators for destination alpha. +typedef enum _GXBPDstAlpha { + // Alpha [24-31] + GX_BP_DSTALPHA_ALPHA_ST = 24, + GX_BP_DSTALPHA_ALPHA_END = 31, + + // Enable [23-23] + GX_BP_DSTALPHA_ENABLE_ST = 23, + GX_BP_DSTALPHA_ENABLE_END = 23, + + // YUV format [21-22] + GX_BP_DSTALPHA_YUV_FMT_ST = 21, + GX_BP_DSTALPHA_YUV_FMT_END = 22, +} GXBPDstAlpha; + +// BP locators for field mask. +typedef enum _GXBPFieldMask { + // Whether to write odd fields to the EFB [31-31] + GX_BP_FIELDMASK_ODD_ST = 31, + GX_BP_FIELDMASK_ODD_END = 31, + + // Whether to write even fields to the EFB [30-30] + GX_BP_FIELDMASK_EVEN_ST = 30, + GX_BP_FIELDMASK_EVEN_END = 30, +} GXBPFieldMask; + +// BP locators for line and point settings. +typedef enum _GXBPLinePtWidth { + // Line size/width [24-31] + GX_BP_LINEPTWIDTH_LINESZ_ST = 24, + GX_BP_LINEPTWIDTH_LINESZ_END = 31, + + // Point size [16-23] + GX_BP_LINEPTWIDTH_POINTSZ_ST = 16, + GX_BP_LINEPTWIDTH_POINTSZ_END = 23, + + // Line offset [13-15] + GX_BP_LINEPTWIDTH_LINEOFS_ST = 13, + GX_BP_LINEPTWIDTH_LINEOFS_END = 15, + + // Point offset [10-12] + GX_BP_LINEPTWIDTH_POINTOFS_ST = 10, + GX_BP_LINEPTWIDTH_POINTOFS_END = 12, + + // Interlacing adjustment for aspect ratio [9-9] + GX_BP_LINEPTWIDTH_ADJUST_ST = 9, + GX_BP_LINEPTWIDTH_ADJUST_END = 9, +} GXBPLinePtWidth; + +// Miscellaneous token types. +typedef enum _GXMiscToken { + GX_MT_NULL = 0, + GX_MT_XF_FLUSH = 1, + GX_MT_DL_SAVE_CONTEXT = 2, + GX_MT_ABORT_WAIT_COPYOUT = 3, +} GXMiscToken; + +// Transform memory types. +typedef enum _GXXfMem { + GX_XF_MEM_POSMTX = 0x000, // position coord matrix + GX_XF_MEM_NRMMTX = 0x400, // normal coord matrix + GX_XF_MEM_DUALTEXMTX = 0x500, // dual texture matrix + GX_XF_MEM_LIGHTOBJ = 0x600, // light object +} GXXfMem; + +// BP locators for top-left scissor. +typedef enum _GXBPScissorTL { + // Top component [21-31] + GX_BP_SCISSORTL_TOP_ST = 21, + GX_BP_SCISSORTL_TOP_END = 31, + + // Left component [9-19] + GX_BP_SCISSORTL_LEFT_ST = 9, + GX_BP_SCISSORTL_LEFT_END = 19, +} GXBPScissorTL; + +// BP locators for bottom-right scissor. +typedef enum _GXBPScissorBR { + // Bottom component [21-31] + GX_BP_SCISSORBR_BOT_ST = 21, + GX_BP_SCISSORBR_BOT_END = 31, + + // Right component [9-19] + GX_BP_SCISSORBR_RIGHT_ST = 9, + GX_BP_SCISSORBR_RIGHT_END = 19, +} GXBPScissorBR; + +// BP locators for scissor offset. +typedef enum _GXBPScissorOffset { + // X offset [22-31] + GX_BP_SCISSOROFS_OX_ST = 22, + GX_BP_SCISSOROFS_OX_END = 31, + + // Y offset [12-21] + GX_BP_SCISSOROFS_OY_ST = 12, + GX_BP_SCISSOROFS_OY_END = 21, +} GXBPScissorOffset; + +// Perf-0 types. +typedef enum _GXPerf0 { + GX_PERF0_VERTICES = 0, + GX_PERF0_CLIP_VTX = 1, + GX_PERF0_CLIP_CLKS = 2, + GX_PERF0_XF_WAIT_IN = 3, + GX_PERF0_XF_WAIT_OUT = 4, + GX_PERF0_XF_XFRM_CLKS = 5, + GX_PERF0_XF_LIT_CLKS = 6, + GX_PERF0_XF_BOT_CLKS = 7, + GX_PERF0_XF_REGLD_CLKS = 8, + GX_PERF0_XF_REGRD_CLKS = 9, + GX_PERF0_CLIP_RATIO = 10, + + GX_PERF0_TRIANGLES = 11, + GX_PERF0_TRIANGLES_CULLED = 12, + GX_PERF0_TRIANGLES_PASSED = 13, + GX_PERF0_TRIANGLES_SCISSORED = 14, + GX_PERF0_TRIANGLES_0TEX = 15, + GX_PERF0_TRIANGLES_1TEX = 16, + GX_PERF0_TRIANGLES_2TEX = 17, + GX_PERF0_TRIANGLES_3TEX = 18, + GX_PERF0_TRIANGLES_4TEX = 19, + GX_PERF0_TRIANGLES_5TEX = 20, + GX_PERF0_TRIANGLES_6TEX = 21, + GX_PERF0_TRIANGLES_7TEX = 22, + GX_PERF0_TRIANGLES_8TEX = 23, + GX_PERF0_TRIANGLES_0CLR = 24, + GX_PERF0_TRIANGLES_1CLR = 25, + GX_PERF0_TRIANGLES_2CLR = 26, + + GX_PERF0_QUAD_0CVG = 27, + GX_PERF0_QUAD_NON0CVG = 28, + GX_PERF0_QUAD_1CVG = 29, + GX_PERF0_QUAD_2CVG = 30, + GX_PERF0_QUAD_3CVG = 31, + GX_PERF0_QUAD_4CVG = 32, + GX_PERF0_AVG_QUAD_CNT = 33, + + GX_PERF0_CLOCKS = 34, + GX_PERF0_NONE = 35, +} GXPerf0; + +// Perf-1 types. +typedef enum _GXPerf1 { + GX_PERF1_TEXELS = 0, + GX_PERF1_TX_IDLE = 1, + GX_PERF1_TX_REGS = 2, + GX_PERF1_TX_MEMSTALL = 3, + GX_PERF1_TC_CHECK1_2 = 4, + GX_PERF1_TC_CHECK3_4 = 5, + GX_PERF1_TC_CHECK5_6 = 6, + GX_PERF1_TC_CHECK7_8 = 7, + GX_PERF1_TC_MISS = 8, + + GX_PERF1_VC_ELEMQ_FULL = 9, + GX_PERF1_VC_MISSQ_FULL = 10, + GX_PERF1_VC_MEMREQ_FULL = 11, + GX_PERF1_VC_STATUS7 = 12, + GX_PERF1_VC_MISSREP_FULL = 13, + GX_PERF1_VC_STREAMBUF_LOW = 14, + GX_PERF1_VC_ALL_STALLS = 15, + GX_PERF1_VERTICES = 16, + + GX_PERF1_FIFO_REQ = 17, + GX_PERF1_CALL_REQ = 18, + GX_PERF1_VC_MISS_REQ = 19, + GX_PERF1_CP_ALL_REQ = 20, + + GX_PERF1_CLOCKS = 21, + GX_PERF1_NONE = 22, +} GXPerf1; + +// Vertex cache perf types. +typedef enum _GXVCachePerf { + GX_VC_POS = 0, + GX_VC_NRM = 1, + GX_VC_CLR0 = 2, + GX_VC_CLR1 = 3, + GX_VC_TEX0 = 4, + GX_VC_TEX1 = 5, + GX_VC_TEX2 = 6, + GX_VC_TEX3 = 7, + GX_VC_TEX4 = 8, + GX_VC_TEX5 = 9, + GX_VC_TEX6 = 10, + GX_VC_TEX7 = 11, + + GX_VC_ALL = 15 +} GXVCachePerf; + #endif /* GXENUM_H */ \ No newline at end of file diff --git a/include/dolphin/gx/GXFifo.h b/include/dolphin/gx/GXFifo.h index 7bdfceee0d2..50ce1de3440 100644 --- a/include/dolphin/gx/GXFifo.h +++ b/include/dolphin/gx/GXFifo.h @@ -9,27 +9,29 @@ extern "C" { #endif +typedef void (*GXBreakPtCallback)(void); + void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size); void GXInitFifoPtrs(GXFifoObj* fifo, void* read_ptr, void* write_ptr); -void GXSetCPUFifo(void); -void GXSetGPFifo(void); +void GXSetCPUFifo(GXFifoObj* fifo); +void GXSetGPFifo(GXFifoObj* fifo); void GXSaveCPUFifo(GXFifoObj* fifo); void __GXSaveCPUFifoAux(GXFifoObj* fifo); void GXGetGPStatus(GXBool* overhi, GXBool* underlo, GXBool* read_idle, GXBool* cmd_idle, GXBool* breakpoint); void* GXGetFifoBase(GXFifoObj* fifo); u32 GXGetFifoSize(GXFifoObj* fifo); -void GXSetBreakPtCallback(void); +GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb); void __GXFifoInit(void); void __GXFifoReadEnable(void); void __GXFifoReadDisable(void); void __GXFifoLink(u8); -void __GXWriteFifoIntEnable(u8, u8); -void __GXWriteFifoIntReset(u8, u8); +void __GXWriteFifoIntEnable(u32, u32); +void __GXWriteFifoIntReset(u32, u32); void __GXCleanGPFifo(void); OSThread* GXSetCurrentGXThread(void); OSThread* GXGetCurrentGXThread(void); GXFifoObj* GXGetCPUFifo(void); -u32 GXGetGPFifo(void); +GXFifoObj* GXGetGPFifo(void); #ifdef __cplusplus }; diff --git a/include/dolphin/gx/GXInit.h b/include/dolphin/gx/GXInit.h index ea28dcdee14..aea03d96195 100644 --- a/include/dolphin/gx/GXInit.h +++ b/include/dolphin/gx/GXInit.h @@ -10,39 +10,39 @@ typedef GXTlutRegion* (*GXTlutRegionCallback)(u32 name); typedef struct _GXData { /* 0x000 */ u16 field_0x0; - /* 0x002 */ u16 field_0x2; - /* 0x004 */ u16 field_0x4; - /* 0x006 */ u16 field_0x6; - /* 0x008 */ u32 field_0x8; - /* 0x00C */ u32 field_0xc; - /* 0x010 */ u32 field_0x10; - /* 0x014 */ u32 field_0x14; - /* 0x018 */ GXAttrType field_0x18; - /* 0x01C */ GXCompCnt field_0x1c[8]; - /* 0x03C */ GXCompCnt field_0x3c[8]; - /* 0x05C */ u32 field_0x5c[8]; - /* 0x07C */ u32 field_0x7c; - /* 0x080 */ u32 field_0x80; - /* 0x084 */ u32 field_0x84; + /* 0x002 */ u16 bpSentNot; + /* 0x004 */ u16 vNum; + /* 0x006 */ u16 vLim; + /* 0x008 */ u32 cpEnable; + /* 0x00C */ u32 cpStatus; + /* 0x010 */ u32 cpClr; + /* 0x014 */ u32 vcdLoReg; + /* 0x018 */ GXAttrType vcdHiReg; + /* 0x01C */ GXCompCnt vatA[8]; + /* 0x03C */ GXCompCnt vatB[8]; + /* 0x05C */ u32 vatC[8]; + /* 0x07C */ u32 lpSize; + /* 0x080 */ u32 matIdxA; + /* 0x084 */ u32 matIdxB; /* 0x088 */ u8 field_0x88[0xA8 - 0x88]; /* 0x0A8 */ GXColor ambColors[2]; /* 0x0B0 */ GXColor matColors[2]; - /* 0x0B8 */ u32 field_0xb8[8]; // GX_MAX_TEXCOORD - /* 0x0D8 */ u32 field_0xd8[8]; // GX_MAX_TEXCOORD - /* 0x0F8 */ u32 field_0xf8; - /* 0x0FC */ u32 field_0xfc; - /* 0x100 */ u32 field_0x100[GX_MAX_TEVSTAGE / 2]; - /* 0x120 */ u32 field_0x120; - /* 0x124 */ u32 field_0x124; + /* 0x0B8 */ u32 suTs0[8]; // GX_MAX_TEXCOORD + /* 0x0D8 */ u32 suTs1[8]; // GX_MAX_TEXCOORD + /* 0x0F8 */ u32 suScis0; + /* 0x0FC */ u32 suScis1; + /* 0x100 */ u32 tref[GX_MAX_TEVSTAGE / 2]; + /* 0x120 */ u32 iref; + /* 0x124 */ u32 bpMask; /* 0x128 */ u32 field_0x128; /* 0x12C */ u32 field_0x12c; - /* 0x130 */ u32 field_0x130[GX_MAX_TEVSTAGE]; - /* 0x170 */ u32 field_0x170[GX_MAX_TEVSTAGE]; - /* 0x1B0 */ u32 field_0x1b0[GX_MAX_TEVSTAGE / 2]; - /* 0x1D0 */ u32 field_0x1d0; - /* 0x1D4 */ u32 field_0x1d4; - /* 0x1D8 */ u32 field_0x1d8; - /* 0x1DC */ u32 field_0x1dc; + /* 0x130 */ u32 tevc[GX_MAX_TEVSTAGE]; + /* 0x170 */ u32 teva[GX_MAX_TEVSTAGE]; + /* 0x1B0 */ u32 tevKsel[GX_MAX_TEVSTAGE / 2]; + /* 0x1D0 */ u32 cmode0; + /* 0x1D4 */ u32 cmode1; + /* 0x1D8 */ u32 zmode; + /* 0x1DC */ u32 peCtrl; /* 0x1E0 */ u32 field_0x1e0; /* 0x1E4 */ u32 field_0x1e4; /* 0x1E8 */ u32 field_0x1e8; @@ -50,67 +50,106 @@ typedef struct _GXData { /* 0x1F0 */ u32 field_0x1f0; /* 0x1F4 */ u32 field_0x1f4; /* 0x1F8 */ u32 field_0x1f8; - /* 0x1FC */ u32 field_0x1fc; + /* 0x1FC */ u32 cpTex; /* 0x200 */ u8 field_0x200; - /* 0x204 */ u32 field_0x204; - /* 0x208 */ GXTexRegion field_0x208[8]; - /* 0x288 */ GXTexRegion field_0x288[8]; - /* 0x308 */ GXTexRegion field_0x308[8]; - /* 0x388 */ GXTlutRegion field_0x388[16]; + /* 0x204 */ u32 genMode; + /* 0x208 */ GXTexRegion TexRegions0[8]; + /* 0x288 */ GXTexRegion TexRegions1[8]; + /* 0x308 */ GXTexRegion TexRegions2[8]; + /* 0x388 */ GXTlutRegion TlutRegions[16]; /* 0x488 */ GXTlutRegion field_0x488[4]; - /* 0x4C8 */ GXTexRegionCallback field_0x4c8; - /* 0x4CC */ GXTlutRegionCallback field_0x4cc; - /* 0x4D0 */ GXAttrType field_0x4d0; - /* 0x4D4 */ u8 field_0x4d4; - /* 0x4D5 */ u8 field_0x4d5; - /* 0x4D8 */ GXProjectionType field_0x4d8; - /* 0x4DC */ Mtx field_0x4dc; - /* 0x50C */ f32 field_0x50c; - /* 0x510 */ f32 field_0x510; + /* 0x4C8 */ GXTexRegionCallback texRegionCB; + /* 0x4CC */ GXTlutRegionCallback tlutRegionCB; + /* 0x4D0 */ GXAttrType nrmDataType; + /* 0x4D4 */ GXBool hasNrm; + /* 0x4D5 */ GXBool hasBiNrm; + /* 0x4D8 */ GXProjectionType projectionType; + /* 0x4DC */ f32 field_0x4dc; + /* 0x4E0 */ f32 field_0x4e0; + /* 0x4E4 */ f32 field_0x4e4; + /* 0x4E8 */ f32 field_0x4e8; + /* 0x4EC */ f32 field_0x4ec; + /* 0x4F0 */ f32 field_0x4f0; + /* 0x4F4 */ f32 vpLeft; + /* 0x4F8 */ f32 vpTop; + /* 0x4FC */ f32 vpWd; + /* 0x500 */ f32 vpHt; + /* 0x504 */ f32 vpNearz; + /* 0x508 */ f32 vpFarz; + /* 0x50C */ f32 zOffset; + /* 0x510 */ f32 zScale; /* 0x514 */ u32 field_0x514[8]; /* 0x534 */ u32 field_0x534[8]; - /* 0x554 */ u32 field_0x554; - /* 0x558 */ u32 field_0x558[8]; + /* 0x558 */ u32 texmapId[9]; /* 0x578 */ u8 field_0x578[0x594 - 0x578]; - /* 0x594 */ u32 field_0x594; - /* 0x598 */ u32 field_0x598; - /* 0x59C */ u32 field_0x59c; - /* 0x5A0 */ u8 field_0x5a0[4]; - /* 0x5A4 */ u32 field_0x5a4; - /* 0x5A8 */ u8 field_0x5a8; - /* 0x5A9 */ u8 field_0x5a9; - /* 0x5AA */ u8 field_0x5aa; - /* 0x5AB */ u8 field_0x5ab; - /* 0x5AC */ u32 field_0x5ac; + /* 0x594 */ u32 tcsManEnab; + /* 0x598 */ u32 tevTcEnab; + /* 0x59C */ u32 perf0; + /* 0x5A0 */ u32 perf1; + /* 0x5A4 */ u32 perfSel; + /* 0x5A8 */ u8 inDispList; + /* 0x5A9 */ u8 dlSaveContext; + /* 0x5AA */ u8 abtWaitPECopy; + /* 0x5AB */ u8 dirtyVAT; + /* 0x5AC */ u32 dirtyFlags; } GXData; // Size: 0x5B0 STATIC_ASSERT(sizeof(GXData) == 0x5B0); extern GXData* const __GXData; +// Define register addresses. +#define GX_CP_ADDR (0x0C000000) +#define GX_PE_ADDR (0x0C001000) +#define GX_PI_ADDR (0x0C003000) +#define GX_MEM_ADDR (0x0C004000) + extern u32* __piReg; extern u16* __cpReg; -extern u8 __peReg[4]; -extern u8 __memReg[4]; +extern u16* __peReg; +extern vu16* __memReg; + +#define GX_GET_MEM_REG(offset) (*(vu16*)((vu16*)(__memReg) + (offset))) +#define GX_GET_CP_REG(offset) (*(vu16*)((vu16*)(__cpReg) + (offset))) +#define GX_GET_PE_REG(offset) (*(vu16*)((vu16*)(__peReg) + (offset))) +#define GX_GET_PI_REG(offset) (*(vu32*)((vu32*)(__piReg) + (offset))) + +#define GX_SET_MEM_REG(offset, val) (*(vu16*)((vu16*)(__memReg) + (offset)) = val) +#define GX_SET_CP_REG(offset, val) (*(vu16*)((vu16*)(__cpReg) + (offset)) = val) +#define GX_SET_PE_REG(offset, val) (*(vu16*)((vu16*)(__peReg) + (offset)) = val) +#define GX_SET_PI_REG(offset, val) (*(vu32*)((vu32*)(__piReg) + (offset)) = val) inline void GXSetWasteFlags() { GXData* data = __GXData; - data->field_0x5ac |= 0x3; - data->field_0x2 = 0; + data->dirtyFlags |= GX_DIRTY_SU_TEX | GX_DIRTY_BP_MASK; + data->bpSentNot = 0; } static inline void set_x2(u16 value) { - __GXData->field_0x2 = value; + __GXData->bpSentNot = value; } #ifdef __cplusplus extern "C" { #endif +static inline u32 GXReadMEMReg(u32 addrLo, u32 addrHi) +{ + u32 hiStart, hiNew, lo; + hiStart = GX_GET_MEM_REG(addrHi); + do { + hiNew = hiStart; + lo = GX_GET_MEM_REG(addrLo); + hiStart = GX_GET_MEM_REG(addrHi); + } while (hiStart != hiNew); + + return ((hiStart << 16) | lo); +} + GXTexRegion* __GXDefaultTexRegionCallback(GXTexObj* obj, GXTexMapID mapID); GXTlutRegion* __GXDefaultTlutRegionCallback(u32 tlut); -void __GXShutdown(s32); +BOOL __GXShutdown(BOOL); void __GXInitRevisionBits(void); GXFifoObj* GXInit(void* base, u32 size); void __GXInitGX(void); diff --git a/include/dolphin/gx/GXMisc.h b/include/dolphin/gx/GXMisc.h index 5a22f30cc86..12e5a8a6378 100644 --- a/include/dolphin/gx/GXMisc.h +++ b/include/dolphin/gx/GXMisc.h @@ -21,14 +21,14 @@ void GXPokeBlendMode(GXBlendMode mode, GXBlendFactor src_factor, GXBlendFactor d void GXPokeColorUpdate(GXBool enable_update); void GXPokeDstAlpha(GXBool enable, u8 alpha); void GXPokeDither(GXBool enable); -void GXPokeZMode(GXBool enable_compare, GXCompare comp); +void GXPokeZMode(GXBool enable_compare, GXCompare comp, GXBool update_enable); void GXPeekZ(u16 x, u16 y, u32* z); typedef void (*GXDrawSyncCallback)(u16 token); -void GXSetDrawSyncCallback(GXDrawSyncCallback callback); +GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback callback); typedef void (*GXDrawDoneCallback)(void); -void GXSetDrawDoneCallback(GXDrawDoneCallback callback); +GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback callback); void __GXPEInit(void); #ifdef __cplusplus diff --git a/include/dolphin/gx/GXPerf.h b/include/dolphin/gx/GXPerf.h index 821c81b2b58..a93237d33c5 100644 --- a/include/dolphin/gx/GXPerf.h +++ b/include/dolphin/gx/GXPerf.h @@ -2,12 +2,13 @@ #define GXPERF_H #include "dolphin/types.h" +#include "dolphin/gx/GXEnum.h" #ifdef __cplusplus extern "C" { #endif -void GXSetGPMetric(u32 perf0, u32 perf1); +void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1); void GXClearGPMetric(void); void GXReadXfRasMetric(u32*, u32*, u32*, u32*); diff --git a/include/dolphin/gx/GXStruct.h b/include/dolphin/gx/GXStruct.h index 57e02316c26..63608c2faaa 100644 --- a/include/dolphin/gx/GXStruct.h +++ b/include/dolphin/gx/GXStruct.h @@ -72,18 +72,18 @@ typedef struct _GXLightObj { } GXLightObj; typedef struct _GXFogAdjTable { - /* 0x0 */ u16 r[10]; + /* 0x0 */ u16 fogVals[10]; } GXFogAdjTable; typedef struct _GXFifoObj { /* 0x00 */ void* base; - /* 0x04 */ u32 end; + /* 0x04 */ void* end; /* 0x08 */ u32 size; /* 0x0C */ u32 high_wtrmark; /* 0x10 */ u32 low_wtrmark; /* 0x14 */ void* read_ptr; /* 0x18 */ void* write_ptr; - /* 0x1C */ void* rw_dst; + /* 0x1C */ s32 rw_dst; /* 0x20 */ u8 fifo_wrap; /* 0x21 */ u8 cpu_fifo_ready; /* 0x22 */ u8 gp_fifo_ready; diff --git a/include/dolphin/gx/GXTexture.h b/include/dolphin/gx/GXTexture.h index e10c9f88e2f..da2009d1477 100644 --- a/include/dolphin/gx/GXTexture.h +++ b/include/dolphin/gx/GXTexture.h @@ -8,7 +8,7 @@ extern "C" { #endif u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod); -void __GetImageTileCount(u32 arg0, s16 arg1, s16 arg2, s32* arg3, s32* arg4, s32* arg5); +void __GetImageTileCount(u32 arg0, u16 arg1, u16 arg2, s32* arg3, s32* arg4, s32* arg5); void GXInitTexObj(GXTexObj* obj, void* image, u16 width, u16 height, GXTexFmt fmt, GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap); void GXInitTexObjCI(GXTexObj* obj, void* image, u16 width, u16 height, GXCITexFmt format, diff --git a/libs/dolphin/gx/GXAttr.c b/libs/dolphin/gx/GXAttr.c index 2cc458ab869..d17e3a0dcbf 100644 --- a/libs/dolphin/gx/GXAttr.c +++ b/libs/dolphin/gx/GXAttr.c @@ -6,6 +6,7 @@ #include "dolphin/gx/GXAttr.h" #include "dol2asm.h" #include "dolphin/gx/GXInit.h" +#include "dolphin/gx/GX.h" // // Forward References: @@ -16,7 +17,6 @@ void GXSetVtxDescv(); void __GXSetVCD(); void __GXCalculateVLim(); void GXClearVtxDesc(); -void GXSetVtxAttrFmt(); void GXSetVtxAttrFmtv(); void __GXSetVAT(); void GXInvalidateVtxCache(); @@ -32,32 +32,106 @@ void __GXSetMatrixIndex(); // /* ############################################################################################## */ -/* 803D2280-803D22E8 -00001 0068+00 1/1 0/0 0/0 .data @176 */ -SECTION_DATA static void* lit_176[26] = { - (void*)(((char*)GXSetVtxDesc) + 0x20), (void*)(((char*)GXSetVtxDesc) + 0x34), - (void*)(((char*)GXSetVtxDesc) + 0x48), (void*)(((char*)GXSetVtxDesc) + 0x5C), - (void*)(((char*)GXSetVtxDesc) + 0x70), (void*)(((char*)GXSetVtxDesc) + 0x84), - (void*)(((char*)GXSetVtxDesc) + 0x98), (void*)(((char*)GXSetVtxDesc) + 0xAC), - (void*)(((char*)GXSetVtxDesc) + 0xC0), (void*)(((char*)GXSetVtxDesc) + 0xD4), - (void*)(((char*)GXSetVtxDesc) + 0xE8), (void*)(((char*)GXSetVtxDesc) + 0x150), - (void*)(((char*)GXSetVtxDesc) + 0x164), (void*)(((char*)GXSetVtxDesc) + 0x178), - (void*)(((char*)GXSetVtxDesc) + 0x18C), (void*)(((char*)GXSetVtxDesc) + 0x1A0), - (void*)(((char*)GXSetVtxDesc) + 0x1B4), (void*)(((char*)GXSetVtxDesc) + 0x1C8), - (void*)(((char*)GXSetVtxDesc) + 0x1DC), (void*)(((char*)GXSetVtxDesc) + 0x1F0), - (void*)(((char*)GXSetVtxDesc) + 0x204), (void*)(((char*)GXSetVtxDesc) + 0x214), - (void*)(((char*)GXSetVtxDesc) + 0x214), (void*)(((char*)GXSetVtxDesc) + 0x214), - (void*)(((char*)GXSetVtxDesc) + 0x214), (void*)(((char*)GXSetVtxDesc) + 0x11C), -}; - -/* 8035AEB8-8035B124 3557F8 026C+00 1/0 70/70 6/6 .text GXSetVtxDesc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetVtxDesc(GXAttr attr, GXAttrType type) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXSetVtxDesc.s" +static inline void SETVCDATTR(GXAttr name, GXAttrType type) { + switch(name) { + case GX_VA_PNMTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 31, 1, type); + break; + case GX_VA_TEX0MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 30, 1, type); + break; + case GX_VA_TEX1MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 29, 1, type); + break; + case GX_VA_TEX2MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 28, 1, type); + break; + case GX_VA_TEX3MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 27, 1, type); + break; + case GX_VA_TEX4MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 26, 1, type); + break; + case GX_VA_TEX5MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 25, 1, type); + break; + case GX_VA_TEX6MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 24, 1, type); + break; + case GX_VA_TEX7MTXIDX: + GX_BITFIELD_SET(__GXData->vcdLoReg, 23, 1, type); + break; + case GX_VA_POS: + GX_BITFIELD_SET(__GXData->vcdLoReg, 21, 2, type); + break; + case GX_VA_NRM: + if (type != GX_NONE) { + __GXData->hasNrm = TRUE; + // GX_VA_NRM and GX_VA_NBT should not be enabled at the same time + __GXData->hasBiNrm = FALSE; + __GXData->nrmDataType = type; + } + else { + __GXData->hasNrm = FALSE; + } + break; + case GX_VA_NBT: + if (type != GX_NONE) { + __GXData->hasBiNrm = TRUE; + // GX_VA_NRM and GX_VA_NBT should not be enabled at the same time + __GXData->hasNrm = FALSE; + __GXData->nrmDataType = type; + } + else { + __GXData->hasBiNrm = FALSE; + } + break; + case GX_VA_CLR0: + GX_BITFIELD_SET(__GXData->vcdLoReg, 17, 2, type); + break; + case GX_VA_CLR1: + GX_BITFIELD_SET(__GXData->vcdLoReg, 15, 2, type); + break; + case GX_VA_TEX0: + GX_BITFIELD_SET(__GXData->vcdHiReg, 30, 2, type); + break; + case GX_VA_TEX1: + GX_BITFIELD_SET(__GXData->vcdHiReg, 28, 2, type); + break; + case GX_VA_TEX2: + GX_BITFIELD_SET(__GXData->vcdHiReg, 26, 2, type); + break; + case GX_VA_TEX3: + GX_BITFIELD_SET(__GXData->vcdHiReg, 24, 2, type); + break; + case GX_VA_TEX4: + GX_BITFIELD_SET(__GXData->vcdHiReg, 22, 2, type); + break; + case GX_VA_TEX5: + GX_BITFIELD_SET(__GXData->vcdHiReg, 20, 2, type); + break; + case GX_VA_TEX6: + GX_BITFIELD_SET(__GXData->vcdHiReg, 18, 2, type); + break; + case GX_VA_TEX7: + GX_BITFIELD_SET(__GXData->vcdHiReg, 16, 2, type); + break; + } +} + +void GXSetVtxDesc(GXAttr name, GXAttrType type) { + SETVCDATTR(name, type); + + // Set normal data type if enabled + if (__GXData->hasNrm || __GXData->hasBiNrm) { + GX_BITFIELD_SET(__GXData->vcdLoReg, 19, 2, __GXData->nrmDataType); + } + else { + GX_BITFIELD_SET(__GXData->vcdLoReg, 19, 2, 0); + } + + __GXData->dirtyFlags |= GX_DIRTY_VCD; } -#pragma pop /* ############################################################################################## */ /* 803D22E8-803D2350 -00001 0068+00 1/1 0/0 0/0 .data @223 */ @@ -88,6 +162,33 @@ asm void GXSetVtxDescv(GXVtxDescList* list) { #pragma pop /* 8035B3AC-8035B468 355CEC 00BC+00 0/0 2/2 0/0 .text __GXSetVCD */ +// regalloc +#ifdef NONMATCHING +static void __GXXfVtxSpecs(void) { + u32 normCount, colorCount, texCount, x, tmp; + + normCount = __GXData->hasBiNrm ? 2 : (__GXData->hasNrm ? 1 : 0); + + // Both fields in one access + colorCount = 33 - __cntlzw(GX_GET_REG(__GXData->vcdLoReg, GX_CP_VCD_LO_CLRSPEC_ST, GX_CP_VCD_LO_CLRDIF_END)); + colorCount = (colorCount) / 2; + + // All 16 assigned bits in VCD_Hi + texCount = (33 - __cntlzw(GX_GET_REG(__GXData->vcdHiReg, GX_CP_VCD_HI_TEX7COORD_ST, GX_CP_VCD_HI_TEX0COORD_END))); + texCount = texCount / 2; + + GX_XF_LOAD_REG(GX_XF_REG_INVERTEXSPEC, colorCount | normCount << 2 | texCount << 4); + __GXData->bpSentNot = GX_TRUE; +} + +void __GXSetVCD(void) { + + GX_CP_LOAD_REG(GX_CP_REG_VCD_LO, __GXData->vcdLoReg); + GX_CP_LOAD_REG(GX_CP_REG_VCD_HI, __GXData->vcdHiReg); + + __GXXfVtxSpecs(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -96,124 +197,134 @@ asm void __GXSetVCD(void) { #include "asm/dolphin/gx/GXAttr/__GXSetVCD.s" } #pragma pop - -/* ############################################################################################## */ -/* 80450A80-80450A84 000500 0004+00 1/1 0/0 0/0 .sdata tbl1$241 */ -SECTION_SDATA static u8 tbl1[4] = { - 0x00, - 0x04, - 0x01, - 0x02, -}; - -/* 80450A84-80450A88 000504 0004+00 1/1 0/0 0/0 .sdata tbl2$242 */ -SECTION_SDATA static u8 tbl2[4] = { - 0x00, - 0x08, - 0x01, - 0x02, -}; - -/* 80450A88-80450A90 000508 0004+04 1/1 0/0 0/0 .sdata tbl3$243 */ -SECTION_SDATA static u8 tbl3[4 + 4 /* padding */] = { - 0x00, - 0x0C, - 0x01, - 0x02, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; +#endif /* 8035B468-8035B58C 355DA8 0124+00 0/0 2/2 0/0 .text __GXCalculateVLim */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXCalculateVLim(void) { - nofralloc -#include "asm/dolphin/gx/GXAttr/__GXCalculateVLim.s" +void __GXCalculateVLim(void) { + static u8 tbl1[] = { 0, 4, 1, 2 }; + static u8 tbl2[] = { 0, 8, 1, 2 }; + static u8 tbl3[] = { 0, 12, 1, 2 }; + + u32 vlim; + u32 vcdLoReg; + u32 vcdHiReg; + s32 compCnt; + + if (__GXData->vNum == 0) { + return; + } + + vcdLoReg = __GXData->vcdLoReg; + vcdHiReg = __GXData->vcdHiReg; + + // GXCompCnt bit of normal parameters + compCnt = __GXData->vatA[GX_VTXFMT0]; + compCnt = (compCnt & 0x200) >> 9; + + vlim = GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_POSMTXIDX_ST, GX_CP_VCD_LO_POSMTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX0MTXIDX_ST, GX_CP_VCD_LO_TEX0MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX1MTXIDX_ST, GX_CP_VCD_LO_TEX1MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX2MTXIDX_ST, GX_CP_VCD_LO_TEX2MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX3MTXIDX_ST, GX_CP_VCD_LO_TEX3MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX4MTXIDX_ST, GX_CP_VCD_LO_TEX4MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX5MTXIDX_ST, GX_CP_VCD_LO_TEX5MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX6MTXIDX_ST, GX_CP_VCD_LO_TEX6MTXIDX_END); + vlim += GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_TEX7MTXIDX_ST, GX_CP_VCD_LO_TEX7MTXIDX_END); + + vlim += tbl3[GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_POS_ST, GX_CP_VCD_LO_POS_END)]; + vlim += tbl3[GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_NRM_ST, GX_CP_VCD_LO_NRM_END)] * (compCnt == GX_NRM_NBT ? 3 : 1); + vlim += tbl1[GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_CLRDIF_ST, GX_CP_VCD_LO_CLRDIF_END)]; + vlim += tbl1[GX_GET_REG(vcdLoReg, GX_CP_VCD_LO_CLRSPEC_ST, GX_CP_VCD_LO_CLRSPEC_END)]; + + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX0COORD_ST, GX_CP_VCD_HI_TEX0COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX1COORD_ST, GX_CP_VCD_HI_TEX1COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX2COORD_ST, GX_CP_VCD_HI_TEX2COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX3COORD_ST, GX_CP_VCD_HI_TEX3COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX4COORD_ST, GX_CP_VCD_HI_TEX4COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX5COORD_ST, GX_CP_VCD_HI_TEX5COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX6COORD_ST, GX_CP_VCD_HI_TEX6COORD_END)]; + vlim += tbl2[GX_GET_REG(vcdHiReg, GX_CP_VCD_HI_TEX7COORD_ST, GX_CP_VCD_HI_TEX7COORD_END)]; + + __GXData->vLim = vlim; } -#pragma pop void GXGetVtxDesc(int param_0, GXAttrType* param_1) { int local_38; switch (param_0) { case 0: - local_38 = __GXData->field_0x14 & 1; + local_38 = __GXData->vcdLoReg & 1; break; case 1: - local_38 = (__GXData->field_0x14 & 2) >> 1; + local_38 = (__GXData->vcdLoReg & 2) >> 1; break; case 2: - local_38 = (__GXData->field_0x14 & 4) >> 2; + local_38 = (__GXData->vcdLoReg & 4) >> 2; break; case 3: - local_38 = (__GXData->field_0x14 & 8) >> 3; + local_38 = (__GXData->vcdLoReg & 8) >> 3; break; case 4: - local_38 = (__GXData->field_0x14 & 0x10) >> 4; + local_38 = (__GXData->vcdLoReg & 0x10) >> 4; break; case 5: - local_38 = (__GXData->field_0x14 & 0x20) >> 5; + local_38 = (__GXData->vcdLoReg & 0x20) >> 5; break; case 6: - local_38 = (__GXData->field_0x14 & 0x40) >> 6; + local_38 = (__GXData->vcdLoReg & 0x40) >> 6; break; case 7: - local_38 = (__GXData->field_0x14 & 0x80) >> 7; + local_38 = (__GXData->vcdLoReg & 0x80) >> 7; break; case 8: - local_38 = (__GXData->field_0x14 & 0x100) >> 8; + local_38 = (__GXData->vcdLoReg & 0x100) >> 8; break; case 9: - local_38 = (__GXData->field_0x14 & 0x600) >> 9; + local_38 = (__GXData->vcdLoReg & 0x600) >> 9; break; case 10: - if (__GXData->field_0x4d4 != 0) { - local_38 = (__GXData->field_0x14 & 0x1800) >> 11; + if (__GXData->hasNrm != 0) { + local_38 = (__GXData->vcdLoReg & 0x1800) >> 11; } else { local_38 = 0; } break; case 0x19: - if (__GXData->field_0x4d5 != 0) { - local_38 = (__GXData->field_0x14 & 0x1800) >> 11; + if (__GXData->hasBiNrm != 0) { + local_38 = (__GXData->vcdLoReg & 0x1800) >> 11; } else { local_38 = 0; } break; case 11: - local_38 = (__GXData->field_0x14 & 0x6000) >> 13; + local_38 = (__GXData->vcdLoReg & 0x6000) >> 13; break; case 12: - local_38 = (__GXData->field_0x14 & 0x18000) >> 15; + local_38 = (__GXData->vcdLoReg & 0x18000) >> 15; break; case 13: - local_38 = (__GXData->field_0x18 & 3); + local_38 = (__GXData->vcdHiReg & 3); break; case 14: - local_38 = (__GXData->field_0x18 & 0xC) >> 2; + local_38 = (__GXData->vcdHiReg & 0xC) >> 2; break; case 15: - local_38 = (__GXData->field_0x18 & 0x30) >> 4; + local_38 = (__GXData->vcdHiReg & 0x30) >> 4; break; case 16: - local_38 = (__GXData->field_0x18 & 0xC0) >> 6; + local_38 = (__GXData->vcdHiReg & 0xC0) >> 6; break; case 17: - local_38 = (__GXData->field_0x18 & 0x300) >> 8; + local_38 = (__GXData->vcdHiReg & 0x300) >> 8; break; case 18: - local_38 = (__GXData->field_0x18 & 0xC00) >> 10; + local_38 = (__GXData->vcdHiReg & 0xC00) >> 10; break; case 19: - local_38 = (__GXData->field_0x18 & 0x3000) >> 12; + local_38 = (__GXData->vcdHiReg & 0x3000) >> 12; break; case 20: - local_38 = (__GXData->field_0x18 & 0xC000) >> 14; + local_38 = (__GXData->vcdHiReg & 0xC000) >> 14; break; default: local_38 = 0; @@ -239,72 +350,134 @@ void GXGetVtxDescv(GXVtxDescList* attrPtr) { } /* 8035B58C-8035B5C4 355ECC 0038+00 0/0 66/66 7/7 .text GXClearVtxDesc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXClearVtxDesc(void) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXClearVtxDesc.s" +void GXClearVtxDesc(void) { + __GXData->vcdLoReg = 0; + GX_BITFIELD_SET(__GXData->vcdLoReg, 0x15, 2, GX_DIRECT); + __GXData->vcdHiReg = 0; + __GXData->hasNrm = FALSE; + __GXData->hasBiNrm = FALSE; + __GXData->dirtyFlags |= GX_DIRTY_VCD; } -#pragma pop /* ############################################################################################## */ -/* 803D2350-803D2394 -00001 0044+00 1/1 0/0 0/0 .data @476 */ -SECTION_DATA static void* lit_476[17] = { - (void*)(((char*)GXSetVtxAttrFmt) + 0x3C), (void*)(((char*)GXSetVtxAttrFmt) + 0x64), - (void*)(((char*)GXSetVtxAttrFmt) + 0xB8), (void*)(((char*)GXSetVtxAttrFmt) + 0xD4), - (void*)(((char*)GXSetVtxAttrFmt) + 0xF0), (void*)(((char*)GXSetVtxAttrFmt) + 0x118), - (void*)(((char*)GXSetVtxAttrFmt) + 0x140), (void*)(((char*)GXSetVtxAttrFmt) + 0x168), - (void*)(((char*)GXSetVtxAttrFmt) + 0x190), (void*)(((char*)GXSetVtxAttrFmt) + 0x1B8), - (void*)(((char*)GXSetVtxAttrFmt) + 0x1E0), (void*)(((char*)GXSetVtxAttrFmt) + 0x208), - (void*)(((char*)GXSetVtxAttrFmt) + 0x22C), (void*)(((char*)GXSetVtxAttrFmt) + 0x22C), - (void*)(((char*)GXSetVtxAttrFmt) + 0x22C), (void*)(((char*)GXSetVtxAttrFmt) + 0x22C), - (void*)(((char*)GXSetVtxAttrFmt) + 0x64), -}; + +static inline void SETVAT(u32* vatA, u32* vatB, u32* vatC, GXAttr attr, GXCompCnt compCnt, GXCompType compType, u8 shift) +{ + switch (attr) { + case GX_VA_POS: + GX_SET_REG(*vatA, compCnt, GX_CP_VAT_GRP0_POS_CNT_ST, GX_CP_VAT_GRP0_POS_CNT_END); + GX_SET_REG(*vatA, compType, GX_CP_VAT_GRP0_POS_TYPE_ST, GX_CP_VAT_GRP0_POS_TYPE_END); + GX_SET_REG(*vatA, shift, GX_CP_VAT_GRP0_POS_SHIFT_ST, GX_CP_VAT_GRP0_POS_SHIFT_END); + break; + case GX_VA_NRM: + case GX_VA_NBT: + GX_SET_REG(*vatA, compType, GX_CP_VAT_GRP0_NRM_TYPE_ST, GX_CP_VAT_GRP0_NRM_TYPE_END); + if (compCnt == GX_NRM_NBT3) { + // Probably because the compCnt can only be one bit? + GX_SET_REG(*vatA, GX_NRM_NBT, GX_CP_VAT_GRP0_NRM_CNT_ST, GX_CP_VAT_GRP0_NRM_CNT_END); + GX_SET_REG(*vatA, TRUE, GX_CP_VAT_GRP0_NRMIDX3_ST, GX_CP_VAT_GRP0_NRMIDX3_END); + } else { + GX_SET_REG(*vatA, compCnt, GX_CP_VAT_GRP0_NRM_CNT_ST, GX_CP_VAT_GRP0_NRM_CNT_END); + GX_SET_REG(*vatA, FALSE, GX_CP_VAT_GRP0_NRMIDX3_ST, GX_CP_VAT_GRP0_NRMIDX3_END); + } + break; + case GX_VA_CLR0: + GX_SET_REG(*vatA, compCnt, GX_CP_VAT_GRP0_CLRDIFF_CNT_ST, GX_CP_VAT_GRP0_CLRDIFF_CNT_END); + GX_SET_REG(*vatA, compType, GX_CP_VAT_GRP0_CLRDIFF_TYPE_ST, GX_CP_VAT_GRP0_CLRDIFF_TYPE_END); + break; + case GX_VA_CLR1: + GX_SET_REG(*vatA, compCnt, GX_CP_VAT_GRP0_CLRSPEC_CNT_ST, GX_CP_VAT_GRP0_CLRSPEC_CNT_END); + GX_SET_REG(*vatA, compType, GX_CP_VAT_GRP0_CLRSPEC_TYPE_ST, GX_CP_VAT_GRP0_CLRSPEC_TYPE_END); + break; + case GX_VA_TEX0: + GX_SET_REG(*vatA, compCnt, GX_CP_VAT_GRP0_TXC0_CNT_ST, GX_CP_VAT_GRP0_TXC0_CNT_END); + GX_SET_REG(*vatA, compType, GX_CP_VAT_GRP0_TXC0_TYPE_ST, GX_CP_VAT_GRP0_TXC0_TYPE_END); + GX_SET_REG(*vatA, shift, GX_CP_VAT_GRP0_TXC0_SHIFT_ST, GX_CP_VAT_GRP0_TXC0_SHIFT_END); + break; + case GX_VA_TEX1: + GX_SET_REG(*vatB, compCnt, GX_CP_VAT_GRP1_TXC1_CNT_ST, GX_CP_VAT_GRP1_TXC1_CNT_END); + GX_SET_REG(*vatB, compType, GX_CP_VAT_GRP1_TXC1_TYPE_ST, GX_CP_VAT_GRP1_TXC1_TYPE_END); + GX_SET_REG(*vatB, shift, GX_CP_VAT_GRP1_TXC1_SHIFT_ST, GX_CP_VAT_GRP1_TXC1_SHIFT_END); + break; + case GX_VA_TEX2: + GX_SET_REG(*vatB, compCnt, GX_CP_VAT_GRP1_TXC2_CNT_ST, GX_CP_VAT_GRP1_TXC2_CNT_END); + GX_SET_REG(*vatB, compType, GX_CP_VAT_GRP1_TXC2_TYPE_ST, GX_CP_VAT_GRP1_TXC2_TYPE_END); + GX_SET_REG(*vatB, shift, GX_CP_VAT_GRP1_TXC2_SHIFT_ST, GX_CP_VAT_GRP1_TXC2_SHIFT_END); + break; + case GX_VA_TEX3: + GX_SET_REG(*vatB, compCnt, GX_CP_VAT_GRP1_TXC3_CNT_ST, GX_CP_VAT_GRP1_TXC3_CNT_END); + GX_SET_REG(*vatB, compType, GX_CP_VAT_GRP1_TXC3_TYPE_ST, GX_CP_VAT_GRP1_TXC3_TYPE_END); + GX_SET_REG(*vatB, shift, GX_CP_VAT_GRP1_TXC3_SHIFT_ST, GX_CP_VAT_GRP1_TXC3_SHIFT_END); + break; + case GX_VA_TEX4: + GX_SET_REG(*vatB, compCnt, GX_CP_VAT_GRP1_TXC4_CNT_ST, GX_CP_VAT_GRP1_TXC4_CNT_END); + GX_SET_REG(*vatB, compType, GX_CP_VAT_GRP1_TXC4_TYPE_ST, GX_CP_VAT_GRP1_TXC4_TYPE_END); + GX_SET_REG(*vatC, shift, GX_CP_VAT_GRP2_TXC4_SHIFT_ST, GX_CP_VAT_GRP2_TXC4_SHIFT_END); + break; + case GX_VA_TEX5: + GX_SET_REG(*vatC, compCnt, GX_CP_VAT_GRP2_TXC5_CNT_ST, GX_CP_VAT_GRP2_TXC5_CNT_END); + GX_SET_REG(*vatC, compType, GX_CP_VAT_GRP2_TXC5_TYPE_ST, GX_CP_VAT_GRP2_TXC5_TYPE_END); + GX_SET_REG(*vatC, shift, GX_CP_VAT_GRP2_TXC5_SHIFT_ST, GX_CP_VAT_GRP2_TXC5_SHIFT_END); + break; + case GX_VA_TEX6: + GX_SET_REG(*vatC, compCnt, GX_CP_VAT_GRP2_TXC6_CNT_ST, GX_CP_VAT_GRP2_TXC6_CNT_END); + GX_SET_REG(*vatC, compType, GX_CP_VAT_GRP2_TXC6_TYPE_ST, GX_CP_VAT_GRP2_TXC6_TYPE_END); + GX_SET_REG(*vatC, shift, GX_CP_VAT_GRP2_TXC6_SHIFT_ST, GX_CP_VAT_GRP2_TXC6_SHIFT_END); + break; + case GX_VA_TEX7: + GX_SET_REG(*vatC, compCnt, GX_CP_VAT_GRP2_TXC7_CNT_ST, GX_CP_VAT_GRP2_TXC7_CNT_END); + GX_SET_REG(*vatC, compType, GX_CP_VAT_GRP2_TXC7_TYPE_ST, GX_CP_VAT_GRP2_TXC7_TYPE_END); + GX_SET_REG(*vatC, shift, GX_CP_VAT_GRP2_TXC7_SHIFT_ST, GX_CP_VAT_GRP2_TXC7_SHIFT_END); + break; + } +} /* 8035B5C4-8035B820 355F04 025C+00 1/0 69/69 6/6 .text GXSetVtxAttrFmt */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetVtxAttrFmt(GXVtxFmt fmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u32) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXSetVtxAttrFmt.s" -} -#pragma pop +void GXSetVtxAttrFmt(GXVtxFmt format, GXAttr attr, GXCompCnt count, GXCompType type, u8 frac) { + u32* vA = (u32*)&__GXData->vatA[format]; + u32* vB = (u32*)&__GXData->vatB[format]; + u32* vC = &__GXData->vatC[format]; -/* ############################################################################################## */ -/* 803D2394-803D23D8 -00001 0044+00 1/1 0/0 0/0 .data @503 */ -SECTION_DATA static void* lit_503[17] = { - (void*)(((char*)GXSetVtxAttrFmtv) + 0x50), (void*)(((char*)GXSetVtxAttrFmtv) + 0x78), - (void*)(((char*)GXSetVtxAttrFmtv) + 0xCC), (void*)(((char*)GXSetVtxAttrFmtv) + 0xE8), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x104), (void*)(((char*)GXSetVtxAttrFmtv) + 0x12C), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x154), (void*)(((char*)GXSetVtxAttrFmtv) + 0x17C), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x1A4), (void*)(((char*)GXSetVtxAttrFmtv) + 0x1CC), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x1F4), (void*)(((char*)GXSetVtxAttrFmtv) + 0x21C), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x240), (void*)(((char*)GXSetVtxAttrFmtv) + 0x240), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x240), (void*)(((char*)GXSetVtxAttrFmtv) + 0x240), - (void*)(((char*)GXSetVtxAttrFmtv) + 0x78), -}; + SETVAT(vA, vB, vC, attr, count, type, frac); + + __GXData->dirtyFlags |= GX_DIRTY_VAT; + __GXData->dirtyVAT |= (u8)(1 << (u8)format); +} /* 8035B820-8035BAA0 356160 0280+00 1/0 1/1 1/1 .text GXSetVtxAttrFmtv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList* list) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXSetVtxAttrFmtv.s" +void GXSetVtxAttrFmtv(GXVtxFmt format, GXVtxAttrFmtList* list) { + u32* vatA; + u32* vatB; + u32* vatC; + + vatA = (u32*)&__GXData->vatA[format]; + vatB = (u32*)&__GXData->vatB[format]; + vatC = &__GXData->vatC[format]; + + for (; list->mAttrib != GX_VA_NULL; list++) { + SETVAT(vatA, vatB, vatC, list->mAttrib, list->mCompCnt, list->mCompType, list->mCompShift); + } + + __GXData->dirtyFlags |= GX_DIRTY_VAT; + __GXData->dirtyVAT |= (u8)(1 << (u8)format); } -#pragma pop /* 8035BAA0-8035BB28 3563E0 0088+00 0/0 2/2 0/0 .text __GXSetVAT */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXSetVAT(void) { - nofralloc -#include "asm/dolphin/gx/GXAttr/__GXSetVAT.s" +void __GXSetVAT(void) { + u32 i = 0; + u32 dirtyVAT = __GXData->dirtyVAT; + do { + if (dirtyVAT & (1)) { + GX_CP_LOAD_REG(GX_CP_REG_VAT_GRP0 | i, __GXData->vatA[i]); + GX_CP_LOAD_REG(GX_CP_REG_VAT_GRP1 | i, __GXData->vatB[i]); + GX_CP_LOAD_REG(GX_CP_REG_VAT_GRP2 | i, __GXData->vatC[i]); + } + dirtyVAT >>= 1; + i++; + } while (dirtyVAT != 0); + + __GXData->dirtyVAT = 0; } -#pragma pop static u8 GetFracForNrm(int param_0) { int var_r31; @@ -384,9 +557,9 @@ void GXGetVtxAttrFmt(GXVtxFmt param_0, int param_1, GXCompCnt* param_2, GXCompTy } */ #endif - tmp_1 = &__GXData->field_0x1c[param_0]; - tmp_2 = &__GXData->field_0x3c[param_0]; - tmp_3 = &__GXData->field_0x5c[param_0]; + tmp_1 = &__GXData->vatA[param_0]; + tmp_2 = &__GXData->vatB[param_0]; + tmp_3 = &__GXData->vatC[param_0]; switch (param_1) { case 9: @@ -462,66 +635,172 @@ void GXGetVtxAttrFmt(GXVtxFmt param_0, int param_1, GXCompCnt* param_2, GXCompTy } /* 8035BB28-8035BB6C 356468 0044+00 0/0 13/13 5/5 .text GXSetArray */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetArray(GXAttr attr, void* base, u8) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXSetArray.s" +void GXSetArray(GXAttr attr, void* basePtr, u8 stride) { + s32 newAttr; + s32 attrReg; + + newAttr = attr; + if (newAttr == GX_VA_NBT) { + newAttr = GX_VA_NRM; + } + + attrReg = newAttr - GX_VA_POS; + + GX_CP_LOAD_REG(GX_BP_REG_SETMODE0_TEX4 | attrReg, + // Address -> offset? + (u32)basePtr & ~0xC0000000); + + GX_CP_LOAD_REG(GX_BP_REG_SETIMAGE2_TEX4 | attrReg, stride); } -#pragma pop /* 8035BB6C-8035BB7C 3564AC 0010+00 0/0 6/6 0/0 .text GXInvalidateVtxCache */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXInvalidateVtxCache(void) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXInvalidateVtxCache.s" +void GXInvalidateVtxCache(void) { + GXFIFO.u8 = GX_FIFO_CMD_INVAL_VTX; } -#pragma pop - -/* ############################################################################################## */ -/* 803D23D8-803D23F4 -00001 001C+00 1/1 0/0 0/0 .data @740 */ -SECTION_DATA static void* lit_740[7] = { - (void*)(((char*)GXSetTexCoordGen2) + 0x1CC), (void*)(((char*)GXSetTexCoordGen2) + 0x1E0), - (void*)(((char*)GXSetTexCoordGen2) + 0x1F4), (void*)(((char*)GXSetTexCoordGen2) + 0x208), - (void*)(((char*)GXSetTexCoordGen2) + 0x21C), (void*)(((char*)GXSetTexCoordGen2) + 0x230), - (void*)(((char*)GXSetTexCoordGen2) + 0x244), -}; - -/* 803D23F4-803D2448 -00001 0054+00 1/1 0/0 0/0 .data @739 */ -SECTION_DATA static void* lit_739[21] = { - (void*)(((char*)GXSetTexCoordGen2) + 0x38), (void*)(((char*)GXSetTexCoordGen2) + 0x44), - (void*)(((char*)GXSetTexCoordGen2) + 0x50), (void*)(((char*)GXSetTexCoordGen2) + 0x5C), - (void*)(((char*)GXSetTexCoordGen2) + 0x78), (void*)(((char*)GXSetTexCoordGen2) + 0x80), - (void*)(((char*)GXSetTexCoordGen2) + 0x88), (void*)(((char*)GXSetTexCoordGen2) + 0x90), - (void*)(((char*)GXSetTexCoordGen2) + 0x98), (void*)(((char*)GXSetTexCoordGen2) + 0xA0), - (void*)(((char*)GXSetTexCoordGen2) + 0xA8), (void*)(((char*)GXSetTexCoordGen2) + 0xB0), - (void*)(((char*)GXSetTexCoordGen2) + 0xB4), (void*)(((char*)GXSetTexCoordGen2) + 0xB4), - (void*)(((char*)GXSetTexCoordGen2) + 0xB4), (void*)(((char*)GXSetTexCoordGen2) + 0xB4), - (void*)(((char*)GXSetTexCoordGen2) + 0xB4), (void*)(((char*)GXSetTexCoordGen2) + 0xB4), - (void*)(((char*)GXSetTexCoordGen2) + 0xB4), (void*)(((char*)GXSetTexCoordGen2) + 0x68), - (void*)(((char*)GXSetTexCoordGen2) + 0x70), -}; /* 8035BB7C-8035BDFC 3564BC 0280+00 2/0 46/46 5/5 .text GXSetTexCoordGen2 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTexCoordGen2(GXTexCoordID dst, GXTexGenType type, GXTexGenSrc src, u32 mtx, - GXBool renormalize, u32 pt_mtx) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXSetTexCoordGen2.s" +void GXSetTexCoordGen2(GXTexCoordID id, GXTexGenType type, GXTexGenSrc src, u32 texMtxIdx, GXBool normalize, u32 dualTexMtxIdx) +{ + u32 reg; + u32 inputRow; + GXXfTexReg inputForm; + + reg = 0; + inputForm = GX_XF_TEX_FORM_AB11; + inputRow = 5; + + switch (src) { + case GX_TG_POS: + inputRow = 0; + inputForm = GX_XF_TEX_FORM_ABC1; + break; + case GX_TG_NRM: + inputRow = 1; + inputForm = GX_XF_TEX_FORM_ABC1; + break; + case GX_TG_BINRM: + inputRow = 3; + inputForm = GX_XF_TEX_FORM_ABC1; + break; + case GX_TG_TANGENT: + inputRow = 4; + inputForm = GX_XF_TEX_FORM_ABC1; + break; + case GX_TG_COLOR0: + inputRow = 2; + break; + case GX_TG_COLOR1: + inputRow = 2; + break; + case GX_TG_TEX0: + inputRow = 5; + break; + case GX_TG_TEX1: + inputRow = 6; + break; + case GX_TG_TEX2: + inputRow = 7; + break; + case GX_TG_TEX3: + inputRow = 8; + break; + case GX_TG_TEX4: + inputRow = 9; + break; + case GX_TG_TEX5: + inputRow = 10; + break; + case GX_TG_TEX6: + inputRow = 11; + break; + case GX_TG_TEX7: + inputRow = 12; + break; + } + + switch (type) { + case GX_TG_NRM: + GX_SET_REG(reg, GX_XF_TEX_PROJ_ST, GX_XF_TEX_PROJTYPE_ST, GX_XF_TEX_PROJTYPE_END); // 2x4 projection + GX_SET_REG(reg, inputForm, GX_XF_TEX_INPUTFORM_ST, GX_XF_TEX_INPUTFORM_END); + GX_SET_REG(reg, GX_TG_POS, GX_XF_TEX_TEXGENTYPE_ST, GX_XF_TEX_TEXGENTYPE_END); + GX_SET_REG(reg, inputRow, GX_XF_TEX_SRCROW_ST, GX_XF_TEX_SRCROW_END); + break; + case GX_TG_POS: + GX_SET_REG(reg, GX_XF_TEX_PROJ_STQ, GX_XF_TEX_PROJTYPE_ST, GX_XF_TEX_PROJTYPE_END); // 3x4 projection + GX_SET_REG(reg, inputForm, GX_XF_TEX_INPUTFORM_ST, GX_XF_TEX_INPUTFORM_END); + GX_SET_REG(reg, GX_TG_POS, GX_XF_TEX_TEXGENTYPE_ST, GX_XF_TEX_TEXGENTYPE_END); + GX_SET_REG(reg, inputRow, GX_XF_TEX_SRCROW_ST, GX_XF_TEX_SRCROW_END); + break; + case GX_TG_BUMP0: + case GX_TG_BUMP1: + case GX_TG_BUMP2: + case GX_TG_BUMP3: + case GX_TG_BUMP4: + case GX_TG_BUMP5: + case GX_TG_BUMP6: + case GX_TG_BUMP7: + GX_SET_REG(reg, GX_XF_TEX_PROJ_ST, GX_XF_TEX_PROJTYPE_ST, GX_XF_TEX_PROJTYPE_END); // 2x4 projection + GX_SET_REG(reg, inputForm, GX_XF_TEX_INPUTFORM_ST, GX_XF_TEX_INPUTFORM_END); + GX_SET_REG(reg, GX_TG_NRM, GX_XF_TEX_TEXGENTYPE_ST, GX_XF_TEX_TEXGENTYPE_END); + GX_SET_REG(reg, inputRow, GX_XF_TEX_SRCROW_ST, GX_XF_TEX_SRCROW_END); + GX_SET_REG(reg, src - GX_TG_TEXCOORD0, GX_XF_TEX_BUMPSRCTEX_ST, GX_XF_TEX_BUMPSRCTEX_END); + GX_SET_REG(reg, type - GX_TG_BUMP0, GX_XF_TEX_BUMPSRCLIGHT_ST, GX_XF_TEX_BUMPSRCLIGHT_END); + break; + case GX_TG_SRTG: + GX_SET_REG(reg, GX_XF_TEX_PROJ_ST, GX_XF_TEX_PROJTYPE_ST, GX_XF_TEX_PROJTYPE_END); // 2x4 projection + GX_SET_REG(reg, inputForm, GX_XF_TEX_INPUTFORM_ST, GX_XF_TEX_INPUTFORM_END); + + if (src == GX_TG_COLOR0) { + GX_SET_REG(reg, GX_XF_TG_CLR0, GX_XF_TEX_TEXGENTYPE_ST, GX_XF_TEX_TEXGENTYPE_END); + } else { + GX_SET_REG(reg, GX_XF_TG_CLR1, GX_XF_TEX_TEXGENTYPE_ST, GX_XF_TEX_TEXGENTYPE_END); + } + GX_SET_REG(reg, 2, GX_XF_TEX_SRCROW_ST, GX_XF_TEX_SRCROW_END); + break; + default: + break; + } + + GX_XF_LOAD_REG(GX_XF_REG_TEX0 + id, reg); + + reg = 0; + GX_SET_REG(reg, dualTexMtxIdx - 0x40, GX_XF_MTXIDX0_GEOM_ST, GX_XF_MTXIDX0_GEOM_END); + GX_SET_REG(reg, normalize, GX_XF_DUALTEX_NORMALISE_ST, GX_XF_DUALTEX_NORMALISE_END); + + GX_XF_LOAD_REG(GX_XF_REG_DUALTEX0 + id, reg); + + switch (id) { + case GX_TEXCOORD0: + GX_SET_REG(__GXData->matIdxA, texMtxIdx, GX_XF_MTXIDX0_TEX0_ST, GX_XF_MTXIDX0_TEX0_END); + break; + case GX_TEXCOORD1: + GX_SET_REG(__GXData->matIdxA, texMtxIdx, GX_XF_MTXIDX0_TEX1_ST, GX_XF_MTXIDX0_TEX1_END); + break; + case GX_TEXCOORD2: + GX_SET_REG(__GXData->matIdxA, texMtxIdx, GX_XF_MTXIDX0_TEX2_ST, GX_XF_MTXIDX0_TEX2_END); + break; + case GX_TEXCOORD3: + GX_SET_REG(__GXData->matIdxA, texMtxIdx, GX_XF_MTXIDX0_TEX3_ST, GX_XF_MTXIDX0_TEX3_END); + break; + case GX_TEXCOORD4: + GX_SET_REG(__GXData->matIdxB, texMtxIdx, GX_XF_MTXIDX1_TEX4_ST, GX_XF_MTXIDX1_TEX4_END); + break; + case GX_TEXCOORD5: + GX_SET_REG(__GXData->matIdxB, texMtxIdx, GX_XF_MTXIDX1_TEX5_ST, GX_XF_MTXIDX1_TEX5_END); + break; + case GX_TEXCOORD6: + GX_SET_REG(__GXData->matIdxB, texMtxIdx, GX_XF_MTXIDX1_TEX6_ST, GX_XF_MTXIDX1_TEX6_END); + break; + default: + GX_SET_REG(__GXData->matIdxB, texMtxIdx, GX_XF_MTXIDX1_TEX7_ST, GX_XF_MTXIDX1_TEX7_END); + break; + } + __GXSetMatrixIndex(id + 1); } -#pragma pop /* 8035BDFC-8035BE38 35673C 003C+00 0/0 59/59 6/6 .text GXSetNumTexGens */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetNumTexGens(u8 numTexGens) { - nofralloc -#include "asm/dolphin/gx/GXAttr/GXSetNumTexGens.s" +void GXSetNumTexGens(u8 count) { + GX_SET_REG(__GXData->genMode, count, GX_BP_GENMODE_NUMTEX_ST, GX_BP_GENMODE_NUMTEX_END); + GX_XF_LOAD_REG(GX_XF_REG_NUMTEX, count); + __GXData->dirtyFlags |= GX_DIRTY_GEN_MODE; } -#pragma pop diff --git a/libs/dolphin/gx/GXBump.c b/libs/dolphin/gx/GXBump.c index a1d5f7cebf4..7c39490c037 100644 --- a/libs/dolphin/gx/GXBump.c +++ b/libs/dolphin/gx/GXBump.c @@ -27,7 +27,7 @@ void GXSetTevIndirect(GXTevStageID tevStage, GXIndTexStageID texStage, GXIndTexF GXFIFO.u8 = 0x61; GXFIFO.s32 = field; - __GXData->field_0x2 = 0; + __GXData->bpSentNot = 0; } /* 8035ED2C-8035EEA4 35966C 0178+00 0/0 4/4 1/1 .text GXSetIndTexMtx */ @@ -84,7 +84,7 @@ void GXSetIndTexMtx(GXIndTexMtxID mtxID, f32 offset[6], s8 scale_exp) { GXFIFO.u8 = 0x61; GXFIFO.s32 = field; - __GXData->field_0x2 = 0; + __GXData->bpSentNot = 0; } /* 8035EEA4-8035EFE8 3597E4 0144+00 0/0 5/5 0/0 .text GXSetIndTexCoordScale */ @@ -126,7 +126,7 @@ void GXSetIndTexCoordScale(GXIndTexStageID texStage, GXIndTexScale scaleS, GXInd break; } - __GXData->field_0x2 = 0; + __GXData->bpSentNot = 0; } /* 8035EFE8-8035F0D4 359928 00EC+00 0/0 3/3 0/0 .text GXSetIndTexOrder */ @@ -144,36 +144,36 @@ void GXSetIndTexOrder(GXIndTexStageID stage, GXTexCoordID coord, GXTexMapID map) switch (stage) { case GX_INDTEXSTAGE0: data = __GXData; - GX_BITFIELD_SET(data->field_0x120, 29, 3, map); - GX_BITFIELD_SET(data->field_0x120, 26, 3, coord); + GX_BITFIELD_SET(data->iref, 29, 3, map); + GX_BITFIELD_SET(data->iref, 26, 3, coord); break; case GX_INDTEXSTAGE1: data = __GXData; - GX_BITFIELD_SET(data->field_0x120, 23, 3, map); - GX_BITFIELD_SET(data->field_0x120, 20, 3, coord); + GX_BITFIELD_SET(data->iref, 23, 3, map); + GX_BITFIELD_SET(data->iref, 20, 3, coord); break; case GX_INDTEXSTAGE2: data = __GXData; - GX_BITFIELD_SET(data->field_0x120, 17, 3, map); - GX_BITFIELD_SET(data->field_0x120, 14, 3, coord); + GX_BITFIELD_SET(data->iref, 17, 3, map); + GX_BITFIELD_SET(data->iref, 14, 3, coord); break; case GX_INDTEXSTAGE3: data = __GXData; - GX_BITFIELD_SET(data->field_0x120, 11, 3, map); - GX_BITFIELD_SET(data->field_0x120, 8, 3, coord); + GX_BITFIELD_SET(data->iref, 11, 3, map); + GX_BITFIELD_SET(data->iref, 8, 3, coord); break; } GXFIFO.u8 = 0x61; - GXFIFO.s32 = __GXData->field_0x120; + GXFIFO.s32 = __GXData->iref; GXSetWasteFlags(); } /* 8035F0D4-8035F0F8 359A14 0024+00 0/0 43/43 7/7 .text GXSetNumIndStages */ void GXSetNumIndStages(u8 num) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0x204, 13, 3, num); - data->field_0x5ac |= 0x6; + GX_BITFIELD_SET(data->genMode, 13, 3, num); + data->dirtyFlags |= GX_DIRTY_BP_MASK | GX_DIRTY_GEN_MODE; } /* 8035F0F8-8035F140 359A38 0048+00 0/0 16/16 0/0 .text GXSetTevDirect */ @@ -189,15 +189,15 @@ void __GXUpdateBPMask(void) {} void __GXSetIndirectMask(u32 mask) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0x124, 24, 8, mask); + GX_BITFIELD_SET(data->bpMask, 24, 8, mask); GXFIFO.u8 = 0x61; - GXFIFO.s32 = data->field_0x124; - data->field_0x2 = 0; + GXFIFO.s32 = data->bpMask; + data->bpSentNot = 0; } /* 8035F174-8035F198 359AB4 0024+00 0/0 4/4 0/0 .text __GXFlushTextureState */ void __GXFlushTextureState(void) { GXFIFO.u8 = 0x61; - GXFIFO.s32 = __GXData->field_0x124; - __GXData->field_0x2 = 0; + GXFIFO.s32 = __GXData->bpMask; + __GXData->bpSentNot = 0; } diff --git a/libs/dolphin/gx/GXDisplayList.c b/libs/dolphin/gx/GXDisplayList.c index f797a33f6df..951fbbf78dc 100644 --- a/libs/dolphin/gx/GXDisplayList.c +++ b/libs/dolphin/gx/GXDisplayList.c @@ -8,7 +8,7 @@ /* 8035FEF0-8035FF60 35A830 0070+00 0/0 20/20 4/4 .text GXCallDisplayList */ void GXCallDisplayList(void* list, u32 nbytes) { - if (__GXData->field_0x5ac != 0) { + if (__GXData->dirtyFlags != 0) { __GXSetDirtyState(); } diff --git a/libs/dolphin/gx/GXFifo.c b/libs/dolphin/gx/GXFifo.c index 9e6a6efd4dd..0114e0baf82 100644 --- a/libs/dolphin/gx/GXFifo.c +++ b/libs/dolphin/gx/GXFifo.c @@ -6,37 +6,14 @@ #include "dolphin/gx/GXFifo.h" #include "dolphin/gx/GX.h" #include "dolphin/os/OSInterrupt.h" +#include "dolphin/os/OSAlloc.h" +#include "dolphin/os/OS.h" // // Forward References: // -static void GXCPInterruptHandler(OSInterrupt, OSContext* ctx); static void GXInitFifoLimits(GXFifoObj* fifo, u32 hi_watermark, u32 lo_watermark); -void GXSetCPUFifo(void); -void GXSetGPFifo(void); -void GXSetBreakPtCallback(void); -void __GXFifoInit(void); -void __GXFifoReadEnable(void); -void __GXFifoReadDisable(void); -void __GXFifoLink(u8); -void __GXWriteFifoIntEnable(u8, u8); -void __GXWriteFifoIntReset(u8, u8); -void __GXCleanGPFifo(void); -u32 GXGetGPFifo(void); - -// -// External References: -// - -void PPCSync(void); -void OSSetCurrentContext(OSContext*); -void OSClearContext(OSContext*); -void GXFlush(void); - -// -// Declarations: -// /* ############################################################################################## */ /* 80451948-8045194C 000E48 0004+00 4/3 0/0 0/0 .sbss CPUFifo */ @@ -49,79 +26,87 @@ static GXFifoObj* GPFifo; static OSThread* __GXCurrentThread; /* 80451954-80451958 000E54 0004+00 3/3 0/0 0/0 .sbss None */ -static u8 data_80451954[4]; +static GXBool data_80451954; /* 80451958-8045195C 000E58 0004+00 2/2 0/0 0/0 .sbss GXOverflowSuspendInProgress */ static u32 GXOverflowSuspendInProgress; /* 8045195C-80451960 000E5C 0004+00 2/2 0/0 0/0 .sbss BreakPointCB */ -static void (*BreakPointCB)(void); +static GXBreakPtCallback BreakPointCB; /* 80451960-80451968 000E60 0004+04 1/1 0/0 0/0 .sbss __GXOverflowCount */ static u32 __GXOverflowCount; -/* 8035A5A8-8035A6DC 354EE8 0134+00 1/1 0/0 0/0 .text GXCPInterruptHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void GXCPInterruptHandler(OSInterrupt, OSContext* ctx) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXCPInterruptHandler.s" +static void GXOverflowHandler() { + __GXOverflowCount += 1; + __GXWriteFifoIntEnable(0, 1); + __GXWriteFifoIntReset(1, 0); + GXOverflowSuspendInProgress = TRUE; + OSSuspendThread(__GXCurrentThread); } -#pragma pop -/* static void GXCPInterruptHandler(__OSInterrupt, OSContext* ctx) { - OSContext sp10; +static void GXUnderflowHandler() { + OSResumeThread(__GXCurrentThread); + GXOverflowSuspendInProgress = FALSE; + __GXWriteFifoIntReset(1, 1); + __GXWriteFifoIntEnable(1, 0); +} - __GXData->field_0xc = __cpReg[0]; - if (((__GXData->field_0x8 >> 3) & 1) && ((__GXData->field_0xc >> 1) & 1)) { - OSResumeThread(__GXCurrentThread); - GXOverflowSuspendInProgress = 0; - __GXWriteFifoIntReset(1, 1); - __GXWriteFifoIntEnable(1, 0); - } +static void GXBreakPointHandler(OSContext* context) { + OSContext bpContext; - if (((__GXData->field_0x8 >> 2) & 1) && (__GXData->field_0xc & 1)) { - __GXOverflowCount++; - __GXWriteFifoIntEnable(0, 1); - __GXWriteFifoIntReset(1, 0); - GXOverflowSuspendInProgress = 1; - OSSuspendThread(__GXCurrentThread); - } + FAST_FLAG_SET(__GXData->cpEnable, 0, 5, 1); + GX_SET_CP_REG(1, __GXData->cpEnable); - if (((__GXData->field_0x8 >> 5) & 1) && ((__GXData->field_0xc >> 4) & 1)) { - __GXData->field_0x8 = __GXData->field_0x8 & ~(1 << 5); - __cpReg[1] = __GXData->field_0x8; + if (BreakPointCB) { + OSClearContext(&bpContext); + OSSetCurrentContext(&bpContext); + BreakPointCB(); + OSClearContext(&bpContext); + OSSetCurrentContext(context); + } +} - if (BreakPointCB != NULL) { - OSClearContext(&sp10); - OSSetCurrentContext(&sp10); - BreakPointCB(); - OSClearContext(&sp10); - OSSetCurrentContext(ctx); - } - } -} */ +/* 8035A5A8-8035A6DC 354EE8 0134+00 1/1 0/0 0/0 .text GXCPInterruptHandler */ +static void GXCPInterruptHandler(s16 p1, OSContext* context) { + __GXData->cpStatus = GX_GET_CP_REG(0); + + if ((__GXData->cpEnable >> 3 & 1) && (__GXData->cpStatus >> 1 & 1)) { + GXUnderflowHandler(); + } + + if ((__GXData->cpEnable >> 2 & 1) && (__GXData->cpStatus >> 0 & 1)) { + GXOverflowHandler(); + } + + if ((__GXData->cpEnable >> 5 & 1) && (__GXData->cpStatus >> 4 & 1)) { + GXBreakPointHandler(context); + } +} /* 8035A6DC-8035A748 35501C 006C+00 0/0 2/2 0/0 .text GXInitFifoBase */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXInitFifoBase.s" +void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size) +{ + fifo->base = base; + fifo->end = (void*)((u32)base + size - 4); + fifo->size = size; + fifo->rw_dst = 0; + GXInitFifoLimits(fifo, size - 0x4000, OSRoundDown32B(size / 2)); + GXInitFifoPtrs(fifo, base, base); } -#pragma pop /* 8035A748-8035A7B8 355088 0070+00 1/1 1/1 0/0 .text GXInitFifoPtrs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXInitFifoPtrs(GXFifoObj* fifo, void* read_ptr, void* write_ptr) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXInitFifoPtrs.s" +void GXInitFifoPtrs(GXFifoObj* fifo, void* readPtr, void* writePtr) +{ + int interrupts = OSDisableInterrupts(); + fifo->read_ptr = readPtr; + fifo->write_ptr = writePtr; + fifo->rw_dst = (u32)writePtr - (u32)readPtr; + if (fifo->rw_dst < 0) { + fifo->rw_dst += fifo->size; + } + OSRestoreInterrupts(interrupts); } -#pragma pop /* 8035A7B8-8035A7C4 3550F8 000C+00 1/1 0/0 0/0 .text GXInitFifoLimits */ static void GXInitFifoLimits(GXFifoObj* fifo, u32 hi_watermark, u32 lo_watermark) { @@ -130,24 +115,90 @@ static void GXInitFifoLimits(GXFifoObj* fifo, u32 hi_watermark, u32 lo_watermark } /* 8035A7C4-8035A8EC 355104 0128+00 1/1 1/1 0/0 .text GXSetCPUFifo */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetCPUFifo(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXSetCPUFifo.s" +void GXSetCPUFifo(GXFifoObj* fifo) { + BOOL interrupts; + interrupts = OSDisableInterrupts(); + + CPUFifo = fifo; + + if (fifo == GPFifo) { + u32 reg; + GX_SET_PI_REG(3, (u32)fifo->base & 0x3FFFFFFF); + GX_SET_PI_REG(4, (u32)fifo->end & 0x3FFFFFFF); + reg = 0; + GX_BITFIELD_SET(reg, 6, 21, (u32)fifo->write_ptr >> 5); + GX_BITFIELD_SET(reg, 5, 1, 0); + GX_SET_PI_REG(5, reg); + + data_80451954 = GX_TRUE; + + __GXWriteFifoIntReset(1, 1); + __GXWriteFifoIntEnable(1, 0); + __GXFifoLink(1); + } else { + u32 reg; + if (data_80451954) { + __GXFifoLink(0); + data_80451954 = GX_FALSE; + } + __GXWriteFifoIntEnable(0, 0); + + GX_SET_PI_REG(3, (u32)fifo->base & 0x3FFFFFFF); + GX_SET_PI_REG(4, (u32)fifo->end & 0x3FFFFFFF); + reg = 0; + GX_BITFIELD_SET(reg, 6, 21, (u32)fifo->write_ptr >> 5); + GX_BITFIELD_SET(reg, 5, 1, 0); + GX_SET_PI_REG(5, reg); + } + + PPCSync(); + + OSRestoreInterrupts(interrupts); } -#pragma pop /* 8035A8EC-8035AA8C 35522C 01A0+00 1/1 1/1 0/0 .text GXSetGPFifo */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetGPFifo(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXSetGPFifo.s" +void GXSetGPFifo(GXFifoObj* fifo) { + int interrupts = OSDisableInterrupts(); + u32 reg; + __GXFifoReadDisable(); + __GXWriteFifoIntEnable(0, 0); + GPFifo = fifo; + GX_SET_CP_REG(16, (u16)fifo->base); + GX_SET_CP_REG(18, (u16)fifo->end); + GX_SET_CP_REG(24, (u16)fifo->rw_dst); + GX_SET_CP_REG(26, (u16)fifo->write_ptr); + GX_SET_CP_REG(28, (u16)fifo->read_ptr); + GX_SET_CP_REG(20, (u16)fifo->high_wtrmark); + GX_SET_CP_REG(22, (u16)fifo->low_wtrmark); + + GX_SET_CP_REG(17, ((u32)fifo->base & 0x3FFFFFFF) >> 16); + GX_SET_CP_REG(19, ((u32)fifo->end & 0x3FFFFFFF) >> 16); + GX_SET_CP_REG(25, (fifo->rw_dst) >> 16); + GX_SET_CP_REG(27, ((u32)fifo->write_ptr & 0x3FFFFFFF) >> 16); + GX_SET_CP_REG(29, ((u32)fifo->read_ptr & 0x3FFFFFFF) >> 16); + GX_SET_CP_REG(21, (fifo->high_wtrmark) >> 16); + GX_SET_CP_REG(23, (fifo->low_wtrmark) >> 16); + + PPCSync(); + + if (CPUFifo == GPFifo) { + data_80451954 = 1; + __GXWriteFifoIntEnable(1, 0); + __GXFifoLink(1); + } else { + data_80451954 = 0; + __GXWriteFifoIntEnable(0, 0); + __GXFifoLink(0); + } + reg = __GXData->cpEnable; + GX_BITFIELD_SET(reg, 0x1e, 1, 0); + GX_BITFIELD_SET(reg, 0x1a, 1, 0); + GX_SET_CP_REG(1, reg); + GX_SET_CP_REG(1, __GXData->cpEnable); + __GXWriteFifoIntReset(1, 1); + __GXFifoReadEnable(); + OSRestoreInterrupts(interrupts); } -#pragma pop /* 8035AA8C-8035AAC0 3553CC 0034+00 0/0 1/1 0/0 .text GXSaveCPUFifo */ void GXSaveCPUFifo(GXFifoObj* fifo) { @@ -156,24 +207,33 @@ void GXSaveCPUFifo(GXFifoObj* fifo) { } /* 8035AAC0-8035AB88 355400 00C8+00 1/1 0/0 0/0 .text __GXSaveCPUFifoAux */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXSaveCPUFifoAux(GXFifoObj* fifo) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXSaveCPUFifoAux.s" +void __GXSaveCPUFifoAux(GXFifoObj* fifo) { + int interrupts = OSDisableInterrupts(); + fifo->base = OSPhysicalToCached(GX_GET_PI_REG(3)); + fifo->end = OSPhysicalToCached(GX_GET_PI_REG(4)); + fifo->write_ptr = OSPhysicalToCached(GX_GET_PI_REG(5) & ~0x4000000); + if (data_80451954 != 0) { + u32 reg2 = GX_GET_CP_REG(28) | ( GX_GET_CP_REG(29) << 16); + fifo->read_ptr = (void*)(reg2 + -0x80000000); + fifo->rw_dst = (((u32)GX_GET_CP_REG(24) | (GX_GET_CP_REG(25) << 16))); + } else { + fifo->rw_dst = (u32)fifo->write_ptr - (u32)fifo->read_ptr; + if (fifo->rw_dst < 0) { + fifo->rw_dst += fifo->size; + } + } + OSRestoreInterrupts(interrupts); } -#pragma pop /* 8035AB88-8035ABD8 3554C8 0050+00 0/0 2/2 0/0 .text GXGetGPStatus */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXGetGPStatus(GXBool* overhi, GXBool* underlo, GXBool* read_idle, GXBool* cmd_idle, GXBool* breakpoint) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXGetGPStatus.s" +void GXGetGPStatus(GXBool* overhi, GXBool* underlow, GXBool* readIdle, GXBool* cmdIdle, GXBool* brkpt) { + __GXData->cpStatus = GX_GET_CP_REG(0); + *overhi = __GXData->cpStatus & 1; + *underlow = (__GXData->cpStatus >> 1) & 1; + *readIdle = (__GXData->cpStatus >> 2) & 1; + *cmdIdle = (__GXData->cpStatus >> 3) & 1; + *brkpt = (__GXData->cpStatus >> 4) & 1; } -#pragma pop /* 8035ABD8-8035ABE0 355518 0008+00 0/0 1/1 0/0 .text GXGetFifoBase */ void* GXGetFifoBase(GXFifoObj* fifo) { @@ -186,14 +246,13 @@ u32 GXGetFifoSize(GXFifoObj* fifo) { } /* 8035ABE8-8035AC2C 355528 0044+00 0/0 1/1 0/0 .text GXSetBreakPtCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetBreakPtCallback(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXSetBreakPtCallback.s" +GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb) { + GXBreakPtCallback oldCallback = BreakPointCB; + int interrupts = OSDisableInterrupts(); + BreakPointCB = cb; + OSRestoreInterrupts(interrupts); + return oldCallback; } -#pragma pop /* 8035AC2C-8035AC78 35556C 004C+00 0/0 1/1 0/0 .text __GXFifoInit */ void __GXFifoInit(void) { @@ -206,74 +265,105 @@ void __GXFifoInit(void) { } /* 8035AC78-8035AC9C 3555B8 0024+00 1/1 0/0 0/0 .text __GXFifoReadEnable */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXFifoReadEnable(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXFifoReadEnable.s" +void __GXFifoReadEnable(void) { + FAST_FLAG_SET(__GXData->cpEnable, 1, 0, 1); + GX_SET_CP_REG(1, __GXData->cpEnable); } -#pragma pop /* 8035AC9C-8035ACC0 3555DC 0024+00 1/1 0/0 0/0 .text __GXFifoReadDisable */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXFifoReadDisable(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXFifoReadDisable.s" +void __GXFifoReadDisable(void) { + FAST_FLAG_SET(__GXData->cpEnable, 0, 0, 1); + GX_SET_CP_REG(1, __GXData->cpEnable); } -#pragma pop /* 8035ACC0-8035ACF4 355600 0034+00 2/2 0/0 0/0 .text __GXFifoLink */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXFifoLink(u8) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXFifoLink.s" +void __GXFifoLink(u8 link) { + u32 b; + if (link) { + b = 1; + } else { + b = 0; + } + FAST_FLAG_SET(__GXData->cpEnable, b, 4, 1); + GX_SET_CP_REG(1, __GXData->cpEnable); } -#pragma pop /* 8035ACF4-8035AD24 355634 0030+00 3/3 0/0 0/0 .text __GXWriteFifoIntEnable */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXWriteFifoIntEnable(u8, u8) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXWriteFifoIntEnable.s" +void __GXWriteFifoIntEnable(u32 p1, u32 p2) { + FAST_FLAG_SET(__GXData->cpEnable, p1, 2, 1); + FAST_FLAG_SET(__GXData->cpEnable, (u8)p2, 3, 1); + GX_SET_CP_REG(1, __GXData->cpEnable); } -#pragma pop + /* 8035AD24-8035AD54 355664 0030+00 3/3 0/0 0/0 .text __GXWriteFifoIntReset */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXWriteFifoIntReset(u8, u8) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXWriteFifoIntReset.s" +void __GXWriteFifoIntReset(u32 p1, u32 p2) { + FAST_FLAG_SET(__GXData->cpClr, p1, 0, 1); + FAST_FLAG_SET(__GXData->cpClr, (u8)p2, 1, 1); + GX_SET_CP_REG(2, __GXData->cpClr); } -#pragma pop /* 8035AD54-8035AE54 355694 0100+00 0/0 1/1 0/0 .text __GXCleanGPFifo */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXCleanGPFifo(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/__GXCleanGPFifo.s" +void __GXCleanGPFifo(void) { + BOOL interrupts; + GXFifoObj tempObj; // 0x14 + u32 i, j, k; // stack alloc + GXFifoObj* gpFifo; // r31 + GXFifoObj* cpuFifo; // r30 + void* tempPtr; // r29 + + gpFifo = GXGetGPFifo(); + if (!gpFifo) { + return; + } + + cpuFifo = GXGetCPUFifo(); + tempPtr = gpFifo->base; + + tempObj = *gpFifo; + + interrupts = OSDisableInterrupts(); + + tempObj.read_ptr = tempPtr; + tempObj.write_ptr = tempPtr; + tempObj.rw_dst = 0; + if (tempObj.rw_dst < 0) { + tempObj.rw_dst += tempObj.size; + } + + OSRestoreInterrupts(interrupts); + + GXSetGPFifo(&tempObj); + + if (cpuFifo == gpFifo) { + GXSetCPUFifo(&tempObj); + } + + interrupts = OSDisableInterrupts(); + + gpFifo->read_ptr = tempPtr; + gpFifo->write_ptr = tempPtr; + gpFifo->rw_dst = 0; + + if (gpFifo->rw_dst < 0) { + gpFifo->rw_dst += gpFifo->size; + } + OSRestoreInterrupts(interrupts); + + GXSetGPFifo(gpFifo); + if (cpuFifo == gpFifo) { + GXSetCPUFifo(cpuFifo); + } } -#pragma pop /* 8035AE54-8035AEA0 355794 004C+00 0/0 1/1 0/0 .text GXSetCurrentGXThread */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm OSThread* GXSetCurrentGXThread(void) { - nofralloc -#include "asm/dolphin/gx/GXFifo/GXSetCurrentGXThread.s" +OSThread* GXSetCurrentGXThread(void) { + BOOL interrupts = OSDisableInterrupts(); + OSThread* prevThread = __GXCurrentThread; + __GXCurrentThread = OSGetCurrentThread(); + OSRestoreInterrupts(interrupts); + return prevThread; } -#pragma pop /* 8035AEA0-8035AEA8 -00001 0008+00 0/0 0/0 0/0 .text GXGetCurrentGXThread */ OSThread* GXGetCurrentGXThread(void) { @@ -286,6 +376,6 @@ GXFifoObj* GXGetCPUFifo(void) { } /* 8035AEB0-8035AEB8 -00001 0008+00 0/0 0/0 0/0 .text GXGetGPFifo */ -u32 GXGetGPFifo(void) { - return *(u32*)(&GPFifo); +GXFifoObj* GXGetGPFifo(void) { + return GPFifo; } diff --git a/libs/dolphin/gx/GXFrameBuf.c b/libs/dolphin/gx/GXFrameBuf.c index d3f960fbe04..039c272aff8 100644 --- a/libs/dolphin/gx/GXFrameBuf.c +++ b/libs/dolphin/gx/GXFrameBuf.c @@ -86,22 +86,22 @@ void GXSetTexCopyDst(u16 width, u16 height, s32 fmt, GXBool mipmap) { case 2: case 3: case 0x26: - GX_BITFIELD_SET(__GXData->field_0x1fc, 15, 2, 3); + GX_BITFIELD_SET(__GXData->cpTex, 15, 2, 3); break; default: - GX_BITFIELD_SET(__GXData->field_0x1fc, 15, 2, 2); + GX_BITFIELD_SET(__GXData->cpTex, 15, 2, 2); break; } - __GXData->field_0x200 = (fmt & 0x10) == 0x10; - __GXData->field_0x1fc = __rlwimi(__GXData->field_0x1fc, fmt2, 0, 28, 28); + __GXData->field_0x200 = 0x10 == (fmt & 0x10); + __GXData->cpTex = __rlwimi(__GXData->cpTex, fmt2, 0, 28, 28); fmt2 &= 7; __GetImageTileCount(fmt, width, height, &arg3, &arg4, &arg5); __GXData->field_0x1f8 = 0; GX_BITFIELD_SET(__GXData->field_0x1f8, 22, 10, arg3*arg5); GX_BITFIELD_SET(__GXData->field_0x1f8, 0, 8, 0x4d); - GX_BITFIELD_SET(__GXData->field_0x1fc, 22, 1, mipmap); - GX_BITFIELD_SET(__GXData->field_0x1fc, 25, 3, fmt2); + GX_BITFIELD_SET(__GXData->cpTex, 22, 1, mipmap); + GX_BITFIELD_SET(__GXData->cpTex, 25, 3, fmt2); } #else #pragma push @@ -118,7 +118,7 @@ asm void GXSetTexCopyDst(u16 width, u16 height, s32 fmt, GXBool mipmap) { void GXSetDispCopyFrame2Field(GXCopyMode arg0) { GX_BITFIELD_SET(__GXData->field_0x1ec, 18, 2, arg0); - GX_BITFIELD_SET(__GXData->field_0x1fc, 18, 2, 0); + GX_BITFIELD_SET(__GXData->cpTex, 18, 2, 0); } #define INSERT_FIELD(reg, value, nbits, shift) \ (reg) = ((u32) (reg) & ~(((1 << (nbits)) - 1) << (shift))) | \ @@ -130,8 +130,8 @@ void GXSetCopyClamp(GXFBClamp clamp) { u8 isBottom = (clamp & GX_CLAMP_BOTTOM) == GX_CLAMP_BOTTOM; __GXData->field_0x1ec = __rlwimi(__GXData->field_0x1ec, isTop, 0, 31, 31); __GXData->field_0x1ec = __rlwimi(__GXData->field_0x1ec, isBottom, 1, 30, 30); - __GXData->field_0x1fc = __rlwimi(__GXData->field_0x1fc, isTop, 0, 31, 31); - __GXData->field_0x1fc = __rlwimi(__GXData->field_0x1fc, isBottom, 1, 30, 30); + __GXData->cpTex = __rlwimi(__GXData->cpTex, isTop, 0, 31, 31); + __GXData->cpTex = __rlwimi(__GXData->cpTex, isBottom, 1, 30, 30); } /* ############################################################################################## */ @@ -142,7 +142,28 @@ SECTION_SDATA2 static f32 lit_179[1 + 1 /* padding */] = { 0.0f, }; +static u32 __GXGetNumXfbLines(u16 efb_height, u32 y_scale) { + u32 rv = ((efb_height - 1) * 0x100) / y_scale + 1; + if (y_scale > 0x80 && y_scale < 0x100) { + for (; (y_scale & 1) == 0; y_scale >>= 1) { + } + if (efb_height % y_scale == 0) { + rv++; + } + } + if (rv > 0x400) { + rv = 0x400; + } + return rv; +} + /* 8035CCDC-8035CD6C 35761C 0090+00 0/0 2/2 0/0 .text GXGetNumXfbLines */ +// regalloc +#ifdef NONMATCHING +u16 GXGetNumXfbLines(u32 efb_height, f32 y_scale) { + return __GXGetNumXfbLines(efb_height, ((u32)(256.0f / y_scale)) & 0x1ff); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -151,12 +172,37 @@ asm u16 GXGetNumXfbLines(u32 efb_height, f32 y_scale) { #include "asm/dolphin/gx/GXFrameBuf/GXGetNumXfbLines.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804565B0-804565B8 004BB0 0008+00 1/1 0/0 0/0 .sdata2 @234 */ SECTION_SDATA2 static f64 lit_234 = 4503599627370496.0 /* cast u32 to float */; /* 8035CD6C-8035CFA4 3576AC 0238+00 0/0 2/2 0/0 .text GXGetYScaleFactor */ +// Matches with literals +#ifdef NONMATCHING +f32 GXGetYScaleFactor(u16 efb_height, u16 xfb_height) { + u8 padding[0x10]; + u32 uVar6 = xfb_height; + f32 f29; + f32 ratio = (f32)xfb_height / (f32)efb_height; + u32 uVar5 = __GXGetNumXfbLines(efb_height, (u32)(256.0f / ratio) & 0x1ff); + while (uVar5 > xfb_height) { + uVar6--; + ratio = (f32)uVar6 / (f32)efb_height; + uVar5 = __GXGetNumXfbLines(efb_height, ((u32)(256.0f / ratio)) & 0x1ff); + } + f29 = ratio; + while (uVar5 < xfb_height) { + uVar6++; + f29 = ratio; + ratio = (f32)uVar6 / (f32)efb_height; + uVar5 = __GXGetNumXfbLines(efb_height, ((u32)(256.0f / ratio)) & 0x1ff); + } + + return f29; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -165,8 +211,26 @@ asm f32 GXGetYScaleFactor(u16 efb_height, u16 xfb_height) { #include "asm/dolphin/gx/GXFrameBuf/GXGetYScaleFactor.s" } #pragma pop +#endif /* 8035CFA4-8035D070 3578E4 00CC+00 0/0 2/2 0/0 .text GXSetDispCopyYScale */ +// Needs works +#ifdef NONMATCHING +u32 GXSetDispCopyYScale(f32 y_scale) { + u32 r5; + u32 r6; + u32 r7 = ((u32)(256.0f / y_scale)) & 0x1ff; + GXFIFO.u8 = 0x61; + r6 = 0; + GX_BITFIELD_SET(r6, 0x17, 9, r7); + GX_BITFIELD_SET(r6, 0, 7, 0x4e); + GXFIFO.u32 = r6; + __GXData->bpSentNot = 0; + r5 = 0x100 - r7 != 1; + GX_BITFIELD_SET(__GXData->field_0x1ec, 0x15, 1, r5); + return __GXGetNumXfbLines(__GXData->field_0x1e4, r7); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -175,6 +239,7 @@ asm u32 GXSetDispCopyYScale(f32 y_scale) { #include "asm/dolphin/gx/GXFrameBuf/GXSetDispCopyYScale.s" } #pragma pop +#endif /* 8035D070-8035D0E8 3579B0 0078+00 0/0 2/2 0/0 .text GXSetCopyClear */ void GXSetCopyClear(GXColor color, u32 clear_z) { @@ -198,10 +263,101 @@ void GXSetCopyClear(GXColor color, u32 clear_z) { GXFIFO.u8 = 0x61; GXFIFO.u32 = r6; - __GXData->field_0x2 = 0; + __GXData->bpSentNot = 0; } /* 8035D0E8-8035D2F0 357A28 0208+00 0/0 4/4 0/0 .text GXSetCopyFilter */ +// Start of antialias if. Possibly variable definition order. +#ifdef NONMATCHING +void GXSetCopyFilter(GXBool antialias, u8 pattern[12][2], GXBool vf, u8 vfilter[7]) { + u32 r8; + u32 r7; + u32 r3; + u32 r9; + u32 r11; + u32 r5; + if (antialias) { + r3 = 0; + GX_BITFIELD_SET(r3, 0x1c, 4, pattern[0][0]); + GX_BITFIELD_SET(r3, 0x18, 4, pattern[0][1]); + GX_BITFIELD_SET(r3, 0x14, 4, pattern[1][0]); + GX_BITFIELD_SET(r3, 0x10, 4, pattern[1][1]); + GX_BITFIELD_SET(r3, 0xc, 4, pattern[2][0]); + GX_BITFIELD_SET(r3, 0x8, 4, pattern[2][1]); + GX_BITFIELD_SET(r3, 0, 8, 1); + + r7 = 0; + GX_BITFIELD_SET(r7, 0x1c, 4, pattern[3][0]); + GX_BITFIELD_SET(r7, 0x18, 4, pattern[3][1]); + GX_BITFIELD_SET(r7, 0x14, 4, pattern[4][0]); + GX_BITFIELD_SET(r7, 0x10, 4, pattern[4][1]); + GX_BITFIELD_SET(r7, 0xc, 4, pattern[5][0]); + GX_BITFIELD_SET(r7, 0x8, 4, pattern[5][1]); + GX_BITFIELD_SET(r7, 0, 8, 2); + + r8 = 0; + GX_BITFIELD_SET(r8, 0x1c, 4, pattern[6][0]); + GX_BITFIELD_SET(r8, 0x18, 4, pattern[6][1]); + GX_BITFIELD_SET(r8, 0x14, 4, pattern[7][0]); + GX_BITFIELD_SET(r8, 0x10, 4, pattern[7][1]); + GX_BITFIELD_SET(r8, 0xc, 4, pattern[8][0]); + GX_BITFIELD_SET(r8, 0x8, 4, pattern[8][1]); + GX_BITFIELD_SET(r8, 0, 8, 3); + + r9 = 0; + GX_BITFIELD_SET(r9, 0x1c, 4, pattern[9][0]); + GX_BITFIELD_SET(r9, 0x18, 4, pattern[9][1]); + GX_BITFIELD_SET(r9, 0x14, 4, pattern[10][0]); + GX_BITFIELD_SET(r9, 0x10, 4, pattern[10][1]); + GX_BITFIELD_SET(r9, 0xc, 4, pattern[11][0]); + GX_BITFIELD_SET(r9, 0x8, 4, pattern[11][1]); + GX_BITFIELD_SET(r9, 0, 8, 4); + } else { + r3 = 0x01666666; + r7 = 0x02666666; + r8 = 0x03666666; + r9 = 0x04666666; + } + + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r3; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r7; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r8; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r9; + + r11 = 0; + GX_BITFIELD_SET(r11, 0, 8, 0x53); + r5 = 0; + GX_BITFIELD_SET(r5, 0, 8, 0x54); + if (vf) { + GX_BITFIELD_SET(r11, 0x1a, 6, vfilter[0]); + GX_BITFIELD_SET(r11, 0x14, 6, vfilter[1]); + GX_BITFIELD_SET(r11, 0xe, 6, vfilter[2]); + GX_BITFIELD_SET(r11, 0x8, 6, vfilter[3]); + GX_BITFIELD_SET(r5, 0x1a, 6, vfilter[4]); + GX_BITFIELD_SET(r5, 0x14, 6, vfilter[5]); + GX_BITFIELD_SET(r5, 0xe, 6, vfilter[6]); + } else { + GX_BITFIELD_SET(r11, 0x1a, 6, 0); + GX_BITFIELD_SET(r11, 0x14, 6, 0); + GX_BITFIELD_SET(r11, 0xe, 6, 0x15); + GX_BITFIELD_SET(r11, 0x8, 6, 0x16); + + GX_BITFIELD_SET(r5, 0x1a, 6, 0x15); + GX_BITFIELD_SET(r5, 0x14, 6, 0); + GX_BITFIELD_SET(r5, 0xe, 6, 0); + } + + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r11; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r5; + __GXData->bpSentNot = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -210,6 +366,7 @@ asm void GXSetCopyFilter(GXBool antialias, u8 pattern[12][2], GXBool vf, u8 vfil #include "asm/dolphin/gx/GXFrameBuf/GXSetCopyFilter.s" } #pragma pop +#endif /* 8035D2F0-8035D304 357C30 0014+00 0/0 2/2 0/0 .text GXSetDispCopyGamma */ void GXSetDispCopyGamma(GXGamma gamma) @@ -218,6 +375,74 @@ void GXSetDispCopyGamma(GXGamma gamma) } /* 8035D304-8035D46C 357C44 0168+00 0/0 3/3 0/0 .text GXCopyDisp */ +// regalloc / instruction order +#ifdef NONMATCHING +void GXCopyDisp(void* dst, GXBool clear) { + u32 r7; + u32 r8; + GXBool r10; + u32 r9; + u32 field_0x1dc; + if (clear) { + r8 = __GXData->field_0x1d8; + GX_BITFIELD_SET(r8, 0x1f, 1, 1); + GX_BITFIELD_SET(r8, 0x1c, 3, 7); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r8; + + r7 = __GXData->field_0x1d0; + GX_BITFIELD_SET(r7, 0x1f, 1, 0); + GX_BITFIELD_SET(r7, 0x1e, 1, 0); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r7; + } + + r10 = 0; + if (clear || (__GXData->field_0x1dc & 0x7) == 3) { + field_0x1dc = __GXData->field_0x1dc; + if (((field_0x1dc >> 6) & 1) == 1) { + GX_BITFIELD_SET(field_0x1dc, 0x19, 1, 0); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = field_0x1dc; + r10 = 1; + } + } + + r9 = 0; + __rlwimi(r9, (int)dst, 0x1b, 0xb, 0x1f); + GX_BITFIELD_SET(r9, 0, 8, 0x4b); + + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1e0; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1e4; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1e8; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r9; + + GX_BITFIELD_SET(__GXData->field_0x1ec, 0x14, 1, clear); + GX_BITFIELD_SET(__GXData->field_0x1ec, 0x11, 1, 1); + GX_BITFIELD_SET(__GXData->field_0x1ec, 0, 8, 0x52); + + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1ec; + + if (clear) { + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1d8; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1d0; + } + + if (r10) { + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1dc; + } + + __GXData->bpSentNot = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -226,8 +451,79 @@ asm void GXCopyDisp(void* dst, GXBool clear) { #include "asm/dolphin/gx/GXFrameBuf/GXCopyDisp.s" } #pragma pop +#endif /* 8035D46C-8035D5F8 357DAC 018C+00 0/0 9/9 0/0 .text GXCopyTex */ +// regalloc +#ifdef NONMATCHING +void GXCopyTex(void* dst, GXBool clear) { + u32 r8; + u32 r7; + u32 field_0x1dc; + u8 r0; + u32 r10; + if (clear) { + r8 = __GXData->field_0x1d8; + GX_BITFIELD_SET(r8, 0x1f, 1, 1); + GX_BITFIELD_SET(r8, 0x1c, 3, 7); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r8; + + r7 = __GXData->field_0x1d0; + GX_BITFIELD_SET(r7, 0x1f, 1, 0); + GX_BITFIELD_SET(r7, 0x1e, 1, 0); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r7; + } + + r0 = 0; + field_0x1dc = __GXData->field_0x1dc; + if (__GXData->bpSentNot && (field_0x1dc & 0x7) != 3) { + GX_BITFIELD_SET(r7, 0x1d, 3, 3); + r0 = 1; + } + + if ((clear || (field_0x1dc & 0x7) == 3) && ((field_0x1dc >> 6) & 1) == 1) { + GX_BITFIELD_SET(r7, 0x19, 1, 0); + r0 = 1; + } + + if (r0) { + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r7; + } + + r10 = 0; + __rlwimi(r10, (int)dst, 0x1b, 0xb, 0x1f); + GX_BITFIELD_SET(r10, 0, 8, 0x4b); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1f0; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1f4; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1f8; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = r10; + GX_BITFIELD_SET(__GXData->cpTex, 0x14, 1, clear); + GX_BITFIELD_SET(__GXData->cpTex, 0x11, 1, 0); + GX_BITFIELD_SET(__GXData->cpTex, 0, 8, 0x52); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->cpTex; + if (clear) { + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1d8; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1d0; + } + + if (r0) { + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->field_0x1dc; + } + + __GXData->bpSentNot = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -236,6 +532,7 @@ asm void GXCopyTex(void* dst, GXBool clear) { #include "asm/dolphin/gx/GXFrameBuf/GXCopyTex.s" } #pragma pop +#endif /* 8035D5F8-8035D630 357F38 0038+00 0/0 1/1 0/0 .text GXClearBoundingBox */ void GXClearBoundingBox(void) diff --git a/libs/dolphin/gx/GXGeometry.c b/libs/dolphin/gx/GXGeometry.c index b73fae97921..3a1587a9709 100644 --- a/libs/dolphin/gx/GXGeometry.c +++ b/libs/dolphin/gx/GXGeometry.c @@ -8,66 +8,66 @@ /* 8035C6E4-8035C764 357024 0080+00 0/0 4/4 0/0 .text __GXSetDirtyState */ void __GXSetDirtyState(void) { - u32 dirtyFlags = __GXData->field_0x5ac; + u32 dirtyFlags = __GXData->dirtyFlags; - if (dirtyFlags & 1) { + if (dirtyFlags & GX_DIRTY_SU_TEX) { __GXSetSUTexRegs(); } - if (dirtyFlags & 2) { + if (dirtyFlags & GX_DIRTY_BP_MASK) { __GXUpdateBPMask(); } - if (dirtyFlags & 4) { + if (dirtyFlags & GX_DIRTY_GEN_MODE) { __GXSetGenMode(); } - if (dirtyFlags & 8) { + if (dirtyFlags & GX_DIRTY_VCD) { __GXSetVCD(); } - if (dirtyFlags & 0x10) { + if (dirtyFlags & GX_DIRTY_VAT) { __GXSetVAT(); } - if (dirtyFlags & 0x18) { + if (dirtyFlags & GX_DIRTY_VLIM) { __GXCalculateVLim(); } - __GXData->field_0x5ac = 0; + __GXData->dirtyFlags = 0; } /* 8035C764-8035C834 3570A4 00D0+00 0/0 66/66 3/3 .text GXBegin */ void GXBegin(GXPrimitive type, GXVtxFmt fmt, u16 vert_num) { GXData* data = __GXData; - u32 dirtyFlags = data->field_0x5ac; + u32 dirtyFlags = data->dirtyFlags; - if (data->field_0x5ac != 0) { - if (dirtyFlags & 1) { + if (data->dirtyFlags != 0) { + if (dirtyFlags & GX_DIRTY_SU_TEX) { __GXSetSUTexRegs(); } - if (dirtyFlags & 2) { + if (dirtyFlags & GX_DIRTY_BP_MASK) { __GXUpdateBPMask(); } - if (dirtyFlags & 4) { + if (dirtyFlags & GX_DIRTY_GEN_MODE) { __GXSetGenMode(); } - if (dirtyFlags & 8) { + if (dirtyFlags & GX_DIRTY_VCD) { __GXSetVCD(); } - if (dirtyFlags & 0x10) { + if (dirtyFlags & GX_DIRTY_VAT) { __GXSetVAT(); } - if (dirtyFlags & 0x18) { + if (dirtyFlags & GX_DIRTY_VLIM) { __GXCalculateVLim(); } - __GXData->field_0x5ac = 0; + __GXData->dirtyFlags = 0; } if (*(u32*)__GXData == 0) { @@ -81,49 +81,49 @@ void GXBegin(GXPrimitive type, GXVtxFmt fmt, u16 vert_num) { /* 8035C834-8035C8BC 357174 0088+00 1/1 1/1 0/0 .text __GXSendFlushPrim */ void __GXSendFlushPrim(void) { u32 i; - u32 sz = __GXData->field_0x4 * __GXData->field_0x6; + u32 sz = __GXData->vNum * __GXData->vLim; GXFIFO.u8 = 0x98; - GXFIFO.u16 = __GXData->field_0x4; + GXFIFO.u16 = __GXData->vNum; for (i = 0; i < sz; i += 4) { GXFIFO.s32 = 0; } - __GXData->field_0x2 = 1; + __GXData->bpSentNot = 1; } /* 8035C8BC-8035C8FC 3571FC 0040+00 0/0 8/8 0/0 .text GXSetLineWidth */ void GXSetLineWidth(u8 width, GXTexOffset offsets) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0x7c, 24, 8, width); - GX_BITFIELD_SET(data->field_0x7c, 13, 3, offsets); + GX_BITFIELD_SET(data->lpSize, 24, 8, width); + GX_BITFIELD_SET(data->lpSize, 13, 3, offsets); GXFIFO.u8 = 0x61; - GXFIFO.u32 = data->field_0x7c; - data->field_0x2 = 0; + GXFIFO.u32 = data->lpSize; + data->bpSentNot = 0; } /* 8035C8FC-8035C93C 35723C 0040+00 0/0 5/5 0/0 .text GXSetPointSize */ void GXSetPointSize(u8 size, GXTexOffset offsets) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0x7c, 16, 8, size); - GX_BITFIELD_SET(data->field_0x7c, 10, 3, offsets); + GX_BITFIELD_SET(data->lpSize, 16, 8, size); + GX_BITFIELD_SET(data->lpSize, 10, 3, offsets); GXFIFO.u8 = 0x61; - GXFIFO.u32 = data->field_0x7c; - data->field_0x2 = 0; + GXFIFO.u32 = data->lpSize; + data->bpSentNot = 0; } /* 8035C93C-8035C984 35727C 0048+00 0/0 3/3 0/0 .text GXEnableTexOffsets */ void GXEnableTexOffsets(GXTexCoordID coord, GXBool line, GXBool point) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0xb8[coord], 13, 1, line); - GX_BITFIELD_SET(data->field_0xb8[coord], 12, 1, point); + GX_BITFIELD_SET(data->suTs0[coord], 13, 1, line); + GX_BITFIELD_SET(data->suTs0[coord], 12, 1, point); GXFIFO.u8 = 0x61; - GXFIFO.u32 = data->field_0xb8[coord]; - data->field_0x2 = 0; + GXFIFO.u32 = data->suTs0[coord]; + data->bpSentNot = 0; } /* 8035C984-8035C9AC 3572C4 0028+00 0/0 33/33 5/5 .text GXSetCullMode */ @@ -135,24 +135,24 @@ void GXSetCullMode(GXCullMode mode) { mode2 = (mode >> 1) & 1; GX_BITFIELD_SET(mode2, 30, 1, mode); - GX_BITFIELD_SET(data->field_0x204, 16, 2, mode2); - data->field_0x5ac |= 4; + GX_BITFIELD_SET(data->genMode, 16, 2, mode2); + data->dirtyFlags |= GX_DIRTY_GEN_MODE; } /* 8035C9AC-8035C9E0 3572EC 0034+00 0/0 6/6 0/0 .text GXSetCoPlanar */ void GXSetCoPlanar(GXBool enable) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0x204, 12, 1, enable); + GX_BITFIELD_SET(data->genMode, 12, 1, enable); GXFIFO.u8 = 0x61; GXFIFO.u32 = 0xFE080000; GXFIFO.u8 = 0x61; - GXFIFO.u32 = data->field_0x204; + GXFIFO.u32 = data->genMode; } /* 8035C9E0-8035CA04 357320 0024+00 2/2 0/0 0/0 .text __GXSetGenMode */ void __GXSetGenMode(void) { GXFIFO.u8 = 0x61; - GXFIFO.u32 = __GXData->field_0x204; - __GXData->field_0x2 = 0; + GXFIFO.u32 = __GXData->genMode; + __GXData->bpSentNot = 0; } diff --git a/libs/dolphin/gx/GXInit.c b/libs/dolphin/gx/GXInit.c index ddd8797ea38..4db74aaf4e6 100644 --- a/libs/dolphin/gx/GXInit.c +++ b/libs/dolphin/gx/GXInit.c @@ -5,14 +5,15 @@ #include "dolphin/gx/GXInit.h" #include "dolphin/gx/GX.h" +#include "dolphin/base/PPCArch.h" #include "dol2asm.h" #include "dolphin/os/OSTime.h" +#include "dolphin/os/OS.h" // // Forward References: // -void __GXShutdown(); void __GXInitRevisionBits(); void __GXInitGX(); @@ -21,15 +22,11 @@ void __GXInitGX(); // void PPCSync(); -void PPCMfhid2(); -void PPCMthid2(); -void PPCMtwpar(); void OSRegisterVersion(); void OSRegisterResetFunction(); void VIGetTvFormat(); void GXSetCPUFifo(); void GXSetGPFifo(); -void GXSetBreakPtCallback(); void __GXFifoInit(); void GXClearVtxDesc(); void GXSetVtxAttrFmtv(); @@ -37,7 +34,6 @@ void GXInvalidateVtxCache(); void __GXAbort(); void GXPokeAlphaRead(); void GXPokeBlendMode(); -void GXSetDrawSyncCallback(); void __GXPEInit(); void GXSetDispCopyFrame2Field(); void GXClearBoundingBox(); @@ -70,47 +66,60 @@ static GXData gxData; GXData* const __GXData = &gxData; /* 8035921C-80359318 353B5C 00FC+00 1/1 0/0 0/0 .text __GXDefaultTexRegionCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXTexRegion* __GXDefaultTexRegionCallback(GXTexObj* obj, GXTexMapID mapID) { - nofralloc -#include "asm/dolphin/gx/GXInit/__GXDefaultTexRegionCallback.s" +GXTexRegion* __GXDefaultTexRegionCallback(GXTexObj* obj, GXTexMapID id) { + GXTexFmt format; // r31 + GXBool isMipMap; // r3 + + format = GXGetTexObjFmt(obj); + isMipMap = GXGetTexObjMipMap(obj); + id = (GXTexMapID)(id % GX_MAX_TEXMAP); + + switch (format) { + case GX_TF_RGBA8: + if (isMipMap) { + return &__GXData->TexRegions2[id]; + } + return &__GXData->TexRegions1[id]; + + case GX_TF_C4: + case GX_TF_C8: + case GX_TF_C14X2: + return &__GXData->TexRegions0[id]; + + default: + if (isMipMap) { + return &__GXData->TexRegions1[id]; + } + return &__GXData->TexRegions0[id]; + } } -#pragma pop /* 80359318-8035933C 353C58 0024+00 1/1 0/0 0/0 .text __GXDefaultTlutRegionCallback */ -#pragma push -#pragma peephole off GXTlutRegion* __GXDefaultTlutRegionCallback(u32 tlut) { if (tlut >= 0x14) { return NULL; } else { - return &__GXData->field_0x388[tlut]; + return &__GXData->TlutRegions[tlut]; } } -#pragma pop /* 80451944-80451948 000E44 0004+00 1/1 0/0 0/0 .sbss resetFuncRegistered$145 */ -/* static */ u8 resetFuncRegistered[4]; +/* static */ u32 resetFuncRegistered; /* 80451940-80451944 000E40 0004+00 1/1 0/0 0/0 .sbss calledOnce$37 */ -/* static */ u8 calledOnce[4]; - -/* 8045193C-80451940 000E3C 0004+00 1/1 0/0 0/0 .sbss None */ -/* static */ u8 data_8045193C[4]; +/* static */ u32 calledOnce; /* 80451938-8045193C 000E38 0004+00 1/1 0/0 0/0 .sbss time$36 */ -/* static */ u8 time[4]; +/* static */ OSTime time; /* 80451930-80451938 000E30 0004+04 1/1 0/0 0/0 .sbss peCount$35 */ -/* static */ u8 peCount[4 + 4 /* padding */]; +/* static */ u32 peCount; /* 8045192C-80451930 000E2C 0004+00 2/2 2/2 0/0 .sbss __memReg */ -u8 __memReg[4]; +vu16* __memReg; /* 80451928-8045192C 000E28 0004+00 1/1 11/11 0/0 .sbss __peReg */ -u8 __peReg[4]; +u16* __peReg; /* 80451924-80451928 000E24 0004+00 2/2 12/12 0/0 .sbss __cpReg */ u16* __cpReg; @@ -120,24 +129,102 @@ u16* __cpReg; u32* __piReg; /* 8035933C-803594CC 353C7C 0190+00 1/0 0/0 0/0 .text __GXShutdown */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXShutdown(s32) { - nofralloc -#include "asm/dolphin/gx/GXInit/__GXShutdown.s" +BOOL __GXShutdown(BOOL final) { + u32 val; + u32 newPeCount; + OSTime newTime; + + if (!final) { + if (!calledOnce) { + peCount = GXReadMEMReg(0x28, 0x27); + time = OSGetTime(); + calledOnce = 1; + return FALSE; + } + + newTime = OSGetTime(); + newPeCount = GXReadMEMReg(0x28, 0x27); + + if (newTime - time < 10) { + return FALSE; + } + + if (newPeCount != peCount) { + peCount = newPeCount; + time = newTime; + return FALSE; + } + + } else { + GXSetBreakPtCallback(NULL); + GXSetDrawSyncCallback(NULL); + GXSetDrawDoneCallback(NULL); + + GX_WRITE_U32(0); + GX_WRITE_U32(0); + GX_WRITE_U32(0); + GX_WRITE_U32(0); + GX_WRITE_U32(0); + GX_WRITE_U32(0); + GX_WRITE_U32(0); + GX_WRITE_U32(0); + + PPCSync(); + + GX_SET_CP_REG(1, 0); + GX_SET_CP_REG(2, 3); + + __GXData->abtWaitPECopy = GX_TRUE; + + __GXAbort(); + } + + return TRUE; } -#pragma pop /* 803594CC-80359670 353E0C 01A4+00 1/1 1/1 0/0 .text __GXInitRevisionBits */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXInitRevisionBits(void) { - nofralloc -#include "asm/dolphin/gx/GXInit/__GXInitRevisionBits.s" +void __GXInitRevisionBits(void) { + u32 i; + for (i = 0; i < 8; i++) { + FAST_FLAG_SET(__GXData->vatA[i], 1, 30, 33); + FAST_FLAG_SET(__GXData->vatB[i], 1, 31, 33); + + GX_WRITE_U8(0x8); + GX_WRITE_U8(i | 0x80); + GX_WRITE_U32(__GXData->vatB[i]); + } + + { + u32 reg1 = 0; + u32 reg2 = 0; + + FAST_FLAG_SET(reg1, 1, 0, 1); + FAST_FLAG_SET(reg1, 1, 1, 1); + FAST_FLAG_SET(reg1, 1, 2, 1); + FAST_FLAG_SET(reg1, 1, 3, 1); + FAST_FLAG_SET(reg1, 1, 4, 1); + FAST_FLAG_SET(reg1, 1, 5, 1); + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1000); + GX_WRITE_U32(reg1); + + FAST_FLAG_SET(reg2, 1, 0, 1); + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1012); + GX_WRITE_U32(reg2); + } + + { + u32 reg = 0; + FAST_FLAG_SET(reg, 1, 0, 1); + FAST_FLAG_SET(reg, 1, 1, 1); + FAST_FLAG_SET(reg, 1, 2, 1); + FAST_FLAG_SET(reg, 1, 3, 1); + FAST_FLAG_SET(reg, 0x58, 24, 8); + GX_WRITE_U8(0x61); + GX_WRITE_U32(reg); + } } -#pragma pop /* ############################################################################################## */ /* 803D2040-803D20A0 02F160 0044+1C 2/1 0/0 0/0 .data @1 */ @@ -182,19 +269,11 @@ SECTION_DATA static u8 GXDefaultProjData[28] = { #pragma pop /* 803D21AC-803D226C 02F2CC 00C0+00 1/1 0/0 0/0 .data GXTexRegionAddrTable */ -SECTION_DATA static u8 GXTexRegionAddrTable[192] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0x04, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x80, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, +static u32 GXTexRegionAddrTable[] = { + 0x00000, 0x10000, 0x20000, 0x30000, 0x40000, 0x50000, 0x60000, 0x70000, 0x08000, 0x18000, 0x28000, 0x38000, + 0x48000, 0x58000, 0x68000, 0x78000, 0x00000, 0x90000, 0x20000, 0xB0000, 0x40000, 0x98000, 0x60000, 0xB8000, + 0x80000, 0x10000, 0xA0000, 0x30000, 0x88000, 0x50000, 0xA8000, 0x70000, 0x00000, 0x90000, 0x20000, 0xB0000, + 0x40000, 0x90000, 0x60000, 0xB0000, 0x80000, 0x10000, 0xA0000, 0x30000, 0x80000, 0x50000, 0xA0000, 0x70000, }; /* 803D226C-803D2280 -00001 0010+04 1/1 0/0 0/0 .data GXResetFuncInfo */ @@ -222,6 +301,166 @@ SECTION_SDATA2 static u8 lit_268[4] = { }; /* 80359670-80359C70 353FB0 0600+00 0/0 2/2 0/0 .text GXInit */ +// Matches with literals +#ifdef NONMATCHING +static void EnableWriteGatherPipe() { + u32 hid2; // r31 + hid2 = PPCMfhid2(); + PPCMtwpar(OSUncachedToPhysical((void*)GXFIFO_ADDR)); + hid2 |= 0x40000000; + PPCMthid2(hid2); +} + +GXFifoObj* GXInit(void* base, u32 size) +{ + u32 i; + u32 pad2; // for stack matching + + OSRegisterVersion(__GXVersion); + __GXData->inDispList = GX_FALSE; + __GXData->dlSaveContext = GX_TRUE; + __GXData->abtWaitPECopy = GX_TRUE; + + __GXData->tcsManEnab = 0; + __GXData->tevTcEnab = 0; + + GXSetMisc(GX_MT_XF_FLUSH, 0); + + __piReg = (void*)OSPhysicalToUncached(GX_PI_ADDR); + __cpReg = (void*)OSPhysicalToUncached(GX_CP_ADDR); + __peReg = (void*)OSPhysicalToUncached(GX_PE_ADDR); + __memReg = (void*)OSPhysicalToUncached(GX_MEM_ADDR); + + __GXFifoInit(); + + GXInitFifoBase(&FifoObj, base, size); + GXSetCPUFifo(&FifoObj); + GXSetGPFifo(&FifoObj); + + if (!resetFuncRegistered) { + OSRegisterResetFunction(&GXResetFuncInfo); + resetFuncRegistered = 1; + } + + __GXPEInit(); + EnableWriteGatherPipe(); + + __GXData->genMode = 0; + FAST_FLAG_SET(__GXData->genMode, 0, 24, 8); + + __GXData->bpMask = 255; + FAST_FLAG_SET(__GXData->bpMask, 0xF, 24, 8); + + __GXData->lpSize = 0; + FAST_FLAG_SET(__GXData->lpSize, 34, 24, 8); + + for (i = 0; i < GX_MAX_TEVSTAGE; i++) { + __GXData->tevc[i] = 0; + __GXData->teva[i] = 0; + __GXData->tref[i / 2] = 0; + __GXData->texmapId[i] = GX_TEXMAP_NULL; + + FAST_FLAG_SET(__GXData->tevc[i], 0xC0 + i * 2, 24, 8); + FAST_FLAG_SET(__GXData->teva[i], 0xC1 + i * 2, 24, 8); + FAST_FLAG_SET(__GXData->tevKsel[i / 2], 0xF6 + i / 2, 24, 8); + FAST_FLAG_SET(__GXData->tref[i / 2], 0x28 + i / 2, 24, 8); + } + + __GXData->iref = 0; + FAST_FLAG_SET(__GXData->iref, 0x27, 24, 8); + + for (i = 0; i < GX_MAXCOORD; i++) { + __GXData->suTs0[i] = 0; + __GXData->suTs1[i] = 0; + + FAST_FLAG_SET(__GXData->suTs0[i], 0x30 + i * 2, 24, 8); + FAST_FLAG_SET(__GXData->suTs1[i], 0x31 + i * 2, 24, 8); + } + + FAST_FLAG_SET(__GXData->suScis0, 0x20, 24, 8); + FAST_FLAG_SET(__GXData->suScis1, 0x21, 24, 8); + + FAST_FLAG_SET(__GXData->cmode0, 0x41, 24, 8); + FAST_FLAG_SET(__GXData->cmode1, 0x42, 24, 8); + + FAST_FLAG_SET(__GXData->zmode, 0x40, 24, 8); + FAST_FLAG_SET(__GXData->peCtrl, 0x43, 24, 8); + + FAST_FLAG_SET(__GXData->cpTex, 0, 7, 2); + + __GXData->zScale = 1.6777216E7f; + __GXData->zOffset = 0.0f; + + __GXData->dirtyFlags = 0; + __GXData->dirtyVAT = 0; + + { + u32 val1; + u32 val2; + + val2 = OS_BUS_CLOCK / 500; + + __GXFlushTextureState(); + + val1 = (val2 / 2048) | 0x69000400; + + GX_WRITE_U8(0x61); + GX_WRITE_U32(val1); + + __GXFlushTextureState(); + + val1 = (val2 / 4224) | 0x46000200; + GX_WRITE_U8(0x61); + GX_WRITE_U32(val1); + } + + __GXInitRevisionBits(); + + for (i = 0; i < GX_MAX_TEXMAP; i++) { + GXInitTexCacheRegion(&__GXData->TexRegions0[i], GX_FALSE, GXTexRegionAddrTable[i], GX_TEXCACHE_32K, GXTexRegionAddrTable[i + 8], + GX_TEXCACHE_32K); + GXInitTexCacheRegion(&__GXData->TexRegions1[i], GX_FALSE, GXTexRegionAddrTable[i + 16], GX_TEXCACHE_32K, GXTexRegionAddrTable[i + 24], + GX_TEXCACHE_32K); + GXInitTexCacheRegion(&__GXData->TexRegions2[i], GX_TRUE, GXTexRegionAddrTable[i + 32], GX_TEXCACHE_32K, GXTexRegionAddrTable[i + 40], + GX_TEXCACHE_32K); + } + + for (i = 0; i < GX_MAX_TLUT; i++) { + GXInitTlutRegion(&__GXData->TlutRegions[i], 0xC0000 + 0x2000 * i, GX_TLUT_256); + } + + for (i = 0; i < GX_MAX_BIGTLUT; i++) { + GXInitTlutRegion(&__GXData->TlutRegions[i + 16], 0xE0000 + 0x8000 * i, GX_TLUT_1K); + } + + GX_SET_CP_REG(3, 0); + + FAST_FLAG_SET(__GXData->perfSel, 0, 4, 4); + + GX_WRITE_U8(0x8); + GX_WRITE_U8(0x20); + GX_WRITE_U32(__GXData->perfSel); + + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x23000000); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x24000000); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000000); + + __GXSetIndirectMask(0); + __GXSetTmemConfig(2); + __GXInitGX(); + + return &FifoObj; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -230,6 +469,7 @@ asm GXFifoObj* GXInit(void* base, u32 size) { #include "asm/dolphin/gx/GXInit/GXInit.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8045658C-80456590 004B8C 0004+00 1/1 0/0 0/0 .sdata2 @269 */ diff --git a/libs/dolphin/gx/GXLight.c b/libs/dolphin/gx/GXLight.c index 60d857b207a..c100a57dbc5 100644 --- a/libs/dolphin/gx/GXLight.c +++ b/libs/dolphin/gx/GXLight.c @@ -177,6 +177,52 @@ asm void GXLoadLightObjImm(register GXLightObj* obj, register GXLightID id) { } /* 8035D960-8035DA48 3582A0 00E8+00 0/0 7/7 4/4 .text GXSetChanAmbColor */ +// b's instead of blr's +#ifdef NONMATCHING +void GXSetChanAmbColor(GXChannelID chan, GXColor color) { + u32 ambColor; + u32 colorId; + + switch(chan) { + case GX_COLOR0: + ambColor = *(u32*)&__GXData->ambColors[0]; + ambColor = __rlwimi(ambColor, *(u32*)&color, 0, 0, 23); + colorId = 0; + break; + case GX_COLOR1: + ambColor = *(u32*)&__GXData->ambColors[1]; + ambColor = __rlwimi(ambColor, *(u32*)&color, 0, 0, 23); + colorId = 1; + break; + case GX_ALPHA0: + ambColor = *(u32*)&__GXData->ambColors[0]; + ambColor = __rlwimi(ambColor, color.a, 0, 24, 31); + colorId = 0; + break; + case GX_ALPHA1: + ambColor = *(u32*)&__GXData->ambColors[1]; + ambColor = __rlwimi(ambColor, color.a, 0, 24, 31); + colorId = 1; + break; + case GX_COLOR0A0: + ambColor = *(u32*)&color; + colorId = 0; + break; + case GX_COLOR1A1: + ambColor = *(u32*)&color; + colorId = 1; + break; + default: + return; + } + + GXFIFO.u8 = 0x10; + GXFIFO.u32 = colorId + 0x100a; + GXFIFO.u32 = ambColor; + __GXData->bpSentNot = 1; + ((u32*)__GXData->ambColors)[colorId] = ambColor; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -185,8 +231,55 @@ asm void GXSetChanAmbColor(GXChannelID channel, GXColor color) { #include "asm/dolphin/gx/GXLight/GXSetChanAmbColor.s" } #pragma pop +#endif /* 8035DA48-8035DB30 358388 00E8+00 0/0 20/20 2/2 .text GXSetChanMatColor */ +// b's instead of blr's +#ifdef NONMATCHING +void GXSetChanMatColor(GXChannelID chan, GXColor color) { + u32 matColor; + u32 colorId; + + switch(chan) { + case GX_COLOR0: + matColor = *(u32*)&__GXData->matColors[0]; + matColor = __rlwimi(matColor, *(u32*)&color, 0, 0, 23); + colorId = 0; + break; + case GX_COLOR1: + matColor = *(u32*)&__GXData->matColors[1]; + matColor = __rlwimi(matColor, *(u32*)&color, 0, 0, 23); + colorId = 1; + break; + case GX_ALPHA0: + matColor = *(u32*)&__GXData->matColors[0]; + matColor = __rlwimi(matColor, color.a, 0, 24, 31); + colorId = 0; + break; + case GX_ALPHA1: + matColor = *(u32*)&__GXData->matColors[1]; + matColor = __rlwimi(matColor, color.a, 0, 24, 31); + colorId = 1; + break; + case GX_COLOR0A0: + matColor = *(u32*)&color; + colorId = 0; + break; + case GX_COLOR1A1: + matColor = *(u32*)&color; + colorId = 1; + break; + default: + return; + } + + GXFIFO.u8 = 0x10; + GXFIFO.u32 = colorId + 0x100c; + GXFIFO.u32 = matColor; + __GXData->bpSentNot = 1; + ((u32*)__GXData->matColors)[colorId] = matColor; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -195,19 +288,20 @@ asm void GXSetChanMatColor(GXChannelID channel, GXColor color) { #include "asm/dolphin/gx/GXLight/GXSetChanMatColor.s" } #pragma pop +#endif /* 8035DB30-8035DB6C 358470 003C+00 0/0 51/51 6/6 .text GXSetNumChans */ // 1 wrong reg #ifdef NONMATCHING void GXSetNumChans(u8 chan_num) { GXData* data = __GXData; - GX_BITFIELD_SET(data->field_0x204, 25, 3, chan_num); + GX_BITFIELD_SET(data->bpSentNot04, 25, 3, chan_num); GXFIFO.u8 = 0x10; GXFIFO.s32 = 0x1009; GXFIFO.s32 = chan_num; - data->field_0x5ac |= 0x4; + data->dirtyFlags |= GX_DIRTY_GEN_MODE; } #else #pragma push @@ -221,6 +315,39 @@ asm void GXSetNumChans(u8 chan_num) { #endif /* 8035DB6C-8035DC1C 3584AC 00B0+00 0/0 34/34 4/4 .text GXSetChanCtrl */ +// mr/addi, extra branch instruction +#ifdef NONMATCHING +void GXSetChanCtrl(GXChannelID channel, GXBool enable, GXColorSrc amb_src, GXColorSrc mat_src, + u32 light_mask, GXDiffuseFn diff_fn, GXAttnFn attn_fn) { + u32 field = 0; + const u32 idx = channel & 3; + + GX_BITFIELD_SET(field, 30, 1, enable); + GX_BITFIELD_SET(field, 31, 1, amb_src); + GX_BITFIELD_SET(field, 25, 1, mat_src); + GX_BITFIELD_SET(field, 23, 2, (attn_fn == GX_AF_SPEC) ? GX_DF_NONE : diff_fn); + GX_BITFIELD_SET(field, 22, 1, attn_fn != GX_AF_NONE); + GX_BITFIELD_SET(field, 21, 1, attn_fn != GX_AF_SPEC); + GX_BITFIELD_SET(field, 26, 4, (u32)light_mask); + field = __rlwimi(field, (u32)light_mask, 7, 0x11, 0x14); + + GXFIFO.u8 = 0x10; + GXFIFO.u32 = idx + 0x100e; + GXFIFO.u32 = field; + + if (channel == GX_COLOR0A0) { + GXFIFO.u8 = 0x10; + GXFIFO.u32 = 0x1010; + GXFIFO.u32 = field; + } else if (channel == GX_COLOR1A1) { + GXFIFO.u8 = 0x10; + GXFIFO.u32 = 0x1011; + GXFIFO.u32 = field; + } + + __GXData->bpSentNot = 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -230,3 +357,4 @@ asm void GXSetChanCtrl(GXChannelID channel, GXBool enable, GXColorSrc amb_src, G #include "asm/dolphin/gx/GXLight/GXSetChanCtrl.s" } #pragma pop +#endif diff --git a/libs/dolphin/gx/GXMisc.c b/libs/dolphin/gx/GXMisc.c index b43c5d1e77b..b9cf63de960 100644 --- a/libs/dolphin/gx/GXMisc.c +++ b/libs/dolphin/gx/GXMisc.c @@ -4,6 +4,12 @@ // #include "dolphin/gx/GXMisc.h" +#include "dolphin/gx/GX.h" +#include "dolphin/os/OSContext.h" +#include "dolphin/os/OSInterrupt.h" +#include "dolphin/os/OSReset.h" +#include "dolphin/os/OSTime.h" +#include "dolphin/gx/GXInit.h" #include "dolphin/types.h" // @@ -19,10 +25,8 @@ void GXDrawDone(); void GXPixModeSync(); void GXPokeAlphaRead(); void GXPokeBlendMode(); -void GXSetDrawSyncCallback(); -static void GXTokenInterruptHandler(); -void GXSetDrawDoneCallback(); -static void GXFinishInterruptHandler(); +static void GXTokenInterruptHandler(OSInterrupt interrupt, OSContext* context); +static void GXFinishInterruptHandler(OSInterrupt interrupt, OSContext* pContext); void __GXPEInit(); // @@ -30,49 +34,101 @@ void __GXPEInit(); // void PPCSync(); -void OSSetCurrentContext(); -void OSClearContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSUnmaskInterrupts(); void OSInitThreadQueue(); void OSSleepThread(); void OSWakeupThread(); -void OSGetTime(); void __GXInitRevisionBits(); void __GXCleanGPFifo(); -void GXGetGPFifo(); void __GXSetDirtyState(); -extern u8 __peReg[4]; -extern u8 __memReg[4]; -extern void* __GXData; // // Declarations: // /* 8035BE38-8035BECC 356778 0094+00 0/0 9/9 0/0 .text GXSetMisc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetMisc(u32 id, u32 value) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXSetMisc.s" +void GXSetMisc(u32 id, u32 value) { + switch (id) { + case 0: + break; + case 1: + __GXData->vNum = value; + // fake match. Should be something like __GXData->vNum == 0, but it adds a neg instruction + __GXData->field_0x0 = (__cntlzw(__GXData->vNum) >> 5) & 0xffff; + __GXData->bpSentNot = 1; + if (__GXData->vNum == 0) { + break; + } + __GXData->dirtyFlags |= GX_DIRTY_VCD; + break; + case 2: + __GXData->dlSaveContext = value != 0; + break; + case 3: + __GXData->abtWaitPECopy = value != 0; + break; + } } -#pragma pop /* 8035BECC-8035BF28 35680C 005C+00 1/1 10/10 0/0 .text GXFlush */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXFlush(void) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXFlush.s" +void GXFlush(void) { + if (__GXData->dirtyFlags) { + __GXSetDirtyState(); + } + + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + GXFIFO.u32 = 0; + + PPCSync(); } -#pragma pop /* 8035BF28-8035C094 356868 016C+00 0/0 1/1 0/0 .text __GXAbort */ +// Instruction order +#ifdef NONMATCHING +static void __GXAbortWait(u32 time) { + OSTime startTime = OSGetTime(); + while (OSGetTime() - startTime <= time); +} + +static u32 __GXReadMEMCounterU32(u32 param_0, u32 param_1) { + vu16* ptr0 = &__memReg[param_0]; + vu16* ptr1 = &__memReg[param_1]; + u32 sVar3 = __memReg[param_1]; + u32 sVar2; + u32 temp; + do { + temp = sVar3; + sVar3 = *ptr1; + sVar2 = *ptr0; + } while (sVar3 != temp); + return ((u32)sVar3 << 16) | sVar2; +} + +static void __GXAbortWaitPECopyDone() { + u32 iVar3; + u32 iVar2 = __GXReadMEMCounterU32(0x28, 0x27); + do { + __GXAbortWait(8); + iVar3 = iVar2; + iVar2 = __GXReadMEMCounterU32(0x28, 0x27); + } while (iVar2 != iVar3); +} + +void __GXAbort(void) { + if (__GXData->abtWaitPECopy && GXGetGPFifo()){ + __GXAbortWaitPECopyDone(); + } + __PIRegs[6] = 1; + __GXAbortWait(50); + __PIRegs[6] = 0; + __GXAbortWait(5); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -81,8 +137,21 @@ asm void __GXAbort(void) { #include "asm/dolphin/gx/GXMisc/__GXAbort.s" } #pragma pop +#endif /* 8035C094-8035C25C 3569D4 01C8+00 0/0 2/2 0/0 .text GXAbortFrame */ +// Needs __GXAbort and __GXReadMEMCounterU32 is not inlined +#ifdef NONMATCHING +void GXAbortFrame(void) { + __GXAbort(); + if (GXGetGPFifo()) { + __GXCleanGPFifo(); + __GXInitRevisionBits(); + __GXData->dirtyFlags = 0; + GXFlush(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -91,82 +160,94 @@ asm void GXAbortFrame(void) { #include "asm/dolphin/gx/GXMisc/GXAbortFrame.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80451968-8045196C 000E68 0004+00 2/2 0/0 0/0 .sbss TokenCB */ -static u8 TokenCB[4]; +static GXDrawSyncCallback TokenCB; /* 8045196C-80451970 000E6C 0004+00 2/2 0/0 0/0 .sbss DrawDoneCB */ -static u8 DrawDoneCB[4]; +static GXDrawDoneCallback DrawDoneCB; /* 80451970-80451974 000E70 0004+00 3/3 0/0 0/0 .sbss None */ static u8 data_80451970[4]; /* 8035C25C-8035C2F4 356B9C 0098+00 0/0 2/2 0/0 .text GXSetDrawDone */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetDrawDone(void) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXSetDrawDone.s" +void GXSetDrawDone(void) { + u8 padding[8]; + BOOL restore = OSDisableInterrupts(); + GFWriteBPCmd(0x45000002); + GXFlush(); + data_80451970[0] = 0; + OSRestoreInterrupts(restore); } -#pragma pop /* ############################################################################################## */ /* 80451974-8045197C 000E74 0008+00 3/3 0/0 0/0 .sbss FinishQueue */ -static u8 FinishQueue[8]; +static OSThreadQueue FinishQueue; + +static void GXWaitDrawDone(void) { + BOOL restore = OSDisableInterrupts(); + while (data_80451970[0] == 0) { + OSSleepThread(&FinishQueue); + } + OSRestoreInterrupts(restore); +} /* 8035C2F4-8035C374 356C34 0080+00 0/0 3/3 1/1 .text GXDrawDone */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXDrawDone(void) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXDrawDone.s" +void GXDrawDone(void) { + u8 padding[8]; + GXSetDrawDone(); + GXWaitDrawDone(); } -#pragma pop /* 8035C374-8035C398 356CB4 0024+00 0/0 9/9 0/0 .text GXPixModeSync */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPixModeSync(void) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPixModeSync.s" +void GXPixModeSync(void) { + GXFIFO.u8 = 0x61; + GXFIFO.u32 = __GXData->peCtrl; + __GXData->bpSentNot = 0; } -#pragma pop /* 8035C398-8035C3AC 356CD8 0014+00 0/0 1/1 0/0 .text GXPokeAlphaMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeAlphaMode(GXCompare comp, u8 threshold) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeAlphaMode.s" +void GXPokeAlphaMode(GXCompare comp, u8 threshold) { + __peReg[3] = (comp << 8) | threshold; } -#pragma pop /* 8035C3AC-8035C3CC 356CEC 0020+00 0/0 1/1 0/0 .text GXPokeAlphaRead */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeAlphaRead(GXAlphaReadMode mode) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeAlphaRead.s" +void GXPokeAlphaRead(GXAlphaReadMode mode) { + u32 val = 0; + GX_BITFIELD_SET(val, 0x1e, 2, mode); + GX_BITFIELD_SET(val, 0x1d, 1, 1); + __peReg[4] = val; } -#pragma pop /* 8035C3CC-8035C3E4 356D0C 0018+00 0/0 1/1 0/0 .text GXPokeAlphaUpdate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeAlphaUpdate(GXBool enable_update) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeAlphaUpdate.s" +void GXPokeAlphaUpdate(GXBool enable_update) { + GX_BITFIELD_SET(__peReg[1], 0x1b, 1, enable_update); } -#pragma pop /* 8035C3E4-8035C448 356D24 0064+00 0/0 1/1 0/0 .text GXPokeBlendMode */ +// regalloc +#ifdef NONMATCHING +void GXPokeBlendMode(GXBlendMode mode, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp op) { + u32 r8; + u32 r9 = TRUE; + u16 r10; + r10 = __peReg[1]; + if (mode != GX_BM_BLEND && mode != GX_BM_SUBTRACT) { + r9 = FALSE; + } + r8 = r10; + GX_BITFIELD_SET(r8, 0x1f, 1, r9); + GX_BITFIELD_SET(r8, 0x14, 1, mode == GX_BM_SUBTRACT); + GX_BITFIELD_SET(r8, 0x1e, 1, mode == GX_BM_LOGIC); + GX_BITFIELD_SET(r8, 0x10, 4, op); + GX_BITFIELD_SET(r8, 0x15, 3, src_factor); + GX_BITFIELD_SET(r8, 0x18, 3, dst_factor); + GX_BITFIELD_SET(r8, 0, 8, 0x41); + __peReg[1] = r8; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -175,106 +256,132 @@ asm void GXPokeBlendMode(GXBlendMode mode, GXBlendFactor src_factor, GXBlendFact #include "asm/dolphin/gx/GXMisc/GXPokeBlendMode.s" } #pragma pop +#endif /* 8035C448-8035C460 356D88 0018+00 0/0 1/1 0/0 .text GXPokeColorUpdate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeColorUpdate(GXBool enable_update) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeColorUpdate.s" +void GXPokeColorUpdate(GXBool enable_update) { + GX_BITFIELD_SET(__peReg[1], 0x1c, 1, enable_update); } -#pragma pop /* 8035C460-8035C484 356DA0 0024+00 0/0 1/1 0/0 .text GXPokeDstAlpha */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeDstAlpha(GXBool enable, u8 alpha) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeDstAlpha.s" +void GXPokeDstAlpha(GXBool enable, u8 alpha) { + u32 val = 0; + GX_BITFIELD_SET(val, 0x18, 8, alpha); + GX_BITFIELD_SET(val, 0x17, 1, enable); + __peReg[2] = val; } -#pragma pop /* 8035C484-8035C49C 356DC4 0018+00 0/0 1/1 0/0 .text GXPokeDither */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeDither(GXBool enable) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeDither.s" +void GXPokeDither(GXBool enable) { + GX_BITFIELD_SET(__peReg[1], 0x1d, 1, enable); } -#pragma pop /* 8035C49C-8035C4BC 356DDC 0020+00 0/0 1/1 0/0 .text GXPokeZMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPokeZMode(GXBool enable_compare, GXCompare comp) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPokeZMode.s" +void GXPokeZMode(GXBool enable_compare, GXCompare comp, GXBool update_enable) { + u32 val = 0; + GX_BITFIELD_SET(val, 0x1f, 1, enable_compare); + GX_BITFIELD_SET(val, 0x1c, 3, comp); + GX_BITFIELD_SET(val, 0x1b, 1, update_enable); + __peReg[0] = val; } -#pragma pop /* 8035C4BC-8035C4E0 356DFC 0024+00 0/0 1/1 0/0 .text GXPeekZ */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXPeekZ(u16 x, u16 y, u32* z) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXPeekZ.s" +void GXPeekZ(u16 x, u16 y, u32* z) { + u32 addr = 0xc8000000; + GX_BITFIELD_SET(addr, 0x14, 10, x); + GX_BITFIELD_SET(addr, 0xa, 10, y); + GX_BITFIELD_SET(addr, 8, 2, 1); + *z = *(u32*)addr; } -#pragma pop /* 8035C4E0-8035C524 356E20 0044+00 0/0 1/1 0/0 .text GXSetDrawSyncCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetDrawSyncCallback(GXDrawSyncCallback callback) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXSetDrawSyncCallback.s" +GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback callback) { + BOOL restore; + GXDrawSyncCallback prevCb = TokenCB; + restore = OSDisableInterrupts(); + TokenCB = callback; + OSRestoreInterrupts(restore); + return prevCb; } -#pragma pop /* 8035C524-8035C5AC 356E64 0088+00 1/1 0/0 0/0 .text GXTokenInterruptHandler */ +// regalloc +#ifdef NONMATCHING +static void GXTokenInterruptHandler(OSInterrupt interrupt, OSContext* pContext) { + OSContext context; + u16 token = __peReg[7]; + if (TokenCB != NULL) { + OSClearContext(&context); + OSSetCurrentContext(&context); + TokenCB(token); + OSClearContext(&context); + OSSetCurrentContext(pContext); + } + GX_BITFIELD_SET(__peReg[5], 0x1d, 1, 1); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void GXTokenInterruptHandler() { +static asm void GXTokenInterruptHandler(OSInterrupt interrupt, OSContext* context) { nofralloc #include "asm/dolphin/gx/GXMisc/GXTokenInterruptHandler.s" } #pragma pop +#endif /* 8035C5AC-8035C5F0 356EEC 0044+00 0/0 4/4 0/0 .text GXSetDrawDoneCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetDrawDoneCallback(GXDrawDoneCallback callback) { - nofralloc -#include "asm/dolphin/gx/GXMisc/GXSetDrawDoneCallback.s" +GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback callback) { + BOOL restore; + GXDrawDoneCallback prevCb = DrawDoneCB; + restore = OSDisableInterrupts(); + DrawDoneCB = callback; + OSRestoreInterrupts(restore); + return prevCb; } -#pragma pop /* 8035C5F0-8035C670 356F30 0080+00 1/1 0/0 0/0 .text GXFinishInterruptHandler */ +// regalloc, instruction order +#ifdef NONMATCHING +static void GXFinishInterruptHandler(OSInterrupt interrupt, OSContext* pContext) { + OSContext context; + GX_BITFIELD_SET(__peReg[5], 0x1c, 1, 1); + data_80451970[0] = param_0; + if (DrawDoneCB != NULL) { + OSClearContext(&context); + OSSetCurrentContext(&context); + DrawDoneCB(); + OSClearContext(&context); + OSSetCurrentContext(pContext); + } + OSWakeupThread(&FinishQueue); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void GXFinishInterruptHandler() { +static asm void GXFinishInterruptHandler(OSInterrupt interrupt, OSContext* pContext) { nofralloc #include "asm/dolphin/gx/GXMisc/GXFinishInterruptHandler.s" } #pragma pop +#endif /* 8035C670-8035C6E4 356FB0 0074+00 0/0 1/1 0/0 .text __GXPEInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXPEInit(void) { - nofralloc -#include "asm/dolphin/gx/GXMisc/__GXPEInit.s" +void __GXPEInit(void) { + u32 val; + __OSSetInterruptHandler(OS_INTR_PI_PE_TOKEN, GXTokenInterruptHandler); + __OSSetInterruptHandler(OS_INTR_PI_PE_FINISH, GXFinishInterruptHandler); + OSInitThreadQueue(&FinishQueue); + __OSUnmaskInterrupts(OS_INTERRUPTMASK_PI_PE_TOKEN); + __OSUnmaskInterrupts(OS_INTERRUPTMASK_PI_PE_FINISH); + val = __peReg[5]; + GX_BITFIELD_SET(val, 0x1d, 1, 1); + GX_BITFIELD_SET(val, 0x1c, 1, 1); + GX_BITFIELD_SET(val, 0x1f, 1, 1); + GX_BITFIELD_SET(val, 0x1e, 1, 1); + __peReg[5] = val; } -#pragma pop /* ############################################################################################## */ /* 8045197C-80451980 -00001 0004+00 0/0 0/0 0/0 .sbss None */ diff --git a/libs/dolphin/gx/GXPerf.c b/libs/dolphin/gx/GXPerf.c index 509bc66ae9b..e6f3cd6c0dc 100644 --- a/libs/dolphin/gx/GXPerf.c +++ b/libs/dolphin/gx/GXPerf.c @@ -4,112 +4,390 @@ // #include "dolphin/gx/GXPerf.h" -#include "dol2asm.h" - -// -// Forward References: -// - -void GXSetGPMetric(); -void GXClearGPMetric(); -void GXReadXfRasMetric(); - -// -// External References: -// - -extern u8 __cpReg[4]; -extern void* __GXData; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 803D2858-803D28B4 -00001 005C+00 1/1 0/0 0/0 .data @182 */ -SECTION_DATA static void* lit_182[23] = { - (void*)(((char*)GXSetGPMetric) + 0x568), (void*)(((char*)GXSetGPMetric) + 0x584), - (void*)(((char*)GXSetGPMetric) + 0x5A0), (void*)(((char*)GXSetGPMetric) + 0x5BC), - (void*)(((char*)GXSetGPMetric) + 0x610), (void*)(((char*)GXSetGPMetric) + 0x62C), - (void*)(((char*)GXSetGPMetric) + 0x648), (void*)(((char*)GXSetGPMetric) + 0x664), - (void*)(((char*)GXSetGPMetric) + 0x5D8), (void*)(((char*)GXSetGPMetric) + 0x680), - (void*)(((char*)GXSetGPMetric) + 0x6B0), (void*)(((char*)GXSetGPMetric) + 0x6E0), - (void*)(((char*)GXSetGPMetric) + 0x710), (void*)(((char*)GXSetGPMetric) + 0x740), - (void*)(((char*)GXSetGPMetric) + 0x770), (void*)(((char*)GXSetGPMetric) + 0x7A0), - (void*)(((char*)GXSetGPMetric) + 0x7D0), (void*)(((char*)GXSetGPMetric) + 0x7FC), - (void*)(((char*)GXSetGPMetric) + 0x80C), (void*)(((char*)GXSetGPMetric) + 0x81C), - (void*)(((char*)GXSetGPMetric) + 0x82C), (void*)(((char*)GXSetGPMetric) + 0x5F4), - (void*)(((char*)GXSetGPMetric) + 0x838), -}; - -/* 803D28B4-803D2948 -00001 0090+04 1/1 0/0 0/0 .data @181 */ -SECTION_DATA static void* lit_181[36 + 1 /* padding */] = { - (void*)(((char*)GXSetGPMetric) + 0x13C), - (void*)(((char*)GXSetGPMetric) + 0x15C), - (void*)(((char*)GXSetGPMetric) + 0x17C), - (void*)(((char*)GXSetGPMetric) + 0x19C), - (void*)(((char*)GXSetGPMetric) + 0x1BC), - (void*)(((char*)GXSetGPMetric) + 0x1DC), - (void*)(((char*)GXSetGPMetric) + 0x1FC), - (void*)(((char*)GXSetGPMetric) + 0x21C), - (void*)(((char*)GXSetGPMetric) + 0x23C), - (void*)(((char*)GXSetGPMetric) + 0x25C), - (void*)(((char*)GXSetGPMetric) + 0x29C), - (void*)(((char*)GXSetGPMetric) + 0x2BC), - (void*)(((char*)GXSetGPMetric) + 0x2D8), - (void*)(((char*)GXSetGPMetric) + 0x2F4), - (void*)(((char*)GXSetGPMetric) + 0x310), - (void*)(((char*)GXSetGPMetric) + 0x32C), - (void*)(((char*)GXSetGPMetric) + 0x348), - (void*)(((char*)GXSetGPMetric) + 0x364), - (void*)(((char*)GXSetGPMetric) + 0x380), - (void*)(((char*)GXSetGPMetric) + 0x39C), - (void*)(((char*)GXSetGPMetric) + 0x3B8), - (void*)(((char*)GXSetGPMetric) + 0x3D4), - (void*)(((char*)GXSetGPMetric) + 0x3F0), - (void*)(((char*)GXSetGPMetric) + 0x40C), - (void*)(((char*)GXSetGPMetric) + 0x428), - (void*)(((char*)GXSetGPMetric) + 0x444), - (void*)(((char*)GXSetGPMetric) + 0x460), - (void*)(((char*)GXSetGPMetric) + 0x47C), - (void*)(((char*)GXSetGPMetric) + 0x498), - (void*)(((char*)GXSetGPMetric) + 0x4B4), - (void*)(((char*)GXSetGPMetric) + 0x4D0), - (void*)(((char*)GXSetGPMetric) + 0x4EC), - (void*)(((char*)GXSetGPMetric) + 0x508), - (void*)(((char*)GXSetGPMetric) + 0x524), - (void*)(((char*)GXSetGPMetric) + 0x27C), - (void*)(((char*)GXSetGPMetric) + 0x53C), - /* padding */ - NULL, -}; +#include "dolphin/gx/GX.h" /* 8036067C-80360EC4 35AFBC 0848+00 2/0 1/1 0/0 .text GXSetGPMetric */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetGPMetric(u32 perf0, u32 perf1) { - nofralloc -#include "asm/dolphin/gx/GXPerf/GXSetGPMetric.s" +void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) { + switch (__GXData->perf0) { + case GX_PERF0_VERTICES: + case GX_PERF0_CLIP_VTX: + case GX_PERF0_CLIP_CLKS: + case GX_PERF0_XF_WAIT_IN: + case GX_PERF0_XF_WAIT_OUT: + case GX_PERF0_XF_XFRM_CLKS: + case GX_PERF0_XF_LIT_CLKS: + case GX_PERF0_XF_BOT_CLKS: + case GX_PERF0_XF_REGLD_CLKS: + case GX_PERF0_XF_REGRD_CLKS: + case GX_PERF0_CLIP_RATIO: + case GX_PERF0_CLOCKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0); + break; + + case GX_PERF0_TRIANGLES: + case GX_PERF0_TRIANGLES_CULLED: + case GX_PERF0_TRIANGLES_PASSED: + case GX_PERF0_TRIANGLES_SCISSORED: + case GX_PERF0_TRIANGLES_0TEX: + case GX_PERF0_TRIANGLES_1TEX: + case GX_PERF0_TRIANGLES_2TEX: + case GX_PERF0_TRIANGLES_3TEX: + case GX_PERF0_TRIANGLES_4TEX: + case GX_PERF0_TRIANGLES_5TEX: + case GX_PERF0_TRIANGLES_6TEX: + case GX_PERF0_TRIANGLES_7TEX: + case GX_PERF0_TRIANGLES_8TEX: + case GX_PERF0_TRIANGLES_0CLR: + case GX_PERF0_TRIANGLES_1CLR: + case GX_PERF0_TRIANGLES_2CLR: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x23000000); + break; + + case GX_PERF0_QUAD_0CVG: + case GX_PERF0_QUAD_NON0CVG: + case GX_PERF0_QUAD_1CVG: + case GX_PERF0_QUAD_2CVG: + case GX_PERF0_QUAD_3CVG: + case GX_PERF0_QUAD_4CVG: + case GX_PERF0_AVG_QUAD_CNT: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x24000000); + break; + + case GX_PERF0_NONE: + break; + } + + switch (__GXData->perf1) { + case GX_PERF1_TEXELS: + case GX_PERF1_TX_IDLE: + case GX_PERF1_TX_REGS: + case GX_PERF1_TX_MEMSTALL: + case GX_PERF1_TC_CHECK1_2: + case GX_PERF1_TC_CHECK3_4: + case GX_PERF1_TC_CHECK5_6: + case GX_PERF1_TC_CHECK7_8: + case GX_PERF1_TC_MISS: + case GX_PERF1_CLOCKS: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000000); + break; + + case GX_PERF1_VC_ELEMQ_FULL: + case GX_PERF1_VC_MISSQ_FULL: + case GX_PERF1_VC_MEMREQ_FULL: + case GX_PERF1_VC_STATUS7: + case GX_PERF1_VC_MISSREP_FULL: + case GX_PERF1_VC_STREAMBUF_LOW: + case GX_PERF1_VC_ALL_STALLS: + case GX_PERF1_VERTICES: + FAST_FLAG_SET(__GXData->perfSel, 0, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + + case GX_PERF1_FIFO_REQ: + case GX_PERF1_CALL_REQ: + case GX_PERF1_VC_MISS_REQ: + case GX_PERF1_CP_ALL_REQ: + GX_SET_CP_REG(3, 0); + break; + + case GX_PERF1_NONE: + break; + } + + __GXData->perf0 = perf0; + + switch (__GXData->perf0) { + case GX_PERF0_VERTICES: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x273); + break; + case GX_PERF0_CLIP_VTX: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x14A); + break; + case GX_PERF0_CLIP_CLKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x16B); + break; + case GX_PERF0_XF_WAIT_IN: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x84); + break; + case GX_PERF0_XF_WAIT_OUT: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0xC6); + break; + case GX_PERF0_XF_XFRM_CLKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x210); + break; + case GX_PERF0_XF_LIT_CLKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x252); + break; + case GX_PERF0_XF_BOT_CLKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x231); + break; + case GX_PERF0_XF_REGLD_CLKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x1AD); + break; + case GX_PERF0_XF_REGRD_CLKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x1CE); + break; + case GX_PERF0_CLOCKS: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x21); + break; + case GX_PERF0_CLIP_RATIO: + GX_WRITE_U8(0x10); + GX_WRITE_U32(0x1006); + GX_WRITE_U32(0x153); + break; + + case GX_PERF0_TRIANGLES: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AE7F); + break; + case GX_PERF0_TRIANGLES_CULLED: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x23008E7F); + break; + case GX_PERF0_TRIANGLES_PASSED: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x23009E7F); + break; + case GX_PERF0_TRIANGLES_SCISSORED: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x23001E7F); + break; + case GX_PERF0_TRIANGLES_0TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AC3F); + break; + case GX_PERF0_TRIANGLES_1TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AC7F); + break; + case GX_PERF0_TRIANGLES_2TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300ACBF); + break; + case GX_PERF0_TRIANGLES_3TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300ACFF); + break; + case GX_PERF0_TRIANGLES_4TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AD3F); + break; + case GX_PERF0_TRIANGLES_5TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AD7F); + break; + case GX_PERF0_TRIANGLES_6TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300ADBF); + break; + case GX_PERF0_TRIANGLES_7TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300ADFF); + break; + case GX_PERF0_TRIANGLES_8TEX: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AE3F); + break; + case GX_PERF0_TRIANGLES_0CLR: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300A27F); + break; + case GX_PERF0_TRIANGLES_1CLR: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300A67F); + break; + case GX_PERF0_TRIANGLES_2CLR: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2300AA7F); + break; + + case GX_PERF0_QUAD_0CVG: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C0C6); + break; + case GX_PERF0_QUAD_NON0CVG: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C16B); + break; + case GX_PERF0_QUAD_1CVG: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C0E7); + break; + case GX_PERF0_QUAD_2CVG: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C108); + break; + case GX_PERF0_QUAD_3CVG: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C129); + break; + case GX_PERF0_QUAD_4CVG: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C14A); + break; + case GX_PERF0_AVG_QUAD_CNT: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x2402C1AD); + break; + + case GX_PERF0_NONE: + break; + } + + __GXData->perf1 = perf1; + + switch (__GXData->perf1) { + case GX_PERF1_TEXELS: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000042); + break; + case GX_PERF1_TX_IDLE: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000084); + break; + case GX_PERF1_TX_REGS: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000063); + break; + case GX_PERF1_TX_MEMSTALL: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000129); + break; + case GX_PERF1_TC_MISS: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000252); + break; + case GX_PERF1_CLOCKS: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000021); + break; + case GX_PERF1_TC_CHECK1_2: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x6700014B); + break; + case GX_PERF1_TC_CHECK3_4: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x6700018D); + break; + case GX_PERF1_TC_CHECK5_6: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x670001CF); + break; + case GX_PERF1_TC_CHECK7_8: + GX_WRITE_U8(0x61); + GX_WRITE_U32(0x67000211); + break; + + case GX_PERF1_VC_ELEMQ_FULL: + FAST_FLAG_SET(__GXData->perfSel, 2, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VC_MISSQ_FULL: + FAST_FLAG_SET(__GXData->perfSel, 3, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VC_MEMREQ_FULL: + FAST_FLAG_SET(__GXData->perfSel, 4, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VC_STATUS7: + FAST_FLAG_SET(__GXData->perfSel, 5, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VC_MISSREP_FULL: + FAST_FLAG_SET(__GXData->perfSel, 6, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VC_STREAMBUF_LOW: + FAST_FLAG_SET(__GXData->perfSel, 7, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VC_ALL_STALLS: + FAST_FLAG_SET(__GXData->perfSel, 9, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + case GX_PERF1_VERTICES: + FAST_FLAG_SET(__GXData->perfSel, 8, 4, 4); + GX_WRITE_U8(8); + GX_WRITE_U8(32); + GX_WRITE_U32(__GXData->perfSel); + break; + + case GX_PERF1_FIFO_REQ: + GX_SET_CP_REG(3, 2); + break; + case GX_PERF1_CALL_REQ: + GX_SET_CP_REG(3, 3); + break; + case GX_PERF1_VC_MISS_REQ: + GX_SET_CP_REG(3, 4); + break; + case GX_PERF1_CP_ALL_REQ: + GX_SET_CP_REG(3, 5); + break; + + case GX_PERF1_NONE: + break; + } + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 80360EC4-80360ED4 35B804 0010+00 0/0 1/1 0/0 .text GXClearGPMetric */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXClearGPMetric(void) { - nofralloc -#include "asm/dolphin/gx/GXPerf/GXClearGPMetric.s" +void GXClearGPMetric(void) { + GX_SET_CP_REG(2, 4); } -#pragma pop /* 80360ED4-80360F98 35B814 00C4+00 0/0 1/1 0/0 .text GXReadXfRasMetric */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXReadXfRasMetric(u32* param_0, u32* param_1, u32* param_2, u32* param_3) { - nofralloc -#include "asm/dolphin/gx/GXPerf/GXReadXfRasMetric.s" +#pragma scheduling off +void GXReadXfRasMetric(u32* xfWaitIn, u32* xfWaitOut, u32* rasBusy, u32* clocks) +{ + *rasBusy = GXReadCPReg(32, 33); + *clocks = GXReadCPReg(34, 35); + *xfWaitIn = GXReadCPReg(36, 37); + *xfWaitOut = GXReadCPReg(38, 39); } -#pragma pop +#pragma scheduling reset diff --git a/libs/dolphin/gx/GXPixel.c b/libs/dolphin/gx/GXPixel.c index b5e004bf62c..1d4ccf07d4f 100644 --- a/libs/dolphin/gx/GXPixel.c +++ b/libs/dolphin/gx/GXPixel.c @@ -4,6 +4,7 @@ // #include "dolphin/gx/GXPixel.h" +#include "dolphin/gx/GX.h" #include "dol2asm.h" // @@ -19,7 +20,6 @@ void GXSetPixelFmt(); void __GXFlushTextureState(); void __cvt_fp2unsigned(); -extern void* __GXData; // // Declarations: @@ -68,6 +68,94 @@ SECTION_SDATA2 static f32 lit_217[1 + 1 /* padding */] = { SECTION_SDATA2 static f64 lit_219 = 4503601774854144.0 /* cast s32 to float */; /* 8035F8B8-8035FACC 35A1F8 0214+00 0/0 20/20 2/2 .text GXSetFog */ +#ifdef NONMATCHING +void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color) { + f32 a, c; + u32 a_bits, c_bits; + + u32 fogColorReg = 0; + u32 fogParamReg0 = 0; + u32 fogParamReg1 = 0; + u32 fogParamReg2 = 0; + u32 fogParamReg3 = 0; + + u32 fsel = type & 7; + BOOL isOrtho = (type >> 3) & 1; + + if (isOrtho) { + if (farz == nearz || endz == startz) { + a = 0.0f; + c = 0.0f; + } else { + a = (1.0f / (endz - startz)) * (farz - nearz); + c = (1.0f / (endz - startz)) * (startz - nearz); + } + } else { + f32 tmpA, tmpB, tmpC; + u32 expB, magB, shiftB; + + if (farz == nearz || endz == startz) { + tmpA = 0.0f; + tmpB = 0.5f; + tmpC = 0.0f; + } else { + tmpA = (farz * nearz) / ((farz - nearz) * (endz - startz)); + tmpB = farz / (farz - nearz); + tmpC = startz / (endz - startz); + } + + expB = 0; + while (tmpB > 1.0) { + tmpB /= 2.0f; + expB++; + } + while (tmpB > 0.0f && tmpB < 0.5) { + tmpB *= 2.0f; + expB--; + } + + a = tmpA / (1 << expB + 1); + magB = 8388638.0f * tmpB; + shiftB = expB + 1; + c = tmpC; + + GX_SET_REG(fogParamReg1, magB, GX_BP_FOGPARAM1_B_MAG_ST, GX_BP_FOGPARAM1_B_MAG_END); + GX_SET_REG(fogParamReg2, shiftB, GX_BP_FOGPARAM2_B_SHIFT_ST, GX_BP_FOGPARAM2_B_SHIFT_END); + + GX_SET_REG(fogParamReg1, GX_BP_REG_FOGPARAM1, 0, 7); + GX_SET_REG(fogParamReg2, GX_BP_REG_FOGPARAM2, 0, 7); + } + + a_bits = *(u32*)&a; + + GX_SET_REG(fogParamReg0, a_bits >> 12, GX_BP_FOGPARAM0_A_MANT_ST, GX_BP_FOGPARAM0_A_MANT_END); + GX_SET_REG(fogParamReg0, a_bits >> 23, GX_BP_FOGPARAM0_A_EXP_ST, GX_BP_FOGPARAM0_A_EXP_END); + GX_SET_REG(fogParamReg0, a_bits >> 31, GX_BP_FOGPARAM0_A_SIGN_ST, GX_BP_FOGPARAM0_A_SIGN_END); + GX_SET_REG(fogParamReg0, GX_BP_REG_FOGPARAM0, 0, 7); + + c_bits = *(u32*)&c; + GX_SET_REG(fogParamReg3, c_bits >> 12, GX_BP_FOGPARAM3_C_MANT_ST, GX_BP_FOGPARAM3_C_MANT_END); + GX_SET_REG(fogParamReg3, c_bits >> 23, GX_BP_FOGPARAM3_C_EXP_ST, GX_BP_FOGPARAM3_C_EXP_END); + GX_SET_REG(fogParamReg3, c_bits >> 31, GX_BP_FOGPARAM3_C_SIGN_ST, GX_BP_FOGPARAM3_C_SIGN_END); + + GX_SET_REG(fogParamReg3, isOrtho, GX_BP_FOGPARAM3_PROJ_ST, GX_BP_FOGPARAM3_PROJ_END); + GX_SET_REG(fogParamReg3, fsel, GX_BP_FOGPARAM3_FSEL_ST, GX_BP_FOGPARAM3_FSEL_END); + + GX_SET_REG(fogParamReg3, GX_BP_REG_FOGPARAM3, 0, 7); + + GX_SET_REG(fogColorReg, *(u32*)&color, (GX_BP_FOGCOLOR_RGB_ST), (GX_BP_FOGCOLOR_RGB_END)); + GX_SET_REG(fogColorReg, GX_BP_REG_FOGCOLOR, 0, 7); + + GX_BP_LOAD_REG(fogParamReg0); + + GX_BP_LOAD_REG(fogParamReg1); + GX_BP_LOAD_REG(fogParamReg2); + GX_BP_LOAD_REG(fogParamReg3); + GX_BP_LOAD_REG(fogColorReg); + + __GXData->bpSentNot = GX_FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -76,67 +164,117 @@ asm void GXSetFog(GXFogType type, f32 startZ, f32 endZ, f32 nearZ, f32 farZ, GXC #include "asm/dolphin/gx/GXPixel/GXSetFog.s" } #pragma pop +#endif /* 8035FACC-8035FBF0 35A40C 0124+00 0/0 9/9 2/2 .text GXSetFogRangeAdj */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetFogRangeAdj(GXBool enable, u16 center, GXFogAdjTable* table) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetFogRangeAdj.s" +void GXSetFogRangeAdj(GXBool enable, u16 center, GXFogAdjTable* table) +{ + u32 fogRangeReg; + u32 fogRangeRegK; + u32 i; + + if (enable) { + for (i = 0; i < 10; i += 2) { + fogRangeRegK = 0; + GX_SET_REG(fogRangeRegK, table->fogVals[i], GX_BP_FOGRANGEK_HI_ST, GX_BP_FOGRANGEK_HI_END); + GX_SET_REG(fogRangeRegK, table->fogVals[i + 1], GX_BP_FOGRANGEK_LO_ST, GX_BP_FOGRANGEK_LO_END); + GX_SET_REG(fogRangeRegK, GX_BP_REG_FOGRANGEK0 + (i / 2), 0, 7); + GX_BP_LOAD_REG(fogRangeRegK); + } + } + + fogRangeReg = 0; + GX_SET_REG(fogRangeReg, center + 342, GX_BP_FOGRANGE_CENTER_ST, GX_BP_FOGRANGE_CENTER_END); + GX_SET_REG(fogRangeReg, enable, GX_BP_FOGRANGE_ENABLED_ST, GX_BP_FOGRANGE_ENABLED_END); + GX_SET_REG(fogRangeReg, GX_BP_REG_FOGRANGE, 0, 7); + GX_BP_LOAD_REG(fogRangeReg); + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FBF0-8035FC44 35A530 0054+00 0/0 53/53 3/3 .text GXSetBlendMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetBlendMode(GXBlendMode mode, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp op) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetBlendMode.s" +void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp op) { + u32 blendModeReg = __GXData->cmode0; + GX_SET_REG(blendModeReg, type == GX_BM_SUBTRACT, GX_BP_BLENDMODE_SUBTRACT_ST, GX_BP_BLENDMODE_SUBTRACT_END); + GX_SET_REG(blendModeReg, type, GX_BP_BLENDMODE_ENABLE_ST, GX_BP_BLENDMODE_ENABLE_END); + GX_SET_REG(blendModeReg, type == GX_BM_LOGIC, GX_BP_BLENDMODE_LOGIC_OP_ST, GX_BP_BLENDMODE_LOGIC_OP_END); + GX_SET_REG(blendModeReg, op, GX_BP_BLENDMODE_LOGICMODE_ST, GX_BP_BLENDMODE_LOGICMODE_END); + GX_SET_REG(blendModeReg, src_factor, GX_BP_BLENDMODE_SRCFACTOR_ST, GX_BP_BLENDMODE_SRCFACTOR_END); + GX_SET_REG(blendModeReg, dst_factor, GX_BP_BLENDMODE_DSTFACTOR_ST, GX_BP_BLENDMODE_DSTFACTOR_END); + + GX_BP_LOAD_REG(blendModeReg); + __GXData->cmode0 = blendModeReg; + + __GXData->bpSentNot = FALSE; } -#pragma pop /* 8035FC44-8035FC70 35A584 002C+00 0/0 10/10 2/2 .text GXSetColorUpdate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetColorUpdate(GXBool enable_update) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetColorUpdate.s" +void GXSetColorUpdate(GXBool updateEnable) { + u32 blendModeReg = __GXData->cmode0; + GX_SET_REG(blendModeReg, updateEnable, GX_BP_BLENDMODE_COLOR_UPDATE_ST, GX_BP_BLENDMODE_COLOR_UPDATE_END); + GX_BP_LOAD_REG(blendModeReg); + __GXData->cmode0 = blendModeReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FC70-8035FC9C 35A5B0 002C+00 0/0 10/10 2/2 .text GXSetAlphaUpdate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetAlphaUpdate(GXBool enable_update) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetAlphaUpdate.s" +void GXSetAlphaUpdate(GXBool updateEnable) { + u32 blendModeReg = __GXData->cmode0; + GX_SET_REG(blendModeReg, updateEnable, GX_BP_BLENDMODE_ALPHA_UPDATE_ST, GX_BP_BLENDMODE_ALPHA_UPDATE_END); + GX_BP_LOAD_REG(blendModeReg); + __GXData->cmode0 = blendModeReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FC9C-8035FCD0 35A5DC 0034+00 0/0 40/40 6/6 .text GXSetZMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetZMode(GXBool enable_compare, GXCompare comp, GXBool enable_update) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetZMode.s" +void GXSetZMode(GXBool compareEnable, GXCompare func, GXBool updateEnable) { + u32 zModeReg = __GXData->zmode; + GX_SET_REG(zModeReg, compareEnable, GX_BP_ZMODE_TEST_ENABLE_ST, GX_BP_ZMODE_TEST_ENABLE_END); + GX_SET_REG(zModeReg, func, GX_BP_ZMODE_COMPARE_ST, GX_BP_ZMODE_COMPARE_END); + GX_SET_REG(zModeReg, updateEnable, GX_BP_ZMODE_UPDATE_ENABLE_ST, GX_BP_ZMODE_UPDATE_ENABLE_END); + GX_BP_LOAD_REG(zModeReg); + __GXData->zmode = zModeReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FCD0-8035FD04 35A610 0034+00 0/0 29/29 5/5 .text GXSetZCompLoc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetZCompLoc(GXBool z_buf_before_tex) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetZCompLoc.s" +void GXSetZCompLoc(GXBool beforeTex) { + GX_SET_REG(__GXData->peCtrl, beforeTex, GX_BP_ZCONTROL_BEFORE_TEX_ST, GX_BP_ZCONTROL_BEFORE_TEX_END); + GX_BP_LOAD_REG(__GXData->peCtrl); + __GXData->bpSentNot = GX_FALSE; } -#pragma pop + + +/* 8035FD04-8035FDD8 35A644 00D4+00 0/0 2/2 1/1 .text GXSetPixelFmt */ +// regalloc +#ifdef NONMATCHING +void GXSetPixelFmt(GXPixelFmt pixelFmt, GXZFmt16 zFmt) { + static u32 p2f[GX_PF_MAX] + = { GX_PF_RGB8_Z24, GX_PF_RGBA6_Z24, GX_PF_RGB565_Z16, GX_PF_Z24, GX_PF_Y8, GX_PF_Y8, GX_PF_Y8, GX_PF_U8 }; + + const u32 zControlRegOld = __GXData->peCtrl; + + GX_SET_REG(__GXData->peCtrl, p2f[pixelFmt], GX_BP_ZCONTROL_PIXEL_FMT_ST, GX_BP_ZCONTROL_PIXEL_FMT_END); + GX_SET_REG(__GXData->peCtrl, zFmt, GX_BP_ZCONTROL_Z_FMT_ST, GX_BP_ZCONTROL_Z_FMT_END); + + if (zControlRegOld != __GXData->peCtrl) { + u32 isZ16; + GX_BP_LOAD_REG(__GXData->peCtrl); + isZ16 = (pixelFmt == GX_PF_RGB565_Z16) ? GX_TRUE : GX_FALSE; + GX_SET_REG(__GXData->genMode, isZ16, GX_BP_GENMODE_MULTISAMPLE_ST, GX_BP_GENMODE_MULTISAMPLE_END); + __GXData->dirtyFlags |= GX_DIRTY_GEN_MODE; + } + + if (p2f[pixelFmt] == GX_PF_Y8) { + GX_SET_REG(__GXData->cmode1, pixelFmt - GX_PF_Y8, GX_BP_DSTALPHA_YUV_FMT_ST, GX_BP_DSTALPHA_YUV_FMT_END); + GX_SET_REG(__GXData->cmode1, GX_BP_REG_DSTALPHA, 0, 7); + GX_BP_LOAD_REG(__GXData->cmode1); + } + + __GXData->bpSentNot = FALSE; +} +#else /* ############################################################################################## */ /* 803D2838-803D2858 02F958 0020+00 1/1 0/0 0/0 .data p2f$358 */ SECTION_DATA static u8 p2f[32] = { @@ -144,7 +282,6 @@ SECTION_DATA static u8 p2f[32] = { 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, }; -/* 8035FD04-8035FDD8 35A644 00D4+00 0/0 2/2 1/1 .text GXSetPixelFmt */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -153,43 +290,44 @@ asm void GXSetPixelFmt(GXPixelFmt pixel_fmt, GXZFmt16 z_fmt) { #include "asm/dolphin/gx/GXPixel/GXSetPixelFmt.s" } #pragma pop +#endif /* 8035FDD8-8035FE04 35A718 002C+00 0/0 22/22 1/1 .text GXSetDither */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetDither(GXBool enable_dither) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetDither.s" +void GXSetDither(GXBool dither) { + u32 blendModeReg = __GXData->cmode0; + GX_SET_REG(blendModeReg, dither, GX_BP_BLENDMODE_DITHER_ST, GX_BP_BLENDMODE_DITHER_END); + GX_BP_LOAD_REG(blendModeReg); + __GXData->cmode0 = blendModeReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FE04-8035FE40 35A744 003C+00 0/0 2/2 0/0 .text GXSetDstAlpha */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetDstAlpha(GXBool enable, u8 alpha) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetDstAlpha.s" +void GXSetDstAlpha(GXBool enable, u8 alpha) { + u32 dstAlpha = __GXData->cmode1; + GX_SET_REG(dstAlpha, alpha, GX_BP_DSTALPHA_ALPHA_ST, GX_BP_DSTALPHA_ALPHA_END); + GX_SET_REG(dstAlpha, enable, GX_BP_DSTALPHA_ENABLE_ST, GX_BP_DSTALPHA_ENABLE_END); + GX_BP_LOAD_REG(dstAlpha); + __GXData->cmode1 = dstAlpha; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FE40-8035FE78 35A780 0038+00 0/0 1/1 0/0 .text GXSetFieldMask */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetFieldMask(GXBool odd_mask, GXBool even_mask) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetFieldMask.s" +void GXSetFieldMask(GXBool enableEven, GXBool enableOdd) { + u32 fieldMaskReg = 0; + GX_SET_REG(fieldMaskReg, enableOdd, GX_BP_FIELDMASK_ODD_ST, GX_BP_FIELDMASK_ODD_END); + GX_SET_REG(fieldMaskReg, enableEven, GX_BP_FIELDMASK_EVEN_ST, GX_BP_FIELDMASK_EVEN_END); + GX_SET_REG(fieldMaskReg, GX_BP_REG_FIELDMASK, 0, 7); + + GX_BP_LOAD_REG(fieldMaskReg); + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035FE78-8035FEF0 35A7B8 0078+00 0/0 1/1 0/0 .text GXSetFieldMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetFieldMode(GXBool field_mode, GXBool half_aspect_ratio) { - nofralloc -#include "asm/dolphin/gx/GXPixel/GXSetFieldMode.s" +void GXSetFieldMode(GXBool texLOD, GXBool adjustAR) { + GX_SET_REG(__GXData->lpSize, adjustAR, GX_BP_LINEPTWIDTH_ADJUST_ST, GX_BP_LINEPTWIDTH_ADJUST_END); + GX_BP_LOAD_REG(__GXData->lpSize); + + __GXFlushTextureState(); + GX_BP_LOAD_REG(GX_BP_REG_FIELDMODE << 24 | texLOD); + __GXFlushTextureState(); } -#pragma pop diff --git a/libs/dolphin/gx/GXTev.c b/libs/dolphin/gx/GXTev.c index 529988b389e..b09e223cc32 100644 --- a/libs/dolphin/gx/GXTev.c +++ b/libs/dolphin/gx/GXTev.c @@ -4,97 +4,187 @@ // #include "dolphin/gx/GXTev.h" +#include "dolphin/gx/GX.h" #include "dol2asm.h" -// -// Forward References: -// - -void GXSetTevOp(); -void GXSetTevColorIn(); -void GXSetTevAlphaIn(); -void GXSetTevColor(); -void GXSetTevColorS10(); -void GXSetTevKColor(); -void GXSetTevKColorSel(); -void GXSetTevKAlphaSel(); -void GXSetTevSwapMode(); -void GXSetTevSwapModeTable(); -void GXSetZTexture(); -void GXSetTevOrder(); - -// -// External References: -// - -extern void* __GXData; - -// -// Declarations: -// - /* ############################################################################################## */ /* 803D27C0-803D27D4 02F8E0 0014+00 1/1 0/0 0/0 .data TEVCOpTableST0 */ -SECTION_DATA static u8 TEVCOpTableST0[20] = { - 0xC0, 0x08, 0xF8, 0xAF, 0xC0, 0x08, 0xA8, 0x9F, 0xC0, 0x08, - 0xAC, 0x8F, 0xC0, 0x08, 0xFF, 0xF8, 0xC0, 0x08, 0xFF, 0xFA, +static u32 TEVCOpTableST0[] = { + 0xC008F8AF, // modulate + 0xC008A89F, // decal + 0xC008AC8F, // blend + 0xC008FFF8, // replace + 0xC008FFFA, // passclr +}; + +/* 803D27D4-803D27E8 02F8F4 0014+00 0/0 0/0 0/0 .data TEVCOpTableST1 */ +static u32 TEVCOpTableST1[] = { + 0xC008F80F, // modulate + 0xC008089F, // decal + 0xC0080C8F, // blend + 0xC008FFF8, // replace + 0xC008FFF0, // passclr +}; + +/* 803D27E8-803D27FC 02F908 0014+00 0/0 0/0 0/0 .data TEVAOpTableST0 */ +static u32 TEVAOpTableST0[] = { + 0xC108F2F0, // modulate + 0xC108FFD0, // decal + 0xC108F2F0, // blend + 0xC108FFC0, // replace + 0xC108FFD0, // passclr +}; + +/* 803D27FC-803D2810 02F91C 0014+00 0/0 0/0 0/0 .data TEVAOpTableST1 */ +static u32 TEVAOpTableST1[] = { + 0xC108F070, // modulate + 0xC108FF80, // decal + 0xC108F070, // blend + 0xC108FFC0, // replace + 0xC108FF80, // passclr }; /* 8035F198-8035F224 359AD8 008C+00 0/0 15/15 1/1 .text GXSetTevOp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevOp(GXTevStageID id, GXTevMode mode) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevOp.s" +void GXSetTevOp(GXTevStageID stage, GXTevMode mode) { + u32* color; + u32* alpha; + u32 tevReg; + + if (stage == GX_TEVSTAGE0) { + color = &TEVCOpTableST0[mode]; + alpha = &TEVAOpTableST0[mode]; + } else { + color = &TEVCOpTableST1[mode]; + alpha = &TEVAOpTableST1[mode]; + } + + tevReg = __GXData->tevc[stage]; + tevReg = (*color & ~0xFF000000) | (tevReg & 0xFF000000); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(tevReg); + + __GXData->tevc[stage] = tevReg; + + tevReg = __GXData->teva[stage]; + tevReg = (*alpha & ~0xFF00000F) | (tevReg & 0xFF00000F); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(tevReg); + + __GXData->teva[stage] = tevReg; + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F224-8035F268 359B64 0044+00 0/0 49/49 5/5 .text GXSetTevColorIn */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevColorIn(GXTevStageID stage, GXTevColorArg a, GXTevColorArg b, GXTevColorArg c, - GXTevColorArg d) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevColorIn.s" +void GXSetTevColorIn(GXTevStageID stage, GXTevColorArg a, GXTevColorArg b, GXTevColorArg c, GXTevColorArg d) { + u32 tevReg; + + tevReg = __GXData->tevc[stage]; + + FAST_FLAG_SET(tevReg, a, 12, 4); + FAST_FLAG_SET(tevReg, b, 8, 4); + FAST_FLAG_SET(tevReg, c, 4, 4); + FAST_FLAG_SET(tevReg, d, 0, 4); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(tevReg); + + __GXData->tevc[stage] = tevReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F268-8035F2AC 359BA8 0044+00 0/0 49/49 6/6 .text GXSetTevAlphaIn */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevAlphaIn(GXTevStageID stage, GXTevAlphaArg a, GXTevAlphaArg b, GXTevAlphaArg c, - GXTevAlphaArg d) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevAlphaIn.s" +void GXSetTevAlphaIn(GXTevStageID stage, GXTevAlphaArg a, GXTevAlphaArg b, GXTevAlphaArg c, GXTevAlphaArg d) { + u32 tevReg; + + tevReg = __GXData->teva[stage]; + + FAST_FLAG_SET(tevReg, a, 13, 3); + FAST_FLAG_SET(tevReg, b, 10, 3); + FAST_FLAG_SET(tevReg, c, 7, 3); + FAST_FLAG_SET(tevReg, d, 4, 3); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(tevReg); + + __GXData->teva[stage] = tevReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F2AC-8035F314 359BEC 0068+00 0/0 50/50 5/5 .text GXSetTevColorOp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevColorOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, - GXBool clamp, GXTevRegID out_reg) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevColorOp.s" +void GXSetTevColorOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool doClamp, GXTevRegID outReg) { + u32 tevReg; + + tevReg = __GXData->tevc[stage]; + FAST_FLAG_SET(tevReg, op & 1, 18, 1); + + if (op <= 1) { + FAST_FLAG_SET(tevReg, scale, 20, 2); + FAST_FLAG_SET(tevReg, bias, 16, 2); + } else { + FAST_FLAG_SET(tevReg, (op >> 1) & 3, 20, 2); + FAST_FLAG_SET(tevReg, 3, 16, 2); + } + + FAST_FLAG_SET(tevReg, doClamp, 19, 1); + FAST_FLAG_SET(tevReg, outReg, 22, 2); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(tevReg); + __GXData->tevc[stage] = tevReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F314-8035F37C 359C54 0068+00 0/0 50/50 5/5 .text GXSetTevAlphaOp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevAlphaOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, - GXBool clamp, GXTevRegID out_reg) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevAlphaOp.s" +void GXSetTevAlphaOp(GXTevStageID stage, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool doClamp, GXTevRegID outReg) { + u32 tevReg; + + tevReg = __GXData->teva[stage]; + FAST_FLAG_SET(tevReg, op & 1, 18, 1); + + if (op <= 1) { + FAST_FLAG_SET(tevReg, scale, 20, 2); + FAST_FLAG_SET(tevReg, bias, 16, 2); + } else { + FAST_FLAG_SET(tevReg, (op >> 1) & 3, 20, 2); + FAST_FLAG_SET(tevReg, 3, 16, 2); + } + + FAST_FLAG_SET(tevReg, doClamp, 19, 1); + FAST_FLAG_SET(tevReg, outReg, 22, 2); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(tevReg); + __GXData->teva[stage] = tevReg; + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F37C-8035F3DC 359CBC 0060+00 0/0 54/54 4/4 .text GXSetTevColor */ +#ifdef NONMATCHING +void GXSetTevColor(GXTevRegID reg, GXColor color) { + u32 ra; + u32 bg; + + ra = (((0xE0 + reg * 2) & 0xff) << 24) | (((*(u32*)&color) & 0xff000000) >> 24) | (((*(u32*)&color) & 0xff) << 12); + bg = (((0xE1 + reg * 2) & 0xff) << 24) | (((*(u32*)&color) & 0xff00) >> 8) | (((*(u32*)&color) & 0x00ff0000) >> 4); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(ra); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + __GXData->bpSentNot = GX_FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -103,8 +193,32 @@ asm void GXSetTevColor(GXTevRegID id, GXColor color) { #include "asm/dolphin/gx/GXTev/GXSetTevColor.s" } #pragma pop +#endif /* 8035F3DC-8035F440 359D1C 0064+00 0/0 8/8 2/2 .text GXSetTevColorS10 */ +#ifdef NONMATCHING +void GXSetTevColorS10(GXTevRegID reg, GXColorS10 color) { + u32 ra; + u32 bg; + + ra = (((0xE0 + reg * 2) & 0xff) << 24) | (((*(u32*)&color) & 0x07ff0000) >> 16) | (((*(u32*)&color) & 0x7ff) << 12); + bg = (((0xE1 + reg * 2) & 0xff) << 24) | (((*(u32*)&color.b) & 0x07ff0000) >> 16) | (((*(u32*)&color.b) & 0x07ff) << 12); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(ra); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + __GXData->bpSentNot = GX_FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -113,8 +227,33 @@ asm void GXSetTevColorS10(GXTevRegID id, GXColorS10 color) { #include "asm/dolphin/gx/GXTev/GXSetTevColorS10.s" } #pragma pop +#endif /* 8035F440-8035F4A4 359D80 0064+00 0/0 8/8 4/4 .text GXSetTevKColor */ +#ifdef NONMATCHING +void GXSetTevKColor(GXTevKColorID id, GXColor color) +{ + u32 ra; + u32 bg; + + ra = (((0xE0 + id * 2) & 0xff) << 24) | (((*(u32*)&color) & 0xff000000) >> 24) | (((*(u32*)&color) & 0xff) << 12) | (8 << 0x14); + bg = (((0xE1 + id * 2) & 0xff) << 24) | (((*(u32*)&color) & 0xff00) >> 8) | (((*(u32*)&color) & 0x00ff0000) >> 4) | (8 << 0x14); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(ra); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(bg); + + __GXData->bpSentNot = GX_FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -123,157 +262,177 @@ asm void GXSetTevKColor(GXTevKColorID id, GXColor color) { #include "asm/dolphin/gx/GXTev/GXSetTevKColor.s" } #pragma pop +#endif /* 8035F4A4-8035F500 359DE4 005C+00 0/0 9/9 4/4 .text GXSetTevKColorSel */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevKColorSel(GXTevStageID stage, GXTevKColorSel color_sel) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevKColorSel.s" +void GXSetTevKColorSel(GXTevStageID stage, GXTevKColorSel sel) +{ + u32* reg; + + reg = &__GXData->tevKsel[stage >> 1]; + + if (stage & 1) { + FAST_FLAG_SET(*reg, sel, 14, 5); + } else { + FAST_FLAG_SET(*reg, sel, 4, 5); + } + + GX_WRITE_U8(0x61); + GX_WRITE_U32(*reg); + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F500-8035F55C 359E40 005C+00 0/0 9/9 4/4 .text GXSetTevKAlphaSel */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevKAlphaSel(GXTevStageID stage, GXTevKAlphaSel alpha_sel) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevKAlphaSel.s" +void GXSetTevKAlphaSel(GXTevStageID stage, GXTevKAlphaSel sel) { + u32* reg; + + reg = &__GXData->tevKsel[stage >> 1]; + + if (stage & 1) { + FAST_FLAG_SET(*reg, sel, 19, 5); + } else { + FAST_FLAG_SET(*reg, sel, 9, 5); + } + + GX_WRITE_U8(0x61); + GX_WRITE_U32(*reg); + __GXData->bpSentNot = GX_FALSE; } -#pragma pop + /* 8035F55C-8035F5A4 359E9C 0048+00 0/0 10/10 5/5 .text GXSetTevSwapMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevSwapMode(GXTevStageID stage, GXTevSwapSel ras_sel, GXTevSwapSel tex_sel) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevSwapMode.s" +void GXSetTevSwapMode(GXTevStageID stage, GXTevSwapSel rasSel, GXTevSwapSel texSel) { + u32* reg = &__GXData->teva[stage]; + FAST_FLAG_SET(*reg, rasSel, 0, 2); + FAST_FLAG_SET(*reg, texSel, 2, 2); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(*reg); + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F5A4-8035F624 359EE4 0080+00 0/0 17/17 2/2 .text GXSetTevSwapModeTable */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevSwapModeTable(GXTevSwapSel select, GXTevColor r, GXTevColor g, GXTevColor b, - GXTevColor a) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevSwapModeTable.s" +void GXSetTevSwapModeTable(GXTevSwapSel table, GXTevColor red, GXTevColor green, GXTevColor blue, GXTevColor alpha) { + u32* reg; + + reg = &__GXData->tevKsel[table << 1]; + FAST_FLAG_SET(*reg, red, 0, 2); + FAST_FLAG_SET(*reg, green, 2, 2); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(*reg); + + reg = &__GXData->tevKsel[(table << 1) + 1]; + FAST_FLAG_SET(*reg, blue, 0, 2); + FAST_FLAG_SET(*reg, alpha, 2, 2); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(*reg); + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 8035F624-8035F668 359F64 0044+00 0/0 43/43 5/5 .text GXSetAlphaCompare */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1, u8 ref1) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetAlphaCompare.s" +void GXSetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1, u8 ref1) { + u32 reg = 0xF3000000; + + FAST_FLAG_SET(reg, ref0, 0, 8); + FAST_FLAG_SET(reg, ref1, 8, 8); + FAST_FLAG_SET(reg, comp0, 16, 3); + FAST_FLAG_SET(reg, comp1, 19, 3); + FAST_FLAG_SET(reg, op, 22, 2); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(reg); + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop + /* 8035F668-8035F6F4 359FA8 008C+00 0/0 3/3 0/0 .text GXSetZTexture */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetZTexture(GXZTexOp op, GXTexFmt fmt, u32 bias) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetZTexture.s" +void GXSetZTexture(GXZTexOp op, GXTexFmt format, u32 bias) { + u32 val1; + u32 val2; + u32 val3; + + val1 = 0; + FAST_FLAG_SET(val1, bias, 0, 24); + FAST_FLAG_SET(val1, 0xF4, 24, 8); + + val2 = 0; + switch (format) { + case GX_TF_Z8: + val3 = 0; + break; + case GX_TF_Z16: + val3 = 1; + break; + case GX_TF_Z24X8: + val3 = 2; + break; + default: + val3 = 2; + break; + } + + FAST_FLAG_SET(val2, val3, 0, 2); + FAST_FLAG_SET(val2, op, 2, 2); + FAST_FLAG_SET(val2, 0xF5, 24, 8); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(val1); + + GX_WRITE_U8(0x61); + GX_WRITE_U32(val2); + + __GXData->bpSentNot = GX_FALSE; } -#pragma pop - -/* ############################################################################################## */ -/* 803D27D4-803D27E8 02F8F4 0014+00 0/0 0/0 0/0 .data TEVCOpTableST1 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 TEVCOpTableST1[20] = { - 0xC0, 0x08, 0xF8, 0x0F, 0xC0, 0x08, 0x08, 0x9F, 0xC0, 0x08, - 0x0C, 0x8F, 0xC0, 0x08, 0xFF, 0xF8, 0xC0, 0x08, 0xFF, 0xF0, -}; -#pragma pop - -/* 803D27E8-803D27FC 02F908 0014+00 0/0 0/0 0/0 .data TEVAOpTableST0 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 TEVAOpTableST0[20] = { - 0xC1, 0x08, 0xF2, 0xF0, 0xC1, 0x08, 0xFF, 0xD0, 0xC1, 0x08, - 0xF2, 0xF0, 0xC1, 0x08, 0xFF, 0xC0, 0xC1, 0x08, 0xFF, 0xD0, -}; -#pragma pop - -/* 803D27FC-803D2810 02F91C 0014+00 0/0 0/0 0/0 .data TEVAOpTableST1 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 TEVAOpTableST1[20] = { - 0xC1, 0x08, 0xF0, 0x70, 0xC1, 0x08, 0xFF, 0x80, 0xC1, 0x08, - 0xF0, 0x70, 0xC1, 0x08, 0xFF, 0xC0, 0xC1, 0x08, 0xFF, 0x80, -}; -#pragma pop - -/* 803D2810-803D2838 02F930 0024+04 1/1 0/0 0/0 .data c2r$334 */ -SECTION_DATA static u8 c2r[36 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x07, - 0x00, - 0x00, - 0x00, - 0x05, - 0x00, - 0x00, - 0x00, - 0x06, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; /* 8035F6F4-8035F890 35A034 019C+00 0/0 65/65 6/6 .text GXSetTevOrder */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetTevOrder(GXTevStageID stage, GXTexCoordID coord, GXTexMapID map, GXChannelID color) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetTevOrder.s" +void GXSetTevOrder(GXTevStageID stage, GXTexCoordID coord, GXTexMapID map, GXChannelID color) { + static int c2r[] = { 0, 1, 0, 1, 0, 1, 7, 5, 6 }; + + u32* reg; + u32 tempMap; + u32 tempCoord; + + reg = &__GXData->tref[stage / 2]; + __GXData->texmapId[stage] = map; + + tempMap = map & ~0x100; + tempMap = (tempMap >= GX_MAX_TEXMAP) ? GX_TEXMAP0 : tempMap; + + if (coord >= GX_MAXCOORD) { + tempCoord = GX_TEXCOORD0; + __GXData->tevTcEnab = __GXData->tevTcEnab & ~(1 << stage); + } else { + tempCoord = coord; + __GXData->tevTcEnab = __GXData->tevTcEnab | (1 << stage); + } + + if (stage & 1) { + FAST_FLAG_SET(*reg, tempMap, 12, 3); + FAST_FLAG_SET(*reg, tempCoord, 15, 3); + FAST_FLAG_SET(*reg, (color == GX_COLOR_NULL ? 7 : c2r[color]), 19, 3); + FAST_FLAG_SET(*reg, ((map != GX_TEXMAP_NULL) && !(map & 0x100)), 18, 1); + + } else { + FAST_FLAG_SET(*reg, tempMap, 0, 3); + FAST_FLAG_SET(*reg, tempCoord, 3, 3); + FAST_FLAG_SET(*reg, (color == GX_COLOR_NULL ? 7 : c2r[color]), 7, 3); + FAST_FLAG_SET(*reg, ((map != GX_TEXMAP_NULL) && !(map & 0x100)), 6, 1); + } + + GX_WRITE_U8(0x61); + GX_WRITE_U32(*reg); + + __GXData->bpSentNot = GX_FALSE; + __GXData->dirtyFlags |= GX_DIRTY_SU_TEX; } -#pragma pop /* 8035F890-8035F8B8 35A1D0 0028+00 0/0 63/63 6/6 .text GXSetNumTevStages */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetNumTevStages(u8 num_stages) { - nofralloc -#include "asm/dolphin/gx/GXTev/GXSetNumTevStages.s" +void GXSetNumTevStages(u8 count) { + FAST_FLAG_SET(__GXData->genMode, count - 1, 10, 4); + __GXData->dirtyFlags |= GX_DIRTY_GEN_MODE; } -#pragma pop diff --git a/libs/dolphin/gx/GXTexture.c b/libs/dolphin/gx/GXTexture.c index 9779f4da4e8..fa4df5049a6 100644 --- a/libs/dolphin/gx/GXTexture.c +++ b/libs/dolphin/gx/GXTexture.c @@ -4,6 +4,8 @@ // #include "dolphin/gx/GXTexture.h" +#include "dolphin/gx/GX.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" // @@ -23,7 +25,6 @@ void __GXSetTmemConfig(); // External References: // -SECTION_INIT void memset(); void __GXFlushTextureState(); // @@ -67,6 +68,85 @@ SECTION_DATA static void* lit_104[61] = { }; /* 8035DC1C-8035DD78 35855C 015C+00 1/0 8/8 0/0 .text GXGetTexBufferSize */ +#ifdef NONMATCHING +u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod) { + u32 r0; + u32 r8; + u32 i; + u32 rv; + u32 r7; + u32 r6; + u32 r10; + u32 uVar1; + u32 uVar2; + u32 uVar3; + switch(format) { + case GX_TF_I4: + case GX_TF_CI8: + case GX_TF_CMPR: + case 32: + case 48: + r0 = 3; + r8 = 3; + break; + case GX_TF_I8: + case GX_TF_IA4: + case 17: + case 34: + case 39: + case 40: + case 41: + case 42: + case 57: + case 58: + r0 = 3; + r8 = 2; + break; + case GX_TF_IA8: + case GX_TF_RGB565: + case GX_TF_TGB5A3: + case GX_TF_RGBA8: + case 19: + case 22: + case 35: + case 43: + case 44: + case 60: + r0 = 2; + r8 = 2; + break; + default: + r8 = 0; + r0 = 0; + break; + } + + if (format == 6 || format == 0x16) { + uVar3 = 0x40; + } else { + uVar3 = 0x20; + } + + if (mipmap == GX_TRUE) { + r7 = (1 << r8) - 1; + r10 = (1 << r0) - 1; + rv = 0; + for (i = 0; i < max_lod; i++) { + rv += uVar3 * (((s32)(width + r10) >> r0) * ((s32)(height + r7) >> r0)); + + if (width == 1 && height == 1) { + break; + } + + width = (width > 1) ? width >> 1 : 1; + height = (height > 1) ? height >> 1 : 1; + } + } else { + rv = uVar3 * (((s32)(width + (1 << r0) - 1) >> r0) * ((s32)(height + (1 << r8) - 1) >> r0)); + } + return rv; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -75,6 +155,7 @@ asm u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 #include "asm/dolphin/gx/GXTexture/GXGetTexBufferSize.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D268C-803D2780 -00001 00F4+00 1/1 0/0 0/0 .data @145 */ @@ -113,14 +194,84 @@ SECTION_DATA static void* lit_145[61] = { }; /* 8035DD78-8035DE40 3586B8 00C8+00 1/0 1/1 0/0 .text __GetImageTileCount */ +#ifdef NONMATCHING +void __GetImageTileCount(u32 arg0, u16 arg1, u16 arg2, s32* arg3, s32* arg4, s32* arg5) { + u32 r0; + u32 r8; + s32 uVar3; + s32 uVar4; + s32 uVar5; + s32 uVar6; + s32 uVar7; + switch(arg0) { + case GX_TF_I4: + case GX_TF_CI8: + case GX_TF_CMPR: + case 32: + case 48: + r0 = 3; + r8 = 3; + break; + case GX_TF_I8: + case GX_TF_IA4: + case 17: + case 34: + case 39: + case 40: + case 41: + case 42: + case 57: + case 58: + r0 = 3; + r8 = 2; + break; + case GX_TF_IA8: + case GX_TF_RGB565: + case GX_TF_TGB5A3: + case GX_TF_RGBA8: + case 19: + case 22: + case 35: + case 43: + case 44: + case 60: + r0 = 2; + r8 = 2; + break; + default: + r8 = 0; + r0 = 0; + break; + } + + if (arg1 == 0) { + arg1 = 1; + } + + if (arg2 == 0) { + arg2 = 1; + } + + uVar3 = 1; + *arg3 = (arg1 + ((1 << r0) - 1)) >> r0; + *arg4 = (arg2 + ((1 << r8) - 1)) >> r8; + + if ((s32)arg0 != 6 && (s32)arg0 != 0x16) { + uVar3 = 0; + } + + *arg5 = uVar3 ? 2 : 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __GetImageTileCount(u32 arg0, s16 arg1, s16 arg2, s32* arg3, s32* arg4, s32* arg5) { +asm void __GetImageTileCount(u32 arg0, u16 arg1, u16 arg2, s32* arg3, s32* arg4, s32* arg5) { nofralloc #include "asm/dolphin/gx/GXTexture/__GetImageTileCount.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D2780-803D27C0 -00001 003C+04 1/1 0/0 0/0 .data @224 */ @@ -261,74 +412,39 @@ asm void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filter, GXTexFilter max_ #pragma pop /* 8035E238-8035E248 358B78 0010+00 0/0 4/4 1/1 .text GXGetTexObjWidth */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u16 GXGetTexObjWidth(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjWidth.s" +u16 GXGetTexObjWidth(GXTexObj* obj) { + return (obj->texture_size & 0x3ff) + 1; } -#pragma pop /* 8035E248-8035E258 358B88 0010+00 0/0 3/3 0/0 .text GXGetTexObjHeight */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u16 GXGetTexObjHeight(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjHeight.s" +u16 GXGetTexObjHeight(GXTexObj* obj) { + return ((obj->texture_size >> 10) & 0x3ff) + 1; } -#pragma pop /* 8035E258-8035E260 358B98 0008+00 0/0 1/1 0/0 .text GXGetTexObjFmt */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXTexFmt GXGetTexObjFmt(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjFmt.s" +GXTexFmt GXGetTexObjFmt(GXTexObj* obj) { + return obj->texture_format; } -#pragma pop /* 8035E260-8035E26C 358BA0 000C+00 0/0 1/1 0/0 .text GXGetTexObjWrapS */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXTexWrapMode GXGetTexObjWrapS(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjWrapS.s" +GXTexWrapMode GXGetTexObjWrapS(GXTexObj* obj) { + return obj->texture_filter & 0x3; } -#pragma pop /* 8035E26C-8035E278 358BAC 000C+00 0/0 1/1 0/0 .text GXGetTexObjWrapT */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXTexWrapMode GXGetTexObjWrapT(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjWrapT.s" +GXTexWrapMode GXGetTexObjWrapT(GXTexObj* obj) { + return (obj->texture_filter & 0xc) >> 2; } -#pragma pop /* 8035E278-8035E290 358BB8 0018+00 0/0 1/1 0/0 .text GXGetTexObjMipMap */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXBool GXGetTexObjMipMap(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjMipMap.s" +GXBool GXGetTexObjMipMap(GXTexObj* obj) { + return (obj->texture_flags & 1) == 1; } -#pragma pop /* 8035E290-8035E298 358BD0 0008+00 0/0 1/1 0/0 .text GXGetTexObjTlut */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 GXGetTexObjTlut(GXTexObj* obj) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXGetTexObjTlut.s" +u32 GXGetTexObjTlut(GXTexObj* obj) { + return obj->tlut_name; } -#pragma pop /* 8035E298-8035E414 358BD8 017C+00 1/1 0/0 0/0 .text GXLoadTexObjPreLoaded */ #pragma push @@ -392,34 +508,28 @@ asm void GXInitTlutRegion(GXTlutRegion* region, u32 tmem_addr, GXTlutSize tlut_s #pragma pop /* 8035E664-8035E6AC 358FA4 0048+00 0/0 8/8 1/1 .text GXInvalidateTexAll */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXInvalidateTexAll(void) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXInvalidateTexAll.s" +void GXInvalidateTexAll(void) { + __GXFlushTextureState(); + GXFIFO.u8 = 0x61; + GXFIFO.u32 = 0x66001000; + GXFIFO.u8 = 0x61; + GXFIFO.u32 = 0x66001100; + __GXFlushTextureState(); } -#pragma pop /* 8035E6AC-8035E6C0 358FEC 0014+00 0/0 1/1 0/0 .text GXSetTexRegionCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXSetTexRegionCallback.s" +GXTexRegionCallback GXSetTexRegionCallback(GXTexRegionCallback callback) { + GXTexRegionCallback prev = __GXData->texRegionCB; + __GXData->texRegionCB = callback; + return prev; } -#pragma pop /* 8035E6C0-8035E6D4 359000 0014+00 0/0 1/1 0/0 .text GXSetTlutRegionCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm GXTlutRegionCallback GXSetTlutRegionCallback(GXTlutRegionCallback callback) { - nofralloc -#include "asm/dolphin/gx/GXTexture/GXSetTlutRegionCallback.s" +GXTlutRegionCallback GXSetTlutRegionCallback(GXTlutRegionCallback callback) { + GXTlutRegionCallback prev = __GXData->tlutRegionCB; + __GXData->tlutRegionCB = callback; + return prev; } -#pragma pop /* 8035E6D4-8035E750 359014 007C+00 0/0 1/1 0/0 .text GXSetTexCoordScaleManually */ #pragma push diff --git a/libs/dolphin/gx/GXTransform.c b/libs/dolphin/gx/GXTransform.c index 742f3293183..cff2dd6408a 100644 --- a/libs/dolphin/gx/GXTransform.c +++ b/libs/dolphin/gx/GXTransform.c @@ -4,6 +4,7 @@ // #include "dolphin/gx/GXTransform.h" +#include "dolphin/gx/GX.h" #include "dol2asm.h" // @@ -25,12 +26,6 @@ void GXSetScissorBoxOffset(); void GXSetClipMode(); void __GXSetMatrixIndex(); -// -// External References: -// - -extern void* __GXData; - // // Declarations: // @@ -44,6 +39,36 @@ SECTION_SDATA2 static u8 lit_26[4] = { 0x00, }; +static void Copy6Floats(register f32* dst, register const f32* src) { + register f32 ps_0, ps_1, ps_2; + + // clang-format off + asm { + psq_l ps_0, 0(src), 0, 0 + psq_l ps_1, 8(src), 0, 0 + psq_l ps_2, 16(src), 0, 0 + psq_st ps_0, 0(dst), 0, 0 + psq_st ps_1, 8(dst), 0, 0 + psq_st ps_2, 16(dst), 0, 0 + } + // clang-format on +} + +static void WriteProjPS(register volatile void* dst, register const f32* src) { + register f32 ps_0, ps_1, ps_2; + + // clang-format off + asm { + psq_l ps_0, 0(src), 0, 0 + psq_l ps_1, 8(src), 0, 0 + psq_l ps_2, 16(src), 0, 0 + psq_st ps_0, 0(dst), 0, 0 + psq_st ps_1, 0(dst), 0, 0 + psq_st ps_2, 0(dst), 0, 0 + } + // clang-format on +} + /* 80456654-80456658 004C54 0004+00 2/2 0/0 0/0 .sdata2 @27 */ SECTION_SDATA2 static f32 lit_27 = 1.0f; @@ -51,6 +76,36 @@ SECTION_SDATA2 static f32 lit_27 = 1.0f; SECTION_SDATA2 static f32 lit_28 = 0.5f; /* 8035FF60-803600D4 35A8A0 0174+00 0/0 1/1 0/0 .text GXProject */ +// regalloc +#ifdef NONMATCHING +void GXProject(f32 model_x, f32 model_y, f32 model_z, Mtx model_mtx, f32* proj_mtx, + f32* viewpoint, f32* screen_x, f32* screen_y, f32* screen_z) { + f32 fVar1; + f32 fVar6; + f32 fVar7; + f32 fVar8; + f32 fVar9; + f32 fVar2; + f32 fVar3; + fVar1 = (model_mtx[0][0] * model_x) + (model_mtx[0][1] * model_y) + (model_mtx[0][2] * model_z) + model_mtx[0][3]; + fVar6 = (model_mtx[1][0] * model_x) + (model_mtx[1][1] * model_y) + (model_mtx[1][2] * model_z) + model_mtx[1][3]; + fVar7 = (model_mtx[2][0] * model_x) + (model_mtx[2][1] * model_y) + (model_mtx[2][2] * model_z) + model_mtx[2][3]; + if (proj_mtx[0] == 0.0f) { + fVar8 = fVar1 * proj_mtx[1] + fVar7 * proj_mtx[2]; + fVar3 = fVar6 * proj_mtx[3] + fVar7 * proj_mtx[4]; + fVar9 = proj_mtx[6] + fVar7 * proj_mtx[5]; + fVar2 = 1.0f / -fVar7; + } else { + fVar8 = proj_mtx[2] + fVar1 * proj_mtx[1]; + fVar3 = proj_mtx[4] + fVar6 * proj_mtx[3]; + fVar9 = proj_mtx[6] + fVar7 * proj_mtx[5]; + fVar2 = 1.0f; + } + *screen_x = fVar2 * viewpoint[2] * fVar8 / 2.0f + viewpoint[2] / 2.0f + viewpoint[0]; + *screen_y = fVar2 * viewpoint[3] * -fVar3 / 2.0f + viewpoint[3] / 2.0f + viewpoint[1]; + *screen_z = fVar2 * (viewpoint[5] - viewpoint[4]) * fVar9 + viewpoint[5]; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -60,18 +115,47 @@ asm void GXProject(f32 model_x, f32 model_y, f32 model_z, Mtx model_mtx, f32* pr #include "asm/dolphin/gx/GXTransform/GXProject.s" } #pragma pop +#endif /* 803600D4-80360178 35AA14 00A4+00 0/0 15/15 2/2 .text GXSetProjection */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetProjection(Mtx44 mtx, GXProjectionType type) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXSetProjection.s" +void GXSetProjection(Mtx44 mtx, GXProjectionType type) { + volatile void* fifo; + __GXData->projectionType = type; + __GXData->field_0x4dc = mtx[0][0]; + __GXData->field_0x4e4 = mtx[1][1]; + __GXData->field_0x4ec = mtx[2][2]; + __GXData->field_0x4f0 = mtx[2][3]; + + if (type == GX_ORTHOGRAPHIC) { + __GXData->field_0x4e0 = mtx[0][3]; + __GXData->field_0x4e8 = mtx[1][3]; + } else { + __GXData->field_0x4e0 = mtx[0][2]; + __GXData->field_0x4e8 = mtx[1][2]; + } + + GXFIFO.u8 = 0x10; + GXFIFO.u32 = 0x61020; + fifo = &GXFIFO; + WriteProjPS(fifo, &__GXData->field_0x4dc); + GXFIFO.u32 = __GXData->projectionType; + __GXData->bpSentNot = 1; } -#pragma pop /* 80360178-80360204 35AAB8 008C+00 0/0 1/1 1/1 .text GXSetProjectionv */ +// Matches with literals +#ifdef NONMATCHING +void GXSetProjectionv(f32* p) { + __GXData->projectionType = (*p == 0.0f) ? GX_PERSPECTIVE : GX_ORTHOGRAPHIC; + p++; + Copy6Floats(&__GXData->field_0x4dc, p); + GXFIFO.u8 = 0x10; + GXFIFO.u32 = 0x61020; + WriteProjPS(&GXFIFO, &__GXData->field_0x4dc); + GXFIFO.u32 = __GXData->projectionType; + __GXData->bpSentNot = 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -80,8 +164,16 @@ asm void GXSetProjectionv(f32* p) { #include "asm/dolphin/gx/GXTransform/GXSetProjectionv.s" } #pragma pop +#endif /* 80360204-8036024C 35AB44 0048+00 0/0 1/1 1/1 .text GXGetProjectionv */ +// Matches with literals +#ifdef NONMATCHING +void GXGetProjectionv(f32* p) { + *p = (u32)__GXData->projectionType != GX_PERSPECTIVE ? 1.0f : 0.5f; + Copy6Floats(p + 1, &__GXData->field_0x4dc); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -90,52 +182,142 @@ asm void GXGetProjectionv(f32* p) { #include "asm/dolphin/gx/GXTransform/GXGetProjectionv.s" } #pragma pop +#endif + +static void WriteMTXPS4x3(register volatile void* dst, register const Mtx src) { + register f32 ps_0, ps_1, ps_2, ps_3, ps_4, ps_5; + + // clang-format off + asm { + psq_l ps_0, 0(src), 0, 0 + psq_l ps_1, 8(src), 0, 0 + psq_l ps_2, 16(src), 0, 0 + psq_l ps_3, 24(src), 0, 0 + psq_l ps_4, 32(src), 0, 0 + psq_l ps_5, 40(src), 0, 0 + + psq_st ps_0, 0(dst), 0, 0 + psq_st ps_1, 0(dst), 0, 0 + psq_st ps_2, 0(dst), 0, 0 + psq_st ps_3, 0(dst), 0, 0 + psq_st ps_4, 0(dst), 0, 0 + psq_st ps_5, 0(dst), 0, 0 + } + // clang-format on +} /* 8036024C-8036029C 35AB8C 0050+00 0/0 83/83 9/9 .text GXLoadPosMtxImm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXLoadPosMtxImm(Mtx mtx, u32 id) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXLoadPosMtxImm.s" +void GXLoadPosMtxImm(Mtx mtx, u32 id) { + GX_XF_LOAD_REGS(4 * 3 - 1, id * 4 + GX_XF_MEM_POSMTX); + WriteMTXPS4x3(&GXFIFO, mtx); +} + +static void WriteMTXPS3x3(register volatile void* dst, register const Mtx src) { + register f32 ps_0, ps_1, ps_2, ps_3, ps_4, ps_5; + + // clang-format off + asm { + psq_l ps_0, 0(src), 0, 0 + lfs ps_1, 8(src) + psq_l ps_2, 16(src), 0, 0 + lfs ps_3, 24(src) + psq_l ps_4, 32(src), 0, 0 + lfs ps_5, 40(src) + + psq_st ps_0, 0(dst), 0, 0 + stfs ps_1, 0(dst) + psq_st ps_2, 0(dst), 0, 0 + stfs ps_3, 0(dst) + psq_st ps_4, 0(dst), 0, 0 + stfs ps_5, 0(dst) + } + // clang-format on } -#pragma pop /* 8036029C-803602EC 35ABDC 0050+00 0/0 11/11 7/7 .text GXLoadNrmMtxImm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXLoadNrmMtxImm(Mtx mtx, u32 id) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXLoadNrmMtxImm.s" +void GXLoadNrmMtxImm(Mtx mtx, u32 id) { + GX_XF_LOAD_REGS(3 * 3 - 1, id * 3 + GX_XF_MEM_NRMMTX); + WriteMTXPS3x3(&GXFIFO, mtx); } -#pragma pop /* 803602EC-80360320 35AC2C 0034+00 0/0 51/51 2/2 .text GXSetCurrentMtx */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetCurrentMtx(u32 id) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXSetCurrentMtx.s" +void GXSetCurrentMtx(u32 id) { + GX_SET_REG(__GXData->matIdxA, id, GX_XF_MTXIDX0_GEOM_ST, GX_XF_MTXIDX0_GEOM_END); + __GXSetMatrixIndex(GX_VA_PNMTXIDX); +} + +static void WriteMTXPS4x2(register volatile void* dst, register const Mtx src){ + register f32 ps_0, ps_1, ps_2, ps_3; + + // clang-format off + asm { + psq_l ps_0, 0(src), 0, 0 + psq_l ps_1, 8(src), 0, 0 + psq_l ps_2, 16(src), 0, 0 + psq_l ps_3, 24(src), 0, 0 + + psq_st ps_0, 0(dst), 0, 0 + psq_st ps_1, 0(dst), 0, 0 + psq_st ps_2, 0(dst), 0, 0 + psq_st ps_3, 0(dst), 0, 0 + } + // clang-format on } -#pragma pop /* 80360320-803603D4 35AC60 00B4+00 0/0 15/15 0/0 .text GXLoadTexMtxImm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXLoadTexMtxImm(Mtx mtx, u32 id, GXTexMtxType type) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXLoadTexMtxImm.s" +void GXLoadTexMtxImm(const Mtx mtx, u32 id, GXTexMtxType type) { + u32 addr; + u32 num; + u32 reg; + + // Matrix address in XF memory + addr = id >= GX_PTTEXMTX0 ? (id - GX_PTTEXMTX0) * 4 + GX_XF_MEM_DUALTEXMTX : id * 4 + (u64)GX_XF_MEM_POSMTX; + + // Number of elements in matrix + num = type == GX_MTX2x4 ? (u64)(2 * 4) : 3 * 4; + + reg = addr | (num - 1) << 16; + + GX_XF_LOAD_REG_HDR(reg); + + if (type == GX_MTX3x4) { + WriteMTXPS4x3(&GXFIFO, mtx); + } else { + WriteMTXPS4x2(&GXFIFO, mtx); + } } -#pragma pop /* ############################################################################################## */ /* 8045665C-80456660 004C5C 0004+00 1/1 0/0 0/0 .sdata2 @201 */ SECTION_SDATA2 static f32 lit_201 = 342.0f; /* 803603D4-80360464 35AD14 0090+00 1/1 0/0 0/0 .text __GXSetViewport */ +// Matches with literals +#ifdef NONMATCHING +void __GXSetViewport(void) { + f32 a, b, c, d, e, f; + f32 near, far; + + a = __GXData->vpWd / 2; + b = -__GXData->vpHt / 2; + d = __GXData->vpLeft + (__GXData->vpWd / 2) + 342.0f; + e = __GXData->vpTop + (__GXData->vpHt / 2) + 342.0f; + + near = __GXData->vpNearz * __GXData->zScale; + far = __GXData->vpFarz * __GXData->zScale; + + c = far - near; + f = far + __GXData->zOffset; + + GX_XF_LOAD_REGS(5, GX_XF_REG_SCALEX); + GX_WRITE_F32(a); + GX_WRITE_F32(b); + GX_WRITE_F32(c); + GX_WRITE_F32(d); + GX_WRITE_F32(e); + GX_WRITE_F32(f); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -144,38 +326,63 @@ asm void __GXSetViewport(void) { #include "asm/dolphin/gx/GXTransform/__GXSetViewport.s" } #pragma pop +#endif /* 80360464-803604AC 35ADA4 0048+00 0/0 10/10 1/1 .text GXSetViewport */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetViewport(f32 x_orig, f32 y_orig, f32 width, f32 height, f32 near_z, f32 far_z) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXSetViewport.s" +void GXSetViewport(f32 left, f32 top, f32 width, f32 height, f32 nearZ, f32 farZ) { + __GXData->vpLeft = left; + __GXData->vpTop = top; + __GXData->vpWd = width; + __GXData->vpHt = height; + __GXData->vpNearz = nearZ; + __GXData->vpFarz = farZ; + __GXSetViewport(); + __GXData->bpSentNot = GX_TRUE; } -#pragma pop /* 803604AC-803604D0 35ADEC 0024+00 0/0 1/1 1/1 .text GXGetViewportv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXGetViewportv(f32* p) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXGetViewportv.s" +void GXGetViewportv(f32* p) { + Copy6Floats(p, &__GXData->vpLeft); } -#pragma pop /* 803604D0-80360548 35AE10 0078+00 0/0 11/11 4/4 .text GXSetScissor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetScissor(u32 left, u32 top, u32 width, u32 height) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXSetScissor.s" +void GXSetScissor(u32 left, u32 top, u32 width, u32 height) { + u32 y1, x1, y2, x2; + u32 reg; + + y1 = top + 342; + x1 = left + 342; + + GX_SET_REG(__GXData->suScis0, y1, GX_BP_SCISSORTL_TOP_ST, GX_BP_SCISSORTL_TOP_END); + GX_SET_REG(__GXData->suScis0, x1, GX_BP_SCISSORTL_LEFT_ST, GX_BP_SCISSORTL_LEFT_END); + + y2 = y1 + height - 1; + x2 = (x1 + width) - 1; + + GX_SET_REG(__GXData->suScis1, y2, GX_BP_SCISSORBR_BOT_ST, GX_BP_SCISSORBR_BOT_END); + GX_SET_REG(__GXData->suScis1, x2, GX_BP_SCISSORBR_RIGHT_ST, GX_BP_SCISSORBR_RIGHT_END); + + GX_BP_LOAD_REG(__GXData->suScis0); + GX_BP_LOAD_REG(__GXData->suScis1); + __GXData->bpSentNot = FALSE; } -#pragma pop /* 80360548-80360590 35AE88 0048+00 0/0 6/6 2/2 .text GXGetScissor */ +#ifdef NONMATCHING +void GXGetScissor(u32* left, u32* top, u32* width, u32* height) { + u32 y1, x1, y2, x2; + + x1 = GX_GET_REG(__GXData->suScis0, GX_BP_SCISSORTL_LEFT_ST, GX_BP_SCISSORTL_LEFT_END); + x2 = GX_GET_REG(__GXData->suScis1, GX_BP_SCISSORBR_RIGHT_ST, GX_BP_SCISSORBR_RIGHT_END); + y1 = GX_GET_REG(__GXData->suScis0, GX_BP_SCISSORTL_TOP_ST, GX_BP_SCISSORTL_TOP_END); + y2 = GX_GET_REG(__GXData->suScis1, GX_BP_SCISSORBR_BOT_ST, GX_BP_SCISSORBR_BOT_END); + + *left = x1 - 342; + *top = y1 - 342; + *width = x2 - x1 + 1; + *height = y2 - y1 + 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -184,33 +391,41 @@ asm void GXGetScissor(u32* left, u32* top, u32* width, u32* height) { #include "asm/dolphin/gx/GXTransform/GXGetScissor.s" } #pragma pop +#endif /* 80360590-803605D0 35AED0 0040+00 0/0 1/1 0/0 .text GXSetScissorBoxOffset */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetScissorBoxOffset(u32 x_offset, u32 y_offset) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXSetScissorBoxOffset.s" +void GXSetScissorBoxOffset(s32 x, s32 y) { + u32 cmd = 0; + u32 x1; + u32 y1; + + x1 = (u32)(x + 342) / 2; + y1 = (u32)(y + 342) / 2; + GX_SET_REG(cmd, x1, GX_BP_SCISSOROFS_OX_ST, GX_BP_SCISSOROFS_OX_END); + GX_SET_REG(cmd, y1, GX_BP_SCISSOROFS_OY_ST, GX_BP_SCISSOROFS_OY_END); + + GX_SET_REG(cmd, GX_BP_REG_SCISSOROFFSET, 0, 7); + + GX_BP_LOAD_REG(cmd); + __GXData->bpSentNot = GX_FALSE; } -#pragma pop /* 803605D0-803605F8 35AF10 0028+00 0/0 27/27 2/2 .text GXSetClipMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GXSetClipMode(GXClipMode mode) { - nofralloc -#include "asm/dolphin/gx/GXTransform/GXSetClipMode.s" +void GXSetClipMode(GXClipMode mode) { + GX_XF_LOAD_REG(GX_XF_REG_CLIPDISABLE, mode); + __GXData->bpSentNot = GX_TRUE; } -#pragma pop /* 803605F8-8036067C 35AF38 0084+00 1/1 1/1 0/0 .text __GXSetMatrixIndex */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __GXSetMatrixIndex(u32 id) { - nofralloc -#include "asm/dolphin/gx/GXTransform/__GXSetMatrixIndex.s" +void __GXSetMatrixIndex(GXAttr index) { + // Tex4 and after is stored in XF MatrixIndex1 + if (index < GX_VA_TEX4MTXIDX) { + GX_CP_LOAD_REG(GX_CP_REG_MTXIDXA, __GXData->matIdxA); + GX_XF_LOAD_REG(GX_XF_REG_MATRIXINDEX0, __GXData->matIdxA); + } else { + GX_CP_LOAD_REG(GX_CP_REG_MTXIDXB, __GXData->matIdxB); + GX_XF_LOAD_REG(GX_XF_REG_MATRIXINDEX1, __GXData->matIdxB); + } + + __GXData->bpSentNot = GX_TRUE; } -#pragma pop diff --git a/libs/dolphin/gx/Makefile b/libs/dolphin/gx/Makefile index 4b1960fb55a..b610a60e249 100644 --- a/libs/dolphin/gx/Makefile +++ b/libs/dolphin/gx/Makefile @@ -38,8 +38,11 @@ LIBGX_A_O_FILES := \ LIBGX_A_CFLAGS := \ -O4,p \ + -inline auto \ -lang=c \ +$(BUILD_DIR)/libs/dolphin/gx/GXInit.o: LIBGX_A_CFLAGS += -opt nopeephole + LIBGX_A_LDFLAGS := \ -nodefaults \ -fp hard \ diff --git a/src/d/kankyo/d_kankyo_data.cpp b/src/d/kankyo/d_kankyo_data.cpp index fe533803d61..56eaab54e9e 100644 --- a/src/d/kankyo/d_kankyo_data.cpp +++ b/src/d/kankyo/d_kankyo_data.cpp @@ -812,8 +812,8 @@ static GXFogAdjTable S_xfog_table_data[2] = { /* 80056A24-80056A64 051364 0040+00 0/0 2/2 0/0 .text dKyd_xfog_table_set__FUc */ void dKyd_xfog_table_set(u8 tblIdx) { for (int i = 0; i < 10; i++) { - u16 fogAdjTableEntry = S_xfog_table_data[tblIdx & 0xff].r[i]; - g_env_light.mXFogTbl.r[i] = fogAdjTableEntry; + u16 fogAdjTableEntry = S_xfog_table_data[tblIdx & 0xff].fogVals[i]; + g_env_light.mXFogTbl.fogVals[i] = fogAdjTableEntry; } }