Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions src/kernel/InitForKernel.S
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,38 @@
IMPORT_START "InitForKernel",0x00090000
#endif
#ifdef F_InitForKernel_0001
IMPORT_FUNC "InitForKernel",0x1D3256BA,sceKernelRegisterChunk
IMPORT_FUNC "InitForKernel",0x1D3256BA,sceKernelRegisterChunk
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'm staring at this and other similar hunks and fail to see any change - probably replaced a tab with a space or vice versa ?

Copy link
Contributor Author

@GrayJack GrayJack Jan 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is weird, this was not in the git diff and I did not change a single thing on this besides the function name changes. Maybe GitHub is using a different diff algo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This same thing hapenned on line 37 on Makefile.am

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe GitHub is using a different diff algo?

unlikely. could it be that you use a mac or windows pc and newlines \n were replaced with \r or \r\n, only on lines you touched ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I am on macOS, but my editor for sure in configured with LF line ending

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's the other way round - your editor replaced existing CRLF with LF. to find out
i condensed your commits into a single one (git rebase -i) and made a format-patch, which i then opened with hexedit.

000002E0   30 30 30 31  0A 2D 09 49  4D 50 4F 52  54 5F 46 55  0001.-.IMPORT_FU
000002F0   4E 43 09 22  49 6E 69 74  46 6F 72 4B  65 72 6E 65  NC."InitForKerne
00000300   6C 22 2C 30  78 31 44 33  32 35 36 42  41 2C 73 63  l",0x1D3256BA,sc
00000310   65 4B 65 72  6E 65 6C 52  65 67 69 73  74 65 72 43  eKernelRegisterC
00000320   68 75 6E 6B  **0D 0A** 2B 09  49 4D 50 4F  52 54 5F 46  hunk..+.IMPORT_F
00000330   55 4E 43 09  22 49 6E 69  74 46 6F 72  4B 65 72 6E  UNC."InitForKern
00000340   65 6C 22 2C  30 78 31 44  33 32 35 36  42 41 2C 73  el",0x1D3256BA,s
00000350   63 65 4B 65  72 6E 65 6C  52 65 67 69  73 74 65 72  ceKernelRegister
00000360   43 68 75 6E  6B **0A** 20 23  65 6E 64 69  66 0A 20 23  Chunk. #endif. #

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then it makes sense this diff, although it sure is not showing in the diff localy. Btw, it doesn't make sense, so far all files I tweaked (not only the ones I made PR), all of them are LF, why a random file is CRLF?

I'll "fix" this tomorrow. Thanks for finding this issue

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

although it sure is not showing in the diff localy.

that's likely because this PR consists of like 5 separate commits, i didnt see it either before i squashed them all together.

all files I tweaked (not only the ones I made PR), all of them are LF, why a random file is CRLF?

i think the file is a mix of CRLF and LF, most editors and tools don't care about it so it flies below the radar, but when a line is touched or added that line is changed to the editor's default. fixing it (to keep diffs minimal) either requires using a hexeditor that can insert new bytes at arbitrary positions such as hexedit, or squashing the commits into one like i did, and either 1) creating a format-patch, and removing the hunks with the line-end changes with an editor, then deleting the old commits and applying the patch, or 2) unstage the changes, and selectively re-adding hunks with git add --patch, which is likely more practical since the text gui allows to shrink hunks that span over multiple blocks with s.

