mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-25 08:56:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| Note: a word is considered to be 32 bit long.
 | |
| 
 | |
| Header (4 words):
 | |
| word: number of words in code block
 | |
| word: number of words in integer literal block
 | |
| word: number of words in float literal block
 | |
| word: number of words in string literal block
 | |
| 
 | |
| Body (variable length):
 | |
| code block
 | |
| integer literal block (contains a collection of 1 word long integers)
 | |
| float literal block (contains a collection of 1 word long floating point numbers)
 | |
| string literal block (contains a collection of strings of variable length, word-padded)
 | |
| 
 | |
| Code bit-patterns:
 | |
| 
 | |
| 3322222222221111111111
 | |
| 10987654321098765432109876543210
 | |
| 00ccccccAAAAAAAAAAAAAAAAAAAAAAAA segment 0: 64 opcodes, 1 24-bit argument
 | |
| 01ccccccAAAAAAAAAAAABBBBBBBBBBBB segment 1: 64 opcodes, 2 12-bit arguments
 | |
| 10ccccccccccAAAAAAAAAAAAAAAAAAAA segment 2: 1024 opcodes, 1 20-bit argument
 | |
| 110000ccccccccccccccccccAAAAAAAA segment 3: 262144 opcodes, 1 8-bit argument
 | |
| 110001ccccccccccAAAAAAAABBBBBBBB segment 4: 1024 opcodes, 2 8-bit arguments
 | |
| 110010cccccccccccccccccccccccccc segment 5: 67108864 opcodes, no arguments
 | |
| other bit-patterns reserved
 | |
| 
 | |
| legent:
 | |
| c: code
 | |
| A: argument 0
 | |
| B: argument 1
 | |
| 
 | |
| Segment 0:
 | |
| op  0: push arg0
 | |
| op  1: move pc ahead by arg0
 | |
| op  2: move pc back by arg0
 | |
| opcodes 3-31 unused
 | |
| opcodes 32-63 reserved for extensions
 | |
| 
 | |
| Segment 1:
 | |
| opcodes 0-31 unused
 | |
| opcodes 32-63 reserved for extensions
 | |
| 
 | |
| Segment 2:
 | |
| opcodes 0-511 unused
 | |
| opcodes 512-1023 reserved for extensions
 | |
| 
 | |
| Segment 3:
 | |
| op    0: show message box with message string literal index in stack[0];
 | |
|          buttons (if any) in stack[arg0]..stack[1];
 | |
|          additional arguments (if any) in stack[arg0+n]..stack[arg0+1];
 | |
|          n is determined according to the message string
 | |
|          all arguments are removed from stack
 | |
| opcodes 1-131071 unused
 | |
| opcodes 131072-262143 reserved for extensions
 | |
| 
 | |
| Segment 4:
 | |
| opcodes 0-511 unused
 | |
| opcodes 512-1023 reserved for extensions
 | |
| 
 | |
| Segment 5:
 | |
| op   0: store stack[0] in local short stack[1] and pop twice
 | |
| op   1: store stack[0] in local long stack[1] and pop twice
 | |
| op   2: store stack[0] in local float stack[1] and pop twice
 | |
| op   3: convert stack[0] from integer to float
 | |
| op   4: replace stack[0] with integer literal index stack[0]
 | |
| op   5: replace stack[0] with float literal index stack[0]
 | |
| op   6: convert stack[0] from float to integer
 | |
| op   7: invert sign of int value stack[0]
 | |
| op   8: invert sign of float value stack[0]
 | |
| op   9: add (integer) stack[0] to stack[1], pop twice, push result
 | |
| op  10: add (float) stack[0] to stack[1], pop twice, push result
 | |
| op  11: sub (integer) stack[1] from stack[0], pop twice, push result
 | |
| op  12: sub (float) stack[1] from stack[0], pop twice, push result
 | |
| op  13: mul (integer) stack[0] with stack[1], pop twice, push result
 | |
