Misc Egg (#37)

* EGG: Archive, DvdFile, DvdRipper

* start eggStream

* FrmHeap and AssertHeap OK

* progress on EggController

* port in WPAD stuff

* update WPAD/WUD/KPAD/SC symbols

* eggController OK

* bytematch more CoreController virtual funcs

* eggDecomp/eggStreamDecomp Ok

* eggDvdRipper OK

* EGG gfx splits

* Finished Splitting EGG

* create egg Files

* eggDecomp.h -> eggStreamDecomp.h

* Revert some format changes
This commit is contained in:
Elijah Thomas
2024-10-01 20:24:25 -04:00
committed by GitHub
parent 7ee2ac2d38
commit dc221b4795
148 changed files with 5294 additions and 1537 deletions
+30 -11
View File
@@ -1,16 +1,23 @@
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
AlignAfterOpenBracket: BlockIndent
AlignArrayOfStructures: Right
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignConsecutiveMacros: None
AlignEscapedNewlines: DontAlign
AlignOperands: DontAlign
AllowAllArgumentsOnNextLine: False
AllowAllParametersOfDeclarationOnNextLine: False
AlignConsecutiveShortCaseStatements:
Enabled: true
AcrossEmptyLines: true
AcrossComments: true
AlignCaseColons: false
AlignOperands: AlignAfterOperator
AlignTrailingComments: Always
AlignEscapedNewlines: Right
AllowAllArgumentsOnNextLine: True
AllowAllParametersOfDeclarationOnNextLine: True
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: False
AllowShortEnumsOnASingleLine: True
AllowShortCaseLabelsOnASingleLine: True
AllowShortEnumsOnASingleLine: False
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: False
@@ -20,15 +27,27 @@ AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: True
BinPackParameters: True
BitFieldColonSpacing: Both
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: False
AfterClass: False
AfterControlStatement: Never
AfterEnum: False
AfterFunction: False
AfterNamespace: False
AfterUnion: False
AfterExternBlock: False
BeforeCatch: True
BeforeElse: False
BeforeWhile: False
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: False
BreakStringLiterals: True
ColumnLimit: 120
ContinuationIndentWidth: 8
IncludeBlocks: Preserve
ContinuationIndentWidth: 4
IncludeBlocks: Regroup
IndentAccessModifiers: False
IndentCaseLabels: False
IndentCaseLabels: True
IndentGotoLabels: True
IndentWidth: 4
InsertBraces: True
+2 -1
View File
@@ -29,6 +29,7 @@
"utility": "cpp",
"initializer_list": "cpp",
"new": "cpp",
"cstdlib": "cpp"
"cstdlib": "cpp",
"xmemory": "cpp"
}
}
+142 -10
View File
@@ -1190,23 +1190,24 @@ nw4r/lyt/lyt_util.cpp:
egg/core/eggArchive.cpp:
.text start:0x80493510 end:0x80494254
.data start:0x8056E820 end:0x8056E830
.sbss start:0x80576728 end:0x80576730
.bss start:0x80673AC8 end:0x80673AD8
.data start:0x8056E820 end:0x8056E82C
.sdata start:0x80574EC8 end:0x80574ECA
.sbss start:0x80576728 end:0x80576729
.bss start:0x80673AC8 end:0x80673AD4
egg/core/eggDvdFile.cpp:
.text start:0x80494260 end:0x80494678
.data start:0x8056E830 end:0x8056E858
.sbss start:0x80576730 end:0x80576738
.bss start:0x80673AD8 end:0x80673AE8
.sbss start:0x80576730 end:0x80576731
.bss start:0x80673AD8 end:0x80673AE4
egg/core/eggDvdRipper.cpp:
.text start:0x80494680 end:0x80494C80
.sdata start:0x80574ED0 end:0x80574ED8
.sbss start:0x80576738 end:0x80576740
.sdata start:0x80574ED0 end:0x80574ED1
.sbss start:0x80576738 end:0x8057673C
egg/core/eggStream.cpp:
.text start:0x80494C80 end:0x804952B8
egg/core/eggStreamDecomp.cpp:
.text start:0x80494C80 end:0x804952C8
.data start:0x8056E858 end:0x8056E8D0
egg/core/eggAllocator.cpp:
@@ -1292,6 +1293,7 @@ egg/core/eggController.cpp:
.ctors start:0x804DB98C end:0x804DB990
.rodata start:0x804FBA20 end:0x804FBA30
.data start:0x8056EB90 end:0x8056EC88
.sdata start:0x80574EE8 end:0x80574EEC
.sbss start:0x805767A8 end:0x805767C0
.sdata2 start:0x8057F338 end:0x8057F360
.bss start:0x80673B40 end:0x80674C00
@@ -1325,7 +1327,137 @@ egg/prim/eggAssert.cpp:
.bss start:0x80674C60 end:0x80674D68
egg/gfx/eggCamera.cpp:
.text start:0x8049C5C0 end:0x8049CAC8
.text start:0x8049C5C0 end:0x8049CAC0
egg/gfx/eggPalette.cpp:
.text start:0x8049CAD0 end:0x8049CB44
egg/gfx/eggTexture.cpp:
.text start:0x8049CB50 end:0x8049CFE4
egg/gfx/eggUnk1.cpp:
.text start:0x8049CFF0 end:0x8049D7C0
egg/gfx/eggCapTexture.cpp:
.text start:0x8049D7C0 end:0x8049D9D0
egg/gfx/eggCpuTexture.cpp:
.text start:0x8049DA30 end:0x8049EC94
egg/gfx/eggDrawGX.cpp:
.text start:0x8049ECA0 end:0x804A0C24
.ctors start:0x804DB998 end:0x804DB99C
egg/gfx/eggDrawPathBase.cpp:
.text start:0x804A0C30 end:0x804A0E98
egg/gfx/eggDrawPathUnk1.cpp:
.text start:0x804A0EA0 end:0x804A29B8
egg/gfx/eggDrawPathDOF.cpp:
.text start:0x804A29C0 end:0x804A4BE8
egg/gfx/eggDrawPathUnk2.cpp:
.text start:0x804A4BF0 end:0x804A54E8
egg/gfx/eggFog.cpp:
.text start:0x804A54F0 end:0x804A5F60
egg/gfx/eggFrustum.cpp:
.text start:0x804A5F60 end:0x804A6854
.ctors start:0x804DB99C end:0x804DB9A0
egg/gfx/eggG3DUtility.cpp:
.text start:0x804A6860 end:0x804A75B0
egg/gfx/eggGfxEngine.cpp:
.text start:0x804A75B0 end:0x804A7744
egg/gfx/eggGlobalDrawState.cpp:
.text start:0x804A7750 end:0x804A7814
.ctors start:0x804DB9A0 end:0x804DB9A4
egg/gfx/eggGXUtility.cpp:
.text start:0x804A7820 end:0x804A7BC0
egg/gfx/eggIScnProc.cpp:
.text start:0x804A7BC0 end:0x804A7F7C
egg/gfx/eggLight.cpp:
.text start:0x804A7F80 end:0x804AB24C
egg/gfx/eggLightTexture.cpp:
.text start:0x804AB250 end:0x804AD448
.ctors start:0x804DB9A4 end:0x804DB9A8
egg/gfx/eggLightTextureMgr.cpp:
.text start:0x804AD450 end:0x804AE644
egg/gfx/eggModelEx.cpp:
.text start:0x804AE650 end:0x804AEC20
egg/gfx/eggPostEffectBase.cpp:
.text start:0x804AEC20 end:0x804AF4B4
egg/gfx/eggPostEffectBlur.cpp:
.text start:0x804AF4C0 end:0x804AFC04
egg/gfx/eggPostEffectUnk1.cpp:
.text start:0x804AFC10 end:0x804B0098
egg/gfx/eggPostEffectUnk2.cpp:
.text start:0x804B00A0 end:0x804B0AA4
egg/gfx/eggPostEffectMask.cpp:
.text start:0x804B0AB0 end:0x804B0F60
egg/gfx/eggPostEffectMaskDOF.cpp:
.text start:0x804B0F60 end:0x804B1BE8
egg/gfx/eggPostEffectSimple.cpp:
.text start:0x804B1BF0 end:0x804B1E58
egg/gfx/eggScreen.cpp:
.text start:0x804B1E60 end:0x804B30B4
.ctors start:0x804DB9A8 end:0x804DB9AC
egg/gfx/eggScreenEffectBase.cpp:
.text start:0x804B30C0 end:0x804B30EC
.ctors start:0x804DB9AC end:0x804DB9B0
egg/gfx/eggScreenEffectBlur.cpp:
.text start:0x804B30F0 end:0x804B3D98
egg/gfx/eggStateEfb.cpp:
.text start:0x804B3DA0 end:0x804B460C
egg/gfx/eggStateGX.cpp:
.text start:0x804B4610 end:0x804B53EC
egg/gfx/eggTextureBuffer.cpp:
.text start:0x804B53F0 end:0x804B59DC
egg/audio/eggAudioArcPlayerMgr.cpp:
.text start:0x804B59E0 end:0x804B6428
egg/audio/eggAudioHeapMgr.cpp:
.text start:0x804B6430 end:0x804B64A8
egg/audio/eggAudioMgr.cpp:
.text start:0x804B64B0 end:0x804B69C8
egg/audio/eggAudioRmtSpeakerMgr.cpp:
.text start:0x804B69D0 end:0x804B6F58
egg/audio/eggAudioUtility.cpp:
.text start:0x804B6F60 end:0x804B720C
.ctors start:0x804DB9B0 end:0x804DB9B4
egg/audio/eggAudioSystem.cpp:
.text start:0x804B7210 end:0x804B7544
egg/util/eggException.cpp:
.text start:0x804B7550 end:0x804B7B48
Runtime.PPCEABI.H/global_destructor_chain.c:
.text start:0x804C65C0 end:0x804C6620
+324 -324
View File
@@ -498,7 +498,7 @@ fn_800146E0 = .text:0x800146E0; // type:function size:0x38
fn_80014720 = .text:0x80014720; // type:function size:0x228
fn_80014950 = .text:0x80014950; // type:function size:0x5C
fn_800149B0 = .text:0x800149B0; // type:function size:0x478
isTriggered__Q23EGG14CoreControllerFUl = .text:0x80014E30; // type:function size:0x18
downTrigger__Q23EGG14CoreControllerCFUl = .text:0x80014E30; // type:function size:0x18
fn_80014E50 = .text:0x80014E50; // type:function size:0x54
fn_80014EB0 = .text:0x80014EB0; // type:function size:0x3C4
fn_80015280 = .text:0x80015280; // type:function size:0x1C
@@ -2251,7 +2251,7 @@ fn_80055330 = .text:0x80055330; // type:function size:0x98
fn_800553D0 = .text:0x800553D0; // type:function size:0x50
fn_80055420 = .text:0x80055420; // type:function size:0x73C
fn_80055B60 = .text:0x80055B60; // type:function size:0x10
EGG__TBuffer<EGG__eCoreDevType>__errRangeOver = .text:0x80055B70; // type:function size:0x4
errRangeOver__Q23EGG29TBuffer<Q23EGG12eCoreDevType>Fv = .text:0x80055B70; // type:function size:0x4
mPad__endPad = .text:0x80055B80; // type:function size:0x4
fn_80055B90 = .text:0x80055B90; // type:function size:0x94
fn_80055C30 = .text:0x80055C30; // type:function size:0x10
@@ -2370,8 +2370,8 @@ checkButton2Pressed = .text:0x800597A0; // type:function size:0x18
checkButtonMinusPressed = .text:0x800597C0; // type:function size:0x18
checkButtonPlusPressed = .text:0x800597E0; // type:function size:0x18
checkInputManagerHeldMask = .text:0x80059800; // type:function size:0x18
isPressed__Q23EGG14CoreControllerFUl = .text:0x80059820; // type:function size:0x18
isAllPressed__Q23EGG14CoreControllerFv = .text:0x80059840; // type:function size:0x18
down__Q23EGG14CoreControllerCFUl = .text:0x80059820; // type:function size:0x18
downAll__Q23EGG14CoreControllerCFUl = .text:0x80059840; // type:function size:0x18
checkButtonAHeld = .text:0x80059860; // type:function size:0x18
checkButtonBHeld = .text:0x80059880; // type:function size:0x18
checkButtonCHeld = .text:0x800598A0; // type:function size:0x18
@@ -2384,12 +2384,12 @@ checkButton1Held = .text:0x80059960; // type:function size:0x18
checkButton2Held = .text:0x80059980; // type:function size:0x18
checkButtonMinusHeld = .text:0x800599A0; // type:function size:0x18
checkButtonPlusHeld = .text:0x800599C0; // type:function size:0x18
isReleased__Q23EGG14CoreControllerFv = .text:0x800599E0; // type:function size:0x18
upTrigger__Q23EGG14CoreControllerCFUl = .text:0x800599E0; // type:function size:0x18
checkButtonAReleased = .text:0x80059A00; // type:function size:0x18
buttonBReleased = .text:0x80059A20; // type:function size:0x18
checkButtonZReleased = .text:0x80059A40; // type:function size:0x18
isAnyPressed__Q23EGG14CoreControllerFUl = .text:0x80059A60; // type:function size:0x1C
isNotPressed__Q23EGG14CoreControllerFv = .text:0x80059A80; // type:function size:0x14
up__Q23EGG14CoreControllerCFUl = .text:0x80059A60; // type:function size:0x1C
upAll__Q23EGG14CoreControllerCFUl = .text:0x80059A80; // type:function size:0x14
checkButtonAHeldReleased = .text:0x80059AA0; // type:function size:0x18
fn_80059AC0 = .text:0x80059AC0; // type:function size:0x8
fn_80059AD0 = .text:0x80059AD0; // type:function size:0xC
@@ -10212,7 +10212,7 @@ fn_8018E420 = .text:0x8018E420; // type:function size:0x74
fn_8018E4A0 = .text:0x8018E4A0; // type:function size:0x3C
fn_8018E4E0 = .text:0x8018E4E0; // type:function size:0x3C
fn_8018E520 = .text:0x8018E520; // type:function size:0x514
fn_8018EA40 = .text:0x8018EA40; // type:function size:0x8
getViewMatrix__Q23EGG12LookAtCameraFv = .text:0x8018EA40; // type:function size:0x8
fn_8018EA50 = .text:0x8018EA50; // type:function size:0x44
fn_8018EAA0 = .text:0x8018EAA0; // type:function size:0x18
fn_8018EAC0 = .text:0x8018EAC0; // type:function size:0x54
@@ -17187,7 +17187,7 @@ __dt__16sStateMethodIf_cFv = .text:0x802DE0B0; // type:function size:0x40
__dt__20sStateMethodUsr_FI_cFv = .text:0x802DE0F0; // type:function size:0x58
__dt__13sStateMgrIf_cFv = .text:0x802DE150; // type:function size:0x40
isNormalID__13sStateIDChk_cCFRC12sStateIDIf_c = .text:0x802DE190; // type:function size:0x8
__sinit_\s_StateId_cpp = .text:0x802DE1A0; // type:function size:0x54 scope:local
__sinit_\s_StateID_cpp = .text:0x802DE1A0; // type:function size:0x54 scope:local
__ct__14sStateMethod_cFR15sStateIDChkIf_cR13sStateFctIf_cRC12sStateIDIf_c = .text:0x802DE200; // type:function size:0x48
__dt__14sStateMethod_cFv = .text:0x802DE250; // type:function size:0x58
initializeStateMethod__14sStateMethod_cFv = .text:0x802DE2B0; // type:function size:0xA8
@@ -17363,7 +17363,7 @@ searchBaseByGroupType__10fManager_cFUcPC7fBase_c = .text:0x802E2980; // type:fun
mainLoop__10fManager_cFv = .text:0x802E29E0; // type:function size:0xC0
__sinit_\f_manager_cpp = .text:0x802E2AA0; // type:function size:0x138 scope:local
__ct__9fLiMgBa_cFv = .text:0x802E2BE0; // type:function size:0x10
__arraydtor = .text:0x802E2BF0; // type:function size:0x1C scope:local
__arraydtor$4290 = .text:0x802E2BF0; // type:function size:0x1C scope:local
walkPack__11fTrMgPTMF_cFv = .text:0x802E2C10; // type:function size:0x84
searchNodeByProfName__9fTrMgBa_cCFUsPC9fTrNdBa_c = .text:0x802E2CA0; // type:function size:0x68
searchNodeByGroupType__9fTrMgBa_cCFUcPC9fTrNdBa_c = .text:0x802E2D10; // type:function size:0x68
@@ -22587,9 +22587,9 @@ MEMGetAllocatableSizeForFrmHeapEx = .text:0x803CD820; // type:function size:0x78
MEMRecordStateForFrmHeap = .text:0x803CD8A0; // type:function size:0xD4
MEMFreeByStateToFrmHeap = .text:0x803CD980; // type:function size:0xB4
MEMAdjustFrmHeap = .text:0x803CDA40; // type:function size:0x84
fn_803CDAD0 = .text:0x803CDAD0; // type:function size:0xD0
fn_803CDBA0 = .text:0x803CDBA0; // type:function size:0x10
fn_803CDBB0 = .text:0x803CDBB0; // type:function size:0x8
MEMResizeForMBlockFrmHeap = .text:0x803CDAD0; // type:function size:0xD0
AllocatorAllocForExpHeap_ = .text:0x803CDBA0; // type:function size:0x10
AllocatorFreeForExpHeap_ = .text:0x803CDBB0; // type:function size:0x8
MEMAllocFromAllocator = .text:0x803CDBC0; // type:function size:0x10
MEMFreeToAllocator = .text:0x803CDBD0; // type:function size:0x10
MEMInitAllocatorForExpHeap = .text:0x803CDBE0; // type:function size:0x1C
@@ -22634,7 +22634,7 @@ CXReadUncompLRC = .text:0x803D0390; // type:function size:0x3F8
CXGetUncompressedSize = .text:0x803D0790; // type:function size:0x40
CXUncompressLZ = .text:0x803D07D0; // type:function size:0x14C
CXiLHVerifyTable = .text:0x803D0920; // type:function size:0x1F4
NANDCreateGhidra = .text:0x803D0B20; // type:function size:0x140
fn_803D0B20 = .text:0x803D0B20; // type:function size:0x140
NANDCreate = .text:0x803D0C60; // type:function size:0x74
NANDPrivateCreate = .text:0x803D0CE0; // type:function size:0x74
NANDPrivateCreateAsync = .text:0x803D0D60; // type:function size:0x78
@@ -22743,8 +22743,8 @@ SCGetScreenSaverMode = .text:0x803D6700; // type:function size:0x54
SCGetSoundMode = .text:0x803D6760; // type:function size:0x54
SCGetCounterBias = .text:0x803D67C0; // type:function size:0x40
SCGetBtDeviceInfoArray = .text:0x803D6800; // type:function size:0xC
SCSetBtDeviceInfoArrray = .text:0x803D6810; // type:function size:0xC
ScGetBtCmpDevIndoArray = .text:0x803D6820; // type:function size:0xC
SCSetBtDeviceInfoArray = .text:0x803D6810; // type:function size:0xC
SCGetBtCmpDevInfoArray = .text:0x803D6820; // type:function size:0xC
SCSetBtCmpDevInfoArray = .text:0x803D6830; // type:function size:0xC
SCGetBtDpdSensibility = .text:0x803D6840; // type:function size:0x68
fn_803D68B0 = .text:0x803D68B0; // type:function size:0x3C
@@ -22753,27 +22753,27 @@ SCSetWpadMotorMode = .text:0x803D6950; // type:function size:0x8
SCGetWpadSensorBarPosition = .text:0x803D6960; // type:function size:0x54
SCGetWpadSpeakerVolume = .text:0x803D69C0; // type:function size:0x54
SCSetWpadSpeakerVolume = .text:0x803D6A20; // type:function size:0x8
__SCF1 = .text:0x803D6A30; // type:function size:0x170
__SCF1 = .text:0x803D6A30; // type:function size:0x170 scope:local
SCGetProductArea = .text:0x803D6BA0; // type:function size:0x84
SCGetProductGameRegon = .text:0x803D6C30; // type:function size:0x84
SCGetProductGameRegion = .text:0x803D6C30; // type:function size:0x84
__PADDisableRecalibration = .text:0x803D6CC0; // type:function size:0x5C scope:global
fn_803D6D20 = .text:0x803D6D20; // type:function size:0x8
fn_803D6D30 = .text:0x803D6D30; // type:function size:0x8
fn_803D6D40 = .text:0x803D6D40; // type:function size:0x8
fn_803D6D50 = .text:0x803D6D50; // type:function size:0x8
fn_803D6D60 = .text:0x803D6D60; // type:function size:0x8
fn_803D6D70 = .text:0x803D6D70; // type:function size:0x8
fn_803D6D80 = .text:0x803D6D80; // type:function size:0x8
fn_803D6D90 = .text:0x803D6D90; // type:function size:0x8
fn_803D6DA0 = .text:0x803D6DA0; // type:function size:0x8
fn_803D6DB0 = .text:0x803D6DB0; // type:function size:0x8
fn_803D6DC0 = .text:0x803D6DC0; // type:function size:0x8
fn_803D6DD0 = .text:0x803D6DD0; // type:function size:0x8
fn_803D6DE0 = .text:0x803D6DE0; // type:function size:0x8
fn_803D6DF0 = .text:0x803D6DF0; // type:function size:0x8
fn_803D6E00 = .text:0x803D6E00; // type:function size:0x8
fn_803D6E10 = .text:0x803D6E10; // type:function size:0x8
OnShutdown2 = .text:0x803D6E20; // type:function size:0x1AC
__wpadNoAlloc = .text:0x803D6D20; // type:function size:0x8
__wpadNoFree = .text:0x803D6D30; // type:function size:0x8
WPADIsEnabledVSM = .text:0x803D6D40; // type:function size:0x8
WPADIsEnabledTRN = .text:0x803D6D50; // type:function size:0x8
WPADIsEnabledGTR = .text:0x803D6D60; // type:function size:0x8
WPADIsEnabledDRM = .text:0x803D6D70; // type:function size:0x8
WPADIsEnabledTKO = .text:0x803D6D80; // type:function size:0x8
WPADIsEnabledTBL = .text:0x803D6D90; // type:function size:0x8
WPADIsEnabledBLK = .text:0x803D6DA0; // type:function size:0x8
WPADIsEnabledWBC = .text:0x803D6DB0; // type:function size:0x8
WBCSetupCalibration = .text:0x803D6DC0; // type:function size:0x8
WBCGetCalibrationStatus = .text:0x803D6DD0; // type:function size:0x8
WBCGetBatteryLevel = .text:0x803D6DE0; // type:function size:0x8
WBCRead = .text:0x803D6DF0; // type:function size:0x8
WBCSetZEROPoint = .text:0x803D6E00; // type:function size:0x8
WBCGetTGCWeight = .text:0x803D6E10; // type:function size:0x8
OnShutdown = .text:0x803D6E20; // type:function size:0x1AC scope:local
__wpadSendDataSub = .text:0x803D6FD0; // type:function size:0x1C4
__wpadCalcRadioQuality = .text:0x803D71A0; // type:function size:0x110
__wpadFmt2Size = .text:0x803D72B0; // type:function size:0x74
@@ -22785,212 +22785,212 @@ __wpadManageHandler0 = .text:0x803D8D50; // type:function size:0x20
__wpadClearControlBlock = .text:0x803D8D70; // type:function size:0x338
__wpadInitSub = .text:0x803D90B0; // type:function size:0x2A4
WPADInit = .text:0x803D9360; // type:function size:0x70
fn_803D93D0 = .text:0x803D93D0; // type:function size:0x4
fn_803D93E0 = .text:0x803D93E0; // type:function size:0x4
fn_803D93F0 = .text:0x803D93F0; // type:function size:0x4
WPADStartFastSimpleSync = .text:0x803D93D0; // type:function size:0x4
WPADStopSimpleSync = .text:0x803D93E0; // type:function size:0x4
WPADSetSimpleSyncCallback = .text:0x803D93F0; // type:function size:0x4
WPADRegisterAllocator = .text:0x803D9400; // type:function size:0x4
WPADGetWorkMemorySize = .text:0x803D9410; // type:function size:0x4
WPADGetStatus = .text:0x803D9420; // type:function size:0x4
WPADGetRadioSensitivity = .text:0x803D9430; // type:function size:0x44
fn_803D9480 = .text:0x803D9480; // type:function size:0x34
fn_803D94C0 = .text:0x803D94C0; // type:function size:0x68
fn_803D9530 = .text:0x803D9530; // type:function size:0xCC
fn_803D9600 = .text:0x803D9600; // type:function size:0xE8
WPADGetSensorBarPosition = .text:0x803D9480; // type:function size:0x34
WPADSetAcceptConnection = .text:0x803D94C0; // type:function size:0x68
__wpadSetupConnectionCallback = .text:0x803D9530; // type:function size:0xCC
__wpadAbortConnectionCallback = .text:0x803D9600; // type:function size:0xE8
fn_803D96F0 = .text:0x803D96F0; // type:function size:0x124
fn_803D9820 = .text:0x803D9820; // type:function size:0xBD0
fn_803DA3F0 = .text:0x803DA3F0; // type:function size:0x120
fn_803DA510 = .text:0x803DA510; // type:function size:0x490
fn_803DA9A0 = .text:0x803DA9A0; // type:function size:0x24
fn_803DA9D0 = .text:0x803DA9D0; // type:function size:0xD4
fn_803DAAB0 = .text:0x803DAAB0; // type:function size:0x24
fn_803DAAE0 = .text:0x803DAAE0; // type:function size:0xC0
WPADSetSpeakerVolume = .text:0x803DABA0; // type:function size:0x34
fn_803DABE0 = .text:0x803DABE0; // type:function size:0x58
__wpadInitConnectionCallback = .text:0x803D9820; // type:function size:0xBD0
__wpadRetrieveChannel = .text:0x803DA3F0; // type:function size:0x120
__wpadConnectionCallback = .text:0x803DA510; // type:function size:0x490
__wpadReceiveCallback = .text:0x803DA9A0; // type:function size:0x24
WPADGetAccGravityUnit = .text:0x803DA9D0; // type:function size:0xD4
__wpadDisconnectCallback = .text:0x803DAAB0; // type:function size:0x24
WPADDisconnect = .text:0x803DAAE0; // type:function size:0xC0
WPADSetAutoSleepTime = .text:0x803DABA0; // type:function size:0x34
WPADSetControllerLastDataUpdateTime = .text:0x803DABE0; // type:function size:0x58
WPADProbe = .text:0x803DAC40; // type:function size:0x8C
WPADSetSamplingCallback = .text:0x803DACD0; // type:function size:0x88
fn_803DAD60 = .text:0x803DAD60; // type:function size:0x88
fn_803DADF0 = .text:0x803DADF0; // type:function size:0x5C
fn_803DAE50 = .text:0x803DAE50; // type:function size:0x44
fn_803DAEA0 = .text:0x803DAEA0; // type:function size:0xC0
fn_803DAF60 = .text:0x803DAF60; // type:function size:0x54
WPADSetConnectCallback = .text:0x803DAD60; // type:function size:0x88
WPADSetExtensionCallback = .text:0x803DADF0; // type:function size:0x5C
WPADGetDataFormat = .text:0x803DAE50; // type:function size:0x44
WPADSetDataFormat = .text:0x803DAEA0; // type:function size:0xC0
__wpadInfoCallback = .text:0x803DAF60; // type:function size:0x54
WPADGetInfoAsync = .text:0x803DAFC0; // type:function size:0x220
WPADControlMotor = .text:0x803DB1E0; // type:function size:0xCC
fn_803DB2B0 = .text:0x803DB2B0; // type:function size:0x34
WPADEnableMotor = .text:0x803DB2B0; // type:function size:0x34
WPADIsMotorEnabled = .text:0x803DB2F0; // type:function size:0x34
fn_803DB330 = .text:0x803DB330; // type:function size:0x1E8
WPADControlLed = .text:0x803DB330; // type:function size:0x1E8
WPADSaveConfig = .text:0x803DB520; // type:function size:0xAC
fn_803DB5D0 = .text:0x803DB5D0; // type:function size:0x98
fn_803DB670 = .text:0x803DB670; // type:function size:0x15C
fn_803DB7D0 = .text:0x803DB7D0; // type:function size:0x11C
fn_803DB8F0 = .text:0x803DB8F0; // type:function size:0xFC
fn_803DB9F0 = .text:0x803DB9F0; // type:function size:0x44
fn_803DBA40 = .text:0x803DBA40; // type:function size:0x15FC
fn_803DD040 = .text:0x803DD040; // type:function size:0x34
fn_803DD080 = .text:0x803DD080; // type:function size:0x50
IsBusyStream = .text:0x803DD0D0; // type:function size:0x138
WPADRead = .text:0x803DB5D0; // type:function size:0x98
WPADSetAutoSamplingBuf = .text:0x803DB670; // type:function size:0x15C
WPADiExcludeButton = .text:0x803DB7D0; // type:function size:0x11C
WPADiCopyOut = .text:0x803DB8F0; // type:function size:0xFC
WPADIsSpeakerEnabled = .text:0x803DB9F0; // type:function size:0x44
WPADControlSpeaker = .text:0x803DBA40; // type:function size:0x15FC
WPADGetSpeakerVolume = .text:0x803DD040; // type:function size:0x34
WPADSetSpeakerVolume = .text:0x803DD080; // type:function size:0x50
__wpadIsBusyStream = .text:0x803DD0D0; // type:function size:0x138 scope:local
WPADCanSendStreamData = .text:0x803DD210; // type:function size:0x84
fn_803DD2A0 = .text:0x803DD2A0; // type:function size:0x210
GetDpdSensitivity = .text:0x803DD4B0; // type:function size:0x34
fn_803DD4F0 = .text:0x803DD4F0; // type:function size:0x44
fn_803DD540 = .text:0x803DD540; // type:function size:0x38
fn_803DD580 = .text:0x803DD580; // type:function size:0x1080
fn_803DE600 = .text:0x803DE600; // type:function size:0x224
fn_803DE830 = .text:0x803DE830; // type:function size:0x6C
fn_803DE8A0 = .text:0x803DE8A0; // type:function size:0x1164
fn_803DFA10 = .text:0x803DFA10; // type:function size:0x368
fn_803DFD80 = .text:0x803DFD80; // type:function size:0xD4
fn_803DFE60 = .text:0x803DFE60; // type:function size:0x298
fn_803E0100 = .text:0x803E0100; // type:function size:0x1B4
fn_803E02C0 = .text:0x803E02C0; // type:function size:0x1B8
fn_803E0480 = .text:0x803E0480; // type:function size:0x1AC
fn_803E0630 = .text:0x803E0630; // type:function size:0x88
WPADSendStreamData = .text:0x803DD2A0; // type:function size:0x210
WPADGetDpdSensitivity = .text:0x803DD4B0; // type:function size:0x34
WPADIsDpdEnabled = .text:0x803DD4F0; // type:function size:0x44
__wpadDpdCallback = .text:0x803DD540; // type:function size:0x38 scope:local
WPADControlDpd = .text:0x803DD580; // type:function size:0x1080
WPADControlBLC = .text:0x803DE600; // type:function size:0x224
WPADiGetMplsStatus = .text:0x803DE830; // type:function size:0x6C
__wpadMplsCallback = .text:0x803DE8A0; // type:function size:0x1164 scope:local
WPADiControlMpls = .text:0x803DFA10; // type:function size:0x368
WPADiGetMplsCalibration = .text:0x803DFD80; // type:function size:0xD4
WPADiSendSetReportType = .text:0x803DFE60; // type:function size:0x298
WPADiSendWriteDataCmd = .text:0x803E0100; // type:function size:0x1B4
WPADiSendWriteData = .text:0x803E02C0; // type:function size:0x1B8
WPADiSendReadData = .text:0x803E0480; // type:function size:0x1AC
WPADiIsAvailableCmdQueue = .text:0x803E0630; // type:function size:0x88
WPADiClearQueue = .text:0x803E06C0; // type:function size:0x60
fn_803E0720 = .text:0x803E0720; // type:function size:0x8
fn_803E0730 = .text:0x803E0730; // type:function size:0x8
fn_803E0740 = .text:0x803E0740; // type:function size:0xE0
fn_803E0820 = .text:0x803E0820; // type:function size:0x11C
fn_803E0940 = .text:0x803E0940; // type:function size:0x11C
fn_803E0A60 = .text:0x803E0A60; // type:function size:0x64
fn_803E0AD0 = .text:0x803E0AD0; // type:function size:0xD8
fn_803E0BB0 = .text:0x803E0BB0; // type:function size:0x168
fn_803E0D20 = .text:0x803E0D20; // type:function size:0x2E4
fn_803E1010 = .text:0x803E1010; // type:function size:0xD04
fn_803E1D20 = .text:0x803E1D20; // type:function size:0x194
fn_803E1EC0 = .text:0x803E1EC0; // type:function size:0xA60
fn_803E2920 = .text:0x803E2920; // type:function size:0x140
fn_803E2A60 = .text:0x803E2A60; // type:function size:0xC0
fn_803E2B20 = .text:0x803E2B20; // type:function size:0x848
fn_803E3370 = .text:0x803E3370; // type:function size:0x1C8
fn_803E3540 = .text:0x803E3540; // type:function size:0x48
fn_803E3590 = .text:0x803E3590; // type:function size:0x6D0
fn_803E3C60 = .text:0x803E3C60; // type:function size:0x1A4
fn_803E3E10 = .text:0x803E3E10; // type:function size:0x128
fn_803E3F40 = .text:0x803E3F40; // type:function size:0x140
fn_803E4080 = .text:0x803E4080; // type:function size:0x440
fn_803E44C0 = .text:0x803E44C0; // type:function size:0x370
fn_803E4830 = .text:0x803E4830; // type:function size:0x108
fn_803E4940 = .text:0x803E4940; // type:function size:0x494
fn_803E4DE0 = .text:0x803E4DE0; // type:function size:0x278
fn_803E5060 = .text:0x803E5060; // type:function size:0x54C
fn_803E55B0 = .text:0x803E55B0; // type:function size:0x100
fn_803E56B0 = .text:0x803E56B0; // type:function size:0x178
fn_803E5830 = .text:0x803E5830; // type:function size:0x900
fn_803E6130 = .text:0x803E6130; // type:function size:0x5A4
fn_803E66E0 = .text:0x803E66E0; // type:function size:0x34
fn_803E6720 = .text:0x803E6720; // type:function size:0xD0
fn_803E67F0 = .text:0x803E67F0; // type:function size:0x44
fn_803E6840 = .text:0x803E6840; // type:function size:0x10C
fn_803E6950 = .text:0x803E6950; // type:function size:0x44
fn_803E69A0 = .text:0x803E69A0; // type:function size:0xE0
fn_803E6A80 = .text:0x803E6A80; // type:function size:0xA8
fn_803E6B30 = .text:0x803E6B30; // type:function size:0x150
fn_803E6C80 = .text:0x803E6C80; // type:function size:0x28
fn_803E6CB0 = .text:0x803E6CB0; // type:function size:0x168
fn_803E6E20 = .text:0x803E6E20; // type:function size:0x158
fn_803E6F80 = .text:0x803E6F80; // type:function size:0x4
fn_803E6F90 = .text:0x803E6F90; // type:function size:0x5D8
fn_803E7570 = .text:0x803E7570; // type:function size:0x5F0
fn_803E7B60 = .text:0x803E7B60; // type:function size:0x2E4
fn_803E7E50 = .text:0x803E7E50; // type:function size:0x2C
fn_803E7E80 = .text:0x803E7E80; // type:function size:0xD4
fn_803E7F60 = .text:0x803E7F60; // type:function size:0x80
fn_803E7FE0 = .text:0x803E7FE0; // type:function size:0x2CC
fn_803E82B0 = .text:0x803E82B0; // type:function size:0xD4
fn_803E8390 = .text:0x803E8390; // type:function size:0x10C
fn_803E84A0 = .text:0x803E84A0; // type:function size:0x32C
fn_803E87D0 = .text:0x803E87D0; // type:function size:0x8
fn_803E87E0 = .text:0x803E87E0; // type:function size:0x14
fn_803E8800 = .text:0x803E8800; // type:function size:0x14
fn_803E8820 = .text:0x803E8820; // type:function size:0x34
fn_803E8860 = .text:0x803E8860; // type:function size:0x158
fn_803E89C0 = .text:0x803E89C0; // type:function size:0x158
fn_803E8B20 = .text:0x803E8B20; // type:function size:0x3EC
fn_803E8F10 = .text:0x803E8F10; // type:function size:0x120
fn_803E9030 = .text:0x803E9030; // type:function size:0x6C
fn_803E90A0 = .text:0x803E90A0; // type:function size:0x74
fn_803E9120 = .text:0x803E9120; // type:function size:0x6C
fn_803E9190 = .text:0x803E9190; // type:function size:0x44
fn_803E91E0 = .text:0x803E91E0; // type:function size:0x158
fn_803E9340 = .text:0x803E9340; // type:function size:0x9CC
fn_803E9D10 = .text:0x803E9D10; // type:function size:0x20
fn_803E9D30 = .text:0x803E9D30; // type:function size:0x20
WUDiTerminateDevice = .text:0x803E9D50; // type:function size:0x98
fn_803E9DF0 = .text:0x803E9DF0; // type:function size:0x204
fn_803EA000 = .text:0x803EA000; // type:function size:0x270
fn_803EA270 = .text:0x803EA270; // type:function size:0x20
fn_803EA290 = .text:0x803EA290; // type:function size:0x10C
fn_803EA3A0 = .text:0x803EA3A0; // type:function size:0x180
fn_803EA520 = .text:0x803EA520; // type:function size:0x20
fn_803EA540 = .text:0x803EA540; // type:function size:0x14
fn_803EA560 = .text:0x803EA560; // type:function size:0x550
fn_803EAAB0 = .text:0x803EAAB0; // type:function size:0x80
fn_803EAB30 = .text:0x803EAB30; // type:function size:0x18
fn_803EAB50 = .text:0x803EAB50; // type:function size:0x434
fn_803EAF90 = .text:0x803EAF90; // type:function size:0x144
fn_803EB0E0 = .text:0x803EB0E0; // type:function size:0x20
fn_803EB100 = .text:0x803EB100; // type:function size:0x14
fn_803EB120 = .text:0x803EB120; // type:function size:0xB4
fn_803EB1E0 = .text:0x803EB1E0; // type:function size:0x20
fn_803EB200 = .text:0x803EB200; // type:function size:0x384
fn_803EB590 = .text:0x803EB590; // type:function size:0x104
WPADIsUsedCallbackByKPAD = .text:0x803E0720; // type:function size:0x8
WPADSetCallbackByKPAD = .text:0x803E0730; // type:function size:0x8
__wpadCertFailed = .text:0x803E0740; // type:function size:0xE0
__wpadCertCalcModX = .text:0x803E0820; // type:function size:0x11C
__wpadCertCalcModY = .text:0x803E0940; // type:function size:0x11C
__wpadCertChallengeCallback = .text:0x803E0A60; // type:function size:0x64
__wpadCertProbeReadyCallback = .text:0x803E0AD0; // type:function size:0xD8
__wpadCertGetParamCallback = .text:0x803E0BB0; // type:function size:0x168
__wpadCertGetParam = .text:0x803E0D20; // type:function size:0x2E4
__wpadCertWork = .text:0x803E1010; // type:function size:0xD04
__wpadAbortInitExtension = .text:0x803E1D20; // type:function size:0x194
__wpadGetDevConfig = .text:0x803E1EC0; // type:function size:0xA60
__wpadCheckCalibration = .text:0x803E2920; // type:function size:0x140
__wpadGetClConfig = .text:0x803E2A60; // type:function size:0xC0
__wpadGetExtConfig = .text:0x803E2B20; // type:function size:0x848
__wpadGetExtConfig2 = .text:0x803E3370; // type:function size:0x1C8
__wpadIsExtEncryptMain = .text:0x803E3540; // type:function size:0x48
__wpadGetExtType = .text:0x803E3590; // type:function size:0x6D0
__wpadGetGameInfo = .text:0x803E3C60; // type:function size:0x1A4
__wpadCheckDataFormat = .text:0x803E3E10; // type:function size:0x128
WPADiHIDParser = .text:0x803E3F40; // type:function size:0x140
__a1_20_status_report = .text:0x803E4080; // type:function size:0x440
__a1_21_user_data = .text:0x803E44C0; // type:function size:0x370
__a1_22_ack = .text:0x803E4830; // type:function size:0x108
__parse_dpd_data = .text:0x803E4940; // type:function size:0x494
__parse_dpdex_data = .text:0x803E4DE0; // type:function size:0x278
__parse_acc_data = .text:0x803E5060; // type:function size:0x54C
__parse_fs_data = .text:0x803E55B0; // type:function size:0x100
__parse_vs_data = .text:0x803E56B0; // type:function size:0x178
__parse_mp_data = .text:0x803E5830; // type:function size:0x900
__parse_ext_data = .text:0x803E6130; // type:function size:0x5A4
__a1_30_data_type = .text:0x803E66E0; // type:function size:0x34
__a1_31_data_type = .text:0x803E6720; // type:function size:0xD0
__a1_32_data_type = .text:0x803E67F0; // type:function size:0x44
__a1_33_data_type = .text:0x803E6840; // type:function size:0x10C
__a1_34_data_type = .text:0x803E6950; // type:function size:0x44
__a1_35_data_type = .text:0x803E69A0; // type:function size:0xE0
__a1_36_data_type = .text:0x803E6A80; // type:function size:0xA8
__a1_37_data_type = .text:0x803E6B30; // type:function size:0x150
__a1_3d_data_type = .text:0x803E6C80; // type:function size:0x28
__a1_3e_data_type = .text:0x803E6CB0; // type:function size:0x168
__a1_3f_data_type = .text:0x803E6E20; // type:function size:0x158
__a1_unused_report = .text:0x803E6F80; // type:function size:0x4
WPADiCreateKey = .text:0x803E6F90; // type:function size:0x5D8
WPADiCreateKeyFor3rd = .text:0x803E7570; // type:function size:0x5F0
WPADiDecode = .text:0x803E7B60; // type:function size:0x2E4
WPADiClearMemBlock = .text:0x803E7E50; // type:function size:0x2C
WPADWriteExtReg = .text:0x803E7E80; // type:function size:0xD4
LINTCmp = .text:0x803E7F60; // type:function size:0x80
LINTLshift = .text:0x803E7FE0; // type:function size:0x2CC
LINTMsb = .text:0x803E82B0; // type:function size:0xD4
LINTSub = .text:0x803E8390; // type:function size:0x10C
LINTMul = .text:0x803E84A0; // type:function size:0x32C
WUDIsLinkedWBC = .text:0x803E87D0; // type:function size:0x8
App_MEMalloc = .text:0x803E87E0; // type:function size:0x14
App_MEMfree = .text:0x803E8800; // type:function size:0x14
__wudSyncFlushCallback = .text:0x803E8820; // type:function size:0x34
__wudSyncPrepareSearch = .text:0x803E8860; // type:function size:0x158
__wudSyncVirginStandard = .text:0x803E89C0; // type:function size:0x158
__wudSyncStoredLinkKeyToE2prom = .text:0x803E8B20; // type:function size:0x3EC
__wudSyncStoredDevInfoToNand = .text:0x803E8F10; // type:function size:0x120
__wudOpenWiiFitCallback = .text:0x803E9030; // type:function size:0x6C
__wudSeekWiiFitCallback = .text:0x803E90A0; // type:function size:0x74
__wudUpdateWiiFitCallback = .text:0x803E9120; // type:function size:0x6C
__wudCloseWiiFitCallback = .text:0x803E9190; // type:function size:0x44
__wudSyncDone = .text:0x803E91E0; // type:function size:0x158
__wudSyncHandler = .text:0x803E9340; // type:function size:0x9CC
__wudSyncHandler0 = .text:0x803E9D10; // type:function size:0x20
__wudDeleteFlushCallback = .text:0x803E9D30; // type:function size:0x20
__wudDeleteDisconnectAll = .text:0x803E9D50; // type:function size:0x98
__wudDeleteCleanupDatabase = .text:0x803E9DF0; // type:function size:0x204
__wudDeleteHandler = .text:0x803EA000; // type:function size:0x270
__wudDeleteHandler0 = .text:0x803EA270; // type:function size:0x20
__wudStackCheckDeviceInfo = .text:0x803EA290; // type:function size:0x10C
__wudStackHandler = .text:0x803EA3A0; // type:function size:0x180
__wudStackHandler0 = .text:0x803EA520; // type:function size:0x20
__wudInitFlushCallback = .text:0x803EA540; // type:function size:0x14
__wudInitDevInfo = .text:0x803EA560; // type:function size:0x550
__wudNandResultCallback = .text:0x803EAAB0; // type:function size:0x80
__wudNandFlushCallback = .text:0x803EAB30; // type:function size:0x18
__wudGetDevInfoFromWiiFit = .text:0x803EAB50; // type:function size:0x434
__wudInitHandler = .text:0x803EAF90; // type:function size:0x144
__wudInitHandler0 = .text:0x803EB0E0; // type:function size:0x20
__wudShutdownFlushCallback = .text:0x803EB100; // type:function size:0x14
__wudShutdownDone = .text:0x803EB120; // type:function size:0xB4
__wudShutdownHandler0 = .text:0x803EB1E0; // type:function size:0x20
__wudClearControlBlock = .text:0x803EB200; // type:function size:0x384
WUDInit = .text:0x803EB590; // type:function size:0x104
WUDRegisterAllocator = .text:0x803EB6A0; // type:function size:0x4C
WUDGetWorkMemeorySize = .text:0x803EB6F0; // type:function size:0x4
fn_803EB700 = .text:0x803EB700; // type:function size:0x210
WPADGetStatus2 = .text:0x803EB910; // type:function size:0x3C
WUDGetAllocatedMemSize = .text:0x803EB6F0; // type:function size:0x4
WUDShutdown = .text:0x803EB700; // type:function size:0x210
WUDGetStatus = .text:0x803EB910; // type:function size:0x3C
WUDGetBufferStatus = .text:0x803EB950; // type:function size:0x48
WUDSetSniffMode = .text:0x803EB9A0; // type:function size:0x6C
fn_803EBA10 = .text:0x803EBA10; // type:function size:0x4C
fn_803EBA60 = .text:0x803EBA60; // type:function size:0x14C
fn_803EBBB0 = .text:0x803EBBB0; // type:function size:0x14
fn_803EBBD0 = .text:0x803EBBD0; // type:function size:0x90
fn_803EBC60 = .text:0x803EBC60; // type:function size:0x88
fn_803EBCF0 = .text:0x803EBCF0; // type:function size:0xC0
fn_803EBDB0 = .text:0x803EBDB0; // type:function size:0x4C
fn_803EBE00 = .text:0x803EBE00; // type:function size:0x4C
WUDSetSyncSimpleCallback = .text:0x803EBA10; // type:function size:0x4C
__wudStartSyncDevice = .text:0x803EBA60; // type:function size:0x14C
WUDStartFastSyncSimple = .text:0x803EBBB0; // type:function size:0x14
WUDCancelSyncDevice = .text:0x803EBBD0; // type:function size:0x90
WUDStopSyncSimple = .text:0x803EBC60; // type:function size:0x88
WUDSetDisableChannel = .text:0x803EBCF0; // type:function size:0xC0
WUDSetHidRecvCallback = .text:0x803EBDB0; // type:function size:0x4C
WUDSetHidConnCallback = .text:0x803EBE00; // type:function size:0x4C
WUDSetVisibility = .text:0x803EBE50; // type:function size:0x58
fn_803EBEB0 = .text:0x803EBEB0; // type:function size:0x4
fn_803EBEC0 = .text:0x803EBEC0; // type:function size:0xCC
fn_803EBF90 = .text:0x803EBF90; // type:function size:0x230
fn_803EC1C0 = .text:0x803EC1C0; // type:function size:0x178
fn_803EC340 = .text:0x803EC340; // type:function size:0x20
fn_803EC360 = .text:0x803EC360; // type:function size:0x160
fn_803EC4C0 = .text:0x803EC4C0; // type:function size:0x130
fn_803EC5F0 = .text:0x803EC5F0; // type:function size:0x104
__wudModuleRebootCallback = .text:0x803EBEB0; // type:function size:0x4
__wudInstallPatchCallback = .text:0x803EBEC0; // type:function size:0xCC
__wudWritePatchCallback = .text:0x803EBF90; // type:function size:0x230
__wudRemovePatchCallback = .text:0x803EC1C0; // type:function size:0x178
__wudSuperPeekPokeCallback = .text:0x803EC340; // type:function size:0x20
__wudAppendRuntimePatch = .text:0x803EC360; // type:function size:0x160
WUDiRegisterDevice = .text:0x803EC4C0; // type:function size:0x130
WUDiRemoveDevice = .text:0x803EC5F0; // type:function size:0x104
WUDiGetDevInfo = .text:0x803EC700; // type:function size:0xD8
fn_803EC7E0 = .text:0x803EC7E0; // type:function size:0x114
fn_803EC900 = .text:0x803EC900; // type:function size:0x114
fn_803ECA20 = .text:0x803ECA20; // type:function size:0x168
fn_803ECB90 = .text:0x803ECB90; // type:function size:0x114
fn_803ECCB0 = .text:0x803ECCB0; // type:function size:0x114
fn_803ECDD0 = .text:0x803ECDD0; // type:function size:0x190
fn_803ECF60 = .text:0x803ECF60; // type:function size:0x198
fn_803ED100 = .text:0x803ED100; // type:function size:0x74
fn_803ED180 = .text:0x803ED180; // type:function size:0x20
fn_803ED1A0 = .text:0x803ED1A0; // type:function size:0x374
fn_803ED520 = .text:0x803ED520; // type:function size:0x144
fn_803ED670 = .text:0x803ED670; // type:function size:0x278
fn_803ED8F0 = .text:0x803ED8F0; // type:function size:0x1C
fn_803ED910 = .text:0x803ED910; // type:function size:0x1F0
fn_803EDB00 = .text:0x803EDB00; // type:function size:0x9C
WUDiMoveTopSmpDevInfoPtr = .text:0x803EC7E0; // type:function size:0x114
WUDiMoveBottomSmpDevInfoPtr = .text:0x803EC900; // type:function size:0x114
WUDiMoveTopOfDisconnectedSmpDevice = .text:0x803ECA20; // type:function size:0x168
WUDiMoveTopStdDevInfoPtr = .text:0x803ECB90; // type:function size:0x114
WUDiMoveBottomStdDevInfoPtr = .text:0x803ECCB0; // type:function size:0x114
WUDiMoveTopOfDisconnectedStdDevice = .text:0x803ECDD0; // type:function size:0x190
WUDiMoveTopOfUnusedStdDevice = .text:0x803ECF60; // type:function size:0x198
WUDIsBusy = .text:0x803ED100; // type:function size:0x74
__wudCleanupStackCallback = .text:0x803ED180; // type:function size:0x20
__wudSecurityEventStackCallback = .text:0x803ED1A0; // type:function size:0x374
__wudSearchEventStackCallback = .text:0x803ED520; // type:function size:0x144
__wudVendorSpecificEventStackCallback = .text:0x803ED670; // type:function size:0x278
__wudDeviceStatusEventStackCallback = .text:0x803ED8F0; // type:function size:0x1C
__wudLinkKeyEventStackCallback = .text:0x803ED910; // type:function size:0x1F0
__wudPowerMangeEventStackCallback = .text:0x803EDB00; // type:function size:0x9C
_WUDGetDevAddr = .text:0x803EDBA0; // type:function size:0x54
fn_803EDC00 = .text:0x803EDC00; // type:function size:0x58
fn_803EDC60 = .text:0x803EDC60; // type:function size:0x58
fn_803EDCC0 = .text:0x803EDCC0; // type:function size:0x3C
fn_803EDD00 = .text:0x803EDD00; // type:function size:0xC
fn_803EDD10 = .text:0x803EDD10; // type:function size:0x74
fn_803EDD90 = .text:0x803EDD90; // type:function size:0x54
fn_803EDDF0 = .text:0x803EDDF0; // type:function size:0x4C
fn_803EDE40 = .text:0x803EDE40; // type:function size:0x14
fn_803EDE60 = .text:0x803EDE60; // type:function size:0x14
fn_803EDE80 = .text:0x803EDE80; // type:function size:0x14
fn_803EDEA0 = .text:0x803EDEA0; // type:function size:0x14
fn_803EDEC0 = .text:0x803EDEC0; // type:function size:0x410
_WUDGetQueuedSize = .text:0x803EDC00; // type:function size:0x58
_WUDGetNotAckedSize = .text:0x803EDC60; // type:function size:0x58
_WUDGetLinkNumber = .text:0x803EDCC0; // type:function size:0x3C
WUDiGetDiscoverDevice = .text:0x803EDD00; // type:function size:0xC
WUDSetDeviceHistory = .text:0x803EDD10; // type:function size:0x74
WUDIsLatestDevice = .text:0x803EDD90; // type:function size:0x54
WUDUpdateSCSetting = .text:0x803EDDF0; // type:function size:0x4C
WUDiSetDevAddrForHandle = .text:0x803EDE40; // type:function size:0x14
WUDiGetDevAddrForHandle = .text:0x803EDE60; // type:function size:0x14
WUDiSetQueueSizeForHandle = .text:0x803EDE80; // type:function size:0x14
WUDiSetNotAckNumForHandle = .text:0x803EDEA0; // type:function size:0x14
WUDiHidHostEventCallback = .text:0x803EDEC0; // type:function size:0x410
bta_hh_co_data = .text:0x803EE2D0; // type:function size:0x28
fn_803EE300 = .text:0x803EE300; // type:function size:0x4
fn_803EE310 = .text:0x803EE310; // type:function size:0x4
fn_803EE320 = .text:0x803EE320; // type:function size:0x8
fn_803EE330 = .text:0x803EE330; // type:function size:0x90
SetPosParam = .text:0x803EE3C0; // type:function size:0x1C
bta_hh_co_open = .text:0x803EE300; // type:function size:0x4
bta_hh_co_close = .text:0x803EE310; // type:function size:0x4
bta_dm_co_get_compress_memory = .text:0x803EE320; // type:function size:0x8
KPADSetBtnRepeat = .text:0x803EE330; // type:function size:0x90
KPADSetPosParam = .text:0x803EE3C0; // type:function size:0x1C
KPADSetHoriParam = .text:0x803EE3E0; // type:function size:0x1C
KPADSetDistParam = .text:0x803EE400; // type:function size:0x1C
KPADSetAccParam = .text:0x803EE420; // type:function size:0x1C
@@ -22998,30 +22998,30 @@ reset_kpad = .text:0x803EE440; // type:function size:0x1B4
fn_803EE600 = .text:0x803EE600; // type:function size:0x18
fn_803EE620 = .text:0x803EE620; // type:function size:0x18
calc_button_repeat = .text:0x803EE640; // type:function size:0x1A8
fn_803EE7F0 = .text:0x803EE7F0; // type:function size:0xB4
read_kpad_button = .text:0x803EE7F0; // type:function size:0xB4
calc_acc = .text:0x803EE8B0; // type:function size:0xB4
calc_acc_horizon = .text:0x803EE970; // type:function size:0x194
fn_803EEB10 = .text:0x803EEB10; // type:function size:0x124
calc_acc_vertical = .text:0x803EEB10; // type:function size:0x124
read_kpad_acc = .text:0x803EEC40; // type:function size:0x588
select_2obj_first = .text:0x803EF1D0; // type:function size:0x1E8
fn_803EF3C0 = .text:0x803EF3C0; // type:function size:0x228
select_2obj_continue = .text:0x803EF3C0; // type:function size:0x228
select_1obj_first = .text:0x803EF5F0; // type:function size:0x1B4
fn_803EF7B0 = .text:0x803EF7B0; // type:function size:0x174
fn_803EF930 = .text:0x803EF930; // type:function size:0x5D4
select_1obj_continue = .text:0x803EF7B0; // type:function size:0x174
calc_dpd_variable = .text:0x803EF930; // type:function size:0x5D4
read_kpad_dpd = .text:0x803EFF10; // type:function size:0x4BC
clamp_stick_circle = .text:0x803F03D0; // type:function size:0x128
clamp_stick_cross = .text:0x803F0500; // type:function size:0x224
read_kpad_stick = .text:0x803F0730; // type:function size:0x103C
read_kpad_ext = .text:0x803F0730; // type:function size:0x103C
fn_803F1770 = .text:0x803F1770; // type:function size:0xA0
KPADRead = .text:0x803F1810; // type:function size:0xC
KPADReadEx = .text:0x803F1820; // type:function size:0x8
KPADiRead = .text:0x803F1830; // type:function size:0x808
KPADInit = .text:0x803F2040; // type:function size:0x468
fn_803F24B0 = .text:0x803F24B0; // type:function size:0x1FC
fn_803F26B0 = .text:0x803F26B0; // type:function size:0x58
fn_803F2710 = .text:0x803F2710; // type:function size:0x1C
fn_803F2730 = .text:0x803F2730; // type:function size:0x2C
fn_803F2760 = .text:0x803F2760; // type:function size:0x94
KPADInitEx = .text:0x803F2040; // type:function size:0x468
KPADiConnectCallback = .text:0x803F24B0; // type:function size:0x1FC
KPADSetConnectCallback = .text:0x803F26B0; // type:function size:0x58
KPADiControlWbcCallback = .text:0x803F2710; // type:function size:0x1C
KPADiUpdateTempWbcCallback = .text:0x803F2730; // type:function size:0x2C
KPADiControlDpdCallback = .text:0x803F2760; // type:function size:0x94
fn_803F2800 = .text:0x803F2800; // type:function size:0x2C
fn_803F2830 = .text:0x803F2830; // type:function size:0x28
fn_803F2860 = .text:0x803F2860; // type:function size:0x4
@@ -23047,7 +23047,7 @@ fn_803F2AA0 = .text:0x803F2AA0; // type:function size:0x4
fn_803F2AB0 = .text:0x803F2AB0; // type:function size:0x4
fn_803F2AC0 = .text:0x803F2AC0; // type:function size:0x1C
fn_803F2AE0 = .text:0x803F2AE0; // type:function size:0x6C
fn_803F2B50 = .text:0x803F2B50; // type:function size:0x9D0
KPADiSamplingCallback = .text:0x803F2B50; // type:function size:0x9D0
fn_803F3520 = .text:0x803F3520; // type:function size:0xE4
fn_803F3610 = .text:0x803F3610; // type:function size:0x18
fn_803F3630 = .text:0x803F3630; // type:function size:0x34
@@ -26120,28 +26120,28 @@ BindAnimation__Q24nw4r3lytFPQ34nw4r3lyt5GroupPQ34nw4r3lyt13AnimTransformbb = .te
UnbindAnimation__Q24nw4r3lytFPQ34nw4r3lyt5GroupPQ34nw4r3lyt13AnimTransformb = .text:0x80493350; // type:function size:0x78
SetAnimationEnable__Q24nw4r3lytFPQ34nw4r3lyt5GroupPQ34nw4r3lyt13AnimTransformbb = .text:0x804933D0; // type:function size:0x70
IsContain__Q24nw4r3lytFPQ34nw4r3lyt4PaneRCQ34nw4r4math4VEC2 = .text:0x80493440; // type:function size:0xCC
readNand__Q23EGG7ArchiveFP12NANDFileInfoPvUll = .text:0x80493510; // type:function size:0x70
readNANDFile__3EGGFP12NANDFileInfoPvUll = .text:0x80493510; // type:function size:0x70
__ct__Q23EGG7ArchiveFv = .text:0x80493580; // type:function size:0x70
__dt__Q23EGG7ArchiveFv = .text:0x804935F0; // type:function size:0x6C
initHandle__Q23EGG7ArchiveFPvQ33EGG7Archive9MountType = .text:0x80493660; // type:function size:0x70
findArchive__Q23EGG7ArchiveFPv = .text:0x804936D0; // type:function size:0x88
findArchive2__Q23EGG7ArchiveFPv = .text:0x80493760; // type:function size:0x88
appendList__Q23EGG7ArchiveFPQ23EGG7Arc = .text:0x804937F0; // type:function size:0x5C
findArchive__Q23EGG7ArchiveFP12NANDFileInfo = .text:0x80493760; // type:function size:0x88
appendList__Q23EGG7ArchiveFPQ23EGG7Archive = .text:0x804937F0; // type:function size:0x5C
removeList__Q23EGG7ArchiveFPQ23EGG7Archive = .text:0x80493850; // type:function size:0x10
mount__Q23EGG7ArchiveFPvPQ23EGG4Heapi = .text:0x80493860; // type:function size:0xE4
mountType2__Q23EGG7ArchiveFPvPQ23EGG4Heapi = .text:0x80493950; // type:function size:0xE4
mountNandFile__EGG__Archive = .text:0x80493A40; // type:function size:0x7C
loadFST__Q23EGG7ArchiveFPCcPQ23EGG4Heapl = .text:0x80493AC0; // type:function size:0xBC
mountFST__Q23EGG7ArchiveFPvPQ23EGG4Heapi = .text:0x80493950; // type:function size:0xE4
mountNAND__Q23EGG7ArchiveFP12NANDFileInfoPQ23EGG4Heapi = .text:0x80493A40; // type:function size:0x7C
loadFST__Q23EGG7ArchiveFPCcPQ23EGG4Heapi = .text:0x80493AC0; // type:function size:0xBC
unmount__Q23EGG7ArchiveFv = .text:0x80493B80; // type:function size:0x94
getFile__Q23EGG7ArchiveFPCcPQ33EGG7Archive8FileInfo = .text:0x80493C20; // type:function size:0xC4
convertPathToEntryID__Q23EGG7ArchiveFPCc = .text:0x80493CF0; // type:function size:0x8
getFileFast__Q23EGG7ArchiveFlPQ33EGG7Archive8FileInfo = .text:0x80493D00; // type:function size:0xB8
getFileFast__Q23EGG7ArchiveFlPQ23EGG4Heapl = .text:0x80493DC0; // type:function size:0x148
countFileCallbackFunc__3EGGFPvPvUlPC11ARCDirEntryPCc = .text:0x80493F10; // type:function size:0x18
getFileFast__Q23EGG7ArchiveFlPQ23EGG4Heapi = .text:0x80493DC0; // type:function size:0x148
countFileCallbackFunc__3EGGFPvPvPC11ARCDirEntryPCc = .text:0x80493F10; // type:function size:0x18
countFile__Q23EGG7ArchiveFv = .text:0x80493F30; // type:function size:0x38
searchInsideWithPath__3EGGFPQ23EGG7ArchiveP9ARCHandlePFPvPvUlPC11ARCDirEntryPCc_vPvPcUl = .text:0x80493F70; // type:function size:0x144
searchInsideWithPath__3EGGFPQ23EGG7ArchiveP9ARCHandlePFPvPvPC11ARCDirEntryPCc_vPvPcUl = .text:0x80493F70; // type:function size:0x144
searchInside__Q23EGG7ArchiveFPFPvPvPC11ARCDirEntryPCc_vPv = .text:0x804940C0; // type:function size:0x74
loadFromDisc__EGG__Archive = .text:0x80494140; // type:function size:0x114
loadNAND__Q23EGG7ArchiveFP12NANDFileInfoPQ23EGG4Heapi = .text:0x80494140; // type:function size:0x114
initialize__Q23EGG7DvdFileFv = .text:0x80494260; // type:function size:0x40
__ct__Q23EGG7DvdFileFv = .text:0x804942A0; // type:function size:0x44
__dt__Q23EGG7DvdFileFv = .text:0x804942F0; // type:function size:0x68
@@ -26154,10 +26154,10 @@ readData__Q23EGG7DvdFileFPvll = .text:0x80494510; // type:function size:0xC4
writeData__Q23EGG7DvdFileFPCvll = .text:0x804945E0; // type:function size:0x8
sync__Q23EGG7DvdFileFv = .text:0x804945F0; // type:function size:0x54
doneProcess__Q23EGG7DvdFileFlP11DVDFileInfo = .text:0x80494650; // type:function size:0x14
getFileSize__Q23EGG7DvdFileFv = .text:0x80494670; // type:function size:0x8
getFileSize__Q23EGG7DvdFileCFv = .text:0x80494670; // type:function size:0x8
loadToMainRAM__Q23EGG9DvdRipperFlPUcPQ23EGG4HeapQ33EGG9DvdRipper15EAllocDirectionUlPUlPUl = .text:0x80494680; // type:function size:0xAC
loadToMainRAM__Q23EGG9DvdRipperFPQ23EGG7DvdFilePUcPQ23EGG4HeapQ33EGG9DvdRipper15EAllocDirectionUlPUlPUl = .text:0x80494730; // type:function size:0xAC
EGG__DvdRipper__loadToMainRAM = .text:0x804947E0; // type:function size:0x1C8
loadToMainRAM__Q23EGG9DvdRipperFPCcPUcPQ23EGG4HeapQ33EGG9DvdRipper15EAllocDirectionUlPUlPUl = .text:0x80494730; // type:function size:0xAC
loadToMainRAM__Q23EGG9DvdRipperFPQ23EGG7DvdFilePUcPQ23EGG4HeapQ33EGG9DvdRipper15EAllocDirectionUlPUlPUl = .text:0x804947E0; // type:function size:0x1C8
loadToMainRAMDecomp__Q23EGG9DvdRipperFPQ23EGG7DvdFilePQ23EGG12StreamDecompPUcPQ23EGG4HeapQ33EGG9DvdRipper15EAllocDirectionlUlUlPUlPUl = .text:0x804949B0; // type:function size:0x2D0
init__Q23EGG14StreamDecompLZFPvUl = .text:0x80494C80; // type:function size:0x30
decomp__Q23EGG14StreamDecompLZFPCvUl = .text:0x80494CB0; // type:function size:0x2C
@@ -26167,22 +26167,22 @@ init__Q23EGG14StreamDecompLHFPvUl = .text:0x80494D40; // type:function size:0x30
decomp__Q23EGG14StreamDecompLHFPCvUl = .text:0x80494D70; // type:function size:0x2C
init__Q23EGG15StreamDecompLRCFPvUl = .text:0x80494DA0; // type:function size:0x30
decomp__Q23EGG15StreamDecompLRCFPCvUl = .text:0x80494DD0; // type:function size:0x2C
GetSZSUncompressedSize__EGG__StreamDecompSZS = .text:0x80494E00; // type:function size:0x24
InitUncompContextSZS__EGG__StreamDecompSZS = .text:0x80494E30; // type:function size:0x30
VerifiesSZSHeader__EGG__StreamDecompSZS = .text:0x80494E60; // type:function size:0xFC
ReadUncompSZS__EGG__StreamDecompSZS = .text:0x80494F60; // type:function size:0x270
getUncompressedSize__Q23EGG16UncompContextSZSFPCv = .text:0x80494E00; // type:function size:0x24
initUncompContext__Q23EGG16UncompContextSZSFPv = .text:0x80494E30; // type:function size:0x30
readHeader__Q23EGG16UncompContextSZSFPUcPlPCUcUll = .text:0x80494E60; // type:function size:0xFC
readUncomp__Q23EGG16UncompContextSZSFPCvUl = .text:0x80494F60; // type:function size:0x270
init__Q23EGG15StreamDecompSZSFPvUl = .text:0x804951D0; // type:function size:0x30
decomp__Q23EGG15StreamDecompSZSFPCvUl = .text:0x80495200; // type:function size:0x2C
getUncompressedSize__Q23EGG15StreamDecompSZSFPCv = .text:0x80495230; // type:function size:0x8
getHeaderSize__Q23EGG15StreamDecompSZSFv = .text:0x80495240; // type:function size:0x8
getUncompressedSize__Q23EGG15StreamDecompLRCFPCv = .text:0x80495250; // type:function size:0x8
getHeaderSize__Q23EGG15StreamDecompLRCFv = .text:0x80495260; // type:function size:0x8
getUncompressedSize__Q23EGG14StreamDecompLHFPCv = .text:0x80495270; // type:function size:0x8
getHeaderSize__Q23EGG14StreamDecompLHFv = .text:0x80495280; // type:function size:0x8
getUncompressedSize__Q23EGG14StreamDecompRLFPCv = .text:0x80495290; // type:function size:0x8
getHeaderSize__Q23EGG14StreamDecompRLFv = .text:0x804952A0; // type:function size:0x8
getUncompressedSize__Q23EGG14StreamDecompLZFPCv = .text:0x804952B0; // type:function size:0x8
getHeaderSize__Q23EGG14StreamDecompLZFv = .text:0x804952C0; // type:function size:0x8
getUncompressedSize__Q23EGG15StreamDecompSZSFPCv = .text:0x80495230; // type:function size:0x8 scope:weak
getHeaderSize__Q23EGG15StreamDecompSZSFv = .text:0x80495240; // type:function size:0x8 scope:weak
getUncompressedSize__Q23EGG15StreamDecompLRCFPCv = .text:0x80495250; // type:function size:0x8 scope:weak
getHeaderSize__Q23EGG15StreamDecompLRCFv = .text:0x80495260; // type:function size:0x8 scope:weak
getUncompressedSize__Q23EGG14StreamDecompLHFPCv = .text:0x80495270; // type:function size:0x8 scope:weak
getHeaderSize__Q23EGG14StreamDecompLHFv = .text:0x80495280; // type:function size:0x8 scope:weak
getUncompressedSize__Q23EGG14StreamDecompRLFPCv = .text:0x80495290; // type:function size:0x8 scope:weak
getHeaderSize__Q23EGG14StreamDecompRLFv = .text:0x804952A0; // type:function size:0x8 scope:weak
getUncompressedSize__Q23EGG14StreamDecompLZFPCv = .text:0x804952B0; // type:function size:0x8 scope:weak
getHeaderSize__Q23EGG14StreamDecompLZFv = .text:0x804952C0; // type:function size:0x8 scope:weak
MEM_AllocFor_Heap__FP12MEMAllocatorUl = .text:0x804952D0; // type:function size:0x1C scope:local
MEM_FreeFor_Heap__FP12MEMAllocatorPv = .text:0x804952F0; // type:function size:0x14 scope:local
MEMInitAllocatorFor_Heap__FP12MEMAllocatorlPv = .text:0x80495310; // type:function size:0x1C
@@ -26235,7 +26235,7 @@ getTotalFreeSize__Q23EGG7FrmHeapFv = .text:0x804962C0; // type:function size:0x1
getAllocatableSize__Q23EGG7FrmHeapFl = .text:0x804962E0; // type:function size:0x8
adjust__Q23EGG7FrmHeapFv = .text:0x804962F0; // type:function size:0x78
recordState__Q23EGG7FrmHeapFUl = .text:0x80496370; // type:function size:0x8
freeState__Q23EGG7FrmHeapFUl = .text:0x80496380; // type:function size:0x8
freeByState__Q23EGG7FrmHeapFUl = .text:0x80496380; // type:function size:0x8
getHeapKind__Q23EGG7FrmHeapCFv = .text:0x80496390; // type:function size:0x8
__ct__Q23EGG10AssertHeapFP12MEMiHeapHead = .text:0x804963A0; // type:function size:0x3C
__dt__Q23EGG10AssertHeapFv = .text:0x804963E0; // type:function size:0x74
@@ -26315,8 +26315,8 @@ init__Q23EGG10CoreStatusFv = .text:0x80498F90; // type:function size:0xC
getFSStickButton__Q23EGG10CoreStatusCFv = .text:0x80498FA0; // type:function size:0xAC
__ct__Q23EGG14CoreControllerFv = .text:0x80499050; // type:function size:0x60
sceneReset__Q23EGG14CoreControllerFv = .text:0x804990B0; // type:function size:0xB4
getDpdRawPos__Q23EGG14CoreControllerCFv = .text:0x80499170; // type:function size:0x14
getDpdDistance__Q23EGG14CoreControllerCFv = .text:0x80499190; // type:function size:0xC
getDpdRawPos__Q23EGG14CoreControllerFv = .text:0x80499170; // type:function size:0x14
getDpdValidFlag__Q23EGG14CoreControllerFv = .text:0x80499190; // type:function size:0xC
startMotor__Q23EGG14CoreControllerFv = .text:0x804991A0; // type:function size:0xC
stopMotor__Q23EGG14CoreControllerFv = .text:0x804991B0; // type:function size:0xC
createRumbleMgr__Q23EGG14CoreControllerFUc = .text:0x804991C0; // type:function size:0x58
@@ -26324,7 +26324,7 @@ startPatternRumble__Q23EGG14CoreControllerFPCcib = .text:0x80499220; // type:fun
stopRumbleMgr__Q23EGG14CoreControllerFv = .text:0x80499240; // type:function size:0x14
getCoreStatus__Q23EGG14CoreControllerFi = .text:0x80499260; // type:function size:0x10
calc_posture_matrix__Q23EGG14CoreControllerFRQ23EGG9Matrix34fb = .text:0x80499270; // type:function size:0x3E8
beginFrame__Q23EGG14CoreControllerFPv = .text:0x80499660; // type:function size:0x3F4
beginFrame__Q23EGG14CoreControllerFP9PADStatus = .text:0x80499660; // type:function size:0x3F4
endFrame__Q23EGG14CoreControllerFv = .text:0x80499A60; // type:function size:0x5C
getFreeStickX__Q23EGG14CoreControllerCFv = .text:0x80499AC0; // type:function size:0x1C
getFreeStickY__Q23EGG14CoreControllerCFv = .text:0x80499AE0; // type:function size:0x1C
@@ -26333,8 +26333,8 @@ createInstance__Q23EGG17CoreControllerMgrFv = .text:0x80499B80; // type:function
deleteInstance__Q23EGG17CoreControllerMgrFv = .text:0x80499BD0; // type:function size:0x10
getNthController__Q23EGG17CoreControllerMgrFi = .text:0x80499BE0; // type:function size:0x74
errRangeOver__Q23EGG32TBuffer<PQ23EGG14CoreController>Fv = .text:0x80499C60; // type:function size:0x4
allocThunk__Q23EGG17CoreControllerMgrFUl = .text:0x80499C70; // type:function size:0x18
deleteThunk__Q23EGG17CoreControllerMgrFPv = .text:0x80499C90; // type:function size:0x38
alloc__Q23EGG27@unnamed@eggController_cpp@FUl = .text:0x80499C70; // type:function size:0x18
free__Q23EGG27@unnamed@eggController_cpp@FPv = .text:0x80499C90; // type:function size:0x38
connectCallback__Q23EGG17CoreControllerMgrFll = .text:0x80499CD0; // type:function size:0x3C
__ct__Q23EGG17CoreControllerMgrFv = .text:0x80499D10; // type:function size:0x320
__dt__Q23EGG32TBuffer<PQ23EGG14CoreController>Fv = .text:0x8049A030; // type:function size:0x78
@@ -26350,16 +26350,16 @@ stop__Q23EGG19ControllerRumbleMgrFv = .text:0x8049A620; // type:function size:0x
calc__Q23EGG19ControllerRumbleMgrFv = .text:0x8049A690; // type:function size:0x104
startPattern__Q23EGG19ControllerRumbleMgrFPCcib = .text:0x8049A7A0; // type:function size:0x50
getUnitFromList__Q23EGG19ControllerRumbleMgrFb = .text:0x8049A7F0; // type:function size:0xAC
__dt__Q23EGG19ControllerRumbleMgrFv = .text:0x8049A8A0; // type:function size:0x40
__dt__Q23EGG20ControllerRumbleUnitFv = .text:0x8049A8E0; // type:function size:0x40
setAccParam__Q23EGG14CoreControllerFff = .text:0x8049A920; // type:function size:0x8
setDistParam__Q23EGG14CoreControllerFff = .text:0x8049A930; // type:function size:0x8
setHoriParam__Q23EGG14CoreControllerFff = .text:0x8049A940; // type:function size:0x8
allocate__Q23EGG29TBuffer<Q23EGG12eCoreDevType>Fii = .text:0x8049A950; // type:function size:0x50
allocate__Q23EGG29TBuffer<Q23EGG12eCoreDevType>FiPQ23EGG4Heapi = .text:0x8049A9A0; // type:function size:0x74
onAllocate__Q23EGG29TBuffer<Q23EGG12eCoreDevType>FPQ23EGG4Heap = .text:0x8049AA20; // type:function size:0x4
allocate__Q23EGG32TBuffer<PQ23EGG14CoreController>Fii = .text:0x8049AA30; // type:function size:0x50
allocate__Q23EGG32TBuffer<PQ23EGG14CoreController>FiPQ23EGG4Heapi = .text:0x8049AA80; // type:function size:0x74
__dt__Q23EGG19ControllerRumbleMgrFv = .text:0x8049A8A0; // type:function size:0x40 scope:weak
__dt__Q23EGG20ControllerRumbleUnitFv = .text:0x8049A8E0; // type:function size:0x40 scope:weak
setAccParam__Q23EGG14CoreControllerFff = .text:0x8049A920; // type:function size:0x8 scope:weak
setDistParam__Q23EGG14CoreControllerFff = .text:0x8049A930; // type:function size:0x8 scope:weak
setHoriParam__Q23EGG14CoreControllerFff = .text:0x8049A940; // type:function size:0x8 scope:weak
allocate__Q23EGG29TBuffer<Q23EGG12eCoreDevType>Fii = .text:0x8049A950; // type:function size:0x50 scope:weak
allocate__Q23EGG29TBuffer<Q23EGG12eCoreDevType>FiPQ23EGG4Heapi = .text:0x8049A9A0; // type:function size:0x74 scope:weak
onAllocate__Q23EGG29TBuffer<Q23EGG12eCoreDevType>FPQ23EGG4Heap = .text:0x8049AA20; // type:function size:0x4 scope:weak
allocate__Q23EGG32TBuffer<PQ23EGG14CoreController>Fii = .text:0x8049AA30; // type:function size:0x50 scope:weak
allocate__Q23EGG32TBuffer<PQ23EGG14CoreController>FiPQ23EGG4Heapi = .text:0x8049AA80; // type:function size:0x74 scope:weak
onAllocate__Q23EGG32TBuffer<PQ23EGG14CoreController>FPQ23EGG4Heap = .text:0x8049AB00; // type:function size:0x4
__sinit_\eggController_cpp = .text:0x8049AB10; // type:function size:0x48 scope:local
sqrt__Q23EGG7Math<f>Ff = .text:0x8049AB60; // type:function size:0x50
@@ -26402,27 +26402,27 @@ isOutsideMEM1__Q23EGG6AssertFUl = .text:0x8049C150; // type:function size:0x2C
setAssertCallback__Q23EGG6AssertFPFv_v = .text:0x8049C180; // type:function size:0x10
system_halt__Q23EGG6AssertFPCcUlPCcP16__va_list_struct = .text:0x8049C190; // type:function size:0x398
assert__Q23EGG6AssertFPCcUlPCce = .text:0x8049C530; // type:function size:0x8C
EGG__BaseCamera__updateMatrix = .text:0x8049C5C0; // type:function size:0x10
EGG__BaseCamera__draw = .text:0x8049C5D0; // type:function size:0x50
EGG__BaseCamera__setG3DCamera = .text:0x8049C620; // type:function size:0x44
EGG__BaseCamera__getSomething = .text:0x8049C670; // type:function size:0x8
doUpdateMatrix = .text:0x8049C680; // type:function size:0x25C
FUN_8049c8e0 = .text:0x8049C8E0; // type:function size:0x4
loadMatrix = .text:0x8049C8F0; // type:function size:0x4C
FUN_8049c940 = .text:0x8049C940; // type:function size:0x4
EGG__OrthoCamera____ct = .text:0x8049C950; // type:function size:0x78
EGG__OrthoCamera__update_params = .text:0x8049C9D0; // type:function size:0x88
FUN_8049ca60 = .text:0x8049CA60; // type:function size:0x34
FUN_8049caa0 = .text:0x8049CAA0; // type:function size:0x1C
FUN_8049cac0 = .text:0x8049CAC0; // type:function size:0x8
storeTLUT__10JUTPaletteF7_GXTlut10_GXTlutFmt15JUTTransparencyUsPv = .text:0x8049CAD0; // type:function size:0x24
load__10JUTPaletteFv = .text:0x8049CB00; // type:function size:0x44
__dt__10JUTTextureFv = .text:0x8049CB50; // type:function size:0x78
storeTIMG__10JUTTextureFPC7ResTIMGP10JUTPalette7_GXTlut = .text:0x8049CBD0; // type:function size:0x184
attachPalette__10JUTTextureFP10JUTPalette = .text:0x8049CD60; // type:function size:0x40
initTexObj__10JUTTextureFv = .text:0x8049CDA0; // type:function size:0xF0
initTexObj__10JUTTextureF7_GXTlut = .text:0x8049CE90; // type:function size:0xF8
load__10JUTTextureF11_GXTexMapID = .text:0x8049CF90; // type:function size:0x54
updateMatrix__Q23EGG10BaseCameraFv = .text:0x8049C5C0; // type:function size:0x10
draw__Q23EGG10BaseCameraFPQ23EGG10BaseCamera = .text:0x8049C5D0; // type:function size:0x50
setG3DCamera__Q23EGG10BaseCameraFRQ34nw4r3g3d6Camera = .text:0x8049C620; // type:function size:0x44
getViewMatrixOld__Q23EGG12LookAtCameraFv = .text:0x8049C670; // type:function size:0x8
doUpdateMatrix__Q23EGG12LookAtCameraFv = .text:0x8049C680; // type:function size:0x25C
doDraw__Q23EGG12LookAtCameraFv = .text:0x8049C8E0; // type:function size:0x4
loadMatrix__Q23EGG12LookAtCameraFv = .text:0x8049C8F0; // type:function size:0x4C
loadOldMatrix__Q23EGG12LookAtCameraFv = .text:0x8049C940; // type:function size:0x4
__ct__Q23EGG11OrthoCameraFv = .text:0x8049C950; // type:function size:0x78
update_parms__Q23EGG11OrthoCameraFv = .text:0x8049C9D0; // type:function size:0x88
doUpdateMatrix__Q23EGG11OrthoCameraFv = .text:0x8049CA60; // type:function size:0x34
getPosition__Q23EGG12LookAtCameraFv = .text:0x8049CAA0; // type:function size:0x1C
getViewMatrix__Q23EGG12LookAtCameraCFv = .text:0x8049CAC0; // type:function size:0x8
storeTLUT__Q23EGG7PaletteF7_GXTlut10_GXTlutFmtQ23EGG15JUTTransparencyUsPv = .text:0x8049CAD0; // type:function size:0x24
load__Q23EGG7PaletteFv = .text:0x8049CB00; // type:function size:0x44
__dt__Q23EGG7TextureFv = .text:0x8049CB50; // type:function size:0x78
storeTIMG__Q23EGG7TextureFPCQ23EGG7ResTIMGUc = .text:0x8049CBD0; // type:function size:0x184
attachPalette__Q23EGG7TextureFPQ23EGG7Palette = .text:0x8049CD60; // type:function size:0x40
initTexObj__Q23EGG7TextureFvl = .text:0x8049CDA0; // type:function size:0xF0
initTexObj__Q23EGG7TextureF7_GXTlut = .text:0x8049CE90; // type:function size:0xF8
load__Q23EGG7TextureF11_GXTexMapID = .text:0x8049CF90; // type:function size:0x54
FUN_8049cff0 = .text:0x8049CFF0; // type:function size:0x12C
FUN_8049d120 = .text:0x8049D120; // type:function size:0x590
FUN_8049d6b0 = .text:0x8049D6B0; // type:function size:0xB8
@@ -26456,31 +26456,31 @@ DrawCircleYPolygonFan__23@unnamed@eggDrawGX_cpp@FRCQ34nw4r4math5MTX34fUs = .text
Initialize__Q23EGG6DrawGXFPQ23EGG4Heap = .text:0x8049F070; // type:function size:0xA8
GetTexMapDefault__Q23EGG6DrawGXFv = .text:0x8049F120; // type:function size:0x8
GetLightMaskDefault__Q23EGG6DrawGXFv = .text:0x8049F130; // type:function size:0x8
EGG__DrawGX__BeginDrawLine = .text:0x8049F140; // type:function size:0x78
EGG__DrawGX__BeginDrawCircleZ = .text:0x8049F1C0; // type:function size:0x78
EGG__DrawGX__BeginDrawQuad = .text:0x8049F240; // type:function size:0xDC
BeginDrawLine__Q23EGG6DrawGXFQ33EGG6DrawGX12ColorChannelQ33EGG6DrawGX5ZMode = .text:0x8049F140; // type:function size:0x78
BeginDrawCircleZ__Q23EGG6DrawGXFQ33EGG6DrawGX12ColorChannelQ33EGG6DrawGX5ZMode = .text:0x8049F1C0; // type:function size:0x78
BeginDrawQuad__Q23EGG6DrawGXFQ33EGG6DrawGX12ColorChannelQ33EGG6DrawGX5ZModeQ33EGG6DrawGX5Blendbb = .text:0x8049F240; // type:function size:0xDC
BeginDrawScreen__Q23EGG6DrawGXFbbb = .text:0x8049F320; // type:function size:0xE0
EGG__DrawGX__DrawLineStrip = .text:0x8049F400; // type:function size:0x1EC
EGG__DrawGX__DrawLine = .text:0x8049F5F0; // type:function size:0x1EC
DrawLineStrip__Q23EGG6DrawGXFPCQ23EGG8Vector3fUs7GXColorUc = .text:0x8049F400; // type:function size:0x1EC
DrawLine__Q23EGG6DrawGXFPCQ23EGG8Vector3fUs7GXColorUc = .text:0x8049F5F0; // type:function size:0x1EC
ClearEfb__Q23EGG6DrawGXFRCQ34nw4r4math5MTX34bbb8_GXColorb = .text:0x8049F7E0; // type:function size:0x264
EGG__DrawGX__ResetMaterial = .text:0x8049FA50; // type:function size:0x64
ResetMaterial__Q23EGG6DrawGXFQ33EGG6DrawGX12ColorChannel = .text:0x8049FA50; // type:function size:0x64
SetMat_ColorChannel__Q23EGG6DrawGXFQ33EGG6DrawGX12ColorChannel = .text:0x8049FAC0; // type:function size:0xD8
SetMat_TexGen__Q23EGG6DrawGXFQ33EGG6DrawGX6TexGen = .text:0x8049FBA0; // type:function size:0x7C
SetMat_Ind__Q23EGG6DrawGXFv = .text:0x8049FC20; // type:function size:0x8
SetMat_Tev__Q23EGG6DrawGXF13_GXTevStageIDQ33EGG6DrawGX10TevSetting = .text:0x8049FC30; // type:function size:0x1FC
SetMat_PE__Q23EGG6DrawGXFQ33EGG6DrawGX5ZModeQ33EGG6Dr = .text:0x8049FE30; // type:function size:0x64
SetMat_PE__Q23EGG6DrawGXFQ33EGG6DrawGX5ZModeQ33EGG6DrawGX5Blend = .text:0x8049FE30; // type:function size:0x64
LoadTexture__Q23EGG6DrawGXFPCQ23EGG7ResTIMG11_GXTexMapID = .text:0x8049FEA0; // type:function size:0x40
LoadTexture__Q23EGG6DrawGXFQ34nw4r3g3d6ResTex11_GXTexMapID = .text:0x8049FEE0; // type:function size:0x58
SetVtxState__Q23EGG6DrawGXFQ33EGG6DrawGX7VtxType = .text:0x8049FF40; // type:function size:0x398
EGG__DrawGX__CreateDisplayList = .text:0x804A02E0; // type:function size:0x800
CreateDisplayList__Q23EGG6DrawGXFPQ23EGG4Heap = .text:0x804A02E0; // type:function size:0x800
DrawDL__Q23EGG6DrawGXFQ33EGG6DrawGX2DLRCQ34nw4r4math5MTX348_GXColor = .text:0x804A0AE0; // type:function size:0x88
SetZMode__Q23EGG6DrawGXFQ33EGG6DrawGX5ZMode = .text:0x804A0B70; // type:function size:0x20
SetBlendMode__Q23EGG6DrawGXFQ33EGG6DrawGX5Blend = .text:0x804A0B90; // type:function size:0x24
CreateDisplayList__Q23EGG6DrawGXFPQ23EGG4Heap = .text:0x804A0BC0; // type:function size:0x5C
__sinit_\eggDrawGX_cpp = .text:0x804A0C20; // type:function size:0x4
DrawDLWorld__Q23EGG6DrawGXFQ33EGG6DrawGX2DLRCQ23EGG9Matrix34f7GXColor = .text:0x804A0BC0; // type:function size:0x5C
__sinit_\eggDrawGX_cpp = .text:0x804A0C20; // type:function size:0x4 scope:local
__ct__Q23EGG12DrawPathBaseFv = .text:0x804A0C30; // type:function size:0x58
createScnProc__Q23EGG12DrawPathBaseFP12MEMAllocator = .text:0x804A0C90; // type:function size:0x1B0
internalResetForDraw__Q23EGG12DrawPathBaseFv = .text:0x804A0E40; // type:function size:0x20
ExecCallback_CALC_VIEW__Q23EGG12DrawPathBaseFQ44nw4r3g3d6ScnObj6TimingPQ34nw4r3g3d6ScnObjUlPv = .text:0x804A0E40; // type:function size:0x20
scnProcDraw__Q23EGG12DrawPathBaseFUs = .text:0x804A0E60; // type:function size:0x20
@8@__dt__Q23EGG12DrawPathBaseFv = .text:0x804A0E80; // type:function size:0x8
@20@__dt__Q23EGG12DrawPathBaseFv = .text:0x804A0E90; // type:function size:0x8
@@ -37140,8 +37140,8 @@ __vt__Q34nw4r3lyt18AnimTransformBasic = .data:0x8056E7B8; // type:object size:0x
__vt__Q34nw4r3lyt16ResourceAccessor = .data:0x8056E7E0; // type:object size:0x14
__vt__Q34nw4r3lyt24MultiArcResourceAccessor = .data:0x8056E7F8; // type:object size:0x14
__vt__Q34nw4r3lyt19ArcResourceAccessor = .data:0x8056E80C; // type:object size:0x14
Egg__Archive__vtable = .data:0x8056E820; // type:object size:0x10
EGG__DvdFile__vtable = .data:0x8056E830; // type:object size:0x28
__vt__Q23EGG7Archive = .data:0x8056E820; // type:object size:0xC
__vt__Q23EGG7DvdFile = .data:0x8056E830; // type:object size:0x28
__vt__Q23EGG15StreamDecompSZS = .data:0x8056E858; // type:object size:0x18
__vt__Q23EGG15StreamDecompLRC = .data:0x8056E870; // type:object size:0x18
__vt__Q23EGG14StreamDecompLH = .data:0x8056E888; // type:object size:0x18
@@ -37155,8 +37155,8 @@ __vt__Q23EGG4Heap = .data:0x8056E950; // type:object size:0x30
lbl_8056E980 = .data:0x8056E980; // type:object size:0xF data:string
lbl_8056E990 = .data:0x8056E990; // type:object size:0xB data:string
__vt__Q23EGG7ExpHeap = .data:0x8056E9A0; // type:object size:0x30
EGG__FrmHeap__vtable = .data:0x8056E9D0; // type:object size:0x30
EGG__AssertHeap__vtable = .data:0x8056EA00; // type:object size:0x30
__vt__Q23EGG7FrmHeap = .data:0x8056E9D0; // type:object size:0x30
__vt__Q23EGG10AssertHeap = .data:0x8056EA00; // type:object size:0x30
__vt__Q23EGG8Disposer = .data:0x8056EA30; // type:object size:0xC
__vt__Q23EGG6Thread = .data:0x8056EA40; // type:object size:0x18
lbl_8056EA58 = .data:0x8056EA58; // type:object size:0x70
@@ -37165,14 +37165,14 @@ __vt__Q23EGG10ColorFader = .data:0x8056EAE8; // type:object size:0x24
clear_z_TX__29@unnamed@eggAsyncDisplay_cpp@ = .data:0x8056EB20; // type:object size:0x40 scope:local
__vt__Q23EGG12AsyncDisplay = .data:0x8056EB60; // type:object size:0x20
__vt__Q23EGG12GraphicsFifo = .data:0x8056EB80; // type:object size:0xC
lbl_8056EB90 = .data:0x8056EB90; // type:object size:0x18
lbl_8056EB90 = .data:0x8056EB90; // type:object size:0x17 data:string
__vt__Q23EGG19ControllerRumbleMgr = .data:0x8056EBA8; // type:object size:0xC
__vt__Q23EGG20ControllerRumbleUnit = .data:0x8056EBB4; // type:object size:0xC
__vt__Q23EGG14NullController = .data:0x8056EBC0; // type:object size:0x38
__vt__Q23EGG17CoreControllerMgr = .data:0x8056EBF8; // type:object size:0x10
__vt__Q23EGG29TBuffer<Q23EGG12eCoreDevType> = .data:0x8056EC08; // type:object size:0x1C
__vt__Q23EGG32TBuffer<PQ23EGG14CoreController> = .data:0x8056EC24; // type:object size:0x1C
__vt__Q33EGG17CoreControllerMgr11T__Disposer = .data:0x8056EC40; // type:object size:0x10
__vt__Q33EGG17CoreControllerMgr11T__Disposer = .data:0x8056EC40; // type:object size:0xC
__vt__Q23EGG14CoreController = .data:0x8056EC50; // type:object size:0x38
lbl_8056EC88 = .data:0x8056EC88; // type:object size:0xE data:string
lbl_8056EC98 = .data:0x8056EC98; // type:object size:0x16 data:string
@@ -39642,11 +39642,11 @@ NW4R_LYT_Version___22@unnamed@lyt_init_cpp@ = .sdata:0x80574EB0; // type:object
lbl_80574EB8 = .sdata:0x80574EB8; // type:object size:0x4 data:string
lbl_80574EC0 = .sdata:0x80574EC0; // type:object size:0x2 data:string
lbl_80574EC4 = .sdata:0x80574EC4; // type:object size:0x3 data:string
lbl_80574EC8 = .sdata:0x80574EC8; // type:object size:0x8
EGG__DvdRipper__sErrorRetry = .sdata:0x80574ED0; // type:object size:0x8 data:byte
lbl_80574EC8 = .sdata:0x80574EC8; // type:object size:0x2 data:string
sErrorRetry__Q23EGG9DvdRipper = .sdata:0x80574ED0; // type:object size:0x1 data:byte
lbl_80574ED8 = .sdata:0x80574ED8; // type:object size:0x7 data:string
lbl_80574EE0 = .sdata:0x80574EE0; // type:object size:0x5 data:string
EGG__CoreControllerMgr__sWPADWorkSize = .sdata:0x80574EE8; // type:object size:0x8 data:4byte
sWPADWorkSize__Q23EGG17CoreControllerMgr = .sdata:0x80574EE8; // type:object size:0x4 data:4byte
lbl_80574EF0 = .sdata:0x80574EF0; // type:object size:0x2 data:string
lbl_80574EF8 = .sdata:0x80574EF8; // type:object size:0x8 data:string
lbl_80574F00 = .sdata:0x80574F00; // type:object size:0x8 data:string
@@ -40936,9 +40936,9 @@ typeInfo__Q34nw4r3lyt7TextBox = .sbss:0x80576708; // type:object size:0x4 data:4
typeInfo__Q34nw4r3lyt6Window = .sbss:0x80576710; // type:object size:0x4 data:4byte
typeInfo__Q34nw4r3lyt8Bounding = .sbss:0x80576718; // type:object size:0x4 data:4byte
@GUARD@SetSize__Q44nw4r3lyt6detail11TexCoordAryFUc@texCoords = .sbss:0x80576720; // type:object size:0x1 data:byte
EGG__Archive__sIsArchiveListInitialized = .sbss:0x80576728; // type:object size:0x8 data:byte
EGG__DvdFile__sIsInitialized = .sbss:0x80576730; // type:object size:0x8 data:byte
EGG__DvdRipper__sCallback = .sbss:0x80576738; // type:object size:0x8 data:4byte
sIsArchiveListInitialized__Q23EGG7Archive = .sbss:0x80576728; // type:object size:0x1 data:byte
sIsInitialized__Q23EGG7DvdFile = .sbss:0x80576730; // type:object size:0x1 data:byte
sCallback__Q23EGG9DvdRipper = .sbss:0x80576738; // type:object size:0x4 data:4byte
sCurrentHeap__Q23EGG4Heap = .sbss:0x80576740; // type:object size:0x4 data:4byte
sIsHeapListInitialized__Q23EGG4Heap = .sbss:0x80576744; // type:object size:0x4 data:4byte
sAllocatableHeap__Q23EGG4Heap = .sbss:0x80576748; // type:object size:0x4 data:4byte
@@ -40962,7 +40962,7 @@ sStaticDisposer__Q33EGG17CoreControllerMgr11T__Disposer = .sbss:0x805767AC; // t
sCoreControllerFactory__Q23EGG17CoreControllerMgr = .sbss:0x805767B0; // type:object size:0x4 data:4byte
sConnectCallback__Q23EGG17CoreControllerMgr = .sbss:0x805767B4; // type:object size:0x4 data:4byte
sUseBuiltinWpadAllocator__Q23EGG17CoreControllerMgr = .sbss:0x805767B8; // type:object size:0x1 data:byte
sWPADAllocator__3EGG = .sbss:0x805767BC; // type:object size:0x4 data:4byte
sAllocator__Q23EGG27@unnamed@eggController_cpp@ = .sbss:0x805767BC; // type:object size:0x4 data:4byte
zero__Q23EGG8Vector2f = .sbss:0x805767C0; // type:object size:0x8 data:float
ex__Q23EGG8Vector2f = .sbss:0x805767C8; // type:object size:0x8 data:float
ey__Q23EGG8Vector2f = .sbss:0x805767D0; // type:object size:0x8 data:float
@@ -49409,8 +49409,8 @@ lbl_80673A44 = .bss:0x80673A44; // type:object size:0x3C
lbl_80673A80 = .bss:0x80673A80; // type:object size:0xC
lbl_80673A8C = .bss:0x80673A8C; // type:object size:0x1C data:byte
@LOCAL@SetSize__Q44nw4r3lyt6detail11TexCoordAryFUc@texCoords = .bss:0x80673AA8; // type:object size:0x20 scope:local data:float
EGG__Archive__sArchiveList = .bss:0x80673AC8; // type:object size:0x10
EGG__DvdFile__sDvdList = .bss:0x80673AD8; // type:object size:0x10
sArchiveList__Q23EGG7Archive = .bss:0x80673AC8; // type:object size:0xC
sDvdList__Q23EGG7DvdFile = .bss:0x80673AD8; // type:object size:0xC
sHeapList__Q23EGG4Heap = .bss:0x80673AE8; // type:object size:0xC
sRootMutex__Q23EGG4Heap = .bss:0x80673AF8; // type:object size:0x18
sThreadList__Q23EGG6Thread = .bss:0x80673B10; // type:object size:0xC
+65 -8
View File
@@ -665,21 +665,21 @@ config.libs = [
Object(Matching, "nw4r/lyt/lyt_arcResourceAccessor.cpp"),
Object(Matching, "nw4r/lyt/lyt_common.cpp"),
Object(Matching, "nw4r/lyt/lyt_util.cpp"),
], [""]
],
),
# EGG
EGGLib(
"core",
[
Object(NonMatching, "egg/core/eggArchive.cpp"),
Object(NonMatching, "egg/core/eggDvdFile.cpp"),
Object(NonMatching, "egg/core/eggDvdRipper.cpp"),
Object(NonMatching, "egg/core/eggStream.cpp"),
Object(Matching, "egg/core/eggArchive.cpp"),
Object(Matching, "egg/core/eggDvdFile.cpp"),
Object(Matching, "egg/core/eggDvdRipper.cpp"),
Object(Matching, "egg/core/eggStreamDecomp.cpp"),
Object(Matching, "egg/core/eggAllocator.cpp"),
Object(Matching, "egg/core/eggHeap.cpp"),
Object(Matching, "egg/core/eggExpHeap.cpp"),
Object(NonMatching, "egg/core/eggFrmHeap.cpp"),
Object(NonMatching, "egg/core/eggAssertHeap.cpp"),
Object(Matching, "egg/core/eggFrmHeap.cpp"),
Object(Matching, "egg/core/eggAssertHeap.cpp"),
Object(Matching, "egg/core/eggDisposer.cpp"),
Object(Matching, "egg/core/eggThread.cpp"),
Object(NonMatching, "egg/core/eggUnk.cpp"),
@@ -691,7 +691,7 @@ config.libs = [
Object(Matching, "egg/core/eggXfb.cpp"),
Object(Matching, "egg/core/eggXfbManager.cpp"),
Object(Matching, "egg/core/eggGraphicsFifo.cpp"),
Object(NonMatching, "egg/core/eggController.cpp"),
Object(Matching, "egg/core/eggController.cpp"),
],
),
EGGLib(
@@ -709,6 +709,63 @@ config.libs = [
Object(Matching, "egg/prim/eggAssert.cpp"),
],
),
EGGLib(
"gfx",
[
Object(NonMatching, "egg/gfx/eggCamera.cpp"),
Object(NonMatching, "egg/gfx/eggPalette.cpp"),
Object(NonMatching, "egg/gfx/eggTexture.cpp"),
Object(NonMatching, "egg/gfx/eggUnk1.cpp"), # Unknown
Object(NonMatching, "egg/gfx/eggCapTexture.cpp"),
Object(NonMatching, "egg/gfx/eggCpuTexture.cpp"),
Object(NonMatching, "egg/gfx/eggDrawGX.cpp"),
Object(NonMatching, "egg/gfx/eggDrawPathBase.cpp"),
Object(NonMatching, "egg/gfx/eggDrawPathUnk1.cpp"),
Object(NonMatching, "egg/gfx/eggDrawPathDOF.cpp"),
Object(NonMatching, "egg/gfx/eggDrawPathUnk2.cpp"),
Object(NonMatching, "egg/gfx/eggFog.cpp"),
Object(NonMatching, "egg/gfx/eggFrustum.cpp"),
Object(NonMatching, "egg/gfx/eggG3DUtility.cpp"), # Unknown Guess
Object(NonMatching, "egg/gfx/eggGfxEngine.cpp"),
Object(NonMatching, "egg/gfx/eggGlobalDrawState.cpp"),
Object(NonMatching, "egg/gfx/eggGXUtility.cpp"),
Object(NonMatching, "egg/gfx/eggIScnProc.cpp"),
Object(NonMatching, "egg/gfx/eggLight.cpp"),
Object(NonMatching, "egg/gfx/eggLightTexture.cpp"),
Object(NonMatching, "egg/gfx/eggLightTextureMgr.cpp"),
Object(NonMatching, "egg/gfx/eggModelEx.cpp"),
Object(NonMatching, "egg/gfx/eggPostEffectBase.cpp"),
Object(NonMatching, "egg/gfx/eggPostEffectBlur.cpp"),
Object(NonMatching, "egg/gfx/eggPostEffectUnk1.cpp"), # Unknown
Object(NonMatching, "egg/gfx/eggPostEffectUnk2.cpp"), # Unknown
Object(NonMatching, "egg/gfx/eggPostEffectMask.cpp"),
Object(NonMatching, "egg/gfx/eggPostEffectMaskDOF.cpp"),
Object(NonMatching, "egg/gfx/eggPostEffectSimple.cpp"),
Object(NonMatching, "egg/gfx/eggScreen.cpp"),
Object(NonMatching, "egg/gfx/eggScreenEffectBase.cpp"),
Object(NonMatching, "egg/gfx/eggScreenEffectBlur.cpp"), # Unknown Guess
Object(NonMatching, "egg/gfx/eggStateEfb.cpp"),
Object(NonMatching, "egg/gfx/eggStateGX.cpp"),
Object(NonMatching, "egg/gfx/eggTextureBuffer.cpp"),
],
),
EGGLib(
"audio",
[
Object(NonMatching, "egg/audio/eggAudioArcPlayerMgr.cpp"),
Object(NonMatching, "egg/audio/eggAudioHeapMgr.cpp"),
Object(NonMatching, "egg/audio/eggAudioMgr.cpp"),
Object(NonMatching, "egg/audio/eggAudioRmtSpeakerMgr.cpp"),
Object(NonMatching, "egg/audio/eggAudioUtility.cpp"),
Object(NonMatching, "egg/audio/eggAudioSystem.cpp"),
],
),
EGGLib(
"util",
[
Object(NonMatching, "egg/util/eggException.cpp"),
],
),
# {
# "lib": "MSL_C",
# "mw_version": "GC/1.3.2",
+14
View File
@@ -0,0 +1,14 @@
#ifndef __STDC_STDINT_H__
#define __STDC_STDINT_H__
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
typedef unsigned long long uint64_t;
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed long int32_t;
typedef signed long long int64_t;
#endif // __STDC_STDINT_H__
+3 -1
View File
@@ -22,7 +22,7 @@
#define DONT_INLINE __attribute__((never_inline))
// TODO - Fix MSL (stddef.h)
#define offsetof(ST, M) ((size_t) & (((ST*)0)->M))
#define offsetof(ST, M) ((size_t) & (((ST *)0)->M))
// Codewarrior tricks for matching decomp
// (Functions are given prototypes for -requireprotos)
@@ -73,6 +73,8 @@ typedef void UNKTYPE;
enum { FALSE, TRUE };
typedef int BOOL;
typedef unsigned char byte_t;
#ifdef __CWCC__
typedef unsigned long size_t;
#endif
+978
View File
@@ -0,0 +1,978 @@
#ifndef CONTEXT_BTE_H
#define CONTEXT_BTE_H
#include <MSL_C/stdint.h>
/* Contains the context of the BTE library that the WPAD library needs to
* compile.
*
* This is not the full context; the other half of the context is in
* "context_rvl.h".
*
* Most of this code is copyright (C) 2003-2012 Broadcom Corporation under the
* Apache 2.0 License <http://www.apache.org/licenses/LICENSE-2.0>. The original
* source can be found at
* <https://android.googlesource.com/platform/external/bluetooth/bluedroid>;
* specifically, I used the earliest commit available (late 2012, commit hash
* 5738f83aeb59361a0a2eda2460113f6dc9194271).
*/
/* License redistribution conditions
*
* a. You may obtain a copy of the License at
* <http://www.apache.org/licenses/LICENSE-2.0>.
* b. Some of the code is modified. Comments will be marked with my name
* (muff1n) to show what I modified and where.
* c. See the following comment block, which is copied verbatim from bluedroid
* source.
* d. No NOTICE file is present in the commit that I used.
*/
/******************************************************************************
*
* Copyright (C) 2003-2012 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
// from bluedroid source
typedef uint8_t UINT8;
typedef uint16_t UINT16;
typedef uint32_t UINT32;
typedef int8_t INT8;
typedef unsigned char BOOLEAN;
#define BD_ADDR_LEN 6 /* Device address length */
typedef UINT8 BD_ADDR[BD_ADDR_LEN]; /* Device address */
typedef UINT8 *BD_ADDR_PTR; /* Pointer to Device Address */
#define LINK_KEY_LEN 16
typedef UINT8 LINK_KEY[LINK_KEY_LEN]; /* Link Key */
#define DEV_CLASS_LEN 3
typedef UINT8 DEV_CLASS[DEV_CLASS_LEN]; /* Device class */
typedef UINT8 *DEV_CLASS_PTR; /* Pointer to Device class */
/* muff1n: TODO: bta_dm_pin_cback looks mostly the same except that BD_NAME_LEN
* is 33 (or it was 32 and BD_NAME_LEN was not decreased by 1 in BCM_STRNCPY_S
* calls)?
* confirm this
*
* UPDATE: there is a case where it is 248
*/
#define BD_NAME_LEN 248
typedef UINT8 BD_NAME[BD_NAME_LEN]; /* Device name */
typedef UINT8 *BD_NAME_PTR; /* Pointer to Device name */
#define BD_FEATURES_LEN 8
typedef UINT8 BD_FEATURES[BD_FEATURES_LEN]; /* LMP features supported by device */
#define BT_DEVICE_TYPE_BREDR 0x01
#define BT_DEVICE_TYPE_BLE 0x02
#define BT_DEVICE_TYPE_DUMO 0x03
typedef UINT8 tBT_DEVICE_TYPE;
/* Maximum UUID size - 16 bytes, and structure to hold any type of UUID. */
#define MAX_UUID_SIZE 16
typedef struct {
#define LEN_UUID_16 2
#define LEN_UUID_32 4
#define LEN_UUID_128 16
UINT16 len;
union {
UINT16 uuid16;
UINT32 uuid32;
UINT8 uuid128[MAX_UUID_SIZE];
} uu;
} tBT_UUID;
/* Status Return Value */
#define BTA_SUCCESS 0 /* Successful operation. */
#define BTA_FAILURE 1 /* Generic failure. */
#define BTA_PENDING 2 /* API cannot be completed right now */
#define BTA_BUSY 3
#define BTA_NO_RESOURCES 4
#define BTA_WRONG_MODE 5
typedef UINT8 tBTA_STATUS;
/*
* Service ID
*
* NOTES: When you add a new Service ID for BTA AND require to change the value of BTA_MAX_SERVICE_ID,
* make sure that the correct security ID of the new service from Security service definitions (btm_api.h)
* should be added to bta_service_id_to_btm_srv_id_lkup_tbl table in bta_dm_act.c.
*/
#define BTA_RES_SERVICE_ID 0 /* Reserved */
#define BTA_SPP_SERVICE_ID 1 /* Serial port profile. */
#define BTA_DUN_SERVICE_ID 2 /* Dial-up networking profile. */
#define BTA_A2DP_SOURCE_SERVICE_ID 3 /* A2DP Source profile. */
#define BTA_LAP_SERVICE_ID 4 /* LAN access profile. */
#define BTA_HSP_SERVICE_ID 5 /* Headset profile. */
#define BTA_HFP_SERVICE_ID 6 /* Hands-free profile. */
#define BTA_OPP_SERVICE_ID 7 /* Object push */
#define BTA_FTP_SERVICE_ID 8 /* File transfer */
#define BTA_CTP_SERVICE_ID 9 /* Cordless Terminal */
#define BTA_ICP_SERVICE_ID 10 /* Intercom Terminal */
#define BTA_SYNC_SERVICE_ID 11 /* Synchronization */
#define BTA_BPP_SERVICE_ID 12 /* Basic printing profile */
#define BTA_BIP_SERVICE_ID 13 /* Basic Imaging profile */
#define BTA_PANU_SERVICE_ID 14 /* PAN User */
#define BTA_NAP_SERVICE_ID 15 /* PAN Network access point */
#define BTA_GN_SERVICE_ID 16 /* PAN Group Ad-hoc networks */
#define BTA_SAP_SERVICE_ID 17 /* SIM Access profile */
#define BTA_A2DP_SERVICE_ID 18 /* A2DP Sink */
#define BTA_AVRCP_SERVICE_ID 19 /* A/V remote control */
#define BTA_HID_SERVICE_ID 20 /* HID */
#define BTA_VDP_SERVICE_ID 21 /* Video distribution */
#define BTA_PBAP_SERVICE_ID 22 /* PhoneBook Access Server*/
#define BTA_HSP_HS_SERVICE_ID 23 /* HFP HS role */
#define BTA_HFP_HS_SERVICE_ID 24 /* HSP HS role */
#define BTA_MAP_SERVICE_ID 25 /* Message Access Profile */
#define BTA_MN_SERVICE_ID 26 /* Message Notification Service */
#define BTA_HDP_SERVICE_ID 27 /* Health Device Profile */
#define BTA_PCE_SERVICE_ID 28 /* PhoneBook Access Client*/
#define BTA_USER_SERVICE_ID 29 /* User requested UUID */
#define BTA_MAX_SERVICE_ID 30
/* service IDs (BTM_SEC_SERVICE_FIRST_EMPTY + 1) to (BTM_SEC_MAX_SERVICES - 1)
* are used by BTA JV */
#define BTA_FIRST_JV_SERVICE_ID (BTM_SEC_SERVICE_FIRST_EMPTY + 1)
#define BTA_LAST_JV_SERVICE_ID (BTM_SEC_MAX_SERVICES - 1)
typedef UINT8 tBTA_SERVICE_ID;
/* Service ID Mask */
#define BTA_RES_SERVICE_MASK 0x00000001 /* Reserved */
#define BTA_SPP_SERVICE_MASK 0x00000002 /* Serial port profile. */
#define BTA_DUN_SERVICE_MASK 0x00000004 /* Dial-up networking profile. */
#define BTA_FAX_SERVICE_MASK 0x00000008 /* Fax profile. */
#define BTA_LAP_SERVICE_MASK 0x00000010 /* LAN access profile. */
#define BTA_HSP_SERVICE_MASK 0x00000020 /* HSP AG role. */
#define BTA_HFP_SERVICE_MASK 0x00000040 /* HFP AG role */
#define BTA_OPP_SERVICE_MASK 0x00000080 /* Object push */
#define BTA_FTP_SERVICE_MASK 0x00000100 /* File transfer */
#define BTA_CTP_SERVICE_MASK 0x00000200 /* Cordless Terminal */
#define BTA_ICP_SERVICE_MASK 0x00000400 /* Intercom Terminal */
#define BTA_SYNC_SERVICE_MASK 0x00000800 /* Synchronization */
#define BTA_BPP_SERVICE_MASK 0x00001000 /* Print server */
#define BTA_BIP_SERVICE_MASK 0x00002000 /* Basic Imaging */
#define BTA_PANU_SERVICE_MASK 0x00004000 /* PAN User */
#define BTA_NAP_SERVICE_MASK 0x00008000 /* PAN Network access point */
#define BTA_GN_SERVICE_MASK 0x00010000 /* PAN Group Ad-hoc networks */
#define BTA_SAP_SERVICE_MASK 0x00020000 /* PAN Group Ad-hoc networks */
#define BTA_A2DP_SERVICE_MASK 0x00040000 /* Advanced audio distribution */
#define BTA_AVRCP_SERVICE_MASK 0x00080000 /* A/V remote control */
#define BTA_HID_SERVICE_MASK 0x00100000 /* HID */
#define BTA_VDP_SERVICE_MASK 0x00200000 /* Video distribution */
#define BTA_PBAP_SERVICE_MASK 0x00400000 /* Phone Book Server */
#define BTA_HSP_HS_SERVICE_MASK 0x00800000 /* HFP HS role */
#define BTA_HFP_HS_SERVICE_MASK 0x01000000 /* HSP HS role */
#define BTA_MAS_SERVICE_MASK 0x02000000 /* Message Access Profile */
#define BTA_MN_SERVICE_MASK 0x04000000 /* Message Notification Profile */
#define BTA_HL_SERVICE_MASK 0x08000000 /* Health Device Profile */
#define BTA_PCE_SERVICE_MASK 0x10000000 /* Phone Book Client */
// btla-specific ++
#define BTA_USER_SERVICE_MASK 0x20000000 /* Message Notification Profile */
// btla-specific --
#define BTA_ALL_SERVICE_MASK 0x1FFFFFFF /* All services supported by BTA. */
typedef UINT32 tBTA_SERVICE_MASK;
/* SW sub-systems */
#define BTA_ID_SYS 0 /* system manager */
/* BLUETOOTH PART - from 0 to BTA_ID_BLUETOOTH_MAX */
#define BTA_ID_DM 1 /* device manager */
#define BTA_ID_DM_SEARCH 2 /* device manager search */
#define BTA_ID_DM_SEC 3 /* device manager security */
#define BTA_ID_DG 4 /* data gateway */
#define BTA_ID_AG 5 /* audio gateway */
#define BTA_ID_OPC 6 /* object push client */
#define BTA_ID_OPS 7 /* object push server */
#define BTA_ID_FTS 8 /* file transfer server */
#define BTA_ID_CT 9 /* cordless telephony terminal */
#define BTA_ID_FTC 10 /* file transfer client */
#define BTA_ID_SS 11 /* synchronization server */
#define BTA_ID_PR 12 /* Printer client */
#define BTA_ID_BIC 13 /* Basic Imaging Client */
#define BTA_ID_PAN 14 /* Personal Area Networking */
#define BTA_ID_BIS 15 /* Basic Imaging Server */
#define BTA_ID_ACC 16 /* Advanced Camera Client */
#define BTA_ID_SC 17 /* SIM Card Access server */
#define BTA_ID_AV 18 /* Advanced audio/video */
#define BTA_ID_AVK 19 /* Audio/video sink */
#define BTA_ID_HD 20 /* HID Device */
#define BTA_ID_CG 21 /* Cordless Gateway */
#define BTA_ID_BP 22 /* Basic Printing Client */
#define BTA_ID_HH 23 /* Human Interface Device Host */
#define BTA_ID_PBS 24 /* Phone Book Access Server */
#define BTA_ID_PBC 25 /* Phone Book Access Client */
#define BTA_ID_JV 26 /* Java */
#define BTA_ID_HS 27 /* Headset */
#define BTA_ID_MSE 28 /* Message Server Equipment */
#define BTA_ID_MCE 29 /* Message Client Equipment */
#define BTA_ID_HL 30 /* Health Device Profile*/
#define BTA_ID_GATTC 31 /* GATT Client */
#define BTA_ID_GATTS 32 /* GATT Client */
#define BTA_ID_BLUETOOTH_MAX 33 /* last BT profile */
/* FM */
#define BTA_ID_FM 34 /* FM */
#define BTA_ID_FMTX 35 /* FM TX */
/* SENSOR */
#define BTA_ID_SSR 36 /* Sensor */
/* GPS */
#define BTA_ID_GPS 37 /* GPS */
/* GENERIC */
#define BTA_ID_PRM 38
#define BTA_ID_SYSTEM 39 /* platform-specific */
#define BTA_ID_SWRAP 40 /* Insight script wrapper */
#define BTA_ID_MIP 41 /* Multicase Individual Polling */
#define BTA_ID_RT 42 /* Audio Routing module: This module is always on. */
/* JV */
#define BTA_ID_JV1 43 /* JV1 */
#define BTA_ID_JV2 44 /* JV2 */
#define BTA_ID_MAX (43 + BTA_DM_NUM_JV_ID)
typedef UINT8 tBTA_SYS_ID;
enum {
BTM_SUCCESS = 0, /* 0 Command succeeded */
BTM_CMD_STARTED, /* 1 Command started OK. */
BTM_BUSY, /* 2 Device busy with another command */
BTM_NO_RESOURCES, /* 3 No resources to issue command */
BTM_MODE_UNSUPPORTED, /* 4 Request for 1 or more unsupported modes */
BTM_ILLEGAL_VALUE, /* 5 Illegal parameter value */
BTM_WRONG_MODE, /* 6 Device in wrong mode for request */
BTM_UNKNOWN_ADDR, /* 7 Unknown remote BD address */
BTM_DEVICE_TIMEOUT, /* 8 Device timeout */
BTM_BAD_VALUE_RET, /* 9 A bad value was received from HCI */
BTM_ERR_PROCESSING, /* 10 Generic error */
BTM_NOT_AUTHORIZED, /* 11 Authorization failed */
BTM_DEV_RESET, /* 12 Device has been reset */
BTM_CMD_STORED, /* 13 request is stored in control block */
BTM_ILLEGAL_ACTION, /* 14 state machine gets illegal command */
BTM_DELAY_CHECK, /* 15 delay the check on encryption */
BTM_SCO_BAD_LENGTH, /* 16 Bad SCO over HCI data length */
BTM_SUCCESS_NO_SECURITY, /* 17 security passed, no security set */
BTM_FAILED_ON_SECURITY, /* 18 security failed */
BTM_REPEATED_ATTEMPTS /* 19 repeated attempts for LE security requests */
};
typedef UINT8 tBTM_STATUS;
typedef struct {
UINT16 event;
UINT16 len;
UINT16 offset;
UINT16 layer_specific;
} BT_HDR;
#define BT_HDR_SIZE (sizeof(BT_HDR))
/* Security Service Levels [bit mask] (BTM_SetSecurityLevel)
** Encryption should not be used without authentication
*/
#define BTM_SEC_NONE 0x0000 /* Nothing required */
#define BTM_SEC_IN_AUTHORIZE 0x0001 /* Inbound call requires authorization */
#define BTM_SEC_IN_AUTHENTICATE 0x0002 /* Inbound call requires authentication */
#define BTM_SEC_IN_ENCRYPT 0x0004 /* Inbound call requires encryption */
#define BTM_SEC_OUT_AUTHORIZE 0x0008 /* Outbound call requires authorization */
#define BTM_SEC_OUT_AUTHENTICATE 0x0010 /* Outbound call requires authentication */
#define BTM_SEC_OUT_ENCRYPT 0x0020 /* Outbound call requires encryption */
#define BTM_SEC_BOND 0x0040 /* Bonding */
#define BTM_SEC_BOND_CONN 0x0080 /* bond_created_connection */
#define BTM_SEC_FORCE_MASTER 0x0100 /* Need to switch connection to be master */
#define BTM_SEC_ATTEMPT_MASTER 0x0200 /* Try to switch connection to be master */
#define BTM_SEC_FORCE_SLAVE 0x0400 /* Need to switch connection to be master */
#define BTM_SEC_ATTEMPT_SLAVE 0x0800 /* Try to switch connection to be slave */
#define BTM_SEC_IN_MITM 0x1000 /* inbound Do man in the middle protection */
#define BTM_SEC_OUT_MITM 0x2000 /* outbound Do man in the middle protection */
/* Security Setting Mask */
#define BTA_SEC_NONE BTM_SEC_NONE /* No security. */
#define BTA_SEC_AUTHORIZE (BTM_SEC_IN_AUTHORIZE) /* Authorization required (only needed for out going connection )*/
#define BTA_SEC_AUTHENTICATE (BTM_SEC_IN_AUTHENTICATE | BTM_SEC_OUT_AUTHENTICATE) /* Authentication required. */
#define BTA_SEC_ENCRYPT (BTM_SEC_IN_ENCRYPT | BTM_SEC_OUT_ENCRYPT) /* Encryption required. */
typedef UINT8 tBTA_SEC;
/* Pairable Modes */
#define BTA_DM_PAIRABLE 1
#define BTA_DM_NON_PAIRABLE 0
/* Connectable Paired Only Mode */
#define BTA_DM_CONN_ALL 0
#define BTA_DM_CONN_PAIRED 1
/* Inquiry modes
* Note: These modes are associated with the inquiry active values (BTM_*ACTIVE) */
#define BTM_GENERAL_INQUIRY 0
#define BTM_LIMITED_INQUIRY 1
#define BTM_BR_INQUIRY_MASK 0x0f
/* high byte of inquiry mode for BLE inquiry mode */
#define BTM_BLE_INQUIRY_NONE 0x00
#define BTM_BLE_GENERAL_INQUIRY 0x10
#define BTM_BLE_LIMITED_INQUIRY 0x20
#define BTM_BLE_INQUIRY_MASK (BTM_BLE_GENERAL_INQUIRY | BTM_BLE_LIMITED_INQUIRY)
#define BTA_BLE_INQUIRY_NONE BTM_BLE_INQUIRY_NONE
#define BTA_BLE_GENERAL_INQUIRY BTM_BLE_GENERAL_INQUIRY /* Perform LE general inquiry. */
#define BTA_BLE_LIMITED_INQUIRY BTM_BLE_LIMITED_INQUIRY /* Perform LE limited inquiry. */
typedef UINT8 tBTA_DM_INQ_MODE;
/* Inquiry Filter Type */
#define BTA_DM_INQ_CLR BTM_CLR_INQUIRY_FILTER /* Clear inquiry filter. */
#define BTA_DM_INQ_DEV_CLASS BTM_FILTER_COND_DEVICE_CLASS /* Filter on device class. */
#define BTA_DM_INQ_BD_ADDR BTM_FILTER_COND_BD_ADDR /* Filter on a specific BD address. */
typedef UINT8 tBTA_DM_INQ_FILT;
/* Inquiry filter device class condition */
typedef struct {
DEV_CLASS dev_class; /* device class of interest */
DEV_CLASS dev_class_mask; /* mask to determine the bits of device class of interest */
} tBTA_DM_COD_COND;
/* Inquiry Filter Condition */
typedef union {
BD_ADDR bd_addr; /* BD address of device to filter. */
tBTA_DM_COD_COND dev_class_cond; /* Device class filter condition */
} tBTA_DM_INQ_COND;
/* Inquiry Parameters */
typedef struct {
tBTA_DM_INQ_MODE mode; /* Inquiry mode, limited or general. */
UINT8 duration; /* Inquiry duration in 1.28 sec units. */
UINT8 max_resps; /* Maximum inquiry responses. Set to zero for unlimited responses. */
BOOLEAN report_dup; /* report duplicated inquiry response with higher RSSI value */
tBTA_DM_INQ_FILT filter_type; /* Filter condition type. */
tBTA_DM_INQ_COND filter_cond; /* Filter condition data. */
} tBTA_DM_INQ;
/* Security Callback Events */
#define BTA_DM_ENABLE_EVT 0 /* Enable Event */
#define BTA_DM_DISABLE_EVT 1 /* Disable Event */
#define BTA_DM_PIN_REQ_EVT 2 /* PIN request. */
#define BTA_DM_AUTH_CMPL_EVT 3 /* Authentication complete indication. */
#define BTA_DM_AUTHORIZE_EVT 4 /* Authorization request. */
#define BTA_DM_LINK_UP_EVT 5 /* Connection UP event */
#define BTA_DM_LINK_DOWN_EVT 6 /* Connection DOWN event */
#define BTA_DM_SIG_STRENGTH_EVT 7 /* Signal strength for bluetooth connection */
#define BTA_DM_BUSY_LEVEL_EVT 8 /* System busy level */
#define BTA_DM_BOND_CANCEL_CMPL_EVT 9 /* Bond cancel complete indication */
#define BTA_DM_SP_CFM_REQ_EVT 10 /* Simple Pairing User Confirmation request. */
#define BTA_DM_SP_KEY_NOTIF_EVT 11 /* Simple Pairing Passkey Notification */
#define BTA_DM_SP_RMT_OOB_EVT 12 /* Simple Pairing Remote OOB Data request. */
#define BTA_DM_SP_KEYPRESS_EVT 13 /* Key press notification event. */
#define BTA_DM_ROLE_CHG_EVT 14 /* Role Change event. */
#define BTA_DM_BLE_KEY_EVT 15 /* BLE SMP key event for peer device keys */
#define BTA_DM_BLE_SEC_REQ_EVT 16 /* BLE SMP security request */
#define BTA_DM_BLE_PASSKEY_NOTIF_EVT 17 /* SMP passkey notification event */
#define BTA_DM_BLE_PASSKEY_REQ_EVT 18 /* SMP passkey request event */
#define BTA_DM_BLE_OOB_REQ_EVT 19 /* SMP OOB request event */
#define BTA_DM_BLE_LOCAL_IR_EVT 20 /* BLE local IR event */
#define BTA_DM_BLE_LOCAL_ER_EVT 21 /* BLE local ER event */
// btla-specific ++
#define BTA_DM_BLE_AUTH_CMPL_EVT 22 /* BLE Auth complete */
// btla-specific --
#define BTA_DM_DEV_UNPAIRED_EVT 23
#define BTA_DM_HW_ERROR_EVT 24 /* BT Chip H/W error */
typedef UINT8 tBTA_DM_SEC_EVT;
/* Structure associated with BTA_DM_ENABLE_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address of local device. */
tBTA_STATUS status;
} tBTA_DM_ENABLE;
/* Structure associated with BTA_DM_PIN_REQ_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
BD_NAME bd_name; /* Name of peer device. */
DEV_CLASS dev_class; /* Class of Device */
} tBTA_DM_PIN_REQ;
/* Link Key Notification Event (Key Type) definitions */
#define HCI_LKEY_TYPE_COMBINATION 0x00
#define HCI_LKEY_TYPE_LOCAL_UNIT 0x01
#define HCI_LKEY_TYPE_REMOTE_UNIT 0x02
#define HCI_LKEY_TYPE_DEBUG_COMB 0x03
#define HCI_LKEY_TYPE_UNAUTH_COMB 0x04
#define HCI_LKEY_TYPE_AUTH_COMB 0x05
#define HCI_LKEY_TYPE_CHANGED_COMB 0x06
/* Structure associated with BTA_DM_AUTH_CMPL_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
BD_NAME bd_name; /* Name of peer device. */
BOOLEAN key_present; /* Valid link key value in key element */
LINK_KEY key; /* Link key associated with peer device. */
UINT8 key_type; /* The type of Link Key */
BOOLEAN success; /* TRUE of authentication succeeded, FALSE if failed. */
UINT8 fail_reason; /* The HCI reason/error code for when success=FALSE */
} tBTA_DM_AUTH_CMPL;
/* Structure associated with BTA_DM_AUTHORIZE_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
BD_NAME bd_name; /* Name of peer device. */
tBTA_SERVICE_ID service; /* Service ID to authorize. */
// btla-specific ++
DEV_CLASS dev_class;
// btla-specific --
} tBTA_DM_AUTHORIZE;
/* Structure associated with BTA_DM_LINK_UP_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
} tBTA_DM_LINK_UP;
/*
** Defentions for HCI Error Codes that are past in the events
*/
#define HCI_SUCCESS 0x00
#define HCI_PENDING 0x00
#define HCI_ERR_ILLEGAL_COMMAND 0x01
#define HCI_ERR_NO_CONNECTION 0x02
#define HCI_ERR_HW_FAILURE 0x03
#define HCI_ERR_PAGE_TIMEOUT 0x04
#define HCI_ERR_AUTH_FAILURE 0x05
#define HCI_ERR_KEY_MISSING 0x06
#define HCI_ERR_MEMORY_FULL 0x07
#define HCI_ERR_CONNECTION_TOUT 0x08
#define HCI_ERR_MAX_NUM_OF_CONNECTIONS 0x09
#define HCI_ERR_MAX_NUM_OF_SCOS 0x0A
#define HCI_ERR_CONNECTION_EXISTS 0x0B
#define HCI_ERR_COMMAND_DISALLOWED 0x0C
#define HCI_ERR_HOST_REJECT_RESOURCES 0x0D
#define HCI_ERR_HOST_REJECT_SECURITY 0x0E
#define HCI_ERR_HOST_REJECT_DEVICE 0x0F
#define HCI_ERR_HOST_TIMEOUT 0x10
#define HCI_ERR_UNSUPPORTED_VALUE 0x11
#define HCI_ERR_ILLEGAL_PARAMETER_FMT 0x12
#define HCI_ERR_PEER_USER 0x13
#define HCI_ERR_PEER_LOW_RESOURCES 0x14
#define HCI_ERR_PEER_POWER_OFF 0x15
#define HCI_ERR_CONN_CAUSE_LOCAL_HOST 0x16
#define HCI_ERR_REPEATED_ATTEMPTS 0x17
#define HCI_ERR_PAIRING_NOT_ALLOWED 0x18
#define HCI_ERR_UNKNOWN_LMP_PDU 0x19
#define HCI_ERR_UNSUPPORTED_REM_FEATURE 0x1A
#define HCI_ERR_SCO_OFFSET_REJECTED 0x1B
#define HCI_ERR_SCO_INTERVAL_REJECTED 0x1C
#define HCI_ERR_SCO_AIR_MODE 0x1D
#define HCI_ERR_INVALID_LMP_PARAM 0x1E
#define HCI_ERR_UNSPECIFIED 0x1F
#define HCI_ERR_UNSUPPORTED_LMP_FEATURE 0x20
#define HCI_ERR_ROLE_CHANGE_NOT_ALLOWED 0x21
#define HCI_ERR_LMP_RESPONSE_TIMEOUT 0x22
#define HCI_ERR_LMP_ERR_TRANS_COLLISION 0x23
#define HCI_ERR_LMP_PDU_NOT_ALLOWED 0x24
#define HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE 0x25
#define HCI_ERR_UNIT_KEY_USED 0x26
#define HCI_ERR_QOS_NOT_SUPPORTED 0x27
#define HCI_ERR_INSTANT_PASSED 0x28
#define HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29
#define HCI_ERR_DIFF_TRANSACTION_COLLISION 0x2A
#define HCI_ERR_UNDEFINED_0x2B 0x2B
#define HCI_ERR_QOS_UNACCEPTABLE_PARAM 0x2C
#define HCI_ERR_QOS_REJECTED 0x2D
#define HCI_ERR_CHAN_CLASSIF_NOT_SUPPORTED 0x2E
#define HCI_ERR_INSUFFCIENT_SECURITY 0x2F
#define HCI_ERR_PARAM_OUT_OF_RANGE 0x30
#define HCI_ERR_UNDEFINED_0x31 0x31
#define HCI_ERR_ROLE_SWITCH_PENDING 0x32
#define HCI_ERR_UNDEFINED_0x33 0x33
#define HCI_ERR_RESERVED_SLOT_VIOLATION 0x34
#define HCI_ERR_ROLE_SWITCH_FAILED 0x35
#define HCI_ERR_INQ_RSP_DATA_TOO_LARGE 0x36
#define HCI_ERR_SIMPLE_PAIRING_NOT_SUPPORTED 0x37
#define HCI_ERR_HOST_BUSY_PAIRING 0x38
#define HCI_ERR_REJ_NO_SUITABLE_CHANNEL 0x39
#define HCI_ERR_CONTROLLER_BUSY 0x3A
#define HCI_ERR_UNACCEPT_CONN_INTERVAL 0x3B
#define HCI_ERR_DIRECTED_ADVERTISING_TIMEOUT 0x3C
#define HCI_ERR_CONN_TOUT_DUE_TO_MIC_FAILURE 0x3D
#define HCI_ERR_CONN_FAILED_ESTABLISHMENT 0x3E
#define HCI_ERR_MAC_CONNECTION_FAILED 0x3F
#define HCI_ERR_MAX_ERR 0x40
#define HCI_HINT_TO_RECREATE_AMP_PHYS_LINK 0xFF
/* Structure associated with BTA_DM_LINK_DOWN_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
UINT8 status; /* connection open/closed */
} tBTA_DM_LINK_DOWN;
typedef INT8 tBTA_DM_RSSI_VALUE;
typedef UINT8 tBTA_DM_LINK_QUALITY_VALUE;
/* signal strength mask */
#define BTA_SIG_STRENGTH_RSSI_MASK 1
#define BTA_SIG_STRENGTH_LINK_QUALITY_MASK 2
typedef UINT8 tBTA_SIG_STRENGTH_MASK;
/* Structure associated with BTA_DM_SIG_STRENGTH_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
tBTA_SIG_STRENGTH_MASK mask; /* mask for the values that are valid */
tBTA_DM_RSSI_VALUE rssi_value;
tBTA_DM_LINK_QUALITY_VALUE link_quality_value;
} tBTA_DM_SIG_STRENGTH;
/* Structure associated with BTA_DM_BUSY_LEVEL_EVT */
typedef struct {
UINT8 level; /* when paging or inquiring, level is 10.
Otherwise, the number of ACL links */
} tBTA_DM_BUSY_LEVEL;
// muff1n: only filled with used members
typedef union {
tBTA_DM_ENABLE enable; /* BTA enabled */
tBTA_DM_PIN_REQ pin_req; /* PIN request */
tBTA_DM_AUTH_CMPL auth_cmpl; /* Authentication complete indication */
tBTA_DM_AUTHORIZE authorize; /* Authorization request */
tBTA_DM_LINK_UP link_up; /* ACL connection up event */
tBTA_DM_LINK_DOWN link_down; /* ACL connection down event */
tBTA_DM_SIG_STRENGTH sig_strength; /* rssi and link quality value */
tBTA_DM_BUSY_LEVEL busy_level; /* System busy level */
} tBTA_DM_SEC;
typedef void(tBTA_DM_SEC_CBACK)(tBTA_DM_SEC_EVT event, tBTA_DM_SEC *p_data);
/* Search callback events */
#define BTA_DM_INQ_RES_EVT 0 /* Inquiry result for a peer device. */
#define BTA_DM_INQ_CMPL_EVT 1 /* Inquiry complete. */
#define BTA_DM_DISC_RES_EVT 2 /* Discovery result for a peer device. */
#define BTA_DM_DISC_BLE_RES_EVT 3 /* Discovery result for BLE GATT based service on a peer device. */
#define BTA_DM_DISC_CMPL_EVT 4 /* Discovery complete. */
#define BTA_DM_DI_DISC_CMPL_EVT 5 /* Discovery complete. */
#define BTA_DM_SEARCH_CANCEL_CMPL_EVT 6 /* Search cancelled */
typedef UINT8 tBTA_DM_SEARCH_EVT;
#define BTA_DM_INQ_RES_IGNORE_RSSI BTM_INQ_RES_IGNORE_RSSI /* 0x7f RSSI value not supplied (ignore it) */
// muff1n: commented some fields out
/* Structure associated with BTA_DM_INQ_RES_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
DEV_CLASS dev_class; /* Device class of peer device. */
// BOOLEAN remt_name_not_required; /* Application sets this flag if it already knows the name of the device
// */
/* If the device name is known to application BTA skips the remote name request */
// BOOLEAN is_limited; /* TRUE, if the limited inquiry bit is set in the CoD */
INT8 rssi; /* The rssi value */
UINT8 *p_eir; /* received EIR */
} tBTA_DM_INQ_RES;
/* Structure associated with BTA_DM_INQ_CMPL_EVT */
typedef struct {
UINT8 num_resps; /* Number of inquiry responses. */
} tBTA_DM_INQ_CMPL;
/* Structure associated with BTA_DM_DI_DISC_CMPL_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
UINT8 num_record; /* Number of DI record */
tBTA_STATUS result;
} tBTA_DM_DI_DISC_CMPL;
/* Structure associated with BTA_DM_DISC_RES_EVT */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
BD_NAME bd_name; /* Name of peer device. */
tBTA_SERVICE_MASK services; /* Services found on peer device. */
// btla-specific ++
UINT8 *p_raw_data; /* Raw data for discovery DB */
UINT32 raw_data_size; /* size of raw data */
tBT_DEVICE_TYPE device_type; /* device type in case it is BLE device */
UINT32 num_uuids;
UINT8 *p_uuid_list;
// btla-specific --
tBTA_STATUS result;
} tBTA_DM_DISC_RES;
/* Structure associated with tBTA_DM_DISC_BLE_RES */
typedef struct {
BD_ADDR bd_addr; /* BD address peer device. */
BD_NAME bd_name; /* Name of peer device. */
tBT_UUID service; /* GATT based Services UUID found on peer device. */
} tBTA_DM_DISC_BLE_RES;
/* Union of all search callback structures */
typedef union {
tBTA_DM_INQ_RES inq_res; /* Inquiry result for a peer device. */
tBTA_DM_INQ_CMPL inq_cmpl; /* Inquiry complete. */
tBTA_DM_DISC_RES disc_res; /* Discovery result for a peer device. */
tBTA_DM_DISC_BLE_RES disc_ble_res; /* discovery result for GATT based service */
tBTA_DM_DI_DISC_CMPL di_disc; /* DI discovery result for a peer device */
} tBTA_DM_SEARCH;
/* Search callback */
typedef void(tBTA_DM_SEARCH_CBACK)(tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH *p_data);
/* type of protocol mode */
#define BTA_HH_PROTO_RPT_MODE (0x00)
#define BTA_HH_PROTO_BOOT_MODE (0x01)
#define BTA_HH_PROTO_UNKNOWN (0xff)
typedef UINT8 tBTA_HH_PROTO_MODE;
/* BTA HID Host callback events */
#define BTA_HH_ENABLE_EVT 0 /* HH enabled */
#define BTA_HH_DISABLE_EVT 1 /* HH disabled */
#define BTA_HH_OPEN_EVT 2 /* connection opened */
#define BTA_HH_CLOSE_EVT 3 /* connection closed */
#define BTA_HH_GET_RPT_EVT 4 /* BTA_HhGetReport callback */
#define BTA_HH_SET_RPT_EVT 5 /* BTA_HhSetReport callback */
#define BTA_HH_GET_PROTO_EVT 6 /* BTA_GetProtoMode callback */
#define BTA_HH_SET_PROTO_EVT 7 /* BTA_HhSetProtoMode callback */
#define BTA_HH_GET_IDLE_EVT 8 /* BTA_HhGetIdle comes callback */
#define BTA_HH_SET_IDLE_EVT 9 /* BTA_HhSetIdle finish callback */
#define BTA_HH_GET_DSCP_EVT 10 /* Get report descripotor */
#define BTA_HH_ADD_DEV_EVT 11 /* Add Device callback */
#define BTA_HH_RMV_DEV_EVT 12 /* remove device finished */
#define BTA_HH_VC_UNPLUG_EVT 13 /* virtually unplugged */
#define BTA_HH_UPDATE_UCD_EVT 14
#define BTA_HH_API_ERR_EVT 15 /* API error is caught */
typedef UINT16 tBTA_HH_EVT;
enum {
BTA_HH_OK,
BTA_HH_HS_HID_NOT_READY, /* handshake error : device not ready */
BTA_HH_HS_INVALID_RPT_ID, /* handshake error : invalid report ID */
BTA_HH_HS_TRANS_NOT_SPT, /* handshake error : transaction not spt */
BTA_HH_HS_INVALID_PARAM, /* handshake error : invalid paremter */
BTA_HH_HS_ERROR, /* handshake error : unspecified HS error */
BTA_HH_ERR, /* general BTA HH error */
BTA_HH_ERR_SDP, /* SDP error */
BTA_HH_ERR_PROTO, /* SET_Protocol error,
only used in BTA_HH_OPEN_EVT callback */
BTA_HH_ERR_DB_FULL, /* device database full error, used in
BTA_HH_OPEN_EVT/BTA_HH_ADD_DEV_EVT */
BTA_HH_ERR_TOD_UNSPT, /* type of device not supported */
BTA_HH_ERR_NO_RES, /* out of system resources */
BTA_HH_ERR_AUTH_FAILED, /* authentication fail */
BTA_HH_ERR_HDL
};
typedef UINT8 tBTA_HH_STATUS;
/* callback event data for BTA_HH_OPEN_EVT */
typedef struct {
BD_ADDR bda; /* HID device bd address */
tBTA_HH_STATUS status; /* operation status */
UINT8 handle; /* device handle */
} tBTA_HH_CONN;
typedef tBTA_HH_CONN tBTA_HH_DEV_INFO;
/* callback event data */
typedef struct {
tBTA_HH_STATUS status; /* operation status */
UINT8 handle; /* device handle */
} tBTA_HH_CBDATA;
// muff1n: only filled with used members
typedef union {
tBTA_HH_DEV_INFO dev_info; /* BTA_HH_ADD_DEV_EVT, BTA_HH_RMV_DEV_EVT */
tBTA_HH_CONN conn; /* BTA_HH_OPEN_EVT */
tBTA_HH_CBDATA dev_status; /* BTA_HH_CLOSE_EVT,
BTA_HH_SET_PROTO_EVT
BTA_HH_SET_RPT_EVT
BTA_HH_SET_IDLE_EVT */
} tBTA_HH;
/* BTA HH callback function */
typedef void(tBTA_HH_CBACK)(tBTA_HH_EVT event, tBTA_HH *p_data);
/* General callback function for notifying an application that a synchronous
** BTM function is complete. The pointer contains the address of any returned data.
*/
typedef void(tBTM_CMPL_CB)(void *p1);
/* Structure returned with local version information */
typedef struct {
UINT8 hci_version;
UINT16 hci_revision;
UINT8 lmp_version;
UINT16 manufacturer;
UINT16 lmp_subversion;
} tBTM_VERSION_INFO;
/* Structure returned with Vendor Specific Command complete callback */
typedef struct {
UINT16 opcode;
UINT16 param_len;
UINT8 *p_param_buf;
} tBTM_VSC_CMPL;
#define BTM_VSC_CMPL_DATA_SIZE (BTM_MAX_VENDOR_SPECIFIC_LEN + sizeof(tBTM_VSC_CMPL))
/* Callback function for when device status changes. Appl must poll for
** what the new state is (BTM_IsDeviceUp). The event occurs whenever the stack
** has detected that the controller status has changed. This asynchronous event
** is enabled/disabled by calling BTM_RegisterForDeviceStatusNotif().
*/
enum { BTM_DEV_STATUS_UP, BTM_DEV_STATUS_DOWN, BTM_DEV_STATUS_CMD_TOUT };
typedef UINT8 tBTM_DEV_STATUS;
typedef void(tBTM_DEV_STATUS_CB)(tBTM_DEV_STATUS status);
/* Callback function for when a vendor specific event occurs. The length and
** array of returned parameter bytes are included. This asynchronous event
** is enabled/disabled by calling BTM_RegisterForVSEvents().
*/
typedef void(tBTM_VS_EVT_CB)(UINT8 len, UINT8 *p);
/* VSC callback function for notifying an application that a synchronous
** BTM function is complete. The pointer contains the address of any returned data.
*/
typedef void(tBTM_VSC_CMPL_CB)(tBTM_VSC_CMPL *p1);
/* Attributes mask values to be used in HID_HostAddDev API */
#define HID_VIRTUAL_CABLE 0x0001
#define HID_NORMALLY_CONNECTABLE 0x0002
#define HID_RECONN_INIT 0x0004
#define HID_SDP_DISABLE 0x0008
#define HID_BATTERY_POWER 0x0010
#define HID_REMOTE_WAKE 0x0020
#define HID_SUP_TOUT_AVLBL 0x0040
#define HID_SSR_MAX_LATENCY 0x0080
#define HID_SSR_MIN_TOUT 0x0100
#define HID_SEC_REQUIRED 0x8000
#define BTA_HH_VIRTUAL_CABLE HID_VIRTUAL_CABLE
#define BTA_HH_NORMALLY_CONNECTABLE HID_NORMALLY_CONNECTABLE
#define BTA_HH_RECONN_INIT HID_RECONN_INIT
#define BTA_HH_SDP_DISABLE HID_SDP_DISABLE
#define BTA_HH_BATTERY_POWER HID_BATTERY_POWER
#define BTA_HH_REMOTE_WAKE HID_REMOTE_WAKE
#define BTA_HH_SUP_TOUT_AVLBL HID_SUP_TOUT_AVLBL
#define BTA_HH_SEC_REQUIRED HID_SEC_REQUIRED
typedef UINT16 tBTA_HH_ATTR_MASK;
typedef struct desc_info {
UINT16 dl_len;
UINT8 *dsc_list;
} tHID_DEV_DSCP_INFO;
typedef tHID_DEV_DSCP_INFO tBTA_HH_DEV_DESCR;
/* Policy settings status */
#define HCI_DISABLE_ALL_LM_MODES 0x0000
#define HCI_ENABLE_MASTER_SLAVE_SWITCH 0x0001
#define HCI_ENABLE_HOLD_MODE 0x0002
#define HCI_ENABLE_SNIFF_MODE 0x0004
#define HCI_ENABLE_PARK_MODE 0x0008
/* HCI mode defenitions */
#define HCI_MODE_ACTIVE 0x00
#define HCI_MODE_HOLD 0x01
#define HCI_MODE_SNIFF 0x02
#define HCI_MODE_PARK 0x03
/* BTM Power manager status codes */
enum {
BTM_PM_STS_ACTIVE = HCI_MODE_ACTIVE,
BTM_PM_STS_HOLD = HCI_MODE_HOLD,
BTM_PM_STS_SNIFF = HCI_MODE_SNIFF,
BTM_PM_STS_PARK = HCI_MODE_PARK,
BTM_PM_STS_SSR, /* report the SSR parameters in HCI_SNIFF_SUB_RATE_EVT */
BTM_PM_STS_PENDING, /* when waiting for status from controller */
BTM_PM_STS_ERROR /* when HCI command status returns error */
};
typedef UINT8 tBTM_PM_STATUS;
/* BTM Power manager modes */
enum {
BTM_PM_MD_ACTIVE = BTM_PM_STS_ACTIVE,
BTM_PM_MD_HOLD = BTM_PM_STS_HOLD,
BTM_PM_MD_SNIFF = BTM_PM_STS_SNIFF,
BTM_PM_MD_PARK = BTM_PM_STS_PARK,
BTM_PM_MD_FORCE = 0x10 /* OR this to force ACL link to a certain mode */
};
typedef UINT8 tBTM_PM_MODE;
#define BTM_PM_SET_ONLY_ID 0x80
/* Operation codes */
#define BTM_PM_REG_SET 1 /* The module wants to set the desired power mode */
#define BTM_PM_REG_NOTIF 2 /* The module wants to receive mode change event */
#define BTM_PM_DEREG 4 /* The module does not want to involve with PM anymore */
typedef struct {
UINT16 max;
UINT16 min;
UINT16 attempt;
UINT16 timeout;
tBTM_PM_MODE mode;
} tBTM_PM_PWR_MD;
/*************************************
** Power Manager Callback Functions
**************************************/
typedef void(tBTM_PM_STATUS_CBACK)(BD_ADDR p_bda, tBTM_PM_STATUS status, UINT16 value, UINT8 hci_status);
/************************
** Stored Linkkey Types
*************************/
#define BTM_CB_EVT_RETURN_LINK_KEYS 1
#define BTM_CB_EVT_READ_STORED_LINK_KEYS 2
#define BTM_CB_EVT_WRITE_STORED_LINK_KEYS 3
#define BTM_CB_EVT_DELETE_STORED_LINK_KEYS 4
typedef struct {
UINT8 event;
} tBTM_STORED_LINK_KEYS_EVT;
typedef struct {
UINT8 event;
UINT8 num_keys;
} tBTM_RETURN_LINK_KEYS_EVT;
typedef struct {
BD_ADDR bd_addr;
LINK_KEY link_key;
} tBTM_BD_ADDR_LINK_KEY_PAIR;
typedef struct {
UINT8 event;
UINT8 status;
UINT16 max_keys;
UINT16 read_keys;
} tBTM_READ_STORED_LINK_KEY_COMPLETE;
typedef struct {
UINT8 event;
UINT8 status;
UINT8 num_keys;
} tBTM_WRITE_STORED_LINK_KEY_COMPLETE;
typedef struct {
UINT8 event;
UINT8 status;
UINT16 num_keys;
} tBTM_DELETE_STORED_LINK_KEY_COMPLETE;
// ---
tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK *p_cback);
tBTA_STATUS BTA_DisableBluetooth(void);
// muff1n: most changed prototype so far
tBTA_STATUS BTA_DmAddDevice(BD_ADDR bd_addr, LINK_KEY link_key, tBTA_SERVICE_MASK trusted_mask, BOOLEAN is_trusted);
tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr);
void BTA_DmSearch(tBTA_DM_INQ *p_dm_inq, tBTA_SERVICE_MASK services, tBTA_DM_SEARCH_CBACK *p_cback);
void BTA_DmSearchCancel(void);
void BTA_DmPinReply(BD_ADDR bd_addr, BOOLEAN accept, UINT8 pin_len, UINT8 *p_pin);
BOOLEAN BTA_DmIsDeviceUp(void);
void BTA_DmSetDeviceName(char *p_name);
// muff1n: disc_mode and conn_mode might be the , based on usage
void BTA_DmSetVisibility(UINT8, UINT8);
// muff1n: ucd_enabled might be the missing parameter
void BTA_HhEnable(tBTA_SEC sec_mask, tBTA_HH_CBACK *p_cback);
// muff1n: possibly takes just a tBTA_HH_DEV_DESCR in this version? i wrote it like that
void BTA_HhAddDev(BD_ADDR bda, tBTA_HH_ATTR_MASK attr_mask, UINT8 sub_class, UINT8 app_id, tBTA_HH_DEV_DESCR descr);
void BTA_HhRemoveDev(UINT8 dev_handle);
void BTA_HhOpen(BD_ADDR dev_bda, tBTA_HH_PROTO_MODE mode, tBTA_SEC sec_mask);
void BTA_HhClose(UINT8 dev_handle);
// muff1n: dev_bda is likely the missing parameter, as it is not used
void BTA_HhSendData(UINT8 dev_handle, BT_HDR *p_data);
void bta_sys_set_trace_level(UINT8 level);
void BTM_DeviceReset(tBTM_CMPL_CB *p_cb);
tBTM_STATUS BTM_ReadStoredLinkKey(BD_ADDR bd_addr, tBTM_CMPL_CB *p_cb);
tBTM_STATUS BTM_WriteStoredLinkKey(UINT8 num_keys, BD_ADDR *bd_addr, LINK_KEY *link_key, tBTM_CMPL_CB *p_cb);
tBTM_STATUS BTM_DeleteStoredLinkKey(BD_ADDR bd_addr, tBTM_CMPL_CB *p_cb);
tBTM_STATUS BTM_SetPowerMode(UINT8 pm_id, BD_ADDR remote_bda, tBTM_PM_PWR_MD *p_mode);
tBTM_STATUS BTM_SetAfhChannels(UINT8 first, UINT8 last);
tBTM_STATUS BTM_VendorSpecificCommand(UINT16 opcode, UINT8 param_len, UINT8 *p_param_buf, tBTM_VSC_CMPL_CB *p_cb);
tBTM_STATUS BTM_ReadLocalVersion(tBTM_VERSION_INFO *p_vers);
tBTM_STATUS BTM_SetDeviceClass(DEV_CLASS dev_class);
tBTM_STATUS btm_remove_acl(BD_ADDR bd_addr);
// muff1n: is_register is probably the missing parameter here
tBTM_STATUS BTM_RegisterForVSEvents(tBTM_VS_EVT_CB *p_cb);
tBTM_DEV_STATUS_CB *BTM_RegisterForDeviceStatusNotif(tBTM_DEV_STATUS_CB *p_cb);
tBTM_STATUS BTM_PmRegister(UINT8 mask, UINT8 *p_pm_id, tBTM_PM_STATUS_CBACK *p_cb);
tBTM_STATUS BTM_WritePageTimeout(UINT16 timeout);
void BTM_SetDefaultLinkPolicy(UINT16 settings);
void BTM_SetDefaultLinkSuperTout(UINT16 timeout);
BOOLEAN BTM_SecAddDevice(BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, BD_FEATURES features,
UINT32 trusted_mask[], LINK_KEY link_key);
void *GKI_getbuf(UINT16 size);
UINT8 L2CA_SetTraceLevel(UINT8 trace_level);
UINT8 SDP_SetTraceLevel(UINT8 new_level);
/* muff1n: not in bluedroid source; might be older removed API functions */
void BTA_DmSendHciReset(void);
void BTA_HhGetAclQueueInfo(void);
void BTA_Init(void);
void BTA_CleanUp(void (*p_cb)(tBTA_STATUS status)); // probably
// ---
/* muff1n: I wrote this definition myself
* TODO: would this be part of BLE or WUD?
*/
struct small_dev_info {
char devName[20]; // size 0x14? offset 0x00 // might be 0x13?
char at_0x14[1]; // size 0x??, offset 0x14?
char __pad0[0x20 - (0x14 + 0x01)];
LINK_KEY linkKey; // size 0x10, offset 0x20
char __pad1[0x10];
}; // size 0x40
#endif // CONTEXT_BTE_H
+10
View File
@@ -0,0 +1,10 @@
#ifndef EGG_AUDIO_ARC_PLAYER_MANAGER_H
#define EGG_AUDIO_ARC_PLAYER_MANAGER_H
namespace EGG {
class ArcPlayer {};
} // namespace EGG
#endif
+10
View File
@@ -0,0 +1,10 @@
#ifndef EGG_AUDIO_HEAP_MANAGER_H
#define EGG_AUDIO_HEAP_MANAGER_H
namespace EGG {
class SoundHeapMgr {};
} // namespace EGG
#endif
+4 -3
View File
@@ -1,10 +1,11 @@
#ifndef EGG_IAUDIO_MANAGER_H
#define EGG_IAUDIO_MANAGER_H
#ifndef EGG_AUDIO_MANAGER_H
#define EGG_AUDIO_MANAGER_H
#include "egg/audio/eggAudioArcPlayerMgr.h"
#include "egg/audio/eggAudioHeapMgr.h"
#include "egg/core/eggHeap.h"
#include "egg/egg_types.h"
namespace EGG {
class IAudioMgr {
public:
@@ -0,0 +1,6 @@
#ifndef EGG_AUDIO_REMOTE_SPEAKER_MANAGER_H
#define EGG_AUDIO_REMOTE_SPEAKER_MANAGER_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_AUDIO_SYSTEM_H
#define EGG_AUDIO_SYSTEM_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_AUDIO_ARC_UTILITY_H
#define EGG_AUDIO_ARC_UTILITY_H
namespace EGG {} // namespace EGG
#endif
+6 -5
View File
@@ -1,20 +1,21 @@
#ifndef EGG_ALLOCATOR_H
#define EGG_ALLOCATOR_H
#include "rvl/MEM.h"
#include <common.h>
/* 80495310 */ void MEMInitAllocatorFor_Heap(MEMAllocator *alloc, s32 align, void *heap);
void MEMInitAllocatorFor_Heap(MEMAllocator *alloc, s32 align, void *heap);
namespace EGG {
class Heap;
class Allocator : public MEMAllocator {
public:
/* 80495330 */ Allocator(Heap *heap, s32 align);
Allocator(Heap *heap, s32 align);
public:
/* vt 0x08 | 80495380 */ virtual ~Allocator();
/* vt 0x0C | 804953c0 */ virtual void *alloc(u32 size);
/* vt 0x10 | 804953e0 */ virtual void free(void *block);
/* vt 0x08 */ virtual ~Allocator();
/* vt 0x0C */ virtual void *alloc(u32 size);
/* vt 0x10 */ virtual void free(void *block);
inline MEMAllocator *getHandle() {
return static_cast<MEMAllocator *>(this);
+30 -31
View File
@@ -4,13 +4,12 @@
#include "egg/core/eggDisposer.h"
#include "rvl/ARC.h"
#include "rvl/NAND.h"
#include <common.h>
typedef void (*FileCallbackFunc)(void *, void *, const ARCDirEntry *, const char *);
namespace EGG {
// Functions that need a proper home:
/* 80493510 */ void readNANDFile(NANDFileInfo *info, void *buf, u32 len, s32 offs);
class Archive : public Disposer {
public:
@@ -19,46 +18,46 @@ public:
u32 mArcLength;
};
enum MountType { // enum name is correct, values arent official
NOT_LOADED,
LOADED_CAN_FAST_READ,
NAND_File,
MOUNT_NONE,
MOUNT_MEM,
MOUNT_NAND,
};
/* 0x10 */ MountType mMountType;
/* 0x14 */ u32 mRefCount;
/* 0x18 */ ARCHandle mHandle;
/* 0x34 */ s32 mDvdEntryNum; // gets put into first param of DVDFastOpen
/* 0x38 */ s32 mNandFile; // pointer to NANDFileInfo (was allocated)
/* 0x34 */ s32 mDvdEntryNum; // gets put into first param of DVDFastOpen
/* 0x38 */ NANDFileInfo *mNandFile; // pointer to NANDFileInfo (was allocated)
/* 0x3C */ nw4r::ut::Node mLink;
public:
/* 804935f0 */ virtual ~Archive();
virtual ~Archive();
public:
/* 80493580 */ Archive();
/* 80493660 */ void initHandle(void *data, MountType mountType);
/* 804936d0 */ static Archive *findArchive(void *data);
/* 80493760 */ static Archive *findArchive(NANDFileInfo *file);
/* 804937f0 */ static void appendList(Archive *); // prob private
/* 80493850 */ static void removeList(Archive *);
/* 80493860 */ static Archive *mount(void *data, Heap *heap, int align);
/* 80493950 */ static Archive *mountFST(void *data, Heap *heap, s32 align);
/* 80493a40 */ static Archive *mountNandFile(NANDFileInfo *, Heap *heap, s32 align);
/* 80493ac0 */ static Archive *loadFST(const char *fileName, Heap *heap, s32 align);
/* 80493b80 */ void unmount();
/* 80493c20 */ void *getFile(const char *name, FileInfo *out);
/* 80493cf0 */ s32 convertPathToEntryID(const char *path);
/* 80493d00 */ void *getFileFast(s32 entryId, FileInfo *fileinfo);
/* 80493dc0 */ void *getFileFast(s32 entryId, Heap *heap, s32 align);
/* 80493f30 */ s32 countFile();
/* 804940c0 */ void searchInside(FileCallbackFunc, void *);
/* 80494140 */ static void *loadFromNAND(NANDFileInfo *fileInfo, Heap *heap, s32 align);
Archive();
bool initHandle(void *data, MountType mountType);
static Archive *findArchive(void *data);
static Archive *findArchive(NANDFileInfo *file);
static Archive *mount(void *data, Heap *pHeap, int align);
static Archive *mountFST(void *data, Heap *pHeap, int align); // name assumed
static Archive *mountNAND(NANDFileInfo *, Heap *pHeap, int align); // name assumed
static Archive *loadFST(const char *fileName, Heap *pHeap, int align); // name assumed
void unmount();
void *getFile(const char *name, FileInfo *out);
s32 convertPathToEntryID(const char *path);
void *getFileFast(s32 entryId, FileInfo *fileinfo);
void *getFileFast(s32 entryId, Heap *pHeap, int align);
s32 countFile();
void searchInside(FileCallbackFunc, void *);
public:
/* 80576728 */ static bool sIsArchiveListInitialized;
/* 80673ac8 */ static nw4r::ut::List sArchiveList;
static void *loadNAND(NANDFileInfo *fileInfo, Heap *pHeap, int align);
static nw4r::ut::List sArchiveList;
private:
static bool sIsArchiveListInitialized;
static void appendList(Archive *);
static void removeList(Archive *);
};
/* 80493f10 */ void countFileCallbackFunc(void *, void *, const ARCDirEntry *, const char *);
/* 80493f70 */ void searchInsideWithPath(Archive *arc, ARCHandle *handle, FileCallbackFunc, void *, char *outPath, u32);
} // namespace EGG
#endif
+15 -14
View File
@@ -2,28 +2,29 @@
#define EGG_ASSERT_HEAP_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
class AssertHeap : public Heap {
public:
// vtable at 0x0 | 8056ea00
/* vt 0x08 | 804963e0 */ virtual ~AssertHeap();
/* vt 0x0C | 80496820 */ virtual eHeapKind getHeapKind() const;
/* vt 0x14 | 804966b0 */ virtual void *alloc(u32 size, s32 align);
/* vt 0x18 | 80496710 */ virtual void free(void *block);
/* vt 0x1C | 80496620 */ virtual void destroy();
/* vt 0x20 | 80496760 */ virtual u32 resizeForMBlock(void *block, u32 size);
/* vt 0x24 | 80496770 */ virtual u32 getTotalFreeSize();
/* vt 0x28 | 80496780 */ virtual u32 getAllocatableSize(s32 align);
/* vt 0x2C | 80496790 */ virtual u32 adjust();
// vtable at 0x0
virtual ~AssertHeap();
virtual eHeapKind getHeapKind() const override;
virtual void *alloc(u32 size, s32 align) override;
virtual void free(void *block) override;
virtual void destroy() override;
virtual u32 resizeForMBlock(void *block, u32 size) override;
virtual u32 getTotalFreeSize() override;
virtual u32 getAllocatableSize(s32 align) override;
virtual u32 adjust() override;
public:
/* 804963a0 */ AssertHeap(MEMiHeapHead *heapHead);
/* 80496460 */ static AssertHeap *create(void *block, size_t size, u16 attr);
/* 80496530 */ static AssertHeap *create(size_t size, Heap *heap);
/* 80496810 */ static size_t getSize(); // returns 0x7C
AssertHeap(MEMiHeapHead *heapHead);
static AssertHeap *create(void *block, u32 size);
static AssertHeap *create(u32 size, Heap *heap);
static size_t getSize(); // returns 0x7C
};
} // namespace EGG
+11 -10
View File
@@ -2,18 +2,19 @@
#define EGG_ASYNC_DISPLAY_H
#include "egg/core/eggDisplay.h"
#include <common.h>
namespace EGG {
class AsyncDisplay : public Display {
public:
// vtable at 0x04 | 8056eb60
/* vt 0x08 | 80497f20 */ virtual void beginFrame();
/* vt 0x10 | 804980e0 */ virtual void endRender();
/* vt 0x14 | 804980c0 */ virtual void endFrame();
/* vt 0x18 | 804982d0 */ virtual u32 getTickPerFrame();
/* vt 0x1C | 80498100 */ virtual void preVRetrace();
// vtable at 0x04
/* vt 0x08 */ virtual void beginFrame();
/* vt 0x10 */ virtual void endRender();
/* vt 0x14 */ virtual void endFrame();
/* vt 0x18 */ virtual u32 getTickPerFrame();
/* vt 0x1C */ virtual void preVRetrace();
private:
inline void waitForMsg(bool);
@@ -35,10 +36,10 @@ public:
/* 0xBC */ u32 field_0xBC;
public:
/* 80497e40 */ AsyncDisplay(u8 maxRetrace);
/* 80497ec0 */ f32 calcS();
/* 80498260 */ void clearEFB();
/* 804982f0 */ void clearEFB(u16, u16, u16, u16, u16, u16, nw4r::ut::Color);
AsyncDisplay(u8 maxRetrace);
f32 calcS();
void clearEFB();
void clearEFB(u16, u16, u16, u16, u16, u16, nw4r::ut::Color);
};
} // namespace EGG
+20 -13
View File
@@ -4,20 +4,23 @@
#include "egg/core/eggFader.h"
#include "egg/prim/eggBitFlag.h"
#include "nw4r/ut.h"
#include <common.h>
namespace EGG {
class ColorFader : public Fader {
public:
// vtable at 0x00 | 8056eae8
/* vt 0x08 | 80497a10 */ virtual void setStatus(EStatus);
/* vt 0x0C | 80067ec0 */ virtual EStatus getStatus() const { return mStatus; };
/* vt 0x10 | 80497a50 */ virtual bool fadeIn();
/* vt 0x14 | 80497a80 */ virtual bool fadeOut();
/* vt 0x18 | 80497ab0 */ virtual bool calc();
/* vt 0x1C | 80497ba0 */ virtual void draw();
/* vt 0x1C | 80131b70 */ virtual ~ColorFader() {}
// vtable at 0x00
/* vt 0x08 */ virtual void setStatus(EStatus);
/* vt 0x0C */ virtual EStatus getStatus() const {
return mStatus;
};
/* vt 0x10 */ virtual bool fadeIn();
/* vt 0x14 */ virtual bool fadeOut();
/* vt 0x18 */ virtual bool calc();
/* vt 0x1C */ virtual void draw();
/* vt 0x1C */ virtual ~ColorFader() {}
public:
/* 0x04 */ EStatus mStatus;
@@ -32,11 +35,15 @@ public:
/* 0x20 */ f32 mEndY;
public:
/* 80497930 */ ColorFader(f32 startX, f32 startY, f32 lengthX, f32 lengthY, nw4r::ut::Color color, EStatus status);
/* 804979e0 */ void setFrame(u16 frame);
/* 804979f0 */ void setColor(nw4r::ut::Color);
float getWidth() const { return mEndX - mStartX; }
float getHeight() const { return mEndY - mStartY; }
ColorFader(f32 startX, f32 startY, f32 lengthX, f32 lengthY, nw4r::ut::Color color, EStatus status);
void setFrame(u16 frame);
void setColor(nw4r::ut::Color);
float getWidth() const {
return mEndX - mStartX;
}
float getHeight() const {
return mEndY - mStartY;
}
};
} // namespace EGG
+158 -102
View File
@@ -1,14 +1,16 @@
#ifndef EGG_CONTROLLER_H
#define EGG_CONTROLLER_H
#include <common.h>
#include "egg/math/eggMath.h"
#include "egg/math/eggMatrix.h"
#include "egg/math/eggVector.h"
#include "egg/prim/eggBitFlag.h"
#include "egg/prim/eggBuffer.h"
#include "rvl/KPAD.h"
#include "rvl/PAD.h"
#include "rvl/WPAD.h"
#include <common.h>
namespace EGG {
@@ -16,96 +18,138 @@ class ControllerRumbleMgr;
class CoreController;
// To Be Filled out
enum eCoreDevType {};
enum eCoreDevType {
};
typedef void (*ConnectCallback)(int args[]);
typedef class CoreController *(*ControllerFactory)();
class CoreStatus {
public:
/* 0x00 */ u8 field_0x00[0x0C];
/* 0x0C */ f32 accel[3];
/* 0x00 */ u32 mHold;
/* 0x04 */ u32 mTrig;
/* 0x08 */ u32 mRelease;
/* 0x0C */ Vector3f mAccel;
/* 0x18 */ u8 field_0x01[0x20 - 0x18];
/* 0x20 */ f32 dpdRawX;
/* 0x24 */ f32 dpdRawY;
/* 0x28 */ u8 field_0x02[0x54 - 0x28];
/* 0x20 */ f32 mDpdRawX;
/* 0x24 */ f32 mDpdRawY;
/* 0x28 */ u8 field_0x02[0x48 - 0x28];
/* 0x48 */ f32 mDpdDistance;
/* 0x4C */ f32 float_0x4C;
/* 0x50 */ f32 float_0x50;
/* 0x54 */ f32 float_0x54;
/* 0x58 */ f32 float_0x58;
/* 0x5C */ u8 field_0x5C[0x5E - 0x5C];
/* 0x5E */ s8 dpdDistance;
/* 0x5C */ u8 mDevType;
/* 0x5D */ u8 field_0x5D;
/* 0x5E */ s8 mDpdValid;
/* 0x5F */ s8 unknown;
/* 0x60 */ f32 fsStickButton;
/* 0x60 */ f32 fsStickButton2;
/* 0x64 */ u8 field_0x03[0x88];
/* 0x60 */ f32 mFSStickX;
/* 0x64 */ f32 mFSStickY;
/* 0x68 */ u8 field_0x03[0x88];
public:
/* 80498f90 */ void init();
/* 80498fa0 */ u32 getFSStickButton() const;
void init();
u32 getFSStickButton() const;
f32 getFSStickX() const {
return mFSStickX;
}
f32 getFSStickY() const {
return mFSStickY;
}
bool down(u32 mask) const {
return (mask & mHold);
}
bool up(u32 mask) const {
return (mask & mHold) != mask;
}
bool downTrigger(u32 mask) const {
return (mask & mTrig);
}
bool upTrigger(u32 mask) const {
return (mask & mRelease);
}
bool downAll(u32 mask) const {
return (mask & mHold) == mask;
}
bool upAll(u32 mask) const {
return (mask & mHold) == 0;
}
inline Vector2f getUnk() {
s32 getDevType() const {
return mDevType;
}
bool isCore() const {
return getDevType() == WPAD_DEV_CORE;
}
bool isFreestyle() const {
return getDevType() == WPAD_DEV_FS;
}
u32 getHold() const {
return mHold;
}
s8 getDpdValidFlag() const {
return mDpdValid;
};
Vector2f getUnk() {
return Vector2f(float_0x54, float_0x58);
}
const Vector3f &getAccel() const {
return mAccel;
}
};
class CoreController {
public:
// vtable 0x000 | 8056ec50
// TODO all of these have inline implementations and are scattered
// across the binary
/* vt 0x08 | 80064920 */ virtual void setPosParam(f32, f32) {
// TODO
// vtable 0x0000
/* vt 0x08 */ virtual void setPosParam(f32 f1, f32 f2) {
KPADSetPosParam(mChannelID, f1, f2);
}
/* vt 0x0C | 8049a940 */ virtual void setHoriParam(f32, f32) {
// TODO
/* vt 0x0C */ virtual void setHoriParam(f32 f1, f32 f2) {
KPADSetHoriParam(mChannelID, f1, f2);
}
/* vt 0x10 | 8049a930 */ virtual void setDistParam(f32, f32) {
// TODO
/* vt 0x10 */ virtual void setDistParam(f32 f1, f32 f2) {
KPADSetDistParam(mChannelID, f1, f2);
}
/* vt 0x14 | 8049a920 */ virtual void setAccParam(f32, f32) {
// TODO
/* vt 0x14 */ virtual void setAccParam(f32 f1, f32 f2) {
KPADSetAccParam(mChannelID, f1, f2);
}
/* vt 0x18 | 80059820 */ virtual bool isPressed(u32 mask) {
// TODO
return false;
/* vt 0x18 */ virtual bool down(u32 mask) const {
return mCoreStatus[0].down(mask);
}
/* vt 0x1C | 80059a60 */ virtual bool isAnyPressed(u32 mask) {
// TODO
return false;
/* vt 0x1C */ virtual bool up(u32 mask) const {
return mCoreStatus[0].up(mask);
}
/* vt 0x20 | 80014e30 */ virtual bool isTriggered(u32 mask) {
// TODO
return false;
/* vt 0x20 */ virtual bool downTrigger(u32 mask) const {
return mCoreStatus[0].downTrigger(mask);
}
/* vt 0x24 | 800599e0 */ virtual bool isReleased() {
// TODO
return false;
/* vt 0x24 */ virtual bool upTrigger(u32 mask) const {
return mCoreStatus[0].upTrigger(mask);
}
/* vt 0x28 | 80059840 */ virtual bool isAllPressed() {
// TODO
return false;
/* vt 0x28 */ virtual bool downAll(u32 mask) const {
return mCoreStatus[0].downAll(mask);
}
/* vt 0x2C | 80059a80 */ virtual bool isNotPressed() {
// TODO
return false;
/* vt 0x2C */ virtual bool upAll(u32 mask) const {
return mCoreStatus[0].upAll(mask);
}
// We know the above are inline because if a class has any non-inline virtual functions,
// then the TU that contains an implementation of said function gets the vtable,
// and we know that eggController.cpp contains the vtable and the functions below
/* vt 0x30 | 80499660 */ virtual void beginFrame(void *padStatus); // Really needs to be PADStatus
/* vt 0x34 | 80499a60 */ virtual void endFrame();
/* vt 0x30 */ virtual void beginFrame(PADStatus *padStatus);
/* vt 0x34 */ virtual void endFrame();
public:
/* 0x004 */ s32 mChannelID;
/* 0x008 */ u32 mButtonHeld; // these fields may need a slight amount of work
/* 0x008 */ u32 mButtonHeld;
/* 0x00C */ u32 mButtonTriggered;
/* 0x010 */ u32 mButtonReleased;
/* 0x014 */ u32 field_0x14;
/* 0x018 */ CoreStatus coreStatus[16];
/* 0xf18 */ int mKPADResult;
/* 0x018 */ CoreStatus mCoreStatus[16];
/* 0xf18 */ int mReadStatusIdx;
/* 0xf1c */ TBitFlag<u8> mFlag;
/* 0xf20 */ Vector3f mAccel;
/* 0xf2c */ Vector2f mDpdPos;
/* 0xf34 */ u32 field_0xf28;
/* 0xf34 */ u32 mIdleTime;
/* 0xf38 */ u32 mMotorPattern;
/* 0xf3c */ bool mEnableMotor;
/* 0xf40 */ s32 mMotorFrameDuration;
@@ -114,67 +158,79 @@ public:
/* 0xf48 */ ControllerRumbleMgr *mRumbleMgr;
/* 0xf4c */ Matrix34f mPostureMatrix;
/* 0xf7c */ Matrix34f mPostureMatrixPrev;
/* 0xfac */ TBitFlag<u8> mAccelFlags;
/* 0xfac */ TBitFlag<u8> mAccelFlags; // May not be TBitFlag?
/* 0xfb0 */ s32 mMaxAccelFrameTime;
/* 0xfb4 */ s32 mAccelFrameTimeX;
/* 0xfb8 */ s32 mAccelFrameTimeY;
/* 0xfbc */ s32 mAccelFrameTimeZ;
/* 0xfb4 */ s32 mAccelFrameTime[3];
/* 0xfc0 */ f32 mMaxAccelDiff;
/* 0xfc4 */ Vector3f mPrevAccel;
public:
/* 80499050 */ CoreController();
/* 804990b0 */ void sceneReset();
/* 80499170 */ Vector2f getDpdRawPos() const;
/* 80499190 */ s32 getDpdDistance() const;
/* 804991a0 */ void startMotor();
/* 804991b0 */ void stopMotor();
/* 804991c0 */ void createRumbleMgr(u8);
/* 80499220 */ void startPatternRumble(const char *, int, bool);
/* 80499240 */ void stopRumbleMgr();
/* 80499260 */ CoreStatus *getCoreStatus(s32 idx);
/* 80499270 */ void calc_posture_matrix(Matrix34f &mat, bool);
/* 80499ac0 */ f32 getFreeStickX() const;
/* 80499ae0 */ f32 getFreeStickY() const;
CoreController();
void sceneReset();
Vector2f getDpdRawPos();
f32 getDpdDistance();
s32 getDpdValidFlag(); // Name Assumed. BBA hints at variable
void startMotor();
void stopMotor();
void createRumbleMgr(u8);
void startPatternRumble(const char *, int, bool);
void stopRumbleMgr();
CoreStatus *getCoreStatus(int idx);
void calc_posture_matrix(Matrix34f &mat, bool);
f32 getFreeStickX() const;
f32 getFreeStickY() const;
const Vector3f &getAccel() const {
return mCoreStatus[0].getAccel();
}
// Guess ?
bool isStable(u8 p1) const {
return (mAccelFlags.getDirect() & p1) == p1;
}
};
class CoreControllerMgr {
public:
struct T__Disposer : Disposer {
/* vt 0x08 | 80499b00 */ virtual ~T__Disposer();
/* 805767ac */ static T__Disposer *sStaticDisposer;
/* vt 0x08 */ virtual ~T__Disposer();
static T__Disposer *sStaticDisposer;
};
// Disposer Vtable: 8056ec40
/* 0x0000 */ T__Disposer mDisposer; // for the static T__Disposer
/* 0x0000 */ T__Disposer mDisposer;
struct UnkField0x10A0 {
virtual void v_08(UNKTYPE *);
};
public:
// 0x0010 vtable | 8056ebf8
/* vt 0x08 | 8049a130 */ virtual void beginFrame();
/* vt 0x0C | 8049a1e0 */ virtual void endFrame();
// 0x0010 vtable
/* vt 0x08 */ virtual void beginFrame();
/* vt 0x0C */ virtual void endFrame();
public:
/* 0x0014 */ TBuffer<CoreController *> mControllers;
/* 0x0020 */ u8 field_0x20[0x10a0 - 0x0020];
/* 0x10A0 */ u32 field_0x10A0;
/* 0x10A0 */ UnkField0x10A0 *field_0x10A0;
/* 0x10A4 */ TBuffer<eCoreDevType> mDevTypes;
/* 0x10b0 */ u8 field_0x10B0[0x10e0 - 0x10b0];
public:
/* 80499b80 */ static CoreControllerMgr *createInstance();
/* 80499bd0 */ static void deleteInstance();
/* 80499be0 */ CoreController *getNthController(int);
static CoreControllerMgr *createInstance();
static void deleteInstance();
CoreController *getNthController(int);
static void *allocThunk(size_t size);
static int deleteThunk(void *ptr);
/* 80499cd0 */ static void connectCallback(s32, s32);
/* 80499d10 */ CoreControllerMgr();
static void connectCallback(s32, s32);
CoreControllerMgr();
public:
/* 805767a8 */ static CoreControllerMgr *sInstance;
/* 805767b0 */ static CoreController *(*sCoreControllerFactory)();
/* 805767b4 */ static ConnectCallback sConnectCallback;
/* 805767b8 */ static bool sUseBuiltinWpadAllocator;
// /* 805767bc */ static sAllocator; // defined in cpp file
static CoreControllerMgr *sInstance;
static CoreController *(*sCoreControllerFactory)();
static ConnectCallback sConnectCallback;
static bool sUseBuiltinWpadAllocator;
static s32 sWPADWorkSize;
};
class NullController : public CoreController {
@@ -188,11 +244,11 @@ public:
class ControllerRumbleUnit {
public:
// 0x00 vtable | 8056ebb4
// 0x00 vtable
inline ControllerRumbleUnit() : mFlag(0) {
init();
}
/* vt 0x08 | 8049a8e0 */ virtual ~ControllerRumbleUnit() {}
/* vt 0x08 */ virtual ~ControllerRumbleUnit() {}
public:
/* 0x04 */ const char *mPattern;
@@ -204,15 +260,15 @@ public:
/* 0x1C */ nw4r::ut::Node mNode;
/* 0x24 */ u32 field_0x24; // could just be part of the node (List)
public:
/* 8049a3b0 */ void init();
/* 8049a3e0 */ void startPattern(const char *patter, int);
/* 8049a440 */ f32 calc();
void init();
void startPattern(const char *patter, int);
f32 calc();
};
class ControllerRumbleMgr {
public:
// 0x00 vtable | 8056eba8
/* vt 0x08 | 8049a8a0 */ virtual ~ControllerRumbleMgr() {}
// 0x00 vtable
/* vt 0x08 */ virtual ~ControllerRumbleMgr() {}
public:
/* 0x04 */ nw4r::ut::List mActiveUnitList;
@@ -220,12 +276,12 @@ public:
/* 0x1C */ CoreController *mController;
public:
/* 8049a530 */ ControllerRumbleMgr();
/* 8049a590 */ void createUnit(u8 numUnits, CoreController *controller);
/* 8049a620 */ void stop();
/* 8049a690 */ void calc();
/* 8049a7a0 */ void startPattern(const char *pattern, int, bool);
/* 8049a7f0 */ ControllerRumbleUnit *getUnitFromList(bool bGrabActive);
ControllerRumbleMgr();
void createUnit(u8 numUnits, CoreController *controller);
void stop();
void calc();
void startPattern(const char *pattern, int, bool);
ControllerRumbleUnit *getUnitFromList(bool bGrabActive);
};
} // namespace EGG
-85
View File
@@ -1,85 +0,0 @@
#ifndef EGG_STREAM_DECOMP_H
#define EGG_STREAM_DECOMP_H
#include "rvl/CX/cx.h"
#include <common.h>
// NOTE: I put StreamDecomp stuff here. im unsure of the correct place
namespace EGG {
class StreamDecomp {
public:
/* vt 0x08 */ virtual bool init(void *dest, u32 maxCompressedSize);
/* vt 0x0C */ virtual bool decomp(const void *src, u32 len);
/* vt 0x10 */ virtual u32 getHeaderSize();
/* vt 0x14 */ virtual u32 getUncompressedSize(const void *src);
public:
/* 0x04 */ void *dest;
/* 0x08 */ u32 maxCompressedSize;
};
class StreamDecompLZ : public StreamDecomp {
public:
/* vt 0x08 | 80494c80 */ virtual bool init(void *dest, u32 maxCompressedSize);
/* vt 0x0C | 80494cb0 */ virtual bool decomp(const void *src, u32 len);
/* vt 0x10 | 804952c0 */ virtual u32 getHeaderSize();
/* vt 0x14 | 804952b0 */ virtual u32 getUncompressedSize(const void *src);
public:
/* 0x0C */ CXUncompContextLZ context;
};
class StreamDecompRL : public StreamDecomp {
public:
/* vt 0x08 | 80494ce0 */ virtual bool init(void *dest, u32 maxCompressedSize);
/* vt 0x0C | 80494d10 */ virtual bool decomp(const void *src, u32 len);
/* vt 0x10 | 804952a0 */ virtual u32 getHeaderSize();
/* vt 0x14 | 80495290 */ virtual u32 getUncompressedSize(const void *src);
public:
/* 0x0C */ CXUncompContextRL context;
};
class StreamDecompLH : public StreamDecomp {
public:
/* vt 0x08 | 80494d40 */ virtual bool init(void *dest, u32 maxCompressedSize);
/* vt 0x0C | 80494d70 */ virtual bool decomp(const void *src, u32 len);
/* vt 0x10 | 80495280 */ virtual u32 getHeaderSize();
/* vt 0x14 | 80495270 */ virtual u32 getUncompressedSize(const void *src);
public:
/* 0x0C */ CXUncompContextLH context;
};
class StreamDecompLRC : public StreamDecomp {
public:
/* vt 0x08 | 80494da0 */ virtual bool init(void *dest, u32 maxCompressedSize);
/* vt 0x0C | 80494dd0 */ virtual bool decomp(const void *src, u32 len);
/* vt 0x10 | 80495260 */ virtual u32 getHeaderSize();
/* vt 0x14 | 80495250 */ virtual u32 getUncompressedSize(const void *src);
public:
/* 0x0C */ CXUncompContextLRC context;
};
class StreamDecompSZS : public StreamDecomp {
public:
/* vt 0x08 | 804951d0 */ virtual bool init(void *dest, u32 maxCompressedSize);
/* vt 0x0C | 80495200 */ virtual bool decomp(const void *src, u32 len);
/* vt 0x10 | 80495240 */ virtual u32 getHeaderSize();
/* vt 0x14 | 80495230 */ virtual u32 getUncompressedSize(const void *src);
private:
// NON-OFFICIAL
struct SZSCompContext {
u8 _[0x14];
/* 80494e00 */ static u32 getUncompressedSize(const void *src);
/* 80494e30 */ void init(u32 maxCompSize);
/* 80494e60 */ static int readSzsHeader(/* unk params*/);
/* 80494f60 */ void *decomp(const void *src, u32 len);
};
public:
/* 0x0C */ SZSCompContext context;
};
} // namespace EGG
#endif
+20 -16
View File
@@ -6,29 +6,33 @@
#include "egg/prim/eggBitFlag.h"
#include "nw4r/ut.h"
#include "rvl/VI.h"
#include <common.h>
/* 80497530 */ // void PreRetraceCallback(void);
#include <common.h>
namespace EGG {
class Display {
public:
enum EFlagBits { mFlag_SetClear, mFlag_WaitForRetrace };
enum EFlagBits {
mFlag_SetClear,
mFlag_WaitForRetrace
};
/* 0x00*/ TBitFlag<u8> mFlag;
enum EScreenStateBits {
mScreenStateFlag_SetBlack
};
public:
// vtable at 0x04 | 8056eac8
/* vt 0x08 | 80497600 */ virtual void beginFrame();
/* vt 0x0C | 804976c0 */ virtual void beginRender();
/* vt 0x10 | 804976d0 */ virtual void endRender();
/* vt 0x14 | 804976e0 */ virtual void endFrame();
/* vt 0x18 | 804975f0 */ virtual u32 getTickPerFrame();
/* vt 0x1C | 804976f0 */ virtual void preVRetrace();
// vtable at 0x04
/* vt 0x08 */ virtual void beginFrame();
/* vt 0x0C */ virtual void beginRender();
/* vt 0x10 */ virtual void endRender();
/* vt 0x14 */ virtual void endFrame();
/* vt 0x18 */ virtual u32 getTickPerFrame();
/* vt 0x1C */ virtual void preVRetrace();
public:
/* 0x08 */ u8 mMaxRetraces;
enum EScreenStateBits { mScreenStateFlag_SetBlack };
/* 0x09 */ TBitFlag<u8> mScreenStateFlag;
/* 0x0C */ u32 mRetraceCount;
/* 0x10 */ u32 mFrameCount;
@@ -40,13 +44,13 @@ public:
/* 0x28 */ f32 mFrequency;
public:
/* 80497570 */ Display(u8 maxRetrace);
/* 804977d0 */ void copyEFBtoXFB();
/* 80497870 */ void calcFrequency();
/* inline */ void setBlack(bool b) {}
Display(u8 maxRetrace);
void copyEFBtoXFB();
void calcFrequency();
void setBlack(bool b) {}
public:
/* 80497900 */ static u32 sTickPeriod;
static u32 sTickPeriod;
};
} // namespace EGG
+6 -3
View File
@@ -4,19 +4,22 @@
// This file was adapted from https://github.com/riidefi/mkw/blob/master/source/egg/core/eggDisposer.hpp
#include "nw4r/ut.h"
#include <common.h>
namespace EGG {
class Heap;
class Disposer : private NonCopyable {
public:
/* vt 0x08 | 80496890 */ virtual ~Disposer();
/* vt 0x08 */ virtual ~Disposer();
/* 80496830 */ Disposer();
public:
enum eLifetime { LIFETIME_UNMANAGED, LIFETIME_HEAP_GC };
enum eLifetime {
LIFETIME_UNMANAGED,
LIFETIME_HEAP_GC
};
inline eLifetime getLifetime() const {
return mContainHeap != nullptr ? LIFETIME_HEAP_GC : LIFETIME_UNMANAGED;
}
+17 -15
View File
@@ -5,6 +5,7 @@
#include "nw4r/ut.h"
#include "rvl/DVD.h"
#include "rvl/OS.h"
#include <common.h>
namespace EGG {
@@ -28,24 +29,25 @@ public:
/* 0xc8 */ nw4r::ut::Node mNode;
public:
/* vt 0x08 | 804942f0 */ virtual ~DvdFile();
/* vt 0x0C | 80494450 */ virtual bool open(const char *path);
/* vt 0x10 | 804944b0 */ virtual void close();
/* vt 0x14 | 80494510 */ virtual s32 readData(void *buffer, s32 length, s32 offset);
/* vt 0x18 | 804945e0 */ virtual s32 writeData(const void *buffer, s32 length, s32 offset);
/* vt 0x1C | 80494670 */ virtual u32 getFileSize() const;
/* vt 0x20 | 804943d0 */ virtual bool open(s32 entryNum);
/* vt 0x24 | 804944a0 */ virtual bool open(const char *path, void *);
/* vt 0x08 */ virtual ~DvdFile();
/* vt 0x0C */ virtual bool open(const char *path);
/* vt 0x10 */ virtual void close();
/* vt 0x14 */ virtual s32 readData(void *buffer, s32 length, s32 offset);
/* vt 0x18 */ virtual s32 writeData(const void *buffer, s32 length, s32 offset);
/* vt 0x1C */ virtual u32 getFileSize() const;
/* vt 0x20 */ virtual bool open(s32 entryNum);
/* vt 0x24 */ virtual bool open(const char *path, void *);
public:
/* 804942a0 */ DvdFile();
/* 80494360 */ void initiate();
/* 804945f0 */ s32 sync();
/* 80494650 */ static void doneProcess(s32 result, DVDFileInfo *fileInfo);
void initialize();
DvdFile();
void initiate();
s32 sync();
static void doneProcess(s32 result, DVDFileInfo *fileInfo);
public:
/* 80576730 */ static bool sIsInitialized;
/* 80673ad8 */ static nw4r::ut::List sDvdList;
private:
static bool sIsInitialized;
static nw4r::ut::List sDvdList;
};
} // namespace EGG
+34 -12
View File
@@ -1,30 +1,52 @@
#ifndef EGG_DVD_RIPPER_H
#define EGG_DVD_RIPPER_H
#include "egg/core/eggDecomp.h"
#include "egg/core/eggDvdFile.h"
#include "egg/core/eggHeap.h"
#include "egg/core/eggStreamDecomp.h"
#include <common.h>
namespace EGG {
class DvdRipper {
public:
enum EAllocDirection { ALLOC_CIR_PAD, ALLOC_DIR_TOP, ALLOC_DIR_BOTTOM };
enum EAllocDirection {
ALLOC_CIR_PAD,
ALLOC_DIR_TOP,
ALLOC_DIR_BOTTOM
};
struct UnkCallback_Arg {
u8 UNK_0x00[4];
u32 UNK_0x04;
u32 UNK_0x08;
u32 UNK_0x0C;
u32 UNK_0x10;
void *buf;
};
typedef void (*UnkCallback)(void *);
public:
/* 80494680 */ static u8 *loadToMainRAM(s32 entryNum, u8 *dst, Heap *heap, EAllocDirection allocDir, u32 offset,
u32 *amountRead, u32 *fileSize);
/* 80494730 */ static u8 *loadToMainRAM(const char *path, u8 *dst, Heap *heap, EAllocDirection allocDir, u32 offset,
u32 *amountRead, u32 *fileSize);
/* 804947e0 */ static u8 *loadToMainRAM(DvdFile *file, u8 *dst, Heap *heap, EAllocDirection allocDir, u32 offset,
u32 *amountRead, u32 *fileSize);
/* 804949b0 */ static void *loadToMainRAMDecomp(DvdFile *file, StreamDecomp *decompressor, u8 *dst, Heap *heap,
EAllocDirection allocDir, s32 offset, u32 size, u32 maxChunkSize, u32 *amountRead, u32 *fileSize);
static u8 *
loadToMainRAM(s32 entryNum, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize);
static u8 *loadToMainRAM(
const char *path, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize
);
static u8 *loadToMainRAM(
DvdFile *pFile, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize
);
static void *loadToMainRAMDecomp(
DvdFile *pFile, StreamDecomp *decompressor, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, s32 offset,
u32 size, u32 chunkSize, u32 *pRead, u32 *fileSize
);
public:
/* 80574ed0 */ static bool sErrorRetry;
/* */ // static sCallback;
static bool sErrorRetry;
static UnkCallback sCallback;
};
} // namespace EGG
+16 -15
View File
@@ -2,29 +2,30 @@
#define EGG_EXP_HEAP_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
class ExpHeap : public Heap {
public:
// vtable at 0x0 | 8056e980
/* vt 0x08 | 80495af0 */ virtual ~ExpHeap();
/* vt 0x0C | 80495f90 */ virtual eHeapKind getHeapKind() const;
/* vt 0x14 | 80495d90 */ virtual void *alloc(u32 size, s32 align);
/* vt 0x18 | 80495e50 */ virtual void free(void *block);
/* vt 0x1C | 80495d00 */ virtual void destroy();
/* vt 0x20 | 80495ec0 */ virtual u32 resizeForMBlock(void *block, u32 size);
/* vt 0x24 | 80495ed0 */ virtual u32 getTotalFreeSize();
/* vt 0x28 | 80495ee0 */ virtual u32 getAllocatableSize(s32 align);
/* vt 0x2C | 80495f00 */ virtual u32 adjust();
// vtable at 0x0
/* vt 0x08 */ virtual ~ExpHeap();
/* vt 0x0C */ virtual eHeapKind getHeapKind() const override;
/* vt 0x14 */ virtual void *alloc(u32 size, s32 align) override;
/* vt 0x18 */ virtual void free(void *block) override;
/* vt 0x1C */ virtual void destroy() override;
/* vt 0x20 */ virtual u32 resizeForMBlock(void *block, u32 size) override;
/* vt 0x24 */ virtual u32 getTotalFreeSize() override;
/* vt 0x28 */ virtual u32 getAllocatableSize(s32 align) override;
/* vt 0x2C */ virtual u32 adjust() override;
public:
/* 80495ab0 */ ExpHeap(MEMiHeapHead *heapHead);
/* 80495b70 */ static ExpHeap *create(void *block, size_t size, u16 attr);
/* 80495c30 */ static ExpHeap *create(size_t size, Heap *heap, u16 attr);
/* 80495d00 */ void setGroupID(u16 groupId);
/* 80495f80 */ static u32 getSizeForMBlock(const void *block);
ExpHeap(MEMiHeapHead *heapHead);
static ExpHeap *create(void *block, size_t size, u16 attr);
static ExpHeap *create(size_t size, Heap *heap, u16 attr);
void setGroupID(u16 groupId);
static u32 getSizeForMBlock(const void *block);
// Placement new for ::create
inline void *operator new(size_t size, void *ptr) {
+6 -6
View File
@@ -16,12 +16,12 @@ public:
public:
// vtable at 0x00
/* vt 0x08 | 00000000 */ virtual void setStatus(EStatus) = 0;
/* vt 0x0C | 00000000 */ virtual EStatus getStatus() const = 0;
/* vt 0x10 | 00000000 */ virtual bool fadeIn() = 0;
/* vt 0x14 | 00000000 */ virtual bool fadeOut() = 0;
/* vt 0x18 | 00000000 */ virtual bool calc() = 0;
/* vt 0x1C | 00000000 */ virtual void draw() = 0;
/* vt 0x08 */ virtual void setStatus(EStatus) = 0;
/* vt 0x0C */ virtual EStatus getStatus() const = 0;
/* vt 0x10 */ virtual bool fadeIn() = 0;
/* vt 0x14 */ virtual bool fadeOut() = 0;
/* vt 0x18 */ virtual bool calc() = 0;
/* vt 0x1C */ virtual void draw() = 0;
};
} // namespace EGG
+16 -15
View File
@@ -2,29 +2,30 @@
#define EGG_FRM_HEAP_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
class FrmHeap : public Heap {
public:
// vtable at 0x0 | 8056e9d0
/* vt 0x08 | 80495fe0 */ virtual ~FrmHeap();
/* vt 0x0C | 80496390 */ virtual eHeapKind getHeapKind() const;
/* vt 0x14 | 804961c0 */ virtual void *alloc(u32 size, s32 align);
/* vt 0x18 | 80496250 */ virtual void free(void *block);
/* vt 0x1C | 80496130 */ virtual void destroy();
/* vt 0x20 | 804962b0 */ virtual u32 resizeForMBlock(void *block, u32 size);
/* vt 0x24 | 804962c0 */ virtual u32 getTotalFreeSize();
/* vt 0x28 | 804962e0 */ virtual u32 getAllocatableSize(s32 align);
/* vt 0x2C | 804962f0 */ virtual u32 adjust();
// vtable at 0x0
virtual ~FrmHeap();
virtual eHeapKind getHeapKind() const override;
virtual void *alloc(u32 size, s32 align) override;
virtual void free(void *block) override;
virtual void destroy() override;
virtual u32 resizeForMBlock(void *block, u32 size) override;
virtual u32 getTotalFreeSize() override;
virtual u32 getAllocatableSize(s32 align) override;
virtual u32 adjust() override;
public:
/* 80495fa0 */ FrmHeap(MEMiHeapHead *heapHead);
/* 80496060 */ static FrmHeap *create(void *block, size_t size, u16 attr);
/* 804962a0 */ void free(s32 flags);
/* 80496370 */ void recordState(u32 id); // non official for now
/* 80496380 */ void freeState(u32 id); // non official for now
FrmHeap(MEMiHeapHead *heapHead);
static FrmHeap *create(void *block, u32 size, u16 attr);
void free(s32 flags);
void recordState(u32 id);
void freeByState(u32 id);
};
} // namespace EGG
+7 -6
View File
@@ -2,14 +2,15 @@
#define EGG_GRAPHICS_FIFO_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
class GraphicsFifo {
public:
// vtable 0x00 | 8056eb80
/* vt 0x08 | 80498e90*/ virtual ~GraphicsFifo();
// vtable 0x00
/* vt 0x08 */ virtual ~GraphicsFifo();
public:
/* 0x04 */ void *mGxInitData;
@@ -17,12 +18,12 @@ public:
/* 0x0C */ u32 mBufSize;
public:
/* 80498e20 */ static void create(u32 size, Heap *heap);
/* 80498f30 */ GraphicsFifo(u32 size, Heap *heap);
static void create(u32 size, Heap *heap);
GraphicsFifo(u32 size, Heap *heap);
public:
/* 80576798 */ static GraphicsFifo *sGraphicsFifo;
/* 8057679c */ static u8 sGpStatus[5];
static GraphicsFifo *sGraphicsFifo;
static u8 sGpStatus[5];
};
} // namespace EGG
+42 -41
View File
@@ -9,6 +9,7 @@
#include "nw4r/ut.h"
#include "rvl/MEM.h"
#include "rvl/OS.h"
#include <common.h>
namespace EGG {
@@ -54,17 +55,17 @@ public:
HEAP_KIND_UNIT,
HEAP_KIND_ASSERT,
};
// vtable at 0x0 | 8056e950
/* vt 0x08 | 804954c0 */ virtual ~Heap();
/* vt 0x0C | 00000000 */ virtual eHeapKind getHeapKind() const = 0;
/* vt 0x10 | 80495a40 */ virtual void initAllocator(Allocator *allocator, s32 align);
/* vt 0x14 | 00000000 */ virtual void *alloc(u32 size, s32 align) = 0;
/* vt 0x18 | 00000000 */ virtual void free(void *block) = 0;
/* vt 0x1C | 00000000 */ virtual void destroy() = 0;
/* vt 0x20 | 00000000 */ virtual u32 resizeForMBlock(void *block, u32 size) = 0;
/* vt 0x24 | 00000000 */ virtual u32 getTotalFreeSize() = 0;
/* vt 0x28 | 00000000 */ virtual u32 getAllocatableSize(s32 align) = 0;
/* vt 0x2C | 00000000 */ virtual u32 adjust() = 0;
// vtable at 0x0
/* vt 0x08 */ virtual ~Heap();
/* vt 0x0C */ virtual eHeapKind getHeapKind() const = 0;
/* vt 0x10 */ virtual void initAllocator(Allocator *allocator, s32 align);
/* vt 0x14 */ virtual void *alloc(u32 size, s32 align) = 0;
/* vt 0x18 */ virtual void free(void *block) = 0;
/* vt 0x1C */ virtual void destroy() = 0;
/* vt 0x20 */ virtual u32 resizeForMBlock(void *block, u32 size) = 0;
/* vt 0x24 */ virtual u32 getTotalFreeSize() = 0;
/* vt 0x28 */ virtual u32 getAllocatableSize(s32 align) = 0;
/* vt 0x2C */ virtual u32 adjust() = 0;
public:
void setName(const char *name) {
@@ -94,18 +95,18 @@ public:
};
public:
/* 804953f0 */ static void initialize();
/* 80495430 */ Heap(MEMiHeapHead *heapHandle);
/* 80495690 */ static Heap *findHeap(MEMiHeapHead *heapHandle);
/* 80495730 */ Heap *findParentHeap();
/* 80495780 */ static Heap *findContainHeap(const void *memBlock);
/* 80495560 */ static void *alloc(size_t size, int align, Heap *heap);
/* 804957c0 */ static void free(void *memBlock, Heap *heap);
/* 80495830 */ void dispose();
/* 804958a0 */ void dump();
/* 804958b0 */ static void dumpAll();
/* 804959a0 */ Heap *becomeCurrentHeap();
/* 80495a00 */ Heap *_becomeCurrentHeapWithoutLock();
static void initialize();
Heap(MEMiHeapHead *heapHandle);
static Heap *findHeap(MEMiHeapHead *heapHandle);
Heap *findParentHeap();
static Heap *findContainHeap(const void *memBlock);
static void *alloc(size_t size, int align, Heap *heap);
static void free(void *memBlock, Heap *heap);
void dispose();
void dump();
static void dumpAll();
Heap *becomeCurrentHeap();
Heap *_becomeCurrentHeapWithoutLock();
public:
template <typename T>
@@ -177,26 +178,26 @@ public:
return ret;
}
/* 80673ae8 */ static nw4r::ut::List sHeapList;
/* 80673af8 */ static OSMutex sRootMutex;
/* 80576740 */ static Heap *sCurrentHeap;
/* 80576744 */ static int sIsHeapListInitialized;
/* 80576748 */ static Heap *sAllocatableHeap;
/* 8057674c */ static ErrorCallback sErrorCallback;
/* 80576750 */ static HeapAllocCallback sAllocCallback;
/* 80576754 */ static HeapFreeCallback sFreeCallback;
/* 80576758 */ static void *sErrorCallbackArg;
/* 8057675c */ static void *sAllocCallbackArg;
/* 80576760 */ static void *sFreeCallbackArg;
/* 80576764 */ static HeapCreateCallback sCreateCallback;
/* 80576764 */ static HeapDestroyCallback sDestroyCallback;
static nw4r::ut::List sHeapList;
static OSMutex sRootMutex;
static Heap *sCurrentHeap;
static int sIsHeapListInitialized;
static Heap *sAllocatableHeap;
static ErrorCallback sErrorCallback;
static HeapAllocCallback sAllocCallback;
static HeapFreeCallback sFreeCallback;
static void *sErrorCallbackArg;
static void *sAllocCallbackArg;
static void *sFreeCallbackArg;
static HeapCreateCallback sCreateCallback;
static HeapDestroyCallback sDestroyCallback;
};
} // namespace EGG
/* 80495a60 */ void *operator new(size_t, void *p);
/* 80495a70 */ void *operator new(size_t size, EGG::Heap *heap, int align = 4);
/* 80495a80 */ void *operator new(size_t size, EGG::Allocator *alloc);
/* 80495a90 */ void *operator new[](size_t size, int align);
/* 80495aa0 */ void *operator new[](size_t size, EGG::Heap *heap, int align = 4);
void *operator new(size_t, void *p);
void *operator new(size_t size, EGG::Heap *heap, int align = 4);
void *operator new(size_t size, EGG::Allocator *alloc);
void *operator new[](size_t size, int align);
void *operator new[](size_t size, EGG::Heap *heap, int align = 4);
#endif
+116
View File
@@ -0,0 +1,116 @@
#ifndef EGG_STREAM_DECOMP_H
#define EGG_STREAM_DECOMP_H
#include "rvl/CX/cx.h"
#include <common.h>
// NOTE: I put StreamDecomp stuff here. im unsure of the correct place
namespace EGG {
class StreamDecomp {
public:
/* vt 0x08 */ virtual bool init(void *pDest, u32 maxCompressedSize);
/* vt 0x0C */ virtual bool decomp(const void *pSrc, u32 len);
/* vt 0x10 */ virtual u32 getHeaderSize();
/* vt 0x14 */ virtual u32 getUncompressedSize(const void *pSrc);
public:
/* 0x04 */ void *mpDest;
/* 0x08 */ u32 mMaxCompressedSize;
};
class StreamDecompLZ : public StreamDecomp {
public:
virtual bool init(void *pDest, u32 maxCompressedSize) override;
virtual bool decomp(const void *pSrc, u32 len) override;
virtual u32 getHeaderSize() override {
return 0x20;
}
virtual u32 getUncompressedSize(const void *pSrc) override {
return CXGetUncompressedSize(pSrc);
}
public:
/* 0x0C */ CXUncompContextLZ mContext;
};
class StreamDecompRL : public StreamDecomp {
public:
virtual bool init(void *pDest, u32 maxCompressedSize) override;
virtual bool decomp(const void *pSrc, u32 len) override;
virtual u32 getHeaderSize() override {
return 0x20;
}
virtual u32 getUncompressedSize(const void *pSrc) override {
return CXGetUncompressedSize(pSrc);
}
public:
/* 0x0C */ CXUncompContextRL mContext;
};
class StreamDecompLH : public StreamDecomp {
public:
virtual bool init(void *pDest, u32 maxCompressedSize) override;
virtual bool decomp(const void *pSrc, u32 len) override;
virtual u32 getHeaderSize() override {
return 0x20;
}
virtual u32 getUncompressedSize(const void *pSrc) override {
return CXGetUncompressedSize(pSrc);
}
public:
/* 0x0C */ CXUncompContextLH mContext;
};
class StreamDecompLRC : public StreamDecomp {
public:
virtual bool init(void *pDest, u32 maxCompressedSize) override;
virtual bool decomp(const void *pSrc, u32 len) override;
virtual u32 getHeaderSize() override {
return 0x20;
}
virtual u32 getUncompressedSize(const void *pSrc) override {
return CXGetUncompressedSize(pSrc);
}
public:
/* 0x0C */ CXUncompContextLRC mContext;
};
// NON-OFFICIAL
struct UncompContextSZS {
/* 80494e00 */ static u32 getUncompressedSize(const void *pSrc);
/* 80494e30 */ void initUncompContext(void *pDest);
/* 80494e60 */ static s32
readHeader(u8 *pHeaderLen, s32 *pUncompSize, const u8 *src, u32 maxCompLen, s32 maxUncompSize);
/* 80494f60 */ s32 readUncomp(const void *pSrca, u32 len);
/* 0x00 */ u8 *mpDest;
/* 0x04 */ s32 mUncompSize;
/* 0x08 */ s32 mMaxUncompSize;
/* 0x0C */ u8 mGroupHead;
/* 0x0D */ u8 mSecondByte;
/* 0x0E */ u8 mFirstByte;
/* 0x0F */ u8 mState;
/* 0x10 */ u16 mCopySrc;
/* 0x12 */ u8 mHeaderLen;
};
class StreamDecompSZS : public StreamDecomp {
public:
virtual bool init(void *pDest, u32 maxCompressedSize) override;
virtual bool decomp(const void *pSrc, u32 len) override;
virtual u32 getHeaderSize() override {
return 0x20;
}
virtual u32 getUncompressedSize(const void *pSrc) override {
return mContext.getUncompressedSize(pSrc);
}
public:
/* 0x0C */ UncompContextSZS mContext;
};
} // namespace EGG
#endif
+15 -14
View File
@@ -2,6 +2,7 @@
#define EGG_SYSTEM_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
@@ -12,19 +13,19 @@ class Video;
class ConfigurationData {
public:
// vtable at 0x0 | 8056ea8c
/* vt 0x08 | 00000000 */ virtual Video *getVideo() = 0;
/* vt 0x0C | 00000000 */ virtual Heap *getSystemHeap() = 0;
/* vt 0x10 | 00000000 */ virtual Display *getDisplay() = 0;
/* vt 0x14 | 00000000 */ virtual XfbManager *getXfbMgr() = 0;
/* vt 0x18 | 00000000 */ virtual void getPerfView() = 0;
/* vt 0x1C | 00000000 */ virtual void getScnMgr() = 0;
/* vt 0x20 | 00000000 */ virtual void getAudioMgr() = 0;
/* vt 0x24 | 800643d0 */ virtual void onBeginFrame();
/* vt 0x28 | 80064430 */ virtual void onEndFrame();
/* vt 0x2C | 80064ea0 */ virtual void initRenderMode();
/* vt 0x30 | 80497170 */ virtual void initMemory();
/* vt 0x34 | 804972f0 */ virtual void run();
// vtable at 0x0
/* vt 0x08 */ virtual Video *getVideo() = 0;
/* vt 0x0C */ virtual Heap *getSystemHeap() = 0;
/* vt 0x10 */ virtual Display *getDisplay() = 0;
/* vt 0x14 */ virtual XfbManager *getXfbMgr() = 0;
/* vt 0x18 */ virtual void getPerfView() = 0;
/* vt 0x1C */ virtual void getScnMgr() = 0;
/* vt 0x20 */ virtual void getAudioMgr() = 0;
/* vt 0x24 */ virtual void onBeginFrame();
/* vt 0x28 */ virtual void onEndFrame();
/* vt 0x2C */ virtual void initRenderMode();
/* vt 0x30 */ virtual void initMemory();
/* vt 0x34 */ virtual void run();
public:
/* 0x04 */ u32 mRoot1HeapStart;
@@ -45,7 +46,7 @@ public:
};
class BaseSystem {
public:
/* 80576780 */ static ConfigurationData *mConfigData;
static ConfigurationData *mConfigData;
static XfbManager *getXfbMgr() {
return mConfigData->getXfbMgr();
}
+18 -15
View File
@@ -4,16 +4,19 @@
#include "egg/core/eggHeap.h"
#include "nw4r/ut.h"
#include "rvl/OS.h"
#include <common.h>
namespace EGG {
class Thread {
public: // vtable: 0x00 | 8056ea40
/* 0x08 | 80496a60 */ virtual ~Thread();
/* 0x0C | 80496dd0 */ virtual void *run() { return nullptr; }
/* 0x10 | 800bd600 */ virtual void onEnter() {}
/* 0x14 | 800bd5f0 */ virtual void onExit() {}
public: // vtable: 0x00
/* 0x08 */ virtual ~Thread();
/* 0x0C */ virtual void *run() {
return nullptr;
}
/* 0x10 */ virtual void onEnter() {}
/* 0x14 */ virtual void onExit() {}
public:
/* 0x04 */ Heap *mContainingHeap;
@@ -30,18 +33,18 @@ public:
/* 0x44 */ nw4r::ut::Node mLink;
public:
/* 80496910 */ Thread(u32 stackSize, int msgCount, int priority, Heap *heap);
/* 804969e0 */ Thread(OSThread *osThread, int msgCount);
/* 80496b20 */ static Thread *findThread(OSThread *thread);
/* 80496b90 */ static void initialize();
/* 80496bd0 */ void setThreadCurrentHeap(Heap *heap);
/* 80496c70 */ static void switchThreadCallback(OSThread *from, OSThread *to);
/* 80496d60 */ void setCommonMesgQueue(int mesgCount, Heap *heap);
/* 80496dc0 */ static void *start(void *thread);
Thread(u32 stackSize, int msgCount, int priority, Heap *heap);
Thread(OSThread *osThread, int msgCount);
static Thread *findThread(OSThread *thread);
static void initialize();
void setThreadCurrentHeap(Heap *heap);
static void switchThreadCallback(OSThread *from, OSThread *to);
void setCommonMesgQueue(int mesgCount, Heap *heap);
static void *start(void *thread);
public:
/* 80673b10 */ static nw4r::ut::List sThreadList;
/* 80576770 */ static void (*sOldSwitchThreadCallback)(OSThread *, OSThread *);
static nw4r::ut::List sThreadList;
static void (*sOldSwitchThreadCallback)(OSThread *, OSThread *);
};
} // namespace EGG
+2
View File
@@ -2,8 +2,10 @@
#define EGG_UNK_H
#include "rvl/OS.h"
#include <common.h>
// This is seen in Animal Crossing: City Folk also. Idk where it belongs
// Seen between EGG::Thread and EGG::ConfigurationData (eggThread and eggSystem)
+8 -7
View File
@@ -4,6 +4,7 @@
#include "egg/prim/eggBitFlag.h"
#include "rvl/GX.h"
#include "rvl/VI.h"
#include <common.h>
namespace EGG {
@@ -20,15 +21,15 @@ public:
/* 0x08 */ u32 mConfiguredTime;
public:
/* inline */ Video() : pRenderMode(0), mFlag(), mConfiguredTime(){};
/* 80498690 */ void initialize(GXRenderModeObj *, const RenderModeObjSet *);
/* 804986f0 */ GXRenderModeObj *configure(GXRenderModeObj *, const RenderModeObjSet *);
/* 80498800 */ static u32 getTickPerVRetrace(u32 tvFormat);
/* 80498860 */ static u32 getTickPerVRetrace();
/* 80498890 */ static const GXRenderModeObj *getStandardRenderModeObj(const RenderModeObjSet *);
Video() : pRenderMode(0), mFlag(), mConfiguredTime(){};
void initialize(GXRenderModeObj *, const RenderModeObjSet *);
GXRenderModeObj *configure(GXRenderModeObj *, const RenderModeObjSet *);
static u32 getTickPerVRetrace(u32 tvFormat);
static u32 getTickPerVRetrace();
static const GXRenderModeObj *getStandardRenderModeObj(const RenderModeObjSet *);
public:
/* inline */ void setBlack(bool b) {
void setBlack(bool b) {
VISetBlack(!mFlag.onBit(0));
mFlag.toggleBit(0);
}
+5 -3
View File
@@ -2,6 +2,7 @@
#define EGG_XFB_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
@@ -23,9 +24,10 @@ public:
/* 0x0C */ Xfb *mNext; // idk the actual order, but they always link to each other
/* 0x10 */ Xfb *mPrev; // idk the actual order, but they always link to each other
public:
/* 804989e0 */ void init(u16 width, u16 height, Heap *heap);
/* 80498a60 */ Xfb(Heap *heap);
/* 80498ad0 */ static u32 calcBufferSize(u16 width, u16 height);
Xfb(Heap *heap);
void init(u16 width, u16 height, Heap *heap);
static u32 calcBufferSize(u16 width, u16 height);
};
} // namespace EGG
+5 -4
View File
@@ -2,6 +2,7 @@
#define EGG_XFB_MANAGER_H
#include "egg/core/eggXfb.h"
#include <common.h>
namespace EGG {
@@ -14,10 +15,10 @@ public:
/* 0xC */ u8 mNumXfbs; // Total number of Xfbs ever attached
/* 0xD */ u8 mNumXfbs_Copy; // Unsure of purpose yet, but showing wont proceed until its under 3
public:
/* 80498af0 */ bool isRegisterd(Xfb &xfb) const; // yes. this is correct spelling
/* 80498b30 */ bool attach(Xfb *xfb);
/* 80498c10 */ void copyEFB(bool);
/* 80498d00 */ void setNextFrameBuffer();
bool isRegisterd(Xfb &xfb) const; // yes. this is correct spelling
bool attach(Xfb *xfb);
void copyEFB(bool);
void setNextFrameBuffer();
};
} // namespace EGG
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_CAMERA_H
#define EGG_CAMERA_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_CAP_TEXTURE_H
#define EGG_CAP_TEXTURE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_CPU_TEXTURE_H
#define EGG_CPU_TEXTURE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_DRAW_PATH_BASE_H
#define EGG_DRAW_PATH_BASE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_DRAW_PATH_DOF_H
#define EGG_DRAW_PATH_DOF_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_DRAW_PATH_UNK1_H
#define EGG_DRAW_PATH_UNK1_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_DRAW_PATH_UNK2_H
#define EGG_DRAW_PATH_UNK2_H
namespace EGG {} // namespace EGG
#endif
+6 -2
View File
@@ -9,8 +9,12 @@ namespace EGG {
// TODO: Fill out more
class Frustum {
public:
enum CanvasMode {};
enum ProjectionType { PROJ_ORTHO, PROJ_PERSP };
enum CanvasMode {
};
enum ProjectionType {
PROJ_ORTHO,
PROJ_PERSP
};
private:
/* 0x00 */ ProjectionType mProjType;
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_G3D_UTILITY_H
#define EGG_G3D_UTILITY_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_GX_UTILITY_H
#define EGG_GX_UTILITY_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_GLOBAL_DRAW_STATE_H
#define EGG_GLOBAL_DRAW_STATE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_ISCNPROC_H
#define EGG_ISCNPROC_H
namespace EGG {} // namespace EGG
#endif
+1
View File
@@ -1,6 +1,7 @@
#ifndef EGG_LIGHT_H
#define EGG_LIGHT_H
#include <egg/core/eggHeap.h>
#include <egg/prim/eggBinary.h>
#include <nw4r/types_nw4r.h>
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_LIGHT_TEXTURE_H
#define EGG_LIGHT_TEXTURE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_LIGHT_TEXTURE_MGR_H
#define EGG_LIGHT_TEXTURE_MGR_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_MODEL_EX_H
#define EGG_MODEL_EX_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_PALETTE_H
#define EGG_PALETTE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_BASE_H
#define EGG_POST_EFFECT_BASE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_BLUR_H
#define EGG_POST_EFFECT_BLUR_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_MASK_H
#define EGG_POST_EFFECT_MASK_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_MASK_DOF_H
#define EGG_POST_EFFECT_MASK_DOF_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_SIMPLE_H
#define EGG_POST_EFFECT_SIMPLE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_UNK1_H
#define EGG_POST_EFFECT_UNK1_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_POST_EFFECT_UNK2_H
#define EGG_POST_EFFECT_UNK2_H
namespace EGG {} // namespace EGG
#endif
+7 -1
View File
@@ -21,7 +21,13 @@ public:
u8 TODO_0x3C[0x88 - 0x3C];
enum TVMode { TV_MODE_1, TV_MODE_2, TV_MODE_3, TV_MODE_4, TV_MODE_MAX };
enum TVMode {
TV_MODE_1,
TV_MODE_2,
TV_MODE_3,
TV_MODE_4,
TV_MODE_MAX
};
struct TVModeInfo {
TVModeInfo() {}
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_SCREEN_EFFECT_BASE_H
#define EGG_SCREEN_EFFECT_BASE_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_SCREEN_EFFECT_BLUR_H
#define EGG_SCREEN_EFFECT_BLUR_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_STATE_EFB_H
#define EGG_STATE_EFB_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_TEXTURE_BUFFER_H
#define EGG_TEXTURE_BUFFER_H
namespace EGG {} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_UNK_H
#define EGG_UNK_H
namespace EGG {} // namespace EGG
#endif
+6 -2
View File
@@ -1,8 +1,8 @@
#ifndef EGG_MATH_H
#define EGG_MATH_H
#include <common.h>
#include <MSL_C/float.h>
#include <common.h>
namespace EGG {
@@ -32,7 +32,11 @@ public:
}
static T abs(T t) {
return t > 0 ? t : -t;
return t > (T)0 ? t : -t;
}
static T zero() {
return (T)0;
}
static T sqrt(T);
+42 -38
View File
@@ -3,16 +3,15 @@
#include "egg/math/eggQuat.h"
#include "egg/math/eggVector.h"
#include <common.h>
namespace EGG {
struct Matrix34f {
Matrix34f() {}
/* 8049acd0 */
Matrix34f(f32 xx, f32 xy, f32 xz, f32 xw, f32 yx, f32 yy, f32 yz, f32 yw, f32 zx, f32 zy, f32 zz, f32 zw);
//////////////////////////////////////////////////////////////////////////////
f32 operator()(int i, int j) const {
return m[i][j];
}
@@ -26,71 +25,76 @@ struct Matrix34f {
return arr[i];
}
/* */ void rotateBaseX(Vector3f &, Matrix34f &);
/* */ void rotateVectorChange(Vector3f &, Vector3f &, Matrix34f &);
/* 8049ac70 */ void inverseTo(Matrix34f &to) const;
/* 8049ac80 */ void inverseTransposeTo(Matrix34f &to) const;
/* 8049ac90 */ void makeIdentity();
/* */ void makeSRT(const Vector3f &s, const Vector3f &r, const Vector3f &t);
/* */ void makeRT(const Vector3f &r, const Vector3f &t);
/* */ void makeR(const Vector3f &r);
/* */ void makeST(const Vector3f &s, const Vector3f &t);
/* */ void makeSQT(const Vector3f &s, const Quatf &q, const Vector3f &t);
/* */ void makeSQ(const Vector3f &, const Quatf &);
/* 8049ad20 */ void makeQT(const Quatf &, const Vector3f &);
/* 8049ade0 */ void makeQ(const Quatf &);
/* */ void makeS(const Vector3f &s);
/* */ void makeT(const Vector3f &t);
/* 8049ae90 */ void fromQuat(const Quatf &q);
/* 8049af40 */ void toQuat(Quatf &q) const;
/* 8049b250 */ void slerpTo(const Matrix34f &, Matrix34f &, f32) const;
/* */ void copyTo16(f32 *pf) const;
/* 8049b2d0 */ void setAxisRotation(const Vector3f &, f32);
/* */ Vector3f multVector(const Vector3f &vec) const;
/* 8049b310 */ void loadPosMtx(u32);
/* */ void loadNrmMtx(u32 nrmMtxId);
/* 8049b320 */ void multiplyTo(const Matrix34f &m2, Matrix34f &to) const;
/* */ void dump();
void rotateBaseX(Vector3f &, Matrix34f &);
void rotateVectorChange(Vector3f &, Vector3f &, Matrix34f &);
void inverseTo(Matrix34f &to) const;
void inverseTransposeTo(Matrix34f &to) const;
void makeIdentity();
void makeSRT(const Vector3f &s, const Vector3f &r, const Vector3f &t);
void makeRT(const Vector3f &r, const Vector3f &t);
void makeR(const Vector3f &r);
void makeST(const Vector3f &s, const Vector3f &t);
void makeSQT(const Vector3f &s, const Quatf &q, const Vector3f &t);
void makeSQ(const Vector3f &, const Quatf &);
void makeQT(const Quatf &, const Vector3f &);
void makeQ(const Quatf &);
void makeS(const Vector3f &s);
void makeT(const Vector3f &t);
void fromQuat(const Quatf &q);
void toQuat(Quatf &q) const;
void slerpTo(const Matrix34f &, Matrix34f &, f32) const;
void copyTo16(f32 *pf) const;
void setAxisRotation(const Vector3f &, f32);
Vector3f multVector(const Vector3f &vec) const;
void loadPosMtx(u32);
void loadNrmMtx(u32 nrmMtxId);
void multiplyTo(const Matrix34f &m2, Matrix34f &to) const;
void dump();
//////////////////////////////////////////////////////////////////////////////
public:
void concat(const Matrix34f &, Matrix34f &) const;
void copyFrom(const Matrix34f &other);
void rotate(const Vector3f &rpy) const;
void multVectorTo(const Vector3f &from, Vector3f &to) const;
void transposeTo(Matrix34f &to) const;
void copyFrom(const Matrix34f &other) {
for (int i = 0; i < 12; i++) {
(*this)(i) = other(i);
}
}
void setBase(int idx, const Vector3f &b) {
m[0][idx] = b.x;
m[1][idx] = b.y;
m[2][idx] = b.z;
(*this)(0, idx) = b.x;
(*this)(1, idx) = b.y;
(*this)(2, idx) = b.z;
}
void getBase(int idx, Vector3f &b) const {
b.x = m[0][idx];
b.y = m[1][idx];
b.z = m[2][idx];
b(0) = (*this)(0, idx);
b(1) = (*this)(1, idx);
b(2) = (*this)(2, idx);
}
void setTranslation(const Vector3f &t) {
setBase(3, t);
}
void getTranslation(Vector3f &t) const {
getBase(3, t);
}
void makeZero() {
for (int i = 0; i < 12; i++) {
arr[i] = 0.0f;
}
}
//////////////////////////////////////////////////////////////////////////////
public:
union {
f32 m[3][4];
f32 arr[12];
};
//////////////////////////////////////////////////////////////////////////////
public:
/* 80674c00 */ static Matrix34f ident;
static Matrix34f ident;
};
} // namespace EGG
+1
View File
@@ -2,6 +2,7 @@
#define EGG_QUAT_H
#include "egg/math/eggVector.h"
#include <common.h>
namespace EGG {
+59 -33
View File
@@ -3,75 +3,91 @@
#include "MSL_C/float.h"
#include "egg/math/eggMath.h"
#include <common.h>
#include <nw4r/math.h>
namespace EGG {
struct Vector3f : public nw4r::math::VEC3 {
Vector3f() {} // __ct__Q23EGG8Vector3fFv
Vector3f(f32 fx, f32 fy, f32 fz) : VEC3(fx, fy, fz) {} // __ct__Q23EGG8Vector3fFfff
// __ct__Q23EGG8Vector3fFv
Vector3f() : nw4r::math::VEC3() {}
// __ct__Q23EGG8Vector3fFfff
Vector3f(f32 fx, f32 fy, f32 fz) : VEC3(fx, fy, fz) {}
// ~Vector3f() {}
f32 &operator()(int i) { // __cl__Q23EGG8Vector3fFi
// __cl__Q23EGG8Vector3fFi
f32 &operator()(int i) {
return ((f32 *)this)[i];
}
Vector3f operator*(f32 f) const { // __ml__Q23EGG8Vector3fCFf
// __ml__Q23EGG8Vector3fCFf
Vector3f operator*(f32 f) const {
return Vector3f(x * f, y * f, z * f);
}
friend Vector3f operator*(f32 f, const Vector3f &v) {
return v.operator*(f);
}
Vector3f operator+(const Vector3f &v) { // __pl__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
// __pl__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
Vector3f operator+(const Vector3f &v) {
return Vector3f(x + v.x, y + v.y, z + v.z);
}
Vector3f &operator+=(const Vector3f &v) { // __apl__Q23EGG8Vector3fFRCQ23EGG8Vector3f
// __apl__Q23EGG8Vector3fFRCQ23EGG8Vector3f
Vector3f &operator+=(const Vector3f &v) {
x += v.x;
y += v.y;
z += v.z;
return *this;
}
Vector3f operator-() const { // __mi__Q23EGG8Vector3fCFv
return Vector3f(-1.0f * x, -1.0f * y, -1.0f * z);
// __mi__Q23EGG8Vector3fCFv
Vector3f operator-() const {
f32 z = this->z;
f32 y = this->y;
f32 x = this->x;
return Vector3f(-x, -y, -z);
}
Vector3f operator-(const Vector3f &v) { // __mi__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
// __mi__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
Vector3f operator-(const Vector3f &v) {
return Vector3f(x - v.x, y - v.y, z - v.z);
}
Vector3f &operator-=(const Vector3f &v) { // __ami__Q23EGG8Vector3fFRCQ23EGG8Vector3f
// __ami__Q23EGG8Vector3fFRCQ23EGG8Vector3f
Vector3f &operator-=(const Vector3f &v) {
x -= v.x;
y -= v.y;
z -= v.z;
return *this;
}
Vector3f &operator*=(f32 f) { // __amu__Q23EGG8Vector3fFf
// __amu__Q23EGG8Vector3fFf
Vector3f &operator*=(f32 f) {
multScalar(f);
return *this;
}
Vector3f operator/(f32 f) const { // __dv__Q23EGG8Vector3fCFf
// __dv__Q23EGG8Vector3fCFf
Vector3f operator/(f32 f) const {
return Vector3f(x / f, y / f, z / f);
}
Vector3f &operator/=(f32 f) { // __adv__Q23EGG8Vector3fCFf // assumed
// __adv__Q23EGG8Vector3fCFf // assumed
Vector3f &operator/=(f32 f) {
divScalar(f);
return *this;
}
bool operator!=(const Vector3f &v) { // __ne__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
// __ne__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
bool operator!=(const Vector3f &v) {
return x != v.x || y != v.y || z != v.z;
}
/* 8049bcc0 */ f32 normalise();
/* 8049bd50 */ f32 setLength(const Vector3f &src, f32 len);
/* 8049be10 */ f32 setLength(f32 len);
void multScalar(f32 f) {
x *= f;
y *= f;
@@ -80,11 +96,14 @@ struct Vector3f : public nw4r::math::VEC3 {
void divScalar(f32 f) {
multScalar(1.0f / f);
}
f32 dot(const Vector3f &v) const { // dot__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
// dot__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
f32 dot(const Vector3f &v) const {
return x * v.x + y * v.y + z * v.z;
}
Vector3f cross(const Vector3f &b) const { // cross__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
// cross__Q23EGG8Vector3fCFRCQ23EGG8Vector3f
Vector3f cross(const Vector3f &b) const {
f32 _x = (y * b.z) - (z * b.y);
f32 _y = (z * b.x) - (x * b.z);
f32 _z = (x * b.y) - (y * b.x);
@@ -102,25 +121,32 @@ struct Vector3f : public nw4r::math::VEC3 {
z = fz;
}
/* 80674c30 */ static const Vector3f zero;
/* 80674c3c */ static const Vector3f ex;
/* 80674c48 */ static const Vector3f ey;
/* 80674c54 */ static const Vector3f ez;
f32 normalise();
f32 setLength(const Vector3f &src, f32 len);
f32 setLength(f32 len);
static const Vector3f zero;
static const Vector3f ex;
static const Vector3f ey;
static const Vector3f ez;
};
struct Vector2f : nw4r::math::VEC2 {
inline Vector2f() {}
Vector2f() {}
Vector2f(f32 fx, f32 fy) : VEC2(fx, fy) {}
inline ~Vector2f() {}
~Vector2f() {}
public:
/* 805767c0 */ static const Vector2f zero;
/* 805767c8 */ static const Vector2f ex;
/* 805767d0 */ static const Vector2f ey;
static const Vector2f zero;
static const Vector2f ex;
static const Vector2f ey;
Vector2f operator-(const Vector2f &v) {
return Vector2f(x - v.x, y - v.y);
}
f32 squaredLength() const {
return (x * x + y * y);
}
};
struct Vector3s {
@@ -133,10 +159,10 @@ public:
y = sy;
z = sz;
}
/* 805767d8 */ static const Vector3s zero;
/* 805767e0 */ static const Vector3s ex;
/* 805767e8 */ static const Vector3s ey;
/* 805767f0 */ static const Vector3s ez;
static const Vector3s zero;
static const Vector3s ex;
static const Vector3s ey;
static const Vector3s ez;
};
} // namespace EGG
+9 -9
View File
@@ -11,15 +11,15 @@ namespace Assert {
typedef void (*AssertCallback)();
/* 8049bf90 */ void wait(u32 time);
/* 8049c010 */ void system_vreport(const char *str, va_list list);
/* 8049c010 */ void system_report(const char *str, ...);
/* 8049c0a0 */ s32 getPeriodPos(const char *);
/* 8049c100 */ char *getMapSymbol();
/* 8049c150 */ bool isOutsideMEM1(u32 addr);
/* 8049c180 */ AssertCallback setAssertCallback(AssertCallback cb);
/* 8049c190 */ void system_halt(const char *file, u32 line, const char *msg, va_list list);
/* 8049c530 */ void assert(const char *file, u32 line, const char *msg, ...);
void wait(u32 time);
void system_vreport(const char *str, va_list list);
void system_report(const char *str, ...);
s32 getPeriodPos(const char *);
char *getMapSymbol();
bool isOutsideMEM1(u32 addr);
AssertCallback setAssertCallback(AssertCallback cb);
void system_halt(const char *file, u32 line, const char *msg, va_list list);
void assert(const char *file, u32 line, const char *msg, ...);
} // namespace Assert
+2
View File
@@ -1,6 +1,8 @@
#ifndef EGG_BINARY_H
#define EGG_BINARY_H
#include <common.h>
template <class T>
class IBinary {
public:
+16 -16
View File
@@ -11,53 +11,53 @@ template <typename T>
class TBitFlag {
public:
T value;
inline void makeAllZero() {
void makeAllZero() {
value = T();
}
inline TBitFlag() {}
inline TBitFlag(T value): value(value) {}
inline T makeMask(u8 bit) const {
TBitFlag() {}
TBitFlag(T value) : value(value) {}
T makeMask(u8 bit) const {
return 1 << bit;
}
inline bool on(T mask) const {
return value & mask;
bool on(T mask) const {
return (value & mask);
}
inline bool off(T mask) const {
bool off(T mask) const {
return !(value & mask);
}
inline void set(T mask) {
void set(T mask) {
value |= mask;
}
inline void reset(T mask) {
void reset(T mask) {
value &= ~mask;
}
inline bool onBit(u8 bit) const {
bool onBit(u8 bit) const {
return on(makeMask(bit));
}
inline bool offBit(u8 bit) const {
bool offBit(u8 bit) const {
return off(makeMask(bit));
}
inline void setBit(u8 bit) {
void setBit(u8 bit) {
set(makeMask(bit));
}
inline void resetBit(u8 bit) {
void resetBit(u8 bit) {
reset(makeMask(bit));
}
inline void toggleBit(u8 bit) {
void toggleBit(u8 bit) {
if (!onBit(bit)) {
setBit(bit);
} else {
resetBit(bit);
}
}
inline void changeBit(u8 bit, bool b) {
void changeBit(u8 bit, bool b) {
if (b) {
setBit(bit);
} else {
resetBit(bit);
}
}
inline T getDirect() {
T getDirect() const {
return value;
}
};
+20 -13
View File
@@ -2,6 +2,7 @@
#define EGG_BUFFER_H
#include "egg/core/eggHeap.h"
#include <common.h>
namespace EGG {
@@ -16,19 +17,8 @@ public:
mBuffer = nullptr;
}
}
/* vt 0x0C */ virtual void allocate(int n, int) {
mSize = n;
mBuffer = new T[n];
onAllocate(nullptr);
}
/* vt 0x10 */ virtual void allocate(int n, Heap *heap, int) {
mSize = n;
if (heap == nullptr) {
heap = Heap::sCurrentHeap;
}
mBuffer = new (heap, 4) T[mSize];
onAllocate(heap);
}
/* vt 0x0C */ virtual void allocate(int n, int);
/* vt 0x10 */ virtual void allocate(int n, Heap *heap, int);
/* vt 0x14 */ virtual void onAllocate(Heap *) {
return;
}
@@ -60,6 +50,23 @@ public:
}
};
template <typename T>
void TBuffer<T>::allocate(int n, int) {
mSize = n;
mBuffer = new T[n];
onAllocate(nullptr);
}
template <typename T>
void TBuffer<T>::allocate(int n, Heap *heap, int) {
mSize = n;
if (heap == nullptr) {
heap = Heap::sCurrentHeap;
}
mBuffer = new (heap, 4) T[mSize];
onAllocate(heap);
}
} // namespace EGG
#endif
+6
View File
@@ -0,0 +1,6 @@
#ifndef EGG_EXCEPTION_H
#define EGG_EXCEPTION_H
namespace EGG {} // namespace EGG
#endif
+5 -13
View File
@@ -2,8 +2,8 @@
#define M_DVD_H
#include <egg/core/eggArchive.h>
#include <egg/core/eggDecomp.h>
#include <egg/core/eggHeap.h>
#include <egg/core/eggStreamDecomp.h>
#include <egg/core/eggThread.h>
#include <m/m_heap.h>
@@ -19,9 +19,7 @@ class TUncompressInfo_Base_c {
public:
TUncompressInfo_Base_c(u8 type, const char *extension) : mType(type), mExtension(extension) {}
virtual ~TUncompressInfo_Base_c() {}
virtual EGG::StreamDecomp *Construct() const {
return nullptr;
}
virtual EGG::StreamDecomp *Construct() const { return nullptr; }
virtual void Destruct() const {}
u8 mType;
@@ -32,9 +30,7 @@ template <typename T>
class TUncompressInfo_c : public TUncompressInfo_Base_c {
public:
TUncompressInfo_c(u8 type, const char *extension) : TUncompressInfo_Base_c(type, extension) {}
virtual T *Construct() const {
return new (somePtr) T();
}
virtual T *Construct() const { return new (somePtr) T(); }
virtual void Destruct() const {}
};
@@ -172,13 +168,9 @@ public:
virtual void *run() override;
OSThread *getMyOsThread() {
return mOSThread;
}
OSThread *getMyOsThread() { return mOSThread; }
void setThreadHeap(EGG::Heap *heap) {
setThreadCurrentHeap(heap);
}
void setThreadHeap(EGG::Heap *heap) { setThreadCurrentHeap(heap); }
static void *run(mDvd_param_c *dvd);
};
+17 -10
View File
@@ -9,6 +9,14 @@
extern "C" {
#endif
enum CXReadResult {
CX_READ_ERR_4 = -4,
CX_READ_ERR_3 = -3,
CX_READ_ERR_2 = -2,
CX_READ_ERR_1 = -1,
CX_READ_OK = 0,
};
typedef struct CXUncompContextLZ {
u8 _[0x18];
} CXUncompContextLZ;
@@ -40,19 +48,18 @@ typedef struct CXUncompContextLRC {
u8 _[0x902C];
} CXUncompContextLRC;
// TODO(Zeldex) : Fix Params
/* 803cee90 */ void CXInitUncompContextRL();
/* 803ceec0 */ void CXInitUncompContextLZ();
/* 803cef00 */ void CXReadUncompRL();
/* 803cf1b0 */ void CXReadUncompLZ();
/* 803cf570 */ void CXInitUncompContextLH();
/* 803cf5b0 */ void CXReadUncompLH();
/* 803cee90 */ void CXInitUncompContextRL(CXUncompContextRL *);
/* 803ceec0 */ void CXInitUncompContextLZ(CXUncompContextLZ *);
/* 803cef00 */ s32 CXReadUncompRL(CXUncompContextRL *, const void *, u32);
/* 803cf1b0 */ s32 CXReadUncompLZ(CXUncompContextLZ *, const void *, u32);
/* 803cf570 */ void CXInitUncompContextLH(CXUncompContextLH *);
/* 803cf5b0 */ s32 CXReadUncompLH(CXUncompContextLH *, const void *, u32);
/* 803cfda0 */ void RCAddCount_();
/* 803cff90 */ void RCSearch_();
/* 803d0030 */ void RCGetData_();
/* 803d0140 */ void CXInitUncompContextLRC();
/* 803d0390 */ void CXReadUncompLRC();
/* 803d0790 */ void CXGetUncompressedSize();
/* 803d0140 */ void CXInitUncompContextLRC(CXUncompContextLRC *);
/* 803d0390 */ s32 CXReadUncompLRC(CXUncompContextLRC *, const void *, u32);
/* 803d0790 */ u32 CXGetUncompressedSize(const void *);
/* 803d07d0 */ void CXUncompressLZ();
/* 803d0920 */ void CXiLHVerifyTable();
+12
View File
@@ -0,0 +1,12 @@
#ifndef RVL_SDK_PUBLIC_KPAD_H
#define RVL_SDK_PUBLIC_KPAD_H
#ifdef __cplusplus
extern "C" {
#endif
#include <rvl/KPAD/KPAD.h>
#ifdef __cplusplus
}
#endif
#endif
+14
View File
@@ -6,8 +6,22 @@ extern "C" {
#endif
typedef struct {
// TODO
} KPADStatus;
typedef void (*KPADConnectCallback)(s32, s32);
// TODO: Create Proper Headers
void KPADInitEx(void * /* UNKTYPE */, u32);
s32 KPADReadEx(s32 chan, UNKTYPE *status, s32, s32 *);
void KPADSetConnectCallback(u32, KPADConnectCallback);
void KPADSetPosParam(u32, f32, f32);
void KPADSetHoriParam(u32, f32, f32);
void KPADSetDistParam(u32, f32, f32);
void KPADSetAccParam(u32, f32, f32);
#ifdef __cplusplus
}
#endif
+9 -6
View File
@@ -6,6 +6,9 @@
extern "C" {
#endif
typedef s64 OSTime;
typedef u32 OSTick;
// Time base frequency = 1/4 bus clock
#define OS_TIME_SPEED (OS_BUS_CLOCK_SPEED / 4)
@@ -34,14 +37,14 @@ typedef struct OSCalendarTime {
s32 usec; // at 0x24
} OSCalendarTime;
s64 OSGetTime(void);
s32 OSGetTick(void);
OSTime OSGetTime(void);
OSTick OSGetTick(void);
s64 __OSGetSystemTime(void);
s64 __OSTimeToSystemTime(s64 time);
OSTime __OSGetSystemTime(void);
OSTime __OSTimeToSystemTime(OSTime time);
void OSTicksToCalendarTime(s64 time, OSCalendarTime *cal);
s64 OSCalendarTimeToTicks(const OSCalendarTime *cal);
void OSTicksToCalendarTime(OSTime time, OSCalendarTime *cal);
OSTime OSCalendarTimeToTicks(const OSCalendarTime *cal);
#ifdef __cplusplus
}
+3
View File
@@ -5,6 +5,9 @@
extern "C" {
#endif
typedef struct {
} PADStatus;
extern u32 __PADSpec;
BOOL __PADDisableRecalibration(BOOL);
+1
View File
@@ -5,6 +5,7 @@ extern "C" {
#endif
#include <rvl/WPAD/WPAD.h>
#include <rvl/WPAD/WPADMem.h>
#ifdef __cplusplus
}
+611 -28
View File
@@ -1,44 +1,627 @@
#ifndef REVOSDK_WPAD_H
#define REVOSDK_WPAD_H
#ifndef RVL_SDK_WPAD_H
#define RVL_SDK_WPAD_H
// From
// https://github.com/muff1n1634/wpad_11dec2009/blob/3c3aa5416d15ccc5867517d9ed4aaf6d25a70e9c/include/revolution/WPAD/WPAD.h
#include <common.h>
#include <rvl/SC/scsystem.h>
#include <rvl/WPAD/WUD.h>
/*******************************************************************************
* macros
*/
#define WPAD_MAX_DPD_OBJECTS 4
#define WPAD_MIN_DPD_SENS 1
#define WPAD_MAX_DPD_SENS 5
/*******************************************************************************
* types
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*WPADCallback)(s32 chan, s32 result);
// for ease of use in ternaries
typedef s32 WPADResult;
enum WPADResult_et {
WPAD_ERR_OK = 0,
typedef enum { WPAD_CHAN_0, WPAD_CHAN_1, WPAD_CHAN_2, WPAD_CHAN_3, WPAD_MAX_CONTROLLERS } WPADChan;
WPAD_ERR_NO_CONTROLLER = -1, /* name known from asserts */
WPAD_ERR_COMMUNICATION_ERROR = -2, // [RT3P54] has this as WPAD_ERR_BUSY
WPAD_ERR_3 = -3, // [RT3P54] has this as WPAD_ERR_TRANSFER
WPAD_ERR_INVALID = -4, /* name comes from [R89JEL] */
// WPAD_ERR_5 = -5, /* unknown */
// WPAD_ERR_6 = -6, /* unknown */
WPAD_ERR_CORRUPTED = -7, /* name comes from [R89JEL] */
typedef enum {
WPAD_RESULT_ERR_3 = -3,
WPAD_RESULT_ERR_2,
WPAD_RESULT_ERR_1,
#define WPAD_ESUCCESS WPAD_ERR_OK
#define WPAD_ENODEV WPAD_ERR_NO_CONTROLLER
#define WPAD_ECOMM WPAD_ERR_COMMUNICATION_ERROR
// #define WPAD_E3
#define WPAD_EINVAL WPAD_ERR_INVALID
WPAD_RESULT_SUCCESS = 0,
} WPADResult;
/* maybe? i was scouring the internet for explanation and usage of this error
* macro, and it seems close enough
*
* it's not ENODATA, that's more like if you got no data, but here it's that we
* did get the data but it wasn't good
*/
#define WPAD_EBADE WPAD_ERR_CORRUPTED
// apparently enum vs literal is a thing. cool
#define WPAD_CESUCCESS (WPAD_ESUCCESS + 0)
#define WPAD_CENODEV (WPAD_ENODEV + 0)
#define WPAD_CECOMM (WPAD_ECOMM + 0)
#define WPAD_CERR_3 (WPAD_ERR_3 + 0)
#define WPAD_CEINVAL (WPAD_EINVAL + 0)
#define WPAD_CEBADE (WPAD_EBADE + 0)
};
typedef struct {
u32 field_0x00;
u32 field_0x04;
u32 field_0x08;
u32 field_0x0C;
u32 field_0x10;
bool field_0x14;
bool field_0x15;
bool field_0x16;
bool field_0x17;
} WPADInfo;
typedef WUDLibStatus WPADLibStatus;
enum WPADLibStatus_et {
WPAD_LIB_STATUS_0 = WUD_LIB_STATUS_0,
WPAD_LIB_STATUS_1 = WUD_LIB_STATUS_1,
WPAD_LIB_STATUS_2 = WUD_LIB_STATUS_2,
WPAD_LIB_STATUS_3 = WUD_LIB_STATUS_3,
WPAD_LIB_STATUS_4 = WUD_LIB_STATUS_4,
};
UNKTYPE WPADControlSpeaker(s32, UNKWORD, WPADCallback);
BOOL WPADCanSendStreamData(s32);
UNKWORD WPADSendStreamData(s32, UNKTYPE *, UNKWORD);
// for ease of use in for loops
typedef s32 WPADChannel;
enum WPADChannel_et {
WPAD_CHAN0,
WPAD_CHAN1,
WPAD_CHAN2,
WPAD_CHAN3, /* name known from asserts */
s32 WPADProbe(s32 chan, u32 *type);
s32 WPADReadFaceData(s32 chan, void *dst, u32 size, u32 src, WPADCallback cb);
s32 WPADGetInfoAsync(s32 chan, WPADInfo *dst, WPADCallback cb);
WPAD_MAX_CONTROLLERS, /* name known from asserts */
WPAD_CHAN_INVALID = -1,
};
typedef s32 WPADDeviceType;
enum WPADDeviceType_et {
WPAD_DEV_CORE = 0,
WPAD_DEV_FS = 1,
WPAD_DEV_CLASSIC = 2, /* name known from asserts, but not value */
WPAD_DEV_BALANCE_CHECKER = 3,
WPAD_DEV_VSM = 4,
WPAD_DEV_MOTION_PLUS = 5,
WPAD_DEV_MPLS_PT_FS = 6,
WPAD_DEV_MPLS_PT_CLASSIC = 7,
WPAD_DEV_TRAIN = 16,
WPAD_DEV_GUITAR = 17,
WPAD_DEV_DRUM = 18,
WPAD_DEV_TAIKO = 19,
WPAD_DEV_TURNTABLE = 20,
// seems to be like maybe general purpose non-specific device types
// maybe this was for testing or something? idk
WPAD_DEV_BULK_1 = 21,
WPAD_DEV_BULK_2 = 22,
WPAD_DEV_BULK_3 = 23,
WPAD_DEV_BULK_4 = 24,
WPAD_DEV_BULK_5 = 25,
WPAD_DEV_BULK_6 = 26,
WPAD_DEV_BULK_7 = 27,
WPAD_DEV_BULK_8 = 28,
WPAD_DEV_MPLS_PT_UNKNOWN = 250,
WPAD_DEV_251 = 251,
WPAD_DEV_252 = 252, // invalid device mode?
WPAD_DEV_NONE =
253, // sort of like WPAD_ENODEV (see __wpadAbortInitExtension in WPADHIDParser.c)
// WPAD_DEV_254 = 254, /* unknown, doesn't seem to be used anywhere */
WPAD_DEV_INITIALIZING = 255, // see __a1_20_status_report
};
typedef u32 WPADDataFormat;
enum WPADDataFormat_et {
// see WPADiSendSetReportType and __wpadFmt2Size
WPAD_FMT_CORE_BTN = 0,
WPAD_FMT_CORE_BTN_ACC = 1,
WPAD_FMT_CORE_BTN_ACC_DPD = 2,
WPAD_FMT_FS_BTN = 3,
WPAD_FMT_FS_BTN_ACC = 4,
WPAD_FMT_FS_BTN_ACC_DPD = 5,
WPAD_FMT_CLASSIC_BTN = 6,
WPAD_FMT_CLASSIC_BTN_ACC = 7,
WPAD_FMT_CLASSIC_BTN_ACC_DPD = 8,
WPAD_FMT_BTN_ACC_DPD_EXTENDED = 9,
// extensions
WPAD_FMT_TRAIN = 10, /* name known from asserts */
WPAD_FMT_GUITAR = 11, /* name known from asserts */
WPAD_FMT_BALANCE_CHECKER = 12, /* name known from asserts */
WPAD_FMT_VSM = 13, /* name known from asserts */
// WPAD_FMT_14 = 14, /* unknown */
WPAD_FMT_DRUM = 15, /* name known from asserts */
WPAD_FMT_MOTION_PLUS = 16, // see __wpadFmt2Size
WPAD_FMT_TAIKO = 17, /* name known from asserts */
WPAD_FMT_TURNTABLE = 18, /* name known from asserts */
WPAD_FMT_BULK = 19, /* name known from asserts */
};
typedef s32 WPADDeviceMode;
enum WPADDeviceMode_et {
WPAD_DEV_MODE_NORMAL = 0,
WPAD_DEV_MODE_CLASSIC_REDUCED = 1,
WPAD_DEV_MODE_CLASSIC_EXTENDED = 2,
WPAD_DEV_MODE_CLASSIC_STANDARD = 3,
WPAD_DEV_MODE_MPLS_PT_MAIN = 4,
WPAD_DEV_MODE_MPLS_PT_FS = 5,
// WPAD_DEV_MODE_6 = 6, /* unknown */
WPAD_DEV_MODE_MPLS_PT_CLASSIC = 7,
};
// names from wiiuse/wpad.h
typedef u16 WPADButton;
enum WPADButton_et {
// H..-AB12 ...+^v><
/* NOTE: the bytes from the report are swapped when being placed into this
* format (see MAKE_BUTTON in WPADHIDParser.c)
*/
WPAD_BUTTON_LEFT = (1 << 0),
WPAD_BUTTON_RIGHT = (1 << 1),
WPAD_BUTTON_DOWN = (1 << 2),
WPAD_BUTTON_UP = (1 << 3),
WPAD_BUTTON_PLUS = (1 << 4),
// (1 << 5),
// (1 << 6),
// (1 << 7),
WPAD_BUTTON_2 = (1 << 8),
WPAD_BUTTON_1 = (1 << 9),
WPAD_BUTTON_B = (1 << 10),
WPAD_BUTTON_A = (1 << 11),
WPAD_BUTTON_MINUS = (1 << 12),
// (1 << 13), // WPAD_BUTTON_FS_Z
// (1 << 14), // WPAD_BUTTON_FS_C
WPAD_BUTTON_HOME = (1 << 15),
WPAD_BUTTON_ALL = 0x9f1f
};
// names from wiiuse/wpad.h
typedef u16 WPADExtButton;
enum WPADExtButton_et {
// Nunchuk (fight stick?)
// .CZ..... ........
/* NOTE: these bits are actually in the normal button variable, but are
* enumerated here because they are buttons for an extension
*/
WPAD_BUTTON_FS_Z = (1 << 13),
WPAD_BUTTON_FS_C = (1 << 14),
WPAD_BUTTON_FS_ALL = 0x6000,
// Classic Controller
// >vL-H+R. lBYAXr<^
WPAD_BUTTON_CL_UP = (1 << 0),
WPAD_BUTTON_CL_LEFT = (1 << 1),
WPAD_BUTTON_CL_ZR = (1 << 2),
WPAD_BUTTON_CL_X = (1 << 3),
WPAD_BUTTON_CL_A = (1 << 4),
WPAD_BUTTON_CL_Y = (1 << 5),
WPAD_BUTTON_CL_B = (1 << 6),
WPAD_BUTTON_CL_ZL = (1 << 7),
// (1 << 8),
WPAD_BUTTON_CL_FULL_R = (1 << 9),
WPAD_BUTTON_CL_PLUS = (1 << 10),
WPAD_BUTTON_CL_HOME = (1 << 11),
WPAD_BUTTON_CL_MINUS = (1 << 12),
WPAD_BUTTON_CL_FULL_L = (1 << 13),
WPAD_BUTTON_CL_DOWN = (1 << 14),
WPAD_BUTTON_CL_RIGHT = (1 << 15),
WPAD_BUTTON_CL_ALL = 0xfeff,
// Shinkansen train controller
// shares the same format as the Classic Controller
// (see WPADiExcludeButton)
WPAD_BUTTON_TR_UP = WPAD_BUTTON_CL_UP,
WPAD_BUTTON_TR_LEFT = WPAD_BUTTON_CL_LEFT,
WPAD_BUTTON_TR_ZR = WPAD_BUTTON_CL_ZR,
WPAD_BUTTON_TR_X = WPAD_BUTTON_CL_X,
WPAD_BUTTON_TR_A = WPAD_BUTTON_CL_A,
WPAD_BUTTON_TR_Y = WPAD_BUTTON_CL_Y,
WPAD_BUTTON_TR_B = WPAD_BUTTON_CL_B,
WPAD_BUTTON_TR_ZL = WPAD_BUTTON_CL_ZL,
// = WPAD_BUTTON_CL_8,
WPAD_BUTTON_TR_FULL_R = WPAD_BUTTON_CL_FULL_R,
WPAD_BUTTON_TR_PLUS = WPAD_BUTTON_CL_PLUS,
WPAD_BUTTON_TR_HOME = WPAD_BUTTON_CL_HOME,
WPAD_BUTTON_TR_MINUS = WPAD_BUTTON_CL_MINUS,
WPAD_BUTTON_TR_FULL_L = WPAD_BUTTON_CL_FULL_L,
WPAD_BUTTON_TR_DOWN = WPAD_BUTTON_CL_DOWN,
WPAD_BUTTON_TR_RIGHT = WPAD_BUTTON_CL_RIGHT,
WPAD_BUTTON_TR_ALL = WPAD_BUTTON_CL_ALL,
};
// WPADControlMotor
typedef u32 WPADMotorCommand;
enum WPADMotorCommand_et {
WPAD_MOTOR_STOP = 0, /* name known from asserts */
WPAD_MOTOR_RUMBLE = 1, /* name known from asserts */
};
// WPADControlSpeaker
typedef u32 WPADSpeakerCommand;
enum WPADSpeakerCommand_et {
WPAD_SPEAKER_DISABLE = 0,
WPAD_SPEAKER_ENABLE = 1, // might be ON? see HBMRemoteSpk.cpp
WPAD_SPEAKER_MUTE = 2,
WPAD_SPEAKER_UNMUTE = 3,
WPAD_SPEAKER_PLAY = 4, // figured out from HBM usage
// does the same thing as ENABLE? unless i'm missing something
// not used so i don't know the context
WPAD_SPEAKER_CMD_05 = 5,
};
// WPADControlDpd
typedef u32 WPADDpdCommand;
enum WPADDpdCommand_et {
WPAD_DPD_DISABLE = 0x00,
// the command here is actually the data format
WPAD_DPD_BASIC = 0x01,
WPAD_DPD_STANDARD = 0x03,
WPAD_DPD_EXTENDED = 0x05,
};
// WPADControlBLC
typedef u8 WPADBLCCommand;
enum WPADBLCCommand_et {
WPAD_BLC_DISABLE = 0x00,
WPAD_BLC_CMD_55 = 0x55,
/* NOTE: maybe? the code on this case in WPADControlBLC seems to follow what
* WiiBrew describes as the initialization sequence after the generic one
* (https://wiibrew.org/wiki/Wii_Balance_Board#Wii_Initialisation_Sequence).
*/
WPAD_BLC_ENABLE = 0xaa,
};
// WPADMPStatus::stat
typedef u8 WPADMPStatusFlags;
enum WPADMPStatusFlags_et {
WPAD_MPLS_STATUS_DATA_VALID = (1 << 7),
WPAD_MPLS_STATUS_EXTENSION_DATA_VALID = (1 << 6),
WPAD_MPLS_STATUS_YAW_SLOW_MODE = (1 << 3),
WPAD_MPLS_STATUS_PITCH_SLOW_MODE = (1 << 2),
WPAD_MPLS_STATUS_ROLL_SLOW_MODE = (1 << 1),
WPAD_MPLS_STATUS_EXTENSION_CONNECTED = (1 << 0), // just that it's present; not that it's actually being used
};
// WPADGetAccGravityUnit
typedef u32 WPADAccGravityUnitType;
enum WPADAccGravityUnitType_et {
WPAD_ACC_GRAVITY_UNIT_CORE,
WPAD_ACC_GRAVITY_UNIT_FS,
};
typedef WUDAllocFunc WPADAllocFunc;
typedef WUDFreeFunc WPADFreeFunc;
typedef void WPADInitFunc(void); // see __wpadInitSub in WPAD.c
typedef void WPADCallback(WPADChannel chan, WPADResult result);
typedef void WPADSamplingCallback(WPADChannel chan);
typedef void WPADConnectCallback(WPADChannel chan, s32 result);
typedef void WPADExtensionCallback(WPADChannel chan, WPADDeviceType devType);
typedef WUDSyncDeviceCallback WPADSimpleSyncCallback;
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x79f49
typedef struct DPDObject {
s16 x; // size 0x02, offset 0x00
s16 y; // size 0x02, offset 0x02
u16 size; // size 0x02, offset 0x04
u8 traceId; // size 0x01, offset 0x06
// 1 byte padding
} DPDObject; // size 0x08
// TODO: get a specific source (name, game id)
// TODO: check library version of game that has this
// dwarfv1_megadump.txt:21551-21559
typedef struct DPDObjEx {
s16 range_x1; // size 0x02, offset 0x00
s16 range_y1; // size 0x02, offset 0x02
s16 range_x2; // size 0x02, offset 0x04
s16 range_y2; // size 0x02, offset 0x06
u16 pixel; // size 0x02, offset 0x08
s8 radius; // size 0x01, offset 0x0a
// 1 byte padding
} DPDObjEx; // size 0x0c
// [SPQE7T]/ISpyD.elf:.debug_info::0xd675b
typedef struct WPADInfo {
BOOL dpd; // size 0x04, offset 0x00
BOOL speaker; // size 0x04, offset 0x04
BOOL attach; // size 0x04, offset 0x08
BOOL lowBat; // size 0x04, offset 0x0c
BOOL nearempty; // size 0x04, offset 0x10
u8 battery; // size 0x01, offset 0x14
u8 led; // size 0x01, offset 0x15
u8 protocol; // size 0x01, offset 0x16
u8 firmware; // size 0x01, offset 0x17
} WPADInfo; // size 0x18
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7ab19
typedef struct WPADStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
} WPADStatus; // size 0x2a
/* The following take their initial members from WPADStatus instead of including
* an instance of it. For ease of use?
*/
// TODO: get a specific source (name, game id)
// TODO: check library version of game that has this
// dwarfv1_megadump.txt:21560-21570
typedef struct WPADStatusEx {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
DPDObjEx exp[WPAD_MAX_DPD_OBJECTS]; // size 0x30, offset 0x2a
} WPADStatusEx; // size 0x5a
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x79e65
typedef struct WPADFSStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
s16 fsAccX; // size 0x02, offset 0x2a
s16 fsAccY; // size 0x02, offset 0x2c
s16 fsAccZ; // size 0x02, offset 0x2e
s8 fsStickX; // size 0x01, offset 0x30
s8 fsStickY; // size 0x01, offset 0x31
} WPADFSStatus; // size 0x32
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7aba2
typedef struct WPADCLStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
WPADExtButton clButton; // size 0x02, offset 0x2a
s16 clLStickX; // size 0x02, offset 0x2c
s16 clLStickY; // size 0x02, offset 0x2e
s16 clRStickX; // size 0x02, offset 0x30
s16 clRStickY; // size 0x02, offset 0x32
u8 clTriggerL; // size 0x01, offset 0x34
u8 clTriggerR; // size 0x01, offset 0x35
} WPADCLStatus; // size 0x36
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7acba
typedef struct WPADTRStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
WPADExtButton trButton; // size 0x02, offset 0x2a
u8 brake; // size 0x01, offset 0x2c
u8 mascon; // size 0x01, offset 0x2d
} WPADTRStatus; // size 0x2e
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7ad79
typedef struct WPADBLStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
u16 press[4]; // size 0x08, offset 0x2a
s8 temp; // size 0x01, offset 0x32
u8 battery; // size 0x01, offset 0x33
} WPADBLStatus; // size 0x34
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7ae44
typedef struct WPADMPStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7af2c
union /* explicitly untagged */
{
// Takes its members from WPADFSStatus
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7af54
struct /* explicitly untagged */
{
s16 fsAccX; // size 0x02, offset 0x00
s16 fsAccY; // size 0x02, offset 0x02
s16 fsAccZ; // size 0x02, offset 0x04
s8 fsStickX; // size 0x01, offset 0x06
s8 fsStickY; // size 0x01, offset 0x07
} fs; // size 0x08
// Takes its members from WPADCLStatus
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7afbb
struct /* explicitly untagged */
{
WPADExtButton clButton; // size 0x02, offset 0x00
s16 clLStickX; // size 0x02, offset 0x02
s16 clLStickY; // size 0x02, offset 0x04
s16 clRStickX; // size 0x02, offset 0x06
s16 clRStickY; // size 0x02, offset 0x08
u8 clTriggerL; // size 0x01, offset 0x0a
u8 clTriggerR; // size 0x01, offset 0x0b
} cl; // size 0x0c
} ext; // size 0x0c, offset 0x2a
WPADMPStatusFlags stat; // size 0x01, offset 0x36
u8 reserved; // size 0x01, offset 0x37
s16 pitch; // size 0x02, offset 0x38
s16 yaw; // size 0x02, offset 0x3a
s16 roll; // size 0x02, offset 0x3c
} WPADMPStatus; // size 0x3e
// [SGLEA4]/GormitiDebug.elf:.debug_info::0x7b056
typedef struct WPADBKStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
byte_t bulk[21]; // size 0x15, offset 0x2a
byte_t padding[1]; // size 0x01, offset 0x3f
} WPADBKStatus; // size 0x40
typedef struct WPADVSStatus {
WPADButton button; // size 0x02, offset 0x00
s16 accX; // size 0x02, offset 0x02
s16 accY; // size 0x02, offset 0x04
s16 accZ; // size 0x02, offset 0x06
DPDObject obj[WPAD_MAX_DPD_OBJECTS]; // size 0x20, offset 0x08
u8 dev; // size 0x01, offset 0x28
s8 err; // size 0x01, offset 0x29
u16 at_0x2a[5]; // size 0x0a, offset 0x2a
u8 at_0x34; // size 0x02, offset 0x34
// 1 byte padding (alignment? probably)
u16 at_0x36[5]; // size 0x0a, offset 0x36
u8 at_0x40; // size 0x02, offset 0x40
// 1 byte padding (alignment? probably)
u16 at_0x42; // size 0x02, offset 0x42
u8 at_0x44; // size 0x01, offset 0x44
// 1 byte padding (alignment? probably)
} WPADVSStatus; // size 0x46 (see __wpadFmt2Size)
typedef struct WPADAccGravityUnit {
// probably maybe
s16 x; // size 0x02, offset 0x00
s16 y; // size 0x02, offset 0x02
s16 z; // size 0x02, offset 0x04
} WPADAccGravityUnit; // size 0x06
/*******************************************************************************
* functions
*/
BOOL WPADIsEnabledVSM(void);
BOOL WPADIsEnabledTRN(void);
BOOL WPADIsEnabledGTR(void);
BOOL WPADIsEnabledDRM(void);
BOOL WPADIsEnabledTKO(void);
BOOL WPADIsEnabledTBL(void);
BOOL WPADIsEnabledBLK(void);
// Likely overridden by a WBC-specific library
__attribute__((weak)) WPADResult WBCSetupCalibration(void);
__attribute__((weak)) signed WBCGetCalibrationStatus(void);
__attribute__((weak)) signed WBCGetBatteryLevel(u8);
__attribute__((weak)) WPADResult WBCRead(WPADBLStatus *, f64 *, int);
__attribute__((weak)) WPADResult WBCSetZEROPoint(f64 *, int);
__attribute__((weak)) WPADResult WBCGetTGCWeight(f64, f64 *, WPADBLStatus *);
void WPADInit(void);
void WPADShutdown(void);
BOOL WPADStartFastSimpleSync(void);
BOOL WPADStopSimpleSync(void);
BOOL WPADCancelSyncDevice(void);
WPADSimpleSyncCallback *WPADSetSimpleSyncCallback(WPADSimpleSyncCallback *cb);
void WPADRegisterAllocator(WPADAllocFunc *alloc, WPADFreeFunc *free);
WPADLibStatus WPADGetStatus(void);
u8 WPADGetRadioSensitivity(WPADChannel chan);
void WPADGetAddress(WPADChannel chan, BD_ADDR_PTR addr);
u8 WPADGetSensorBarPosition(void);
void WPADGetAccGravityUnit(WPADChannel chan, WPADAccGravityUnitType type, WPADAccGravityUnit *acc);
void WPADDisconnect(WPADChannel chan);
WPADResult WPADProbe(WPADChannel chan, WPADDeviceType *devTypeOut);
WPADSamplingCallback *WPADSetSamplingCallback(WPADChannel chan, WPADSamplingCallback *cb);
WPADConnectCallback *WPADSetConnectCallback(WPADChannel chan, WPADConnectCallback *cb);
WPADExtensionCallback *WPADSetExtensionCallback(WPADChannel chan, WPADExtensionCallback *cb);
WPADDataFormat WPADGetDataFormat(WPADChannel chan);
WPADResult WPADSetDataFormat(WPADChannel chan, WPADDataFormat fmt);
WPADResult WPADGetInfoAsync(WPADChannel chan, WPADInfo *info, WPADCallback *cb);
void WPADControlMotor(WPADChannel chan, WPADMotorCommand command);
void WPADEnableMotor(BOOL enabled);
BOOL WPADIsMotorEnabled(void);
WPADResult WPADControlLed(WPADChannel chan, u8 ledFlags, WPADCallback cb);
BOOL WPADSaveConfig(SCFlushCallback *cb);
/* NOTE: status should match the WPADStatus type for the channel; a check
* against the currently assigned device type is made to know how much to copy
*
* for example, if devType[chan] == WPAD_DEV_CLASSIC, status should be a
* pointer to WPADCLStatus cast to a pointer to WPADStatus
*/
void WPADRead(WPADChannel chan, WPADStatus *status);
void WPADSetAutoSamplingBuf(WPADChannel chan, void *buf, u32 length);
BOOL WPADIsSpeakerEnabled(WPADChannel chan);
WPADResult WPADControlSpeaker(WPADChannel chan, WPADSpeakerCommand command, WPADCallback *cb);
u8 WPADGetSpeakerVolume(void);
void WPADSetSpeakerVolume(u8 vol);
BOOL WPADCanSendStreamData(WPADChannel chan);
WPADResult WPADSendStreamData(WPADChannel chan, void *p_buf, u16 len);
u8 WPADGetDpdSensitivity(void);
BOOL WPADIsDpdEnabled(WPADChannel chan);
WPADResult WPADControlDpd(WPADChannel chan, WPADDpdCommand command, WPADCallback *cb);
WPADResult WPADControlBLC(WPADChannel chan, WPADBLCCommand command, WPADCallback *cb);
void WPADRecalibrate(WPADChannel chan);
BOOL WPADIsUsedCallbackByKPAD(void);
void WPADSetCallbackByKPAD(BOOL isKPAD);
#ifdef __cplusplus
}
#endif
#endif
#endif // RVL_SDK_WPAD_H
+57
View File
@@ -0,0 +1,57 @@
#ifndef RVL_SDK_WPAD_MEMORY_H
#define RVL_SDK_WPAD_MEMORY_H
#include <common.h>
#include <rvl/OS/OSTime.h>
#include <rvl/WPAD/WPAD.h>
/*******************************************************************************
* macros
*/
#define WM_MEM_ADDR(addr_) ((addr_) & 0xffff)
#define WM_EXT_REG_ADDR(type_, addr_) (((addr_) & 0xffff) | ((WPAD_EXT_REG_##type_) << 16) | (1 << 26))
/*******************************************************************************
* types
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef u8 WPADExtRegType;
enum WPADExtRegType_et {
WPAD_EXT_REG_SPEAKER = 0xa2,
WPAD_EXT_REG_EXTENSION = 0xa4,
WPAD_EXT_REG_MOTION_PLUS = 0xa6,
WPAD_EXT_REG_DPD = 0xb0,
};
// https://wiibrew.org/wiki/Wiimote#EEPROM_Memory
typedef struct WPADGameInfo {
OSTime timestamp; // size 0x08, offset 0x00
u16 gameName[17]; // size 0x22, offset 0x08
char gameID[4]; // size 0x04, offset 0x2a
u8 gameType; // size 0x01, offset 0x2e
u8 checksum; // size 0x01, offset 0x2f
/* wiibrew says this exists in the header on the Wiimote but goes unused,
* which matches up with the code I see here
*/
byte_t unknown[8];
} WPADGameInfo; // size 0x38
/*******************************************************************************
* functions
*/
WPADResult
WPADWriteExtReg(WPADChannel chan, const void *data, u16 length, WPADExtRegType extReg, u16 address, WPADCallback *cb);
#ifdef __cplusplus
}
#endif
#endif // RVL_SDK_WPAD_MEMORY_H
+108
View File
@@ -0,0 +1,108 @@
#ifndef RVL_SDK_WPAD_WUD_H
#define RVL_SDK_WPAD_WUD_H
#include <common.h>
// TODO: Fix when possible
#include "context_bte.h"
#define WUD_MAX_DEV_ENTRY_FOR_STD 10 // name known from asserts
#define WUD_MAX_DEV_ENTRY_FOR_SMP 6 // name known from asserts
#define WUD_MAX_DEV_ENTRY 16 // name known from asserts
#ifdef __cplusplus
extern "C" {
#endif
typedef s8 WUDDevHandle;
#define WUD_DEV_HANDLE_INVALID (-1)
typedef s32 WUDChannel;
enum WUDChannel_et {
WUD_CHAN0,
WUD_CHAN1,
WUD_CHAN2,
WUD_CHAN3,
WUD_MAX_CHANNELS,
WUD_CHAN_INVALID = -1
};
typedef s32 WUDLibStatus;
enum WUDLibStatus_et {
WUD_LIB_STATUS_0,
WUD_LIB_STATUS_1,
WUD_LIB_STATUS_2,
WUD_LIB_STATUS_3,
WUD_LIB_STATUS_4,
};
typedef u8 WUDSyncType;
enum WUDSyncType_et {
WUD_SYNC_TYPE_STANDARD,
WUD_SYNC_TYPE_SIMPLE,
};
typedef void *WUDAllocFunc(size_t size);
typedef int WUDFreeFunc(void *ptr); // signature from petari. not sure what the int is, though
typedef void WUDSyncDeviceCallback(s32 result, s32 num); // what is result?
typedef void WUDClearDeviceCallback(signed);
typedef struct WUDDevInfo WUDDevInfo;
typedef void WUDHidConnectCallback(WUDDevInfo *devInfo, u8 isOpenEvent);
typedef void WUDHidReceiveCallback(UINT8 dev_handle, UINT8 *p_rpt, UINT16 len);
struct WUDDevInfo {
struct small_dev_info small; // size 0x40, offset 0x00
BD_ADDR devAddr; // size 0x06, offset 0x40
LINK_KEY linkKey; // size 0x10, offset 0x46
UINT8 devHandle; // size 0x01, offset 0x56
UINT8 subclass; // size 0x01, offset 0x57
UINT8 appID; // size 0x01, offset 0x58
u8 at_0x59; // size 0x01, offset 0x59
char signed at_0x5a; // size 0x01, offset 0x5a /* unknown */
u8 at_0x5b; // size 0x01, offset 0x5b
u8 at_0x5c; // size 0x01, offset 0x5c
byte_t unk_0x5d[1]; // padding?
tBTA_HH_ATTR_MASK hhAttrMask; // size 0x02, offset 0x5e
}; // size 0x60
/*******************************************************************************
* functions
*/
BOOL WUDIsLinkedWBC(void);
BOOL WUDInit(void);
void WUDRegisterAllocator(WUDAllocFunc *alloc, WUDFreeFunc *free);
void WUDShutdown(BOOL saveSimpleDevs);
WUDLibStatus WUDGetStatus(void);
u8 WUDGetBufferStatus(void);
void WUDSetSniffMode(BD_ADDR addr, int interval);
WUDSyncDeviceCallback *WUDSetSyncSimpleCallback(WUDSyncDeviceCallback *cb);
BOOL WUDStartSyncDevice(void);
BOOL WUDStartFastSyncSimple(void);
BOOL WUDCancelSyncDevice(void);
BOOL WUDStopSyncSimple(void);
BOOL WUDStartClearDevice(void);
BOOL WUDSetDisableChannel(s8 afhChannel);
WUDHidConnectCallback *WUDSetHidConnCallback(WUDHidConnectCallback *hidConn);
WUDHidReceiveCallback *WUDSetHidRecvCallback(WUDHidReceiveCallback *hidRecv);
void WUDSetVisibility(u8 discoverable, u8 connectable);
u8 WUDGetConnectable(void);
BOOL WUDIsBusy(void);
void WUDSetDeviceHistory(WUDChannel chan, BD_ADDR addr);
BOOL WUDIsLatestDevice(WUDChannel chan, BD_ADDR addr);
void WUDUpdateSCSetting(void);
#ifdef __cplusplus
}
#endif
#endif // RVL_SDK_WPAD_WUD_H
+3
View File
@@ -0,0 +1,3 @@
#include <egg/audio/eggAudioArcPlayerMgr.h>
namespace EGG {} // namespace EGG
+3
View File
@@ -0,0 +1,3 @@
#include <egg/audio/eggAudioHeapMgr.h>
namespace EGG {} // namespace EGG
+3
View File
@@ -0,0 +1,3 @@
#include <egg/audio/eggAudioMgr.h>
namespace EGG {} // namespace EGG
+3
View File
@@ -0,0 +1,3 @@
#include <egg/audio/eggAudioRmtSpeakerMgr.h>
namespace EGG {} // namespace EGG
+3
View File
@@ -0,0 +1,3 @@
#include <egg/audio/eggAudioSystem.h>
namespace EGG {} // namespace EGG
+3
View File
@@ -0,0 +1,3 @@
#include <egg/audio/eggAudioUtility.h>
namespace EGG {} // namespace EGG
+5 -6
View File
@@ -1,11 +1,11 @@
#include <egg/core/eggAllocator.h>
#include <egg/core/eggHeap.h>
/* 804952d0 */ static void *MEM_AllocFor_Heap(MEMAllocator* alloc, u32 size) {
return static_cast<EGG::Heap*>(static_cast<EGG::Allocator*>(alloc)->heap)->alloc(size, alloc->heapParam1);
/* 804952d0 */ static void *MEM_AllocFor_Heap(MEMAllocator *alloc, u32 size) {
return static_cast<EGG::Heap *>(static_cast<EGG::Allocator *>(alloc)->heap)->alloc(size, alloc->heapParam1);
}
/* 804952f0 */ static void MEM_FreeFor_Heap(MEMAllocator* alloc, void* block) {
return static_cast<EGG::Heap*>(static_cast<EGG::Allocator*>(alloc)->heap)->free(block);
/* 804952f0 */ static void MEM_FreeFor_Heap(MEMAllocator *alloc, void *block) {
return static_cast<EGG::Heap *>(static_cast<EGG::Allocator *>(alloc)->heap)->free(block);
}
const MEMAllocatorFuncs eggAllocatorFuncs = {
@@ -15,14 +15,13 @@ const MEMAllocatorFuncs eggAllocatorFuncs = {
// TODO this is used from eggHeap for some reason. Figure out
// the correct privacy boundary later.
/* 80495310 */ void MEMInitAllocatorFor_Heap(MEMAllocator* alloc, s32 align, void* heap) {
/* 80495310 */ void MEMInitAllocatorFor_Heap(MEMAllocator *alloc, s32 align, void *heap) {
alloc->funcs = &eggAllocatorFuncs;
alloc->heap = heap;
alloc->heapParam1 = align;
alloc->heapParam2 = 0;
}
namespace EGG {
/* 80495330 */ Allocator::Allocator(Heap *heap, s32 align) : mHeap(heap), align(align) {
+332
View File
@@ -0,0 +1,332 @@
#include <egg/core/eggArchive.h>
#include <egg/core/eggHeap.h>
#include <string.h>
namespace EGG {
bool Archive::sIsArchiveListInitialized;
nw4r::ut::List Archive::sArchiveList;
s32 readNANDFile(NANDFileInfo *info, void *buf, u32 len, s32 offs) {
s32 seek = NANDSeek(info, offs, NAND_SEEK_BEG);
if (seek == offs) {
return NANDRead(info, buf, len);
}
return seek;
}
Archive::Archive() {
mDvdEntryNum = -1;
mNandFile = nullptr;
mRefCount = 1;
mMountType = MOUNT_NONE;
memset(&mHandle, 0, sizeof(ARCHandle));
appendList(this);
}
Archive::~Archive() {
removeList(this);
}
bool Archive::initHandle(void *data, MountType mount) {
bool success = false;
if (data) {
success = ARCInitHandle(data, &mHandle);
}
if (success) {
mMountType = mount;
} else {
mMountType = MOUNT_NONE;
}
return success;
}
Archive *Archive::findArchive(void *data) {
Archive *arc = nullptr;
if (sIsArchiveListInitialized && data) {
Archive *node = nullptr;
while (node = (Archive *)nw4r::ut::List_GetNext(&sArchiveList, node)) {
if (node->mHandle.header == data) {
arc = node;
break;
}
}
}
return arc;
}
Archive *Archive::findArchive(NANDFileInfo *data) {
Archive *arc = nullptr;
if (sIsArchiveListInitialized && data) {
Archive *node = nullptr;
while (node = (Archive *)nw4r::ut::List_GetNext(&sArchiveList, node)) {
if (node->mNandFile == data) {
arc = node;
break;
}
}
}
return arc;
}
void Archive::appendList(Archive *arc) {
if (!sIsArchiveListInitialized) {
nw4r::ut::List_Init(&sArchiveList, offsetof(Archive, mLink));
sIsArchiveListInitialized = true;
}
nw4r::ut::List_Append(&sArchiveList, arc);
}
void Archive::removeList(Archive *arc) {
nw4r::ut::List_Remove(&sArchiveList, arc);
}
Archive *Archive::mount(void *data, Heap *pHeap, int align) {
if (data == nullptr) {
return nullptr;
}
Archive *arc = findArchive(data);
if (!arc) {
arc = new (pHeap, align) Archive();
if (!arc || !arc->initHandle(data, MOUNT_MEM)) {
delete arc;
arc = nullptr;
}
} else {
arc->mRefCount++;
}
return arc;
}
Archive *Archive::mountFST(void *data, Heap *pHeap, int align) {
if (data == nullptr) {
return nullptr;
}
Archive *arc = findArchive(data);
if (!arc) {
arc = new (pHeap, align) Archive();
if (!arc || !arc->initHandle(data, MOUNT_NAND)) {
delete arc;
arc = nullptr;
}
} else {
arc->mRefCount++;
}
return arc;
}
Archive *Archive::mountNAND(NANDFileInfo *nandFile, Heap *pHeap, int align) {
Archive *arc = findArchive(nandFile);
if (!arc) {
void *arc_bin = loadNAND(nandFile, pHeap, align);
arc = mountFST(arc_bin, pHeap, align);
arc->mNandFile = nandFile;
} else {
arc->mRefCount++;
}
return arc;
}
Archive *Archive::loadFST(const char *fileName, Heap *pHeap, int align) {
NANDFileInfo *nandFile = (NANDFileInfo *)pHeap->alloc(sizeof(NANDFileInfo), align > 0 ? -0x20 : 0x20);
if (NANDOpen(fileName, nandFile, NAND_ACCESS_READ) != NAND_RESULT_OK) {
pHeap->free(nandFile);
return nullptr;
}
return mountNAND(nandFile, pHeap, align);
}
void Archive::unmount() {
if (mRefCount == 0) {
return;
}
if (--mRefCount) {
return;
}
if (mNandFile) {
NANDClose(mNandFile);
Heap::free(mNandFile, nullptr);
mNandFile = nullptr;
}
mDvdEntryNum = -1;
mMountType = MOUNT_NONE;
delete this;
}
void *Archive::getFile(const char *path, FileInfo *fileInfo) {
ARCFileInfo arcFileInfo;
void *file = nullptr;
bool opened = false;
int entryNum = ARCConvertPathToEntrynum(&mHandle, path);
if (entryNum != -1) {
opened = ARCFastOpen(&mHandle, entryNum, &arcFileInfo);
}
if (opened) {
if (mMountType == MOUNT_MEM) {
file = ARCGetStartAddrInMem(&arcFileInfo);
}
if (fileInfo) {
fileInfo->mArcStartOffset = ARCGetStartOffset(&arcFileInfo);
fileInfo->mArcLength = ARCGetLength(&arcFileInfo);
}
}
ARCClose(&arcFileInfo);
return file;
}
s32 Archive::convertPathToEntryID(const char *path) {
return ARCConvertPathToEntrynum(&mHandle, path);
}
void *Archive::getFileFast(s32 entryId, FileInfo *fileInfo) {
if (entryId == -1) {
if (fileInfo) {
fileInfo->mArcStartOffset = 0;
fileInfo->mArcLength = 0;
}
return nullptr;
}
void *file = nullptr;
if (mMountType == MOUNT_MEM) {
ARCFileInfo arcFileInfo;
bool opened = ARCFastOpen(&mHandle, entryId, &arcFileInfo);
if (opened) {
file = ARCGetStartAddrInMem(&arcFileInfo);
if (fileInfo) {
fileInfo->mArcStartOffset = ARCGetStartOffset(&arcFileInfo);
fileInfo->mArcLength = ARCGetLength(&arcFileInfo);
}
}
ARCClose(&arcFileInfo);
}
return file;
}
void *Archive::getFileFast(s32 entryId, Heap *pHeap, int align) {
if (entryId == -1) {
return nullptr;
}
u32 file_len;
void *file = nullptr;
ARCFileInfo arcFileInfo;
bool opened = ARCFastOpen(&mHandle, entryId, &arcFileInfo);
if (opened) {
file_len = ROUND_UP(ARCGetLength(&arcFileInfo), 0x20);
file = pHeap->alloc(file_len, align);
if (file) {
if (mMountType == MOUNT_MEM) {
void *startAddr = ARCGetStartAddrInMem(&arcFileInfo);
memcpy(file, startAddr, file_len);
} else {
u32 offs = ARCGetStartOffset(&arcFileInfo);
if (mNandFile) {
readNANDFile(mNandFile, file, file_len, offs);
} else {
if (mDvdEntryNum != -1) {
DVDFileInfo dvdFileInfo;
DVDFastOpen(mDvdEntryNum, &dvdFileInfo);
DVDReadPrio(&dvdFileInfo, file, file_len, offs, DVD_PRIO_MEDIUM);
DVDClose(&dvdFileInfo);
}
}
}
}
}
ARCClose(&arcFileInfo);
return file;
}
void countFileCallbackFunc(void *arg1, void *arg2, const ARCDirEntry *, const char *) {
if (!arg2) {
return;
}
(*(u32 *)arg1)++;
return;
}
s32 Archive::countFile() {
u32 count = 0;
searchInside(countFileCallbackFunc, &count);
return count;
}
void searchInsideWithPath(
Archive *arc, ARCHandle *handle, FileCallbackFunc cb, void *cbArg, char *outPath, u32 max_len
) {
ARCDir dir;
if (ARCOpenDir(handle, outPath, &dir)) {
ARCDirEntry dirEntry;
while (ARCReadDir(&dir, &dirEntry)) {
size_t path_len = strlen(outPath);
if (dirEntry.isDir) {
size_t dir_len = strlen(dirEntry.name) + 1;
strcat(outPath, dirEntry.name);
cb(cbArg, nullptr, &dirEntry, outPath);
strcat(outPath, "/");
searchInsideWithPath(arc, handle, cb, cbArg, outPath, max_len - dir_len);
} else {
size_t _unused = strlen(dirEntry.name);
strcat(outPath, dirEntry.name);
cb(cbArg, arc->getFile(outPath, nullptr), &dirEntry, outPath);
}
outPath[path_len] = '\0';
}
ARCCloseDir(&dir);
}
}
void Archive::searchInside(FileCallbackFunc cb, void *cbArg) {
char buffer[256];
strcpy(buffer, "/");
size_t bufSize = sizeof(buffer);
bufSize -= 1 + strlen(buffer);
searchInsideWithPath(this, &mHandle, cb, cbArg, buffer, bufSize);
}
void *Archive::loadNAND(NANDFileInfo *fileInfo, Heap *pHeap, int align) {
int file_align = align >= 0 ? 0x20 : -0x20;
void *arc_file = nullptr;
ARCHeader *header = (ARCHeader *)pHeap->alloc(sizeof(ARCHeader), -file_align);
if (header) {
s32 readres = readNANDFile(fileInfo, header, sizeof(ARCHeader), 0);
if (readres >= sizeof(ARCHeader)) {
u32 file_len = ROUND_UP(header->nodes.size + sizeof(ARCHeader), 0x20);
arc_file = pHeap->alloc(file_len, file_align);
if (arc_file) {
readres = readNANDFile(fileInfo, arc_file, file_len, 0);
if (readres != file_len) {
pHeap->free(arc_file);
arc_file = nullptr;
}
}
}
pHeap->free(header);
}
return arc_file;
}
} // namespace EGG
+126
View File
@@ -0,0 +1,126 @@
#include <egg/core/eggAssertHeap.h>
namespace EGG {
AssertHeap::AssertHeap(MEMiHeapHead *pHead) : Heap(pHead) {}
AssertHeap::~AssertHeap() {
dispose();
MEMDestroyFrmHeap(mHeapHandle);
}
AssertHeap *AssertHeap::create(void *pBlock, u32 size) {
AssertHeap *heap = nullptr;
void *startAddr = pBlock;
void *heapEnd = ROUND_DOWN_PTR((u8 *)pBlock + size, 0x04);
pBlock = ROUND_UP_PTR(pBlock, 0x04);
if (pBlock > heapEnd || ((u8 *)heapEnd - (u8 *)pBlock) < 0x38u) {
return nullptr;
}
MEMiHeapHead *head =
MEMCreateFrmHeapEx((u8 *)pBlock + sizeof(AssertHeap), ((u8 *)heapEnd - (u8 *)pBlock) - sizeof(AssertHeap), 0);
if (head != nullptr) {
heap = new (pBlock) AssertHeap(head);
heap->mParentBlock = startAddr;
if (sCreateCallback != nullptr) {
(sCreateCallback)(heap);
}
}
return heap;
}
AssertHeap *AssertHeap::create(u32 size, Heap *pHeap) {
AssertHeap *assertHeap = nullptr;
if (!pHeap) {
pHeap = sCurrentHeap;
}
if (size == -1) {
size = pHeap->getAllocatableSize(4);
} else if (size == 0) {
size = getSize();
}
void *pBlock = pHeap->alloc(size, 4);
if (pBlock) {
assertHeap = create(pBlock, size);
if (!assertHeap) {
pHeap->free(pBlock);
}
}
return assertHeap;
}
void AssertHeap::destroy() {
if (sDestroyCallback) {
sDestroyCallback(this);
}
Heap *parent = findParentHeap();
this->~AssertHeap();
if (parent) {
parent->free(this);
}
}
void *AssertHeap::alloc(u32 size, s32 align) {
if (sAllocCallback) {
HeapAllocArg arg;
arg.userArg = sAllocCallbackArg;
arg.size = size;
arg.align = align;
arg.heap = this;
arg.ptr = nullptr;
sAllocCallback(&arg);
}
return nullptr;
}
void AssertHeap::free(void *pBlock) {
if (sFreeCallback != nullptr) {
HeapFreeArg arg;
arg.userArg = sFreeCallbackArg;
arg.ptr = pBlock;
arg.heap = this;
(sFreeCallback)(&arg);
}
}
u32 AssertHeap::resizeForMBlock(void *pBlock, u32 size) {
return 0;
}
u32 AssertHeap::getTotalFreeSize() {
return 0;
}
u32 AssertHeap::getAllocatableSize(s32 align) {
return 0;
}
u32 AssertHeap::adjust() {
u32 adjustedSize = MEMAdjustFrmHeap(mHeapHandle);
u32 totalSize = adjustedSize + sizeof(AssertHeap);
if (totalSize > sizeof(AssertHeap)) {
Heap *parent = findParentHeap();
if (parent != nullptr) {
parent->resizeForMBlock(mParentBlock, totalSize);
return totalSize;
}
}
return 0;
}
size_t AssertHeap::getSize() {
return 0x7C;
}
Heap::eHeapKind AssertHeap::getHeapKind() const {
return HEAP_KIND_ASSERT;
}
} // namespace EGG
+7 -4
View File
@@ -58,8 +58,10 @@ inline void AsyncDisplay::waitForMsg(bool b) {
// This is really ugly but I couldn't find a different way
// to make the compiler use the registers
XfbManager *xfb;
while (!((xfb = BaseSystem::mConfigData->getXfbMgr(), 1 < xfb->mNumXfbs - this->field_0xAC) &&
(BaseSystem::mConfigData->getXfbMgr()->mToCopyXfb != nullptr || b))) {
while (
!((xfb = BaseSystem::mConfigData->getXfbMgr(), 1 < xfb->mNumXfbs - this->field_0xAC) &&
(BaseSystem::mConfigData->getXfbMgr()->mToCopyXfb != nullptr || b))
) {
OSReceiveMessage(&this->mMesgQueue, this->mMesgBuf, 1);
while (OSReceiveMessage(&this->mMesgQueue, this->mMesgBuf, 0)) {}
@@ -159,8 +161,9 @@ void AsyncDisplay::preVRetrace() {
void AsyncDisplay::clearEFB() {
Video *video = BaseSystem::mConfigData->getVideo();
GXRenderModeObj const *renderMode = video->pRenderMode;
this->clearEFB(renderMode->fbWidth, renderMode->efbHeight, 0, 0, renderMode->fbWidth, renderMode->efbHeight,
this->mClearColor);
this->clearEFB(
renderMode->fbWidth, renderMode->efbHeight, 0, 0, renderMode->fbWidth, renderMode->efbHeight, this->mClearColor
);
}
u32 AsyncDisplay::getTickPerFrame() {
+5 -4
View File
@@ -2,11 +2,12 @@
#include <rvl/GX/GXHardware.h>
#include <rvl/GX/GXTexture.h>
/* 80497930 */
EGG::ColorFader::ColorFader(float startX, float startY, float lengthX, float lengthY, nw4r::ut::Color color,
Fader::EStatus initialStatus)
: mStartX(startX), mStartY(startY), mEndX(startX + lengthX), mEndY(startY + lengthY), mFrame(0x14), mFadeTimer(0), mFlags(0) {
EGG::ColorFader::ColorFader(
float startX, float startY, float lengthX, float lengthY, nw4r::ut::Color color, Fader::EStatus initialStatus
)
: mStartX(startX), mStartY(startY), mEndX(startX + lengthX), mEndY(startY + lengthY), mFrame(0x14), mFadeTimer(0),
mFlags(0) {
setColor(color);
setStatus(initialStatus);
mFlags.setBit(1);
+358 -174
View File
@@ -1,11 +1,13 @@
#include "egg/core/eggController.h"
#include "MSL_C/string.h"
#include "egg/core/eggAllocator.h"
#include "egg/core/eggExpHeap.h"
#include "egg/core/eggSystem.h"
#include "egg/math/eggMath.h"
#include "rvl/VI.h"
EGG::NullController null_controller;
namespace EGG {
@@ -15,33 +17,32 @@ ControllerFactory CoreControllerMgr::sCoreControllerFactory;
ConnectCallback CoreControllerMgr::sConnectCallback;
// This controls whether EggController registers an allocator within the WPAD driver
bool CoreControllerMgr::sUseBuiltinWpadAllocator;
static Allocator *sWPADAllocator;
s32 CoreControllerMgr::sWPADWorkSize = 0x32000;
/* 0x80498F90 */ void CoreStatus::init() {
void CoreStatus::init() {
memset(this, 0, sizeof(CoreStatus));
}
/* 0x80498FA0 */ u32 CoreStatus::getFSStickButton() const {
f32 button = this->fsStickButton;
u32 CoreStatus::getFSStickButton() const {
f32 stick = getFSStickX();
u32 result = 0;
// TODO what are these flags and why is this code so weird?
if (!(-0.25f < button) || !(button < 0.25f)) {
if (button <= -0.5f) {
if (!(-0.25f < stick) || !(stick < 0.25f)) {
if (stick <= -0.5f) {
result = 0;
result |= 0x40000;
} else if (button >= 0.5f) {
} else if (stick >= 0.5f) {
result = 0;
result |= 0x80000;
}
}
button = this->fsStickButton2;
if (!(-0.25f < button) || !(button < 0.25f)) {
if (button <= -0.5f) {
stick = getFSStickY();
if (!(-0.25f < stick) || !(stick < 0.25f)) {
if (stick <= -0.5f) {
result &= ~0x10000;
result |= 0x20000;
} else if (button >= 0.5f) {
} else if (stick >= 0.5f) {
result &= ~0x20000;
result |= 0x10000;
}
@@ -50,116 +51,262 @@ static Allocator *sWPADAllocator;
return result;
}
/* 0x80499050 */ CoreController::CoreController() : mDpdPos(), mAccel(), mAccelFlags(), mFlag(0) {
this->mRumbleMgr = nullptr;
this->mButtonHeld = 0;
this->mButtonTriggered = 0;
this->mButtonReleased = 0;
this->sceneReset();
this->mFlag.makeAllZero();
CoreController::CoreController() : mDpdPos(), mAccel(), mAccelFlags(), mFlag(0) {
mRumbleMgr = nullptr;
mButtonHeld = 0;
mButtonTriggered = 0;
mButtonReleased = 0;
sceneReset();
mFlag.makeAllZero();
}
/* 0x804990B0 */ void CoreController::sceneReset() {
this->mAccel.set(0.0, 0.0, 0.0);
this->mDpdPos.x = 0.0;
this->mDpdPos.y = 0.0;
this->field_0xf28 = 0;
this->mPostureMatrixPrev.makeIdentity();
this->mPostureMatrix.makeIdentity();
this->mMaxAccelFrameTime = 10;
this->mMaxAccelDiff = 0.13;
this->mPrevAccel.set(0.0, 0.0, 0.0);
this->mAccelFlags.makeAllZero();
this->mAccelFrameTimeZ = 0;
this->mAccelFrameTimeY = 0;
this->mAccelFrameTimeX = 0;
this->mMotorPattern = 0;
this->mMotorFrameDuration = 0;
this->mEnableMotor = false;
this->mMotorPatternLength = 0x20;
this->mMotorPatternPos = 0x1f;
this->stopRumbleMgr();
void CoreController::sceneReset() {
mAccel.set(0.0, 0.0, 0.0);
mDpdPos.x = 0.0;
mDpdPos.y = 0.0;
mIdleTime = 0;
mPostureMatrixPrev.makeIdentity();
mPostureMatrix.makeIdentity();
mMaxAccelFrameTime = 10;
mMaxAccelDiff = 0.13;
mPrevAccel.set(0.0, 0.0, 0.0);
mAccelFlags.makeAllZero();
mAccelFrameTime[2] = 0;
mAccelFrameTime[1] = 0;
mAccelFrameTime[0] = 0;
mMotorPattern = 0;
mMotorFrameDuration = 0;
mEnableMotor = false;
mMotorPatternLength = 0x20;
mMotorPatternPos = 0x1f;
stopRumbleMgr();
}
/* 0x80499170 */ Vector2f CoreController::getDpdRawPos() const {
return Vector2f(this->coreStatus[0].dpdRawX, this->coreStatus[0].dpdRawY);
Vector2f CoreController::getDpdRawPos() {
return Vector2f(mCoreStatus[0].mDpdRawX, mCoreStatus[0].mDpdRawY);
}
/* 0x80499190 */ s32 CoreController::getDpdDistance() const {
return this->coreStatus[0].dpdDistance;
f32 CoreController::getDpdDistance() {
return mCoreStatus[0].mDpdDistance;
}
// TODO
extern "C" void fn_803DB1E0(s32 channel, bool arg);
/* 0x804991A0 */ void CoreController::startMotor() {
fn_803DB1E0(mChannelID, true);
s32 CoreController::getDpdValidFlag() {
return mCoreStatus[0].getDpdValidFlag();
}
/* 0x804991B0 */ void CoreController::stopMotor() {
fn_803DB1E0(mChannelID, false);
void CoreController::startMotor() {
WPADControlMotor(mChannelID, WPAD_MOTOR_RUMBLE);
}
/* 0x804991C0 */ void CoreController::createRumbleMgr(u8 numUnits) {
this->mRumbleMgr = new ControllerRumbleMgr();
this->mRumbleMgr->createUnit(numUnits, this);
void CoreController::stopMotor() {
WPADControlMotor(mChannelID, WPAD_MOTOR_STOP);
}
/* 0x80499220 */ void CoreController::startPatternRumble(const char *pattern, int duration, bool bGrabActive) {
if (this->mRumbleMgr) {
this->mRumbleMgr->startPattern(pattern, duration, bGrabActive);
void CoreController::createRumbleMgr(u8 numUnits) {
mRumbleMgr = new ControllerRumbleMgr();
mRumbleMgr->createUnit(numUnits, this);
}
void CoreController::startPatternRumble(const char *pattern, int duration, bool bGrabActive) {
if (mRumbleMgr) {
mRumbleMgr->startPattern(pattern, duration, bGrabActive);
}
}
/* 0x80499240 */ void CoreController::stopRumbleMgr() {
if (this->mRumbleMgr) {
this->mRumbleMgr->stop();
void CoreController::stopRumbleMgr() {
if (mRumbleMgr) {
mRumbleMgr->stop();
}
}
/* 0x80499260 */ CoreStatus *CoreController::getCoreStatus(s32 idx) {
return &this->coreStatus[idx];
CoreStatus *CoreController::getCoreStatus(int idx) {
return &mCoreStatus[idx];
}
/* 0x80499270 */ void CoreController::calc_posture_matrix(Matrix34f &mat, bool someBool) {
if (!someBool || this->mAccelFlags.onBit(7)) {
Vector3f vec = Vector3f(-mat(2, 3), -mat(2, 2), -mat(2, 1));
Vector3f vec3 = vec;
vec.normalise();
// TODO lots of inlined math
void CoreController::calc_posture_matrix(Matrix34f &posture, bool checkStable) {
if (checkStable && !isStable(7)) {
return;
}
Vector3f acc = -getAccel();
Vector3f vy = acc;
vy.normalise();
Vector3f vz(0.0f, 0.0f, 1.0f);
Vector3f vx(1.0f, 0.0f, 0.0f);
Vector3f bx, by, bz;
mPostureMatrixPrev.getBase(0, bx);
mPostureMatrixPrev.getBase(1, by);
mPostureMatrixPrev.getBase(2, bz);
Vector3f vz_n(0.0f, 0.0f, -1.0f);
Vector3f vx_n(-1.0f, 0.0f, 0.0f);
if (vz.dot(bz) < vz_n.dot(bz)) {
vz = vz_n;
}
if (vx.dot(bx) < vx_n.dot(bx)) {
vx = vx_n;
}
if (Math<f32>::abs(vy.dot(vz)) < Math<f32>::abs(vy.dot(vx))) {
vx = vy.cross(vz);
vx.normalise();
vz = vx.cross(vy);
vz.normalise();
} else {
vz = vx.cross(vy);
vz.normalise();
vx = vy.cross(vz);
vx.normalise();
}
posture.setBase(0, vx);
posture.setBase(1, vy);
posture.setBase(2, vz);
}
void CoreController::beginFrame(PADStatus *padStatus) {
s32 kpad_result;
mReadStatusIdx = KPADReadEx(mChannelID, mCoreStatus, 0x10, &kpad_result);
if (mReadStatusIdx == 0 && kpad_result == -1 /* Rvl usually uses negative nums for results */) {
mReadStatusIdx = 1;
}
WPADDeviceType dev_type;
switch (WPADProbe(mChannelID, &dev_type)) {
case WPAD_ERR_OK: {
if ((u32)dev_type == WPAD_DEV_NONE) {
mFlag.resetBit(0);
} else {
mFlag.setBit(0);
}
} break;
case WPAD_ERR_NO_CONTROLLER: {
mFlag.resetBit(0);
} break;
}
if (mReadStatusIdx > 0) {
CoreStatus *pStatus = mCoreStatus;
u32 prev_held = mButtonHeld;
if (pStatus->isFreestyle()) {
mButtonHeld = pStatus->getFSStickButton();
} else {
mButtonHeld = 0;
}
mButtonTriggered = mButtonHeld & ~prev_held;
mButtonReleased = prev_held & ~mButtonHeld;
pStatus->mHold &= ~0xF0000;
pStatus->mTrig &= ~0xF0000;
pStatus->mRelease &= ~0xF0000;
pStatus->mHold |= (mButtonHeld & 0xF0000);
pStatus->mTrig |= (mButtonTriggered & 0xF0000);
pStatus->mRelease |= (mButtonReleased & 0xF0000);
}
mPostureMatrixPrev.copyFrom(mPostureMatrix);
mAccelFlags.makeAllZero();
Vector3f acc = mCoreStatus->getAccel();
for (int i = 0; i < 3; i++) {
if (acc(i) - mAccel(i) < mMaxAccelDiff) {
if (mMaxAccelFrameTime <= ++mAccelFrameTime[i]) {
mAccelFrameTime[i] = mMaxAccelFrameTime;
mAccelFlags.set(1 << i);
mPrevAccel(i) = acc(i);
}
} else {
mAccelFlags.value &= ~(1 << i); // ?
mAccelFrameTime[i] = 0;
}
}
calc_posture_matrix(mPostureMatrix, true);
if (mEnableMotor) {
if (mMotorPattern & (1 << mMotorPatternPos)) {
startMotor();
} else {
stopMotor();
}
if (mMotorPatternPos == 0) {
mMotorPatternPos = mMotorPatternLength - 1;
} else {
mMotorPatternPos = mMotorPatternPos - 1;
}
if (--mMotorFrameDuration == 0) {
stopMotor();
mEnableMotor = false;
}
}
if (mRumbleMgr) {
mRumbleMgr->calc();
}
bool increment = true;
if (mCoreStatus->getHold() != 0) {
increment = false;
}
if (increment) {
Vector3f diff = (mAccel - mCoreStatus->getAccel());
if (diff.squaredLength() > 0.01f) {
increment = false;
}
}
if (increment) {
Vector2f diff = (mDpdPos - getDpdRawPos());
if (diff.squaredLength() > 0.05f) {
increment = false;
}
}
if (increment) {
// I dont know what this is for...
// if no interaction, this increments? (30fps -> 2hrs)
if (mIdleTime < 216000) {
mIdleTime++;
}
} else {
mIdleTime = 0;
}
}
/* 0x80499660 */ void CoreController::beginFrame(void *padStatus) {}
/* 0x80499A60 */ void CoreController::endFrame() {
this->mAccel(0) = this->coreStatus[0].accel[0];
this->mAccel(1) = this->coreStatus[0].accel[1];
this->mAccel(2) = this->coreStatus[0].accel[2];
this->mDpdPos = this->getDpdRawPos();
void CoreController::endFrame() {
mAccel = getAccel();
mDpdPos = getDpdRawPos();
}
/* 0x80499AC0 */ f32 CoreController::getFreeStickX() const {
if (this->coreStatus[0].field_0x00[0x5C] == 0) {
/* 0x80499AC0 */
f32 CoreController::getFreeStickX() const {
if (mCoreStatus->getDevType() == WPAD_DEV_CORE) {
return 0.0;
}
return ((f32 *)(&this->coreStatus[0].field_0x00))[0x18];
return mCoreStatus[0].getFSStickX();
}
/* 0x80499AE0 */ f32 CoreController::getFreeStickY() const {
if (this->coreStatus[0].field_0x00[0x5C] == 0) {
/* 0x80499AE0 */
f32 CoreController::getFreeStickY() const {
if (mCoreStatus->getDevType() == WPAD_DEV_CORE) {
return 0.0;
}
return ((f32 *)(&this->coreStatus[0].field_0x00))[0x19];
return mCoreStatus[0].getFSStickY();
}
/* 0x80499B00 */ CoreControllerMgr::T__Disposer::~T__Disposer() {
/* 0x80499B00 */
CoreControllerMgr::T__Disposer::~T__Disposer() {
if (this == CoreControllerMgr::T__Disposer::sStaticDisposer) {
deleteInstance();
}
}
/* 0x80499B80 */ CoreControllerMgr *CoreControllerMgr::createInstance() {
/* 0x80499B80 */
CoreControllerMgr *CoreControllerMgr::createInstance() {
if (CoreControllerMgr::sInstance == nullptr) {
CoreControllerMgr *mgr = new CoreControllerMgr();
CoreControllerMgr::sInstance = mgr;
@@ -168,56 +315,58 @@ extern "C" void fn_803DB1E0(s32 channel, bool arg);
return CoreControllerMgr::sInstance;
}
/* 0x80499BD0 */ void CoreControllerMgr::deleteInstance() {
/* 0x80499BD0 */
void CoreControllerMgr::deleteInstance() {
CoreControllerMgr::sInstance = nullptr;
CoreControllerMgr::T__Disposer::sStaticDisposer = nullptr;
}
/* 0x80499BE0 */ EGG::CoreController *CoreControllerMgr::getNthController(int n) {
return this->mControllers(n);
/* 0x80499BE0 */
EGG::CoreController *CoreControllerMgr::getNthController(int n) {
return mControllers(n);
}
/* 0x80499C70 */ void *CoreControllerMgr::allocThunk(size_t size) {
return sWPADAllocator->alloc(size);
namespace {
static Allocator *sAllocator;
void *alloc(size_t size) {
return sAllocator->alloc(size);
}
/* 0x80499C90 */ int CoreControllerMgr::deleteThunk(void *ptr) {
sWPADAllocator->free(ptr);
int free(void *ptr) {
sAllocator->free(ptr);
return 1;
}
/* 0x80499CD0 */ void CoreControllerMgr::connectCallback(s32 a1, s32 a2) {
} // namespace
/* 0x80499CD0 */
void CoreControllerMgr::connectCallback(s32 a1, s32 a2) {
int args[] = {a1, a2};
if (sConnectCallback != nullptr) {
(sConnectCallback)(args);
}
}
extern "C" s32 lbl_80574EE8;
// TODO headers
extern "C" void fn_803D9400(void *a, void *b);
extern "C" void fn_803F2040(void *a, int b);
extern "C" void fn_803F26B0(int a, void *b);
/* 0x80499D10 */ CoreControllerMgr::CoreControllerMgr() {
/* 0x80499D10 */
CoreControllerMgr::CoreControllerMgr() {
const int idxes[] = {0, 1, 2, 3};
if (sUseBuiltinWpadAllocator == false) {
Heap *heap = ExpHeap::create(lbl_80574EE8, BaseSystem::mConfigData->mRootHeapMem2, 0);
Heap *heap = ExpHeap::create(sWPADWorkSize, BaseSystem::mConfigData->mRootHeapMem2, 0);
heap->mName = "EGG::CoreControllerMgr";
sWPADAllocator = new Allocator(heap, 0x20);
fn_803D9400(allocThunk, deleteThunk);
sAllocator = new Allocator(heap, 0x20);
WPADRegisterAllocator(alloc, free);
}
fn_803F2040(field_0x20, 0x40);
KPADInitEx(field_0x20, 0x40);
beginFrame();
endFrame();
VIWaitForRetrace();
for (int i = 0; i < 4; i++) {
fn_803F26B0(idxes[i], connectCallback);
KPADSetConnectCallback(idxes[i], connectCallback);
}
// TODO these allocate calls cause the relevant inline buffer functions to be moved
// from the bottom of the TU to after this ctor. How to fix?
mControllers.allocate(4, 0);
for (int i = 0; i < 4; i++) {
if (sCoreControllerFactory != nullptr) {
@@ -232,133 +381,166 @@ extern "C" void fn_803F26B0(int a, void *b);
mControllers(i)->mChannelID = idxes[i];
mDevTypes(i) = (eCoreDevType)0xfd;
}
field_0x10A0 = 0;
field_0x10A0 = nullptr;
}
/* 0x8049A130 */ void CoreControllerMgr::beginFrame() {
/* 0x8049A130 */
void CoreControllerMgr::beginFrame() {
for (int i = 0; i < mControllers.getSize(); ++i) {
mControllers(i)->beginFrame(NULL);
}
}
/* 0x8049A1E0 */ void CoreControllerMgr::endFrame() {
/* 0x8049A1E0 */
void CoreControllerMgr::endFrame() {
for (int i = 0; i < mControllers.mSize; i++) {
mControllers(i)->endFrame();
// TODO WPADprobe
// Update device type after probe?
WPADDeviceType dev_type;
s32 result = WPADProbe(i, &dev_type);
WPADDeviceType res_dev_type;
if (result == WPAD_ERR_OK) {
res_dev_type = dev_type;
} else if (result == WPAD_ERR_NO_CONTROLLER) {
res_dev_type = WPAD_DEV_NONE;
} else {
continue;
}
if (field_0x10A0) {
if (res_dev_type != mDevTypes(i)) {
s32 sp0C[3];
sp0C[0] = res_dev_type;
sp0C[1] = mDevTypes(i);
sp0C[2] = i;
field_0x10A0->v_08(sp0C);
}
}
mDevTypes(i) = (eCoreDevType)res_dev_type;
}
}
/* 0x8049A3B0 */ void ControllerRumbleUnit::init() {
this->mPattern = nullptr;
this->mPatternPos = nullptr;
this->mTimer = 0;
this->mIntensity = 0.0;
this->mRampUp = 0.0;
this->mFlag.makeAllZero();
/* 0x8049A3B0 */
void ControllerRumbleUnit::init() {
mPattern = nullptr;
mPatternPos = nullptr;
mTimer = 0;
mIntensity = 0.0;
mRampUp = 0.0;
mFlag.makeAllZero();
}
/* 0x8049A3E0 */ void ControllerRumbleUnit::startPattern(const char *pattern, int duration) {
this->mPattern = pattern;
this->mPatternPos = pattern;
/* 0x8049A3E0 */
void ControllerRumbleUnit::startPattern(const char *pattern, int duration) {
mPattern = pattern;
mPatternPos = pattern;
this->mFlag.value &= 0xef;
this->mFlag.value &= 0xdf;
mFlag.value &= 0xef;
mFlag.value &= 0xdf;
if (duration < 0) {
this->mFlag.set(0x10);
mFlag.set(0x10);
} else if (duration > 0) {
this->mFlag.set(0x30);
mFlag.set(0x30);
}
this->mTimer = duration;
this->mFlag.value = ((this->mFlag.value | 0x01) & 0xfd) | 0x8;
mTimer = duration;
mFlag.setBit(0);
mFlag.resetBit(1);
mFlag.setBit(3);
}
/* 0x8049A440 */ f32 ControllerRumbleUnit::calc() {
/* 0x8049A440 */
f32 ControllerRumbleUnit::calc() {
f32 result = 0.0f;
if (this->mFlag.onBit(3)) {
if (this->mFlag.onBit(0)) {
char x = *++this->mPatternPos;
if (mFlag.onBit(3)) {
if (mFlag.onBit(0)) {
char x = *++mPatternPos;
if (x == '\0') {
if (this->mFlag.onBit(4)) {
this->mPatternPos = this->mPattern;
if (mFlag.onBit(4)) {
mPatternPos = mPattern;
} else {
this->mFlag.reset(~0xf7);
mFlag.resetBit(3);
}
} else if (x == '*') {
result = 1.0f;
}
if (this->mFlag.offBit(5)) {
if (mFlag.offBit(5)) {
return result;
}
if (--this->mTimer > 0) {
if (--mTimer > 0) {
return result;
}
this->mFlag.reset(~0xf7);
mFlag.resetBit(3);
return result;
} else {
f32 intensity = this->mIntensity + this->mRampUp;
this->mIntensity = intensity;
f32 intensity = mIntensity + mRampUp;
mIntensity = intensity;
if (intensity >= 1.0f) {
result = 1.0f;
this->mIntensity = 0.0f;
mIntensity = 0.0f;
}
// infinite flag?
if (this->mFlag.onBit(2)) {
if (mFlag.onBit(2)) {
return result;
}
if (--this->mTimer > 0) {
if (--mTimer > 0) {
return result;
}
}
this->mFlag.reset(~0xf7);
mFlag.resetBit(3);
return result;
} else {
return -1.0f;
}
}
/* 0x8049A530 */ ControllerRumbleMgr::ControllerRumbleMgr() {
this->mController = nullptr;
// TODO offsetof macro
List_Init(&this->mActiveUnitList, 0x1c);
List_Init(&this->mInactiveUnitList, 0x1c);
/* 0x8049A530 */
ControllerRumbleMgr::ControllerRumbleMgr() {
mController = nullptr;
List_Init(&mActiveUnitList, offsetof(ControllerRumbleUnit, mNode));
List_Init(&mInactiveUnitList, offsetof(ControllerRumbleUnit, mNode));
}
/* 0x8049A590 */ void ControllerRumbleMgr::createUnit(u8 numUnits, CoreController *ctrl) {
/* 0x8049A590 */
void ControllerRumbleMgr::createUnit(u8 numUnits, CoreController *ctrl) {
for (u8 created = 0; created < numUnits; created++) {
ControllerRumbleUnit *unit = new ControllerRumbleUnit();
List_Append(&this->mInactiveUnitList, unit);
List_Append(&mInactiveUnitList, unit);
}
this->mController = ctrl;
mController = ctrl;
}
/* 0x8049A620 */ void ControllerRumbleMgr::stop() {
this->mController->stopMotor();
while (List_GetSize(&this->mActiveUnitList) != 0) {
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit *>(List_GetNext(&this->mActiveUnitList, nullptr));
List_Remove(&this->mActiveUnitList, unit);
List_Append(&this->mInactiveUnitList, unit);
/* 0x8049A620 */
void ControllerRumbleMgr::stop() {
mController->stopMotor();
while (List_GetSize(&mActiveUnitList) != 0) {
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit *>(List_GetNext(&mActiveUnitList, nullptr));
List_Remove(&mActiveUnitList, unit);
List_Append(&mInactiveUnitList, unit);
}
}
/* 0x8049A690 */ void ControllerRumbleMgr::calc() {
if (List_GetSize(&this->mActiveUnitList) != 0) {
void *object = List_GetFirst(&this->mActiveUnitList);
/* 0x8049A690 */
void ControllerRumbleMgr::calc() {
if (List_GetSize(&mActiveUnitList) != 0) {
void *object = List_GetFirst(&mActiveUnitList);
f32 acc = 0.0f;
while (object != nullptr) {
ControllerRumbleUnit *unit = static_cast<ControllerRumbleUnit *>(object);
f32 x = unit->calc();
void *nextObject = List_GetNext(&this->mActiveUnitList, object);
void *nextObject = List_GetNext(&mActiveUnitList, object);
if (x < 0.0f) {
List_Remove(&this->mActiveUnitList, object);
List_Append(&this->mInactiveUnitList, object);
List_Remove(&mActiveUnitList, object);
List_Append(&mInactiveUnitList, object);
} else {
acc += x;
}
@@ -366,28 +548,30 @@ extern "C" void fn_803F26B0(int a, void *b);
}
if (acc >= 1.0f) {
this->mController->startMotor();
mController->startMotor();
} else {
this->mController->stopMotor();
mController->stopMotor();
}
}
}
/* 0x8049A7A0 */ void ControllerRumbleMgr::startPattern(const char *pattern, int duration, bool bGrabActive) {
/* 0x8049A7A0 */
void ControllerRumbleMgr::startPattern(const char *pattern, int duration, bool bGrabActive) {
EGG::ControllerRumbleUnit *unit = getUnitFromList(bGrabActive);
if (unit != nullptr) {
if (unit) {
unit->startPattern(pattern, duration);
}
}
/* 0x8049A7F0 */ ControllerRumbleUnit *ControllerRumbleMgr::getUnitFromList(bool bGrabActive) {
/* 0x8049A7F0 */
ControllerRumbleUnit *ControllerRumbleMgr::getUnitFromList(bool bGrabActive) {
void *first = List_GetFirst(&this->mInactiveUnitList);
if (first != nullptr) {
List_Remove(&this->mInactiveUnitList, first);
List_Append(&this->mActiveUnitList, first);
} else if (bGrabActive && (first = List_GetFirst(&this->mActiveUnitList), first != nullptr)) {
List_Remove(&this->mActiveUnitList, first);
List_Append(&this->mActiveUnitList, first);
if (first) {
List_Remove(&mInactiveUnitList, first);
List_Append(&mActiveUnitList, first);
} else if (bGrabActive && (first = List_GetFirst(&mActiveUnitList), first != nullptr)) {
List_Remove(&mActiveUnitList, first);
List_Append(&mActiveUnitList, first);
}
return static_cast<ControllerRumbleUnit *>(first);
+31 -38
View File
@@ -1,51 +1,43 @@
#include "egg/core/eggDisplay.h"
#include "nw4r/db/db_directPrint.h"
#include "egg/core/eggXfbManager.h"
#include "nw4r/db/db_directPrint.h"
#include "rvl/GX.h"
#include "rvl/OS/OSHardware.h"
extern "C" {
void PreRetraceCallback(u32 retraceCount) {
EGG::BaseSystem::getDisplay()->preVRetrace();
}
void PreRetraceCallback(u32 retraceCount) {
EGG::BaseSystem::getDisplay()->preVRetrace();
}
namespace EGG {
}
namespace EGG {
u32 Display::sTickPeriod = ((OS_BUS_CLOCK_SPEED >> 2)/125000)*300 >> 3;
u32 Display::sTickPeriod = ((OS_BUS_CLOCK_SPEED >> 2) / 125000) * 300 >> 3;
/* 80497570 */
Display::Display(u8 maxRetrace) :
mMaxRetraces(maxRetrace),
mScreenStateFlag(0),
mRetraceCount(0),
mFrameCount(0),
mClearColor(0x808080ff),
mClearZ(0xFFFFFF),
mBeginTick(0),
mFlag(0)
{
/* 80497570 */
Display::Display(u8 maxRetrace)
: mMaxRetraces(maxRetrace), mScreenStateFlag(0), mRetraceCount(0), mFrameCount(0), mClearColor(0x808080ff),
mClearZ(0xFFFFFF), mBeginTick(0), mFlag(0) {
mFlag.setBit(mFlag_SetClear);
mFlag.setBit(mFlag_WaitForRetrace);
nw4r::db::DirectPrint_Init();
VISetPreRetraceCallback(PreRetraceCallback);
}
/* vt 0x18 | 804975f0 */
/* vt 0x18 | 804975f0 */
u32 Display::getTickPerFrame() {
return Video::getTickPerVRetrace();
}
/* vt 0x08 | 80497600 */
/* vt 0x08 | 80497600 */
void Display::beginFrame() {
GXDrawDone();
if (
mFlag.onBit(mFlag_WaitForRetrace)
|| (BaseSystem::getXfbMgr()->mNumXfbs == 1
&& OSGetTick()-mLastTick > sTickPeriod)) {
VIWaitForRetrace();
if (mFlag.onBit(mFlag_WaitForRetrace) ||
(BaseSystem::getXfbMgr()->mNumXfbs == 1 && OSGetTick() - mLastTick > sTickPeriod)) {
VIWaitForRetrace();
}
// Holds while the next XFB gets to its copy state
while (BaseSystem::getXfbMgr()->mToCopyXfb == 0 ) {
while (BaseSystem::getXfbMgr()->mToCopyXfb == 0) {
VIWaitForRetrace();
}
copyEFBtoXFB();
@@ -53,26 +45,27 @@ void Display::beginFrame() {
mFrameCount++;
}
/* vt 0x0C | 804976c0 */
/* vt 0x0C | 804976c0 */
void Display::beginRender() {
return;
}
/* vt 0x10 | 804976d0 */
/* vt 0x10 | 804976d0 */
void Display::endRender() {
return;
}
}
/* vt 0x14 | 804976e0 */
/* vt 0x14 | 804976e0 */
void Display::endFrame() {
return;
}
/* vt 0x1C | 804976f0 */
/* vt 0x1C | 804976f0 */
void Display::preVRetrace() {
mLastTick = OSGetTick();
if (VIGetRetraceCount() - mRetraceCount < mMaxRetraces) return;
if (VIGetRetraceCount() - mRetraceCount < mMaxRetraces) {
return;
}
if (mScreenStateFlag.onBit(mScreenStateFlag_SetBlack)) {
BaseSystem::getVideo()->setBlack(1);
mScreenStateFlag.resetBit(mScreenStateFlag_SetBlack);
@@ -81,20 +74,20 @@ void Display::preVRetrace() {
mRetraceCount = VIGetRetraceCount();
}
/* 804977d0 */
/* 804977d0 */
void Display::copyEFBtoXFB() {
if (mFlag.onBit(mFlag_SetClear)) {
if (mFlag.onBit(mFlag_SetClear)) {
GXSetCopyClear(mClearColor, mClearZ);
}
GXRenderModeObj const* renderObj = BaseSystem::getVideo()->pRenderMode;
GXRenderModeObj const *renderObj = BaseSystem::getVideo()->pRenderMode;
GXSetCopyFilter(renderObj->aa, renderObj->sample_pattern, renderObj->aa == 0, renderObj->vfilter);
BaseSystem::getXfbMgr()->copyEFB(mFlag.onBit(mFlag_SetClear));
}
/* 80497870 */
/* 80497870 */
void Display::calcFrequency() {
s32 endTick = OSGetTick();
mDeltaTick = endTick-mBeginTick;
mDeltaTick = endTick - mBeginTick;
mFrequency = 1000000.0f / ((mDeltaTick * 8) / ((OS_BUS_CLOCK_SPEED >> 2) / 125000));
mBeginTick = endTick;
}
+101
View File
@@ -0,0 +1,101 @@
#include <egg/core/eggDvdFile.h>
namespace EGG {
bool DvdFile::sIsInitialized;
nw4r::ut::List DvdFile::sDvdList;
void DvdFile::initialize() {
if (!sIsInitialized) {
nw4r::ut::List_Init(&sDvdList, offsetof(DvdFile, mNode));
sIsInitialized = true;
}
}
DvdFile::DvdFile() {
initiate();
}
DvdFile::~DvdFile() {
close();
}
void DvdFile::initiate() {
mFileInfo.dvdFile = this;
OSInitMutex(&mMutex);
OSInitMutex(&mMutexUnused);
OSInitMessageQueue(&mMsgQueue, &mMsg, 1);
OSInitMessageQueue(&mMsgQueueUnsued, &mMsgUnused, 1);
mThread = nullptr;
field_0x38 = 0;
}
bool DvdFile::open(s32 entryId) {
if (!mIsOpen && entryId != -1) {
s32 res = DVDFastOpen(entryId, &mFileInfo);
mIsOpen = res;
if (mIsOpen) {
nw4r::ut::List_Append(&sDvdList, this);
s32 _status = DVDGetCommandBlockStatus(&mFileInfo.block);
}
}
return mIsOpen;
}
bool DvdFile::open(const char *path) {
return open(DVDConvertPathToEntrynum(path));
}
bool DvdFile::open(const char *path, void *) {
return open(path);
}
void DvdFile::close() {
if (mIsOpen && DVDClose(&mFileInfo)) {
mIsOpen = false;
nw4r::ut::List_Remove(&sDvdList, this);
}
}
s32 DvdFile::readData(void *buffer, s32 length, s32 offset) {
OSLockMutex(&mMutex);
if (mThread) {
OSUnlockMutex(&mMutex);
return -1;
}
mThread = OSGetCurrentThread();
s32 res = -1;
if (DVDReadAsyncPrio(&mFileInfo, buffer, length, offset, doneProcess, DVD_PRIO_MEDIUM)) {
res = sync();
}
mThread = nullptr;
OSUnlockMutex(&mMutex);
return res;
}
s32 DvdFile::writeData(const void *buffer, s32 length, s32 offset) {
return -1;
}
s32 DvdFile::sync() {
OSMessage msg;
OSLockMutex(&mMutex);
OSReceiveMessage(&mMsgQueue, &msg, OS_MSG_PERSISTENT);
mThread = nullptr;
OSUnlockMutex(&mMutex);
return (s32)(msg);
}
void DvdFile::doneProcess(s32 result, DVDFileInfo *pFileInfo) {
OSSendMessage(&((FileInfo *)pFileInfo)->dvdFile->mMsgQueue, (OSMessage)result, 0);
}
u32 DvdFile::getFileSize() const {
return mFileInfo.size;
}
} // namespace EGG

Some files were not shown because too many files have changed in this diff Show More