PCSX2 Documentation/The PCSX2 Program Flow: Difference between revisions

no edit summary
No edit summary
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
''The following article is a very general overview of the flow of the PCSX2 application.''
''The following article is a very general overview of the flow of the PCSX2 application. It's a bit sloppy right now, I will clean it up more as I go along.''


==AppMain.cpp - this is where the fun begins!==
==AppMain.cpp - It all starts here==
There is a lot that happens under the hood with wxWidgets. We don't need to worry about that. All we need to worry about is this this line of code:
There is a lot that happens under the hood with wxWidgets. We don't need to worry about that. All we need to worry about is this this line of code:


<code>in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/AppMain.cpp AppMain.cpp]</code>
'''in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/AppMain.cpp AppMain.cpp]'''
<source lang="cpp">IMPLEMENT_APP(Pcsx2App)</source>
<source lang="cpp">IMPLEMENT_APP(Pcsx2App)</source>


Line 12: Line 12:
Next, Let's take a look at this code here.
Next, Let's take a look at this code here.


<code>in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/App.h App.h]</code>
 
'''in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/App.h App.h]'''
<source lang=cpp>
<source lang=cpp>
class Pcsx2App : public wxAppWithHelpers{}
class Pcsx2App : public wxAppWithHelpers{}
</source>
</source>
You can see here that the Pcsx2App class is an extension of the wxAppWithHelpers class. WxWidgets applications are defined as classes, which are instantiated into an object when we start the program. Pcsx2App contains methods that wxWidgets is going to call upon at various times. So what gets called when we fire up Pcsx2App? That would be OnInit(). Let's take a look, I have written some notes on what happens here:
You can see here that the Pcsx2App class is an extension of the wxAppWithHelpers class. WxWidgets applications are defined as classes, which are instantiated into an object when we start the program. Pcsx2App contains methods that wxWidgets is going to call upon at various times. So what gets called when we fire up Pcsx2App? That would be OnInit(). Let's take a look, I have written some notes on what happens here:




<code>in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/AppInit.cpp AppInit.cpp]</code>
'''in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/AppInit.cpp AppInit.cpp]'''
<source lang="cpp">
<source lang="cpp">
bool Pcsx2App::OnInit()
bool Pcsx2App::OnInit()
Line 61: Line 61:
In addition to Application classes, there are also Frame classes. So when we call the OpenMainFrame function, what happens? Take a look at this code:
In addition to Application classes, there are also Frame classes. So when we call the OpenMainFrame function, what happens? Take a look at this code:


<code>in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/AppInit.cpp pcsx2/gui/AppInit.cpp]</code>
'''in [https://github.com/PCSX2/pcsx2/blob/master/pcsx2/gui/AppInit.cpp pcsx2/gui/AppInit.cpp]'''
<source lang="cpp">
<source lang="cpp">
void Pcsx2App::OpenMainFrame()
void Pcsx2App::OpenMainFrame()
Line 77: Line 77:
Here we're creating an instance of the MainEmuFrame class. That class contains members for all the cool GUI elements, buttons, menus, stuff like that. So let's take a step further. Suppose we want to boot up a game. When we select Boot DVD in the pcsx2 menus, we are calling upon this function here:
Here we're creating an instance of the MainEmuFrame class. That class contains members for all the cool GUI elements, buttons, menus, stuff like that. So let's take a step further. Suppose we want to boot up a game. When we select Boot DVD in the pcsx2 menus, we are calling upon this function here:


<code>in [https://github.com/PCSX2/pcsx2/blob/f3bb434b27737849546290bbfc8d09c61103081c/pcsx2/gui/MainMenuClicks.cpp MainMenuClicks.cpp]</code>
'''in [https://github.com/PCSX2/pcsx2/blob/f3bb434b27737849546290bbfc8d09c61103081c/pcsx2/gui/MainMenuClicks.cpp MainMenuClicks.cpp]'''
<source lang="cpp">
<source lang="cpp">
void MainEmuFrame::_DoBootCdvd()
void MainEmuFrame::_DoBootCdvd()
Line 85: Line 85:
OK, this is where things start to get a little complicated. PCSX2 is basically divided up into a few different parts:
OK, this is where things start to get a little complicated. PCSX2 is basically divided up into a few different parts:


====SysExecutor====
====SysExecutorThread====
Handles the virtual machine
Handles the PCSX2 "Core" (Virtual Machine, GUI, etc). Instance of ExecutorThread, which is a "proxy". It basically queues up jobs and then distributes them to a worker thread.
 
====SysMtgsThread====
Handles the Graphics Synthesizer (GSdx or other plugins).
 


====EE Thread====
{{PCSX2 Documentation Navbox}}
(See [https://github.com/PCSX2/pcsx2/blob/d6ba55eebf0a117831197a00655df7d6518c71ab/pcsx2/DebugTools/BiosDebugData.h BiosDebugData.h])
Handles the Emotion Engine instructions.
ninja
782

edits