1
0
mirror of https://github.com/simh/simh.git synced 2026-01-13 23:35:57 +00:00

VAXen without console ROMs: Issue meaningful messages for bad boot arguments

This commit is contained in:
Mark Pizzolato 2023-02-09 15:16:13 -10:00
parent 0d0d4a0525
commit 5d779942d9
5 changed files with 47 additions and 67 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */