From c54a66edeb0a9f4ad22c0baf4feac9e8d9fef7c9 Mon Sep 17 00:00:00 2001 From: Folkert van Heusden Date: Tue, 15 Apr 2025 09:18:22 +0200 Subject: [PATCH] numerous enhancements --- PDP11/pdp11_cpu.c | 17 +- PDP11/test.c | 410 +++++++++++++++++++++++++++++----------------- 2 files changed, 269 insertions(+), 158 deletions(-) diff --git a/PDP11/pdp11_cpu.c b/PDP11/pdp11_cpu.c index d783d59c..74632cb8 100644 --- a/PDP11/pdp11_cpu.c +++ b/PDP11/pdp11_cpu.c @@ -285,9 +285,10 @@ struct __mem_writes { } *mem_writes; int n_mem_writes = 0; +#define MAX_N_MEM_WRITES 512 void init_mem_writes() { - mem_writes = (struct __mem_writes *)malloc(sizeof(struct __mem_writes) * 256); + mem_writes = (struct __mem_writes *)malloc(sizeof(struct __mem_writes) * MAX_N_MEM_WRITES); } void put_mem_write(uint8_t data, int32_t pa) @@ -302,9 +303,17 @@ void put_mem_write(uint8_t data, int32_t pa) } } if (found == 0) { - mem_writes[n_mem_writes].addr = pa; - mem_writes[n_mem_writes].data = data; - n_mem_writes++; + if (n_mem_writes >= MAX_N_MEM_WRITES) { + printf("MEMORY WRITES OVERFLOW a=%06o v=%06o\n", pa, data); + char *a = NULL; + *a = 123; + } + else { + //printf("write to a=%06o v=%06o\n", pa, data); + mem_writes[n_mem_writes].addr = pa; + mem_writes[n_mem_writes].data = data; + n_mem_writes++; + } } } diff --git a/PDP11/test.c b/PDP11/test.c index e3932e19..91b397ba 100644 --- a/PDP11/test.c +++ b/PDP11/test.c @@ -4,6 +4,7 @@ #include #include "pdp11_defs.h" +#include "pdp11_cpumod.h" #include "sim_defs.h" //extern t_stat sim_brk_init(void); @@ -20,6 +21,10 @@ extern t_stat cpu_reset(DEVICE *dptr); extern DEVICE cpu_dev; extern int32 STACKFILE[4]; extern int32 sim_interval; +extern t_stat reason; +extern int32 MMR1; +extern int32 MMR2; +extern CPUTAB cpu_tab[]; struct __mem_writes { int32_t addr; @@ -71,21 +76,8 @@ void generate_test_values() test_values[n_test_values++] = 65535; } -json_t *generate_test(int *const id, struct mem_t *mem, size_t n_mem, int run_n_instructions) +void put_mem(json_t *memory_i, struct mem_t *mem, int n_mem) { - json_t *before = json_object(); - - json_object_set(before, "PC", json_integer(saved_PC)); - - json_object_set(before, "run-n-instructions", json_integer(run_n_instructions)); - - 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> 8)); json_array_append_new(memory_i, put_mem_i_1); } +} +json_t *generate_test(int *const id, struct mem_t *mem, size_t n_mem, int run_n_instructions, struct mem_t *setup_mem, int n_setup_mem) +{ + json_t *before = json_object(); + + json_object_set(before, "PC", json_integer(saved_PC)); + + json_object_set(before, "run-n-instructions", json_integer(run_n_instructions)); + + 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_object_set(before, "mmr1", json_integer(MMR1)); + json_object_set(before, "mmr2", json_integer(MMR2)); + + json_t *memory_i = json_array(); + put_mem(memory_i, mem, n_mem); + if (setup_mem) + put_mem(memory_i, setup_mem, n_setup_mem); json_object_set(before, "memory", memory_i); for(int k=0; k<6; k++) { @@ -144,6 +157,9 @@ json_t *generate_test(int *const id, struct mem_t *mem, size_t n_mem, int run_n_ json_object_set(after, "stack-2", json_integer(STACKFILE[2])); json_object_set(after, "stack-3", json_integer(STACKFILE[3])); + json_object_set(after, "mmr1", json_integer(MMR1)); + json_object_set(after, "mmr2", json_integer(MMR2)); + json_t *memory_o = json_array(); for(int i=0; i