From 8a858c181d109956ee36552448f467ab16ad69b3 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Wed, 29 Jan 2020 12:30:25 -0800 Subject: [PATCH] SCP: Clean up WEAK definition and rework deprecated references to sim_vm_init As discussed in #794 --- AltairZ80/altairz80_cpu.c | 7 ++++--- HP2100/hp2100_sys.c | 2 +- HP3000/hp3000_sys.c | 2 +- I650/i650_defs.h | 1 + I650/i650_sys.c | 7 +++++-- I7000/i701_cpu.c | 3 +++ I7000/i701_sys.c | 2 -- I7000/i7070_cpu.c | 7 ++++++- I7000/i7080_cpu.c | 7 ++++++- Ibm1130/ibm1130_cpu.c | 4 +--- PDQ-3/pdq3_cpu.c | 4 +++- PDQ-3/pdq3_sys.c | 3 --- SAGE/m68k_scp.c | 5 +---- SAGE/sage_cpu.c | 4 ++++ VAX/is1000_syslist.c | 2 -- VAX/vax410_syslist.c | 2 -- VAX/vax420_syslist.c | 2 -- VAX/vax43_syslist.c | 2 -- VAX/vax440_syslist.c | 2 -- VAX/vax610_syslist.c | 2 -- VAX/vax630_syslist.c | 2 -- VAX/vax730_syslist.c | 5 +++++ VAX/vax750_syslist.c | 5 +++++ VAX/vax780_syslist.c | 2 -- VAX/vax820_syslist.c | 2 -- VAX/vax860_syslist.c | 2 -- VAX/vax_cpu.c | 1 + VAX/vax_defs.h | 1 + VAX/vax_syslist.c | 2 -- doc/simh.doc | Bin 288768 -> 289280 bytes scp.h | 2 +- sim_defs.h | 16 ++++++++++------ 32 files changed, 59 insertions(+), 51 deletions(-) diff --git a/AltairZ80/altairz80_cpu.c b/AltairZ80/altairz80_cpu.c index ab5f724c..574202ec 100644 --- a/AltairZ80/altairz80_cpu.c +++ b/AltairZ80/altairz80_cpu.c @@ -6159,7 +6159,10 @@ static t_stat sim_instr_mmu (void) { static t_stat cpu_reset(DEVICE *dptr) { int32 i; - sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call; + if (sim_vm_is_subroutine_call == NULL) { /* First time reset? */ + sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call; + altairz80_init(); + } AF_S = AF1_S = 0; BC_S = DE_S = HL_S = 0; BC1_S = DE1_S = HL1_S = 0; @@ -6802,8 +6805,6 @@ void altairz80_init(void) { /* altairz80_print_tables(); */ } -WEAK void (*sim_vm_init) (void) = &altairz80_init; - /* This is the binary loader. The input file is considered to be a string of literal bytes with no special format. The load starts at the current value of the PC if no start address is given. If the input string ends with ROM diff --git a/HP2100/hp2100_sys.c b/HP2100/hp2100_sys.c index 18cb772a..6c73ad47 100644 --- a/HP2100/hp2100_sys.c +++ b/HP2100/hp2100_sys.c @@ -1874,7 +1874,7 @@ char sim_name [] = "HP 2100"; /* the simulator name */ int32 sim_emax = MAX_INSTR_LENGTH; /* the maximum number of words in any instruction */ -void (*sim_vm_init) (void) = &one_time_init; /* a pointer to the one-time initializer */ +WEAK void (*sim_vm_init) (void) = &one_time_init; /* a pointer to the one-time initializer */ DEVICE *sim_devices [] = { /* an array of pointers to the simulated devices */ &cpu_dev, /* CPU (must be first) */ diff --git a/HP3000/hp3000_sys.c b/HP3000/hp3000_sys.c index f0dad15b..c58a6411 100644 --- a/HP3000/hp3000_sys.c +++ b/HP3000/hp3000_sys.c @@ -1072,7 +1072,7 @@ char sim_name [] = "HP 3000"; /* the simulator name */ int32 sim_emax = 2; /* the maximum number of words in any instruction */ -void (*sim_vm_init) (void) = &one_time_init; /* a pointer to the one-time initializer */ +WEAK void (*sim_vm_init) (void) = &one_time_init; /* a pointer to the one-time initializer */ DEVICE *sim_devices [] = { /* an array of pointers to the simulated devices */ &cpu_dev, /* CPU (must be first) */ diff --git a/I650/i650_defs.h b/I650/i650_defs.h index f39e09f6..a7321b3d 100644 --- a/I650/i650_defs.h +++ b/I650/i650_defs.h @@ -57,6 +57,7 @@ extern int IAS_TimingRing; extern int WriteAddr(int AR, t_int64 d, int NegZero); extern int ReadAddr(int AR, t_int64 * d, int * NegZero); extern CONST char * DecodeOpcode(t_int64 d, int * opcode, int * DA, int * IA); +extern void vm_init(void); /* digits contants */ diff --git a/I650/i650_sys.c b/I650/i650_sys.c index 2e58b56e..d6449f9a 100644 --- a/I650/i650_sys.c +++ b/I650/i650_sys.c @@ -177,6 +177,11 @@ uint16 ascii_to_hol[128] = { void vm_init(void) { int i; + static int initialized = 0; + + if (initialized) + return; + initialized = 1; // Initialize vm memory to all plus zero for(i = 0; i < MAXDRUMSIZE; i++) DRUM[i] = DRUM_NegativeZeroFlag[i] = 0; for(i = 0; i < 60; i++) IAS[i] = IAS_NegativeZeroFlag[i] = 0; @@ -186,8 +191,6 @@ vm_init(void) { } -void (*sim_vm_init) (void) = &vm_init; - /* Load a card image file into memory. */ t_stat diff --git a/I7000/i701_cpu.c b/I7000/i701_cpu.c index b075dd0a..2290e673 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 1c75b578..acdfe48d 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 654de0c9..2ae5114c 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 50d82bce..f32b1cc8 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) { diff --git a/Ibm1130/ibm1130_cpu.c b/Ibm1130/ibm1130_cpu.c index b0378874..f407cd17 100644 --- a/Ibm1130/ibm1130_cpu.c +++ b/Ibm1130/ibm1130_cpu.c @@ -162,9 +162,6 @@ static void cgi_start(void); static void cgi_stop(t_stat reason); static int simh_status_to_stopcode (int status); -/* hook pointers from scp.c */ -void (*sim_vm_init) (void) = &sim_init; - /* space to store extra simulator-specific commands */ #define MAX_EXTRA_COMMANDS 10 CTAB x_cmds[MAX_EXTRA_COMMANDS]; @@ -1317,6 +1314,7 @@ void break_simulation (t_stat stopreason) t_stat cpu_reset (DEVICE *dptr) { + sim_init(); wait_state = 0; /* cancel wait */ wait_lamp = TRUE; /* but keep the wait lamp lit on the GUI */ diff --git a/PDQ-3/pdq3_cpu.c b/PDQ-3/pdq3_cpu.c index fdba0b49..fba2f006 100644 --- a/PDQ-3/pdq3_cpu.c +++ b/PDQ-3/pdq3_cpu.c @@ -343,7 +343,9 @@ void cpu_finishAutoload() { /* CPU reset */ t_stat cpu_reset (DEVICE *dptr) { -// sim_printf("CPU RESET\n"); + extern void pdq3_vm_init (void); + pdq3_vm_init(); + // sim_printf("CPU RESET\n"); sim_brk_types = SWMASK('E')|SWMASK('R')|SWMASK('W'); sim_brk_dflt = SWMASK('E'); diff --git a/PDQ-3/pdq3_sys.c b/PDQ-3/pdq3_sys.c index 2c2ab5bf..390c5eb8 100644 --- a/PDQ-3/pdq3_sys.c +++ b/PDQ-3/pdq3_sys.c @@ -34,7 +34,6 @@ #include t_stat parse_sym_m (char *cptr, t_value *val, int32 sw); -void pdq3_vm_init (void); static t_stat pdq3_cmd_exstack(int32 arg, CONST char *buf); static t_stat pdq3_cmd_exmscw(int32 arg, CONST char *buf); static t_stat pdq3_cmd_extib(int32 arg, CONST char *buf); @@ -94,8 +93,6 @@ CTAB pdq3_cmds[] = { { NULL, NULL, 0, NULL } }; -WEAK void (*sim_vm_init)(void) = &pdq3_vm_init; - /* Loader proper */ t_stat sim_load (FILE *fi, CONST char *cptr, CONST char *fnam, int flag) { diff --git a/SAGE/m68k_scp.c b/SAGE/m68k_scp.c index e5fd253c..54ed530e 100644 --- a/SAGE/m68k_scp.c +++ b/SAGE/m68k_scp.c @@ -31,7 +31,6 @@ #include static t_bool symtrace = TRUE; -static void m68k_sim_init(void); static t_stat hdump_cmd(int32 arg, CONST char* buf); static t_stat symset_cmd(int32 arg, CONST char* buf); static t_stat symclr_cmd(int32 arg, CONST char* buf); @@ -56,8 +55,6 @@ static CTAB m68k_sim_cmds[] = { {0,0,0,0} }; -WEAK void (*sim_vm_init)(void) = &m68k_sim_init; - typedef struct _symhash { struct _symhash* nnext; struct _symhash* vnext; @@ -87,7 +84,7 @@ static void sym_clearall(void) return; } -static void m68k_sim_init(void) +void m68k_sim_init(void) { int i; sim_vm_cmd = m68k_sim_cmds; diff --git a/SAGE/sage_cpu.c b/SAGE/sage_cpu.c index 3b3f9610..51b352f5 100644 --- a/SAGE/sage_cpu.c +++ b/SAGE/sage_cpu.c @@ -130,6 +130,10 @@ static void sage_trapcallback(DEVICE* dptr,int trapnum) static t_stat sagecpu_reset(DEVICE* dptr) { t_stat rc; + extern void m68k_sim_init(void); + + + m68k_sim_init(); /* set CPU pointers */ m68kcpu_dev = &sagecpu_dev; diff --git a/VAX/is1000_syslist.c b/VAX/is1000_syslist.c index aab4c39f..c14744a2 100644 --- a/VAX/is1000_syslist.c +++ b/VAX/is1000_syslist.c @@ -34,8 +34,6 @@ void vax_init(void) sim_savename = "InfoServer 1000"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/VAX/vax410_syslist.c b/VAX/vax410_syslist.c index 66b5381c..971a3779 100644 --- a/VAX/vax410_syslist.c +++ b/VAX/vax410_syslist.c @@ -34,8 +34,6 @@ void vax_init(void) sim_savename = "MicroVAX 2000 (KA410)"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/VAX/vax420_syslist.c b/VAX/vax420_syslist.c index c6c79007..fb64ad00 100644 --- a/VAX/vax420_syslist.c +++ b/VAX/vax420_syslist.c @@ -58,8 +58,6 @@ sim_savename = "VAXstation 3100 M38 (KA42-B)"; #endif } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/VAX/vax43_syslist.c b/VAX/vax43_syslist.c index 3a23ac39..a20c11f5 100644 --- a/VAX/vax43_syslist.c +++ b/VAX/vax43_syslist.c @@ -34,8 +34,6 @@ void vax_init(void) sim_savename = "VAXstation 3100 M76 (KA43-A)"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/VAX/vax440_syslist.c b/VAX/vax440_syslist.c index 53db6700..2eba185f 100644 --- a/VAX/vax440_syslist.c +++ b/VAX/vax440_syslist.c @@ -46,8 +46,6 @@ sim_savename = "VAXstation 4000-VLC (KA48)"; #endif } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/VAX/vax610_syslist.c b/VAX/vax610_syslist.c index e38d1ce5..ee6dfe51 100644 --- a/VAX/vax610_syslist.c +++ b/VAX/vax610_syslist.c @@ -36,8 +36,6 @@ void vax_init(void) sim_savename = "MicroVAX I (KA610)"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE mctl_dev; extern DEVICE tlb_dev; diff --git a/VAX/vax630_syslist.c b/VAX/vax630_syslist.c index 581fc7a8..a02f81d9 100644 --- a/VAX/vax630_syslist.c +++ b/VAX/vax630_syslist.c @@ -45,8 +45,6 @@ sim_savename = "MicroVAX II (KA630)"; } #endif -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/VAX/vax730_syslist.c b/VAX/vax730_syslist.c index 99c4a066..cc80141d 100644 --- a/VAX/vax730_syslist.c +++ b/VAX/vax730_syslist.c @@ -31,6 +31,11 @@ char sim_name[] = "VAX 11/730"; +void vax_init(void) +{ +sim_savename = "VAX730"; +} + extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE sysb_dev; diff --git a/VAX/vax750_syslist.c b/VAX/vax750_syslist.c index e2ac0c7b..8cb5afa0 100644 --- a/VAX/vax750_syslist.c +++ b/VAX/vax750_syslist.c @@ -31,6 +31,11 @@ char sim_name[] = "VAX 11/750"; +void vax_init(void) +{ +sim_savename = "VAX750"; +} + extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE cmi_dev; diff --git a/VAX/vax780_syslist.c b/VAX/vax780_syslist.c index 2b87a97b..45eb151d 100644 --- a/VAX/vax780_syslist.c +++ b/VAX/vax780_syslist.c @@ -36,8 +36,6 @@ void vax_init(void) sim_savename = "VAX780"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE sbi_dev; diff --git a/VAX/vax820_syslist.c b/VAX/vax820_syslist.c index 1f3d99c3..3597a8b5 100644 --- a/VAX/vax820_syslist.c +++ b/VAX/vax820_syslist.c @@ -34,8 +34,6 @@ void vax_init(void) sim_savename = "VAX820"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE bi_dev; diff --git a/VAX/vax860_syslist.c b/VAX/vax860_syslist.c index 7dcb8709..b4008856 100644 --- a/VAX/vax860_syslist.c +++ b/VAX/vax860_syslist.c @@ -36,8 +36,6 @@ void vax_init(void) sim_savename = "VAX 8600"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE abus_dev; diff --git a/VAX/vax_cpu.c b/VAX/vax_cpu.c index d3926e56..125d8475 100644 --- a/VAX/vax_cpu.c +++ b/VAX/vax_cpu.c @@ -3315,6 +3315,7 @@ ASTLVL = 4; mapen = 0; FLUSH_ISTR; /* init I-stream */ if (M == NULL) { /* first time init? */ + vax_init(); sim_brk_types = sim_brk_dflt = SWMASK ('E'); sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call; sim_clock_precalibrate_commands = vax_clock_precalibrate_commands; diff --git a/VAX/vax_defs.h b/VAX/vax_defs.h index 71910486..fbd32596 100644 --- a/VAX/vax_defs.h +++ b/VAX/vax_defs.h @@ -1035,6 +1035,7 @@ extern t_stat cpu_show_instruction_set (FILE *st, UNIT *uptr, int32 val, CONST v extern t_stat cpu_set_instruction_set (UNIT *uptr, int32 val, CONST char *cptr, void *desc); extern t_stat cpu_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr); extern t_stat cpu_model_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr); +extern void vax_init(); extern const uint32 byte_mask[33]; extern int32 autcon_enb; /* autoconfig enable */ extern int32 int_req[IPL_HLVL]; /* intr, IPL 14-17 */ diff --git a/VAX/vax_syslist.c b/VAX/vax_syslist.c index b1c17e6e..b31995e3 100644 --- a/VAX/vax_syslist.c +++ b/VAX/vax_syslist.c @@ -37,8 +37,6 @@ void vax_init(void) sim_savename = "VAX"; } -WEAK void (*sim_vm_init) (void) = &vax_init; - extern DEVICE cpu_dev; extern DEVICE tlb_dev; extern DEVICE rom_dev; diff --git a/doc/simh.doc b/doc/simh.doc index 9a0fd409ae141e5104d18b6f28c03896551364b6..2199f71973283b0ce5bc875c732216855a7beff5 100644 GIT binary patch delta 18632 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 delta 17948 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 Vs~ctwj|{I{+iG