Merge branch 'master' of https://github.com/zeldaret/tp into pr___

This commit is contained in:
TakaRikka 2021-09-27 15:46:25 -07:00
commit f041c554cb
17 changed files with 224 additions and 466 deletions

View File

@ -1,62 +0,0 @@
lbl_802E4CF4:
/* 802E4CF4 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802E4CF8 7C 08 02 A6 */ mflr r0
/* 802E4CFC 90 01 00 14 */ stw r0, 0x14(r1)
/* 802E4D00 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802E4D04 93 C1 00 08 */ stw r30, 8(r1)
/* 802E4D08 7C 7F 1B 78 */ mr r31, r3
/* 802E4D0C 7C 9E 23 78 */ mr r30, r4
/* 802E4D10 3C 60 80 3D */ lis r3, __vt__8JUTVideo@ha /* 0x803CC980@ha */
/* 802E4D14 38 03 C9 80 */ addi r0, r3, __vt__8JUTVideo@l /* 0x803CC980@l */
/* 802E4D18 90 1F 00 00 */ stw r0, 0(r31)
/* 802E4D1C 38 00 00 00 */ li r0, 0
/* 802E4D20 90 1F 00 04 */ stw r0, 4(r31)
/* 802E4D24 48 06 77 F1 */ bl VIInit
/* 802E4D28 38 00 00 01 */ li r0, 1
/* 802E4D2C 98 1F 00 2C */ stb r0, 0x2c(r31)
/* 802E4D30 38 00 00 02 */ li r0, 2
/* 802E4D34 90 1F 00 30 */ stw r0, 0x30(r31)
/* 802E4D38 7F E3 FB 78 */ mr r3, r31
/* 802E4D3C 7F C4 F3 78 */ mr r4, r30
/* 802E4D40 48 00 04 59 */ bl setRenderMode__8JUTVideoFPC16_GXRenderModeObj
/* 802E4D44 38 60 00 01 */ li r3, 1
/* 802E4D48 48 06 8A F9 */ bl VISetBlack
/* 802E4D4C 48 06 89 49 */ bl VIFlush
/* 802E4D50 38 00 00 00 */ li r0, 0
/* 802E4D54 90 1F 00 08 */ stw r0, 8(r31)
/* 802E4D58 48 06 8B 65 */ bl VIGetRetraceCount
/* 802E4D5C 90 7F 00 0C */ stw r3, 0xc(r31)
/* 802E4D60 38 00 00 01 */ li r0, 1
/* 802E4D64 90 1F 00 10 */ stw r0, 0x10(r31)
/* 802E4D68 38 00 00 00 */ li r0, 0
/* 802E4D6C 90 1F 00 18 */ stw r0, 0x18(r31)
/* 802E4D70 48 05 D9 A5 */ bl OSGetTick
/* 802E4D74 90 6D 8F BC */ stw r3, sVideoLastTick__8JUTVideo(r13)
/* 802E4D78 3C 60 00 0A */ lis r3, 0x000A /* 0x000A3930@ha */
/* 802E4D7C 38 03 39 30 */ addi r0, r3, 0x3930 /* 0x000A3930@l */
/* 802E4D80 90 0D 8F C0 */ stw r0, sVideoInterval__8JUTVideo(r13)
/* 802E4D84 3C 60 80 2E */ lis r3, preRetraceProc__8JUTVideoFUl@ha /* 0x802E4E50@ha */
/* 802E4D88 38 63 4E 50 */ addi r3, r3, preRetraceProc__8JUTVideoFUl@l /* 0x802E4E50@l */
/* 802E4D8C 48 06 74 55 */ bl VISetPreRetraceCallback
/* 802E4D90 90 7F 00 1C */ stw r3, 0x1c(r31)
/* 802E4D94 3C 60 80 2E */ lis r3, postRetraceProc__8JUTVideoFUl@ha /* 0x802E5144@ha */
/* 802E4D98 38 63 51 44 */ addi r3, r3, postRetraceProc__8JUTVideoFUl@l /* 0x802E5144@l */
/* 802E4D9C 48 06 74 89 */ bl VISetPostRetraceCallback
/* 802E4DA0 90 7F 00 20 */ stw r3, 0x20(r31)
/* 802E4DA4 38 00 00 00 */ li r0, 0
/* 802E4DA8 90 1F 00 24 */ stw r0, 0x24(r31)
/* 802E4DAC 90 1F 00 28 */ stw r0, 0x28(r31)
/* 802E4DB0 38 7F 00 38 */ addi r3, r31, 0x38
/* 802E4DB4 38 9F 00 34 */ addi r4, r31, 0x34
/* 802E4DB8 38 A0 00 01 */ li r5, 1
/* 802E4DBC 48 05 9B D9 */ bl OSInitMessageQueue
/* 802E4DC0 3C 60 80 2E */ lis r3, drawDoneCallback__8JUTVideoFv@ha /* 0x802E50BC@ha */
/* 802E4DC4 38 63 50 BC */ addi r3, r3, drawDoneCallback__8JUTVideoFv@l /* 0x802E50BC@l */
/* 802E4DC8 48 07 77 E5 */ bl GXSetDrawDoneCallback
/* 802E4DCC 7F E3 FB 78 */ mr r3, r31
/* 802E4DD0 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802E4DD4 83 C1 00 08 */ lwz r30, 8(r1)
/* 802E4DD8 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802E4DDC 7C 08 03 A6 */ mtlr r0
/* 802E4DE0 38 21 00 10 */ addi r1, r1, 0x10
/* 802E4DE4 4E 80 00 20 */ blr

View File

@ -1,39 +0,0 @@
lbl_802E50BC:
/* 802E50BC 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802E50C0 7C 08 02 A6 */ mflr r0
/* 802E50C4 90 01 00 14 */ stw r0, 0x14(r1)
/* 802E50C8 80 8D 8F D0 */ lwz r4, sManager__6JUTXfb(r13)
/* 802E50CC 28 04 00 00 */ cmplwi r4, 0
/* 802E50D0 41 82 00 64 */ beq lbl_802E5134
/* 802E50D4 38 60 00 00 */ li r3, 0
/* 802E50D8 98 6D 8F C4 */ stb r3, data_80451544(r13)
/* 802E50DC 80 04 00 10 */ lwz r0, 0x10(r4)
/* 802E50E0 2C 00 00 01 */ cmpwi r0, 1
/* 802E50E4 40 82 00 50 */ bne lbl_802E5134
/* 802E50E8 80 04 00 1C */ lwz r0, 0x1c(r4)
/* 802E50EC 2C 00 00 01 */ cmpwi r0, 1
/* 802E50F0 40 82 00 44 */ bne lbl_802E5134
/* 802E50F4 90 64 00 1C */ stw r3, 0x1c(r4)
/* 802E50F8 A8 A4 00 16 */ lha r5, 0x16(r4)
/* 802E50FC 7C A0 07 35 */ extsh. r0, r5
/* 802E5100 41 80 00 0C */ blt lbl_802E510C
/* 802E5104 54 A0 10 3A */ slwi r0, r5, 2
/* 802E5108 7C 64 00 2E */ lwzx r3, r4, r0
lbl_802E510C:
/* 802E510C 28 03 00 00 */ cmplwi r3, 0
/* 802E5110 41 82 00 24 */ beq lbl_802E5134
/* 802E5114 7C A0 07 35 */ extsh. r0, r5
/* 802E5118 41 80 00 10 */ blt lbl_802E5128
/* 802E511C 54 A0 10 3A */ slwi r0, r5, 2
/* 802E5120 7C 64 00 2E */ lwzx r3, r4, r0
/* 802E5124 48 00 00 08 */ b lbl_802E512C
lbl_802E5128:
/* 802E5128 38 60 00 00 */ li r3, 0
lbl_802E512C:
/* 802E512C 48 06 86 99 */ bl VISetNextFrameBuffer
/* 802E5130 48 06 85 65 */ bl VIFlush
lbl_802E5134:
/* 802E5134 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802E5138 7C 08 03 A6 */ mtlr r0
/* 802E513C 38 21 00 10 */ addi r1, r1, 0x10
/* 802E5140 4E 80 00 20 */ blr

View File

@ -1,24 +0,0 @@
lbl_802E5144:
/* 802E5144 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802E5148 7C 08 02 A6 */ mflr r0
/* 802E514C 90 01 00 14 */ stw r0, 0x14(r1)
/* 802E5150 80 8D 8F B8 */ lwz r4, sManager__8JUTVideo(r13)
/* 802E5154 28 04 00 00 */ cmplwi r4, 0
/* 802E5158 41 82 00 30 */ beq lbl_802E5188
/* 802E515C 81 84 00 28 */ lwz r12, 0x28(r4)
/* 802E5160 28 0C 00 00 */ cmplwi r12, 0
/* 802E5164 41 82 00 0C */ beq lbl_802E5170
/* 802E5168 7D 89 03 A6 */ mtctr r12
/* 802E516C 4E 80 04 21 */ bctrl
lbl_802E5170:
/* 802E5170 48 06 87 4D */ bl VIGetRetraceCount
/* 802E5174 7C 64 1B 78 */ mr r4, r3
/* 802E5178 80 6D 8F B8 */ lwz r3, sManager__8JUTVideo(r13)
/* 802E517C 38 63 00 38 */ addi r3, r3, 0x38
/* 802E5180 38 A0 00 00 */ li r5, 0
/* 802E5184 48 05 98 71 */ bl OSSendMessage
lbl_802E5188:
/* 802E5188 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802E518C 7C 08 03 A6 */ mtlr r0
/* 802E5190 38 21 00 10 */ addi r1, r1, 0x10
/* 802E5194 4E 80 00 20 */ blr

View File

