-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.txt
420 lines (308 loc) · 21.8 KB
/
README.txt
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
-------------------------------- SUMMARY --------------------------------
I] Presentation
II] IAssembly (.iasm)
1) Basic structure
2) Instruction set
III] IA executable codes (.iax)
1) Introduction
2) IAPC8's architecture
3) IAPC8's PC-Variables
4) Code explanation
-------------------------------- I] Presentation --------------------------------
1) Introduction
Thank you for downloading IAPC8_Compiler[0.1.5],
This program is a compiler for IAPC8[0.1.5] scripts.
IAPC8 is an 8 bit computer made in Minecraft using basic redstone components
such as redstone dust, repeaters (wires) and torches (inverters).
This computer can execute programs coded in IAssembly language, a language
made specially for it (inspired on assembly but really easy to learn).
All you have to know about IAssembly is written after this presentation.
What you have to do is just to compile your IAssembly code with this program
and use the compiled one in Minecraft !
Moreover, this compiler allows you to compile your code in executable-like code.
This format can be used in your own machines on whatever support you want !
This is containing the most basic instructions a computer can understand.
All details about this format are given after this presentation and the "IA executable codes" section.
Compilation options :
YOUR_CODE.iasm (Your code in IAssembly)
| |
| |
| | Executable compilation
| | (command "exe-compile")
| |
| V
| Full compilation YOUR_CODE.iax (Your code compiled as an executable program)
| (command "full-compile") |
| |
| | Minecraft compilation
| | (command "mc-compile")
| |
| |
V V
YOUR_CODE.iamc (Your code ready to be used on Minecraft !)
To run Compiler program, you just need to run the program named "run" in the current folder.
All the program files are stored in their corresponding folder :
"YOUR_CODE.iasm" MUST BE in folder 1_IASM/
"YOUR_CODE.iax" will be in folder 2_IAX/
"YOUR_CODE.iamc" will be in folder 3_IAMC/
The main objective of IAPC8 is to be able to execute any kind of action only using
basic electronic stuff (basically wires and inverters).
Minecraft is not made nor optimizated for this.
So the execution of your code can be a bit slow depending on your computer components.
What you can expect from IAPC8 is only to see basic drawings on an 16x8 pixels screen
and display a value on 2 hexadecimal digits in game.
I hope you will enjoy using this stuff to create your own programs and see what's
happenning in the brain of a computer !
For more information about IAPC8, please check out the presentation video :
https://www.youtube.com/playlist?list=PLQEqOZghDI7wZngVOl4vHan5x4nuBEZ1S
Don't forget to subscribe for more stuff like this !
Contact : [email protected]
Youtube : https://www.youtube.com/user/IAsebsil83
GitHub repo : https://github.com/iasebsil83
Let's Code ! By I.A.
-------------------------------- II] IAssembly (.iasm) --------------------------------
1) Basic structure
An IAssembly code must respect the structure rules below :
- The code has to be written as normal text in a basic text file,
line by line, one instruction per line.
- Each instruction has to start with 3 letters (minimal or capital)
These letters are called the COMMAND (or cmd).
- The COMMAND must be followed by 2 ARGUMENTS
(even if only one is useful for the current COMMAND).
- Each ARGUMENT is a value between 0 and 255 that can be
written in 3 different bases : decimal, hexadecimal or binary.
> Hexadecimal : character 'x' followed by 2 digits
(for letters, minimal or capital are accepted).
> Decimal : character 'd' followed by 3 digit
(be careful, don't put more than 255).
> Binary : no character before, only 8 digits
(default base is binary).
- ARGUMENTS can have the prefix 'a' (minimal only) before their value.
It means that the value of ARGUMENT will not be used as a regular number
but used as an address in data storage.
So the value of the ARGUMENT is the value currently stored in the
focused data memory box.
- ARGUMENTS can have the value 'r' (minimal only) instead of a value.
It means that the value of ARGUMENT will be the current result of the ALU.
It cannot be used with the prefix 'a' (it doesn't make sens).
- Only text characters and underscores will be seen as "code"
by the compiler (alphabet + numbers + '_').
This allows you to use spaces and special characters as you want
anywhere in your code.
- PAY ATTENTION TO THE CHARACTER '#', this is a special character used
to start a comment zone.
After this character, your code will not be seen by the compiler until
the next character '#' found OR until the end of the current line.
- By the way, if the compiler understands a line of your code, it will
ignore the rest of the line and immediatelly go to the next one.
Example :
ASG x00 d001
ASG ax00 00000110
ASG d003 d112
ADD x04 d255 # this is a comment at end of line
ASG # this is a comment in the middle of the line # x00 x01
PXL xff v
PXL xFF v #this is exactly the same line as the previous one
ASG x00 r
ASG x01 x01 this is text that will not be read by the compiler too
2) Instruction set
Instruction set is segmented in several sections :
DAT (Data), ALU (Arithmetic and Logic Unit), 8OP (Operations on 8 bits),
CMP (Comparations), CUU (Computer to User Unit),
PCO (Program Counter Operations), UOP (User Output)
DAT
ASG arg1 arg2 : store the value of arg2 in the memory box addressed arg1
ALU
8OP
INV arg1 : set value of r at NOT arg1 (bitwise "not")
AND arg1 arg2 : set value of r at arg1 AND arg2 (bitwise "and")
LSH arg1 arg2 : set value of r at arg1 * 2^arg2 (bitwise "left shift" arg2 times)
RSH arg1 arg2 : set value of r at arg1 / 2^arg2 (bitwise "right shift" arg2 times)
AD1 arg1 : set value of r at arg1 + 1
ADD arg1 arg2 : set value of r at arg1 + arg2
MUL arg1 arg2 : set value of r at arg1 * arg2
DIV arg1 arg2 : set value of r at arg1 / arg2 (not available yet)
CMP
INFORMATION > if the comparation is true, r is set to 255, else to 0
EZ_ arg1 : comparation true if arg1 equals 0
EN_ arg1 arg2 : comparation true if arg1 equals arg2
GZ_ arg1 : comparation true if arg1 is greater than 0 (strict)
LZ_ arg1 : comparation true if arg1 is less than 0 (strict)
CUU
PCO
IF_ arg1 arg2 : if arg1 equals 0, skip the arg2 next lines
JMP arg1 : execution goes to curent line + arg1
UOP
PXL arg1 : toggle a pixel on screen (UOP_IN) following this syntax :
YYYXXXXT
Y coordinate on 3 bits
X coordinate on 4 bits
T if ON, toggle the pixel (Else, do nothing).
That's all about IAssembly !
You can find step by step tutorials on IAssembly on my Youtube Channel
Contact : [email protected]
Youtube : https://www.youtube.com/user/IAsebsil83
GitHub repo : https://github.com/iasebsil83
Let's Code ! By I.A.
-------------------------------- III] IA executable codes (.iax) --------------------------------
This section is about IA executable codes (finishing with .iax).
1) Introduction
It is important for you to know that this format is NOT MADE FOR MINECRAFT only.
This format is made for ANY KIND OF COMPUTER on ANY KIND OF SUPPORT.
The only rule to make it work is, for your computer to have the same ARCHITECTURE type.
I highly encourage you to make your own simulators to make these codes work on it !
I tried to make it the most simple for a computer to understand it.
2) IAPC8's architecture
IAPC8 is globally built in 3 big parts
DAT : Data, this is only a storage space
(Maximum 256 bytes of storage)
ALU : Arithmetic and Logic Unit, this is where all kind of calculations
are made.
(Contains 8 bits Operations "8OP" and Comparations "CMP").
CUU : Computer to User Unit, this is all the stuff that allows the user
to control the whole computer.
(Contains Program Counter Operations "PCO" and User Output modules "UOP")
+-------------+
| IAPC8 |
+-------------+-------------+--------------+
| DAT | ALU | CUU |
| | / \ | / \ |
| | CMP 8OP | PCO UOP |
+-------------+-------------+--------------+
^ v ^ v ^ v ^ +------+
|___|_________|___|________|___| |______| User |
+------+
3) IAPC8's PC-Variables
The computer works ONLY by setting values to PC-Variables.
This is done from the CUU interface.
This means that if your computer is correctly made, you only need this
interface to control all of it.
The CUU interface must allows you to manipulate your data as you want,
from the DAT to the ALU and in the opposite sens,
from the ALU to the CUU and in the opposite sens,
from the CUU to the DAT and in the opposite sens.
PC-Variables are the only thing that must stay from your code, if there is
something else, then your executable code is CORRUPTED and will probably DON'T WORK.
The following list shows you all the IAPC8 PC-Variables and their links :
+==============+
| PC-Variables |
+==============+====+====================+========+============================+==============================================+
| Name | ID | Signification | Type | Connections | Utility |
+==============+====+====================+========+============================+==============================================+
! CUU_IN ! 00 ! "CUU INPUT" ! 8 bits ! DAT_OUT -> CUU_IN ! Information comming from DAT_OUT and !
! ! ! ! ! ALU_OUT ! ALU_OUT to user. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_OUT ! 01 ! "CUU OUTPUT" ! 8 bits ! CUU_OUT -> ALU_IN/OP ! Information comming from user to ALU_IN, !
! ! ! ! ! DAT_IN ! ALU_OP and DAT_IN. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_DAT_A ! 02 ! "CUU DAT ADDRESS" ! 8 bits ! CUU_DAT_A -> DAT_ADR ! Address port used from user to data (DAT). !
! ! ! ! ! ! !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_DAT_S ! 03 ! "DAT SET" ! 1 bit ! CUU_DAT_S -> DAT_SET ! if ON, value in DAT_IN will be stored at !
! ! ! ! ! ! address DAT_ADR. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_DAT_G ! 04 ! "DAT GET" ! 1 bit ! CUU_DAT_G -> DAT_GET ! if ON, DAT_OUT will now have the value !
! ! ! ! ! ! stored at address DAT_ADR. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_DAT_IG ! 05 ! "DAT IN GATE" ! 1 bit ! CUU_DAT_IG -> DAT_IN_GATE ! if ON, CUU_OUT and ALU_OUT will now share !
! ! ! ! ! ! their value to DAT_IN. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_DAT_OG ! 06 ! "DAT OUT GATE" ! 1 bit ! CUU_DAT_OG -> DAT_OUT_GATE ! if ON, DAT_OUT will share its value with !
! ! ! ! ! ! ALU_IN and CUU_IN. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_ALU_SS ! 07 ! "ALU SECOND SET" ! 1 bit ! CUU_ALU_SS -> ALU_SS ! if ON, second operator of ALU will be set to !
! ! ! ! ! ! ALU_IN value. Else, this is for the first. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_ALU_OS ! 08 ! "ALU OUT SET" ! 1 bit ! CUU_ALU_OS -> ALU_OS ! if ON, result of ALU will be written in !
! ! ! ! ! ! ALU_OUT. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_ALU_PS ! 09 ! "ALU OPERATOR SET" ! 1 bit ! CUU_ALU_PS -> ALU_OPS ! if ON, ALU_OP will be set to CUU_OUT. !
! ! ! ! ! ! !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_ALU_OG ! 10 ! "ALU OUT GATE" ! 1 bit ! CUU_ALU_OG -> ALU_OUT_GATE ! if ON, ALU_OUT will share its value with !
! ! ! ! ! ! CUU_IN and DAT_IN. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_ALU_OF ! 11 !"ALU OVERFLOW" ! 1 bit ! CUU_ALU_OF <- ALU_OF ! if ON, result of ALU detects an overflow. !
! ! ! ! ! ! !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_PCO_OF ! 12 ! "PCO OVERFLOW" ! 1 bit ! CUU_PCO_OF <- PCO_OF ! if ON, PCO detects an overflow. !
! ! ! ! ! ! !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_PCO_S ! 13 ! "PCO SET" ! 1 bit ! CUU_PCO_S -> PCO_SET ! if ON, result of PCO operation will be !
! ! ! ! ! ! written in Program Counter. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_PCO_B ! 14 ! "PCO BRIDGE" ! 1 bit ! CUU_PCO_B -> PCO_B ! if ON, PCO_SET will be configurable to ON !
! ! ! ! ! ! only if CUU_IN is not 00000000. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_PCO_A ! 15 ! "PCO ADD" ! 1 bit ! CUU_PCO_A -> PCO_ADD ! if ON, the PCO switch in ADD operation !
! ! ! ! ! ! mode (if OFF, PCO operation is AD1). !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_PCO_I ! 16 ! "PCO INPUT" ! 8 bits ! CUU_PCO_IN -> PCO_IN ! Informations comming from user to Program !
! ! ! ! ! ! Counter. !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_UOP_S ! 17 ! "UOP SET" ! 1 bit ! CUU_UOP_S -> UOP_SET ! if ON, UOP_IN will be set to CUU_IN. !
! ! ! ! ! ! !
+--------------+----+--------------------+--------+----------------------------+----------------------------------------------+
! CUU_UOP_I ! 18 ! "UOP INPUT" ! 8 bits ! CUU_UOP_I -> UOP_IN ! Information comming from user to Display. !
! ! ! ! ! ! !
+==============+====+====================+========+============================+==============================================+
You may notice that all these variables starts with "CUU", this is because
these variables are accessed by the CUU interface.
/!\ BE CAREFUL /!\ : When using these PC-Variables, mind that you might have to reset them all
after each operation if you don't want to have bad sursprises !
The only PC-Variable that don't need to be reset is CUU_PCO_S (it is automatically reset by IAPC8).
4) Code explanation
Each PC-Variable is refered by an ID number written on 2 digits (in decimal).
Each line of an IA executable file is a value affectation on 8 bits EVEN IF the current PC-Variable is
only written on 1 bit.
Here is the code line structure : XXYYYYYYYY
XX : PC-Variable ID
YYYYYYYY : Value on 8 bits (if PC-Variable is on 1 bit only : 0000000Y)
+------------+
| Example |
+------------+-----------------------+----------------------------------------------+
| Executable | Signification | Explanation |
+------------+-----------------------+----------------------------------------------+
| 0110010000 | CUU_OUT = 10010000 | Push value 144 in ALU_IN/ALU_OP/DAT_IN. |
| 0900000001 | CUU_ALU_PS = 1 | Set ALU operator to CUU_OUT. | (operation number 144 is ADD)
| 0900000000 | CUU_ALU_PS = 0 | Set done. |
| 0100000010 | CUU_OUT = 00000010 | Push value 2 in ALU_IN/ALU_OP/DAT_IN. |
| 0700000001 | CUU_ALU_SS = 1 | Set second ALU operand to ALU_IN. |
| 0111111111 | CUU_OUT = 11111111 | Push value -1 in ALU_IN/ALU_OP/DAT_IN. | (calculation is made instantly)
| 0800000001 | CUU_ALU_OS = 1 | Push result of the ALU into ALU_OUT. |
| 0800000000 | CUU_ALU_OS = 0 | Set done (for ALU_OUT). |
| 1000000001 | CUU_ALU_OG = 1 | Push ALU_OUT into CUU_IN. |
| 1700000001 | CUU_UOP_S = 1 | Push CUU_IN into UOP_IN. | (2+-1=1 -> will be written on UOP_IN)
| 0700000000 | CUU_ALU_SS = 0 | Set first ALU operand to ALU_IN. (reset) |
| 1000000000 | CUU_ALU_OG = 0 | Close ALU_OUT gate. |
+------------+-----------------------+----------------------------------------------+
This example will make the calculation 2+-1 => 1 and push it into the screen.
(value 00000001 into UOP_IN)
+-------------+
| ALU OPCODES |
+-------------+------+-----------+
| Value | Type | Operation |
+-------------+------+-----------+
| 0000 0000 | CMP | EZ_ |
| 1000 0000 | CMP | EN_ |
| 0100 0000 | CMP | GZ_ |
| 1100 0000 | CMP | LZ_ |
| 0010 0000 | CMP | - | (operations not defined)
| 1010 0000 | CMP | - |
| 0110 0000 | CMP | - |
| 1110 0000 | CMP | - |
| 0001 0000 | 8OP | ADD |
| 1001 0000 | 8OP | AD1 |
| 0101 0000 | 8OP | MUL |
| 1101 0000 | 8OP | INV |
| 0011 0000 | 8OP | AND |
| 1011 0000 | 8OP | LSH |
| 0111 0000 | 8OP | RSH |
| 1111 0000 | 8OP | DIV |
+-------------+------+-----------+
Now you know how to run IA Executable files !
I hope you will enjoy using these technologies in your own projects, have fun !
Contact : [email protected]
Youtube : https://www.youtube.com/user/IAsebsil83
GitHub repo : https://github.com/iasebsil83
Let's Code ! By I.A.