Code Monkey home page Code Monkey logo

hrydgard / ppsspp Goto Github PK

View Code? Open in Web Editor NEW
10.6K 515.0 2.1K 297.21 MB

A PSP emulator for Android, Windows, Mac and Linux, written in C++. Want to contribute? Join us on Discord at https://discord.gg/5NJB6dD or just send pull requests / issues. For discussion use the forums at forums.ppsspp.org.

Home Page: https://www.ppsspp.org

License: Other

CMake 0.55% C++ 57.67% C 34.74% Objective-C 0.08% Objective-C++ 0.39% Shell 0.19% Makefile 0.23% Assembly 0.03% Java 0.53% Inno Setup 0.01% Python 0.08% Batchfile 0.04% DIGITAL Command Language 0.08% GLSL 0.18% Perl 0.01% Rust 0.06% Dockerfile 0.01% POV-Ray SDL 5.13%
ppsspp emulators psp

ppsspp's Introduction

PPSSPP - a fast and portable PSP emulator

Created by Henrik Rydgård

Additional code by many contributors, see the Credits screen

Originally released under the GPL 2.0 (and later) in November 2012

Official website: https://www.ppsspp.org/

Discord: https://discord.gg/5NJB6dD

No BIOS file required to play, PPSSPP is an "HLE" emulator. Default settings balance good compatibility and speed.

To contribute, see the development page. Help testing, investigating, or fixing is always welcome. See the list of issues.

For the latest source code, see our GitHub page.

For documentation of all kinds (usage, reference, development), see the documentation on the main website

For build instructions and other development tutorials, see the wiki.

To download fresh development builds for Android, Windows and Mac, go to the /devbuilds page

For game compatibility, see community compatibility feedback.

