SCP: Clean up WEAK definition and rework deprecated references to sim_vm_init

As discussed in #794
This commit is contained in:
Mark Pizzolato 2020-01-29 12:30:25 -08:00
parent ca4b733883
commit 8a858c181d
32 changed files with 59 additions and 51 deletions

View file

@ -6159,7 +6159,10 @@ static t_stat sim_instr_mmu (void) {
static t_stat cpu_reset(DEVICE *dptr) { static t_stat cpu_reset(DEVICE *dptr) {
int32 i; int32 i;
if (sim_vm_is_subroutine_call == NULL) { /* First time reset? */
sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call; sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call;
altairz80_init();
}
AF_S = AF1_S = 0; AF_S = AF1_S = 0;
BC_S = DE_S = HL_S = 0; BC_S = DE_S = HL_S = 0;
BC1_S = DE1_S = HL1_S = 0; BC1_S = DE1_S = HL1_S = 0;
@ -6802,8 +6805,6 @@ void altairz80_init(void) {
/* altairz80_print_tables(); */ /* 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 /* 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 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 of the PC if no start address is given. If the input string ends with ROM

View file

@ -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 */ 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 */ DEVICE *sim_devices [] = { /* an array of pointers to the simulated devices */
&cpu_dev, /* CPU (must be first) */ &cpu_dev, /* CPU (must be first) */

View file

@ -1072,7 +1072,7 @@ char sim_name [] = "HP 3000"; /* the simulator name */
int32 sim_emax = 2; /* the maximum number of words in any instruction */ 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 */ DEVICE *sim_devices [] = { /* an array of pointers to the simulated devices */
&cpu_dev, /* CPU (must be first) */ &cpu_dev, /* CPU (must be first) */

View file

@ -57,6 +57,7 @@ extern int IAS_TimingRing;
extern int WriteAddr(int AR, t_int64 d, int NegZero); extern int WriteAddr(int AR, t_int64 d, int NegZero);
extern int ReadAddr(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 CONST char * DecodeOpcode(t_int64 d, int * opcode, int * DA, int * IA);
extern void vm_init(void);
/* digits contants */ /* digits contants */

View file

@ -177,6 +177,11 @@ uint16 ascii_to_hol[128] = {
void void
vm_init(void) { vm_init(void) {
int i; int i;
static int initialized = 0;
if (initialized)
return;
initialized = 1;
// Initialize vm memory to all plus zero // Initialize vm memory to all plus zero
for(i = 0; i < MAXDRUMSIZE; i++) DRUM[i] = DRUM_NegativeZeroFlag[i] = 0; for(i = 0; i < MAXDRUMSIZE; i++) DRUM[i] = DRUM_NegativeZeroFlag[i] = 0;
for(i = 0; i < 60; i++) IAS[i] = IAS_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. */ /* Load a card image file into memory. */
t_stat t_stat

View file

@ -764,6 +764,9 @@ store:
t_stat t_stat
cpu_reset(DEVICE * dptr) cpu_reset(DEVICE * dptr)
{ {
extern void sys_init(void);
sys_init();
AC = 0; AC = 0;
MQ = 0; MQ = 0;
dualcore = 0; dualcore = 0;

View file

@ -301,8 +301,6 @@ void sys_init(void) {
sim_vm_parse_addr = &parse_addr; sim_vm_parse_addr = &parse_addr;
} }
void (*sim_vm_init) (void) = &sys_init;
/* Symbolic decode /* Symbolic decode
Inputs: Inputs:

View file

@ -132,7 +132,6 @@ int cycle_time = 20; /* Cycle time of 12us */
int32 hst_p = 0; /* History pointer */ int32 hst_p = 0; /* History pointer */
int32 hst_lnt = 0; /* History length */ int32 hst_lnt = 0; /* History length */
struct InstHistory *hst = NULL; /* History stack */ struct InstHistory *hst = NULL; /* History stack */
void (*sim_vm_init) (void) = &mem_init;
/* CPU data structures /* CPU data structures
@ -2775,6 +2774,12 @@ mem_init() {
t_stat t_stat
cpu_reset(DEVICE * dptr) cpu_reset(DEVICE * dptr)
{ {
static int initialized = 0;
if (initialized == 0) {
initialized = 1;
mem_init();
}
AC[1] = PSIGN; AC[1] = PSIGN;
AC[2] = PSIGN; AC[2] = PSIGN;

View file

@ -231,7 +231,6 @@ int32 hst_lnt = 0; /* History length */
struct InstHistory *hst = NULL; /* History stack */ struct InstHistory *hst = NULL; /* History stack */
extern uint32 drum_addr; extern uint32 drum_addr;
extern UNIT chan_unit[]; extern UNIT chan_unit[];
void (*sim_vm_init) (void) = &mem_init;
/* CPU data structures /* CPU data structures
@ -3174,6 +3173,12 @@ cpu_reset(DEVICE * dptr)
{ {
int i; int i;
int n,p,h; int n,p,h;
static int initialized;
if (initialized == 0) {
initialized = 1;
mem_init();
}
/* Set next and previous address arrays based on CPU type */ /* Set next and previous address arrays based on CPU type */
if (CPU_MODEL == CPU_702) { if (CPU_MODEL == CPU_702) {

View file

@ -162,9 +162,6 @@ static void cgi_start(void);
static void cgi_stop(t_stat reason); static void cgi_stop(t_stat reason);
static int simh_status_to_stopcode (int status); 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 */ /* space to store extra simulator-specific commands */
#define MAX_EXTRA_COMMANDS 10 #define MAX_EXTRA_COMMANDS 10
CTAB x_cmds[MAX_EXTRA_COMMANDS]; CTAB x_cmds[MAX_EXTRA_COMMANDS];
@ -1317,6 +1314,7 @@ void break_simulation (t_stat stopreason)
t_stat cpu_reset (DEVICE *dptr) t_stat cpu_reset (DEVICE *dptr)
{ {
sim_init();
wait_state = 0; /* cancel wait */ wait_state = 0; /* cancel wait */
wait_lamp = TRUE; /* but keep the wait lamp lit on the GUI */ wait_lamp = TRUE; /* but keep the wait lamp lit on the GUI */

View file

@ -343,7 +343,9 @@ void cpu_finishAutoload() {
/* CPU reset */ /* CPU reset */
t_stat cpu_reset (DEVICE *dptr) { 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_types = SWMASK('E')|SWMASK('R')|SWMASK('W');
sim_brk_dflt = SWMASK('E'); sim_brk_dflt = SWMASK('E');

View file

@ -34,7 +34,6 @@
#include <ctype.h> #include <ctype.h>
t_stat parse_sym_m (char *cptr, t_value *val, int32 sw); 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_exstack(int32 arg, CONST char *buf);
static t_stat pdq3_cmd_exmscw(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); static t_stat pdq3_cmd_extib(int32 arg, CONST char *buf);
@ -94,8 +93,6 @@ CTAB pdq3_cmds[] = {
{ NULL, NULL, 0, NULL } { NULL, NULL, 0, NULL }
}; };
WEAK void (*sim_vm_init)(void) = &pdq3_vm_init;
/* Loader proper */ /* Loader proper */
t_stat sim_load (FILE *fi, CONST char *cptr, CONST char *fnam, int flag) t_stat sim_load (FILE *fi, CONST char *cptr, CONST char *fnam, int flag)
{ {

View file

@ -31,7 +31,6 @@
#include <ctype.h> #include <ctype.h>
static t_bool symtrace = TRUE; static t_bool symtrace = TRUE;
static void m68k_sim_init(void);
static t_stat hdump_cmd(int32 arg, CONST char* buf); static t_stat hdump_cmd(int32 arg, CONST char* buf);
static t_stat symset_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); static t_stat symclr_cmd(int32 arg, CONST char* buf);
@ -56,8 +55,6 @@ static CTAB m68k_sim_cmds[] = {
{0,0,0,0} {0,0,0,0}
}; };
WEAK void (*sim_vm_init)(void) = &m68k_sim_init;
typedef struct _symhash { typedef struct _symhash {
struct _symhash* nnext; struct _symhash* nnext;
struct _symhash* vnext; struct _symhash* vnext;
@ -87,7 +84,7 @@ static void sym_clearall(void)
return; return;
} }
static void m68k_sim_init(void) void m68k_sim_init(void)
{ {
int i; int i;
sim_vm_cmd = m68k_sim_cmds; sim_vm_cmd = m68k_sim_cmds;

View file

@ -130,6 +130,10 @@ static void sage_trapcallback(DEVICE* dptr,int trapnum)
static t_stat sagecpu_reset(DEVICE* dptr) static t_stat sagecpu_reset(DEVICE* dptr)
{ {
t_stat rc; t_stat rc;
extern void m68k_sim_init(void);
m68k_sim_init();
/* set CPU pointers */ /* set CPU pointers */
m68kcpu_dev = &sagecpu_dev; m68kcpu_dev = &sagecpu_dev;

View file

@ -34,8 +34,6 @@ void vax_init(void)
sim_savename = "InfoServer 1000"; sim_savename = "InfoServer 1000";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

View file

@ -34,8 +34,6 @@ void vax_init(void)
sim_savename = "MicroVAX 2000 (KA410)"; sim_savename = "MicroVAX 2000 (KA410)";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

View file

@ -58,8 +58,6 @@ sim_savename = "VAXstation 3100 M38 (KA42-B)";
#endif #endif
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

View file

@ -34,8 +34,6 @@ void vax_init(void)
sim_savename = "VAXstation 3100 M76 (KA43-A)"; sim_savename = "VAXstation 3100 M76 (KA43-A)";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

View file

@ -46,8 +46,6 @@ sim_savename = "VAXstation 4000-VLC (KA48)";
#endif #endif
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

View file

@ -36,8 +36,6 @@ void vax_init(void)
sim_savename = "MicroVAX I (KA610)"; sim_savename = "MicroVAX I (KA610)";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE mctl_dev; extern DEVICE mctl_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;

View file

@ -45,8 +45,6 @@ sim_savename = "MicroVAX II (KA630)";
} }
#endif #endif
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

View file

@ -31,6 +31,11 @@
char sim_name[] = "VAX 11/730"; char sim_name[] = "VAX 11/730";
void vax_init(void)
{
sim_savename = "VAX730";
}
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE sysb_dev; extern DEVICE sysb_dev;

View file

@ -31,6 +31,11 @@
char sim_name[] = "VAX 11/750"; char sim_name[] = "VAX 11/750";
void vax_init(void)
{
sim_savename = "VAX750";
}
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE cmi_dev; extern DEVICE cmi_dev;

View file

@ -36,8 +36,6 @@ void vax_init(void)
sim_savename = "VAX780"; sim_savename = "VAX780";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE sbi_dev; extern DEVICE sbi_dev;

View file

@ -34,8 +34,6 @@ void vax_init(void)
sim_savename = "VAX820"; sim_savename = "VAX820";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE bi_dev; extern DEVICE bi_dev;

View file

@ -36,8 +36,6 @@ void vax_init(void)
sim_savename = "VAX 8600"; sim_savename = "VAX 8600";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE abus_dev; extern DEVICE abus_dev;

View file

@ -3315,6 +3315,7 @@ ASTLVL = 4;
mapen = 0; mapen = 0;
FLUSH_ISTR; /* init I-stream */ FLUSH_ISTR; /* init I-stream */
if (M == NULL) { /* first time init? */ if (M == NULL) { /* first time init? */
vax_init();
sim_brk_types = sim_brk_dflt = SWMASK ('E'); sim_brk_types = sim_brk_dflt = SWMASK ('E');
sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call; sim_vm_is_subroutine_call = cpu_is_pc_a_subroutine_call;
sim_clock_precalibrate_commands = vax_clock_precalibrate_commands; sim_clock_precalibrate_commands = vax_clock_precalibrate_commands;

View file

@ -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_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_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 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 const uint32 byte_mask[33];
extern int32 autcon_enb; /* autoconfig enable */ extern int32 autcon_enb; /* autoconfig enable */
extern int32 int_req[IPL_HLVL]; /* intr, IPL 14-17 */ extern int32 int_req[IPL_HLVL]; /* intr, IPL 14-17 */

View file

@ -37,8 +37,6 @@ void vax_init(void)
sim_savename = "VAX"; sim_savename = "VAX";
} }
WEAK void (*sim_vm_init) (void) = &vax_init;
extern DEVICE cpu_dev; extern DEVICE cpu_dev;
extern DEVICE tlb_dev; extern DEVICE tlb_dev;
extern DEVICE rom_dev; extern DEVICE rom_dev;

Binary file not shown.

2
scp.h
View file

@ -417,7 +417,7 @@ extern t_stat parse_sym (CONST char *cptr, t_addr addr, UNIT *uptr, t_value *val
/* The per-simulator init routine is a weak global that defaults to NULL /* The per-simulator init routine is a weak global that defaults to NULL
The other per-simulator pointers can be overrriden by the init routine */ The other per-simulator pointers can be overrriden by the init routine */
WEAK extern void (*sim_vm_init) (void); extern void (*sim_vm_init) (void);
extern char *(*sim_vm_read) (char *ptr, int32 size, FILE *stream); extern char *(*sim_vm_read) (char *ptr, int32 size, FILE *stream);
extern void (*sim_vm_post) (t_bool from_scp); extern void (*sim_vm_post) (t_bool from_scp);
extern CTAB *sim_vm_cmd; extern CTAB *sim_vm_cmd;

View file

@ -322,12 +322,16 @@ typedef uint32 t_addr;
#define WEAK __attribute__((weak)) #define WEAK __attribute__((weak))
#elif defined(_MSC_VER) #elif defined(_MSC_VER)
#define WEAK __declspec(selectany) #define WEAK __declspec(selectany)
#else #else /* !defined(__GNUC__) && !defined(_MSC_VER) */
#define WEAK extern
#endif
#else
#define WEAK #define WEAK
#endif #endif /* __GNUC__ */
#else /* !defined(__cplusplus) */
#if defined(__GNUC__)
#define WEAK __attribute__((common))
#else /* !defined(__GNUC__) */
#define WEAK
#endif /* defined(__GNUC__) */
#endif /* defined(__cplusplus) */
/* System independent definitions */ /* System independent definitions */