An Mindustry Logic emulator built for automated testing of compilers.
Project description
MlogArithmeticRunner
A Mindustry Logic emulator built for automated testing of compilers (like MlogEvo).
Install
pip install https://github.com/UMRnInside/MlogArithmeticRunner
or
pip install mlog_arithmetic_runner
Usage
$ python3 -m mlog_arithmetic_runner --help
usage: mlog_arithmetic_runner [-h] [--limit LIMIT] [--continue-if-past-the-end] [--ipt IPT]
[--memory-banks MEMORY_BANKS] [--memory-cells MEMORY_CELLS]
[--json-indent JSON_INDENT] [--json-dump-memory-blocks]
Reads some mlog code from stdin, runs it, and generates JSON report
optional arguments:
-h, --help show this help message and exit
--limit LIMIT Max instructions/cycles allowed, something like TimeLimit
--continue-if-past-the-end
--ipt IPT Instructions per tick. 2 for micro-processor, 8 for logic-processor,
25 for hyper-processor
--memory-banks MEMORY_BANKS
Memory bank count
--memory-cells MEMORY_CELLS
Memory cell count
--json-indent JSON_INDENT
JSON indent, set 0 to disable
--json-dump-memory-blocks
dump all memory content in JSON report
Supported Instructions
set
jump
end
- All
op
s since Mindustry V7 Beta (beta 140), exceptop noise
read
andwrite
memory cells and banksgetlink
to get memory blocks (cells/banks)set @counter
orop @counter
as unconditional jumps
Features
@tick
and@time
increases with processor runs- Stop emulation once some instruction jumps to itself
- (Optional, Default) Stop emulation once
@counter
past the end - (Optional) Dump memory cells and banks
- Dump variables into JSON report
Limitations
- Does NOT have
@this
yet, so do@thisx
and@thisy
- No label or "jump-to-label" support
- No comment in mlog code
- (not sure)
Python Usage
from mlog_arithmetic_runner import MlogProcessor
processor = MlogProcessor(ipt=2, memory_cells=0, memory_banks=0)
code = """\
set a 90
op sin b a 0
"""
processor.assemble_code(code)
processor.run_with_limit(1000)
# When comparing 2 float-point numbers, remember there could be float precision errors.
# Use abs(a-b) < 1e-6 instead of a == b
print("a =", processor.get_variable("a"))
print("b =", processor.get_variable("b"))
JSON Report Sample
set a 1
set a 2
set b @tick
set c @time
This generates:
{
"cycles": 4,
"success": true,
"reason": "",
"variables": {
"a": 2.0,
"b": 1,
"c": 0.016666666666666666
},
"memory_blocks": {}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for mlog_arithmetic_runner-0.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc2e5eec61ef92d1ba11b2e9c61c1c85f9978d23800d24b5785052bb3189c030 |
|
MD5 | c1b0924725c6b8fd76d64b2725b8dac3 |
|
BLAKE2b-256 | eb7ea75af7c850756917daf95dec2dc7d8f0ec3aa8d6415ef5e55c4a31d2ca8c |
Close
Hashes for mlog_arithmetic_runner-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33fb83a129725138363167055a34abcafeea1791fa535715f9afbc5cc1c04b75 |
|
MD5 | 7bbf06c2ca2e71d823bb93f53caee4c8 |
|
BLAKE2b-256 | e99bbbdc21c78f37b86cf7c5fa23b177a44c6405c856af5827118808e3fc9f8f |