@ -1,164 +0,0 @@
lbl_802E4E50:
/* 802E4E50 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802E4E54 7C 08 02 A6 */ mflr r0
/* 802E4E58 90 01 00 14 */ stw r0, 0x14(r1)
/* 802E4E5C 93 E1 00 0C */ stw r31, 0xc(r1)
/* 802E4E60 80 8D 8F B8 */ lwz r4, sManager__8JUTVideo(r13)
/* 802E4E64 28 04 00 00 */ cmplwi r4, 0
/* 802E4E68 41 82 02 0C */ beq lbl_802E5074
/* 802E4E6C 81 84 00 24 */ lwz r12, 0x24(r4)
/* 802E4E70 28 0C 00 00 */ cmplwi r12, 0
/* 802E4E74 41 82 00 0C */ beq lbl_802E4E80
/* 802E4E78 7D 89 03 A6 */ mtctr r12
/* 802E4E7C 4E 80 04 21 */ bctrl
lbl_802E4E80:
/* 802E4E80 48 05 D8 95 */ bl OSGetTick
/* 802E4E84 80 0D 8F BC */ lwz r0, sVideoLastTick__8JUTVideo(r13)
/* 802E4E88 7C 00 18 50 */ subf r0, r0, r3
/* 802E4E8C 90 0D 8F C0 */ stw r0, sVideoInterval__8JUTVideo(r13)
/* 802E4E90 90 6D 8F BC */ stw r3, sVideoLastTick__8JUTVideo(r13)
/* 802E4E94 83 ED 8F D0 */ lwz r31, sManager__6JUTXfb(r13)
/* 802E4E98 28 1F 00 00 */ cmplwi r31, 0
/* 802E4E9C 40 82 00 14 */ bne lbl_802E4EB0
/* 802E4EA0 38 60 00 01 */ li r3, 1
/* 802E4EA4 48 06 89 9D */ bl VISetBlack
/* 802E4EA8 48 06 87 ED */ bl VIFlush
/* 802E4EAC 48 00 01 C8 */ b lbl_802E5074
lbl_802E4EB0:
/* 802E4EB0 88 0D 8F CC */ lbz r0, data_8045154C(r13)
/* 802E4EB4 7C 00 07 75 */ extsb. r0, r0
/* 802E4EB8 40 82 00 14 */ bne lbl_802E4ECC
/* 802E4EBC 38 00 00 00 */ li r0, 0
/* 802E4EC0 90 0D 8F C8 */ stw r0, frameBuffer(r13)
/* 802E4EC4 38 00 00 01 */ li r0, 1
/* 802E4EC8 98 0D 8F CC */ stb r0, data_8045154C(r13)
lbl_802E4ECC:
/* 802E4ECC 80 8D 8F C8 */ lwz r4, frameBuffer(r13)
/* 802E4ED0 28 04 00 00 */ cmplwi r4, 0
/* 802E4ED4 41 82 00 1C */ beq lbl_802E4EF0
/* 802E4ED8 80 6D 8F B8 */ lwz r3, sManager__8JUTVideo(r13)
/* 802E4EDC 80 C3 00 04 */ lwz r6, 4(r3)
/* 802E4EE0 80 6D 8F A8 */ lwz r3, sDirectPrint__14JUTDirectPrint(r13)
/* 802E4EE4 A0 A6 00 04 */ lhz r5, 4(r6)
/* 802E4EE8 A0 C6 00 06 */ lhz r6, 6(r6)
/* 802E4EEC 4B FF F6 81 */ bl changeFrameBuffer__14JUTDirectPrintFPvUsUs
lbl_802E4EF0:
/* 802E4EF0 80 6D 8F B8 */ lwz r3, sManager__8JUTVideo(r13)
/* 802E4EF4 88 03 00 2C */ lbz r0, 0x2c(r3)
/* 802E4EF8 28 00 00 01 */ cmplwi r0, 1
/* 802E4EFC 40 82 00 38 */ bne lbl_802E4F34
/* 802E4F00 80 83 00 30 */ lwz r4, 0x30(r3)
/* 802E4F04 2C 04 00 00 */ cmpwi r4, 0
/* 802E4F08 40 81 00 08 */ ble lbl_802E4F10
/* 802E4F0C 38 84 FF FF */ addi r4, r4, -1
lbl_802E4F10:
/* 802E4F10 90 83 00 30 */ stw r4, 0x30(r3)
/* 802E4F14 30 04 FF FF */ addic r0, r4, -1
/* 802E4F18 7C 00 21 10 */ subfe r0, r0, r4
/* 802E4F1C 80 6D 8F B8 */ lwz r3, sManager__8JUTVideo(r13)
/* 802E4F20 98 03 00 2C */ stb r0, 0x2c(r3)
/* 802E4F24 38 60 00 01 */ li r3, 1
/* 802E4F28 48 06 89 19 */ bl VISetBlack
/* 802E4F2C 48 06 87 69 */ bl VIFlush
/* 802E4F30 48 00 01 44 */ b lbl_802E5074
lbl_802E4F34:
/* 802E4F34 28 1F 00 00 */ cmplwi r31, 0
/* 802E4F38 40 82 00 14 */ bne lbl_802E4F4C
/* 802E4F3C 38 60 00 01 */ li r3, 1
/* 802E4F40 48 06 89 01 */ bl VISetBlack
/* 802E4F44 48 06 87 51 */ bl VIFlush
/* 802E4F48 48 00 01 2C */ b lbl_802E5074
lbl_802E4F4C:
/* 802E4F4C 80 1F 00 10 */ lwz r0, 0x10(r31)
/* 802E4F50 2C 00 00 03 */ cmpwi r0, 3
/* 802E4F54 41 82 00 0C */ beq lbl_802E4F60
/* 802E4F58 2C 00 00 02 */ cmpwi r0, 2
/* 802E4F5C 40 82 00 80 */ bne lbl_802E4FDC
lbl_802E4F60:
/* 802E4F60 88 0D 8F C4 */ lbz r0, data_80451544(r13)
/* 802E4F64 28 00 00 00 */ cmplwi r0, 0
/* 802E4F68 40 82 01 0C */ bne lbl_802E5074
/* 802E4F6C A8 1F 00 16 */ lha r0, 0x16(r31)
/* 802E4F70 7C 03 07 35 */ extsh. r3, r0
/* 802E4F74 B0 1F 00 18 */ sth r0, 0x18(r31)
/* 802E4F78 40 80 00 14 */ bge lbl_802E4F8C
/* 802E4F7C 38 60 00 01 */ li r3, 1
/* 802E4F80 48 06 88 C1 */ bl VISetBlack
/* 802E4F84 48 06 87 11 */ bl VIFlush
/* 802E4F88 48 00 00 EC */ b lbl_802E5074
lbl_802E4F8C:
/* 802E4F8C A8 7F 00 18 */ lha r3, 0x18(r31)
/* 802E4F90 7C 60 07 35 */ extsh. r0, r3
/* 802E4F94 41 80 00 10 */ blt lbl_802E4FA4
/* 802E4F98 54 60 10 3A */ slwi r0, r3, 2
/* 802E4F9C 7C 7F 00 2E */ lwzx r3, r31, r0
/* 802E4FA0 48 00 00 08 */ b lbl_802E4FA8
lbl_802E4FA4:
/* 802E4FA4 38 60 00 00 */ li r3, 0
lbl_802E4FA8:
/* 802E4FA8 48 06 88 1D */ bl VISetNextFrameBuffer
/* 802E4FAC 48 06 86 E9 */ bl VIFlush
/* 802E4FB0 38 60 00 00 */ li r3, 0
/* 802E4FB4 48 06 88 8D */ bl VISetBlack
/* 802E4FB8 A8 7F 00 18 */ lha r3, 0x18(r31)
/* 802E4FBC 7C 60 07 35 */ extsh. r0, r3
/* 802E4FC0 41 80 00 10 */ blt lbl_802E4FD0
/* 802E4FC4 54 60 10 3A */ slwi r0, r3, 2
/* 802E4FC8 7C 1F 00 2E */ lwzx r0, r31, r0
/* 802E4FCC 48 00 00 08 */ b lbl_802E4FD4
lbl_802E4FD0:
/* 802E4FD0 38 00 00 00 */ li r0, 0
lbl_802E4FD4:
/* 802E4FD4 90 0D 8F C8 */ stw r0, frameBuffer(r13)
/* 802E4FD8 48 00 00 9C */ b lbl_802E5074
lbl_802E4FDC:
/* 802E4FDC 2C 00 00 01 */ cmpwi r0, 1
/* 802E4FE0 40 82 00 94 */ bne lbl_802E5074
/* 802E4FE4 80 1F 00 1C */ lwz r0, 0x1c(r31)
/* 802E4FE8 2C 00 00 00 */ cmpwi r0, 0
/* 802E4FEC 40 82 00 84 */ bne lbl_802E5070
/* 802E4FF0 A8 1F 00 16 */ lha r0, 0x16(r31)
/* 802E4FF4 7C 00 07 35 */ extsh. r0, r0
/* 802E4FF8 41 80 00 70 */ blt lbl_802E5068
/* 802E4FFC B0 1F 00 18 */ sth r0, 0x18(r31)
/* 802E5000 A8 7F 00 18 */ lha r3, 0x18(r31)
/* 802E5004 7C 60 07 35 */ extsh. r0, r3
/* 802E5008 41 80 00 10 */ blt lbl_802E5018
/* 802E500C 54 60 10 3A */ slwi r0, r3, 2
/* 802E5010 7C 7F 00 2E */ lwzx r3, r31, r0
/* 802E5014 48 00 00 08 */ b lbl_802E501C
lbl_802E5018:
/* 802E5018 38 60 00 00 */ li r3, 0
lbl_802E501C:
/* 802E501C 38 80 00 01 */ li r4, 1
/* 802E5020 48 07 82 E5 */ bl GXCopyDisp
/* 802E5024 48 07 6E A9 */ bl GXFlush
/* 802E5028 38 00 00 02 */ li r0, 2
/* 802E502C 90 1F 00 1C */ stw r0, 0x1c(r31)
/* 802E5030 A8 7F 00 18 */ lha r3, 0x18(r31)
/* 802E5034 7C 60 07 35 */ extsh. r0, r3
/* 802E5038 41 80 00 10 */ blt lbl_802E5048
/* 802E503C 54 60 10 3A */ slwi r0, r3, 2
/* 802E5040 7C 1F 00 2E */ lwzx r0, r31, r0
/* 802E5044 48 00 00 08 */ b lbl_802E504C
lbl_802E5048:
/* 802E5048 38 00 00 00 */ li r0, 0
lbl_802E504C:
/* 802E504C 90 0D 8F C8 */ stw r0, frameBuffer(r13)
/* 802E5050 48 06 87 E1 */ bl VIGetNextFrameBuffer
/* 802E5054 28 03 00 00 */ cmplwi r3, 0
/* 802E5058 41 82 00 18 */ beq lbl_802E5070
/* 802E505C 38 60 00 00 */ li r3, 0
/* 802E5060 48 06 87 E1 */ bl VISetBlack
/* 802E5064 48 00 00 0C */ b lbl_802E5070
lbl_802E5068:
/* 802E5068 38 60 00 01 */ li r3, 1
/* 802E506C 48 06 87 D5 */ bl VISetBlack
lbl_802E5070:
/* 802E5070 48 06 86 25 */ bl VIFlush
lbl_802E5074:
/* 802E5074 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 802E5078 80 01 00 14 */ lwz r0, 0x14(r1)
/* 802E507C 7C 08 03 A6 */ mtlr r0
/* 802E5080 38 21 00 10 */ addi r1, r1, 0x10
/* 802E5084 4E 80 00 20 */ blr

