Sly 1:Executable: Difference between revisions
Added infobox
(Rework section on __main & a couple other things) |
TheOnlyZac (talk | contribs) (Added infobox) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1:
{{Infobox file
|name=SCUS_971.98
'''SCUS_971.98''' is the [[executable]] for {{Sly 1}}. It is an ELF binary compiled for the PS2’s [[Wikipedia:Emotion Engine|Emotion Engine]] processor. The compiler is GCC v2.9-ee-991111b.<ref>Based on strings found in the May 2002 demo build</ref>▼
|type=MIPS r5900 ELF
}}
▲'''SCUS_971.98''' is the [[executable]] for {{Sly 1}}. It is an ELF binary compiled for the PS2’s [[Wikipedia:Emotion Engine|Emotion Engine]] processor. The compiler is
== Libraries ==
{{Hatnote|This section contains educated guesses based on available information and context clues, and may be inaccurate or incomplete.}}
=== IOP
These
* '''sio2man.irx''' – Manager Interface for joypads, multitaps and memory cards<ref name=":0">[https://www.retroreversing.com/irx-ps2 IRX Files for Playstation 2] - Retro Reversing, 29 March 2021</ref>
Line 19 ⟶ 23:
==== Standard libraries ====
These libraries are shipped either by the Cygnus ee-gcc toolchain or provided as a part of gcc directly.
* '''libgcc''' – GCC internal runtime library
* '''
* '''newlib''' – Embedded C standard library implementation
* '''libio –''' GNU implementation of C++ IO streams
* '''libstdc++ –''' GNU C++ standard library
Line 28 ⟶ 33:
==== PS2 SDK libraries ====
These libraries are part of the PS2 SDK and written by SCEI.
* '''libkernel''' – Interface to the EE Kernel (syscall wrappers/etc.)
* '''libmc 2430''' – Memory card library
Line 36 ⟶ 42:
* '''libipu 2400''' – Image data Processor (IPU) library<ref name=":1" />
== Initialization and main loop ==
=== _start ===
The entry point for the executable is <code>_start</code>, which is provided by the PS2 SDK's <code>crt0.s</code>. It sets up the main thread, initializes the main thread's heap, and calls <code>main</code>.
=== main ===
The <code>main</code> function takes two parameters, <code>int cphzArgs</code> (the number of arguments) and <code>char** apchzArgs</code> (an array of arguments), which it stores as the the global variables <code>g_cphzArgs</code> and <code>g_apchzArgs</code> respectively. It calls <code>__main</code> and <code>Startup</code> to initialize the game engine, then begins the main loop.
====
<code>main</code>
==== Startup ====
<code>Startup</code> begins by calling <code>SetPhase</code>, setting <code>g_phase</code> to <code>PHASE::Startup</code>. It then iterates over an array of function pointers, called <code>StartupSampler</code>, and calls each one. The startup sampler includes the startup functions for many game subsystems, such as DMA, Thread, Codes, Screen, and Clock, and more.
=== Game loop ===
Line 51 ⟶ 59:
* First, check if <code>g_mpeg</code> has an [[MPEG]] queued to be played. If so:
** <code>FlushFrames(1)</code> –
** <code>
* Check if <code>g_transition</code> has a pending transition (i.e. <code>m_fPending != 0</code>). If so:
** <code>FlushFrames(1)</code>
** Call a function that calls <code>CMpeg::Execute</code> on the <code>g_transition</code> instance.
* Check '''again''' if <code>g_mpeg</code> has an MPEG queued to be played (this happens if two MPEGs were queued to play back-to-back). If so:
** <code>FlushFrames(1)</code>
** <code>
* <code>UpdateJoy(&g_joy)</code> – Handles [[Sly 1:Input|controller input]]
* <code>UpdateCodes()</code> –
* Call an unknown function that handles saving the game.
* <code>UpdateUi(&g_ui)</code> –
* <code>UpdateGameState(g_clock.dt)</code> –
* <code>if (g_psw != NULLPTR)</code> – If g_psw is
** <code>SetupCm(g_pcm)</code> –
** <code>OpenFrame()</code> –
** <code>MarkClockTick(&g_clock)</code> –
** Grab a particular function pointer from the <code>g_psw</code> struct and execute it if it is not NULL. The function's purpose is unknown but it takes <code>g_clock.dt</code> as an argument, so it's probably an Update function.
** <code>RenderSw(g_psw, g_pcm)</code> –
** <code>RenderUi()</code> –
** <code>DrawSw(g_psw, g_pcm)</code> –
** <code>DrawUi()</code> –
** <code>CloseFrame()</code> –
* Increment the global frame counter, <code>g_cframe</code>.
|