VSMX

From PS3 Developer wiki
Jump to navigation Jump to search

Description

Virtual Script Machine Instructions (VSMX) file

Used on:

History:

Rcomage:

does also have a VSMX decompile option (rcomage vsmxdec --decompile) 

but it's very buggy and usually doesn't work right (Try hex editing the version? (at 0x4) 

from 0x20000 to 0x10000.).

File Layout

(section naming need to be wikifyed):

VSMX header
Compiled code/instructions
Data/String constants
(method) name table/Object property
global symbols/Variable/function names

Header

Offset Size Example (h) Value (conversion) Notes
0x00 0x04 0x56534D58 "VSMX" Magic
0x04 0x04 0x00000200 0002.0000 Version?
  • v1.0 on PSP RCO RCOs (from video/music UMDs and two lftv RCOs in the PSP's flash0/vsh/ressource/.)?
  • V2.0 on PS3 PSJS (.jsx)
0x08 0x04 0x34000000 0x34 (52) header length
0x0C 0x04 - length of compiled code/instructions section
0x10 0x04 - offset of data section
0x14 0x04 - length of data
0x18 0x04 - number of data(seen: 1 or 2)
0x1C 0x04 - offset of name table
0x20 0x04 - length of name
0x24 0x04 - number of name
0x28 0x04 - offset of global symbols
0x2C 0x04 - length of global symbols
0x30 0x04 - number of global symbols

Compiled instructions

  • Instructions length: 8 bytes

Instructions format should be wikifyed.

ByteCode (short) Instruction Name Note1 Note2
0x00 NOP - -
0x01 ASSGN - -
0x02 ADD - -
0x03 SUB - -
0x04 MUL - -
0x05 DIV - -
0x06 MOD - -
0x07 TO_NUMBER - -
0x08 CSIGN - -
0x09 NOT - -
0x0A INC - -
0x0B DEC - -
0x0C POST_INC - -
0x0D POST_DEC - -
0x0E CMPEQ Compare Operators -
0x0F CMPNEQ Compare Operators -
0x10 CMPSEQ Compare Operators -
0x11 CMPSNEQ Compare Operators -
0x12 CMPLT Compare Operators -
0x13 CMPLE Compare Operators -
0x14 CMPGE Compare Operators -
0x15 CMPGT Compare Operators -
0x16 INSTANCEOF - -
0x17 IN - -
0x18 TYPEOF - -
0x19 BIT_AND - -
0x1A BIT_XOR - -
0x1B BIT_OR - -
0x1C BIT_NOT - -
0x1D LSHIFT - -
0x1E S_RSHIFT - -
0x1F U_RSHIFT - -
0x20 COPY - -
0x21 SWAP - -
0x22 REMOVE - -
0x23 PUSH_UNDEFINED - -
0x24 PUSH_NULL - -
0x25 PUSH_BOOL - -
0x26 PUSH_INT - -
0x27 PUSH_FLOAT - -
0x28 PUSH_STRING - -
0x29 PUSH_OBJECT - -
0x2A PUSH_FUNC - -
0x2B PUSH_ARRAY - -
0x2C PUSH_THIS - -
0x2D PUSH_LOCAL - -
0x2E PUSH_GLOBAL - -
0x2F GETATTR - -
0x30 GETATTR_KEEPOBJ - -
0x31 SETATTR - -
0x32 DELATTR - -
0x33 APPEND_ATTR - -
0x34 GETITEM - -
0x35 GETITEM_KEEPOBJ - -
0x36 SETITEM - -
0x37 DELITEM - -
0x38 APPEND_ITEM - -
0x39 JUMP - -
0x3A JUMPT - -
0x3B JUMPF - -
0x3C CALL_FUNC - -
0x3D CALL_METHOD - -
0x3E CALL_CONSTRUCTOR - -
0x3F RET - -
0x40 THROW - -
0x41 TRYBLK_IN - -
0x42 TRYBLK_OUT - -
0x43 CATCH_FINALLYBLK_IN - -
0x44 CATCH_FINALLYBLK_OUT - -
0x45 HALT - -
0x46 DEBUG_FILE - -
0x47 DEBUG_LINE - -
0x48 GETITEM_KEEPOBJNAME - -
0x49 PUSH_VECTOR - -
0x4A GET_VECTOR_ELEMENT - -
0x4B GET_VECTOR_ELEMENT_KEEPVECTOR - -
0x4C ASSGN_VECTOR_ELEMENT - -
0x4D SETATTR_VECTOR_ELEMENT - -
0x4E SETITEM_VECTOR_ELEMENT - -

Compare Operators

May be move later to PlayStation_JavaScript or make it as template

Comparison and Logical operators are used to test for true or false.

Compare For: Operators Bytecode (PSJS) Syntax (JS)
Equality cmpeq 0x0E ==
Strict Equal value and equal type cmpseq 0x10 ===
Inequality cmpneq 0x0F !=
Strict not equal value or not equal type cmpsneq 0x11 !==
Greater Than cmpgt 0x15 >
Greater Than or Equal To cmpge 0x14 >=
Less Than cmplt 0x12 <
Less Than or Equal To cmple 0x13 <=