#endif
#ifdef F_InitForKernel_0002
IMPORT_FUNC "InitForKernel",0x27932388,sceKernelBootFrom
IMPORT_FUNC "InitForKernel",0x27932388,sceKernelBootFrom
#endif
#ifdef F_InitForKernel_0003
IMPORT_FUNC "InitForKernel",0x2C6E9FE9,sceKernelGetChunk
IMPORT_FUNC "InitForKernel",0x2C6E9FE9,sceKernelGetChunk
#endif
#ifdef F_InitForKernel_0004
IMPORT_FUNC "InitForKernel",0x33D30F49,InitForKernel_33D30F49
IMPORT_FUNC "InitForKernel",0x33D30F49,sceKernelShowIntrHandlerInfo
#endif
#ifdef F_InitForKernel_0005
IMPORT_FUNC "InitForKernel",0x7233B5BC,InitForKernel_7233B5BC
IMPORT_FUNC "InitForKernel",0x7233B5BC,sceKernelApplicationType
#endif
#ifdef F_InitForKernel_0006
IMPORT_FUNC "InitForKernel",0x7A2333AD,sceKernelInitApitype
IMPORT_FUNC "InitForKernel",0x7A2333AD,sceKernelInitApitype
#endif
#ifdef F_InitForKernel_0007
IMPORT_FUNC "InitForKernel",0x9F9AE99C,InitForKernel_9F9AE99C
IMPORT_FUNC "InitForKernel",0x9F9AE99C,sceKernelSetInitCallback
#endif
#ifdef F_InitForKernel_0008
IMPORT_FUNC "InitForKernel",0xA6E71B93,sceKernelInitFileName
IMPORT_FUNC "InitForKernel",0xA6E71B93,sceKernelInitFileName
#endif
#ifdef F_InitForKernel_0009
IMPORT_FUNC "InitForKernel",0xC4F1BA33,InitForKernel_C4F1BA33
IMPORT_FUNC "InitForKernel",0xC4F1BA33,sceKernelStartIntrLogging
#endif
#ifdef F_InitForKernel_0010
IMPORT_FUNC "InitForKernel",0xCE88E870,sceKernelReleaseChunk
IMPORT_FUNC "InitForKernel",0xCE88E870,sceKernelReleaseChunk
#endif
#ifdef F_InitForKernel_0011
IMPORT_FUNC "InitForKernel",0xFD0F25AD,InitForKernel_FD0F25AD
#endif
IMPORT_FUNC "InitForKernel",0xFD0F25AD,sceKernelShowIntrMaskTime
#endif
#ifdef F_InitForKernel_0012
IMPORT_FUNC "InitForKernel",0x040C934B,sceKernelQueryInitCB
#endif
4 changes: 2 additions & 2 deletions src/kernel/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ SYSCLIB_OBJS = SysclibForKernel_0000.o SysclibForKernel_0001.o SysclibForKernel_

LOADEXEC_OBJS = LoadExecForKernel_0000.o LoadExecForKernel_0001.o LoadExecForKernel_0002.o LoadExecForKernel_0003.o LoadExecForKernel_0004.o LoadExecForKernel_0005.o LoadExecForKernel_0006.o LoadExecForKernel_0007.o LoadExecForKernel_0008.o LoadExecForKernel_0009.o LoadExecForKernel_0010.o LoadExecForKernel_0011.o LoadExecForKernel_0012.o LoadExecForKernel_0013.o LoadExecForKernel_0014.o LoadExecForKernel_0015.o LoadExecForKernel_0016.o LoadExecForKernel_0017.o LoadExecForKernel_0018.o LoadExecForKernel_0019.o LoadExecForKernel_0020.o LoadExecForKernel_0021.o LoadExecForKernel_0022.o LoadExecForKernel_0023.o LoadExecForKernel_0024.o LoadExecForKernel_0025.o LoadExecForKernel_0026.o

