Skip to main content

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 ops since Mindustry V7 Beta (beta 140), except op noise
  • read and write memory cells and banks
  • getlink to get memory blocks (cells/banks)
  • set @counter or op @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 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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

mlog_arithmetic_runner-0.0.5-py3-none-any.whl (7.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page