312 lines
7.3 KiB
Plaintext
Executable File
312 lines
7.3 KiB
Plaintext
Executable File
-------------------------
|
|
|types of parameters
|
|
-------------------------
|
|
raw_number = starting character (0-9)
|
|
n# = starting character n followed by # (# is a number denoting the number register to use)
|
|
s# = starting character s followed by # (# is a number denoting the string register to use)
|
|
u# = starting character u followed by # (# is a number denoting the user_type register to use)
|
|
r# = starting character r followed by # (# is a number denoting the reference register to use) //references are set when obj_get or mov(34) or mov(38) is called
|
|
!id = starting character is ! followed id (id is a number denoting the id vector position) //it can be used for any integer argument as well as id's
|
|
@[data_address] = starting character is @ followed by the number specifying the offset in the data segment
|
|
|
|
----------------------------------------
|
|
|SYSTEM AND VM OPERATION
|
|
---------------------------------------
|
|
|
|
0 - end
|
|
1 - dbg uint uint uint // arguments are (debug_function, file_index, line_number)
|
|
|
|
---------------------------------------
|
|
|MOVING DATA
|
|
----------------------------------------
|
|
|
|
32 - mov n# n#
|
|
33 - mov n# raw_number
|
|
34 - mov n# !id
|
|
35 - mov !id n#
|
|
|
|
36 - mov$ s# s#
|
|
37 - mov$ s# @[data_address]
|
|
38 - mov$ s# !id
|
|
39 - mov$ !id s#
|
|
|
|
40 - mov_r r# n#
|
|
41 - mov_r$ r# s#
|
|
|
|
42 - mov_type u# u# //copy user types and arrays NOTE: This will do the same thing mov_r does by setting the reference pointed to by the first arg
|
|
|
|
--------------------------------------
|
|
|OPERATORS
|
|
-------------------------------------
|
|
|
|
43 - add$ s# s#
|
|
|
|
44 - add n# n#
|
|
45 - sub n# n#
|
|
46 - mul n# n#
|
|
47 - div n# n#
|
|
48 - pow n# n#
|
|
49 - mod n# n#
|
|
50 - shl n# n#
|
|
51 - shr n# n#
|
|
52 - and n# n#
|
|
53 - or n# n#
|
|
54 - xor n# n#
|
|
55 - not n# n#
|
|
|
|
--------------------------------------
|
|
|COMPARE AND JUMP
|
|
--------------------------------------
|
|
CMP_EQUAL
|
|
CMP_NOT_EQUAL
|
|
CMP_GREATER
|
|
CMP_GREATER_EQUAL
|
|
CMP_LESS
|
|
CMP_LESS_EQUAL
|
|
-------------------------------------
|
|
|
|
56 - cmp n# n#
|
|
57 - cmp$ s# s#
|
|
58 - cmp_u n# n#
|
|
|
|
59 - jmp n#
|
|
60 - jmp @[address]
|
|
61 - je n#
|
|
62 - je @[address]
|
|
63 - jne n#
|
|
64 - jne @[address]
|
|
65 - jg n#
|
|
66 - jg @[address]
|
|
67 - jge n#
|
|
68 - jge @[address]
|
|
69 - jl n#
|
|
70 - jl @[address]
|
|
71 - jle n#
|
|
72 - jle @[address]
|
|
|
|
--------------------------------------
|
|
|OBJECTS (USER TYPES AND ARRAYS)
|
|
--------------------------------------
|
|
OBJ_CURRENT_POSITION
|
|
OBJ_CURRENT_TYPE
|
|
--------------------------------------
|
|
|
|
73 - obj_num !id
|
|
74 - obj_num1 !id n# (n# is the first dimension)
|
|
75 - obj_num2 !id n# n#
|
|
76 - obj_num3 !id n# n# n#
|
|
|
|
77 - obj_str !id
|
|
78 - obj_str1 !id n# (n# is the first dimension)
|
|
79 - obj_str2 !id n# n#
|
|
80 - obj_str3 !id n# n# n#
|
|
|
|
81 - obj_usr !id
|
|
82 - obj_usr1 !id n# (n# is the first dimension)
|
|
83 - obj_usr2 !id n# n#
|
|
84 - obj_usr3 !id n# n# n#
|
|
|
|
85 - obj_get n#
|
|
86 - obj_get$ s#
|
|
|
|
87 - obj_set n#
|
|
88 - obj_set s$
|
|
|
|
89 - clear_obj
|
|
|
|
90 - dim_type !id !id (user_type)
|
|
91 - dim_type1 !id !id (user type) n# (dim1)
|
|
92 - dim_type2 !id !id (user type) n# (dim1) n# (dim2)
|
|
93 - dim_type3 !id !id (user type) n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
94 - dim_num1 !id n# (dim1)
|
|
95 - dim_num2 !id n# (dim1) n# (dim2)
|
|
96 - dim_num3 !id n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
97 - dim_str1 !id n# (dim1)
|
|
98 - dim_str2 !id n# (dim1) n# (dim2)
|
|
99 - dim_str3 !id n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
--------------------------------------------
|
|
|STACKS
|
|
--------------------------------------------
|
|
<STACK> NUM_STACK
|
|
<STACK> STR_STACK
|
|
--------------------------------------------
|
|
|
|
100 - delete !id
|
|
101 - delete$ !id
|
|
|
|
102 - push n#
|
|
103 - push !id
|
|
|
|
104 - push$ s#
|
|
105 - push$ !id
|
|
|
|
106 - push_empty$
|
|
|
|
107 - pop n#
|
|
108 - pop !id
|
|
|
|
109 - pop$ s$
|
|
110 - pop$ !id
|
|
|
|
111 - get_stack_size n#
|
|
112 - get_stack_size$ n#
|
|
|
|
113 - clear_stack
|
|
114 - clear_stack$
|
|
|
|
---------------------------------------------
|
|
|LOOP
|
|
---------------------------------------------
|
|
<STACK> LOOP_STACK
|
|
---------------------------------------------
|
|
|
|
115 - while n#
|
|
116 - wend @address 'using jmp in parser for now
|
|
|
|
117 - for !id n# (starting value) n# (ending value) n#(step value)
|
|
118 - next @address
|
|
|
|
119 - do
|
|
120 - loop
|
|
121 - loop_while n#
|
|
122 - loop_until n#
|
|
|
|
123 - pop_loop_stack
|
|
|
|
------------------------------------------
|
|
|FUNCTIONS AND SUB ROUTINES
|
|
------------------------------------------
|
|
<STACK> FUNCTION_STACK
|
|
------------------------------------------
|
|
|
|
124 - gosub @[address]
|
|
125 - return
|
|
|
|
-----------------------------------------
|
|
|POINTERS
|
|
-----------------------------------------
|
|
126 - ptr !id n#
|
|
127 - ptr$ !id s#
|
|
|
|
------------------------------------------
|
|
|ADDED STUFF 'Because I didn't plan this design that well
|
|
------------------------------------------
|
|
|
|
128 - print n#
|
|
129 - print$ s#
|
|
130 - func raw_number (built-in function index)
|
|
131 - push raw_number
|
|
132 - println
|
|
133 - mov n# %CMP_FLAG
|
|
134 - cmp n# raw_number
|
|
135 - mov_arr n# !id
|
|
136 - mov_arr$ s# !id
|
|
137 - pop_ptr n#
|
|
138 - preset !id
|
|
139 - preset$ !id
|
|
|
|
140 - redim1 !id n#
|
|
141 - redim2 !id n# n#
|
|
142 - redim3 !id n# n# n#
|
|
|
|
143 - redim1$ !id n#
|
|
144 - redim2$ !id n# n#
|
|
145 - redim3$ !id n# n# n#
|
|
|
|
146 - for_offset_arr1 n#
|
|
147 - for_offset_arr2 n# n#
|
|
148 - for_offset_arr3 n# n# n#
|
|
|
|
149 - for_offset_0
|
|
|
|
150 - end_x n#
|
|
|
|
151 - lval n#
|
|
152 - lval !id
|
|
153 - lval @[address]
|
|
|
|
154 - lval$ s#
|
|
155 - lval$ !id
|
|
|
|
// ---- New in 4.0 ---------
|
|
156 - obj_usr_n !id
|
|
157 - obj_usr_n1 !id n#
|
|
158 - obj_usr_n2 !id n# n#
|
|
159 - obj_usr_n3 !id n# n# n#
|
|
|
|
160 - obj_usr_s !id
|
|
161 - obj_usr_s1 !id n#
|
|
162 - obj_usr_s2 !id n# n#
|
|
163 - obj_usr_s3 !id n# n# n#
|
|
|
|
164 - obj_usr_get n#
|
|
165 - obj_usr_get s#
|
|
166 - obj_usr_get u# // gets the value and sets the reference
|
|
|
|
167 - uref_ptr !id u#
|
|
|
|
168 - mov_type !id u# //copy user types and arrays
|
|
|
|
169 - push_t u#
|
|
170 - push_t !id
|
|
|
|
171 - pop_t u#
|
|
172 - pop_t !id
|
|
|
|
173 - push_t_null
|
|
|
|
174 - delete_t !id !id (0 - top level, 1 - member) !id (0 - num, 1 - str, 2 - type)
|
|
|
|
175 - dim_type u# !id (user_type)
|
|
176 - dim_type1 u# !id (user type) n# (dim1)
|
|
177 - dim_type2 u# !id (user type) n# (dim1) n# (dim2)
|
|
178 - dim_type3 u# !id (user type) n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
179 - dim_tfield raw_number (user_type) raw_number (member_type) raw_number (member_index) raw_number (dimensions) n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
180 - obj_usr_init !id
|
|
181 - obj_usr_init1 !id n# (n# is the first dimension)
|
|
182 - obj_usr_init2 !id n# n#
|
|
183 - obj_usr_init3 !id n# n# n#
|
|
|
|
184 - obj_usr_init u#
|
|
185 - obj_usr_init1 u# n# (n# is the first dimension)
|
|
186 - obj_usr_init2 u# n# n#
|
|
187 - obj_usr_init3 u# n# n# n#
|
|
|
|
188 - preset_t !id raw_number (user_type)
|
|
189 - preset_t1 !id raw_number (user_type) n#
|
|
190 - preset_t2 !id raw_number (user_type) n# n#
|
|
191 - preset_t3 !id raw_number (user_type) n# n# n#
|
|
|
|
|
|
192 - redim_type u# !id (user_type)
|
|
193 - redim_type1 u# !id (user type) n# (dim1)
|
|
194 - redim_type2 u# !id (user type) n# (dim1) n# (dim2)
|
|
195 - redim_type3 u# !id (user type) n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
|
|
196 - redim_type_n !id
|
|
197 - redim_type_n1 !id n# (dim1)
|
|
198 - redim_type_n2 !id n# (dim1) n# (dim2)
|
|
199 - redim_type_n3 !id n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
|
|
200 - redim_type_s !id
|
|
201 - redim_type_s1 !id n# (dim1)
|
|
202 - redim_type_s2 !id n# (dim1) n# (dim2)
|
|
203 - redim_type_s3 !id n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
|
|
204 - redim_type !id !id (user_type)
|
|
205 - redim_type1 !id !id (user type) n# (dim1)
|
|
206 - redim_type2 !id !id (user type) n# (dim1) n# (dim2)
|
|
207 - redim_type3 !id !id (user type) n# (dim1) n# (dim2) n# (dim3)
|
|
|
|
208 - redim_top
|
|
|
|
|