wip
This commit is contained in:
parent
5df044e44c
commit
e1300a8c43
1 changed files with 71 additions and 0 deletions
71
jsonprocessor.py
Executable file
71
jsonprocessor.py
Executable file
|
@ -0,0 +1,71 @@
|
|||
#! /usr/bin/python3
|
||||
|
||||
from machine import PDP1170
|
||||
import json
|
||||
import sys
|
||||
|
||||
def return_true(a, b):
|
||||
return True
|
||||
|
||||
def compare(v1, v2, what, test):
|
||||
if v1 != v2:
|
||||
print(f'Value mismatch for {what}: {v1:o} (is) should be {v2:o} (test: {test})')
|
||||
return 1
|
||||
return 0
|
||||
|
||||
file = sys.argv[1]
|
||||
print(f'Loading json {file}...')
|
||||
j = json.load(open(file))
|
||||
|
||||
print('Testing...')
|
||||
total_n = 0
|
||||
total_errors = 0
|
||||
tests_with_errors = 0
|
||||
for test in j:
|
||||
p = PDP1170()
|
||||
|
||||
id_ = test['id']
|
||||
|
||||
# setup
|
||||
before = test['before']
|
||||
|
||||
pc = int(before['PC'])
|
||||
p.psw = int(before['PSW'])
|
||||
p.stackpointers = [ int(before['stack-0']), int(before['stack-1']), int(before['stack-2']), int(before['stack-3']) ]
|
||||
p.r[6] = p.stackpointers[0]
|
||||
|
||||
for kv in before['memory']:
|
||||
for k in kv:
|
||||
a = int(k, 8)
|
||||
p.physRW(a, value=int(kv[k]))
|
||||
|
||||
for reg in range(6):
|
||||
p.r[reg] = int(before[f'reg-{reg}.0'])
|
||||
p.r_alt[reg] = int(before[f'reg-{reg}.1'])
|
||||
|
||||
# do
|
||||
p.run(pc=pc, breakpoint=return_true)
|
||||
p._syncregs()
|
||||
|
||||
# verify
|
||||
after = test['after']
|
||||
now_errors = 0
|
||||
now_errors += compare(p.r[7], after['PC'], 'PC', id_)
|
||||
now_errors += compare(p.psw, after['PSW'], 'PSW', id_)
|
||||
now_errors += compare(p.stackpointers[0], int(after['stack-0']), 'kernel stackpointer', id_)
|
||||
|
||||
for kv in after['memory']:
|
||||
for k in kv:
|
||||
a = int(k, 8)
|
||||
v = p.physRW(a)
|
||||
now_errors += compare(v, int(kv[k]), f'memory {a:06o}', id_)
|
||||
|
||||
for reg in range(6):
|
||||
now_errors += compare(p.r[reg], int(after[f'reg-{reg}.0']), f'register {reg}', id_)
|
||||
now_errors += compare(p.r_alt[reg], int(after[f'reg-{reg}.1']), f'alt register {reg}', id_)
|
||||
|
||||
total_errors += now_errors
|
||||
tests_with_errors += 1 if now_errors > 0 else 0
|
||||
total_n += 1
|
||||
|
||||
print(f'Done with {total_errors} total errors over {tests_with_errors} failed tests in {total_n} tests')
|
Loading…
Add table
Reference in a new issue