Editing PSP Emulation

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
== PSP Emulator Types and Revisions ==
<div>
<div style="float:top; text-align:center;">'''PSP Emulator Types and Revisions'''</div>
<div style="float:left; width:33%;">
{| class="wikitable" style="font-size:xx-small;"
|+ psp_emulator.elf (decrypted)
! Firmware !! Bytes !! MD5 !! <abbr title="Revision">Rev</abbr>
|-
! [[1.00_CEX|1.00]] ~ [[3.10_CEX|3.10]]
| colspan="3" {{no}}
|-
! [[3.15_CEX|3.15]]
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! [[3.40_CEX|3.40]]
| 418.728 || 931C19CC20DDD382190AE5B6CF73A128 || ?
|-
! ?
| ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 419.120 || DFED8FCDB36A4284A27369304D47674F || ?
|-{{cellcolors|#ddddff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 419.176 || 0F6F1D92D045A86565DF705276776A41 || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| DC8C67FEEB605D73D073BBCAD8F17E6A
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="2" | 419.416 || 7371A95BB0ACB1152EB13EA11C866F87 || rowspan="2" | same
|-{{cellcolors|#bbbbff}}
! [[4.01_CEX|4.01]]
| C17EE35A278E64227558FA9C39E805B5
|-{{cellcolors|#ddddff}}
! [[4.10_CEX|4.10]]
| rowspan="2" | 419.472 || DAA4E9816037E1EFFFF15B344B61BD1D || rowspan="2" | same
|-{{cellcolors|#ddddff}}
! [[4.11_CEX|4.11]]
| 2DF5AFE349E082A79AF4E50B8100F80A
|-
! [[4.15_CEX|4.15]]
| ? || ? || ?
|-{{cellcolors|#bbbbff}}
! [[4.20_CEX|4.20]]
| rowspan="3" | 419.480 || 540422B0759D20738BF498337E33B7E2 || rowspan="3" | same
|-{{cellcolors|#bbbbff}}
! ~
| style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[4.25_CEX|4.25]]
| 5D20DFAE9E0D704F6DD17D2A807A1D2C
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! colspan="4" style="background:#80ff80; line-height:75%" | Abandoned (last revision)
|-{{cellcolors|#ddddff}}
! [[4.78_CEX|4.78]]
| rowspan="3" | 419.520 || EFEA0DFDDD6E7C479983B5E4E8B95295 || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[4.89_CEX|4.89]]
| 31B964C4E34F3D63D8F84DED3ABCE615
|}
<span style="font-size:small">
{{dot}}'''Decrypted (elf)''': changes <abbr title="when comparing two decrypted files of the same revision from different firmwares the only difference is the target firmware">every firmware version</abbr><br>
{{dot}}'''<abbr title="0x20 bytes">Build label</abbr>''': no/unknown<br>
{{dot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes, repeated '''two''' times<br>
{{dot}}'''Revision''': unknown
</span>
</div>
<div style="float:left; width:33%;">
{| class="wikitable" style="font-size:xx-small;"
|+ psp_translator.elf (decrypted)
! Firmware !! Bytes !! MD5 !! <abbr title="Revision">Rev</abbr>
|-
! [[1.00_CEX|1.00]] ~ [[3.10_CEX|3.10]]
| colspan="3" {{no}}
|-
! [[3.15_CEX|3.15]]
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! [[3.40_CEX|3.40]]
| 283.064 || 4B59F2F582E77C4E702FEC5BDAFDAF7E || ?
|-
! ?
| ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 283.128 || 0F52CE7666276B71FF5C560D7BD28014 || ?
|-{{cellcolors|#ddddff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 283.128 || C35D80E8B1A4A61212EA773C061BF1DC || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| A42CD1453C52149297A975F2BA5B2D38
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="2" | 283.128 || DF07955312D1C09DC2DC355EBA47F8AA || rowspan="2" | same
|-{{cellcolors|#bbbbff}}
! [[4.01_CEX|4.01]]
| A06E7BF7C1D062878593E1D4EA85B4C9
|-{{cellcolors|#ddddff}}
! [[4.10_CEX|4.10]]
| rowspan="2" | 283.128 || FB4801625CA15AC58DB28A4223EFD4A2 || rowspan="2" | same
|-{{cellcolors|#ddddff}}
! [[4.11_CEX|4.11]]
| 3154FF57D36E3D7C4F2C061393816482
|-
! [[4.15_CEX|4.15]]
| ? || ? || ?
|-{{cellcolors|#bbbbff}}
! [[4.20_CEX|4.20]]
| rowspan="3" | 283.120 || C125A486D3C48EA2C957EAFC0AB69B39 || rowspan="3" | same
|-{{cellcolors|#bbbbff}}
! ~
| style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[4.23_SEX|4.23 S]]
| C469B41798157C53C3E7794E9BDF9D36
|-
! [[4.25_CEX|4.25]]
| 283.120 || A675423F5C8B9FD02AA2150D46B953AE || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! colspan="4" style="background:#80ff80; line-height:75%" | Abandoned (last revision)
|-{{cellcolors|#ddddff}}
! [[4.78_CEX|4.78]]
| rowspan="3" | 283.120 || A35809CE6C184F3E3B52C18E0AE19217 || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[4.89_CEX|4.89]]
| 51CD390B62AE4DBC861D8BA689A846DE
|}
<span style="font-size:small">
{{dot}}'''Decrypted (elf)''': changes <abbr title="when comparing two decrypted files of the same revision from different firmwares the only difference is the target firmware">every firmware version</abbr><br>
{{dot}}'''<abbr title="0x20 bytes">Build label</abbr>''': no/unknown<br>
{{dot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes, repeated '''one''' time<br>
{{dot}}'''Revision''': unknown
</span>
</div>
</div>
<br style="clear: both;" />
== pspemu ==
== pspemu ==
Used for "PSP Minis" and "PSP remasters". The PSP Emulator works by accessing an encrypted ISO-9660 image. <br>
Used for "PSP Minis" and "PSP remasters". The PSP Emulator works by accessing an encrypted ISO-9660 image. <br>
Line 267: Line 92:
  2) within the emulator defined for a bunch of games (see [[Emulation#Special_notes| Special notes]])
  2) within the emulator defined for a bunch of games (see [[Emulation#Special_notes| Special notes]])


Note: The Emulator can be patched (1 Bit) to read a non encrypted MINIS2.EDAT [[https://www.psdevwiki.com/ps3/index.php?title=User_talk:Kozarovv&oldid=48369#PSPEmu]].
Note: The Emulator can be patched (1 Bit) to read a non encrypted MINIS2.EDAT.


Here are the commands what you can define for the psp emulator:
Here are the commands what you can define for the psp emulator:


<div style="overflow-x:auto">
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
Line 280: Line 104:
| || VERSION = 0x%x || VERSION = 0xFFFFFFFF ||  
| || VERSION = 0x%x || VERSION = 0xFFFFFFFF ||  
|-
|-
| || BOOT_MODE = %llx ||
| || BOOT_MODE = %llx || ||
  100010000 = Default for Minis  
  100010000 = Minis  
  200010000 = Default for Remaster  
  200010000 = Remaster  
|| 64 bit bitfield (Big Endian)
 
bit 30 = is remaster
bit 31 = unk
bit 47 = unk
bit 63 = A lot of settings changes when this bit is active.
          Disable ICache Invalidation syscalls,
          Enable "LINCOLN" configs,
          Disable sceFont, scePsmfP, and sceHeap loading
                            (there are other conditions too).
          Many more...
|-
|-
| || REMASTER_VERSION = 0x%x || ||
| || REMASTER_VERSION = 0x%x || ||
Line 308: Line 121:
|-
|-
| || TRANS_CACHE_SIZE = %llx || TRANS_CACHE_SIZE = 1000000 ||
| || TRANS_CACHE_SIZE = %llx || TRANS_CACHE_SIZE = 1000000 ||
  2000000 = (Default for Minis)
  2000000 = (Default)
  1000000 = (Default for Remaster)
  1000000 =  
|-
|-
| || HOSTFS_PATH = %lld || ||  
| || HOSTFS_PATH = %lld || ||  
Line 337: Line 150:
  0 =  
  0 =  
  1 = small picture
  1 = small picture
  2 = (Default for Minis)
  2 = (Default)
  3 =
  3 =
  4 = (Default for Remaster)
  4 =
  ...
  ...
|-
|-
| AW. {||  || || indicates LINEAR_ADRS to CLOAD_MODE optional setting following
| AW. {||  || || indicates LINEAR_ADRS to CLOAD_MODE optional setting following
|-
|-
| || LINEAR_ADRS = %llx || AW.LINEAR_ADRS = 1 || Bool
| || LINEAR_ADRS = %llx || AW.LINEAR_ADRS = 40 ||
0 = (Default)
  0 = (Default)
  1 =  
  40 =  
Internal configs use value 40, this value have the same effect as 1 in text config.
|-
|-
| || SINGLE_BUF = %llx || AW.SINGLE_BUF = 1 ||
| || SINGLE_BUF = %llx || AW.SINGLE_BUF = 880 ||
0 = (Default)
  0 = (Default)
1 =  
  80 =  
  2 =
  880 =
3 =
Internal configs use values like 80 or 880.
Those are invalid for text config.
To get similar result as internal 80 use value 1.
To get similar result as internal 880 use value 3.
|-
|-
| || DISABLE_FB_TEX = %llx || AW.DISABLE_FB_TEX = 1 || Bool
| || DISABLE_FB_TEX = %llx || AW.DISABLE_FB_TEX = 100 ||  
0 = "FB_TEX" Enabled (Default)
  0 = (Default)
  1 = "FB_TEX" Disabled
  100 =  
Internal configs use value 100, this value have the same effect as 1 in text config.
|-
|-
| || REUSE_ADRS = %llx || AW.REUSE_ADRS = 110000 ||
| || REUSE_ADRS = %llx || AW.REUSE_ADRS = 110000 ||
Line 371: Line 174:
  110000 =
  110000 =
|-
|-
| || SINGLE_BUF2 = %llx || SINGLE_BUF2 = 1 || Bool
| || SINGLE_BUF2 = %llx || ||
0 = Disabled (Default)
1 = Enabled
|-
|-
| || DECODE_WAIT = %llx || AW.DECODE_WAIT = 1 || Delay GE Commands decoding
| || DECODE_WAIT = %llx || AW.DECODE_WAIT = 10000 || in order to slowdown ?
Wait loops * translated_value
    0 = (Default)
0 = 0x10000 (Default)
  10000 =  
1 = 0x20000
2 = 0x40000
3 = 0x80000
4 = 0x100000
5 = 0x200000
6 = 0x400000
7 = 0x800000
  10000 = Value used by 2 internal configs.
        This value is invalid for manual configs.
        It works for internal because internal configs aren't
        going thru the same handler as minis2 text configs.
|-
|-
| || DISCARD_EDGE = %llx || AW.DISCARD_EDGE = 1 || Bool
| || DISCARD_EDGE = %llx || AW.DISCARD_EDGE = 20000 ||
0 = Disabled (Default)
    0 = (Default)
  1 = Enabled
  20000 =
Internal configs use value 20000, it works the same way as 1 in text config.
|-
|-
| || RECYCLE_RD_TEX = %llx || || Bool
| || RECYCLE_RD_TEX = %llx || ||
0 = Disabled (Default)
1 = Enabled
|-
|-
| || EXT_MODE = %llx || AW.EXT_MODE = 3 ||
| || EXT_MODE = %llx || AW.EXT_MODE = 3 ||
  0 = (Default for Minis)
  0 = (Default)
  Uses different SPU ELF for Renderer and Graphics Engine emulator.
  Uses different SPU ELF for transparency/textures behavior
  1 =  
  1 =  
  2 =  
  2 =  
  3 = (Default for Remaster)
  3 =  
|-
|-
| || THR_PIXEL_OFST = %llx || AW.THR_PIXEL_OFST = 0 ||  
| || THR_PIXEL_OFST = %llx || AW.THR_PIXEL_OFST = 0 ||  
Line 411: Line 197:
  3EFFFFFF = (default)
  3EFFFFFF = (default)
|-
|-
| || EXT_CMD = %llx || AW.EXT_CMD = 2 || Ignored when EXT_MODE is default. Some kind of hack for GE NOP handler.
| || EXT_CMD = %llx || AW.EXT_CMD = 2 ||  
  0 = (Default)
  0 = (Default)
  1 =  
  1 =  
  2 =  
  2 =  
  3 =  
  3 =  
Probably game specific, as content (lower 24 bits) of NOP command is analyzed and compared to predefined values.
Chances that games send GE NOP with example value of 0xA6CEA0 value are rather slim.
|-
|-
| || VRAM_MODE = %llx || AW.VRAM_MODE = 1 ||
| || VRAM_MODE = %llx || AW.VRAM_MODE = 1 ||
  0 = Disabled (default)  
  0 = Disabled (default)  
  1 = Enabled
  1 = Enabled
Work in conjunction with values set with DRAWN_IMAGE_SCALE. When enabled, emulated VRAM amount is lower.
Resulting VRAM size:
VRAM_MODE 1 and DRAWN_IMAGE_SCALE <= 1  = VRAM size 2MB
VRAM_MODE 0 and DRAWN_IMAGE_SCALE <= 1  = VRAM size 4MB
VRAM_MODE 1 and DRAWN_IMAGE_SCALE 2 or 3 = VRAM size 8MB
VRAM_MODE 0 and DRAWN_IMAGE_SCALE 2 or 3 = VRAM size 16MB
VRAM_MODE 1 and DRAWN_IMAGE_SCALE == 4  = VRAM size 32MB
VRAM_MODE 0 and DRAWN_IMAGE_SCALE == 4  = VRAM size 64MB
Real PSP Have access to 2MB VRAM.
|-
|-
| || CLOAD_MODE = %llx || AW.CLOAD_MODE = 1 || (Note: Only available since 4.30?)
| || CLOAD_MODE = %llx || AW.CLOAD_MODE = 1 || (Note: Only available since 4.30?)
  0 = Disabled (default)  
  0 = Disabled (default)  
  1 = Enabled
  1 = Enabled
  Different setting for GE CLOAD (CLUT Load) handler.
  Displays Selection Menu: Remaster/Adhoc ?
|-
|-
| } || || ||
| } || || ||
Line 445: Line 217:
|-
|-
| || SRC_NOIZ = %llx || ||
| || SRC_NOIZ = %llx || ||
0 = Disabled (Default)
1 = Enabled
|-
|-
| || SLEEP = %llx || AUDIO.SLEEP = 421 || Value is u16. sys_timer_usleep(value) used in sceAudio related functions.
| || SLEEP = %llx || AUDIO.SLEEP = 421 ||
   0 = (Default)
   0 = (Default)
  421 = Delay by 0x420 ms for one of 2 possible places.
  421 =
This setting actually has hidden bitfield too (Big Endian). There are 2 separate usleep values that can be set by this config.
First is set when bit 15 is active. By default, value here is 0x320
Second can be set if bit 14 is active. By default, value is 0x100
Bits 12-15 are masked from use as a ms.
|-
|-
| || DECODE_LIMIT = %llx || || Used in sceAudiocodec functions.
| || DECODE_LIMIT = %llx || ||
0 = No limit for DECODE_WAIT? (default).
1 = When higher, clamp DECODE_WAIT? to 2048 value.
|-
|-
| } || || ||
| } || || ||
Line 466: Line 229:
  0 = Disabled (Default)  
  0 = Disabled (Default)  
  1 = Enabled
  1 = Enabled
When enabled vfpu opcode vmmul produce less accurate result, but calculation produce much less of recompiled code.
Known affected games: Tekken 6 should have "leg shaking issues" when enabled. Enabled can be used as very minor speedhack for vmmul intensive games
|-
|-
| || VMX_FOR_FPU = %lld || ||
| || VMX_FOR_FPU = %lld || ||
  0 = Disabled
  0 = Disabled
  1 = Enabled (Default)
  1 = Enabled (Default)
When enabled allegrex fpu opcodes are recompiled to use altivec regs/opcodes.
When disabled allegrex fpu opcodes are recompiled using cell fpu regs/opcodes.
This setting affects only COP1 fpu, COP2 vfpu always use altivec.
|-
|-
| || FPU_FS_SUPPORT = %lld || ||
| || FPU_FS_SUPPORT = %lld || ||
  0 = Disabled
  0 = Disabled
  1 = Enabled (Default)
  1 = Enabled (Default)
Used only when VMX_FOR_FPU is set to 0. Seems to determine that status (or maybe sticky only?) flag updates are enabled or no in fcr31 (fcsr).
|-
|-
| || MIPS_CODE_BLOCK_SIZE = %lld || MIPS_CODE_BLOCK_SIZE = 8192 ||
| || MIPS_CODE_BLOCK_SIZE = %lld || MIPS_CODE_BLOCK_SIZE = 8192 ||
Line 498: Line 252:
| || LINCOLN_START_SIZE = %llx || || ELF Size?
| || LINCOLN_START_SIZE = %llx || || ELF Size?
|-
|-
| || TRANSLATOR_PATCH[%lld] = { ||
| || TRANSLATOR_PATCH[%lld] = { %08x } || ||  
TRANSLATOR_PATCH[1] = {
%lld = Number of patches to allocate<br>
08872844
Format goes like this - all values being 32Bit hexdecimal:<br>
08872844
= { start_address? end_address? patch1 patch2 .... (optional: count_for_buff2 buff2_value1 buff2_value2..) }
0E2112D6
00000001
60000000
}
||
Format goes like this - all values being 32Bit hexdecimal, new lines required:<br>
TRANSLATOR_PATCH[count] = { // 1 for one set, size doesn't matter.
start_address               // to check and replace original opcodes.
end_address                 // to check and replace original opcodes.
original_opcodes            // Mips big endian (byte reversed) if more than one, separated with new lines.
replacement_opcodes_count  // single op = 1, two opcodes = 2, etc.
replacement_opcodes        // PowerPC opcodes, yes PPC. Big Endian. Injected directly into recompiled code.
}                           //
                            // New line is REQUIRED here after closing bracket
|-
|-
| || OSK_ENGLISH = %lld || || On Screen Keyboard
| || OSK_ENGLISH = %lld || || On Screen Keyboard
Line 614: Line 354:
|-
|-
| || ADDITIONAL_KEY_ASSIGN = %llx || ADDITIONAL_KEY_ASSIGN = 0000000047C6C544 ||
| || ADDITIONAL_KEY_ASSIGN = %llx || ADDITIONAL_KEY_ASSIGN = 0000000047C6C544 ||
  0000000047C6C544 : Maps right analog stick, usefull for 3rd person camera viewing
  0000000047C6C544 : maps right analog stick, usefull for 3rd person camera viewing
  0000000048C0C940 : Maps L + R to right analog stick left and right.
  0000000048C0C940 : maps L + R to right analog stick left and right
0000000000C90048 : Maps L + R to right analog stick up and down.
  8000000000000000 : unknown. Note: Possibly switches X/O buttons, to be confirmed.
  8000000000000000 : unknown. Note: Possibly switches X/O buttons, to be confirmed.
|-
|-
Line 623: Line 362:
  Ese = convert characters
  Ese = convert characters
|-
|-
| || FAKE_PATH = %s || || (max. length 0x400 bytes)
| || FAKE_PATH = %s || || (max. lenght 0x400 bytes)
|-
|-
| || SAVEDATA_LOAD_CACHE_TARGET_NAME = %s || SAVEDATA_LOAD_CACHE_TARGET_NAME = ULJM05637DQUEST ||
| || SAVEDATA_LOAD_CACHE_TARGET_NAME = %s || SAVEDATA_LOAD_CACHE_TARGET_NAME = ULJM05637DQUEST ||
Line 648: Line 387:
|-
|-
| || VSYNC_OFFSET_US = %lld || VSYNC_OFFSET_US = 8341 ||
| || VSYNC_OFFSET_US = %lld || VSYNC_OFFSET_US = 8341 ||
  8341 = 0x2095 (Default for Minis)
  8341 = 0x2095 (Default)
16000 = 0x3E80 (Default for Remaster)
  2000 = 0x07D0 (Legend of Heroes/Eiyū Densetsu HD Remasters)
  2000 = 0x07D0 (Legend of Heroes/Eiyū Densetsu HD Remasters)
|-
|-
| || ADHOC_PARTY = %llx || ADHOC_PARTY = 1 ||
| || ADHOC_PARTY = %llx || ADHOC_PARTY = 1 ||
  0 = Disabled (Default for Minis)
  0 = Disabled (Default)
  1 = Enable Ad hoc Multiplayer (Default for Remaster)
  1 = Enable Ad hoc Multiplayer
|-
|-
| || GPI = 0x%llx || ||
| || GPI = 0x%llx || ||
Line 697: Line 435:
|-
|-
|}
|}
</div>
Note: Text commands are translated to hex values and sent to PEmuCoreLib by "A10CF196" export/import.


=== Special notes ===
=== Special notes ===
Line 3,157: Line 2,893:
  01 00||01 11      11 00||01 10    11 00||01 01    01 00||01 00
  01 00||01 11      11 00||01 10    11 00||01 01    01 00||01 00
  ||        ||                ||              ||              ||
  ||        ||                ||              ||              ||
  Right |D-Pad            D-Pad          D-Pad          D-Pad
  Left  |D-Pad            D-Pad          D-Pad          D-Pad
  Stick | Left              Down          Right              Up
  Stick | Left              Down          Right              Up
  Left
  Right


     4  8              C  6            C  9            4  4    = 0x48C6C944
     4  8              C  6            C  9            4  4    = 0x48C6C944
Line 3,166: Line 2,902:
  Right      L            D-Pad              R          D-Pad
  Right      L            D-Pad              R          D-Pad
  Stick                    Down                              Up
  Stick                    Down                              Up
  Left
  Right


     4  F              C  E            C  D            4  C    = 0x4FCECD4C
     4  F              C  E            C  D            4  C    = 0x4FCECD4C
Line 3,172: Line 2,908:
  ||        ||                ||              ||              ||
  ||        ||                ||              ||              ||
  Right|Square            Cross          Circle        Triangle
  Right|Square            Cross          Circle        Triangle
  Stick
  Stick                                                        
  Left
  Right


{| class="wikitable" style="float:left; margin:5px;"
{| class="wikitable" style="float:left; margin:5px;"
Line 3,272: Line 3,008:
**Stick directions could be maped to axis: {{padlx}} {{padly}} {{padrx}} {{padry}}
**Stick directions could be maped to axis: {{padlx}} {{padly}} {{padrx}} {{padry}}
**There are more button icons if needed in [[TemplateTest#Buttons]] page <!-- delete this line when the tables are completed -->
**There are more button icons if needed in [[TemplateTest#Buttons]] page <!-- delete this line when the tables are completed -->
==== VFPU opcodes without recompiler implementation ====
While whole emu uses recompiler, most vfpu opcodes still fallback to interpreter. Only load/stores, branches, compares, and conversions have rec implementation. Here is the list of interpreted opcodes:
vabs      vi2c      vrnds
vadd      vi2f      vrot
vasin      vi2s      vrsq
vavg      vi2uc      vs2i
vbfy1      vi2us      vsat
vbfy2      vidt      vsat1
vc2i      viim      vsbn
vcmovf    vlgb      vsbz
vcmovt    vlog2      vscl
vcmp      vmax      vscmp
vcos      vmidt      vsge
vcrs      vmin      vsgn
vcrsp      vmmov      vsin
vcst      vmmul      vslt
vdet      vmone      vsocp
vdiv      vmov      vsqrt
vdot      vmscl      vsrt1
vexp2      vmul      vsrt2
vf2h      vmzero    vsrt3
vf2id      vneg      vsrt4
vf2in      vnone      vsub
vf2iu      vnrcp      vt4444
vf2iz      vnsin      vt5551
vfad      vocp      vt5650
vfim      vqmul      vtfm2
vh2f      vrcp      vtfm3
vhdp      vrexp2    vtfm4
vhtfm2    vrndf1    vus2i
vhtfm3    vrndf2    vwbn
vhtfm4    vrndi      vzero


{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude>
{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude>
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)