-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKaiVM Bytecode.grammar
59 lines (54 loc) · 2.59 KB
/
KaiVM Bytecode.grammar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?xml version="1.0" encoding="UTF-8"?>
<ufwb version="1.17">
<grammar name="KaiVM Bytecode" start="id:103" author="Brett Toomey" fileextension="bc">
<description>Grammar for KaiVM bytecode</description>
<structure name="Instruction" id="103" length="0" encoding="ISO_8859-1:1987" endian="little" signed="no">
<number name="flags" id="104" fillcolor="1EFF8B" repeatmin="0" type="integer" length="1">
<mask name="dest" value="0xF0">
<fixedvalue name="r1" value="0x0"/>
<fixedvalue name="r2" value="0x1"/>
<fixedvalue name="r3" value="0x2"/>
</mask>
<mask name="source" value="0xF">
<fixedvalue name="r1" value="0x0"/>
<fixedvalue name="r2" value="0x1"/>
<fixedvalue name="r3" value="0x2"/>
<fixedvalue name="r4" value="0x3"/>
<fixedvalue name="r5" value="0x4"/>
<fixedvalue name="r6" value="0x5"/>
<fixedvalue name="r7" value="0x6"/>
<fixedvalue name="r8" value="0x7"/>
<fixedvalue name="r9" value="0x8"/>
<fixedvalue name="ra" value="0x9"/>
</mask>
</number>
<number name="opcode" id="105" fillcolor="FFBEF7" type="integer" length="1" display="hex">
<fixedvalues>
<fixedvalue name="halt" value="0x0"/>
<fixedvalue name="nop" value="0x1"/>
<fixedvalue name="add" value="0x2"/>
<fixedvalue name="sub" value="0x3"/>
<fixedvalue name="ldd" value="0x10"/>
<fixedvalue name="jmp" value="0x20"/>
<fixedvalue name="addi" value="0x82"/>
<fixedvalue name="ldi" value="0x90"/>
<fixedvalue name="jmi" value="0xA0"/>
</fixedvalues>
</number>
<scriptelement name="immediate_check" id="106">
<script name="unnamed" type="Generic">
<source language="Lua">size = 1
results = currentMapper:getCurrentResults()
currentGrammar = currentMapper:getCurrentGrammar()
byteView = currentMapper:getCurrentByteView()
offset = currentMapper:getCurrentOffset()
number = byteView:readUnsignedInt(offset-1, 1, synalysis.ENDIAN_LITTLE)
value = synalysis.Value()
value:setUnsigned(number)
results:append(value)
return false</source>
</script>
</scriptelement>
</structure>
</grammar>
</ufwb>