View File

@ -22,6 +22,8 @@ public:
/* 802E4240 */ static JUTDirectPrint* start();
static JUTDirectPrint* getManager() { return sDirectPrint; }
private:
static u8 sAsciiTable[128];
static u32 sFontData[64];

View File

@ -3,6 +3,7 @@
#include "JSystem/JKernel/JKRThread.h"
#include "JSystem/JUtility/JUTGamePad.h"
#include "Runtime.PPCEABI.H/__va_arg.h"
#include "dolphin/gx/GX.h"
#include "dolphin/os/OS.h"
#include "dolphin/types.h"
@ -26,7 +27,7 @@ public:
/* 802E1D5C */ JUTException(JUTDirectPrint*);
/* 802E1E40 */ void create(JUTDirectPrint*);
/* 802E1FCC */ void errorHandler(u16, OSContext*, u32, u32);
/* 802E20C0 */ void panic_f_va(char const*, int, char const*, __va_list_struct*);
/* 802E20C0 */ void panic_f_va(char const*, int, char const*, va_list);
/* 802E21FC */ static void panic_f(char const*, int, char const*, ...);
/* 802E227C */ void setFPException(u32);
/* 802E22C4 */ void showFloatSub(int, f32);

View File

@ -8,28 +8,30 @@
class JUTVideo {
public:
typedef void (*CallbackFn)(void);
typedef void (*Callback)(u32);
JUTVideo(_GXRenderModeObj const*);
JUTVideo(GXRenderModeObj const*);
virtual ~JUTVideo();
// TODO: return types not confirmed
/* 802E4C54 */ static JUTVideo* createManager(_GXRenderModeObj const*);
/* 802E4C54 */ static JUTVideo* createManager(GXRenderModeObj const*);
/* 802E4CAC */ static void destroyManager();
/* 802E4E50 */ void preRetraceProc(u32);
/* 802E5088 */ void drawDoneStart();
/* 802E50B0 */ void dummyNoDrawWait();
/* 802E50BC */ void drawDoneCallback();
/* 802E5144 */ void postRetraceProc(u32);
/* 802E5198 */ void setRenderMode(_GXRenderModeObj const*);
/* 802E5198 */ void setRenderMode(GXRenderModeObj const*);
/* 802E5210 */ void waitRetraceIfNeed();
static JUTVideo* getManager() { return sManager; }
_GXRenderModeObj* getRenderMode() const { return mRenderObj; }
/* 802E4E50 */ static void preRetraceProc(u32);
/* 802E5144 */ static void postRetraceProc(u32);
/* 802E50BC */ static void drawDoneCallback();
static JUTVideo* getManager() { return sManager; }
GXRenderModeObj* getRenderMode() const { return mRenderObj; }
private:
static JUTVideo* sManager;
static u32 sVideoLastTick;
static u32 sVideoInterval;
static OSTick sVideoLastTick;
static OSTick sVideoInterval;
private:
/* 0x04 */ _GXRenderModeObj* mRenderObj;
@ -40,12 +42,16 @@ private:
/* 0x18 */ u32 field_0x18;
/* 0x1C */ VIRetraceCallback mPreRetraceCallback;
/* 0x20 */ VIRetraceCallback mPostRetraceCallback;
/* 0x24 */ CallbackFn unknown_callback_1;
/* 0x28 */ CallbackFn unknown_callback_2;
/* 0x24 */ Callback mPreCallback;
/* 0x28 */ Callback mPostCallback;
/* 0x2C */ bool mSetBlack;
/* 0x30 */ s32 mSetBlackFrameCount;
/* 0x34 */ OSMessage mMessage;
/* 0x38 */ OSMessageQueue mMessageQueue;
};
inline JUTVideo* JUTGetVideoManager() {
return JUTVideo::getManager();
}
#endif /* JUTVIDEO_H */

