@sage-js/res-osi

SAGE resource OSI

Usage no npm install needed!

<script type="module">
  import sageJsResOsi from 'https://cdn.skypack.dev/@sage-js/res-osi';
</script>

README

SAGE-JS RES-OSI

The main OSI resource module for SAGE-JS.

Overview

Provides an API for working with OSI files.

Includes a number of abstract instructions that can be used to make manipulating assembly easier.

Instructions

Abstract

Name Size Args Info
JumpTarget 0 i32u Target for PushConstanti32JumpTarget with same ID
PushConstanti32JumpTarget 5 i32u i32s Replaces PushConstanti32 before JumpRelative references JumpTarget with target and offset*
BranchTarget 0 i32u Target for CompareAndBranchIfFalseTarget and BranchAlwaysTarget with same ID
BranchAlwaysTarget 3 i32u i16s Replaces BranchAlways, with target and offset*
CompareAndBranchIfFalseTarget 3 i32u i16s Replaces CompareAndBranchIfFalse, with target and offset*
PushConstantStringString 3 sp8n Replaces PushConstantString with inline strings from string table
GetThisMemberFunctionString 3 sp8n Replaces GetThisMemberFunction with inline strings from symbol table
GetThisMemberValueString 3 sp8n Replaces GetThisMemberValue with inline strings from symbol table
SetThisMemberValueString 3 sp8n Replaces SetThisMemberValue with inline strings from symbol table
GetMemberFunctionString 3 sp8n Replaces GetMemberFunction with inline strings from symbol table
GetMemberValueString 3 sp8n Replaces GetMemberValue with inline strings from symbol table
SetMemberValueString 3 sp8n Replaces SetMemberValue with inline strings from symbol table
GetGameVariableString 2 sp8n sp8n Replaces GetGameVariable with inline strings from string table
SetGameVariableString 2 sp8n sp8n Replaces SetGameVariable with inline strings from string table
CallGameFunctionString 3 sp8n sp8n i8s Replaces CallGameFunction with inline strings from string table
CallGameFunctionFromStringString 2 sp8n i8s Replaces CallGameFunctionFromString with inline string from string table

* Instructions that jump to targets include an offset to handle jumps to point between instructions (compensates for off-by-one error in some original code).

BCL

