json producers tweaks
This commit is contained in:
parent
4ecf4d0de2
commit
b1019c1fbd
2 changed files with 48 additions and 35 deletions
|
@ -1,7 +1,6 @@
|
|||
#! /usr/bin/python3
|
||||
|
||||
# place in the same folder as https://github.com/outofmbufs/python-pdp11-emulator
|
||||
|
||||
import copy
|
||||
import json
|
||||
from machine import PDP1170
|
||||
from mmio import MMIO
|
||||
|
@ -83,7 +82,7 @@ class test_generator:
|
|||
for reg_ in range(0, 6):
|
||||
target[tag][set_][reg_] = p.registerfiles[set_][reg_]
|
||||
|
||||
target[tag]['sp'] = p.stackpointers
|
||||
target[tag]['sp'] = copy.deepcopy(p.stackpointers)
|
||||
target[tag]['pc'] = p.r[p.PC]
|
||||
|
||||
def create_test(self):
|
||||
|
@ -94,7 +93,7 @@ class test_generator:
|
|||
|
||||
# TODO what is the maximum size of an instruction?
|
||||
# non-mmu thus shall be below device range
|
||||
addr = random.randint(0, 0o160000 - 8) & ~3
|
||||
addr = random.randint(0, 0o160000 - 8) & ~1
|
||||
mem_kv = []
|
||||
while True:
|
||||
instr = random.randint(0, 65536 - 8)
|
||||
|
@ -113,7 +112,7 @@ class test_generator:
|
|||
# generate & set PSW
|
||||
while True:
|
||||
try:
|
||||
p.psw = random.randint(0, 65536) & 0o174377
|
||||
p.psw = random.randint(0, 65536)
|
||||
break
|
||||
except PDPTraps.ReservedInstruction as ri:
|
||||
pass
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
#! /usr/bin/python3
|
||||
|
||||
# place in the same folder as https://github.com/outofmbufs/python-pdp11-emulator
|
||||
|
||||
import copy
|
||||
import json
|
||||
from machine import PDP1170
|
||||
from mmio import MMIO
|
||||
from op4 import op4_dispatch_table
|
||||
import os
|
||||
from pdptraps import PDPTrap, PDPTraps
|
||||
import random
|
||||
|
@ -50,7 +49,7 @@ class PDP1170_wrapper(PDP1170):
|
|||
if value == None: # read
|
||||
self.logger.info(f'Read from {physaddr:08o} (phys)')
|
||||
if not physaddr in self.mem_transactions and not physaddr in self.before:
|
||||
self.before[physaddr] = random.randint(0, 65536)
|
||||
self.before[physaddr] = random.randint(0, 65535)
|
||||
return super().physRW(physaddr, self.before[physaddr])
|
||||
|
||||
self.logger.info(f'Write to {physaddr:08o}: {value:06o} (phys)')
|
||||
|
@ -62,7 +61,7 @@ class PDP1170_wrapper(PDP1170):
|
|||
if words == None:
|
||||
self.logger.info(f'Read {nwords} words from {physaddr:08o} (phys)')
|
||||
for i in range(nwords):
|
||||
self.physRW(temp_addr, random.randint(0, 65536))
|
||||
self.physRW(temp_addr, random.randint(0, 65535))
|
||||
temp_addr += 2
|
||||
return super().physRW_N(physaddr, nwords)
|
||||
|
||||
|
@ -73,6 +72,19 @@ class PDP1170_wrapper(PDP1170):
|
|||
|
||||
return super().physRW_N(physaddr, nwords, words=words)
|
||||
|
||||
def simple_run_1(self, pc):
|
||||
thisPC = pc
|
||||
self.r[self.PC] = (thisPC + 2) & 0o177777 # "could" wrap
|
||||
|
||||
try:
|
||||
inst = self.mmu.wordRW(thisPC)
|
||||
op4_dispatch_table[inst >> 12](self, inst)
|
||||
|
||||
return True
|
||||
|
||||
except PDPTrap as trap:
|
||||
return False
|
||||
|
||||
class test_generator:
|
||||
def _invoke_bp(self, a, i):
|
||||
return True
|
||||
|
@ -89,6 +101,7 @@ class test_generator:
|
|||
target[tag]['pc'] = p.r[p.PC]
|
||||
|
||||
def create_test(self, instr, psw):
|
||||
try:
|
||||
out = { }
|
||||
|
||||
p = PDP1170_wrapper(loglevel='ERROR')
|
||||
|
@ -102,20 +115,19 @@ class test_generator:
|
|||
return None
|
||||
p.logger.info(f'emulating {instr:06o}')
|
||||
mem_kv.append((addr + 0, instr))
|
||||
mem_kv.append((addr + 2, random.randint(0, 65536 - 8) & ~1))
|
||||
mem_kv.append((addr + 4, random.randint(0, 65536 - 8) & ~1))
|
||||
mem_kv.append((addr + 6, random.randint(0, 65536 - 8) & ~1))
|
||||
mem_kv.append((addr + 2, random.randint(0, 65535 - 8) & ~1))
|
||||
mem_kv.append((addr + 4, random.randint(0, 65535 - 8) & ~1))
|
||||
mem_kv.append((addr + 6, random.randint(0, 65535 - 8) & ~1))
|
||||
out['memory-before'] = dict()
|
||||
for a, v in mem_kv:
|
||||
p.put(a, v)
|
||||
|
||||
try:
|
||||
p.psw = psw
|
||||
|
||||
# generate other registers
|
||||
reg_kv = []
|
||||
for i in range(7):
|
||||
reg_kv.append((i, random.randint(0, 65536) & ~1))
|
||||
reg_kv.append((i, random.randint(0, 65535) & ~1))
|
||||
reg_kv.append((7, addr))
|
||||
|
||||
# set registers
|
||||
|
@ -133,8 +145,10 @@ class test_generator:
|
|||
|
||||
# run instruction
|
||||
p.run_steps(pc=addr, steps=1)
|
||||
#if p.simple_run_1(addr) == False:
|
||||
# return None
|
||||
|
||||
if p.straps and ignore_traps:
|
||||
if (p.straps or p.issues) and ignore_traps:
|
||||
return None
|
||||
|
||||
p._syncregs()
|
||||
|
@ -164,8 +178,8 @@ class test_generator:
|
|||
|
||||
stop = False
|
||||
while True:
|
||||
psw = random.randint(0, 65536) & 0o174377
|
||||
name = f'/mnt/temp/bla-{psw:06o}.json'
|
||||
psw = random.randint(0, 65535) & 0o174377
|
||||
name = f'/mnt/temp/0006-{psw:06o}.json'
|
||||
if os.path.isfile(name):
|
||||
print(f'skipping {name}')
|
||||
continue
|
||||
|
@ -177,9 +191,9 @@ while True:
|
|||
|
||||
tests = []
|
||||
try:
|
||||
for lb in range(65536):
|
||||
for lb in range(65535):
|
||||
if (lb & 63) == 0:
|
||||
print(f'{lb}\r', end='')
|
||||
print(f'{lb} {len(tests)}\r', end='')
|
||||
test = t.create_test(lb, psw)
|
||||
if test != None:
|
||||
tests.append(test)
|
||||
|
|
Loading…
Add table
Reference in a new issue