lignite 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|