View File

@ -23,6 +23,36 @@ public:
/* 802E5424 */ static void destroyManager();
/* 802E5454 */ void initiate(u16, u16, JKRHeap*, JUTXfb::EXfbNumber);
s32 getBufferNum() const { return mBufferNum; }
s16 getDrawnXfbIndex() const { return mDrawnXfbIndex; }
s16 getDrawningXfbIndex() const { return mDrawingXfbIndex; }
s16 getDisplayingXfbIndex() const { return mDisplayingXfbIndex; }
s32 getSDrawingFlag() const { return mSDrawingFlag; }
void* getDrawnXfb() const {
if (mDrawnXfbIndex >= 0)
return mBuffer[mDrawnXfbIndex];
return NULL;
}
void* getDrawningXfb() const {
if (mDrawingXfbIndex >= 0)
return mBuffer[mDrawingXfbIndex];
return NULL;
}
void* getDisplayingXfb() const {
if (mDisplayingXfbIndex >= 0)
return mBuffer[mDisplayingXfbIndex];
return NULL;
}
void setDisplayingXfbIndex(s16 index) { mDisplayingXfbIndex = index; }
void setSDrawingFlag(s32 flag) { mSDrawingFlag = flag; }
static JUTXfb* getManager() { return sManager; }
private:
static JUTXfb* sManager;
private:

View File

@ -291,7 +291,7 @@ typedef enum _GXTevAlphaArg {
/* 0x6 */ GX_CA_ZERO,
} GXTevAlphaArg;
struct _GXRenderModeObj {
typedef struct _GXRenderModeObj {
s32 vi_tv_mode;
u16 fb_width;
u16 efb_height;
@ -305,7 +305,7 @@ struct _GXRenderModeObj {
u8 antialiasing;
u8 sample_pattern[12][2];
u8 vfilter[7];
};
} GXRenderModeObj;
struct _GXTexObj {
u32 texture_filter;

View File

@ -4,6 +4,7 @@
#ifndef OS_H_
#define OS_H_
#include "Runtime.PPCEABI.H/__va_arg.h"
#include "dolphin/types.h"
/* TODO: more structs, and get rid of the ones that are faked! */
@ -122,8 +123,6 @@ struct OSThread {
void* data[2];
};
struct __va_list_struct;
extern "C" {
s32 OSEnableScheduler(void);
s32 OSDisableScheduler(void);
@ -165,7 +164,7 @@ void OSReportDisable(void);
void OSReportEnable(void);
void OSReportForceEnableOff(void);
void OSReportForceEnableOn(void);
void OSVReport(const char* format, __va_list_struct* list);
void OSVReport(const char* format, va_list list);
void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* out_time);
OSTime OSGetTime(void);
@ -202,7 +201,7 @@ u8* OSGetStackPointer(void);
void OSSwitchFiberEx(u32, u32, u32, u32, u32, u32);
void OSVAttention(const char* fmt, __va_list_struct* va_list);
void OSVAttention(const char* fmt, va_list args);
void OSReportInit(void);

View File

@ -1,10 +1,21 @@
#ifndef VI_H
#define VI_H
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
typedef void (*VIRetraceCallback)(u32);
extern "C" void VIWaitForRetrace(void);
extern "C" void VISetNextFrameBuffer(void*);
extern "C" VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback);
extern "C" VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback);
extern "C" void VIInit();
extern "C" void VIConfigure(GXRenderModeObj*);
extern "C" void VIFlush();
extern "C" void* VIGetNextFrameBuffer();
extern "C" void* VIGetCurrentFrameBuffer();
extern "C" void VISetBlack(BOOL);
extern "C" u32 VIGetRetraceCount();
#endif /* VI_H */

View File

@ -1,6 +1,7 @@
#ifndef MSL_STRING_H_
#define MSL_STRING_H_
#include "Runtime.PPCEABI.H/__va_arg.h"
#include "dolphin/types.h"
// TODO: move to MSL_C.PPCEABI.bare.H/
@ -20,9 +21,7 @@ int tolower(int);
int sprintf(char*, const char*, ...);
int printf(const char*, ...);
int snprintf(char*, u32, const char*, ...);
struct __va_list_struct;
size_t vsnprintf(char* buffer, size_t buffer_size, const char* format, __va_list_struct* args);
size_t vsnprintf(char* buffer, size_t buffer_size, const char* format, va_list args);
}
#endif