| op  14: mul (float) stack[0] with stack[1], pop twice, push result
 | |
| op  15: div (integer) stack[1] by stack[0], pop twice, push result
 | |
| op  16: div (float) stack[1] by stack[0], pop twice, push result
 | |
| op  17: convert stack[1] from integer to float
 | |
| op  18: convert stack[1] from float to integer
 | |
| opcode 19 unused
 | |
| op  20: return
 | |
| op  21: replace stack[0] with local short stack[0]
 | |
| op  22: replace stack[0] with local long stack[0]
 | |
| op  23: replace stack[0] with local float stack[0]
 | |
| op  24: skip next instruction if stack[0]==0; pop
 | |
| op  25: skip next instruction if stack[0]!=0; pop
 | |
| op  26: compare (intger) stack[1] with stack[0]; pop twice; push 1 if equal, 0 else
 | |
| op  27: compare (intger) stack[1] with stack[0]; pop twice; push 1 if no equal, 0 else
 | |
| op  28: compare (intger) stack[1] with stack[0]; pop twice; push 1 if lesser than, 0 else
 | |
| op  29: compare (intger) stack[1] with stack[0]; pop twice; push 1 if lesser or equal, 0 else
 | |
| op  30: compare (intger) stack[1] with stack[0]; pop twice; push 1 if greater than, 0 else
 | |
| op  31: compare (intger) stack[1] with stack[0]; pop twice; push 1 if greater or equal, 0 else
 | |
| op  32: compare (float) stack[1] with stack[0]; pop twice; push 1 if equal, 0 else
 | |
| op  33: compare (float) stack[1] with stack[0]; pop twice; push 1 if no equal, 0 else
 | |
| op  34: compare (float) stack[1] with stack[0]; pop twice; push 1 if lesser than, 0 else
 | |
| op  35: compare (float) stack[1] with stack[0]; pop twice; push 1 if lesser or equal, 0 else
 | |
| op  36: compare (float) stack[1] with stack[0]; pop twice; push 1 if greater than, 0 else
 | |
| op  37: compare (float) stack[1] with stack[0]; pop twice; push 1 if greater or equal, 0 else
 | |
| opcode 38 unused
 | |
| op  39: store stack[0] in global short stack[1] and pop twice
 | |
| op  40: store stack[0] in global long stack[1] and pop twice
 | |
| op  41: store stack[0] in global float stack[1] and pop twice
 | |
| op  42: replace stack[0] with global short stack[0]
 | |
| op  43: replace stack[0] with global long stack[0]
 | |
| op  44: replace stack[0] with global float stack[0]
 | |
| opcodes 45-57 unused
 | |
| op  58: report string literal index in stack[0];
 | |
|          additional arguments (if any) in stack[n]..stack[1];
 | |
|          n is determined according to the message string
 | |
|          all arguments are removed from stack
 | |
| op 59: store stack[0] in member short stack[2] of object with ID stack[1]
 | |
| op 60: store stack[0] in member long stack[2] of object with ID stack[1]
 | |
| op 61: store stack[0] in member float stack[2] of object with ID stack[1]
 | |
| op 62: replace stack[0] with member short stack[1] of object with ID stack[0]
 | |
| op 63: replace stack[0] with member short stack[1] of object with ID stack[0]
 | |
| op 64: replace stack[0] with member short stack[1] of object with ID stack[0]
 | |
| op 65: store stack[0] in member short stack[2] of global script with ID stack[1]
 | |
| op 66: store stack[0] in member long stack[2] of global script with ID stack[1]
 | |
| op 67: store stack[0] in member float stack[2] of global script with ID stack[1]
 | |
| op 68: replace stack[0] with member short stack[1] of global script with ID stack[0]
 | |
| op 69: replace stack[0] with member short stack[1] of global script with ID stack[0]
 | |
| op 70: replace stack[0] with member short stack[1] of global script with ID stack[0]
 | |
| opcodes 71-33554431 unused
 | |
| opcodes 33554432-67108863 reserved for extensions
 |