diff --git a/.gitignore b/.gitignore
index a9ce44b..ee5aa21 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-.*.swp # Vim
+*.swp # Vim
 
 # Byte-compiled / optimized / DLL files
 __pycache__/
diff --git a/README.md b/README.md
index d01c4fe..da57d66 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # modelmachine
 Model machine emulator
 
-[![Build Status](https://travis-ci.org/cmc-python/modelmachine.svg?branch=master)](https://travis-ci.org/cmc-python/modelmachine)
+[![Build Status](https://travis-ci.org/vslutov/modelmachine.svg?branch=master)](https://travis-ci.org/vslutov/modelmachine)
 
 ## TODO
 
diff --git a/modelmachine/__main__.py b/modelmachine/__main__.py
index 23b5e8e..852943e 100644
--- a/modelmachine/__main__.py
+++ b/modelmachine/__main__.py
@@ -3,41 +3,62 @@
 """Modelmachine - model machine emulator."""
 
 from modelmachine.ide import get_program, get_cpu, debug
-import pytest, os, sys
+import pytest, os, sys, argparse
 
 VERSION = "0.0.6" # Don't forget fix in setup.py
 
-USAGE = '''Usage: modelmachine command [file]
-Available commands:
-    test             : run internal tests
-    run <filename>   : execute filename
-    debug <filename> : debug filename
-    version          : print version and exit
-    help             : print this help and exit'''
+def run_program(args):
+    cpu = get_program(args.filename, args.protect_memory)
+    cpu.run_file(args.filename)
 
+def run_debug(args):
+    cpu = get_program(args.filename, args.protect_memory)
+    debug(cpu)
 
-def main(argv, stdin, stdout):
+def run_tests(args):
+    path = os.path.abspath(os.path.dirname(__file__))
+    sys.argv[1] = path
+    pytest.main()
+
+def main(argv, stdout):
     """Execute, when user call modelmachine."""
-    stdin = stdin
-    if len(argv) == 2 and argv[1] == "test":
-        path = os.path.abspath(os.path.dirname(__file__))
-        argv[1] = path
-        pytest.main()
-    elif len(argv) == 3 and argv[1] == "debug":
-        filename = argv[2]
-        cpu = get_program(filename)
-        debug(cpu)
-    elif len(argv) == 3 and argv[1] == "run":
-        filename = argv[2]
-        cpu = get_program(filename)
-        cpu.run_file(filename)
-    elif len(argv) == 2 and argv[1] == "version":
+    parser = argparse.ArgumentParser(description='Run modelmachine.', add_help=False)
+
+    group = parser.add_mutually_exclusive_group()
+
+    group.add_argument('-h', '--help', action='store_true', default=False,
+                       help='show this help message and exit')
+    group.add_argument('-v', '--version', action='store_true', default=False,
+                       help='print version and exit')
+
+    parser.add_argument('-m', '--protect_memory', action='store_true', default=False,
+                        help='raise an error if try to read dirty memory')
+    subparsers = parser.add_subparsers(title='commands',
+                                       help='commands for model machine emulator')
+
+    run = subparsers.add_parser('run', help='run program')
+    run.add_argument('filename', help='file with source code')
+    run.set_defaults(func=run_program)
+
+    debug = subparsers.add_parser('debug', help='run program in debug mode')
+    debug.add_argument('filename', help='file with source code')
+    debug.set_defaults(func=run_debug)
+
+    test = subparsers.add_parser('test', help='run internal tests end exit')
+    test.set_defaults(func=run_tests)
+
+    args = parser.parse_args(argv[1:])
+
+    if args.version:
         print("ModelMachine", VERSION, file=stdout)
+    elif args.help:
+        parser.print_help(stdout)
     else:
-        print(USAGE, file=stdout)
-        if not (len(argv) == 2 and argv[1] == "help"):
-            exit(1)
+        args.func(args)
 
 def exec_main():
     """Hook for testability."""
-    main(sys.argv, sys.stdin, sys.stdout)
+    main(sys.argv, sys.stdout)
+
+if __name__ == '__main__':
+    exec_main()
diff --git a/modelmachine/cpu.py b/modelmachine/cpu.py
index bb4faeb..8519e9c 100644
--- a/modelmachine/cpu.py
+++ b/modelmachine/cpu.py
@@ -70,13 +70,15 @@ class AbstractCPU:
 
         self.io_unit.load_source(code)
 
-        input_addresses = [int(x, 0) for x in self.config['input'].split(',')]
-        self.io_unit.load_data(input_addresses, data)
+        if 'input' in self.config:
+            input_addresses = [int(x, 0) for x in self.config['input'].split(',')]
+            self.io_unit.load_data(input_addresses, data)
 
     def print_result(self, output=sys.stdout):
         """Print calculation result."""
-        for address in (int(x, 0) for x in self.config['output'].split(',')):
-            print(self.io_unit.get_int(address), file=output)
+        if 'output' in self.config:
+            for address in (int(x, 0) for x in self.config['output'].split(',')):
+                print(self.io_unit.get_int(address), file=output)
 
     def run_file(self, filename, output=sys.stdout):
         """Run all execution cycle."""
@@ -90,7 +92,7 @@ class BordachenkovaMM3(AbstractCPU):
 
     """Bordachenkova model machine 3."""
 
-    def __init__(self):
+    def __init__(self, protect_memory):
         """See help(type(x))."""
         word_size = 7 * 8
         address_size = 2 * 8
@@ -98,7 +100,7 @@ class BordachenkovaMM3(AbstractCPU):
         self.ram = RandomAccessMemory(word_size=word_size,
                                       memory_size=memory_size,
                                       endianess='big', # Unused
-                                      is_protected=True)
+                                      is_protected=protect_memory)
         self.registers = RegisterMemory()
         self.register_names = BCU3.register_names
         self.alu = ArithmeticLogicUnit(registers=self.registers,
@@ -119,7 +121,7 @@ class BordachenkovaMM2(AbstractCPU):
 
     """Bordachenkova model machine 2."""
 
-    def __init__(self):
+    def __init__(self, protect_memory):
         """See help(type(x))."""
         word_size = 5 * 8
         address_size = 2 * 8
@@ -127,7 +129,7 @@ class BordachenkovaMM2(AbstractCPU):
         self.ram = RandomAccessMemory(word_size=word_size,
                                       memory_size=memory_size,
                                       endianess='big', # Unused
-                                      is_protected=True)
+                                      is_protected=protect_memory)
         self.registers = RegisterMemory()
         self.register_names = BCU2.register_names
         self.alu = ArithmeticLogicUnit(registers=self.registers,
@@ -148,7 +150,7 @@ class BordachenkovaMMV(AbstractCPU):
 
     """Bordachenkova variable model machine."""
 
-    def __init__(self):
+    def __init__(self, protect_memory):
         """See help(type(x))."""
         byte_size = 8
         word_size = 5 * byte_size
@@ -157,7 +159,7 @@ class BordachenkovaMMV(AbstractCPU):
         self.ram = RandomAccessMemory(word_size=byte_size,
                                       memory_size=memory_size,
                                       endianess='big',
-                                      is_protected=True)
+                                      is_protected=protect_memory)
         self.registers = RegisterMemory()
         self.register_names = BCUV.register_names
         self.alu = ArithmeticLogicUnit(registers=self.registers,
@@ -178,7 +180,7 @@ class BordachenkovaMM1(AbstractCPU):
 
     """Bordachenkova model machine 1."""
 
-    def __init__(self):
+    def __init__(self, protect_memory):
         """See help(type(x))."""
         word_size = 3 * 8
         address_size = 2 * 8
@@ -186,7 +188,7 @@ class BordachenkovaMM1(AbstractCPU):
         self.ram = RandomAccessMemory(word_size=word_size,
                                       memory_size=memory_size,
                                       endianess='big', # Unused
-                                      is_protected=True)
+                                      is_protected=protect_memory)
         self.registers = RegisterMemory()
         self.register_names = BCU1.register_names
         self.alu = ArithmeticLogicUnit(registers=self.registers,
@@ -208,7 +210,7 @@ class BordachenkovaMMS(AbstractCPU):
 
     """Bordachenkova stack model machine."""
 
-    def __init__(self):
+    def __init__(self, protect_memory):
         """See help(type(x))."""
         byte_size = 8
         word_size = 3 * byte_size
@@ -217,7 +219,7 @@ class BordachenkovaMMS(AbstractCPU):
         self.ram = RandomAccessMemory(word_size=byte_size,
                                       memory_size=memory_size,
                                       endianess='big', # Unused
-                                      is_protected=True)
+                                      is_protected=protect_memory)
         self.registers = RegisterMemory()
         self.register_names = BCUS.register_names
         self.alu = ArithmeticLogicUnit(registers=self.registers,
diff --git a/modelmachine/ide.py b/modelmachine/ide.py
index 954cab3..a5d154c 100644
--- a/modelmachine/ide.py
+++ b/modelmachine/ide.py
@@ -147,20 +147,20 @@ def debug(cpu):
         else:
             need_help = True
 
-def get_cpu(source):
+def get_cpu(source, protect_memory):
     """Return empty cpu or raise the ValueError."""
     arch = source[0].strip()
     if arch in CPU_LIST:
-        cpu = CPU_LIST[arch]()
+        cpu = CPU_LIST[arch](protect_memory)
         return cpu
     else:
         raise ValueError('Unexpected arch (found in first line): {arch}'
                          .format(arch=arch))
 
-def get_program(filename):
+def get_program(filename, protect_memory):
     """Read model machine program."""
     with open(filename, 'r') as source_file:
         source = source_file.readlines()
-        cpu = get_cpu(source)
+        cpu = get_cpu(source, protect_memory)
         cpu.load_program(source)
         return cpu
diff --git a/samples/minimal.mmach b/samples/minimal.mmach
new file mode 100644
index 0000000..40b875b
--- /dev/null
+++ b/samples/minimal.mmach
@@ -0,0 +1,9 @@
+bordachenkova_mms
+
+[config]
+
+[code]
+99 ; halt
+
+[input]
+

Поправить RandomAcessMemory.is_protected
- Проверить, что при is_protected=False машина выдает нули и не падает.
- Поправить машину с переменной длиной адреса, устранить лишние считывания.
- Сделать параметр командной строки для управления этим параметром.
diff --git a/modelmachine/tests/test_cpu.py b/modelmachine/tests/test_cpu.py
index 08a5e25..5715ea8 100644
--- a/modelmachine/tests/test_cpu.py
+++ b/modelmachine/tests/test_cpu.py
@@ -109,7 +109,7 @@ class TestBordachenkovaMM3:
 
     def setup(self):
         """Init state."""
-        self.cpu = BordachenkovaMM3()
+        self.cpu = BordachenkovaMM3(protect_memory=False)
         self.source = ("[config]\ninput=0x101,0x102\noutput=0x103\n" +
                        "[code]\n01 0101 0102 0103\n80 0000 0000 0003\n" +
                        "02 0103 0103 0103; never be used\n" +
@@ -137,7 +137,7 @@ class TestBordachenkovaMM2:
 
     def setup(self):
         """Init state."""
-        self.cpu = BordachenkovaMM2()
+        self.cpu = BordachenkovaMM2(protect_memory=False)
         self.source = ("[config]\n" +
                        "input=0x101,0x102\n" +
                        "output=0x103\n" +
@@ -172,7 +172,7 @@ class TestBordachenkovaMMV:
 
     def setup(self):
         """Init state."""
-        self.cpu = BordachenkovaMMV()
+        self.cpu = BordachenkovaMMV(protect_memory=False)
         self.source = ("[config]\n" +
                        "input=0x100,0x105\n" +
                        "output=0x10a\n" +
@@ -208,7 +208,7 @@ class TestBordachenkovaMM1:
 
     def setup(self):
         """Init state."""
-        self.cpu = BordachenkovaMM1()
+        self.cpu = BordachenkovaMM1(protect_memory=False)
         self.source = ("[config]\n" +
                        "input=0x101,0x102\n" +
                        "output=0x103\n" +
@@ -246,7 +246,7 @@ class TestBordachenkovaMMS:
 
     def setup(self):
         """Init state."""
-        self.cpu = BordachenkovaMMS()
+        self.cpu = BordachenkovaMMS(protect_memory=False)
         self.source = ("[config]\n" +
                        "input=0x100,0x103\n" +
                        "output=0x106\n" +
diff --git a/modelmachine/tests/test_cu_bord_variable.py b/modelmachine/tests/test_cu_bord_variable.py
index d7e83da..135823a 100644
--- a/modelmachine/tests/test_cu_bord_variable.py
+++ b/modelmachine/tests/test_cu_bord_variable.py
@@ -26,7 +26,7 @@ class TestBordachenkovaControlUnitV(TBCU2):
     def setup(self):
         """Init state."""
         super().setup()
-        self.ram = RandomAccessMemory(BYTE_SIZE, 256, 'big')
+        self.ram = RandomAccessMemory(BYTE_SIZE, 256, 'big', is_protected=True)
         self.control_unit = BordachenkovaControlUnitV(WORD_SIZE,
                                                       BYTE_SIZE,
                                                       self.registers,
@@ -158,6 +158,23 @@ class TestBordachenkovaControlUnitV(TBCU2):
         assert self.registers.fetch("IP", BYTE_SIZE) == 0x15
         assert self.control_unit.get_status() == HALTED
 
+    def test_minimal_run(self):
+        """Minimal program."""
+        self.control_unit.registers = self.registers = RegisterMemory()
+        self.registers.add_register('IR', WORD_SIZE)
+        self.alu = ArithmeticLogicUnit(self.registers,
+                                       self.control_unit.register_names,
+                                       WORD_SIZE,
+                                       BYTE_SIZE)
+        self.control_unit.alu = self.alu
+
+        self.ram.put(0x00, 0x99, BYTE_SIZE)
+        self.registers.put("IP", 0, BYTE_SIZE)
+
+        self.control_unit.run()
+        assert self.registers.fetch("IP", BYTE_SIZE) == 0x01
+        assert self.control_unit.get_status() == HALTED
+
 
 class TestBordachenkovaControlUnitS(TBCU2):
 
@@ -166,7 +183,7 @@ class TestBordachenkovaControlUnitS(TBCU2):
     def setup(self):
         """Init state."""
         super().setup()
-        self.ram = RandomAccessMemory(BYTE_SIZE, 256, 'big')
+        self.ram = RandomAccessMemory(BYTE_SIZE, 256, 'big', is_protected=True)
         self.control_unit = BordachenkovaControlUnitS(WORD_SIZE,
                                                       BYTE_SIZE,
                                                       self.registers,
@@ -457,3 +474,23 @@ class TestBordachenkovaControlUnitS(TBCU2):
         assert self.registers.fetch("IP", BYTE_SIZE) == 0x1a
         assert self.registers.fetch("SP", BYTE_SIZE) == 0
         assert self.control_unit.get_status() == HALTED
+
+    def test_minimal_run(self):
+        """Very simple program."""
+        self.control_unit.registers = self.registers = RegisterMemory()
+        self.registers.add_register("IR", WORD_SIZE)
+        self.registers.add_register("SP", BYTE_SIZE)
+        self.registers.put("SP", 0, BYTE_SIZE)
+        self.alu = ArithmeticLogicUnit(self.registers,
+                                       self.control_unit.register_names,
+                                       WORD_SIZE,
+                                       BYTE_SIZE)
+        self.control_unit.alu = self.alu
+
+        self.ram.put(0x00, 0x99, BYTE_SIZE)
+        self.registers.put("IP", 0, BYTE_SIZE)
+
+        self.control_unit.run()
+        assert self.registers.fetch("IP", BYTE_SIZE) == 0x01
+        assert self.registers.fetch("SP", BYTE_SIZE) == 0
+        assert self.control_unit.get_status() == HALTED
diff --git a/modelmachine/tests/test_ide.py b/modelmachine/tests/test_ide.py
index b58861e..18c9635 100644
--- a/modelmachine/tests/test_ide.py
+++ b/modelmachine/tests/test_ide.py
@@ -10,15 +10,15 @@ from pytest import raises
 
 def test_get_cpu():
     """Test define cpu method."""
-    ide.CPU_LIST = {"mm1": create_autospec(AbstractCPU, True)}
+    ide.CPU_LIST = {"abstract_cpu_test": create_autospec(AbstractCPU, True)}
 
     with raises(ValueError):
-        ide.get_cpu(["not_found_cpu", "[config]", "[code]", "00 00", "[input]"])
+        ide.get_cpu(["not_found_cpu", "[config]", "[code]", "00 00", "[input]"], False)
 
     with raises(ValueError):
-        ide.get_cpu(["[config]", "[code]", "00 00", "[input]"])
+        ide.get_cpu(["[config]", "[code]", "00 00", "[input]"], False)
 
-    cpu = ide.get_cpu(["mm1", "[config]", "key=value",
-                       "[code]", "00 00", "99 00", "[input]"])
+    cpu = ide.get_cpu(["abstract_cpu_test", "[config]", "key=value",
+                       "[code]", "00 00", "99 00", "[input]"], False)
     assert isinstance(cpu, AbstractCPU)
 
diff --git a/modelmachine/tests/test_main.py b/modelmachine/tests/test_main.py
index 582eebe..0b89a0e 100644
--- a/modelmachine/tests/test_main.py
+++ b/modelmachine/tests/test_main.py
@@ -2,7 +2,7 @@
 
 """Test case for cli part of modelmachine package."""
 
-from modelmachine.__main__ import main, VERSION, USAGE
+from modelmachine.__main__ import main, VERSION
 from pytest import raises
 
 def test_version(tmpdir):
@@ -10,19 +10,25 @@ def test_version(tmpdir):
     output_path = tmpdir.join('output.txt')
 
     with open(str(output_path), 'w') as stdout:
-        main(['modelmachine', 'version'], None, stdout)
+        main(['modelmachine', '--version'], stdout)
+
+    assert output_path.read() == 'ModelMachine ' + VERSION + '\n'
+
+    with open(str(output_path), 'w') as stdout:
+        main(['modelmachine', '-v'], stdout)
 
     assert output_path.read() == 'ModelMachine ' + VERSION + '\n'
 
 def test_usage(tmpdir):
-    """Test that it's print usage (with exit code 1)."""
+    """Test that it's print usage."""
     output_path = tmpdir.join('output.txt')
 
     with open(str(output_path), 'w') as stdout:
-        main(['modelmachine', 'help'], None, stdout)
-    assert output_path.read() == USAGE + '\n'
-
-    with open(str(output_path), 'w') as stdout:
-        with raises(SystemExit):
-            main(['modelmachine', 'wrong_command'], None, stdout)
-    assert output_path.read() == USAGE + '\n'
+        main(['modelmachine', '--help'], stdout)
+    assert output_path.read().startswith('usage:')
+
+    # TODO: Add stderr capture
+    # with open(str(output_path), 'w') as stdout:
+    #     with raises(SystemExit):
+    #         main(['modelmachine', 'wrong_command'], stdout)
+    # assert output_path.read().startswith('usage:')

pip install -e .[dev]
parse_log_pytest
requirements.txt
pylint pytest
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==3.3.9
dill==0.3.9
exceptiongroup==1.2.2
iniconfig==2.1.0
isort==6.0.1
mccabe==0.7.0
-e git+https://github.com/cmc-python/modelmachine.git@11fd90f0eb9b713b40be7246b25ca817702af930#egg=modelmachine
packaging==24.2
platformdirs==4.3.7
pluggy==1.5.0
pylint==3.3.6
pytest==8.3.5
tomli==2.2.1
tomlkit==0.13.2
typing_extensions==4.13.0

name: modelmachine
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==3.3.9
      - dill==0.3.9
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - isort==6.0.1
      - mccabe==0.7.0
      - packaging==24.2
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - pylint==3.3.6
      - pytest==8.3.5
      - tomli==2.2.1
      - tomlkit==0.13.2
      - typing-extensions==4.13.0
prefix: /opt/conda/envs/modelmachine

modelmachine/tests/test_ide.py::test_get_cpu modelmachine/tests/test_main.py::test_version modelmachine/tests/test_main.py::test_usage
modelmachine/tests/test_cpu.py::TestAbstractCPU::test_load_program modelmachine/tests/test_cpu.py::TestAbstractCPU::test_print_result modelmachine/tests/test_cpu.py::TestAbstractCPU::test_run_file modelmachine/tests/test_cpu.py::TestBordachenkovaMM3::test_smoke modelmachine/tests/test_cpu.py::TestBordachenkovaMM2::test_smoke modelmachine/tests/test_cpu.py::TestBordachenkovaMMV::test_smoke modelmachine/tests/test_cpu.py::TestBordachenkovaMM1::test_smoke modelmachine/tests/test_cpu.py::TestBordachenkovaMMS::test_smoke modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_const modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_fetch_instruction modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_basic_execute modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_execute_cond_jumps modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_jump_halt modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_execute_jump_halt modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_execute_comp modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_write_back modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_fetch_and_decode modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_load modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_step modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_run modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitV::test_minimal_run modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_const modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_fetch_instruction modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_execute_cond_jumps modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_jump_halt modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_execute_jump_halt modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_execute_comp modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_fetch_and_decode modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_push modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_pop modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_load modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_basic_execute modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_execute_stack modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_write_back modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_step modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_run modelmachine/tests/test_cu_bord_variable.py::TestBordachenkovaControlUnitS::test_minimal_run
modelmachine/__main__.py .gitignore modelmachine/ide.py README.md samples/minimal.mmach modelmachine/cpu.py
modelmachine/__main__.py .gitignore modelmachine/ide.py README.md samples/minimal.mmach modelmachine/cpu.py