SYSMEM_OBJS = SysMemForKernel_0000.o SysMemForKernel_0001.o SysMemForKernel_0002.o SysMemForKernel_0003.o SysMemForKernel_0004.o SysMemForKernel_0005.o SysMemForKernel_0006.o SysMemForKernel_0007.o SysMemForKernel_0008.o SysMemForKernel_0009.o SysMemForKernel_0010.o SysMemForKernel_0011.o SysMemForKernel_0012.o SysMemForKernel_0013.o SysMemForKernel_0014.o SysMemForKernel_0015.o SysMemForKernel_0016.o SysMemForKernel_0017.o SysMemForKernel_0018.o SysMemForKernel_0019.o SysMemForKernel_0020.o SysMemForKernel_0021.o SysMemForKernel_0022.o SysMemForKernel_0023.o SysMemForKernel_0024.o SysMemForKernel_0025.o SysMemForKernel_0026.o SysMemForKernel_0027.o SysMemForKernel_0028.o SysMemForKernel_0029.o SysMemForKernel_0030.o SysMemForKernel_0031.o SysMemForKernel_0032.o SysMemForKernel_0033.o SysMemForKernel_0034.o SysMemForKernel_0035.o SysMemForKernel_0036.o SysMemForKernel_0037.o SysMemForKernel_0038.o SysMemForKernel_0039.o SysMemForKernel_0040.o SysMemForKernel_0041.o SysMemForKernel_0042.o SysMemForKernel_0043.o SysMemForKernel_0044.o SysMemForKernel_0045.o SysMemForKernel_0046.o SysMemForKernel_0047.o SysMemForKernel_0048.o SysMemForKernel_0049.o SysMemForKernel_0050.o SysMemForKernel_0051.o SysMemForKernel_0052.o SysMemForKernel_0053.o SysMemForKernel_0054.o SysMemForKernel_0055.o SysMemForKernel_0056.o SysMemForKernel_0057.o SysMemForKernel_0058.o SysMemForKernel_0059.o SysMemForKernel_0060.o SysMemForKernel_0061.o SysMemForKernel_0062.o SysMemForKernel_0063.o SysMemForKernel_0064.o SysMemForKernel_0065.o SysMemForKernel_0066.o SysMemForKernel_0067.o SysMemForKernel_0068.o SysMemForKernel_0069.o SysMemForKernel_0070.o SysMemForKernel_0071.o
SYSMEM_OBJS = SysMemForKernel_0000.o SysMemForKernel_0001.o SysMemForKernel_0002.o SysMemForKernel_0003.o SysMemForKernel_0004.o SysMemForKernel_0005.o SysMemForKernel_0006.o SysMemForKernel_0007.o SysMemForKernel_0008.o SysMemForKernel_0009.o SysMemForKernel_0010.o SysMemForKernel_0011.o SysMemForKernel_0012.o SysMemForKernel_0013.o SysMemForKernel_0014.o SysMemForKernel_0015.o SysMemForKernel_0016.o SysMemForKernel_0017.o SysMemForKernel_0018.o SysMemForKernel_0019.o SysMemForKernel_0020.o SysMemForKernel_0021.o SysMemForKernel_0022.o SysMemForKernel_0023.o SysMemForKernel_0024.o SysMemForKernel_0025.o SysMemForKernel_0026.o SysMemForKernel_0027.o SysMemForKernel_0028.o SysMemForKernel_0029.o SysMemForKernel_0030.o SysMemForKernel_0031.o SysMemForKernel_0032.o SysMemForKernel_0033.o SysMemForKernel_0034.o SysMemForKernel_0035.o SysMemForKernel_0036.o SysMemForKernel_0037.o SysMemForKernel_0038.o SysMemForKernel_0039.o SysMemForKernel_0040.o SysMemForKernel_0041.o SysMemForKernel_0042.o SysMemForKernel_0043.o SysMemForKernel_0044.o SysMemForKernel_0045.o SysMemForKernel_0046.o SysMemForKernel_0047.o SysMemForKernel_0048.o SysMemForKernel_0049.o SysMemForKernel_0050.o SysMemForKernel_0051.o SysMemForKernel_0052.o SysMemForKernel_0053.o SysMemForKernel_0054.o SysMemForKernel_0055.o SysMemForKernel_0056.o SysMemForKernel_0057.o SysMemForKernel_0058.o SysMemForKernel_0059.o SysMemForKernel_0060.o SysMemForKernel_0061.o SysMemForKernel_0062.o SysMemForKernel_0063.o SysMemForKernel_0064.o SysMemForKernel_0065.o SysMemForKernel_0066.o SysMemForKernel_0067.o SysMemForKernel_0068.o SysMemForKernel_0069.o SysMemForKernel_0070.o SysMemForKernel_0071.o

MODULE_OBJS = ModuleMgrForKernel_0000.o ModuleMgrForKernel_0001.o ModuleMgrForKernel_0002.o ModuleMgrForKernel_0003.o ModuleMgrForKernel_0004.o ModuleMgrForKernel_0005.o ModuleMgrForKernel_0006.o ModuleMgrForKernel_0007.o ModuleMgrForKernel_0008.o ModuleMgrForKernel_0009.o ModuleMgrForKernel_0010.o ModuleMgrForKernel_0011.o ModuleMgrForKernel_0012.o ModuleMgrForKernel_0013.o ModuleMgrForKernel_0014.o ModuleMgrForKernel_0015.o ModuleMgrForKernel_0016.o ModuleMgrForKernel_0017.o ModuleMgrForKernel_0018.o ModuleMgrForKernel_0019.o ModuleMgrForKernel_0020.o ModuleMgrForKernel_0021.o ModuleMgrForKernel_0022.o

Expand All @@ -46,7 +46,7 @@ SYSEVENT_OBJS = sceSysEventForKernel_0000.o sceSysEventForKernel_0001.o sceSysEv

IMPOSE_OBJS = sceImpose_driver_0000.o sceImpose_driver_0001.o sceImpose_driver_0002.o sceImpose_driver_0003.o sceImpose_driver_0004.o sceImpose_driver_0005.o sceImpose_driver_0006.o sceImpose_driver_0007.o sceImpose_driver_0008.o sceImpose_driver_0009.o sceImpose_driver_0010.o sceImpose_driver_0011.o sceImpose_driver_0012.o sceImpose_driver_0013.o sceImpose_driver_0014.o sceImpose_driver_0015.o sceImpose_driver_0016.o sceImpose_driver_0017.o sceImpose_driver_0018.o sceImpose_driver_0019.o sceImpose_driver_0020.o sceImpose_driver_0021.o sceImpose_driver_0022.o sceImpose_driver_0023.o

