lignite 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/NEWS.md +8 -0
- data/VERSION +1 -1
- data/examples/light-sensor.rb +1 -2
- data/lib/lignite/assembler.rb +48 -14
- data/lib/lignite/body_compiler.rb +71 -5
- data/lib/lignite/direct_commands.rb +3 -1
- data/lib/lignite/ev3_ops.rb +255 -14
- data/lib/lignite/op_compiler.rb +1 -1
- data/lib/lignite/parameter_declarer.rb +108 -0
- data/lib/lignite/rbf_declarer.rb +52 -0
- data/lib/lignite/rbf_object.rb +7 -2
- data/lib/lignite/variables.rb +18 -0
- data/lignite.gemspec +8 -0
- data/spec/assembler_spec.rb +9 -6
- data/spec/data/ColorReadout.rb +1 -1
- data/spec/data/Performance.lms +735 -0
- data/spec/data/Performance.rb +690 -0
- data/spec/data/Performance.rbf +0 -0
- data/spec/data/VernierReadout.rb +1 -1
- data/spec/data/p11.c +36 -0
- data/spec/data/p11.rb +20 -0
- data/spec/data/p11.rbf +0 -0
- data/spec/spec_helper.rb +24 -1
- data/tools/ops_from_yml +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b479941700df01dc46fa526001f014920e528ad3
|
4
|
+
data.tar.gz: 00d321b86f44d215261ad1bfbe1d88158c62f3e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c9836db38d2bc17c096e3e73e1e26f54d6701f8be6cec34d0450dd79a6752afabd9db1b20087c7839df612799b5e3c02a5450740576759eaa75e651fc0b6aa4
|
7
|
+
data.tar.gz: fb64659ace34de87e7b133e704eb7577b07aadcd20e80868cc02871c7e5f4725d69b197d319821152b20ef42cf721fab9ef471832384e6a776e228cc504f0634
|
data/.rubocop.yml
CHANGED
data/NEWS.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
## unreleased
|
4
4
|
|
5
|
+
## 0.5.0, 2018-03-05
|
6
|
+
|
7
|
+
- Ev3Ops: added missing array_* ops (with PARV in the signature).
|
8
|
+
- loop_while added, with a Condition prototype: Lt32.
|
9
|
+
- Corrected the variable argument calling convention (PARNO).
|
10
|
+
Before, it was necessary to manually add a parameter specifying the number
|
11
|
+
of the remaining parameters. Now it is automatic.
|
12
|
+
|
5
13
|
## 0.4.0, 2018-03-04
|
6
14
|
|
7
15
|
- Generate Ev3Ops ahead of time, enabling YARD docs for them,
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/examples/light-sensor.rb
CHANGED
@@ -6,14 +6,13 @@ dc = Lignite::DirectCommands.new
|
|
6
6
|
# see 28/31 of Comm dev kit, read light sensor value on port 3
|
7
7
|
LAYER0 = 0
|
8
8
|
MODE = 0
|
9
|
-
count = 1
|
10
9
|
pct = dc.with_reply do
|
11
10
|
# global vars
|
12
11
|
dataf :light
|
13
12
|
|
14
13
|
# TODO: make the block optional if there are no locals. or #with_locals
|
15
14
|
block do
|
16
|
-
input_device_ready_si(LAYER0, Lignite::PORT_3, Lignite::TYPE_KEEP, MODE,
|
15
|
+
input_device_ready_si(LAYER0, Lignite::PORT_3, Lignite::TYPE_KEEP, MODE, :light)
|
17
16
|
end
|
18
17
|
end
|
19
18
|
puts "Light sensor percentage: #{pct}"
|
data/lib/lignite/assembler.rb
CHANGED
@@ -1,11 +1,24 @@
|
|
1
|
+
require "lignite/rbf_declarer"
|
1
2
|
require "lignite/variables"
|
2
3
|
|
3
4
|
module Lignite
|
4
5
|
# Assemble a complete RBF program file.
|
6
|
+
#
|
7
|
+
# The compilation has two passes:
|
8
|
+
#
|
9
|
+
# 1. pass1, Declaration
|
10
|
+
# 2. pass2, Resolution
|
11
|
+
#
|
12
|
+
# After P1, the instruction sequence is iterated. If an item responds to
|
13
|
+
# :pass2, it is replaced by the result of that call.
|
14
|
+
# After pass2 we have a sequence of ByteStrings which are just concatenated
|
15
|
+
#
|
16
|
+
# No, pass1, gather names, pass2 do all the rest
|
5
17
|
class Assembler
|
6
18
|
include Bytes
|
7
19
|
include Logger
|
8
20
|
|
21
|
+
HEADER_SIZE = 16
|
9
22
|
SIGNATURE = "LEGO".freeze
|
10
23
|
def image_header(image_size:, version:, object_count:, global_bytes:)
|
11
24
|
SIGNATURE + u32(image_size) + u16(version) + u16(object_count) +
|
@@ -27,24 +40,34 @@ module Lignite
|
|
27
40
|
@objects = []
|
28
41
|
@globals = Variables.new
|
29
42
|
|
43
|
+
@declarer = RbfDeclarer.new
|
44
|
+
@declarer.instance_eval(rb_text, rb_filename, 1) # 1 is the line number
|
30
45
|
instance_eval(rb_text, rb_filename, 1) # 1 is the line number
|
31
46
|
|
47
|
+
write(rbf_filename, version)
|
48
|
+
end
|
49
|
+
|
50
|
+
def write(rbf_filename, version)
|
51
|
+
image_size = HEADER_SIZE + @objects.map(&:size).reduce(0, :+)
|
52
|
+
|
32
53
|
File.open(rbf_filename, "w") do |f|
|
33
|
-
|
34
|
-
|
54
|
+
header = image_header(image_size: image_size,
|
55
|
+
version: version,
|
56
|
+
object_count: @objects.size,
|
57
|
+
global_bytes: @globals.bytesize)
|
58
|
+
f.write(header)
|
59
|
+
|
60
|
+
object_instruction_offset = HEADER_SIZE + @objects.count * RbfObject::HEADER_SIZE
|
35
61
|
@objects.each do |obj|
|
36
|
-
h = obj.header(
|
62
|
+
h = obj.header(object_instruction_offset)
|
37
63
|
f.write(h)
|
64
|
+
object_instruction_offset += obj.body.bytesize
|
65
|
+
end
|
66
|
+
|
67
|
+
@objects.each do |obj|
|
38
68
|
f.write(obj.body)
|
39
69
|
# align??
|
40
70
|
end
|
41
|
-
size = f.tell
|
42
|
-
f.pos = 0
|
43
|
-
header = image_header(image_size: size,
|
44
|
-
version: version,
|
45
|
-
object_count: @objects.size,
|
46
|
-
global_bytes: @globals.bytesize)
|
47
|
-
f.write(header)
|
48
71
|
end
|
49
72
|
end
|
50
73
|
|
@@ -53,16 +76,27 @@ module Lignite
|
|
53
76
|
end
|
54
77
|
include VariableDeclarer
|
55
78
|
|
56
|
-
def vmthread(
|
79
|
+
def vmthread(name, &body)
|
57
80
|
@locals = Variables.new
|
58
|
-
bodyc = BodyCompiler.new(@globals, @locals)
|
81
|
+
bodyc = BodyCompiler.new(@globals, @locals, @declarer)
|
59
82
|
bodyc.instance_exec(&body)
|
60
83
|
bodyc.instance_exec { object_end }
|
61
|
-
|
62
|
-
logger.debug "VMTHREAD #{id}"
|
84
|
+
logger.debug "VMTHREAD #{name}"
|
63
85
|
logger.debug " size #{bodyc.bytes.bytesize}"
|
64
86
|
logger.debug " " + bin_to_hex(bodyc.bytes)
|
65
87
|
@objects << RbfObject.vmthread(body: bodyc.bytes, local_bytes: @locals.bytesize)
|
66
88
|
end
|
89
|
+
|
90
|
+
def sub(_name, &body)
|
91
|
+
@locals = Variables.new
|
92
|
+
bodyc = BodyCompiler.new(@globals, @locals, @declarer)
|
93
|
+
bodyc.instance_exec(&body)
|
94
|
+
bodyc.instance_exec do
|
95
|
+
self.return
|
96
|
+
object_end
|
97
|
+
end
|
98
|
+
@objects << RbfObject.subcall(body: bodyc.param_decl_header + bodyc.bytes,
|
99
|
+
local_bytes: @locals.bytesize)
|
100
|
+
end
|
67
101
|
end
|
68
102
|
end
|
@@ -1,4 +1,30 @@
|
|
1
1
|
module Lignite
|
2
|
+
# Less-than (32 bit)
|
3
|
+
class Lt32 # < Condition
|
4
|
+
def initialize(a, b)
|
5
|
+
@a = a
|
6
|
+
@b = b
|
7
|
+
end
|
8
|
+
|
9
|
+
def not
|
10
|
+
Ge32.new(@a, @b)
|
11
|
+
end
|
12
|
+
|
13
|
+
def jump_forward(compiler, body_size)
|
14
|
+
compiler.jr_lt32(@a, @b, Complex(body_size, 2))
|
15
|
+
end
|
16
|
+
|
17
|
+
def jump_back(compiler, body_size, self_size = nil)
|
18
|
+
if self_size.nil?
|
19
|
+
fake = compiler.clone_context
|
20
|
+
jump_back(fake, body_size, 0)
|
21
|
+
self_size = fake.bytes.bytesize
|
22
|
+
end
|
23
|
+
|
24
|
+
compiler.jr_lt32(@a, @b, Complex(- (body_size + self_size), 2))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
2
28
|
# Extends {OpCompiler} by
|
3
29
|
# - variable declarations: {VariableDeclarer}
|
4
30
|
# - high level flow control: {#loop}
|
@@ -8,20 +34,36 @@ module Lignite
|
|
8
34
|
# @return [Variables]
|
9
35
|
attr_reader :locals
|
10
36
|
|
37
|
+
attr_reader :declared_objects
|
38
|
+
|
11
39
|
def variables
|
12
40
|
locals
|
13
41
|
end
|
14
42
|
include VariableDeclarer
|
15
43
|
|
16
|
-
def
|
44
|
+
def parameters
|
45
|
+
locals
|
46
|
+
end
|
47
|
+
include ParameterDeclarer
|
48
|
+
|
49
|
+
def param_decl_header
|
50
|
+
parameters.param_decl_header
|
51
|
+
end
|
52
|
+
|
53
|
+
def initialize(globals, locals, declared_objects)
|
17
54
|
@bytes = ""
|
18
55
|
@globals = globals
|
19
56
|
@locals = locals
|
57
|
+
@declared_objects = declared_objects
|
20
58
|
@op_compiler = OpCompiler.new(@globals, @locals)
|
21
59
|
end
|
22
60
|
|
61
|
+
def clone_context
|
62
|
+
BodyCompiler.new(@globals, @locals, @declared_objects)
|
63
|
+
end
|
64
|
+
|
23
65
|
def if(flag8, &body)
|
24
|
-
subc = BodyCompiler.new(@globals, @locals)
|
66
|
+
subc = BodyCompiler.new(@globals, @locals, @declared_objects)
|
25
67
|
subc.instance_exec(&body)
|
26
68
|
|
27
69
|
jr_false(flag8, Complex(subc.bytes.bytesize, 2))
|
@@ -29,7 +71,7 @@ module Lignite
|
|
29
71
|
end
|
30
72
|
|
31
73
|
def loop(&body)
|
32
|
-
subc = BodyCompiler.new(@globals, @locals)
|
74
|
+
subc = BodyCompiler.new(@globals, @locals, @declared_objects)
|
33
75
|
subc.instance_exec(&body)
|
34
76
|
@bytes << subc.bytes
|
35
77
|
# the jump takes up 4 bytes: JR, LC2, LO, HI
|
@@ -37,13 +79,37 @@ module Lignite
|
|
37
79
|
end
|
38
80
|
|
39
81
|
def loop_while_postcond(flag8, &body)
|
40
|
-
subc = BodyCompiler.new(@globals, @locals)
|
82
|
+
subc = BodyCompiler.new(@globals, @locals, @declared_objects)
|
41
83
|
subc.instance_exec(&body)
|
42
84
|
@bytes << subc.bytes
|
43
|
-
# the jump takes up
|
85
|
+
# the jump takes up 5 bytes: JR_TRUE, LV0(flag8), LC2, LO, HI
|
44
86
|
jr_true(flag8, Complex(- (subc.bytes.bytesize + 5), 2))
|
45
87
|
end
|
46
88
|
|
89
|
+
def loop_while(a, b)
|
90
|
+
if a.respond_to? :call
|
91
|
+
loop_while_post(b, &a)
|
92
|
+
else
|
93
|
+
loop_while_pre(a, &b)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def loop_while_post(condition, &body)
|
98
|
+
subc = BodyCompiler.new(@globals, @locals, @declared_objects)
|
99
|
+
subc.instance_exec(&body)
|
100
|
+
@bytes << subc.bytes
|
101
|
+
body_size = subc.bytes.bytesize
|
102
|
+
condition.jump_back(self, body_size)
|
103
|
+
end
|
104
|
+
|
105
|
+
def call(name, *args)
|
106
|
+
obj_id = declared_objects.index_of(name)
|
107
|
+
raise "Name #{name} not found" if obj_id.nil?
|
108
|
+
|
109
|
+
# TODO: check that args match their declaration
|
110
|
+
super(obj_id, *args) # Ev3Ops::call
|
111
|
+
end
|
112
|
+
|
47
113
|
# Delegate the ops to the {OpCompiler},
|
48
114
|
# but also aggregate the result in @bytes.
|
49
115
|
def method_missing(name, *args)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "lignite/rbf_declarer"
|
2
|
+
|
1
3
|
module Lignite
|
2
4
|
# This enables sending commands without wrapping them in a .rbf program
|
3
5
|
class DirectCommands
|
@@ -35,7 +37,7 @@ module Lignite
|
|
35
37
|
|
36
38
|
def block(&body)
|
37
39
|
locals = Variables.new
|
38
|
-
bodyc = BodyCompiler.new(@globals, locals)
|
40
|
+
bodyc = BodyCompiler.new(@globals, locals, RbfDeclarer::Dummy.new)
|
39
41
|
bodyc.instance_exec(&body)
|
40
42
|
|
41
43
|
bs = bodyc.bytes
|
data/lib/lignite/ev3_ops.rb
CHANGED
@@ -7521,7 +7521,22 @@ module Lignite
|
|
7521
7521
|
#
|
7522
7522
|
Lignite::FILL = 6
|
7523
7523
|
|
7524
|
-
#
|
7524
|
+
#
|
7525
|
+
# @param handle [PAR16] (in) Array handle
|
7526
|
+
# @param value [PARV] (in) Value to write - type depends on type of array
|
7527
|
+
def array_fill(handle, value)
|
7528
|
+
logger.debug do
|
7529
|
+
args = [handle, value]
|
7530
|
+
"called array_fill with #{args.inspect}"
|
7531
|
+
end
|
7532
|
+
|
7533
|
+
bytes = u8(0xC1)
|
7534
|
+
bytes += param_simple(6)
|
7535
|
+
bytes += param_simple(handle)
|
7536
|
+
bytes += param_simple(value)
|
7537
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
7538
|
+
bytes
|
7539
|
+
end
|
7525
7540
|
#
|
7526
7541
|
Lignite::COPY = 7
|
7527
7542
|
|
@@ -7693,11 +7708,57 @@ module Lignite
|
|
7693
7708
|
__send__("array_#{csym}", *args)
|
7694
7709
|
end
|
7695
7710
|
|
7696
|
-
#
|
7711
|
+
# Array element write
|
7712
|
+
# @param handle [PAR16] (in) Array handle
|
7713
|
+
# @param index [PAR32] (in) Index to first byte to write
|
7714
|
+
# @param value [PARV] (in) Value to write - type depends on type of array
|
7715
|
+
def array_write(handle, index, value)
|
7716
|
+
logger.debug do
|
7717
|
+
args = [handle, index, value]
|
7718
|
+
"called array_write with #{args.inspect}"
|
7719
|
+
end
|
7697
7720
|
|
7698
|
-
|
7721
|
+
bytes = u8(0xC2)
|
7722
|
+
bytes += param_simple(handle)
|
7723
|
+
bytes += param_simple(index)
|
7724
|
+
bytes += param_simple(value)
|
7725
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
7726
|
+
bytes
|
7727
|
+
end
|
7699
7728
|
|
7700
|
-
#
|
7729
|
+
# Array element read
|
7730
|
+
# @param handle [PAR16] (in) Array handle
|
7731
|
+
# @param index [PAR32] (in) Index to first byte to write
|
7732
|
+
# @param value [PARV] (out) Value to read - type depends on type of array
|
7733
|
+
def array_read(handle, index, value)
|
7734
|
+
logger.debug do
|
7735
|
+
args = [handle, index, value]
|
7736
|
+
"called array_read with #{args.inspect}"
|
7737
|
+
end
|
7738
|
+
|
7739
|
+
bytes = u8(0xC3)
|
7740
|
+
bytes += param_simple(handle)
|
7741
|
+
bytes += param_simple(index)
|
7742
|
+
bytes += param_simple(value)
|
7743
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
7744
|
+
bytes
|
7745
|
+
end
|
7746
|
+
|
7747
|
+
# Array element append
|
7748
|
+
# @param handle [PAR16] (in) Array handle
|
7749
|
+
# @param value [PARV] (in) Value (new element) to append - type depends on type of array
|
7750
|
+
def array_append(handle, value)
|
7751
|
+
logger.debug do
|
7752
|
+
args = [handle, value]
|
7753
|
+
"called array_append with #{args.inspect}"
|
7754
|
+
end
|
7755
|
+
|
7756
|
+
bytes = u8(0xC4)
|
7757
|
+
bytes += param_simple(handle)
|
7758
|
+
bytes += param_simple(value)
|
7759
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
7760
|
+
bytes
|
7761
|
+
end
|
7701
7762
|
|
7702
7763
|
# Get memory usage
|
7703
7764
|
# @param total [PAR32] (out) Total memory [KB]
|
@@ -9092,25 +9153,205 @@ module Lignite
|
|
9092
9153
|
bytes
|
9093
9154
|
end
|
9094
9155
|
|
9095
|
-
#
|
9156
|
+
# Execute Entry Point function 0 in Third Party VM
|
9157
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9158
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9159
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9160
|
+
# @param value [PARV] (out) Data from opcode
|
9161
|
+
def dynload_entry_0(cmd, length_in, length_out, value)
|
9162
|
+
logger.debug do
|
9163
|
+
args = [cmd, length_in, length_out, value]
|
9164
|
+
"called dynload_entry_0 with #{args.inspect}"
|
9165
|
+
end
|
9096
9166
|
|
9097
|
-
|
9167
|
+
bytes = u8(0xF2)
|
9168
|
+
bytes += param_simple(cmd)
|
9169
|
+
bytes += param_simple(length_in)
|
9170
|
+
bytes += param_simple(length_out)
|
9171
|
+
bytes += param_simple(value)
|
9172
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9173
|
+
bytes
|
9174
|
+
end
|
9098
9175
|
|
9099
|
-
#
|
9176
|
+
# Execute Entry Point function 1 in Third Party VM
|
9177
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9178
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9179
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9180
|
+
# @param value [PARV] (out) Data from opcode
|
9181
|
+
def dynload_entry_1(cmd, length_in, length_out, value)
|
9182
|
+
logger.debug do
|
9183
|
+
args = [cmd, length_in, length_out, value]
|
9184
|
+
"called dynload_entry_1 with #{args.inspect}"
|
9185
|
+
end
|
9100
9186
|
|
9101
|
-
|
9187
|
+
bytes = u8(0xF3)
|
9188
|
+
bytes += param_simple(cmd)
|
9189
|
+
bytes += param_simple(length_in)
|
9190
|
+
bytes += param_simple(length_out)
|
9191
|
+
bytes += param_simple(value)
|
9192
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9193
|
+
bytes
|
9194
|
+
end
|
9102
9195
|
|
9103
|
-
#
|
9196
|
+
# Execute Entry Point function 2 in Third Party VM
|
9197
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9198
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9199
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9200
|
+
# @param value [PARV] (out) Data from opcode
|
9201
|
+
def dynload_entry_2(cmd, length_in, length_out, value)
|
9202
|
+
logger.debug do
|
9203
|
+
args = [cmd, length_in, length_out, value]
|
9204
|
+
"called dynload_entry_2 with #{args.inspect}"
|
9205
|
+
end
|
9104
9206
|
|
9105
|
-
|
9207
|
+
bytes = u8(0xF4)
|
9208
|
+
bytes += param_simple(cmd)
|
9209
|
+
bytes += param_simple(length_in)
|
9210
|
+
bytes += param_simple(length_out)
|
9211
|
+
bytes += param_simple(value)
|
9212
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9213
|
+
bytes
|
9214
|
+
end
|
9215
|
+
|
9216
|
+
# Execute Entry Point function 3 in Third Party VM
|
9217
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9218
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9219
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9220
|
+
# @param value [PARV] (out) Data from opcode
|
9221
|
+
def dynload_entry_3(cmd, length_in, length_out, value)
|
9222
|
+
logger.debug do
|
9223
|
+
args = [cmd, length_in, length_out, value]
|
9224
|
+
"called dynload_entry_3 with #{args.inspect}"
|
9225
|
+
end
|
9226
|
+
|
9227
|
+
bytes = u8(0xF5)
|
9228
|
+
bytes += param_simple(cmd)
|
9229
|
+
bytes += param_simple(length_in)
|
9230
|
+
bytes += param_simple(length_out)
|
9231
|
+
bytes += param_simple(value)
|
9232
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9233
|
+
bytes
|
9234
|
+
end
|
9235
|
+
|
9236
|
+
# Execute Entry Point function 4 in Third Party VM
|
9237
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9238
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9239
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9240
|
+
# @param value [PARV] (out) Data from opcode
|
9241
|
+
def dynload_entry_4(cmd, length_in, length_out, value)
|
9242
|
+
logger.debug do
|
9243
|
+
args = [cmd, length_in, length_out, value]
|
9244
|
+
"called dynload_entry_4 with #{args.inspect}"
|
9245
|
+
end
|
9246
|
+
|
9247
|
+
bytes = u8(0xF6)
|
9248
|
+
bytes += param_simple(cmd)
|
9249
|
+
bytes += param_simple(length_in)
|
9250
|
+
bytes += param_simple(length_out)
|
9251
|
+
bytes += param_simple(value)
|
9252
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9253
|
+
bytes
|
9254
|
+
end
|
9255
|
+
|
9256
|
+
# Execute Entry Point function 5 in Third Party VM
|
9257
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9258
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9259
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9260
|
+
# @param value [PARV] (out) Data from opcode
|
9261
|
+
def dynload_entry_5(cmd, length_in, length_out, value)
|
9262
|
+
logger.debug do
|
9263
|
+
args = [cmd, length_in, length_out, value]
|
9264
|
+
"called dynload_entry_5 with #{args.inspect}"
|
9265
|
+
end
|
9266
|
+
|
9267
|
+
bytes = u8(0xF7)
|
9268
|
+
bytes += param_simple(cmd)
|
9269
|
+
bytes += param_simple(length_in)
|
9270
|
+
bytes += param_simple(length_out)
|
9271
|
+
bytes += param_simple(value)
|
9272
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9273
|
+
bytes
|
9274
|
+
end
|
9106
9275
|
|
9107
|
-
#
|
9276
|
+
# Execute Entry Point function 6 in Third Party VM
|
9277
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9278
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9279
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9280
|
+
# @param value [PARV] (out) Data from opcode
|
9281
|
+
def dynload_entry_6(cmd, length_in, length_out, value)
|
9282
|
+
logger.debug do
|
9283
|
+
args = [cmd, length_in, length_out, value]
|
9284
|
+
"called dynload_entry_6 with #{args.inspect}"
|
9285
|
+
end
|
9286
|
+
|
9287
|
+
bytes = u8(0xF8)
|
9288
|
+
bytes += param_simple(cmd)
|
9289
|
+
bytes += param_simple(length_in)
|
9290
|
+
bytes += param_simple(length_out)
|
9291
|
+
bytes += param_simple(value)
|
9292
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9293
|
+
bytes
|
9294
|
+
end
|
9295
|
+
|
9296
|
+
# Execute Entry Point function 7 in Third Party VM
|
9297
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9298
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9299
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9300
|
+
# @param value [PARV] (out) Data from opcode
|
9301
|
+
def dynload_entry_7(cmd, length_in, length_out, value)
|
9302
|
+
logger.debug do
|
9303
|
+
args = [cmd, length_in, length_out, value]
|
9304
|
+
"called dynload_entry_7 with #{args.inspect}"
|
9305
|
+
end
|
9306
|
+
|
9307
|
+
bytes = u8(0xF9)
|
9308
|
+
bytes += param_simple(cmd)
|
9309
|
+
bytes += param_simple(length_in)
|
9310
|
+
bytes += param_simple(length_out)
|
9311
|
+
bytes += param_simple(value)
|
9312
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9313
|
+
bytes
|
9314
|
+
end
|
9315
|
+
|
9316
|
+
# Execute Entry Point function 8 in Third Party VM
|
9317
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9318
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9319
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9320
|
+
# @param value [PARV] (out) Data from opcode
|
9321
|
+
def dynload_entry_8(cmd, length_in, length_out, value)
|
9322
|
+
logger.debug do
|
9323
|
+
args = [cmd, length_in, length_out, value]
|
9324
|
+
"called dynload_entry_8 with #{args.inspect}"
|
9325
|
+
end
|
9108
9326
|
|
9109
|
-
|
9327
|
+
bytes = u8(0xFA)
|
9328
|
+
bytes += param_simple(cmd)
|
9329
|
+
bytes += param_simple(length_in)
|
9330
|
+
bytes += param_simple(length_out)
|
9331
|
+
bytes += param_simple(value)
|
9332
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9333
|
+
bytes
|
9334
|
+
end
|
9110
9335
|
|
9111
|
-
#
|
9336
|
+
# Execute Entry Point function 9 in Third Party VM
|
9337
|
+
# @param cmd [PAR8] (in) Sub command to be executed
|
9338
|
+
# @param length_in [PAR8] (in) Amount of data passed to this opcode
|
9339
|
+
# @param length_out [PAR16] (out) Amount of data returned
|
9340
|
+
# @param value [PARV] (out) Data from opcode
|
9341
|
+
def dynload_entry_9(cmd, length_in, length_out, value)
|
9342
|
+
logger.debug do
|
9343
|
+
args = [cmd, length_in, length_out, value]
|
9344
|
+
"called dynload_entry_9 with #{args.inspect}"
|
9345
|
+
end
|
9112
9346
|
|
9113
|
-
|
9347
|
+
bytes = u8(0xFB)
|
9348
|
+
bytes += param_simple(cmd)
|
9349
|
+
bytes += param_simple(length_in)
|
9350
|
+
bytes += param_simple(length_out)
|
9351
|
+
bytes += param_simple(value)
|
9352
|
+
logger.debug "returning bytecode: #{bytes.inspect}"
|
9353
|
+
bytes
|
9354
|
+
end
|
9114
9355
|
|
9115
9356
|
# Get the index of the currently loaded VM
|
9116
9357
|
# @param result [PAR8] (out) VM Index, Robotc = 0, Labview = 1, -1 for no loaded VM
|