Byte Name Size Args Stack Info
0x00 Nop 1 Do nothing
0x02 DebugOn 1 Enable debug or fail if disabled in engine
0x03 DebugOff 1 Disable debug or fail if disabled in engine
0x04 LineNumber 5 i16u i16u Source line, possibly for assembly line and column
0x05 LineNumberAlt1 5 i16u i16u Source line, line number, source file index
0x06 LineNumberAlt2 5 i16u i16u Source line number, unknown
0x10 SetMemberValue 3 i16u -2 Set object property by symbol index
0x11 GetMemberValue 3 i16u -1 +1 Get object property by symbol index
0x12 GetMemberFunction 3 i16u -1 +1 Get object method address by symbol index
0x13 CreateObject 3 i16u +1 Create an object by class ID
0x14 MemberFunctionArgumentCheck 2 i8s +N Check the arg count <= N and add N number of stack variables
0x15 SetThisMemberValue 3 i16u -1 Set this property by symbol index
0x16 GetThisMemberValue 3 i16u +1 Get this property by symbol index
0x17 GetThisMemberFunction 3 i16u +1 Get this method address by symbol index
0x18 GetMemberValueFromString 1 -2 +1 Get object property by string index
0x19 GetMemberFunctionFromString 1 -2 +1 Get object method address by string index
0x1A SetMemberValueFromString 1 -3 Set object property by string index
0x21 GetVariableValue 3 i16u +1 Get variable by index (highest bit means global)
0x22 SetVariableValue 3 i16u -1 Set variable by index (highest bit means global)
0x23 CreateStackVariables 2 i8s +N Add N number of stack variables
0x24 IncrementVariable 3 i16u Increment variable by index (highest bit means global)
0x25 DecrementVariable 3 i16u Decrement variable by index (highest bit means global)
0x30 Pop 1 -1 Pop a value off the stack
0x31 PopN 2 i8s -N Pop N values off the stack
0x32 Swap 1 -2 +2 Swap last 2 values on stack
0x33 Pull 2 i8s +1 Duplicate stack value by index onto stack
0x34 DupN 2 i8s +N Duplicate last stack value N times
0x35 Dup 1 +1 Duplicate last stack value
0x40 PushConstanti32 5 i32s +1 Push constant integer value
0x41 PushConstanti24 4 int24s +1 Unimplemented
0x42 PushConstanti16 3 i16s +1 Push constant integer value
0x43 PushConstanti8 2 i8s +1 Push constant integer value
0x44 PushConstantf32 5 f32 +1 Push constant float value
0x45 PushConstant0 1 +1 Push constant integer value 0
0x46 PushConstantString 3 i16u +1 Push string from string table
0x47 PushNothing 1 +1 Push the nothing type
0x48 PushConstantColor8888 5 i32u +1 Push constant color value
0x49 PushConstantColor5551 3 i16u +1 Push constant color value
0x50 JumpRelative 2 i8s -1 Jump to popped address relative to file start
0x51 JumpAbsolute 2 i8s -1 Jump to popped address in memory
0x52 Return 1 ?* Return from current subroutine
0x53 CompareAndBranchIfFalse 3 i16s -1 Jump N number of bytes from after instruction if false or i0
0x54 BranchAlways 3 i16s Jump N number of bytes from after instruction
0x60 EqualTo 1 -2 +1 Compare last 2 values on stack
0x61 LessThan 1 -2 +1 Compare last 2 values on stack
0x62 GreaterThan 1 -2 +1 Compare last 2 values on stack
0x63 LessOrEqual 1 -2 +1 Compare last 2 values on stack
0x64 GreaterOrEqual 1 -2 +1 Compare last 2 values on stack
0x6A And 1 -2 +1 Check last 2 values on stack are both true
0x6B Or 1 -2 +1 Check last 2 values on stack are have true
0x6C Not 1 -2 +1 Check last 2 values on stack are not true
0x6D BitwiseAnd 1 -2 +1 Bitwise and last 2 values on stack
0x6E BitwiseOr 1 -2 +1 Bitwise or last 2 values on stack
0x6F BitwiseXor 1 -2 +1 Bitwise xor last 2 values on stack
0x70 Add 1 -2 +1 Add the last 2 values on stack
0x71 Subtract 1 -2 +1 Subtract the last 2 values on stack
0x72 Multiply 1 -2 +1 Multiply the last 2 values on stack
0x73 Divide 1 -2 +1 Divide the last 2 values on stack
0x74 Power 1 -2 +1 Raise to power the last 2 values on stack
0x75 Modulus 1 -2 +1 Modulus operator the last 2 values on stack
0x76 BitwiseNot 1 -1 +1 Bitwise not last value on stack
0x77 ShiftLeft 1 -2 +1 Bitwise shift left last 2 values on stack
0x78 ShiftRight 1 -2 +1 Bitwise shift right last 2 values on stack
0x7A Increment 1 -1 +1 Increment value of last value on stack by 1
0x7B Decrement 1 -1 +1 Decrement value of last value on stack by 1
0x80 GetGameVariable 5 i16u i16u Get variable by ns and name string index seems non-functional
0x81 SetGameVariable 5 i16u i16u Set variable by ns and name string index seems non-functional
0x82 CallGameFunction 6 i16u i16u i8s ?* Call native by ns and name string index, N args
0x83 CallGameFunctionFromString 6 i16u i8s ?* Call native by ns string index and stack string, N args
0x84 CallGameFunctionDirect 6 i32s i8s ?* Call native by address, N args (should only exist in memory)
0x90 CreateArray 1 +1 Create array
0x91 GetArrayValue 1 -2 +1 Get array or string table element
0x92 ElementsInArray 1 -1 +1 Get array or string table length
0x93 SetArrayValue 1 -3 Set array element
0x94 AppendToArray 1 -2 Push array element
0x95 RemoveFromArray 1 -2 Remove array element at index
0x96 InsertIntoArray 1 -3 Add array element at index
0xA0 SetRedValue 1 -2 +1 Set color red value
0xA1 SetGreenValue 1 -2 +1 Set color green value
0xA2 SetBlueValue 1 -2 +1 Set color blue value
0xA3 SetAlphaValue 1 -2 +1 Set color alpha value
0xA4 GetRedValue 1 -1 +1 Get color red value
0xA5 GetGreenValue 1 -1 +1 Get color green value
0xA6 GetBlueValue 1 -1 +1 Get color blue value
0xA7 GetAlphaValue 1 -1 +1 Get color alpha value
0xB0 ConvertToString 1 -1 +1 Convert last stack element to string
0xB1 ConvertToFloat 1 -1 +1 Convert last stack element to float
0xB2 ConvertToInteger 1 -1 +1 Convert last stack element to integer
0xB8 IsInteger 1 -1 +1 Check if last stack element is integer
0xB9 IsFloat 1 -1 +1 Check if last stack element is float
0xBA IsString 1 -1 +1 Check if last stack element is string
0xBB IsAnObject 1 -1 +1 Check if last stack element is an object
0xBC IsGameObject 1 -1 +1 Check if last stack element is a game object
0xBD IsArray 1 -1 +1 Check if last stack element is array
0xBF GetObjectClassID 1 -1 +1 Get object class ID
0xFF Halt 1 +1 Halt execution

* Unclear how many values are pushed and/or popped under what conditions.