#!/bin/env python3 import os import sys import mmap import struct # import math # import numpy as np f = os.open("/dev/mem", os.O_RDWR | os.O_SYNC) mem = mmap.mmap(f, 0x1000, mmap.MAP_SHARED, mmap.PROT_READ | mmap.PROT_WRITE, offset=0x40000000) def oreg_get(x): v = struct.unpack("> 16), 2) pmat = tobin((acnt >> 24), 6) acnt = acnt & 0xFFF; oreg = oreg_get(1) >> 24 print(f'{idx:7d} 0x{acnt:03X} 0x{addr:08X} {pmat:s} {flag:s} 0x{oreg:1X}') def step(flag): flag &= 0xE oreg_set(1, (oreg[1] & 0xFFFFFF) | (flag << 24)) flag |= 0x1 oreg_set(1, (oreg[1] & 0xFFFFFF) | (flag << 24)) def sim(cnt, arg): num = int(cnt) for n in range(num): step(int(arg, 0)) show(n) def prep(idx, arg): step(int(arg, 0)) show(idx) cnt = len(sys.argv) - 1 if cnt == 0: # no arguments, just print status show(0) elif cnt == 1: # simulate sim(sys.argv[1], 0x8) else: # simulate after rev sequence for n in range(2-cnt, 0): prep(n, sys.argv[2-n]) sim(sys.argv[1], sys.argv[2])