INIT_OBJS = InitForKernel_0000.o InitForKernel_0001.o InitForKernel_0002.o InitForKernel_0003.o InitForKernel_0004.o InitForKernel_0005.o InitForKernel_0006.o InitForKernel_0007.o InitForKernel_0008.o InitForKernel_0009.o InitForKernel_0010.o InitForKernel_0011.o
INIT_OBJS = InitForKernel_0000.o InitForKernel_0001.o InitForKernel_0002.o InitForKernel_0003.o InitForKernel_0004.o InitForKernel_0005.o InitForKernel_0006.o InitForKernel_0007.o InitForKernel_0008.o InitForKernel_0009.o InitForKernel_0010.o InitForKernel_0011.o InitForKernel_0012.o

AUDIOROUTING_OBJS = sceAudioRouting_driver_0000.o sceAudioRouting_driver_0001.o sceAudioRouting_driver_0002.o sceAudioRouting_driver_0003.o sceAudioRouting_driver_0004.o

Expand Down
72 changes: 67 additions & 5 deletions src/kernel/pspinit.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
#ifndef __PSPINIT_H__
#define __PSPINIT_H__

#include <psptypes.h>
#include <pspkerneltypes.h>
#include <psploadexec_kernel.h>

enum PSPBootFrom
{
PSP_BOOT_FLASH = 0, /* ? */
Expand Down Expand Up @@ -39,7 +43,56 @@ enum PSPKeyConfig
};

/**
* Gets the api type
* This structure represents an Init control block. It holds information about the
* currently booted module by Init.
*/
typedef struct SceInit {
/** The API type of the currently loaded module. One of ::SceInitApiType. */
s32 apitype; //0
/** The address of a memory protection block of type ::SCE_PROTECT_INFO_TYPE_FILE_NAME. */
void *file_mod_addr; //4
/** The address of a memory protection block of type ::SCE_PROTECT_INFO_TYPE_DISC_IMAGE. */
void *disc_mod_addr; //8
/** VSH parameters. Used to reboot the kernel. */
SceKernelLoadExecVSHParam vsh_param; //12
/** Unknown. */
s32 unk60;
/** Unknown. */
s32 unk64;
/** Unknown. */
s32 unk68;
/** Unknown. */
s32 unk72;
/** Unknown. */
s32 unk76;
/** Unknown. */
s32 unk80;
/** Unknown. */
s32 unk84;
/** Unknown. */
s32 unk88;
/** The application type of the currently loaded module. One of ::SceApplicationType. */
u32 application_type; //92
/** The number of power locks used by Init. */
s32 num_power_locks; //96
/** The address of a memory protection block of type ::SCE_PROTECT_INFO_TYPE_PARAM_SFO. */
void *param_sfo_base; //100
/** The size of of the memory block pointed to by ::paramSfoBase. */
SceSize param_sfo_size; //104
/** Unknown. */
s32 lpt_summary; //108
/** Pointer to boot callbacks of modules. */
SceBootCallback *boot_callbacks1; //112
/** The current boot callback 1 slot used to hold the registered boot callback. */
SceBootCallback *cur_boot_callback1; //116
/** Pointer to boot callbacks of modules. */
SceBootCallback *boot_callbacks2; //120
/** The current boot callback 2 slot used to hold the registered boot callback. */
SceBootCallback *cur_boot_callback2; //124
} SceInit;

/**
* Gets the api type.
*
* @return the api type in which the system has booted
*/
Expand All @@ -63,11 +116,20 @@ int sceKernelBootFrom();
/**
* Get the key configuration in which the system has booted.
*
* @return the key configuration code, one of PSPKeyConfig values
* @return the key configuration code, one of `PSPKeyConfig` values
*/
int InitForKernel_7233B5BC();
int sceKernelApplicationType();

#define sceKernelInitKeyConfig sceKernelApplicationType

/**
* Retrieve Init's internal control block. This control block manages execution details of an
* executable, like its API type, its boot medium and its application type.
*
* @return A pointer to Init's internal control block.
*/
SceInit *sceKernelQueryInitCB(void);

#define sceKernelInitKeyConfig InitForKernel_7233B5BC

#endif
#endif /* __PSPINIT_H__ */

10 changes: 10 additions & 0 deletions src/user/pspkerneltypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,14 @@ typedef int SceMode;
typedef SceInt64 SceOff;
typedef SceInt64 SceIores;

/**
* This structure represents a boot callback belonging to a module.
*/
typedef struct SceBootCallback {
/** The boot callback function. */
void *boot_callback_func;
/** Global pointer value of the module. */
u32 gp;
} SceBootCallback;

#endif /* PSPKERNELTYPES_H */