diff --git a/I7000/i701_cpu.c b/I7000/i701_cpu.c index b075dd0..2290e67 100644 --- a/I7000/i701_cpu.c +++ b/I7000/i701_cpu.c @@ -764,6 +764,9 @@ store: t_stat cpu_reset(DEVICE * dptr) { + extern void sys_init(void); + + sys_init(); AC = 0; MQ = 0; dualcore = 0; diff --git a/I7000/i701_sys.c b/I7000/i701_sys.c index 1c75b57..acdfe48 100644 --- a/I7000/i701_sys.c +++ b/I7000/i701_sys.c @@ -301,8 +301,6 @@ void sys_init(void) { sim_vm_parse_addr = &parse_addr; } -void (*sim_vm_init) (void) = &sys_init; - /* Symbolic decode Inputs: diff --git a/I7000/i7070_cpu.c b/I7000/i7070_cpu.c index 654de0c..2ae5114 100644 --- a/I7000/i7070_cpu.c +++ b/I7000/i7070_cpu.c @@ -132,7 +132,6 @@ int cycle_time = 20; /* Cycle time of 12us */ int32 hst_p = 0; /* History pointer */ int32 hst_lnt = 0; /* History length */ struct InstHistory *hst = NULL; /* History stack */ -void (*sim_vm_init) (void) = &mem_init; /* CPU data structures @@ -2775,6 +2774,12 @@ mem_init() { t_stat cpu_reset(DEVICE * dptr) { + static int initialized = 0; + + if (initialized == 0) { + initialized = 1; + mem_init(); + } AC[1] = PSIGN; AC[2] = PSIGN; diff --git a/I7000/i7080_cpu.c b/I7000/i7080_cpu.c index 50d82bc..f32b1cc 100644 --- a/I7000/i7080_cpu.c +++ b/I7000/i7080_cpu.c @@ -231,7 +231,6 @@ int32 hst_lnt = 0; /* History length */ struct InstHistory *hst = NULL; /* History stack */ extern uint32 drum_addr; extern UNIT chan_unit[]; -void (*sim_vm_init) (void) = &mem_init; /* CPU data structures @@ -3174,6 +3173,12 @@ cpu_reset(DEVICE * dptr) { int i; int n,p,h; + static int initialized; + + if (initialized == 0) { + initialized = 1; + mem_init(); + } /* Set next and previous address arrays based on CPU type */ if (CPU_MODEL == CPU_702) {