From ae0c50305486f0c07655a73c540647829138b5bf Mon Sep 17 00:00:00 2001 From: Folkert van Heusden Date: Fri, 4 Apr 2025 09:02:18 +0200 Subject: [PATCH] emit_add_sub also test the two carry values --- PDP11/test.c | 54 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/PDP11/test.c b/PDP11/test.c index e3150f29..50907964 100644 --- a/PDP11/test.c +++ b/PDP11/test.c @@ -40,7 +40,7 @@ int n_test_values = 0; void generate_test_values() { - for(int i=1; i<65536; i+=14) { + for(int i=1; i<65536; i+=28) { if (is_prime(i)) test_values[n_test_values++] = i; } @@ -248,47 +248,57 @@ void emit_condition_sets() dump_json("pdp1170-valtest-CONDITIONS.json", out); } -void emit_add_sub() +void emit_add_sub_c() { int id = 0; json_t *out = json_array(); int count = 0; - int total = n_test_values * n_test_values * 2; + int total = n_test_values * n_test_values * 4 * 2; time_t start = time(NULL); - printf("ADD/SUB instructions\n"); - for(int group=0; group<2; group++) { - uint16_t instr = (6 << 12 /* instr */) | (group << 15 /* ADD/SUB */) | (1 << 6 /* src=R1 */); + printf("ADD/SUB/ADC/SBC instructions\n"); + for(int group=0; group<4; group++) { + uint16_t instr = 0; + int word = group & 1; + + if (group == 0 || group == 1) + instr = (6 << 12 /* instr */) | (word << 15 /* ADD/SUB */) | (1 << 6 /* src=R1 */); + else if (group == 2) + instr = (055 << 6 /* instr */) | (word << 15 /* ADCb/ADCw */) | (1 << 6 /* src=R1 */); + else if (group == 3) + instr = (056 << 6 /* instr */) | (word << 15 /* SBCb/SBCw */) | (1 << 6 /* src=R1 */); for(int v1=0; v1