simh-testsetgenerator/PDP11/test.c
Folkert van Heusden 51b18a7956
Some checks are pending
Build / cmake-builds (push) Waiting to run
Build / makefile (macos-latest, besm6 imlac tt2500 microvax3900 microvax1 rtvax1000 vaxstation3100m76 vaxstation4000m60) (push) Waiting to run
Build / makefile (macos-latest, id16 id32 sds lgp h316 cdc1700 swtp6800mp-a swtp6800mp-a2 tx-0 ssem b5500 sage pdq3 alpha) (push) Waiting to run
Build / makefile (macos-latest, microvax2 vax730 vax750 vax780 vax8200 vax8600 microvax2000 infoserver100 infoserver150vxt microvax3100 microvax3100e vaxstation3100m30 vaxstation3100m38) (push) Waiting to run
Build / makefile (macos-latest, microvax3100m80 vaxstation4000vlc infoserver1000 nova eclipse hp2100 hp3000 i1401 i1620 s3 altair altairz80 gri i7094) (push) Waiting to run
Build / makefile (macos-latest, pdp1 pdp4 pdp6 pdp7 pdp8 pdp9 pdp10 pdp10-ka pdp10-ki pdp10-kl pdp10-ks pdp11 pdp15 vax) (push) Waiting to run
Build / makefile (macos-latest, scelbi 3b2 i701 i704 i7010 i7070 i7080 i7090 sigma uc15 i650 sel32 intel-mds ibm1130) (push) Waiting to run
Build / makefile (ubuntu-latest, besm6 imlac tt2500 microvax3900 microvax1 rtvax1000 vaxstation3100m76 vaxstation4000m60) (push) Waiting to run
Build / makefile (ubuntu-latest, id16 id32 sds lgp h316 cdc1700 swtp6800mp-a swtp6800mp-a2 tx-0 ssem b5500 sage pdq3 alpha) (push) Waiting to run
Build / makefile (ubuntu-latest, microvax2 vax730 vax750 vax780 vax8200 vax8600 microvax2000 infoserver100 infoserver150vxt microvax3100 microvax3100e vaxstation3100m30 vaxstation3100m38) (push) Waiting to run
Build / makefile (ubuntu-latest, microvax3100m80 vaxstation4000vlc infoserver1000 nova eclipse hp2100 hp3000 i1401 i1620 s3 altair altairz80 gri i7094) (push) Waiting to run
Build / makefile (ubuntu-latest, pdp1 pdp4 pdp6 pdp7 pdp8 pdp9 pdp10 pdp10-ka pdp10-ki pdp10-kl pdp10-ks pdp11 pdp15 vax) (push) Waiting to run
Build / makefile (ubuntu-latest, scelbi 3b2 i701 i704 i7010 i7070 i7080 i7090 sigma uc15 i650 sel32 intel-mds ibm1130) (push) Waiting to run
skip invalid instructions
2025-04-03 09:24:13 +02:00

143 lines
3.9 KiB
C

#include <jansson.h>
#include <stdio.h>
#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];
void produce_validation_tests()
{
json_t *out = json_array();
uint32_t invalid[][2] = {
{ 0000007, 0000077 },
{ 0000210, 0000227 },
{ 0007000, 0007777 },
{ 0075040, 0076777 },
{ 0106400, 0106477 },
{ 0106700, 0107777 },
};
for(int i=0; i<65536; i++) {
int skip = 0;
for(int test=0; test<6; test++) {
if (i >= invalid[test][0] && i <= invalid[test][1]) {
skip = 1;
break;
}
}
if (skip)
continue;
json_t *before = json_object();
cpu_reset(&cpu_dev);
saved_PC = 0100;
json_object_set(before, "PC", json_integer(saved_PC));
STACKFILE[0] = STACKFILE[1] = STACKFILE[2] = STACKFILE[3] = 010000;
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();
json_t *put_mem_i_0 = json_object();
PWriteW(i, saved_PC);
json_object_set(put_mem_i_0, "0100", json_integer(i));
json_array_append_new(memory_i, put_mem_i_0);
json_t *put_mem_i_2 = json_object();
uint16_t data1 = rand() % 49152;
PWriteW(0102, data1);
json_object_set(put_mem_i_2, "0102", json_integer(data1));
json_array_append_new(memory_i, put_mem_i_2);
json_t *put_mem_i_4 = json_object();
uint16_t data2 = rand() % 49152;
PWriteW(0104, data2);
json_object_set(put_mem_i_4, "0104", json_integer(data2));
json_array_append_new(memory_i, put_mem_i_4);
json_object_set(before, "memory", memory_i);
for(int k=0; k<6; k++) {
char name[16];
sprintf(name, "reg-%d.%d", k, 0);
REGFILE[k][0] = rand() & 0xffff;
json_object_set(before, name, json_integer(REGFILE[k][0]));
sprintf(name, "reg-%d.%d", k, 1);
REGFILE[k][1] = rand() & 0xffff;
json_object_set(before, name, json_integer(REGFILE[k][1]));
}
json_object_set(before, "PSW", json_integer(PSW));
// do
sim_instr();
json_t *after = json_object();
json_object_set(after, "PC", json_integer(saved_PC));
for(int k=0; k<6; k++) {
char name[16];
sprintf(name, "reg-%d.%d", k, 0);
json_object_set(after, name, json_integer(REGFILE[k][0]));
sprintf(name, "reg-%d.%d", k, 1);
json_object_set(after, name, json_integer(REGFILE[k][1]));
}
json_object_set(after, "PSW", json_integer(PSW));
json_object_set(after, "stack-0", json_integer(STACKFILE[0]));
json_object_set(after, "stack-1", json_integer(STACKFILE[1]));
json_object_set(after, "stack-2", json_integer(STACKFILE[2]));
json_object_set(after, "stack-3", json_integer(STACKFILE[3]));
json_t *memory_o = json_array();
json_t *get_mem_i_0 = json_object();
json_object_set(get_mem_i_0, "0100", json_integer(PReadW(0100)));
json_array_append_new(memory_o, get_mem_i_0);
json_t *get_mem_i_2 = json_object();
json_object_set(get_mem_i_2, "0102", json_integer(PReadW(0102)));
json_array_append_new(memory_o, get_mem_i_2);
json_t *get_mem_i_4 = json_object();
json_object_set(get_mem_i_4, "0104", json_integer(PReadW(0104)));
json_array_append_new(memory_o, get_mem_i_4);
json_object_set(after, "memory", memory_o);
json_t *collection = json_object();
json_object_set(collection, "before", before);
json_object_set(collection, "after", after);
json_array_append_new(out, collection);
}
FILE *fh = fopen("testset.json", "w");
json_dumpf(out, fh, JSON_INDENT(2));
fclose(fh);
}