A modern playtime tracking system for the PlayStation Portable.
A complete playtime tracking and game management suite for the PlayStation Portable.
- Overview
- Features
- Screenshots / UI
- How It Works
- Installation
- Usage
- Project Structure
- Configuration
- Development
- Plugin Details
- Roadmap
- Contributing
- Support
- License
- Credits
- Author
GameDiary is a background kernel-mode plugin (PRX) and a premium user-mode application (EBOOT) for the PlayStation Portable (PSP).
It exists to give PSP power-users modern, console-like play tracking capabilities. GameDiary automatically monitors the games you play (both native PSP titles and PS1 classics via POPS), records your session lengths, extracts the game icons behind the scenes, and presents all your gaming statistics in a beautiful, modern, and fluid UI.
Key Benefits:
- Never lose track of your gaming hours.
- Revisit your gaming history via rich, data-driven graphs.
- Works entirely in the background without affecting game performance.
- Seamless Background Tracking: Minimal footprint kernel plugin starts silently with your games and records your playtime accurately.
- Automatic Icon Management: Automatically extracts
ICON0.PNGfrom EBOOTs and ISOs for a rich visual diary without manual scraping.
- Premium User Interface: Fluid carousel navigation, smooth transitions, depth-sorted overlapping icons, and dynamic backgrounds built from the ground up to feel like native OS features.
- Comprehensive Stats: View total playtime, session history, and detailed graphs.
- Internationalization (i18n): Fully localized in English, Spanish, and Portuguese with automatic detection based on PSP system settings.
- POPS Compatibility: Reliable tracking and icon parsing for PlayStation 1 classics running via the official emulator.
| Home / Carousel | Session Statistics |
|---|---|
| Fluid infinite-scrolling game carousel with depth sorting. | Detailed left-aligned session statistics with playtime graphs. |
GameDiary operates in two layers:
- Kernel Plugin (PRX)
- Tracks game sessions in real-time
- User Application (EBOOT)
- Reads and visualizes collected data
- A PlayStation Portable (PSP 1000/2000/3000 or Go).
- Custom Firmware (CFW) installed (such as PRO, ME, or ARK-4).
- A Memory Stick (or MicroSD to MS adapter).
Ensure you have the latest release downloaded from the Releases page. The release contains two main components: the App and the Plugin.
- Copy the
gamediary.prxfile to yoursepluginsfolder on your memory stick (ms0:/seplugins/oref0:/seplugins/for PSP Go). - Open
ms0:/seplugins/game.txtin a text editor. - Add the following line:
(Use
ms0:/seplugins/gamediary.prx 1ef0:/seplugins/gamediary.prx 1if using a PSP Go's internal storage). - Do the same for
ms0:/seplugins/pops.txtto enable PS1 tracking. - Restart your PSP (or reset VSH).
- Extract the
GameDiaryapp folder. - Navigate to
ms0:/PSP/GAME/. - Copy the
GameDiaryfolder there. Your absolute path should look likems0:/PSP/GAME/GameDiary/EBOOT.PBP.
Simply navigate to your PSP's Game menu on the XMB and launch GameDiary like any other homebrew.
| Button | Action |
|---|---|
| D-Pad Left/Right | Navigate carousel / Select previous/next game |
| Analog Stick | Smooth scrolling through the game carousel |
| Cross (X) / Circle (O) | Open detailed game statistics (Respects region config) |
| Triangle (โณ) | Open application settings / Options menu |
| Square (โก) | Change graph sorting modes |
| L/R Triggers | Fast jump between letters/pages |
- Playing a game: Boot up a UMD or ISO. The plugin silently detects the game ID, extracts the icon if missing, and begins tracking your playtime.
- Reviewing stats: Run the GameDiary Application from the XMB. Scroll through the carousel to find your game, hit X (or O) to view your weekly and all-time playtime statistics.
A clean, modular architecture separating kernel plugin operations from user-mode presentation.
GameDiary/
โโโ Makefile # Build orchestration
โโโ include/ # Shared headers and public APIs
โโโ src/
โ โโโ app/ # User-mode UI Application (EBOOT)
โ โ โโโ i18n/ # Internationalization routines and language logic
โ โ โโโ render/ # Graphics, font rendering (MSDF), and components
โ โ โโโ main.c # Application entry point
โ โ
โ โโโ plugin/ # Kernel-mode Tracking Plugin (PRX)
โ โ โโโ hooks/ # API hooks for thread & I/O interception
โ โ โโโ main.c # Plugin entry point
โ โ
โ โโโ common/ # Shared logic (Data logging, parser utilities)
โโโ assets/ # Icons, backgrounds, and font source files
GameDiary data is stored inside the ms0:/PSP/COMMON/GameDiary/ directory to keep your Memory Stick tidy.
games.dat: Master database mapping game IDs to playtime statistics.config.ini: User-defined preferences. You can override system language strings or toggle UI features here.source/: Cloned icons representing your played games, automatically managed by the plugin.
GameDiary is built using the standard pspdev implementation of the PSPSDK.
- Ensure
pspdevis installed and the environment variables (PSPSDK,PATH) are configured. - Clone the repository:
git clone https://github.com/OniMock/GameDiary.git cd GameDiary - Run
maketo compile both the PRX and EBOOT:make clean all
Alternatively, use the official Docker image to compile without setting up local tools:
docker run --rm -it -v "${PWD}:/workspace" pspdev/pspdev Make clean allThe user-mode application can be tested using PPSSPP. Testing the kernel-plugin typically requires a real PSP, though specific module debugging can sometimes be simulated with advanced emulator setups.
The tracking system relies on kernel thread manipulation and syscall hooks to calculate precise uptime accurately.
- Tracking: On game boot, the plugin initializes a monitor thread that synchronizes with the
sceKernelGetSystemTimeAPI, appending delta-time entries to disk upon shutdown or hibernation. - Isolation: All file I/O operations inside
gamediary.prxuse low-levelsceIo*functions guarded by thread-safe mutexes to prevent crashes when interacting with active game threads. - Limitations: Some homebrew that aggressively overwrites RAM boundaries or custom interrupts may temporarily pause tracking intervals.
- Background play tracking and database mapping.
- MSDF font rendering and multi-language support.
- Auto-extraction of
ICON0.PNGfor PS1/POPS Eboots. - Expand UI features with thematic templates.
- Export stats to JSON/CSV for external use.
We welcome contributions! Please adhere to the following guidelines:
- Architecture First: Respect the separation between
app/andplugin/. Avoid kernel functions in the user-mode app unless specifically bridged. - Memory Mindful: The PSP has limited RAM (32MB/64MB). Avoid unnecessary deep copies and dynamic allocation (
malloc). Prefer stack allocation where safe. - Open a PR: State clearly what your pull request fixes or implements. Ensure your code merges cleanly and builds under
pspdev.
If you like this project and want to support its continuous development, consider buying me a coffee or sending a crypto donation!
Buy Me a Coffee
|
Crypto Wallet (EVM)
|
This project is licensed under the MIT License.
- pspdev SDK and community for maintaining modern PSP toolchains.
- Developers of PRO / ARK-4 CFW for mapping the boundaries of modern PSP kernel development.
Developed by OniMock.


