From 6d946e8330738df183dd8be4edf4764b477e6e75 Mon Sep 17 00:00:00 2001 From: lepelog Date: Thu, 7 Jan 2021 02:39:56 +0100 Subject: [PATCH] match some Z2Calc functions (#72) * Z2Calc OK * inline definitions in random.h and format * set -enum int compiler flag and fix enum hacks * note for get_ufloat_1 inline * PR suggestions and UB note Co-authored-by: Pheenoh --- Makefile | 2 +- .../JSystem/JKernel/JKRAramHeap/JKRAramHeap.h | 3 - .../JSystem/JKernel/JKRArchive/JKRArchive.h | 7 +- include/JSystem/JKernel/JKRDecomp/JKRDecomp.h | 3 - .../JKernel/JKRDvdRipper/JKRDvdRipper.h | 3 - .../JKernel/JKRMemArchive/JKRMemArchive.h | 1 - include/JSystem/JMath/random.h | 21 +++++ include/Z2AudioLib/Z2Calc/Z2Calc.h | 8 +- include/Z2AudioLib/Z2Calc/asm/func_802A968C.s | 29 ------- include/Z2AudioLib/Z2Calc/asm/func_802A96F4.s | 77 ------------------- include/Z2AudioLib/Z2Calc/asm/func_802A9814.s | 50 ------------ include/Z2AudioLib/Z2Calc/asm/func_802A98D4.s | 29 ------- include/dvd/dvd.h | 1 - include/functions.h | 7 +- include/os/OS.h | 4 +- include/pad/pad.h | 2 - include/variables.h | 16 ++-- libs/Z2AudioLib/Z2Calc.cpp | 75 ++++++++++++------ src/d/d_save/d_save.cpp | 2 +- 19 files changed, 93 insertions(+), 247 deletions(-) delete mode 100644 include/Z2AudioLib/Z2Calc/asm/func_802A968C.s delete mode 100644 include/Z2AudioLib/Z2Calc/asm/func_802A96F4.s delete mode 100644 include/Z2AudioLib/Z2Calc/asm/func_802A9814.s delete mode 100644 include/Z2AudioLib/Z2Calc/asm/func_802A98D4.s diff --git a/Makefile b/Makefile index fe6ac24df9e..59fd7b55f9b 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ ASFLAGS := -mgekko -I include LDFLAGS := -map $(MAP) -fp hard -nodefaults -w off # Compiler flags -CFLAGS := -Cpp_exceptions off -proc gekko -fp hard -O3 -nodefaults -msgstyle gcc $(INCLUDES) +CFLAGS := -Cpp_exceptions off -proc gekko -fp hard -O3 -nodefaults -msgstyle gcc -enum int $(INCLUDES) # for postprocess.py PROCFLAGS := -fprologue-fixup=old_stack diff --git a/include/JSystem/JKernel/JKRAramHeap/JKRAramHeap.h b/include/JSystem/JKernel/JKRAramHeap/JKRAramHeap.h index 1ccb6eb93b3..78b8c892db4 100644 --- a/include/JSystem/JKernel/JKRAramHeap/JKRAramHeap.h +++ b/include/JSystem/JKernel/JKRAramHeap/JKRAramHeap.h @@ -10,9 +10,6 @@ public: enum EAllocMode { HEAD = 0, TAIL = 1, - - __EALLOCMODE_FORCE_ENUM_S32 = INT32_MAX, - __EALLOCMODE_FORCE_ENUM_SIGNED = -1, }; public: diff --git a/include/JSystem/JKernel/JKRArchive/JKRArchive.h b/include/JSystem/JKernel/JKRArchive/JKRArchive.h index e51ae95d9c3..5fe1d4c1775 100644 --- a/include/JSystem/JKernel/JKRArchive/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive/JKRArchive.h @@ -74,17 +74,12 @@ public: MOUNT_ARAM = 2, MOUNT_DVD = 3, MOUNT_COMP = 4, - - __EMOUNT_MODE_FORCE_32BIT = UINT32_MAX, }; enum EMountDirection { UNKNOWN_MOUNT_DIRECTION = 0, HEAD = 1, TAIL = 2, - - __EMOUNT_DIRECTION_FORCE_32BIT = INT32_MAX, - __EMOUNT_DIRECTION_FORCE_SIGNED = -1, }; class CArcName { @@ -120,7 +115,7 @@ public: u32 countResource(void) const; u32 getFileAttribute(u32) const; - EMountMode getMountMode() const { return (EMountMode)mMountMode; } + u32 getMountMode() const { return mMountMode; } protected: bool isSameName(CArcName&, u32, u16) const; diff --git a/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h b/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h index f8f24c2e116..16e1cd699ff 100644 --- a/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h +++ b/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h @@ -41,9 +41,6 @@ enum JKRCompression { COMPRESSION_YAY0 = 1, COMPRESSION_YAZ0 = 2, COMPRESSION_ASR = 3, - - __COMPRESSION_ENUM_FORCE_S32 = INT32_MAX, - __COMPRESSION_ENUM_FORCE_SIGNED = -1, }; class JKRDecomp : public JKRThread { diff --git a/include/JSystem/JKernel/JKRDvdRipper/JKRDvdRipper.h b/include/JSystem/JKernel/JKRDvdRipper/JKRDvdRipper.h index ab6fce7d248..0add634e7b7 100644 --- a/include/JSystem/JKernel/JKRDvdRipper/JKRDvdRipper.h +++ b/include/JSystem/JKernel/JKRDvdRipper/JKRDvdRipper.h @@ -8,7 +8,6 @@ enum JKRExpandSwitch { EXPAND_SWITCH_UNKNOWN0 = 0, EXPAND_SWITCH_UNKNOWN1 = 1, EXPAND_SWITCH_UNKNOWN2 = 2, - __FORCE_EXPAND_SWITCH_32BIT = UINT32_MAX, }; class JKRHeap; @@ -19,8 +18,6 @@ public: UNKNOWN_EALLOC_DIRECTION = 0, FORWARD = 1, BACKWARD = 2, - - __FORCE_EALLOC_DIRECTION_32BIT = UINT32_MAX, }; static void* loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, diff --git a/include/JSystem/JKernel/JKRMemArchive/JKRMemArchive.h b/include/JSystem/JKernel/JKRMemArchive/JKRMemArchive.h index dd20af882de..2c676ebb51a 100644 --- a/include/JSystem/JKernel/JKRMemArchive/JKRMemArchive.h +++ b/include/JSystem/JKernel/JKRMemArchive/JKRMemArchive.h @@ -7,7 +7,6 @@ enum JKRMemBreakFlag { JKRMEMBREAK_FLAG_UNKNOWN0 = 0, JKRMEMBREAK_FLAG_UNKNOWN1 = 1, - _JKRMemBreakFlag_PADDING_32BIT = 0xFFFFFFFF, }; class JKRMemArchive : public JKRArchive { diff --git a/include/JSystem/JMath/random.h b/include/JSystem/JMath/random.h index ffe0f3b1419..ae45b427c64 100644 --- a/include/JSystem/JMath/random.h +++ b/include/JSystem/JMath/random.h @@ -8,6 +8,27 @@ struct TRandom_fast_ { u32 value; TRandom_fast_(u32 value); + u32 get(void) { + value = (value * 0x19660d) + 0x3c6ef35f; + return value; + } + + u32 get_bit32(void) { return this->get(); } + + // due to the float constant, having this function inlined adds that float to data, + // making it not match + float get_ufloat_1(void) { + // !@bug UB: in C++ it's not legal to read from an union member other + // than the last one that was written to. + union { + f32 f; + u32 s; + } out; + out.s = (this->get() >> 9) | 0x3f800000; + return out.f - 1; + } + + void setSeed(u32 seed) { value = seed; } }; } // namespace JMath diff --git a/include/Z2AudioLib/Z2Calc/Z2Calc.h b/include/Z2AudioLib/Z2Calc/Z2Calc.h index f9b5cb63da9..99599b29338 100644 --- a/include/Z2AudioLib/Z2Calc/Z2Calc.h +++ b/include/Z2AudioLib/Z2Calc/Z2Calc.h @@ -1,8 +1,10 @@ +#include "JSystem/JMath/random.h" #include "global.h" namespace Z2Calc { -struct CurveSign { - // temp +enum CurveSign { + CURVE_SIGN_0 = 0, + CURVE_SIGN_1 = 1, }; struct FNoise1f { @@ -20,4 +22,4 @@ float linearTransform(float, float, float, float, float, bool); float getParamByExp(float, float, float, float, float, float, Z2Calc::CurveSign); float getRandom(float, float, float); float getRandom_0_1(void); -} // namespace Z2Calc \ No newline at end of file +} // namespace Z2Calc diff --git a/include/Z2AudioLib/Z2Calc/asm/func_802A968C.s b/include/Z2AudioLib/Z2Calc/asm/func_802A968C.s deleted file mode 100644 index 8064a661ad4..00000000000 --- a/include/Z2AudioLib/Z2Calc/asm/func_802A968C.s +++ /dev/null @@ -1,29 +0,0 @@ -/* 802A968C 002A65CC EC C1 10 28 */ fsubs f6, f1, f2 -/* 802A9690 002A65D0 EC 25 20 28 */ fsubs f1, f5, f4 -/* 802A9694 002A65D4 EC 03 10 28 */ fsubs f0, f3, f2 -/* 802A9698 002A65D8 EC 01 00 24 */ fdivs f0, f1, f0 -/* 802A969C 002A65DC EC 06 00 32 */ fmuls f0, f6, f0 -/* 802A96A0 002A65E0 EC 24 00 2A */ fadds f1, f4, f0 -/* 802A96A4 002A65E4 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 802A96A8 002A65E8 4C 82 00 20 */ bnelr -/* 802A96AC 002A65EC FC 04 28 40 */ fcmpo cr0, f4, f5 -/* 802A96B0 002A65F0 40 80 00 24 */ bge lbl_802A96D4 -/* 802A96B4 002A65F4 FC 01 28 40 */ fcmpo cr0, f1, f5 -/* 802A96B8 002A65F8 40 81 00 0C */ ble lbl_802A96C4 -/* 802A96BC 002A65FC FC 20 28 90 */ fmr f1, f5 -/* 802A96C0 002A6600 4E 80 00 20 */ blr -lbl_802A96C4: -/* 802A96C4 002A6604 FC 01 20 40 */ fcmpo cr0, f1, f4 -/* 802A96C8 002A6608 4C 80 00 20 */ bgelr -/* 802A96CC 002A660C FC 20 20 90 */ fmr f1, f4 -/* 802A96D0 002A6610 4E 80 00 20 */ blr -lbl_802A96D4: -/* 802A96D4 002A6614 FC 01 20 40 */ fcmpo cr0, f1, f4 -/* 802A96D8 002A6618 40 81 00 0C */ ble lbl_802A96E4 -/* 802A96DC 002A661C FC 20 20 90 */ fmr f1, f4 -/* 802A96E0 002A6620 4E 80 00 20 */ blr -lbl_802A96E4: -/* 802A96E4 002A6624 FC 01 28 40 */ fcmpo cr0, f1, f5 -/* 802A96E8 002A6628 4C 80 00 20 */ bgelr -/* 802A96EC 002A662C FC 20 28 90 */ fmr f1, f5 -/* 802A96F0 002A6630 4E 80 00 20 */ blr \ No newline at end of file diff --git a/include/Z2AudioLib/Z2Calc/asm/func_802A96F4.s b/include/Z2AudioLib/Z2Calc/asm/func_802A96F4.s deleted file mode 100644 index 50c0657b2aa..00000000000 --- a/include/Z2AudioLib/Z2Calc/asm/func_802A96F4.s +++ /dev/null @@ -1,77 +0,0 @@ -/* 802A96F4 002A6634 94 21 FF B0 */ stwu r1, -0x50(r1) -/* 802A96F8 002A6638 7C 08 02 A6 */ mflr r0 -/* 802A96FC 002A663C 90 01 00 54 */ stw r0, 0x54(r1) -/* 802A9700 002A6640 DB E1 00 40 */ stfd f31, 0x40(r1) -/* 802A9704 002A6644 F3 E1 00 48 */ psq_st f31, 72(r1), 0, 0 -/* 802A9708 002A6648 DB C1 00 30 */ stfd f30, 0x30(r1) -/* 802A970C 002A664C F3 C1 00 38 */ psq_st f30, 56(r1), 0, 0 -/* 802A9710 002A6650 DB A1 00 20 */ stfd f29, 0x20(r1) -/* 802A9714 002A6654 F3 A1 00 28 */ psq_st f29, 40(r1), 0, 0 -/* 802A9718 002A6658 DB 81 00 10 */ stfd f28, 0x10(r1) -/* 802A971C 002A665C F3 81 00 18 */ psq_st f28, 24(r1), 0, 0 -/* 802A9720 002A6660 FF 80 20 90 */ fmr f28, f4 -/* 802A9724 002A6664 FF A0 28 90 */ fmr f29, f5 -/* 802A9728 002A6668 FF C0 30 90 */ fmr f30, f6 -/* 802A972C 002A666C 2C 03 00 01 */ cmpwi r3, 1 -/* 802A9730 002A6670 40 82 00 44 */ bne lbl_802A9774 -/* 802A9734 002A6674 C0 82 BE 28 */ lfs f4, lbl_80455828-_SDA2_BASE_(r2) -/* 802A9738 002A6678 FC A0 E0 90 */ fmr f5, f28 -/* 802A973C 002A667C 38 60 00 01 */ li r3, 1 -/* 802A9740 002A6680 4B FF FF 4D */ bl linearTransform__6Z2CalcFfffffb -/* 802A9744 002A6684 48 0C 2F FD */ bl func_8036C740 -/* 802A9748 002A6688 FF E0 08 18 */ frsp f31, f1 -/* 802A974C 002A668C FC 20 E0 90 */ fmr f1, f28 -/* 802A9750 002A6690 48 0C 2F F1 */ bl func_8036C740 -/* 802A9754 002A6694 FC 60 08 18 */ frsp f3, f1 -/* 802A9758 002A6698 FC 20 F8 90 */ fmr f1, f31 -/* 802A975C 002A669C C0 42 BE 2C */ lfs f2, lbl_8045582C-_SDA2_BASE_(r2) -/* 802A9760 002A66A0 FC 80 E8 90 */ fmr f4, f29 -/* 802A9764 002A66A4 FC A0 F0 90 */ fmr f5, f30 -/* 802A9768 002A66A8 38 60 00 01 */ li r3, 1 -/* 802A976C 002A66AC 4B FF FF 21 */ bl linearTransform__6Z2CalcFfffffb -/* 802A9770 002A66B0 48 00 00 58 */ b lbl_802A97C8 -lbl_802A9774: -/* 802A9774 002A66B4 2C 03 00 00 */ cmpwi r3, 0 -/* 802A9778 002A66B8 40 82 00 40 */ bne lbl_802A97B8 -/* 802A977C 002A66BC C0 A2 BE 28 */ lfs f5, lbl_80455828-_SDA2_BASE_(r2) -/* 802A9780 002A66C0 38 60 00 01 */ li r3, 1 -/* 802A9784 002A66C4 4B FF FF 09 */ bl linearTransform__6Z2CalcFfffffb -/* 802A9788 002A66C8 48 0C 2F B9 */ bl func_8036C740 -/* 802A978C 002A66CC FF E0 08 18 */ frsp f31, f1 -/* 802A9790 002A66D0 FC 20 E0 90 */ fmr f1, f28 -/* 802A9794 002A66D4 48 0C 2F AD */ bl func_8036C740 -/* 802A9798 002A66D8 FC 40 08 18 */ frsp f2, f1 -/* 802A979C 002A66DC FC 20 F8 90 */ fmr f1, f31 -/* 802A97A0 002A66E0 C0 62 BE 2C */ lfs f3, lbl_8045582C-_SDA2_BASE_(r2) -/* 802A97A4 002A66E4 FC 80 E8 90 */ fmr f4, f29 -/* 802A97A8 002A66E8 FC A0 F0 90 */ fmr f5, f30 -/* 802A97AC 002A66EC 38 60 00 01 */ li r3, 1 -/* 802A97B0 002A66F0 4B FF FE DD */ bl linearTransform__6Z2CalcFfffffb -/* 802A97B4 002A66F4 48 00 00 14 */ b lbl_802A97C8 -lbl_802A97B8: -/* 802A97B8 002A66F8 FC 80 E8 90 */ fmr f4, f29 -/* 802A97BC 002A66FC FC A0 F0 90 */ fmr f5, f30 -/* 802A97C0 002A6700 38 60 00 00 */ li r3, 0 -/* 802A97C4 002A6704 4B FF FE C9 */ bl linearTransform__6Z2CalcFfffffb -lbl_802A97C8: -/* 802A97C8 002A6708 FC 01 F0 40 */ fcmpo cr0, f1, f30 -/* 802A97CC 002A670C 40 81 00 0C */ ble lbl_802A97D8 -/* 802A97D0 002A6710 FC 20 F0 90 */ fmr f1, f30 -/* 802A97D4 002A6714 48 00 00 10 */ b lbl_802A97E4 -lbl_802A97D8: -/* 802A97D8 002A6718 FC 01 E8 40 */ fcmpo cr0, f1, f29 -/* 802A97DC 002A671C 40 80 00 08 */ bge lbl_802A97E4 -/* 802A97E0 002A6720 FC 20 E8 90 */ fmr f1, f29 -lbl_802A97E4: -/* 802A97E4 002A6724 E3 E1 00 48 */ psq_l f31, 72(r1), 0, 0 -/* 802A97E8 002A6728 CB E1 00 40 */ lfd f31, 0x40(r1) -/* 802A97EC 002A672C E3 C1 00 38 */ psq_l f30, 56(r1), 0, 0 -/* 802A97F0 002A6730 CB C1 00 30 */ lfd f30, 0x30(r1) -/* 802A97F4 002A6734 E3 A1 00 28 */ psq_l f29, 40(r1), 0, 0 -/* 802A97F8 002A6738 CB A1 00 20 */ lfd f29, 0x20(r1) -/* 802A97FC 002A673C E3 81 00 18 */ psq_l f28, 24(r1), 0, 0 -/* 802A9800 002A6740 CB 81 00 10 */ lfd f28, 0x10(r1) -/* 802A9804 002A6744 80 01 00 54 */ lwz r0, 0x54(r1) -/* 802A9808 002A6748 7C 08 03 A6 */ mtlr r0 -/* 802A980C 002A674C 38 21 00 50 */ addi r1, r1, 0x50 -/* 802A9810 002A6750 4E 80 00 20 */ blr \ No newline at end of file diff --git a/include/Z2AudioLib/Z2Calc/asm/func_802A9814.s b/include/Z2AudioLib/Z2Calc/asm/func_802A9814.s deleted file mode 100644 index 8b1b673b309..00000000000 --- a/include/Z2AudioLib/Z2Calc/asm/func_802A9814.s +++ /dev/null @@ -1,50 +0,0 @@ -/* 802A9814 002A6754 94 21 FF A0 */ stwu r1, -0x60(r1) -/* 802A9818 002A6758 7C 08 02 A6 */ mflr r0 -/* 802A981C 002A675C 90 01 00 64 */ stw r0, 0x64(r1) -/* 802A9820 002A6760 DB E1 00 50 */ stfd f31, 0x50(r1) -/* 802A9824 002A6764 F3 E1 00 58 */ psq_st f31, 88(r1), 0, 0 -/* 802A9828 002A6768 DB C1 00 40 */ stfd f30, 0x40(r1) -/* 802A982C 002A676C F3 C1 00 48 */ psq_st f30, 72(r1), 0, 0 -/* 802A9830 002A6770 DB A1 00 30 */ stfd f29, 0x30(r1) -/* 802A9834 002A6774 F3 A1 00 38 */ psq_st f29, 56(r1), 0, 0 -/* 802A9838 002A6778 DB 81 00 20 */ stfd f28, 0x20(r1) -/* 802A983C 002A677C F3 81 00 28 */ psq_st f28, 40(r1), 0, 0 -/* 802A9840 002A6780 DB 61 00 10 */ stfd f27, 0x10(r1) -/* 802A9844 002A6784 F3 61 00 18 */ psq_st f27, 24(r1), 0, 0 -/* 802A9848 002A6788 FF 60 08 90 */ fmr f27, f1 -/* 802A984C 002A678C FF 80 10 90 */ fmr f28, f2 -/* 802A9850 002A6790 FF A0 18 90 */ fmr f29, f3 -/* 802A9854 002A6794 C0 02 BE 30 */ lfs f0, lbl_80455830-_SDA2_BASE_(r2) -/* 802A9858 002A6798 EF E0 07 72 */ fmuls f31, f0, f29 -/* 802A985C 002A679C C0 22 BE 34 */ lfs f1, lbl_80455834-_SDA2_BASE_(r2) -/* 802A9860 002A67A0 C0 02 BE 2C */ lfs f0, lbl_8045582C-_SDA2_BASE_(r2) -/* 802A9864 002A67A4 EC 00 E8 28 */ fsubs f0, f0, f29 -/* 802A9868 002A67A8 EF C1 00 32 */ fmuls f30, f1, f0 -/* 802A986C 002A67AC 48 00 00 69 */ bl getRandom_0_1__6Z2CalcFv -/* 802A9870 002A67B0 FC 01 E8 40 */ fcmpo cr0, f1, f29 -/* 802A9874 002A67B4 40 80 00 0C */ bge lbl_802A9880 -/* 802A9878 002A67B8 FC 00 F8 90 */ fmr f0, f31 -/* 802A987C 002A67BC 48 00 00 08 */ b lbl_802A9884 -lbl_802A9880: -/* 802A9880 002A67C0 FC 00 F0 90 */ fmr f0, f30 -lbl_802A9884: -/* 802A9884 002A67C4 EF 7B 00 32 */ fmuls f27, f27, f0 -/* 802A9888 002A67C8 48 00 00 4D */ bl getRandom_0_1__6Z2CalcFv -/* 802A988C 002A67CC FC 40 E0 90 */ fmr f2, f28 -/* 802A9890 002A67D0 48 0C 2E F1 */ bl func_8036C780 -/* 802A9894 002A67D4 FC 00 08 18 */ frsp f0, f1 -/* 802A9898 002A67D8 EC 20 06 F2 */ fmuls f1, f0, f27 -/* 802A989C 002A67DC E3 E1 00 58 */ psq_l f31, 88(r1), 0, 0 -/* 802A98A0 002A67E0 CB E1 00 50 */ lfd f31, 0x50(r1) -/* 802A98A4 002A67E4 E3 C1 00 48 */ psq_l f30, 72(r1), 0, 0 -/* 802A98A8 002A67E8 CB C1 00 40 */ lfd f30, 0x40(r1) -/* 802A98AC 002A67EC E3 A1 00 38 */ psq_l f29, 56(r1), 0, 0 -/* 802A98B0 002A67F0 CB A1 00 30 */ lfd f29, 0x30(r1) -/* 802A98B4 002A67F4 E3 81 00 28 */ psq_l f28, 40(r1), 0, 0 -/* 802A98B8 002A67F8 CB 81 00 20 */ lfd f28, 0x20(r1) -/* 802A98BC 002A67FC E3 61 00 18 */ psq_l f27, 24(r1), 0, 0 -/* 802A98C0 002A6800 CB 61 00 10 */ lfd f27, 0x10(r1) -/* 802A98C4 002A6804 80 01 00 64 */ lwz r0, 0x64(r1) -/* 802A98C8 002A6808 7C 08 03 A6 */ mtlr r0 -/* 802A98CC 002A680C 38 21 00 60 */ addi r1, r1, 0x60 -/* 802A98D0 002A6810 4E 80 00 20 */ blr \ No newline at end of file diff --git a/include/Z2AudioLib/Z2Calc/asm/func_802A98D4.s b/include/Z2AudioLib/Z2Calc/asm/func_802A98D4.s deleted file mode 100644 index 5f793720492..00000000000 --- a/include/Z2AudioLib/Z2Calc/asm/func_802A98D4.s +++ /dev/null @@ -1,29 +0,0 @@ -/* 802A98D4 002A6814 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802A98D8 002A6818 7C 08 02 A6 */ mflr r0 -/* 802A98DC 002A681C 90 01 00 14 */ stw r0, 0x14(r1) -/* 802A98E0 002A6820 88 0D 8D B0 */ lbz r0, lbl_80451330-_SDA_BASE_(r13) -/* 802A98E4 002A6824 7C 00 07 75 */ extsb. r0, r0 -/* 802A98E8 002A6828 40 82 00 18 */ bne lbl_802A9900 -/* 802A98EC 002A682C 38 6D 8D B4 */ subi r3, r13, 0x724c -/* 802A98F0 002A6830 38 80 00 00 */ li r4, 0 -/* 802A98F4 002A6834 48 09 01 F1 */ bl __ct__Q25JMath13TRandom_fast_FUl -/* 802A98F8 002A6838 38 00 00 01 */ li r0, 1 -/* 802A98FC 002A683C 98 0D 8D B0 */ stb r0, lbl_80451330-_SDA_BASE_(r13) -lbl_802A9900: -/* 802A9900 002A6840 80 8D 8D B4 */ lwz r4, lbl_80451334-_SDA_BASE_(r13) -/* 802A9904 002A6844 3C 60 00 19 */ lis r3, 0x0019660D@ha -/* 802A9908 002A6848 38 03 66 0D */ addi r0, r3, 0x0019660D@l -/* 802A990C 002A684C 7C 64 01 D6 */ mullw r3, r4, r0 -/* 802A9910 002A6850 3C 63 3C 6F */ addis r3, r3, 0x3c6f -/* 802A9914 002A6854 38 03 F3 5F */ addi r0, r3, -3233 -/* 802A9918 002A6858 90 0D 8D B4 */ stw r0, lbl_80451334-_SDA_BASE_(r13) -/* 802A991C 002A685C 54 00 BA 7E */ srwi r0, r0, 9 -/* 802A9920 002A6860 64 00 3F 80 */ oris r0, r0, 0x3f80 -/* 802A9924 002A6864 90 01 00 08 */ stw r0, 8(r1) -/* 802A9928 002A6868 C0 21 00 08 */ lfs f1, 8(r1) -/* 802A992C 002A686C C0 02 BE 2C */ lfs f0, lbl_8045582C-_SDA2_BASE_(r2) -/* 802A9930 002A6870 EC 21 00 28 */ fsubs f1, f1, f0 -/* 802A9934 002A6874 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802A9938 002A6878 7C 08 03 A6 */ mtlr r0 -/* 802A993C 002A687C 38 21 00 10 */ addi r1, r1, 0x10 -/* 802A9940 002A6880 4E 80 00 20 */ blr \ No newline at end of file diff --git a/include/dvd/dvd.h b/include/dvd/dvd.h index 2ee6a943e10..61cb91684ff 100644 --- a/include/dvd/dvd.h +++ b/include/dvd/dvd.h @@ -16,7 +16,6 @@ typedef enum DVDState { DVD_STATE_CANCELED = 0xa, // lmao they skipped 9 DVD_STATE_RETRY = 0xb, DVD_STATE_FATAL_ERROR = -1, - __DVD_STATE_ENUM_FORCE_S32 = INT32_MAX, } DVDState; } diff --git a/include/functions.h b/include/functions.h index b88076a052e..c9ae4e35bdb 100644 --- a/include/functions.h +++ b/include/functions.h @@ -587,8 +587,10 @@ void Z2SeqMgr_NS_setBattleLastHit(void); // Z2Calc extern "C" { void linearTransform__6Z2CalcFfffffb(void); -void func_8036C740(void); -void func_8036C780(void); +// MSL_C.PPCEABI.bare.H::exp +double func_8036C740(double); +// MSL_C.PPCEABI.bare.H::pow +double func_8036C780(double, double); void getRandom_0_1__6Z2CalcFv(void); void getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign(void); } @@ -5601,7 +5603,6 @@ void mDoMtx_stack_c_NS_transM(float, float, float); void setCameraPolygonPos__11Z2StatusMgrFP3Vec(Vec*); void setCameraGroupInfo__11Z2StatusMgrFUc(u8); - void Set__8cM3dGSphFRC4cXyzf(void); void __pl__FsRC7cSAngle(void); void __mi__FsRC7cSAngle(void); diff --git a/include/os/OS.h b/include/os/OS.h index f867abce9b0..b3cff64bf09 100644 --- a/include/os/OS.h +++ b/include/os/OS.h @@ -93,8 +93,6 @@ typedef s32 OSHeapHandle; typedef enum OSSoundMode { SOUND_MODE_MONO = 0, SOUND_MODE_STEREO = 1, - - __SOUND_MODE_FORCE_ENUM_U32 = 0xffffffff, } OSSoundMode; typedef u16 OSThreadState; @@ -151,7 +149,7 @@ BOOL OSJamMessage(OSMessageQueue* queue, OSMessage message, int flags); s32 OSGetConsoleType(void); s32 OSGetResetCode(void); -OSSoundMode OSGetSoundMode(void); +u32 OSGetSoundMode(void); void OSSetSoundMode(OSSoundMode mode); void OSReportInit(void); diff --git a/include/pad/pad.h b/include/pad/pad.h index 08a2bda8e7b..d926bc59856 100644 --- a/include/pad/pad.h +++ b/include/pad/pad.h @@ -12,8 +12,6 @@ typedef enum PADMask { PAD_CHAN2_BIT = (1 << 29), PAD_CHAN1_BIT = (1 << 30), PAD_CHAN0_BIT = (1 << 31), - - __PAD_MASK_FORCE_ENUM_U32 = 0xffffffff, } PADMask; typedef struct PADStatus { diff --git a/include/variables.h b/include/variables.h index e4f37058f20..977f8474a22 100644 --- a/include/variables.h +++ b/include/variables.h @@ -167,16 +167,16 @@ extern u32 lbl_80455D0C; extern u32 lbl_80455D18; // func_802A96F4 -extern u32 lbl_80455828; -extern float lbl_8045582C; +// Z2AudioLib::@380, 0.0 +extern f32 lbl_80455828; +// Z2AudioLib::@381, 1.0 +extern f32 lbl_8045582C; // func_802A9814 -extern u32 lbl_80455830; -extern u32 lbl_80455834; - -// func_802A98D4 -extern u32 lbl_80451330; -extern u32 lbl_80451334; +// Z2AudioLib::@396, 2.0 +extern f32 lbl_80455830; +// Z2AudioLib::@397, -2.0 +extern f32 lbl_80455834; // Z2SoundLib SInstance struct Z2SceneMgr; diff --git a/libs/Z2AudioLib/Z2Calc.cpp b/libs/Z2AudioLib/Z2Calc.cpp index 27985db4b34..8ef3cfbdf4d 100644 --- a/libs/Z2AudioLib/Z2Calc.cpp +++ b/libs/Z2AudioLib/Z2Calc.cpp @@ -1,8 +1,10 @@ -#include "Z2AudioLib/Z2Calc/Z2calc.h" -#include "JSystem/JMath/random.h" +#include "Z2AudioLib/Z2Calc/Z2Calc.h" + +// s_is_oRandom_initialized +extern s8 lbl_80451330; +// Z2AudioLib::oRandom$401 +extern JMath::TRandom_fast_ lbl_80451334; -// 1 instruction off -#ifdef NONMATCHING float Z2Calc::linearTransform(float param1, float param2, float param3, float param4, float param5, bool param6) { float temp; @@ -14,10 +16,10 @@ float Z2Calc::linearTransform(float param1, float param2, float param3, float pa } else if (param4 < param5) { if (temp > param5) { return param5; - } else if (temp >= param4) { // something wrong here idk - return temp; - } else { + } else if (temp < param4) { return param4; + } else { + return temp; } } else if (temp > param4) { return param4; @@ -27,27 +29,52 @@ float Z2Calc::linearTransform(float param1, float param2, float param3, float pa return temp; } } -#else -asm float Z2Calc::linearTransform(float param1, float param2, float param3, float param4, - float param5, bool param6) { - nofralloc -#include "Z2AudioLib/Z2Calc/asm/func_802A968C.s" -} -#endif -asm float Z2Calc::getParamByExp(float, float, float, float, float, float, Z2Calc::CurveSign) { - nofralloc -#include "Z2AudioLib/Z2Calc/asm/func_802A96F4.s" +float Z2Calc::getParamByExp(float f1, float f2, float f3, float f4, float f5, float f6, + Z2Calc::CurveSign sign) { + float out; + if (sign == Z2Calc::CURVE_SIGN_1) { + float tmp = + func_8036C740(Z2Calc::linearTransform(f1, f2, f3, /* 0.0 */ lbl_80455828, f4, true)); + out = Z2Calc::linearTransform(tmp, /* 1.0 */ lbl_8045582C, func_8036C740(f4), f5, f6, true); + } else if (sign == Z2Calc::CURVE_SIGN_0) { + float tmp = + func_8036C740(Z2Calc::linearTransform(f1, f2, f3, f4, /* 0.0 */ lbl_80455828, true)); + out = Z2Calc::linearTransform(tmp, func_8036C740(f4), /* 1.0 */ lbl_8045582C, f5, f6, true); + } else { + out = Z2Calc::linearTransform(f1, f2, f3, f5, f6, false); + } + if (out > f6) { + return f6; + } + if (out < f5) { + return f5; + } + return out; } -asm float Z2Calc::getRandom(float, float, float) { - nofralloc -#include "Z2AudioLib/Z2Calc/asm/func_802A9814.s" +float Z2Calc::getRandom(float f1, float f2, float f3) { + float tmp = /* 2.0 */ lbl_80455830 * f3; + float tmp2 = (/* 1.0 */ lbl_8045582C - f3) * /* -2.0 */ lbl_80455834; + f1 *= Z2Calc::getRandom_0_1() < f3 ? tmp : tmp2; + float tmp3 = func_8036C780(Z2Calc::getRandom_0_1(), f2); + return tmp3 * f1; } -asm float Z2Calc::getRandom_0_1(void) { - nofralloc -#include "Z2AudioLib/Z2Calc/asm/func_802A98D4.s" +float Z2Calc::getRandom_0_1(void) { + // this is really just + // static JMath::TRandom_fast_ lbl_80451334(0); + if (!lbl_80451330) { + __ct__Q25JMath13TRandom_fast_FUl(&lbl_80451334, 0); + lbl_80451330 = true; + } + // this is really just lbl_80451334.get_ufloat_1() + union { + f32 f; + u32 s; + } out; + out.s = (lbl_80451334.get() >> 9) | 0x3f800000; + return out.f - lbl_8045582C; } void Z2Calc::FNoise1f::setParam(float param1, float param2, float param3) { @@ -102,4 +129,4 @@ float Z2Calc::FNoise1f::calcNoise1f(void) { this->unk4 = temp2; return this->unk0; -} \ No newline at end of file +} diff --git a/src/d/d_save/d_save.cpp b/src/d/d_save/d_save.cpp index e788fc4be9b..f946d3c8a6d 100644 --- a/src/d/d_save/d_save.cpp +++ b/src/d/d_save/d_save.cpp @@ -919,7 +919,7 @@ asm void dSv_player_info_c::init(void) { #endif void dSv_player_config_c::init(void) { - OSSoundMode os_mSoundMode; + u32 os_mSoundMode; this->unk0 = 1; os_mSoundMode = OSGetSoundMode();