View File

@ -4,6 +4,7 @@
//
#include "JSystem/JUtility/JUTException.h"
#include "Runtime.PPCEABI.H/__va_arg.h"
#include "dol2asm.h"
#include "dolphin/types.h"
@ -336,7 +337,7 @@ static u8 context[712];
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JUTException::panic_f_va(char const* param_0, int param_1, char const* param_2,
__va_list_struct* param_3) {
va_list param_3) {
nofralloc
#include "asm/JSystem/JUtility/JUTException/panic_f_va__12JUTExceptionFPCciPCcP16__va_list_struct.s"
}

View File

@ -4,72 +4,41 @@
//
#include "JSystem/JUtility/JUTVideo.h"
#include "JSystem/JUtility/JUTDirectPrint.h"
#include "JSystem/JUtility/JUTXfb.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
// Types:
//
struct JUTXfb {
static u8 sManager[4 + 4 /* padding */];
};
struct JUTDirectPrint {
/* 802E456C */ void changeFrameBuffer(void*, u16, u16);
static u8 sDirectPrint[4 + 4 /* padding */];
};
//
// Forward References:
//
extern "C" void createManager__8JUTVideoFPC16_GXRenderModeObj();
extern "C" void destroyManager__8JUTVideoFv();
extern "C" void __ct__8JUTVideoFPC16_GXRenderModeObj();
extern "C" void __dt__8JUTVideoFv();
extern "C" void preRetraceProc__8JUTVideoFUl();
extern "C" void drawDoneStart__8JUTVideoFv();
extern "C" void dummyNoDrawWait__8JUTVideoFv();
extern "C" void drawDoneCallback__8JUTVideoFv();
extern "C" void postRetraceProc__8JUTVideoFUl();
extern "C" void setRenderMode__8JUTVideoFPC16_GXRenderModeObj();
extern "C" void waitRetraceIfNeed__8JUTVideoFv();
extern "C" u8 sManager__8JUTVideo[4];
extern "C" u8 sVideoLastTick__8JUTVideo[4];
extern "C" u8 sVideoInterval__8JUTVideo[4];
#include "dolphin/vi/vi.h"
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void changeFrameBuffer__14JUTDirectPrintFPvUsUs();
extern "C" void VISetPreRetraceCallback(VIRetraceCallback);
extern "C" void VISetPostRetraceCallback(VIRetraceCallback);
extern "C" void VIInit();
extern "C" void VIWaitForRetrace();
extern "C" void VIConfigure(_GXRenderModeObj*);
extern "C" void VIFlush();
extern "C" void VISetNextFrameBuffer();
extern "C" void VIGetNextFrameBuffer();
extern "C" void VISetBlack(s32);
extern "C" u32 VIGetRetraceCount();
extern "C" void GXSetDrawDone();
extern "C" void GXCopyDisp();
extern "C" u8 sDirectPrint__14JUTDirectPrint[4 + 4 /* padding */];
extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */];
extern "C" void GXCopyDisp(void*, BOOL);
//
// Declarations:
//
/* ############################################################################################## */
/* 80451538-8045153C 000A38 0004+00 4/4 18/18 1/1 .sbss sManager__8JUTVideo */
JUTVideo* JUTVideo::sManager;
/* 8045153C-80451540 000A3C 0004+00 2/2 1/1 0/0 .sbss sVideoLastTick__8JUTVideo */
OSTick JUTVideo::sVideoLastTick;
/* 80451540-80451544 000A40 0004+00 2/2 1/1 0/0 .sbss sVideoInterval__8JUTVideo */
OSTick JUTVideo::sVideoInterval;
/* 80451544-80451548 000A44 0004+00 4/4 0/0 0/0 .sbss None */
static bool data_80451544;
/* 80451548-8045154C 000A48 0004+00 1/1 0/0 0/0 .sbss frameBuffer$2222 */
static void* frameBuffer;
/* 8045154C-80451550 000A4C 0004+00 1/1 0/0 0/0 .sbss None */
static s8 data_8045154C;
/* 802E4C54-802E4CAC 2DF594 0058+00 0/0 1/1 0/0 .text
* createManager__8JUTVideoFPC16_GXRenderModeObj */
JUTVideo* JUTVideo::createManager(_GXRenderModeObj const* param_0) {
@ -87,25 +56,8 @@ void JUTVideo::destroyManager() {
}
}
/* ############################################################################################## */
/* 803CC980-803CC990 029AA0 000C+04 2/2 0/0 0/0 .data __vt__8JUTVideo */
SECTION_DATA extern void* __vt__8JUTVideo[3 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8JUTVideoFv,
/* padding */
NULL,
};
/* 8045153C-80451540 000A3C 0004+00 2/2 1/1 0/0 .sbss sVideoLastTick__8JUTVideo */
u32 JUTVideo::sVideoLastTick;
/* 80451540-80451544 000A40 0004+00 2/2 1/1 0/0 .sbss sVideoInterval__8JUTVideo */
u32 JUTVideo::sVideoInterval;
/* 802E4CF4-802E4DE8 2DF634 00F4+00 1/1 0/0 0/0 .text __ct__8JUTVideoFPC16_GXRenderModeObj */
#ifdef NONMATCHING
JUTVideo::JUTVideo(_GXRenderModeObj const* param_0) {
JUTVideo::JUTVideo(GXRenderModeObj const* param_0) {
mRenderObj = NULL;
VIInit();
mSetBlack = true;
@ -120,22 +72,12 @@ JUTVideo::JUTVideo(_GXRenderModeObj const* param_0) {
sVideoLastTick = OSGetTick();
sVideoInterval = 670000;
mPreRetraceCallback = VISetPreRetraceCallback(preRetraceProc);
mPostRetraceCallback = VISetPreRetraceCallback(postRetraceProc);
unknown_callback_1 = NULL;
unknown_callback_2 = NULL;
OSInitMessageQueue(mMessageQueue, mMessage, 1);
mPostRetraceCallback = VISetPostRetraceCallback(postRetraceProc);
mPreCallback = NULL;
mPostCallback = NULL;
OSInitMessageQueue(&mMessageQueue, &mMessage, 1);
GXSetDrawDoneCallback(drawDoneCallback);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm JUTVideo::JUTVideo(_GXRenderModeObj const* param_0) {
nofralloc
#include "asm/JSystem/JUtility/JUTVideo/__ct__8JUTVideoFPC16_GXRenderModeObj.s"
}
#pragma pop
#endif
/* 802E4DE8-802E4E50 2DF728 0068+00 1/0 0/0 0/0 .text __dt__8JUTVideoFv */
JUTVideo::~JUTVideo() {
@ -143,78 +85,146 @@ JUTVideo::~JUTVideo() {
VISetPostRetraceCallback(mPostRetraceCallback);
}
/* ############################################################################################## */
/* 80451544-80451548 000A44 0004+00 4/4 0/0 0/0 .sbss None */
static u8 data_80451544[4];
/* 80451548-8045154C 000A48 0004+00 1/1 0/0 0/0 .sbss frameBuffer$2222 */
static void* frameBuffer;
/* 8045154C-80451550 000A4C 0004+00 1/1 0/0 0/0 .sbss None */
static u8 data_8045154C[4];
/* 802E4E50-802E5088 2DF790 0238+00 1/1 0/0 0/0 .text preRetraceProc__8JUTVideoFUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JUTVideo::preRetraceProc(u32 param_0) {
nofralloc
#include "asm/JSystem/JUtility/JUTVideo/preRetraceProc__8JUTVideoFUl.s"
void JUTVideo::preRetraceProc(u32 retrace_count) {
if (!sManager) {
return;
}
if (sManager->mPreCallback) {
(*sManager->mPreCallback)(retrace_count);
}
OSTick tick = OSGetTick();
sVideoInterval = tick - sVideoLastTick;
sVideoLastTick = tick;
JUTXfb* xfb = JUTXfb::getManager();
if (!xfb) {
VISetBlack(TRUE);
VIFlush();
return;
}
if (!data_8045154C) {
frameBuffer = NULL;
data_8045154C = true;
}
if (frameBuffer) {
JUTVideo* videoManager = JUTGetVideoManager();
const GXRenderModeObj* renderMode = videoManager->getRenderMode();
JUTDirectPrint* directPrint = JUTDirectPrint::getManager();
directPrint->changeFrameBuffer(frameBuffer, renderMode->fb_width, renderMode->efb_height);
}
if (sManager->mSetBlack == 1) {
s32 frame_count = sManager->mSetBlackFrameCount;
if (frame_count > 0) {
frame_count--;
}
sManager->mSetBlackFrameCount = frame_count;
sManager->mSetBlack = frame_count != 0;
VISetBlack(TRUE);
VIFlush();
return;
}
if (!xfb) {
VISetBlack(TRUE);
VIFlush();
return;
}
if (xfb->getBufferNum() == 3 || xfb->getBufferNum() == 2) {
if (!data_80451544) {
s16 index = xfb->getDrawnXfbIndex();
xfb->setDisplayingXfbIndex(index);
if (index < 0) {
VISetBlack(1);
VIFlush();
} else {
VISetNextFrameBuffer(xfb->getDisplayingXfb());
VIFlush();
VISetBlack(FALSE);
frameBuffer = xfb->getDisplayingXfb();
}
}
} else if (xfb->getBufferNum() == 1) {
if (xfb->getSDrawingFlag() == 0) {
s16 index = xfb->getDrawnXfbIndex();
if (index >= 0) {
xfb->setDisplayingXfbIndex(index);
GXCopyDisp(xfb->getDisplayingXfb(), 1);
GXFlush();
xfb->setSDrawingFlag(2);
frameBuffer = xfb->getDisplayingXfb();
if (VIGetNextFrameBuffer()) {
VISetBlack(FALSE);
}
} else {
VISetBlack(TRUE);
}
}
VIFlush();
}
}
#pragma pop
/* 802E5088-802E50B0 2DF9C8 0028+00 0/0 1/1 0/0 .text drawDoneStart__8JUTVideoFv */
void JUTVideo::drawDoneStart() {
data_80451544[0] = 1;
data_80451544 = true;
GXSetDrawDone();
}
/* 802E50B0-802E50BC 2DF9F0 000C+00 0/0 1/1 0/0 .text dummyNoDrawWait__8JUTVideoFv */
void JUTVideo::dummyNoDrawWait() {
data_80451544[0] = 0;
data_80451544 = false;
}
/* 802E50BC-802E5144 2DF9FC 0088+00 1/1 0/0 0/0 .text drawDoneCallback__8JUTVideoFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JUTVideo::drawDoneCallback() {
nofralloc
#include "asm/JSystem/JUtility/JUTVideo/drawDoneCallback__8JUTVideoFv.s"
}
#pragma pop
void JUTVideo::drawDoneCallback() {
JUTXfb* xfb = JUTXfb::getManager();
if (!xfb) {
return;
}
/* 802E5144-802E5198 2DFA84 0054+00 1/1 0/0 0/0 .text postRetraceProc__8JUTVideoFUl */
#ifdef NONMATCHING
void JUTVideo::postRetraceProc(u32 param_0) {
void* message;
if (sManager != NULL) {
if (sManager->unknown_callback_2 != NULL) {
sManager->unknown_callback_2();
data_80451544 = false;
if (xfb->getBufferNum() == 1) {
if (xfb->getSDrawingFlag() == 1) {
xfb->setSDrawingFlag(0);
void* frameBuffer = xfb->getDrawnXfb();
if (frameBuffer) {
VISetNextFrameBuffer(xfb->getDrawnXfb());
VIFlush();
}
}
message = (void*)VIGetRetraceCount();
OSSendMessage(&sManager->mMessageQueue, message, OS_MESSAGE_NON_BLOCKING);
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void JUTVideo::postRetraceProc(u32 param_0) {
nofralloc
#include "asm/JSystem/JUtility/JUTVideo/postRetraceProc__8JUTVideoFUl.s"
/* 802E5144-802E5198 2DFA84 0054+00 1/1 0/0 0/0 .text postRetraceProc__8JUTVideoFUl */
void JUTVideo::postRetraceProc(u32 retrace_count) {
if (!sManager) {
return;
}
if (sManager->mPostCallback != NULL) {
sManager->mPostCallback(retrace_count);
}
OSMessage message = (OSMessage*)VIGetRetraceCount();
OSSendMessage(&sManager->mMessageQueue, message, OS_MESSAGE_NON_BLOCKING);
}
#pragma pop
#endif
/* 802E5198-802E5210 2DFAD8 0078+00 1/1 2/2 0/0 .text
* setRenderMode__8JUTVideoFPC16_GXRenderModeObj */
void JUTVideo::setRenderMode(_GXRenderModeObj const* pObj) {
void JUTVideo::setRenderMode(GXRenderModeObj const* pObj) {
if (mRenderObj != NULL && pObj->vi_tv_mode != mRenderObj->vi_tv_mode) {
mSetBlack = true;
mSetBlackFrameCount = 4;
}
mRenderObj = (_GXRenderModeObj*)pObj;
mRenderObj = (GXRenderModeObj*)pObj;
VIConfigure(mRenderObj);
VIFlush();

View File

@ -4,6 +4,7 @@
//
#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h"
#include "Runtime.PPCEABI.H/__va_arg.h"
#include "dol2asm.h"
#include "dolphin/types.h"
@ -28,7 +29,6 @@ extern "C" extern char const* const MSL_Common_Src_printf__stringBase0;
//
SECTION_INIT void memcpy();
extern "C" void __va_arg();
extern "C" void __div2u();
extern "C" void __mod2u();
extern "C" void __num2dec();
@ -72,7 +72,7 @@ asm size_t snprintf(const char*, size_t, const char*, ...) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm size_t vsnprintf(char* buffer, size_t buffer_size, const char* format, __va_list_struct* args) {
asm size_t vsnprintf(char* buffer, size_t buffer_size, const char* format, va_list args) {
nofralloc
#include "asm/MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf/vsnprintf.s"
}
@ -154,6 +154,7 @@ SECTION_SDATA static u8 data_80450AD8[2 + 6 /* padding */] = {
#pragma optimizewithasm off
asm void __pformatter() {
nofralloc
#undef __va_arg
#include "asm/MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf/__pformatter.s"
}
#pragma pop

View File

@ -12,20 +12,10 @@
//
extern "C" void __VIRetraceHandler();
extern "C" void VISetPreRetraceCallback();
extern "C" void VISetPostRetraceCallback();
extern "C" static void getTiming();
extern "C" void __VIInit();
extern "C" void VIInit();
extern "C" void VIWaitForRetrace();
extern "C" static void setFbbRegs();
extern "C" static void setVerticalRegs();
extern "C" void VIConfigure();
extern "C" void VIFlush();
extern "C" void VISetNextFrameBuffer();
extern "C" u32 VIGetNextFrameBuffer();
extern "C" u32 VIGetCurrentFrameBuffer();
extern "C" void VISetBlack();
extern "C" u32 VIGetRetraceCount();
extern "C" static void GetCurrentDisplayPosition();
extern "C" static void getCurrentFieldEvenOdd();
@ -139,7 +129,7 @@ asm void __VIRetraceHandler() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void VISetPreRetraceCallback() {
asm VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback) {
nofralloc
#include "asm/dolphin/vi/vi/VISetPreRetraceCallback.s"
}
@ -149,7 +139,7 @@ asm void VISetPreRetraceCallback() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void VISetPostRetraceCallback() {
asm VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback) {
nofralloc
#include "asm/dolphin/vi/vi/VISetPostRetraceCallback.s"
}
@ -772,7 +762,7 @@ static u8 message[4 + 4 /* padding */];
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void VIConfigure() {
asm void VIConfigure(GXRenderModeObj*) {
nofralloc
#include "asm/dolphin/vi/vi/VIConfigure.s"
}
@ -792,27 +782,27 @@ asm void VIFlush() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void VISetNextFrameBuffer() {
asm void VISetNextFrameBuffer(void*) {
nofralloc
#include "asm/dolphin/vi/vi/VISetNextFrameBuffer.s"
}
#pragma pop
/* 8034D830-8034D838 -00001 0008+00 0/0 0/0 0/0 .text VIGetNextFrameBuffer */
u32 VIGetNextFrameBuffer() {
return *(u32*)(&NextBufAddr);
void* VIGetNextFrameBuffer() {
return *(void**)(&NextBufAddr);
}
/* 8034D838-8034D840 -00001 0008+00 0/0 0/0 0/0 .text VIGetCurrentFrameBuffer */
u32 VIGetCurrentFrameBuffer() {
return *(u32*)(&CurrBufAddr);
void* VIGetCurrentFrameBuffer() {
return *(void**)(&CurrBufAddr);
}
/* 8034D840-8034D8BC 348180 007C+00 0/0 7/7 0/0 .text VISetBlack */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void VISetBlack() {
asm void VISetBlack(BOOL) {
nofralloc
#include "asm/dolphin/vi/vi/VISetBlack.s"
}

View File

@ -129,9 +129,6 @@ extern "C" void setDirectConsole__17JUTConsoleManagerFP10JUTConsole();
extern "C" void PPCHalt();
extern "C" u32 OSGetProgressiveMode();
extern "C" void OSSetProgressiveMode();
extern "C" void VIFlush();
extern "C" void VISetBlack(s32);
extern "C" void VIGetRetraceCount();
extern "C" void VIGetDTVStatus();
extern "C" void _savegpr_28();
extern "C" void _restgpr_28();