Files
RCBASIC4/rcbasic_build/vm_asm
2024-05-20 09:14:32 -05:00

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