#include #include #include "pdp11_defs.h" #include "sim_defs.h" //extern t_stat sim_brk_init(void); //extern t_stat sim_brk_set(t_addr loc, int32 sw, int32 ncnt, CONST char *act); extern t_stat sim_instr(); //extern uint32 sim_brk_summ; extern void PWriteW(int32 data, int32 addr); extern int32 PReadW(int32 addr); extern int32 REGFILE[6][2]; extern int32 STACKFILE[4]; extern int32 saved_PC; extern int32 PSW; extern t_stat cpu_reset(DEVICE *dptr); extern DEVICE cpu_dev; extern int32 STACKFILE[4]; struct mem_t { uint32_t addr; uint16_t value; }; json_t *generate_test(uint16_t instruction, int *const id, struct mem_t *mem, size_t n_mem) { json_t *before = json_object(); reset_all(0); cpu_reset(&cpu_dev); json_object_set(before, "PC", json_integer(saved_PC)); json_object_set(before, "stack-0", json_integer(STACKFILE[0])); json_object_set(before, "stack-1", json_integer(STACKFILE[1])); json_object_set(before, "stack-2", json_integer(STACKFILE[2])); json_object_set(before, "stack-3", json_integer(STACKFILE[3])); json_t *memory_i = json_array(); for(size_t i=0; i= invalid[test][0] && i <= invalid[test][1]) { skip = 1; break; } } if (skip) continue; if (i == 0 || // HALT i == 1 || // WAIT i == 5) // RESET continue; if (i >= 0170000 && i <= 0177777) // FPU continue; init_simh(); saved_PC = 0100; for(int k=0; k<6; k++) { REGFILE[k][0] = (rand() % 0160000) & (~1); REGFILE[k][1] = (rand() % 0160000) & (~1); } STACKFILE[0] = STACKFILE[1] = STACKFILE[2] = STACKFILE[3] = 010000; struct mem_t mem[3] = { { 0100, i }, { 0102, (rand() % 0160000) & (~1) }, { 0104, (rand() % 0160000) & (~1) }, }; PSW = rand() & 15; // only calculation status bits json_t *collection = generate_test(i, &id, mem, 3); json_array_append_new(out, collection); } #endif emit_branch_instructions(out, &id); FILE *fh = fopen("testset.json", "w"); json_dumpf(out, fh, JSON_INDENT(2)); fclose(fh); }