From 5d779942d93cc25358e09e6032cbef5345a8dc71 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 9 Feb 2023 15:16:13 -1000 Subject: [PATCH] VAXen without console ROMs: Issue meaningful messages for bad boot arguments --- VAX/vax730_sys.c | 19 +++++++------------ VAX/vax750_cmi.c | 32 +++++++++++++++----------------- VAX/vax780_sbi.c | 21 ++++++++------------- VAX/vax820_bi.c | 25 +++++++++++-------------- VAX/vax860_abus.c | 17 ++++++----------- 5 files changed, 47 insertions(+), 67 deletions(-) diff --git a/VAX/vax730_sys.c b/VAX/vax730_sys.c index 04e72ecf..aa4b0579 100644 --- a/VAX/vax730_sys.c +++ b/VAX/vax730_sys.c @@ -467,13 +467,8 @@ t_stat r; if ((ptr = get_sim_sw (ptr)) == NULL) /* get switches */ return SCPE_INVSW; r = vax730_boot_parse (flag, ptr); /* parse the boot cmd */ -if (r != SCPE_OK) { /* error? */ - if (r >= SCPE_BASE) { /* message available? */ - sim_printf ("%s\n", sim_error_text (r)); - r |= SCPE_NOMESSAGE; - } +if (r != SCPE_OK) /* error? */ return r; - } strncpy (cpu_boot_cmd, ptr, CBUFSIZE-1); /* save for reboot */ return run_cmd (flag, "CPU"); } @@ -493,7 +488,7 @@ uint32 ba; t_stat r; if (!ptr || !*ptr) - return SCPE_2FARG; + return sim_messagef (SCPE_2FARG, "Missing boot device/unit specifier\n"); regptr = get_glyph (ptr, gbuf, 0); /* get glyph */ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ regptr = strchr (ptr, '/'); /* locate orig */ @@ -501,7 +496,7 @@ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ } dptr = find_unit (gbuf, &uptr); /* find device */ if ((dptr == NULL) || (uptr == NULL)) - return SCPE_ARG; + return sim_messagef (SCPE_NXUN, "Non existant Device or Unit: %s\n", gbuf); dibp = (DIB *) dptr->ctxt; /* get DIB */ if (dibp == NULL) ba = 0; @@ -516,17 +511,17 @@ if ((strncmp (regptr, "/R5:", 4) == 0) || (strncmp (regptr, "/r5=", 4) == 0)) { r5v = (int32) get_uint (regptr + 4, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 4); } else if (*regptr == '/') { r5v = (int32) get_uint (regptr + 1, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 1); } else { if (*regptr != 0) - return SCPE_ARG; + return sim_messagef (SCPE_ARG, "Invalid boot argument: %s\n", regptr); } for (i = 0; boot_tab[i].name != NULL; i++) { if (strcmp (dptr->name, boot_tab[i].name) == 0) { @@ -543,7 +538,7 @@ for (i = 0; boot_tab[i].name != NULL; i++) { return SCPE_OK; } } -return SCPE_NOFNC; +return sim_messagef (SCPE_NOFNC, "Non bootable device: %s\n", gbuf); } /* Bootstrap - finish up bootstrap process */ diff --git a/VAX/vax750_cmi.c b/VAX/vax750_cmi.c index 1453a43c..4b4416e2 100644 --- a/VAX/vax750_cmi.c +++ b/VAX/vax750_cmi.c @@ -608,13 +608,8 @@ t_stat r; if ((ptr = get_sim_sw (ptr)) == NULL) /* get switches */ return SCPE_INVSW; r = vax750_boot_parse (flag, ptr); /* parse the boot cmd */ -if (r != SCPE_OK) { /* error? */ - if (r >= SCPE_BASE) { /* message available? */ - sim_printf ("%s\n", sim_error_text (r)); - r |= SCPE_NOMESSAGE; - } +if (r != SCPE_OK) /* error? */ return r; - } strncpy (cpu_boot_cmd, ptr, CBUFSIZE-1); /* save for reboot */ return run_cmd (flag, "CPU"); } @@ -632,7 +627,7 @@ UNIT *uptr; t_stat r; if (!ptr || !*ptr) - return SCPE_2FARG; + return sim_messagef (SCPE_2FARG, "Missing boot device/unit specifier\n"); if (ptr && (*ptr == '/')) { /* handle "BOOT /R5:n DEV" format */ ptr = get_glyph (ptr, rbuf, 0); /* get glyph */ regptr = rbuf; @@ -654,15 +649,18 @@ if ((strncmp (regptr, "/R5:", 4) == 0) || (strncmp (regptr, "/r5=", 4) == 0)) { r5v = (int32) get_uint (regptr + 4, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 4); } -else if (*regptr == '/') { - r5v = (int32) get_uint (regptr + 1, 16, LMASK, &r); - if (r != SCPE_OK) - return r; - } -else if (*regptr != 0) - return SCPE_ARG; +else + if (*regptr == '/') { + r5v = (int32) get_uint (regptr + 1, 16, LMASK, &r); + if (r != SCPE_OK) + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 1); + } + else { + if (*regptr != 0) + return sim_messagef (SCPE_ARG, "Invalid boot argument: %s\n", regptr); + } if (gbuf[0]) { unitno = -1; for (i = 0; boot_tab[i].devname != NULL; i++) { @@ -671,7 +669,7 @@ if (gbuf[0]) { if (memcmp (gbuf, ((char *)rom) + (0x100 * boot_tab[i].bootdev), 2)) { r = mctl_populate_rom (boot_tab[i].bootcodefile); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't load ROM file: %s\n", boot_tab[i].bootcodefile); vax750_bootdev = boot_tab[i].bootdev; } sprintf(dbuf, "%s%s", boot_tab[i].devname, gbuf + strlen(boot_tab[i].romdevalias)); @@ -743,7 +741,7 @@ else { PC = 0xFA02 + 0x100*vax750_bootdev; return SCPE_OK; } -return SCPE_NOFNC; +return sim_messagef (SCPE_NOFNC, "Non bootable device: %s\n", gbuf); } /* Bootstrap - finish up bootstrap process */ diff --git a/VAX/vax780_sbi.c b/VAX/vax780_sbi.c index 0d70e786..632838fa 100644 --- a/VAX/vax780_sbi.c +++ b/VAX/vax780_sbi.c @@ -619,13 +619,8 @@ t_stat vax780_boot (int32 flag, CONST char *ptr) t_stat r; r = vax780_boot_parse (flag, ptr); /* parse the boot cmd */ -if (r != SCPE_OK) { /* error? */ - if (r >= SCPE_BASE) { /* message available? */ - sim_printf ("%s\n", sim_error_text (r)); - r |= SCPE_NOMESSAGE; - } +if (r != SCPE_OK) /* error? */ return r; - } strncpy (cpu_boot_cmd, ptr, CBUFSIZE-1); /* save for reboot */ return run_cmd (flag, "CPU"); } @@ -645,9 +640,9 @@ DIB *dibp; t_stat r; if (!ptr || !*ptr) - return SCPE_2FARG; + return sim_messagef (SCPE_2FARG, "Missing boot device/unit specifier\n"); if ((ptr = get_sim_sw (ptr)) == NULL) /* get switches */ - return SCPE_INVSW; + return sim_messagef (SCPE_INVSW, "Invalid Switch specified\n"); regptr = get_glyph (ptr, gbuf, 0); /* get glyph */ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ regptr = strchr (ptr, '/'); /* locate orig */ @@ -655,7 +650,7 @@ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ } dptr = find_unit (gbuf, &uptr); /* find device */ if ((dptr == NULL) || (uptr == NULL)) - return SCPE_ARG; + return sim_messagef (SCPE_NXUN, "Non existant Device or Unit: %s\n", gbuf); dibp = (DIB *) dptr->ctxt; /* get DIB */ if (dibp == NULL) ba = 0; @@ -670,17 +665,17 @@ if ((strncmp (regptr, "/R5:", 4) == 0) || (strncmp (regptr, "/r5=", 4) == 0)) { r5v = (int32) get_uint (regptr + 4, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 4); } else if (*regptr == '/') { r5v = (int32) get_uint (regptr + 1, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 1); } else { if (*regptr != 0) - return SCPE_ARG; + return sim_messagef (SCPE_ARG, "Invalid boot argument: %s\n", regptr); } for (i = 0; boot_tab[i].name != NULL; i++) { if (strcmp (dptr->name, boot_tab[i].name) == 0) { @@ -699,7 +694,7 @@ for (i = 0; boot_tab[i].name != NULL; i++) { return SCPE_OK; } } -return SCPE_NOFNC; +return sim_messagef (SCPE_NOFNC, "Non bootable device: %s\n", gbuf); } /* Bootstrap - finish up bootstrap process */ diff --git a/VAX/vax820_bi.c b/VAX/vax820_bi.c index 59ab2912..d8884b13 100644 --- a/VAX/vax820_bi.c +++ b/VAX/vax820_bi.c @@ -617,13 +617,8 @@ t_stat vax820_boot (int32 flag, CONST char *ptr) t_stat r; r = vax820_boot_parse (flag, ptr); /* parse the boot cmd */ -if (r != SCPE_OK) { /* error? */ - if (r >= SCPE_BASE) { /* message available? */ - sim_printf ("%s\n", sim_error_text (r)); - r |= SCPE_NOMESSAGE; - } +if (r != SCPE_OK) /* error? */ return r; - } strncpy (cpu_boot_cmd, ptr, CBUFSIZE-1); /* save for reboot */ return run_cmd (flag, "CPU"); } @@ -640,9 +635,9 @@ DIB *dibp; t_stat r; if (!ptr || !*ptr) - return SCPE_2FARG; + return sim_messagef (SCPE_2FARG, "Missing boot device/unit specifier\n"); if ((ptr = get_sim_sw (ptr)) == NULL) /* get switches */ - return SCPE_INVSW; + return sim_messagef (SCPE_INVSW, "Invalid Switch specified\n"); regptr = get_glyph (ptr, gbuf, 0); /* get glyph */ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ regptr = strchr (ptr, '/'); /* locate orig */ @@ -650,10 +645,10 @@ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ } dptr = find_unit (gbuf, &uptr); /* find device */ if ((dptr == NULL) || (uptr == NULL)) - return SCPE_ARG; + return sim_messagef (SCPE_NXUN, "Non existant Device or Unit: %s\n", gbuf); dibp = (DIB *) dptr->ctxt; /* get DIB */ if (dibp == NULL) - return SCPE_ARG; + return sim_messagef (SCPE_NOFNC, "Non bootable device: %s\n", gbuf); unitno = (int32) (uptr - dptr->units); r5v = 0; /* coverity[NULL_RETURNS] */ @@ -663,10 +658,12 @@ if ((strncmp (regptr, "/R5:", 4) == 0) || (strncmp (regptr, "/r5=", 4) == 0)) { r5v = (int32) get_uint (regptr + 4, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 4); + } +else { + if (*regptr != 0) + return sim_messagef (SCPE_ARG, "Invalid boot argument: %s\n", regptr); } -else if (*regptr != 0) - return SCPE_ARG; for (i = 0; boot_tab[i].name != NULL; i++) { if (strcmp (dptr->name, boot_tab[i].name) == 0) { R[0] = boot_tab[i].code; @@ -678,7 +675,7 @@ for (i = 0; boot_tab[i].name != NULL; i++) { return SCPE_OK; } } -return SCPE_NOFNC; +return sim_messagef (SCPE_NOFNC, "Non bootable device: %s\n", gbuf); } /* Bootstrap - finish up bootstrap process */ diff --git a/VAX/vax860_abus.c b/VAX/vax860_abus.c index ecc7526b..d0be2711 100644 --- a/VAX/vax860_abus.c +++ b/VAX/vax860_abus.c @@ -685,13 +685,8 @@ t_stat r; if ((ptr = get_sim_sw (ptr)) == NULL) /* get switches */ return SCPE_INVSW; r = vax860_boot_parse (flag, ptr); /* parse the boot cmd */ -if (r != SCPE_OK) { /* error? */ - if (r >= SCPE_BASE) { /* message available? */ - sim_printf ("%s\n", sim_error_text (r)); - r |= SCPE_NOMESSAGE; - } +if (r != SCPE_OK) /* error? */ return r; - } strncpy (cpu_boot_cmd, ptr, CBUFSIZE-1); /* save for reboot */ return run_cmd (flag, "CPU"); } @@ -711,7 +706,7 @@ uint32 ba; t_stat r; if (!ptr || !*ptr) - return SCPE_2FARG; + return sim_messagef (SCPE_2FARG, "Missing boot device/unit specifier\n"); regptr = get_glyph (ptr, gbuf, 0); /* get glyph */ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ regptr = strchr (ptr, '/'); /* locate orig */ @@ -719,7 +714,7 @@ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ } dptr = find_unit (gbuf, &uptr); /* find device */ if ((dptr == NULL) || (uptr == NULL)) - return SCPE_ARG; + return sim_messagef (SCPE_NXUN, "Non existant Device or Unit: %s\n", gbuf); dibp = (DIB *) dptr->ctxt; /* get DIB */ if (dibp == NULL) ba = 0; @@ -734,13 +729,13 @@ if ((strncmp (regptr, "/R5:", 4) == 0) || (strncmp (regptr, "/r5=", 4) == 0)) { r5v = (int32) get_uint (regptr + 4, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 4); } else if (*regptr == '/') { r5v = (int32) get_uint (regptr + 1, 16, LMASK, &r); if (r != SCPE_OK) - return r; + return sim_messagef (r, "Can't parse R5 value from: %s\n", regptr + 1); } else { if (*regptr != 0) @@ -763,7 +758,7 @@ for (i = 0; boot_tab[i].name != NULL; i++) { return SCPE_OK; } } -return SCPE_NOFNC; +return sim_messagef (SCPE_NOFNC, "Non bootable device: %s\n", gbuf); } /* Bootstrap - finish up bootstrap process */