Skip to content

OniMock/GameDiary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

81 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Build Status License: MIT Platform: PSP Language: C/C++ Version GitHub stars GitHub issues Last commit

๐ŸŽฎ GameDiary

A modern playtime tracking system for the PlayStation Portable.

A complete playtime tracking and game management suite for the PlayStation Portable.


Table of Contents

  1. Overview
  2. Features
  3. Screenshots / UI
  4. How It Works
  5. Installation
  6. Usage
  7. Project Structure
  8. Configuration
  9. Development
  10. Plugin Details
  11. Roadmap
  12. Contributing
  13. Support
  14. License
  15. Credits
  16. Author

๐Ÿ“– Overview

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.

โœจ Features

โš™๏ธ Core

  • Seamless Background Tracking: Minimal footprint kernel plugin starts silently with your games and records your playtime accurately.
  • Automatic Icon Management: Automatically extracts ICON0.PNG from EBOOTs and ISOs for a rich visual diary without manual scraping.

๐ŸŽจ UI / UX

  • 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.

๐Ÿงฉ System

  • 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.

๐Ÿ–ผ๏ธ Screenshots / UI

Home / Carousel Session Statistics
Carousel Screen Placeholder Stats Screen Placeholder
Fluid infinite-scrolling game carousel with depth sorting. Detailed left-aligned session statistics with playtime graphs.

โš™๏ธ How It Works

GameDiary operates in two layers:

  1. Kernel Plugin (PRX)
    • Tracks game sessions in real-time
  2. User Application (EBOOT)
    • Reads and visualizes collected data

๐Ÿ“ฆ Installation

๐Ÿ“‹ Requirements

  • 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).

๐Ÿ—‚๏ธ Folder Preparation

Ensure you have the latest release downloaded from the Releases page. The release contains two main components: the App and the Plugin.

1. Installing the Plugin (Tracker)

  1. Copy the gamediary.prx file to your seplugins folder on your memory stick (ms0:/seplugins/ or ef0:/seplugins/ for PSP Go).
  2. Open ms0:/seplugins/game.txt in a text editor.
  3. Add the following line:
    ms0:/seplugins/gamediary.prx 1
    
    (Use ef0:/seplugins/gamediary.prx 1 if using a PSP Go's internal storage).
  4. Do the same for ms0:/seplugins/pops.txt to enable PS1 tracking.
  5. Restart your PSP (or reset VSH).

2. Installing the Application (Viewer)

  1. Extract the GameDiary app folder.
  2. Navigate to ms0:/PSP/GAME/.
  3. Copy the GameDiary folder there. Your absolute path should look like ms0:/PSP/GAME/GameDiary/EBOOT.PBP.

๐Ÿš€ Usage

โ–ถ๏ธ Launching the App

Simply navigate to your PSP's Game menu on the XMB and launch GameDiary like any other homebrew.

๐ŸŽฎ Controls

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

๐Ÿ”„ Example Workflows

  1. 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.
  2. 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.

๐Ÿ—๏ธ Project Structure

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

๐Ÿ› ๏ธ Configuration

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.

๐Ÿ‘จโ€๐Ÿ’ป Development

GameDiary is built using the standard pspdev implementation of the PSPSDK.

๐Ÿงช Building Locally

  1. Ensure pspdev is installed and the environment variables (PSPSDK, PATH) are configured.
  2. Clone the repository:
    git clone https://github.com/OniMock/GameDiary.git
    cd GameDiary
  3. Run make to compile both the PRX and EBOOT:
    make clean all

๐Ÿณ Docker

Alternatively, use the official Docker image to compile without setting up local tools:

docker run --rm -it -v "${PWD}:/workspace" pspdev/pspdev Make clean all

๐Ÿ–ฅ๏ธ Running on Emulator

The 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.


๐Ÿ”Œ Plugin Details

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 sceKernelGetSystemTime API, appending delta-time entries to disk upon shutdown or hibernation.
  • Isolation: All file I/O operations inside gamediary.prx use low-level sceIo* 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.

๐Ÿ—บ๏ธ Roadmap

  • Background play tracking and database mapping.
  • MSDF font rendering and multi-language support.
  • Auto-extraction of ICON0.PNG for PS1/POPS Eboots.
  • Expand UI features with thematic templates.
  • Export stats to JSON/CSV for external use.

๐Ÿค Contributing

We welcome contributions! Please adhere to the following guidelines:

  1. Architecture First: Respect the separation between app/ and plugin/. Avoid kernel functions in the user-mode app unless specifically bridged.
  2. Memory Mindful: The PSP has limited RAM (32MB/64MB). Avoid unnecessary deep copies and dynamic allocation (malloc). Prefer stack allocation where safe.
  3. Open a PR: State clearly what your pull request fixes or implements. Ensure your code merges cleanly and builds under pspdev.

โ˜• Support

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)

๐Ÿ“ License

This project is licensed under the MIT License.


๐ŸŒŸ Credits

  • pspdev SDK and community for maintaining modern PSP toolchains.
  • Developers of PRO / ARK-4 CFW for mapping the boundaries of modern PSP kernel development.

๐Ÿ‘ค Author

Developed by OniMock.


About

A complete playtime tracking and game management suite for the PlayStation Portable.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages