MicroController/help.lua
2019-03-05 19:50:21 +08:00

119 lines
4.1 KiB
Lua

HELP_TEXT = [[
-- Registers (Read/Write):
mem1 mem2 mem3 mem4 out
-- Registers (Read Only):
mem5/ipt : Instruction pointer index
mem6/cnr : Number of signals on the red wire
mem7/cng : Number of signals on the green wire
mem8/clk : Clock (monotonic, always runnning)
-- Modules:
You can connect RAM Modules or other MicroControllers by placing
them above or below this MicroController.
External memory is mapped to:
mem11-14 (North Port 1)
mem21-24 (South Port 1)
mem31-34 (North Port 2)
mem41-44 (South Port 2)
MicroControllers can only connect to North and South port 1.
--- Wires:
red1 red2 redN...
green1 green2 greenN...
--- Pointers:
mem@N : Access memN where X is the value at memN
red@N : Access redX where X is the value at memN
green@N : Access greenX where X is the value at memN
--- Glossary:
Signal : A type and integer value.
Value : The integer value part of a signal.
Move : Copy a signal from one source to another.
Set : Set the Value of a register.
Register : A place that can store a signal.
Clear : Reset a register back to Black 0 (the NULL signal).
Find signal : Looks for a signal that has the same type
as the type stored in a register.
Label : A text identifier used for jumps.
--- Key:
W = Wire, I = Integer
M = Memory, O = Output
R = Register (Memory or Output)
L = Label (:id)
------- OP CODES ---------
OP A B : DESCRIPTION
------------:-------------
MOV W/R R...: Move signal from [A] to register(s).
SET M/I R : Set [B] signal count to [A].
SWP R R : Swap [A] with [B].
CLR R... : Clear register(s). Clears all if none specified.
FIR R : Find signal R from the red wire and move to mem1.
FIG R : Find signal R from the green wire and move to mem1.
JMP M/I/L : Jump to line [A] or label.
HLT : Halt the program.
NOP : No Operation.
--- Arithmetic Op Codes:
All arithmetic ops ignore type, type in mem1 is preserved.
ADD M/I M/I : Add [A] + [B], store result in mem1.
SUB M/I M/I : Subtract [A] - [B], store result in mem1.
MUL M/I M/I : Multiply [A] * [B], store result in mem1.
DIV M/I M/I : Divide [A] / [B], store result in mem1.
MOD M/I M/I : Modulo [A] % [B], store result in mem1.
POW M/I M/I : Raise [A] to power of [B], store result in mem1.
DIG M/I : Gets the [A]th digit from mem1, store result in mem1.
DIS M/I M/I : Sets the [A]th digit from mem1 to the 1st digit from [B].
BND M/I M/I : Bitwise [A] AND [B]
BOR M/I M/I : Bitwise [A] OR [B]
BXR M/I M/I : Bitwise [A] XOR [B]
BNO M/I : Bitwise NOT [A]
BLS M/I M/I : Bitwise LEFT SHIFT [A] by [B]
BRS M/I M/I : Bitwise RIGHT SHIFT [A] by [B]
BLR M/I M/I : Bitwise LEFT ROTATE [A] by [B]
BRR M/I M/I : Bitwise RIGHT ROTATE [A] by [B]
--- Test Op Codes:
Test Ops will skip the next line if the test is successful.
TGT M/I M/I : Tests if [A] value greater than [B] value.
TLT M/I M/I : Tests if [A] value less than [B] value.
TEQ M/I M/I : Tests if [A] value equals [B] value.
TNQ M/I M/I : Tests if [A] value does not equal [B] value.
TTE M M : Tests if [A] type equals [B] type.
TTN M M : Tests if [A] type does not equal [B] type.
--- Blocking Op Codes:
Blocking Ops will pause the program until the operation is complete.
SLP M/I : Sleep for [A] ticks.
BKR M/I : Block until there's [a]+ signals on the red wire.
BKG M/I : Block until there's [a]+ signals on the green wire.
SYN : Blocks until all other connected microcontrollers SYN.
--- Interrupts:
You can send interrupting signals to a microcontroller.
There are: HLT (halt), RUN (run), STP (step), SLP (sleep) and JMP (jump).
If a microcontroller receives any one of these signals it will
execute them immediately.
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Example 1:
# Outputs the first signal
# from red multiplied by 2.
mov red1 mem1
mul mem1 2
mov mem1 out
jmp 2
-- Example 2:
# accumulates first 4
# signals on the red wire.
:SETUP
clr
set 11 mem2
set 1 mem3
:LOOP
mov red@3 mem1
add mem1 mem@2
mov mem1 mem@2
:NEXT
add mem2 1
tlt mem1 15
set 11 mem1
mov mem1 mem2
add mem3 1
tlt mem1 5
set 1 mem1
mov mem1 mem3
jmp :LOOP
]]