What's new in 1.17.1

  • Fixed green rendering errors on some PowerVR GPUs (#18781)
  • Release all held keys on pause to avoid "stuck keys" after unpausing or in run-behind-pause (#18786)
  • UI fixes (#18785)
  • Update libchdr with zstd support, warn the user about bad CHDs (#18824, #18803)
  • Add workaround for AdHoc mode in Resistance (#18821)
  • Fix graphics in Tokimeki Memorial 4 (#18822)
  • Fix crash in UFC 2010 on Mali GPUs (#18813)
  • Temporarily disable MSAA on Adreno GPUs due to crashing (#18819)
  • Fixed some crashes and optimized the game metadata cache (#18794, #18775)
  • Additional crashfixes and similar (#18777, #18779, #18823)
  • Fixed playback of frame dumps with Vulkan (#18793)
  • Volume slider added for RetroAchievements sounds (#18772)

What's new in 1.17

  • Rendering performance and fixes
    • Fix for very old rendering issue in Tokimeki Memorial 4 (#18650) (didn't quite work, see 1.17.1)
    • Performance improvement in Tactics Ogre by avoiding a readback (#18599)
    • Cull small draws that are quick to check that they are offscreen (#18446)
    • Assorted optimizations (#18586, #18573, #18476, #18413, #18416, #18219)
    • Fix HUD in Tiger Woods 06 (#18554)
    • Adrenotools support added - you can now load custom Vulkan drivers on Adreno (#18532, #18548, #18699)
    • Fix rendering with bad Z parameters, fixes homebrew Zig example (#18535)
    • Fix Z problem in Hayate no Gotoku!! Nightmare Paradise #18478
    • Fix frozen pitch meters in MLB games (#18484)
    • Enable MSAA on modern mobile devices (Vulkan-only) (#18472)
    • Fix video flicker in Naruto: Ultimate Ninja Heroes 2 (#18454)
  • UI
    • Track total time played per game (#18442)
    • When opening the pause menu, there's now an option to keep the game running behind the menu. This is enforced in multiplayer to avoid inadvertent desyncs (#18517, #18515)
  • ISO loading improvements
    • The CHD file format is now fully supported (use chdman createdvd!), including with Remote ISO and Retroachievements
    • Improvements to remote ISO: optional tab on home screen, can now share whole folders (#18627, #18639, #18640, #18631, #18632, #18633,)
  • Controller and touchscreen fixes
    • More control bindings, organize into categories (#18635, #18589)
    • Fix inverse deadzone (low end) for joystick input
    • Fix analog deadzones for XInput controllers (#18407)
    • Improved tilt control further (#18533)
    • Mouse input supported on Android (#18551, #18473)
    • Customizable threshold for analog-trigger to button-press mapping, customizable delay for mouse-scroll key-up (#18621, #18585)
    • Make it work better to bind an analog stick to four buttons, useful for camera control in some games
    • Can now unpause with the key you bound to pause (#18591)
  • Other fixes and updates
    • More work on the IR JITs (#18234, #18235, #18228, #18227, #18226, many more)
    • Moving the memstick directory on Android is now faster and safer #18744
    • Workaround problems in Add Doko Demo Issho, Driver 76, Harukanaru Toki no Naka, Ace Combat by slowing down the emulated UMD drive to match reality better (#18436, #18445)
    • VR: Quest 3 rendering issues fixed (#18677)
    • Various bugfixes in texture replacement (#18638, #18610, #18519, #18466, #18747)
    • RetroAchievements: Rich presence, renamed Challenge Mode back to the recommended Hardcore Mode, various error handling improvements, configure per game (#18468, #18651, #18488, #18428, #18425)
    • HLE: Slice large-and-slow memcpy/memset operations, can help with some stalls. (#18560)
    • Other various minor fixes and optimizations (#18558, #18555, #18538, #18529, #18450, #18314, #18233, #18678, #18749, #18736, #18704)
    • SoftGPU fixes (#18362)
    • Fixed international fonts on Steam Deck (#18732, #18734)
    • GoExplore (GPS app) now starts up and allows navigation (#18665, #18666, #18668, #18669)
    • SDL: Improve input latency in Vulkan mode by running rendering on a separate thread (#18268)
    • Assorted multiplayer fixes (#18435)
    • Support for emulating the infrared port of the original PSP through sceSircs (#18684)

What's new in 1.16.6

  • Fix performance issue with Vulkan descriptor set allocation (#18332)
  • Smoother loading of replacement textures
  • Fix the store on iOS (#18323)
  • Fix problem with waves background (#18310)
  • Some translation updates
  • Other minor fixes

What's new in 1.16.5

  • Additional crash and memory-leak fixes (#18243, #18244, #18247)
  • Revert bad change that broke things with hardware transform turned off (#18261)
  • Fix menu texture problem in Naruto Kizuna Drive in OpenGL (#18255)
  • Apply flicker fix to WWE SvR 2007
  • More efficient handling of accelerometer events (#18250)
  • Fix for jumpy graphics in Harvest Moon (#18249)

What's new in 1.16.4

What's new in 1.16.3

  • Fix crash bug and performance issue in Vulkan shader cache (#18183, #18189)
  • Fix crash in icon loading in homebrew store (#18185)
  • Add some memory safety check (#18184, #18194)
  • Fix problem when changing backend from the Windows menu (#18182)

What's new in 1.16.2

  • Fix for HTTP support on Linux on networks with shaky or incomplete IPv6 support
  • Assorted fixes for leaks and crashes (#18169, #18151)
  • Fix hang when switching UMD with RetroAchievements enabled (#18143)
  • Fix math bug in new IR JIT for x86 (#18165)
  • Minor math optimization -fno-math-errno (#18158)
  • Fix for software renderer crash

What's new in 1.16.1

  • Move RetroAchievements to the Tools tab in settings (#18127)
  • Fix graphics regressions in Hot Shots Golf 2 / Everybody's Golf 2 and Final Fantasy Tactics (#18142)
  • Fix hang on startup with OpenGL, that happened often if "buffer commands" was set to off.
  • Fix problem with the sc instruction that broke Beats (#18133, #18140)
  • Fix problem with the chat window accidentally closing on typing X (#18135)
  • Fix some crashes, add some asserts and reporting hooks (#18129)
  • Fix some text rendering in the software renderer (#18126)

What's new in 1.16

Special thanks to unknownbrackets for the new JIT compilers, and fp64 for finally cracking the vrnd instruction.

  • RetroAchievements support (#17589, #17631, many more). See RetroAchievements on ppsspp.org.
  • New JIT backends:
    • RISC-V, based on IR
    • x86 JIT based on IR. Often faster than the existing one.
  • Input fixes
    • Improve behavior when analog and digital inputs clash (#17960)
    • Combo mapping is now disabled by default (#17673)
    • Android: Better tracking of devices names (#17562, auto config)
    • Fix mapping custom touch buttons to analog inputs (#17433)
  • Rendering performance and fixes
    • Fix flicker in WWE Smackdown vs Raw 2006 (#18009), video flicker in Naruto 2 (#18008)
    • Fix bad colors in Syphon Filter: Logan's Shadow menu (#17965)
    • On lower-end devices, avoid "uber" shaders due to performance and driver bugs (#17449, #17922)
    • Allow disabling V-sync on Android with Vulkan, more SDL platforms (#17903, #18087)
    • On Vulkan, reduce input lag when "Buffer graphics commands" is set to off (#17831)
    • Assorted minor perf (#17810, #17505, #17478, #17471, #17452, #17446, #17442)
    • Fix shadows in MotorStorm (#17602) (not actually a rendering problem)
    • Fix rendering issue in Lunar Silver Star (#17451)
    • Add a cache for MakePixelsTexture, improving perf in God of War (#17534)
    • Lots of software renderer improvements (#17571, #17569, #17619, #17621, #17618, #17609, ...)
  • Networking
    • HTTPS support now enabled in store and for RA on Windows, Android, Mac, iOS (#17744, ...)
    • Ad-hoc: Fix for Metal Gear Acid issue with Link Battle (#17947)
  • Texture replacement fixes
    • Fix Tactics Ogre texture issues (#18001, #18011)
    • Fix problem with anisotropic filtering (#17930)
    • Fix glitches on D3D11 with KTX2 textures (#17749)
  • UI changes
    • Color emoji support on some platforms (#17854, #17856)
    • Use TTF fonts on SDL where available (macOS, Linux/Steam Deck) (#17844), support HiDPI (#17651)
    • Allow setting the PSP's MAC address directly (#17755)
    • Better looking notifications (#17606, #17674, #17672)
  • Cheats
    • Fix loading cheat dbs on Android devices with scoped storage (#17834)
  • VR (Quest, other Android VR devices)
  • Other
    • Fix horrible audio glitch in After Burner (#18076)
    • Emulate the vrnd instruction accurately (#17506, #17549)
    • Fix timing issue causing slowdowns in MLB games (#17676, #17677)
    • UWP keyboard support, many other updates (#17952, #17974)
    • Allow choosing the display resolution on Android again (#17473)
    • Fix issue running some file types out of the Download folder on Android (#17466)

Older news

Looking for older news?

You can also find the full update history on the website.

Adhoc support

Not fully functional, but some games work. Check the Ad-Hoc section of the forum for help.

Credit goes to:

ppsspp's People

Contributors

anr2me avatar bigpet avatar bollu avatar ced2911 avatar daniel-dressler avatar daniel229 avatar danyalzia avatar fp64 avatar hrydgard avatar iota97 avatar kaienfr avatar kentuckycompass avatar kingcom avatar lioncash avatar lunamoo avatar lvonasek avatar makotech222 avatar mgaver avatar neobrain avatar oioitff avatar orphis avatar shenweip avatar sum2012 avatar thedax avatar tmaul avatar unknownbrackets avatar vnctdj avatar xebra avatar xele02 avatar xsacha avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ppsspp's Issues

ppsspp ARMJit

Downloaded and compiled ARMJit version today, compiling was successfull, but after installing the closes it self after opening.

I will check logs what could be went wrong.

device: Aurora 2

Save State issues

EDIT: This is now an issue for reporting problems with save states. Below is the original text.

We should start thinking about how to implement save states. They are not only fun when playing games, but a tremendously useful debugging tool - for example, use the JIT to quickly get to a certain point, then save the state and start up the emulator again in debug mode to figure out what's going wrong.

I think a model similar to Dolphin, where each subsystem has a save/load function which are called by a central function would be best.

There can probably be no expectation of save states working across versions of PPSSPP (but crossing over between ports of the same version, such as PC and Android should be fine). So a simple version marker in the file (based on the git version tag or something like that) should be sufficient to prevent loading states from the wrong version.

Crash with Unknown Get Pointer from memmapfunctions.cpp

Game : Sol Trigger
CPU : Slightly faster interpreter

51:21:029 e:\download\ppsspp-umd-fixes\core\memmapfunctions.cpp:57 E[MM]: Unknown GetPointer 00000498 PC 08979d28 LR 08979d28
First-chance exception at 0x00fccb31 in PPSSPPDebug.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x00fccb31 in PPSSPPDebug.exe: 0xC0000005: Access violation reading location 0x00000000.

breaks at VertexDecoder.cpp

    case GE_VTYPE_TC_FLOAT:
        {
            const float *uvdata = (const float*)(ptr + tcoff);
            if (throughmode) {
                uv[0] = uvdata[0] / (float)(gstate_c.curTextureWidth);
                uv[1] = uvdata[1] / (float)(gstate_c.curTextureHeight);
            } else {
                uv[0] = uvdata[0];               ************* breakpoint ***************
                uv[1] = uvdata[1];
            }
        }
        break;
    }

compiling problems

Having problems while compiling with ant debug see log below

ant debug
Buildfile: D:\Cygwin\home\Aco\ppsspp\android\build.xml
Duplicated project name in import. Project PPSSPP defined first in D:\Cygwin\hom e\Aco\ppsspp\android\build.xml and again in D:\Cygwin\home\Aco\ppsspp\android\cu stom_rules.xml

-set-mode-check:

-set-debug-files:

-check-env:
[checkenv] Android SDK Tools Revision 20
[checkenv] Installed at D:\android-sdk

-setup:
[echo] Project Name: PPSSPP
[gettype] Project Type: Application
[echo] Switching between debug and non debug build: Deleting previous compi lation output...
[delete] Deleting directory D:\Cygwin\home\Aco\ppsspp\android\bin\classes

-set-debug-mode:

-debug-obfuscation-check:

-build-setup:
[echo] Resolving Build Target for PPSSPP...
[gettarget] Project Target: Android 2.3.3
[gettarget] API level: 10
[echo] ----------
[echo] Creating output directories if needed...
[mkdir] Created dir: D:\Cygwin\home\Aco\ppsspp\android\bin\classes
[echo] ----------
[echo] Resolving Dependencies for PPSSPP...
[dependency] Library dependencies:
[dependency]
[dependency] ------------------
[dependency] Ordered libraries:

BUILD FAILED
D:\android-sdk\tools\ant\build.xml:546: java.lang.NullPointerException
at com.android.sdklib.internal.project.ProjectProperties.parsePropertyFi le(ProjectProperties.java:444)
at com.android.sdklib.internal.project.ProjectProperties.load(ProjectPro perties.java:253)
at com.android.sdklib.internal.project.ProjectProperties.load(ProjectPro perties.java:239)
at com.android.ant.TaskHelper.getProperties(TaskHelper.java:135)
at com.android.ant.DependencyHelper$AdvancedLibraryProcessor.processLibr ary(DependencyHelper.java:67)
at com.android.ant.DependencyHelper.processLibraries(DependencyHelper.ja va:209)
at com.android.ant.GetLibraryPathTask.execute(GetLibraryPathTask.java:18 3)
at com.android.ant.GetLibraryPathTask.execute(GetLibraryPathTask.java:16 2)
at com.android.ant.ComputeDependencyTask.execute(ComputeDependencyTask.j ava:191)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav a:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe cutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.Main.runBuild(Main.java:809)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Total time: 0 seconds

SDL2 (OSX OpenGL issue)

SDL1.2 on OSX does not support creating OpenGL contexts higher than 2.1. We need more modern features so we'd really like to use SDL 2, which can do that.

Unfortunately SDL 2.0 has still not had a stable release so I don't know how to best handle the dependency.

Android setting file and detect number of core

(I help my chinese freind to tell,hope not transate wrong)
1:Android version do not have setting file but PC version has the setting file.
2:Android version do not detect number of core.It only use one core.
Please help.Thanks

Build error on VS 2010 Express (and maybe others)

1>------ Build started: Project: PPSSPPWindows, Configuration: Release Win32 ------
2>------ Build started: Project: PPSSPPHeadless, Configuration: Release Win32 ------
1> Core.lib(SymbolMap.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
2> Creating library D:\PPSSPP\ppsspp\Windows\Release\PPSSPPHeadless.lib and object D:\PPSSPP\ppsspp\Windows\Release\PPSSPPHeadless.exp
1> Creating library ..\PPSSPPWindows.lib and object ..\PPSSPPWindows.exp
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPSaveDialog::Shutdown(void)" (?Shutdown@PSPSaveDialog@@UAEXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPSaveDialog::Update(void)" (?Update@PSPSaveDialog@@UAEXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPSaveDialog::Init(int)" (?Init@PSPSaveDialog@@UAEXH@Z)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall PSPSaveDialog::~PSPSaveDialog(void)" (??1PSPSaveDialog@@UAE@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: __thiscall PSPSaveDialog::PSPSaveDialog(void)" (??0PSPSaveDialog@@QAE@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPPlaceholderDialog::Update(void)" (?Update@PSPPlaceholderDialog@@UAEXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPPlaceholderDialog::Init(void)" (?Init@PSPPlaceholderDialog@@UAEXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall PSPPlaceholderDialog::~PSPPlaceholderDialog(void)" (??1PSPPlaceholderDialog@@UAE@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: __thiscall PSPPlaceholderDialog::PSPPlaceholderDialog(void)" (??0PSPPlaceholderDialog@@QAE@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl SavedataParam::Init(void)" (?Init@SavedataParam@@SAXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPMsgDialog::Shutdown(void)" (?Shutdown@PSPMsgDialog@@UAEXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPMsgDialog::Update(void)" (?Update@PSPMsgDialog@@UAEXXZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPMsgDialog::Init(unsigned int)" (?Init@PSPMsgDialog@@uaexi@Z)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall PSPMsgDialog::~PSPMsgDialog(void)" (??1PSPMsgDialog@@UAE@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: __thiscall PSPMsgDialog::PSPMsgDialog(void)" (??0PSPMsgDialog@@QAE@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: enum PSPDialog::DialogStatus __thiscall PSPDialog::GetStatus(void)" (?GetStatus@PSPDialog@@QAE?AW4DialogStatus@1@XZ)
2>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPDialog::Shutdown(void)" (?Shutdown@PSPDialog@@UAEXXZ)
2>D:\PPSSPP\ppsspp\Windows\Release\PPSSPPHeadless.exe : fatal error LNK1120: 17 unresolved externals
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPSaveDialog::Shutdown(void)" (?Shutdown@PSPSaveDialog@@UAEXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPSaveDialog::Update(void)" (?Update@PSPSaveDialog@@UAEXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPSaveDialog::Init(int)" (?Init@PSPSaveDialog@@UAEXH@Z)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall PSPSaveDialog::~PSPSaveDialog(void)" (??1PSPSaveDialog@@UAE@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: __thiscall PSPSaveDialog::PSPSaveDialog(void)" (??0PSPSaveDialog@@QAE@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPPlaceholderDialog::Update(void)" (?Update@PSPPlaceholderDialog@@UAEXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPPlaceholderDialog::Init(void)" (?Init@PSPPlaceholderDialog@@UAEXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall PSPPlaceholderDialog::~PSPPlaceholderDialog(void)" (??1PSPPlaceholderDialog@@UAE@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: __thiscall PSPPlaceholderDialog::PSPPlaceholderDialog(void)" (??0PSPPlaceholderDialog@@QAE@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: static void __cdecl SavedataParam::Init(void)" (?Init@SavedataParam@@SAXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPMsgDialog::Shutdown(void)" (?Shutdown@PSPMsgDialog@@UAEXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPMsgDialog::Update(void)" (?Update@PSPMsgDialog@@UAEXXZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPMsgDialog::Init(unsigned int)" (?Init@PSPMsgDialog@@uaexi@Z)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual __thiscall PSPMsgDialog::~PSPMsgDialog(void)" (??1PSPMsgDialog@@UAE@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: __thiscall PSPMsgDialog::PSPMsgDialog(void)" (??0PSPMsgDialog@@QAE@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: enum PSPDialog::DialogStatus __thiscall PSPDialog::GetStatus(void)" (?GetStatus@PSPDialog@@QAE?AW4DialogStatus@1@XZ)
1>Core.lib(sceUtility.obj) : error LNK2001: unresolved external symbol "public: virtual void __thiscall PSPDialog::Shutdown(void)" (?Shutdown@PSPDialog@@UAEXXZ)
1>..\PPSSPPWindows.exe : fatal error LNK1120: 17 unresolved externals
========== Build: 0 succeeded, 2 failed, 6 up-to-date, 0 skipped ==========

Thread queue not "fair" and not rotated properly

From testing the PSP, I think it uses "fair" scheduling. That is, completely round-robin ignoring priority.

Here's what I've measured:

  • If I start a thread, it's executed immediately. This implies it is inserted into the next slot on the queue.
  • Order of thread creation does not matter.
  • 4 threads with a DelayThread will run about as often as each other, regardless of priority.
  • Priority can be between 8 and 119, inclusive (other values return errors.)
  • Adjusting the priority of a thread while it's running doesn't change how often it will run.
  • sceKernelRotateThreadReadyQueue() does some interesting/bizarre stuff.
  • I can't really tell if higher or lower is "better" as far as priority.

https://gist.github.com/4138761

Maybe my test is naive but I'm trying to count cycles, which should theoretically compare to some extent.

If you run it and compare, you'll see that sceKernelRotateThreadReadyQueue() (regardless of argument) basically causes threads with high priority values to almost never run. I'm not sure I understand what it's doing algorithmically. What's really interesting is this:

Rotate low spent: 0:2  1:4  2:1549  3:1560  
Rotate high spent: 0:1  1:4  2:1718  3:1725  

That is, if the argument is a high value, the lower valued threads actually run more. I assume this means that a low argument is doing a complete rotation and therefore wasting more time?

Anyway, I'm taking a stab at implementing this but idle threads are making it more annoying.

-[Unknown]

CreateFullPath use '/' in Windows build

The function CreateFullPath under Windows use DIR_SEP_CHR for split, but DIR_SEP_CHR is set to "/". So under windows where it's "", the function don't work and break the save which can't create the SAVE directory.

Don't know if simply changing DIR_SEP_CHR to "" for WIN32 build will break anything else.

Linux compilation fails?

git clone https://github.com/hrydgard/ppsspp.git
cd ppsspp
git submodule init
git submodule native
cd SDL
./buildassets
./b.sh


In file included from /work/git/ppsspp/Common/CommonFuncs.h:40:0,
from /work/git/ppsspp/Common/Common.h:58,
from /work/git/ppsspp/Common/ConsoleListener.cpp:30:
/usr/lib/gcc/i486-linux-gnu/4.7/include/emmintrin.h:32:3: error: #error "SSE2 instruction set not enabled"
[ 31%] Built target image
In file included from /work/git/ppsspp/Common/Common.h:58:0,
from /work/git/ppsspp/Common/ColorUtil.cpp:18:
/work/git/ppsspp/Common/CommonFuncs.h:41:17: error: '__m128i' does not name a type


I'm using Debian GNU/Linux with GCC 4.7.1 and CMake 2.8.9.

const int chanQueueMaxSizeFactor/MinSizeFactor

Tested the following two parameters in windows build and looks like Max=4/Min=2 looks better in terms of sound smoothness in windows platform .

-const int chanQueueMaxSizeFactor = 4;
-const int chanQueueMinSizeFactor = 2;

Should we make a pull request ?

log what is missing when running a game

hello,

is it possible to log in a file the errors the first time they happen when running a game?

error like : 35:40:686 HLE\HLE.cpp:198 E[HLE]: Unimplemented HLE function scePower_a85880d0

(when the appear in red in the log)

No screen clear on Linux

I'm testing some of my personal homebrew on ppsspp.
First, and maybe only thing I notice on a basic game is that there is no screen clear...

Starting the game : http://image.noelshack.com/fichiers/2012/46/1353093175-capture-du-2012-11-16-20-08-22.png
After a while.. : http://image.noelshack.com/fichiers/2012/46/1353093175-capture-du-2012-11-16-20-08-09.png

This game uses my own graphics library : https://github.com/GeeckoDev/gLib2D/blob/master/glib2d.c#L292
I would like to fix this but I don't know where to start.

Linux 3.6.6 - Mesa 9.0 - Gnome 3.6.2

.gz support

crystal defenders needs .gz support one day

Version 0.4

ive compiled latest version from github, and figured out that now most of the games stopped working.

now i saw you released 0.4, but its still the same

f.e Final Fantasy Crisis Core, v 0.31 i saw intro and it was looping. v4 everything is black

A few (intro) games with decreased compatibility

Creature Defense (NPUH10034) - was showing more intros before (and hangs before menu), now only first intro
->d4932178260afef197f7813952dae82d0fb6ab22 - ok
->d06dfc36e072f1799f23fc04a55c3d816665a534 - ok
->e327eea732ea0a829deb55b15ab6567cc2bc252b - ok
->e1aa287ab7eb0306dc8afd731a7657e4570be3d1 - broken
->ef387dbd5194208c3b69d4ac41256c187a07d350 - broken

Logs:
e327eea
http://pastebin.com/4NQ09a7w

e1aa287
http://pastebin.com/8K090UqX

ef387db
http://pastebin.com/kBt04gXp


Patapon 2 (UCUS98732) - was showing two MemoryStick dialogs and one intro, now doesn't show anything
->d4932178260afef197f7813952dae82d0fb6ab22 - ok
->d06dfc36e072f1799f23fc04a55c3d816665a534 - broken
->ef387dbd5194208c3b69d4ac41256c187a07d350 - broken

Logs:
d493217
http://pastebin.com/mScAsx1y

d06dfc3
http://pastebin.com/XvQgHreZ

ef387db
http://pastebin.com/3GYpXCiV

Duplicate sceAtracSetHalfwayBufferAndGetID

Spot a duplicate function in sceAtrac.cpp , the first one i think it is the correct one .

{0x0fae370e,0,"sceAtracSetHalfwayBufferAndGetID"},
{0x0eb8dc38,sceAtracSetHalfwayBufferAndGetID,"sceAtracSetHalfwayBufferAndGetID"},

Should we do a simple pull request for it ?

b.sh errors on Mac OS X

I'm running into errors when running b.sh, here is my build environment/error(s):

Mac OS X 10.8.2
Xcode 4.5.2 (4G2008a)
CMake 2.8.9_1 (as installed by MacPorts)

./b.sh
-- The C compiler identification is GNU 4.2.1
-- The CXX compiler identification is Clang 4.1.0
-- Checking whether C compiler has -isysroot
-- Checking whether C compiler has -isysroot - yes
-- Checking whether C compiler supports OSX deployment target flag
-- Checking whether C compiler supports OSX deployment target flag - yes
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found PkgConfig: /opt/local/bin/pkg-config (found version "0.27.1")
-- Found ZLIB: /usr/lib/libz.dylib (found version "1.2.5")
-- Found PNG: /opt/local/lib/libpng.dylib (found version "1.5.13")
-- checking for module 'sdl'
-- found sdl, version 1.2.15
-- Found OpenGL: /System/Library/Frameworks/OpenGL.framework
-- Found SDL: /Library/Frameworks/SDL.framework;-framework Cocoa
CMake Error at CMakeLists.txt:47 (add_subdirectory):
add_subdirectory given source "../native/base" which is not an existing
directory.

CMake Error at CMakeLists.txt:48 (add_subdirectory):
add_subdirectory given source "../native/gfx" which is not an existing
directory.

CMake Error at CMakeLists.txt:49 (add_subdirectory):
add_subdirectory given source "../native/profiler" which is not an existing
directory.

CMake Error at CMakeLists.txt:50 (add_subdirectory):
add_subdirectory given source "../native/gfx_es2" which is not an existing
directory.

CMake Error at CMakeLists.txt:51 (add_subdirectory):
add_subdirectory given source "../native/file" which is not an existing
directory.

CMake Error at CMakeLists.txt:52 (add_subdirectory):
add_subdirectory given source "../native/image" which is not an existing
directory.

CMake Error at CMakeLists.txt:53 (add_subdirectory):
add_subdirectory given source "../native/json" which is not an existing
directory.

CMake Error at CMakeLists.txt:54 (add_subdirectory):
add_subdirectory given source "../native/audio" which is not an existing
directory.

CMake Error at CMakeLists.txt:55 (add_subdirectory):
add_subdirectory given source "../native/math" which is not an existing
directory.

CMake Error at CMakeLists.txt:56 (add_subdirectory):
add_subdirectory given source "../native/net" which is not an existing
directory.

CMake Error at CMakeLists.txt:57 (add_subdirectory):
add_subdirectory given source "../native/ui" which is not an existing
directory.

CMake Error at CMakeLists.txt:58 (add_subdirectory):
add_subdirectory given source "../native/ext/libzip" which is not an
existing directory.

CMake Error at CMakeLists.txt:59 (add_subdirectory):
add_subdirectory given source "../native/ext/etcpack" which is not an
existing directory.

CMake Error at CMakeLists.txt:60 (add_subdirectory):
add_subdirectory given source "../native/ext/vjson" which is not an
existing directory.

CMake Error at CMakeLists.txt:61 (add_subdirectory):
add_subdirectory given source "../native/ext/stb_vorbis" which is not an
existing directory.

CMake Error at CMakeLists.txt:62 (add_subdirectory):
add_subdirectory given source "../native/ext/stb_image" which is not an
existing directory.

CMake Error at CMakeLists.txt:63 (add_subdirectory):
add_subdirectory given source "../native/ext/sha1" which is not an existing
directory.

Thanks!

Video playback implementation (Media Engine)

Many games use the "media engine" to play MPEG or PSMF video, nearly always consisting of H.264 video and ATRAC3plus audio.

We should be able to at least play back the H.264 video by integrating FFMPEG. The ATRAC audio is a real problem though because there's currently no open source codec.

I've started some work on implementing the basic functions in the branch mediaengine.

Command-line support for Windows port

I would like to request a feature to support basic command-line support for the Windows port.

It could be used to integrate the emulator in any front-end, f.e. pspudb

For now only the basic functions are needed like:

--load, loads an ISO file without starting the emulator
--run, only valid when specified loading an ISO earlier and it just runs the game

So if I want to just open a ROM I do "PPSSPP --load some.iso" and if I want to run it too I do "PPSSPP --load some.iso --run"

Regression with recent changes in sceIo

The recent changes with sceIo breaks a lot of games for me (f.e. all Falcom games).

39:33:132 d:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 32 (00000020)
39:33:148 HLE\sceIo.cpp:864 E[HLE]: ERROR - sceIoPollAsync waiting for invalid id 32

If the problem is with the games then it's OK but if the problem is with the changes it should be fixed.

Regressions again with sceIo

Just detected this when testing. Has to be from a change made today.

21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:116 HLE\sceIo.cpp:266 E[HLE]: sceIoRead ERROR: no file open
21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:116 HLE\sceIo.cpp:791 E[HLE]: ERROR - sceIoPollAsync waiting for invalid id 308
21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:116 HLE\sceIo.cpp:322 E[HLE]: sceIoLseek(308, 58320, 0) - ERROR: invalid file
21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:116 HLE\sceIo.cpp:791 E[HLE]: ERROR - sceIoPollAsync waiting for invalid id 308
21:39:116 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:194 HLE\sceIo.cpp:266 E[HLE]: sceIoRead ERROR: no file open
21:39:194 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:194 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:210 HLE\sceIo.cpp:791 E[HLE]: ERROR - sceIoPollAsync waiting for invalid id 308
21:39:210 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:210 HLE\sceIo.cpp:322 E[HLE]: sceIoLseek(308, 58320, 0) - ERROR: invalid file
21:39:210 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:210 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)
21:39:210 HLE\sceIo.cpp:791 E[HLE]: ERROR - sceIoPollAsync waiting for invalid id 308
21:39:210 c:\ppsspp\ppsspp\core\hle\sceKernel.h:348 E[HLE]: Kernel: Bad object handle 308 (00000134)

Cannot build on ArchLinux 64bit

Solution:

  • Directly #include <cstring> or #include <cstdio> into the offending files

or

  • Centralize the missing #includes into one file and include this file in the offending files

Error log:

$ ./b.sh 
-- Configuring done
-- Generating done
-- Build files have been written to: /media/data/Documents/Workplace/ppsspp/SDL/build
[  0%] [  0%] Building CXX object gfx/CMakeFiles/gfx.dir/texture_gen.cpp.o
Building CXX object base/CMakeFiles/base.dir/PCMain.cpp.o
Scanning dependencies of target core
/media/data/Documents/Workplace/ppsspp/native/gfx/texture_gen.cpp: In function ‘uint8_t* generateTexture(const char*, int&, int&, int&, bool&)’:
/media/data/Documents/Workplace/ppsspp/native/gfx/texture_gen.cpp:17:21: error: ‘strlen’ was not declared in this scope
/media/data/Documents/Workplace/ppsspp/native/gfx/texture_gen.cpp:22:41: error: ‘strcmp’ was not declared in this scope
make[2]: *** [gfx/CMakeFiles/gfx.dir/texture_gen.cpp.o] Error 1
make[1]: *** [gfx/CMakeFiles/gfx.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[  0%] [  1%] Building CXX object Core/CMakeFiles/core.dir/Debugger/Breakpoints.cpp.o
Building CXX object Core/CMakeFiles/core.dir/MIPS/MIPSDebugInterface.cpp.o
/media/data/Documents/Workplace/ppsspp/native/base/PCMain.cpp: In function ‘int main(int, char**)’:
/media/data/Documents/Workplace/ppsspp/native/base/PCMain.cpp:235:40: error: ‘getuid’ was not declared in this scope
make[2]: *** [base/CMakeFiles/base.dir/PCMain.cpp.o] Error 1
make[1]: *** [base/CMakeFiles/base.dir/all] Error 2
[  2%] Building CXX object Core/CMakeFiles/core.dir/MIPS/MIPSDisVFPU.cpp.o
/media/data/Documents/Workplace/ppsspp/Core/Debugger/Breakpoints.cpp: In member function ‘void MemCheck::Action(u32, u32, bool, int, u32)’:
/media/data/Documents/Workplace/ppsspp/Core/Debugger/Breakpoints.cpp:42:161: error: ‘printf’ was not declared in this scope
In file included from /media/data/Documents/Workplace/ppsspp/Core/Debugger/Breakpoints.cpp:21:0:
/media/data/Documents/Workplace/ppsspp/SDL/../Common/FixedSizeUnorderedSet.h: In instantiation of ‘bool FixedSizeUnorderedSet<T, maxCount>::insert(T) [with T = BreakPoint; long unsigned int maxCount = 16ul]’:
/media/data/Documents/Workplace/ppsspp/Core/Debugger/Breakpoints.cpp:124:27:   required from here
/media/data/Documents/Workplace/ppsspp/SDL/../Common/FixedSizeUnorderedSet.h:13:5: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
make[2]: *** [Core/CMakeFiles/core.dir/Debugger/Breakpoints.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /media/data/Documents/Workplace/ppsspp/Core/MIPS/MIPSDebugInterface.cpp:20:0:
/media/data/Documents/Workplace/ppsspp/Core/MIPS/../Debugger/DebugInterface.h: In member function ‘virtual void DebugInterface::DisAsm(u32, u32, int, char*)’:
/media/data/Documents/Workplace/ppsspp/Core/MIPS/../Debugger/DebugInterface.h:50:93: error: ‘sprintf’ was not declared in this scope
/media/data/Documents/Workplace/ppsspp/Core/MIPS/../Debugger/DebugInterface.h: In member function ‘virtual void DebugInterface::PrintRegValue(int, int, char*)’:
/media/data/Documents/Workplace/ppsspp/Core/MIPS/../Debugger/DebugInterface.h:58:42: error: ‘sprintf’ was not declared in this scope
make[2]: *** [Core/CMakeFiles/core.dir/MIPS/MIPSDebugInterface.cpp.o] Error 1
make[1]: *** [Core/CMakeFiles/core.dir/all] Error 2
make: *** [all] Error 2

OSK ("On Screen Keyboard") implementation and character sets

Some games use the system On Screen Keyboard to let the player enter names, etc.

This is the sceUtilityOsk* functions. This can be implemented similarly to sceUtilityMsgDialog* , perhaps with system specific hacks so that on the PC one can enter text with the PC keyboard.

UPDATE: OSK has been implemented for a while. However, it doesn't support anything more than ASCII. While enough for most games, there are some where it matters.

Switch to GPLv2+

Switching from just GPLv2 to "GPL Version 2 or later" will allow Free Software projects under compatible licenses, such as GPLv3, to incorporate and build upon ppsspp code.

Framebuffer needs better implementation

We should keep track of some mapping between frame buffer addresses and FBOs, and render and present the correct buffers. This will help games that run below 60hz and currently flicker.

Compatibility Database

Instead of using the forums as listing compatibility for each game, I can create a small PHP-based application that tracks compatibility between PPSSPP svn commits.

Users would search for the game, create a new test, enter information (what version, platform, etc) and list what works / doesn't work.
As well as the option to include a screenshot.

This would be very similar in vein to WineHqs appdb http://appdb.winehq.org

I feel creating such a database will make it easier to keep track of test cases as well as regressions.

I will begin work on this and reply with a status update. If others feel this is a good idea, or have suggestions, please feel free to comment.

Unicode support for OpenGL GUI

The current text drawing system only supports 7bit ASCII, basically. Need to implement UTF-8 decoding in the font writer and add a lot more characters to the font. We might even need so many characters that we have to implement (or find) a proper dynamic font rendering system instead of the current texture atlas hack, and add libfreetype as a dependency (or, on Android, call up into Java for font rendering).

Save/Load is not implemented

Game save/load is handled by sceUtilitySaveLoadData on the PSP. These functions don't just handle the save/load UI but also ui-less saving and loading - the game gets to pass a buffer of data that gets filled or is written to the memory stick.

Saves are encrypted on the real PSP but we can save/load without encryption, unless we want compatibility with real saves eventually.

io/directory tests

Could someone with a PSP please run the io/directory test on a real PSP and post or push the updated expected results? I can't tell if its failing because the file names are wrong in git or if the PSP makes all file names uppercase (which seems odd as a lot of games use different cases in the file loading routines)

XInputDevice.cpp undeclared identifier during Windows Build

Build failed using Microsoft Visual C++ Express 2010 due to undeclared identifier (XUSER_MAX_COUNT) found on Windows/XInputDevice.cpp:28 [https://github.com/hrydgard/ppsspp/blob/master/Windows/XinputDevice.cpp#L28]. No other similar identifiers found within the project.

Screen2x/3x/4x anisotropic filtering

I found when the renderwidth/Height not multipled to g_Config.iWindowZoom , 2x/3x/4x screen will be somehow filtered like applied anisotropic filtering , however , 3d polygon will be in very low resolution .

coreParameter.renderWidth = 480 * g_Config.iWindowZoom;
coreParameter.renderHeight = 272 * g_Config.iWindowZoom;

Sol Trigger graphics issues

Game : Last Ranker
CPU : Slightly faster interpreter

45:50:417 e:\download\ppsspp-umd-fixes\core\memmapfunctions.cpp:57 E[MM]: Unknown GetPointer 00000028 PC 089237e4 LR 089237e4
First-chance exception at 0x00fcd059 in PPSSPPDebug.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x00fcd059 in PPSSPPDebug.exe: 0xC0000005: Access violation reading location 0x00000000.

breaks at VertexDecoder.cpp

    case GE_VTYPE_POS_FLOAT >> 7:
        {
            const float *fv = (const float*)(ptr + posoff);
            for (int j = 0; j < 3; j++)
                v[j] = fv[j];      **************breakpoint *******************
        }
        break;

ppsspp ui

please can you implement as much of the original psp ui as you can please

Delayed threads wake late (`CoreTiming::ScheduleEvent()`)

So, after looking into this, I noticed this comment above ScheduleEvent():

// This must be run ONLY from within the cpu thread
// cyclesIntoFuture may be VERY inaccurate if called from anything else
// than Advance 

In fact, it is used outside Advance(), both for sceKernelDelayThread() and in mutexes/semaphores (my fault.)

Ultimately this means that anything scheduled for < 1.451ms (the frequency of the audio update) will run late even if the CPU is otherwise idle (e.g. even if all threads are delayed.) This is because the audio update is (when the first slice is calculated) the next event.

To match the hardware, one way would be to add this to the middle of CoreTiming::Idle():

    if (first && cyclesDown > 0)
    {
        int cyclesExecuted = slicelength - downcount;
        int cyclesNextEvent = (int) (first->time - globalTimer);

        if (cyclesNextEvent < cyclesExecuted + cyclesDown)
        {
            cyclesDown = cyclesNextEvent - cyclesExecuted;
            // Now, now... no time machines, please.
            if (cyclesDown < 0)
                cyclesDown = 0;
        }
    }

But I'm not sure if this wasn't done in Idle() for performance reasons. FWIW, the above makes the test at least match the hardware very well, at least while idle.

Edit: also, I'm not sure this affects any games. Things should still wake in the correct order and prior to vblank/audio/etc., and it's only detectable through sceRtc and *timeout params.

-[Unknown]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.