verify MMR* registers
This commit is contained in:
parent
132dba3cba
commit
ce8af01f63
3 changed files with 25 additions and 3 deletions
1
bus.h
1
bus.h
|
@ -169,6 +169,7 @@ public:
|
|||
uint16_t getMMR1() { return MMR1; }
|
||||
uint16_t getMMR2() { return MMR2; }
|
||||
uint16_t getMMR3() { return MMR3; }
|
||||
uint16_t getMMR(int nr) { uint16_t *mmrs[] { &MMR0, &MMR1, &MMR2, &MMR3 }; return *mmrs[nr]; }
|
||||
void clearMMR1();
|
||||
void addToMMR1(const int8_t delta, const uint8_t reg);
|
||||
void setMMR0(const uint16_t value);
|
||||
|
|
|
@ -148,7 +148,8 @@ class test_generator:
|
|||
#if p.simple_run_1(addr) == False:
|
||||
# return None
|
||||
|
||||
if (p.straps or p.issues) and ignore_traps:
|
||||
#if (p.straps or p.issues) and ignore_traps:
|
||||
if p.straps and ignore_traps:
|
||||
return None
|
||||
|
||||
p._syncregs()
|
||||
|
@ -162,9 +163,18 @@ class test_generator:
|
|||
|
||||
out['memory-after'] = dict()
|
||||
mem_transactions = p.get_mem_transactions_dict()
|
||||
# verify original values
|
||||
for a, v in mem_kv:
|
||||
if not a in mem_transactions:
|
||||
mem_transactions[a] = v
|
||||
for a in mem_transactions:
|
||||
out['memory-after'][a] = mem_transactions[a]
|
||||
# TODO originele geheugeninhouden checken
|
||||
|
||||
out['mmr0-after'] = p.mmu.MMR0
|
||||
p.mmu._MMR1commit()
|
||||
out['mmr1-after'] = p.mmu.MMR1
|
||||
out['mmr2-after'] = p.mmu.MMR2
|
||||
out['mmr3-after'] = p.mmu.MMR3
|
||||
|
||||
return out
|
||||
|
||||
|
@ -179,7 +189,7 @@ class test_generator:
|
|||
stop = False
|
||||
while True:
|
||||
psw = random.randint(0, 65535) & 0o174377
|
||||
name = f'/mnt/temp/0006-{psw:06o}.json'
|
||||
name = f'/data/data/temp2/0008-{psw:06o}.json'
|
||||
if os.path.isfile(name):
|
||||
print(f'skipping {name}')
|
||||
continue
|
||||
|
|
11
main.cpp
11
main.cpp
|
@ -200,6 +200,17 @@ int run_cpu_validation(const std::string & filename)
|
|||
}
|
||||
}
|
||||
|
||||
for(int r=0; r<4; r++) {
|
||||
json_t *a_mmr = json_object_get(test, format("mmr%d-after", r).c_str());
|
||||
assert(a_mmr);
|
||||
uint16_t should_be_mmr = json_integer_value(a_mmr);
|
||||
uint16_t is_mmr = b->getMMR(r);
|
||||
if (should_be_mmr != is_mmr) {
|
||||
DOLOG(warning, true, "MMR%d register mismatch (is: %06o (%d), should be: %06o (%d))", r, is_mmr, is_mmr, should_be_mmr, should_be_mmr);
|
||||
err = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (err) {
|
||||
if (c->is_it_a_trap())
|
||||
DOLOG(warning, true, "Error by TRAP %s", disas_data["instruction-text"].at(0).c_str());
|
||||
|
|
Loading…
Add table
Reference in a new issue