diff --git a/PDP11/test.c b/PDP11/test.c index 366d0ea7..dd15b2a6 100644 --- a/PDP11/test.c +++ b/PDP11/test.c @@ -312,6 +312,55 @@ void emit_add_sub_c() dump_json(filename, out); } +void emit_single_operand_instructions() +{ + printf("single operand instructions\n"); + int groups[] = { 00001, 00003, 00050, 01050, 00051, 01051, 00052, 01052, 00053, 01053, 00054, 01054, 00057, 01057, 00060, 01060, 00061, 01061, 00062, 01062, 00063, 01063, 00067, -1 }; + + for(int group=0; group<23; group++) { + char filename[128] = { 0 }; + sprintf(filename, "pdp1170-valtest-SINGLE_OPERAND-%o.json", groups[group]); + if (file_exist(filename)) + continue; + printf("%s \r", filename); + fflush(NULL); + + int id = 0; + json_t *out = json_array(); + + uint16_t instr = 0; + + if (groups[group] == 00001) // JMP can't jump to a register + instr = (groups[group] << 6) | 010; // (R0) + else + instr = (groups[group] << 6) | 001; // R0 + + for(int v1=0; v1<n_test_values; v1++) { + for(int psw_val=0; psw_val<2; psw_val++) { + init_simh(); + + saved_PC = 0100; + + randomize_registers_all_values(); + REGFILE[0][0] = REGFILE[0][1] = v1; + + init_stack_registers(); + + struct mem_t mem[1] = { + { 0100, instr } + }; + + PSW = psw_val; + + json_t *obj = generate_test(instr, &id, mem, 1); + if (obj) + json_array_append_new(out, obj); + } + } + dump_json(filename, out); + } +} + void emit_cmp() { printf("CMP instructions\n"); @@ -473,6 +522,8 @@ void produce_validation_tests() emit_condition_sets(); // condition_code_operations* emit_add_double_oper_instr(); // additional_double_operand_instructions* + emit_single_operand_instructions(); + emit_add_sub_c(); // double_operand_instructions, single_operand_instructions emit_bit_instructions(); // double_operand_instructions emit_cmp(); // double_operand_instructions