VSMX: Difference between revisions
m (→Header) |
m (cosmetic color) |
||
Line 16: | Line 16: | ||
=File Layout= | =File Layout= | ||
(section naming need to be wikifyed): | (section naming need to be wikifyed): | ||
< | *<span style="background-color:#00ffdd; color:#000000;"> VSMX header</span> | ||
VSMX header | |||
Compiled code/instructions | *<span style="background-color:#ffffdd; color:#000000;"> Compiled code/instructions</span> | ||
Data/String constants | |||
(method) name table/Object property | *<span style="background-color:#ffdddd; color:#000000;"> Data/String constants</span> | ||
global symbols/Variable/function names | |||
</ | *<span style="background-color:#ddddff; color:#000000;"> (method) name table/Object property</span> | ||
*<span style="background-color:#ddffdd; color:#000000;"> global symbols/Variable/function names</span> | |||
= Header = | = Header = | ||
Line 28: | Line 30: | ||
{| class="wikitable" style="text-align: center;" | {| class="wikitable" style="text-align: center;" | ||
|- | |- | ||
| style="background-color:# | | style="background-color:#56534D; color:#ffffff;" |'''Offset''' | ||
| style="background-color:# | | style="background-color:#56534D; color:#ffffff;" |'''Size''' | ||
| style="background-color:# | | style="background-color:#56534D; color:#ffffff;" |'''Example (hex)'''<BR />from coldboot.jsx | ||
| style="background-color:# | | style="background-color:#56534D; color:#ffffff;" |'''Value (conversion)''' | ||
| style="background-color:# | | style="background-color:#56534D; color:#ffffff;" |'''Notes''' | ||
|- | |-{{cellcolors|#00ffdd}} | ||
| 0x00 || 0x04 || 0x56534D58 || VSMX || Magic | | 0x00 || 0x04 || 0x56534D58 || VSMX || Magic | ||
|- | |-{{cellcolors|#00ffdd}} | ||
| 0x04 || 0x04 || 0x00000200 || 2.0 || Mayor version.Minor version (PSP=1.0) (PS3=2.0) | | 0x04 || 0x04 || 0x00000200 || 2.0 || Mayor version.Minor version (PSP=1.0) (PS3=2.0) | ||
|-{{cellcolors|#ffffdd}} | |-{{cellcolors|#ffffdd}} |
Revision as of 11:29, 30 October 2014
Description
Virtual Script Machine Instructions (VSMX) file
Used on:
- RAF file (and so, on Coldboot.raf) with a filename extension .jsx
- some PSP rco
History:
Rcomage can compile/decompile .jsx (VSMX) <=> .JS (need to change the VSMX version at offset 0x04 to 01 (PSP?) instead of 02 (PS3?)
but it's very buggy and usually doesn't work right
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 (hex) from coldboot.jsx |
Value (conversion) | Notes |
0x00 | 0x04 | 0x56534D58 | VSMX | Magic |
0x04 | 0x04 | 0x00000200 | 2.0 | Mayor version.Minor version (PSP=1.0) (PS3=2.0) |
0x08 | 0x04 | 0x34000000 | 0x34 | absolute offset of compiled code/instructions section (also, header length) |
0x0C | 0x04 | 0x30100000 | 0x1030 | length of compiled code/instructions section |
0x10 | 0x04 | 0x64100000 | 0x1064 | absolute offset of data section |
0x14 | 0x04 | 0x7A000000 | 0x7A | length of data section |
0x18 | 0x04 | 0x08000000 | 0x8 | number of datas inside data section |
0x1C | 0x04 | 0xDE100000 | 0x10DE | absolute offset of name table |
0x20 | 0x04 | 0xA2000000 | 0xA2 | length of name table |
0x24 | 0x04 | 0x09000000 | 0x9 | number of names inside name table |
0x28 | 0x04 | 0x80110000 | 0x1180 | absolute offset of global symbols table |
0x2C | 0x04 | 0x70010000 | 0x170 | length of global symbols table |
0x30 | 0x04 | 0x23000000 | 0x23 | number of global symbols inside global symbols table |
- VSMX files are used on:
- PSP (inside RCO's from video/music UMDs, and two lftv firmware RCO's in flash0/vsh/resource/...)
- PS3 (inside .RAF's)
- PSVita & PS4 (unknown)
Compiled instructions
- Instructions length: 2x4 bytes?
- See Pastebin (without the header) of the coldboot.
OpCode (short) | Mnemonics (official) | Mnemonics (rcomage) | Note1 | Note2 |
---|---|---|---|---|
0x00 | NOP | - | - | - |
0x01 | ASSGN | ASSIGN | Assignment Operators | - |
0x02 | ADD | ADD | Arithmetic Operators | - |
0x03 | SUB | - | Arithmetic Operators | - |
0x04 | MUL | MULTIPLY | Arithmetic Operators | - |
0x05 | DIV | DIVIDE | Arithmetic Operators | - |
0x06 | MOD | - | Arithmetic Operators | - |
0x07 | TO_NUMBER | - | - | - |
0x08 | CSIGN | NEGATE | - | - |
0x09 | NOT | - | - | - |
0x0A | INC | - | Arithmetic Operators | - |
0x0B | DEC | - | Arithmetic Operators | - |
0x0C | POST_INC | - | - | - |
0x0D | POST_DEC | - | - | - |
0x0E | CMPEQ | TEST_EQUAL | 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 | - | Bitwise Operators | - |
0x1A | BIT_XOR | - | Bitwise Operators | - |
0x1B | BIT_OR | - | Bitwise Operators | - |
0x1C | BIT_NOT | - | Bitwise Operators | - |
0x1D | LSHIFT | - | Bitwise Operators | - |
0x1E | S_RSHIFT | - | Bitwise Operators | - |
0x1F | U_RSHIFT | - | - | - |
0x20 | COPY | - | - | - |
0x21 | SWAP | - | - | - |
0x22 | REMOVE | END_STATEMENT | - | - |
0x23 | PUSH_UNDEFINED | CONST_NULL | - | - |
0x24 | PUSH_NULL | - | - | - |
0x25 | PUSH_BOOL | - | - | - |
0x26 | PUSH_INT | CONST_INT | - | - |
0x27 | PUSH_FLOAT | CONST_FLOAT | - | - |
0x28 | PUSH_STRING | CONST_STRING | - | - |
0x29 | PUSH_OBJECT | - | - | - |
0x2A | PUSH_FUNC | FUNCTION | - | uses table pointers ! |
0x2B | PUSH_ARRAY | - | - | - |
0x2C | PUSH_THIS | - | - | - |
0x2D | PUSH_LOCAL | UNNAMED_VARIABLE | - | - |
0x2E | PUSH_GLOBAL | NAME | - | - |
0x2F | GETATTR | PROPERTY | - | - |
0x30 | GETATTR_KEEPOBJ | METHOD | - | - |
0x31 | SETATTR | SET | - | - |
0x32 | DELATTR | - | - | - |
0x33 | APPEND_ATTR | - | - | - |
0x34 | GETITEM | - | - | - |
0x35 | GETITEM_KEEPOBJ | - | - | - |
0x36 | SETITEM | ARRAY_INDEX_ASSIGN | - | - |
0x37 | DELITEM | - | - | - |
0x38 | APPEND_ITEM | - | - | - |
0x39 | JUMP | JUMP | - | - |
0x3A | JUMPT | - | - | - |
0x3B | JUMPF | JUMP_IF_FALSE | - | - |
0x3C | CALL_FUNC | - | - | - |
0x3D | CALL_METHOD | CALL_METHOD | - | - |
0x3E | CALL_CONSTRUCTOR | CALL_INBUILT | - | - |
0x3F | RET | RETURN | - | - |
0x40 | THROW | - | - | - |
0x41 | TRYBLK_IN | - | - | - |
0x42 | TRYBLK_OUT | - | - | - |
0x43 | CATCH_FINALLYBLK_IN | - | - | - |
0x44 | CATCH_FINALLYBLK_OUT | - | - | - |
0x45 | HALT | END_SCRIPT | - | - |
0x46 | DEBUG_FILE | - | - | - |
0x47 | DEBUG_LINE | - | - | - |
0x48 | GETITEM_KEEPOBJNAME | - | - | - |
0x49 | PUSH_VECTOR | UNKNOWN_49 | - | - |
0x4A | GET_VECTOR_ELEMENT | UNKNOWN_4a | - | - |
0x4B | GET_VECTOR_ELEMENT_KEEPVECTOR | - | - | - |
0x4C | ASSGN_VECTOR_ELEMENT | - | - | - |
0x4D | SETATTR_VECTOR_ELEMENT | UNKNOWN_4d | - | - |
0x4E | SETITEM_VECTOR_ELEMENT | - | - | - |
Arithmetic Operators
May be move later to PlayStation_JavaScript or make it as template
Arithmetic operators are used to perform arithmetic between variables and/or values.
OpCode (VSMX) | Mnemonics (VSMX) | Syntax (PSJS) | Description: |
---|---|---|---|
0x02 | ADD | + | Addition |
0x03 | SUB | - | Subtraction |
0x04 | MUL | * | Multiplication |
0x05 | DIV | / | Division |
0x06 | MOD | % | Modulus (division remainder) |
0x0A | INC | ++ | Increment |
0x0B | DEC | -- | Decrement |
Bitwise Operators
Bit operators work on 32 bits numbers.
Any numeric operand in the operation is converted into a 32 bit number.
OpCode (VSMX) | Mnemonics (VSMX) | Syntax (PSJS) | Description: |
---|---|---|---|
0x19 | BIT_AND | & | AND |
0x1B | BIT_OR | | | OR |
0x1C | BIT_NOT | ~ | NOT |
0x1A | BIT_XOR | ^ | XOR |
0x1D | LSHIFT | << | Left Shift |
0x1E | S_RSHIFT | >> | Right Shift |
Compare Operators
Comparison and Logical operators are used to test for true or false.
Comparison operators are used in logical statements to determine equality or difference between variables or values.
OpCode (VSMX) | Mnemonics (VSMX) | Syntax (PSJS) | Description: |
---|---|---|---|
0x0E | CMPEQ | == | Equality |
0x10 | CMPSEQ | === | Strict Equal value and equal type |
0x0F | CMPNEQ | != | Inequality |
0x11 | CMPSNEQ | !== | Strict not equal value or not equal type |
0x15 | CMPGT | > | Greater Than |
0x14 | CMPGE | >= | Greater Than or Equal To |
0x12 | CMPLT | < | Less Than |
0x13 | CMPLE | <= | Less Than or Equal To |
- http://es5.github.io/#x11.9.3 The Abstract Equality Comparison Algorithm
- http://es5.github.io/#x11.9.6 The Strict Equality Comparison Algorithm
Logical Operators
Comparison and Logical operators are used to test for true or false.
Logical operators are used to determine the logic between variables or values.
OpCode (VSMX) | Mnemonics (VSMX) | Syntax (PSJS) | Description: |
---|---|---|---|
- | || | or | |
- | && | and |
|