Files
PS2Recomp/ps2xRuntime/include/ps2_call_list.h
T
Ranieri 790aaf4cda feat: invert codegen hight to low convertion (#131)
* feat: invert codegen hight to low convertion
feat: added copy and GetEntryAddress
feat: handle truncated DMAC

* feat: always use address on analyzer now

* feat: correct pick syscalls ID

* feat: added deci2Call

* feat: added wip dbcmain IOP

* feat: added InitTLB
feat: added err logs on thread for debug sus crash

* fix: fix SetupHeap for strange cases

* feat: fix incorrect SetupHeap test(it use a wrong idea on how heap allocate memory)

* feat: added memalign and memalign_r
feat: added GetOsdConfigParam2 and  SetOsdConfigParam2 but idk if was a good idea

* feat: added more memory stuff

* feat: back to library functions
2026-06-13 16:39:39 -03:00

695 lines
30 KiB
C++

#pragma once
#include <cstdint>
// I know ugly, but will work for now.
#define PS2_SYSCALL_LIST(X) \
X(FlushCache) \
X(iFlushCache) \
X(ResetEE) \
X(SetMemoryMode) \
\
X(InitThread) \
X(CreateThread) \
X(DeleteThread) \
X(StartThread) \
X(ExitThread) \
X(ExitDeleteThread) \
X(TerminateThread) \
X(SuspendThread) \
X(ResumeThread) \
X(GetThreadId) \
X(ReferThreadStatus) \
X(iReferThreadStatus) \
X(SleepThread) \
X(WakeupThread) \
X(iWakeupThread) \
X(CancelWakeupThread) \
X(iCancelWakeupThread) \
X(ChangeThreadPriority) \
X(iChangeThreadPriority) \
X(RotateThreadReadyQueue) \
X(iRotateThreadReadyQueue) \
X(ReleaseWaitThread) \
X(iReleaseWaitThread) \
\
X(CreateSema) \
X(DeleteSema) \
X(SignalSema) \
X(iSignalSema) \
X(WaitSema) \
X(PollSema) \
X(iPollSema) \
X(ReferSemaStatus) \
X(iReferSemaStatus) \
\
X(CreateEventFlag) \
X(DeleteEventFlag) \
X(SetEventFlag) \
X(iSetEventFlag) \
X(ClearEventFlag) \
X(iClearEventFlag) \
X(WaitEventFlag) \
X(PollEventFlag) \
X(iPollEventFlag) \
X(ReferEventFlagStatus) \
X(iReferEventFlagStatus) \
\
X(InitAlarm) \
X(SetAlarm) \
X(iSetAlarm) \
X(CancelAlarm) \
X(iCancelAlarm) \
X(ReleaseAlarm) \
X(iReleaseAlarm) \
\
X(AddIntcHandler) \
X(AddIntcHandler2) \
X(RemoveIntcHandler) \
X(AddDmacHandler) \
X(AddDmacHandler2) \
X(RemoveDmacHandler) \
X(EnableIntc) \
X(iEnableIntc) \
X(DisableIntc) \
X(iDisableIntc) \
X(EnableDmac) \
X(iEnableDmac) \
X(DisableDmac) \
X(iDisableDmac) \
\
X(SifStopModule) \
X(SifLoadModule) \
X(SifInitRpc) \
X(SifBindRpc) \
X(SifCallRpc) \
X(SifRegisterRpc) \
X(SifCheckStatRpc) \
X(SifSetRpcQueue) \
X(SifRemoveRpcQueue) \
X(SifRemoveRpc) \
X(sceSifCallRpc) \
X(sceSifSendCmd) \
X(sceRpcGetPacket) \
\
X(fioOpen) \
X(fioClose) \
X(fioRead) \
X(fioWrite) \
X(fioLseek) \
X(fioMkdir) \
X(fioChdir) \
X(fioRmdir) \
X(fioGetstat) \
X(fioRemove) \
\
X(SetGsCrt) \
X(GsSetCrt) \
X(GsGetIMR) \
X(iGsGetIMR) \
X(GsPutIMR) \
X(iGsPutIMR) \
X(SetVSyncFlag) \
X(SetSyscall) \
X(GsSetVideoMode) \
\
X(GetOsdConfigParam) \
X(SetOsdConfigParam) \
X(GetOsdConfigParam2) \
X(SetOsdConfigParam2) \
X(EnableCache) \
X(DisableCache) \
X(GetRomName) \
X(SifLoadElfPart) \
X(sceSifLoadElf) \
X(sceSifLoadElfPart) \
X(sceSifLoadModule) \
X(sceSifLoadModuleBuffer) \
\
X(SetupThread) \
X(EndOfHeap) \
X(GetMemorySize) \
X(InitTLB) \
X(Deci2Call) \
X(QueryBootMode) \
X(GetThreadTLS) \
X(Copy) \
X(GetEntryAddress) \
X(RegisterExitHandler)
// Stubs
#define PS2_STUB_LIST(X) \
/* Std/Libc */ \
X(ret0) \
X(ret1) \
X(reta0) \
X(calloc_r) \
X(free_r) \
X(realloc_r) \
X(memalign_r) \
X(malloc_r) \
X(malloc_extend_top) \
X(malloc_trim_r) \
X(mbtowc_r) \
X(printf_r) \
X(__malloc_lock) \
X(__malloc_unlock) \
X(abs) \
X(__ieee754_rem_pio2f) \
X(__kernel_cosf) \
X(__kernel_sinf) \
X(atan) \
X(atan2) \
X(calloc) \
X(ceil) \
X(close) \
X(cos) \
X(exit) \
X(exp) \
X(fabs) \
X(fclose) \
X(fflush) \
X(floor) \
X(fopen) \
X(fprintf) \
X(fread) \
X(free) \
X(fseek) \
X(fstat) \
X(ftell) \
X(fwrite) \
X(getpid) \
X(log) \
X(log10) \
X(lseek) \
X(malloc) \
X(memalign) \
X(memclr) \
X(memchr) \
X(memcmp) \
X(memcpy) \
X(memmove) \
X(memset) \
X(open) \
X(pow) \
X(printf) \
X(puts) \
X(rand) \
X(read) \
X(realloc) \
X(sin) \
X(snprintf) \
X(sprintf) \
X(sqrt) \
X(srand) \
X(stat) \
X(strcasecmp) \
X(strcat) \
X(strchr) \
X(strcmp) \
X(strcpy) \
X(strlen) \
X(strncat) \
X(strncmp) \
X(strncpy) \
X(strrchr) \
X(strstr) \
X(tan) \
X(vfprintf) \
X(vsprintf) \
X(write) \
X(__divdi3) \
/* PS2 native */ \
X(DmaAddr) \
X(builtin_set_imask) \
X(sceCdRI) \
X(sceCdRM) \
X(sceDevVif0Reset) \
X(sceDevVu0Reset) \
X(sceFsDbChk) \
X(sceFsIntrSigSema) \
X(sceFsSemExit) \
X(sceFsSemInit) \
X(sceFsSigSema) \
X(sceIDC) \
X(sceMpegFlush) \
X(sceRpcFreePacket) \
X(sceRpcGetFPacket) \
X(sceRpcGetFPacket2) \
X(sceSDC) \
X(sceSifCmdIntrHdlr) \
X(sceSifLoadElfPart) \
X(sceSifLoadModule) \
X(sceSifSendCmd) \
X(sceVu0ecossin) \
X(mcCallMessageTypeSe) \
X(mcCheckReadStartConfigFile) \
X(mcCheckReadStartSaveFile) \
X(mcCheckWriteStartConfigFile) \
X(mcCheckWriteStartSaveFile) \
X(mcCreateConfigInit) \
X(mcCreateFileSelectWindow) \
X(mcCreateIconInit) \
X(mcCreateSaveFileInit) \
X(mcDispFileName) \
X(mcDispFileNumber) \
X(mcDispWindowCurSol) \
X(mcDispWindowFoundtion) \
X(mcDisplayFileSelectWindow) \
X(mcDisplaySelectFileInfo) \
X(mcDisplaySelectFileInfoMesCount) \
X(mcGetConfigCapacitySize) \
X(mcGetFileSelectWindowCursol) \
X(mcGetFreeCapacitySize) \
X(mcGetIconCapacitySize) \
X(mcGetIconFileCapacitySize) \
X(mcGetPortSelectDirInfo) \
X(mcGetSaveFileCapacitySize) \
X(mcGetStringEnd) \
X(mcMoveFileSelectWindowCursor) \
X(mcNewCreateConfigFile) \
X(mcNewCreateIcon) \
X(mcNewCreateSaveFile) \
X(mcReadIconData) \
X(mcReadStartConfigFile) \
X(mcReadStartSaveFile) \
X(mcSelectFileInfoInit) \
X(mcSelectSaveFileCheck) \
X(mcSetFileSelectWindowCursol) \
X(mcSetFileSelectWindowCursolInit) \
X(mcSetStringSaveFile) \
X(mcSetTyepWriteMode) \
X(mcWriteIconData) \
X(mcWriteStartConfigFile) \
X(mcWriteStartSaveFile) \
X(mceGetInfoApdx) \
X(mceIntrReadFixAlign) \
X(mceStorePwd) \
X(sceCdApplyNCmd) \
X(sceCdBreak) \
X(sceCdCallback) \
X(sceCdChangeThreadPriority) \
X(sceCdDelayThread) \
X(sceCdDiskReady) \
X(sceCdGetDiskType) \
X(sceCdGetError) \
X(sceCdGetReadPos) \
X(sceCdGetToc) \
X(sceCdInit) \
X(sceCdInitEeCB) \
X(sceCdIntToPos) \
X(sceCdMmode) \
X(sceCdNcmdDiskReady) \
X(sceCdPause) \
X(sceCdPosToInt) \
X(sceCdRead) \
X(sceCdReadChain) \
X(sceCdReadClock) \
X(sceCdReadIOPm) \
X(sceCdSearchFile) \
X(sceCdSeek) \
X(sceCdStInit) \
X(sceCdStPause) \
X(sceCdStRead) \
X(sceCdStResume) \
X(sceCdStSeek) \
X(sceCdStSeekF) \
X(sceCdStStart) \
X(sceCdStStat) \
X(sceCdStStop) \
X(sceCdStandby) \
X(sceCdStatus) \
X(sceCdStop) \
X(sceCdStream) \
X(sceCdSync) \
X(sceCdSyncS) \
X(sceCdTrayReq) \
X(sceClose) \
X(sceDeci2Close) \
X(sceDeci2ExLock) \
X(sceDeci2ExRecv) \
X(sceDeci2ExReqSend) \
X(sceDeci2ExSend) \
X(sceDeci2ExUnLock) \
X(sceDeci2Open) \
X(sceDeci2Poll) \
X(sceDeci2ReqSend) \
X(sceDmaCallback) \
X(sceDmaDebug) \
X(sceDmaGetChan) \
X(sceDmaGetEnv) \
X(sceDmaLastSyncTime) \
X(sceDmaPause) \
X(sceDmaPutEnv) \
X(sceDmaPutStallAddr) \
X(sceDmaRecv) \
X(sceDmaRecvI) \
X(sceDmaRecvN) \
X(sceDmaReset) \
X(sceDmaRestart) \
X(sceDmaSend) \
X(sceDmaSendI) \
X(sceDmaSendM) \
X(sceDmaSendN) \
X(sceDmaSync) \
X(sceDmaSyncN) \
X(sceDmaWatch) \
X(sceFsInit) \
X(sceFsReset) \
X(sceGifPkAddGsAD) \
X(sceGifPkAddGsData) \
X(sceGifPkCloseGifTag) \
X(sceGifPkCnt) \
X(sceGifPkEnd) \
X(sceGifPkInit) \
X(sceGifPkOpenGifTag) \
X(sceGifPkRef) \
X(sceGifPkRefLoadImage) \
X(sceGifPkReset) \
X(sceGifPkReserve) \
X(sceGifPkTerminate) \
X(sceGsExecLoadImage) \
X(sceGsExecStoreImage) \
X(sceGsGetGParam) \
X(sceGsPutDispEnv) \
X(sceGsPutDrawEnv) \
X(sceGsResetGraph) \
X(sceGsResetPath) \
X(sceGsSetDefClear) \
X(sceGsSetDefDBuffDc) \
X(sceGsSetDefDBuff) \
X(sceGsSetDefDispEnv) \
X(sceGsSetDefDrawEnv) \
X(sceGsSetDefDrawEnv2) \
X(sceGsSetDefLoadImage) \
X(sceGsSetDefStoreImage) \
X(sceGsSwapDBuffDc) \
X(sceGsSwapDBuff) \
X(sceGsSyncPath) \
X(sceGsSyncV) \
X(sceGsSyncVCallback) \
X(sceGszbufaddr) \
X(sceVif1PkAddGsAD) \
X(sceVif1PkAlign) \
X(sceVif1PkCall) \
X(sceVif1PkCloseDirectCode) \
X(sceVif1PkCloseGifTag) \
X(sceVif1PkCnt) \
X(sceVif1PkEnd) \
X(sceVif1PkInit) \
X(sceVif1PkOpenDirectCode) \
X(sceVif1PkOpenGifTag) \
X(sceVif1PkReset) \
X(sceVif1PkReserve) \
X(sceVif1PkTerminate) \
X(sceeFontInit) \
X(sceeFontLoadFont) \
X(sceeFontPrintfAt) \
X(sceeFontPrintfAt2) \
X(sceeFontGenerateString) \
X(sceeFontClose) \
X(sceeFontSetColour) \
X(sceeFontSetMode) \
X(sceeFontSetFont) \
X(sceeFontSetScale) \
X(sceIoctl) \
X(sceIpuInit) \
X(sceIpuRestartDMA) \
X(sceIpuStopDMA) \
X(sceIpuSync) \
X(sceLseek) \
X(sceMcChangeThreadPriority) \
X(sceMcChdir) \
X(sceMcClose) \
X(sceMcDelete) \
X(sceMcEnd) \
X(sceMcFlush) \
X(sceMcFormat) \
X(sceMcGetDir) \
X(sceMcGetEntSpace) \
X(sceMcGetInfo) \
X(sceMcGetSlotMax) \
X(sceMcInit) \
X(sceMcMkdir) \
X(sceMcOpen) \
X(sceMcRead) \
X(sceMcRename) \
X(sceMcSeek) \
X(sceMcSetFileInfo) \
X(sceMcSync) \
X(sceMcUnformat) \
X(sceMcWrite) \
X(sceMpegAddBs) \
X(sceMpegAddCallback) \
X(sceMpegAddStrCallback) \
X(sceMpegClearRefBuff) \
X(sceMpegCreate) \
X(sceMpegDelete) \
X(sceMpegDemuxPss) \
X(sceMpegDemuxPssRing) \
X(sceMpegDispCenterOffX) \
X(sceMpegDispCenterOffY) \
X(sceMpegDispHeight) \
X(sceMpegDispWidth) \
X(sceMpegGetDecodeMode) \
X(sceMpegGetPicture) \
X(sceMpegGetPictureRAW8) \
X(sceMpegGetPictureRAW8xy) \
X(sceMpegInit) \
X(sceMpegIsEnd) \
X(sceMpegIsRefBuffEmpty) \
X(sceMpegReset) \
X(sceMpegResetDefaultPtsGap) \
X(sceMpegSetDecodeMode) \
X(sceMpegSetDefaultPtsGap) \
X(sceMpegSetImageBuff) \
X(sceOpen) \
X(scePadEnd) \
X(scePadEnterPressMode) \
X(scePadExitPressMode) \
X(scePadGetButtonMask) \
X(scePadGetDmaStr) \
X(scePadGetFrameCount) \
X(scePadGetModVersion) \
X(scePadGetPortMax) \
X(scePadGetReqState) \
X(scePadGetSlotMax) \
X(scePadGetState) \
X(scePadInfoAct) \
X(scePadInfoComb) \
X(scePadInfoMode) \
X(scePadInfoPressMode) \
X(scePadInit) \
X(scePadInit2) \
X(scePadPortClose) \
X(scePadPortOpen) \
X(scePadRead) \
X(scePadReqIntToStr) \
X(scePadSetActAlign) \
X(scePadSetActDirect) \
X(scePadSetButtonInfo) \
X(scePadSetMainMode) \
X(scePadSetReqState) \
X(scePadSetVrefParam) \
X(scePadSetWarningLevel) \
X(scePadStateIntToStr) \
X(scePrintf) \
X(sceRead) \
X(sceResetttyinit) \
X(sceSSyn_BreakAtick) \
X(sceSSyn_ClearBreakAtick) \
X(sceSSyn_SendExcMsg) \
X(sceSSyn_SendNrpnMsg) \
X(sceSSyn_SendRpnMsg) \
X(sceSSyn_SendShortMsg) \
X(sceSSyn_SetChPriority) \
X(sceSSyn_SetMasterVolume) \
X(sceSSyn_SetOutPortVolume) \
X(sceSSyn_SetOutputAssign) \
X(sceSSyn_SetOutputMode) \
X(sceSSyn_SetPortMaxPoly) \
X(sceSSyn_SetPortVolume) \
X(sceSSyn_SetTvaEnvMode) \
X(sceSdCallBack) \
X(sceSdRemote) \
X(sceSdRemoteInit) \
X(sceSdTransToIOP) \
X(sceSetBrokenLink) \
X(sceSetPtm) \
X(sceSifAddCmdHandler) \
X(sceSifAllocIopHeap) \
X(sceSifAllocSysMemory) \
X(sceSifBindRpc) \
X(sceSifCheckStatRpc) \
X(sceSifDmaStat) \
X(sceSifExecRequest) \
X(sceSifExitCmd) \
X(sceSifExitRpc) \
X(sceSifFreeIopHeap) \
X(sceSifFreeSysMemory) \
X(sceSifGetDataTable) \
X(sceSifGetIopAddr) \
X(sceSifGetNextRequest) \
X(sceSifGetOtherData) \
X(sceSifGetReg) \
X(sceSifGetSreg) \
X(sceSifInitCmd) \
X(sceSifInitIopHeap) \
X(sceSifInitRpc) \
X(sceSifIsAliveIop) \
X(sceSifLoadElf) \
X(sceSifLoadElfPart) \
X(sceSifLoadFileReset) \
X(sceSifLoadIopHeap) \
X(sceSifLoadModuleBuffer) \
X(sceSifRebootIop) \
X(sceSifRegisterRpc) \
X(sceSifRemoveCmdHandler) \
X(sceSifRemoveRpc) \
X(sceSifRemoveRpcQueue) \
X(sceSifResetIop) \
X(sceSifRpcLoop) \
X(sceSifSetCmdBuffer) \
X(sceSifSetDChain) \
X(sceSifSetDma) \
X(isceSifSetDChain) \
X(isceSifSetDma) \
X(sceSifSetIopAddr) \
X(sceSifSetReg) \
X(sceSifSetRpcQueue) \
X(sceSifSetSreg) \
X(sceSifSetSysCmdBuffer) \
X(sceSifStopDma) \
X(sceSifSyncIop) \
X(sceSifWriteBackDCache) \
X(sceSynthSizerLfoTriangle) \
X(sceSynthesizerAmpProcI) \
X(sceSynthesizerAmpProcNI) \
X(sceSynthesizerAssignAllNoteOff) \
X(sceSynthesizerAssignAllSoundOff) \
X(sceSynthesizerAssignHoldChange) \
X(sceSynthesizerAssignNoteOff) \
X(sceSynthesizerAssignNoteOn) \
X(sceSynthesizerCalcEnv) \
X(sceSynthesizerCalcPortamentPitch) \
X(sceSynthesizerCalcTvfCoefAll) \
X(sceSynthesizerCalcTvfCoefF0) \
X(sceSynthesizerCent2PhaseInc) \
X(sceSynthesizerChangeEffectSend) \
X(sceSynthesizerChangeHsPanpot) \
X(sceSynthesizerChangeNrpnCutOff) \
X(sceSynthesizerChangeNrpnLfoDepth) \
X(sceSynthesizerChangeNrpnLfoRate) \
X(sceSynthesizerChangeOutAttrib) \
X(sceSynthesizerChangeOutVol) \
X(sceSynthesizerChangePanpot) \
X(sceSynthesizerChangePartBendSens) \
X(sceSynthesizerChangePartExpression) \
X(sceSynthesizerChangePartHsExpression) \
X(sceSynthesizerChangePartHsPitchBend) \
X(sceSynthesizerChangePartModuration) \
X(sceSynthesizerChangePartPitchBend) \
X(sceSynthesizerChangePartVolume) \
X(sceSynthesizerChangePortamento) \
X(sceSynthesizerChangePortamentoTime) \
X(sceSynthesizerClearKeyMap) \
X(sceSynthesizerClearSpr) \
X(sceSynthesizerCopyOutput) \
X(sceSynthesizerDmaFromSPR) \
X(sceSynthesizerDmaSpr) \
X(sceSynthesizerDmaToSPR) \
X(sceSynthesizerGetPartOutLevel) \
X(sceSynthesizerGetPartial) \
X(sceSynthesizerGetSampleParam) \
X(sceSynthesizerHsMessage) \
X(sceSynthesizerLfoNone) \
X(sceSynthesizerLfoProc) \
X(sceSynthesizerLfoSawDown) \
X(sceSynthesizerLfoSawUp) \
X(sceSynthesizerLfoSquare) \
X(sceSynthesizerReadNoise) \
X(sceSynthesizerReadNoiseAdd) \
X(sceSynthesizerReadSample16) \
X(sceSynthesizerReadSample16Add) \
X(sceSynthesizerReadSample8) \
X(sceSynthesizerReadSample8Add) \
X(sceSynthesizerResetPart) \
X(sceSynthesizerRestorDma) \
X(sceSynthesizerSelectPatch) \
X(sceSynthesizerSendShortMessage) \
X(sceSynthesizerSetMasterVolume) \
X(sceSynthesizerSetRVoice) \
X(sceSynthesizerSetupDma) \
X(sceSynthesizerSetupLfo) \
X(sceSynthesizerSetupMidiModuration) \
X(sceSynthesizerSetupMidiPanpot) \
X(sceSynthesizerSetupNewNoise) \
X(sceSynthesizerSetupReleaseEnv) \
X(sceSynthesizerSetupTruncateTvaEnv) \
X(sceSynthesizerSetupTruncateTvfPitchEnv) \
X(sceSynthesizerSetuptEnv) \
X(sceSynthesizerTonegenerator) \
X(sceSynthesizerTransposeMatrix) \
X(sceSynthesizerTvfProcI) \
X(sceSynthesizerTvfProcNI) \
X(sceSynthesizerWaitDmaFromSPR) \
X(sceSynthesizerWaitDmaToSPR) \
X(sceSynthsizerGetDrumPatch) \
X(sceSynthsizerGetMeloPatch) \
X(sceSynthsizerLfoNoise) \
X(sceTtyHandler) \
X(sceTtyInit) \
X(sceTtyRead) \
X(sceTtyWrite) \
X(sceVpu0Reset) \
X(sceVu0AddVector) \
X(sceVu0ApplyMatrix) \
X(sceVu0CameraMatrix) \
X(sceVu0ClampVector) \
X(sceVu0ClipAll) \
X(sceVu0ClipScreen) \
X(sceVu0ClipScreen3) \
X(sceVu0CopyMatrix) \
X(sceVu0CopyVector) \
X(sceVu0CopyVectorXYZ) \
X(sceVu0DivVector) \
X(sceVu0DivVectorXYZ) \
X(sceVu0DropShadowMatrix) \
X(sceVu0FTOI0Vector) \
X(sceVu0FTOI4Vector) \
X(sceVu0ITOF0Vector) \
X(sceVu0ITOF12Vector) \
X(sceVu0ITOF4Vector) \
X(sceVu0InnerProduct) \
X(sceVu0InterVector) \
X(sceVu0InterVectorXYZ) \
X(sceVu0InversMatrix) \
X(sceVu0LightColorMatrix) \
X(sceVu0MulMatrix) \
X(sceVu0MulVector) \
X(sceVu0NormalLightMatrix) \
X(sceVu0Normalize) \
X(sceVu0OuterProduct) \
X(sceVu0RotMatrix) \
X(sceVu0RotMatrixX) \
X(sceVu0RotMatrixY) \
X(sceVu0RotMatrixZ) \
X(sceVu0RotTransPers) \
X(sceVu0RotTransPersN) \
X(sceVu0ScaleVector) \
X(sceVu0ScaleVectorXYZ) \
X(sceVu0SubVector) \
X(sceVu0TransMatrix) \
X(sceVu0TransposeMatrix) \
X(sceVu0UnitMatrix) \
X(sceVu0ViewScreenMatrix) \
X(sceWrite) \
/* Game/middleware */
// Test hooks: override pad input for scePadRead.
#define PS2_TEST_HOOK_LIST(X) \
X(setPadOverrideState, (uint16_t buttons, uint8_t lx, uint8_t ly, \
uint8_t rx, uint8_t ry)) \
X(clearPadOverrideState, (void))