SCP: Added extended radix options (-2, -8, -10 and -16) for EXAMINE and DEPOSIT

This commit is contained in:
Mark Pizzolato 2017-08-25 15:48:11 -07:00
parent 8fcddf9261
commit 245818d348
3 changed files with 29 additions and 9 deletions

Binary file not shown.

37
scp.c
View file

@ -314,6 +314,7 @@
if (sim_switches & SWMASK ('O')) val = 8; \ if (sim_switches & SWMASK ('O')) val = 8; \
else if (sim_switches & SWMASK ('D')) val = 10; \ else if (sim_switches & SWMASK ('D')) val = 10; \
else if (sim_switches & SWMASK ('H')) val = 16; \ else if (sim_switches & SWMASK ('H')) val = 16; \
else if (sim_sw_radix) val = sim_sw_radix; \
else val = dft; else val = dft;
/* Asynch I/O support */ /* Asynch I/O support */
@ -522,6 +523,7 @@ DEVICE *sim_dflt_dev = NULL;
UNIT *sim_clock_queue = QUEUE_LIST_END; UNIT *sim_clock_queue = QUEUE_LIST_END;
int32 sim_interval = 0; int32 sim_interval = 0;
int32 sim_switches = 0; int32 sim_switches = 0;
int32 sim_sw_radix = 0;
FILE *sim_ofile = NULL; FILE *sim_ofile = NULL;
TMLN *sim_oline = NULL; TMLN *sim_oline = NULL;
MEMFILE *sim_mfile = NULL; MEMFILE *sim_mfile = NULL;
@ -779,9 +781,10 @@ static const char simh_help[] =
"++-a display as ASCII\n" "++-a display as ASCII\n"
"++-c display as character string\n" "++-c display as character string\n"
"++-m display as instruction mnemonics\n" "++-m display as instruction mnemonics\n"
"++-o display as octal\n" "++-o or -8 display as octal\n"
"++-d display as decimal\n" "++-d or -10 display as decimal\n"
"++-h display as hexadecimal\n\n" "++-h or -16 display as hexadecimal\n"
"++-2 display as binary\n\n"
" The simulators typically accept symbolic input (see documentation with each\n" " The simulators typically accept symbolic input (see documentation with each\n"
" simulator).\n\n" " simulator).\n\n"
"3Examples\n" "3Examples\n"
@ -8739,6 +8742,14 @@ int32 sw;
if (*cptr != '-') if (*cptr != '-')
return 0; return 0;
sw = 0; sw = 0;
if (sim_isdigit(cptr[1])) {
char *end;
long val = strtol (1+cptr, &end, 10);
if (*end != 0)
return -1;
return (int32)(SIM_SW_NUM | (val));
}
for (cptr++; (sim_isspace (*cptr) == 0) && (*cptr != 0); cptr++) { for (cptr++; (sim_isspace (*cptr) == 0) && (*cptr != 0); cptr++) {
if (sim_isalpha (*cptr) == 0) if (sim_isalpha (*cptr) == 0)
return -1; return -1;
@ -8764,8 +8775,11 @@ char gbuf[CBUFSIZE];
while (*cptr == '-') { /* while switches */ while (*cptr == '-') { /* while switches */
cptr = get_glyph (cptr, gbuf, 0); /* get switch glyph */ cptr = get_glyph (cptr, gbuf, 0); /* get switch glyph */
lsw = get_switches (gbuf); /* parse */ lsw = get_switches (gbuf); /* parse */
if (lsw <= 0) /* invalid? */ if (lsw <= 0) { /* invalid or numeric? */
return NULL; if ((lsw == -1) || (lsw == 0))
return NULL;
sim_sw_radix = lsw & ~SIM_SW_NUM; /* set radix */
}
sim_switches = sim_switches | lsw; /* accumulate */ sim_switches = sim_switches | lsw; /* accumulate */
} }
return cptr; return cptr;
@ -8790,6 +8804,7 @@ DEVICE *tdptr;
UNIT *tuptr; UNIT *tuptr;
sim_switches = 0; /* no switches */ sim_switches = 0; /* no switches */
sim_sw_radix = 0; /* no radix override */
sim_ofile = NULL; /* no output file */ sim_ofile = NULL; /* no output file */
sim_schrptr = NULL; /* no search */ sim_schrptr = NULL; /* no search */
sim_schaptr = NULL; /* no search */ sim_schaptr = NULL; /* no search */
@ -8828,11 +8843,15 @@ while (*cptr) { /* loop through modifier
} }
cptr = get_glyph (cptr, gbuf, 0); cptr = get_glyph (cptr, gbuf, 0);
if ((t = get_switches (gbuf)) != 0) { /* try for switches */ if ((t = get_switches (gbuf)) != 0) { /* try for switches */
if (t < 0) { /* err if bad switch */ if (t < 0) { /* if bad switch or numeric */
*st = SCPE_INVSW; if (t == -1) { /* err if bad switch */
return NULL; *st = SCPE_INVSW;
return NULL;
}
sim_sw_radix = t & ~SIM_SW_NUM; /* set radix */
} }
sim_switches = sim_switches | t; /* or in new switches */ else
sim_switches = sim_switches | t; /* or in new switches */
} }
else if ((opt & CMD_OPT_SCH) && /* if allowed, */ else if ((opt & CMD_OPT_SCH) && /* if allowed, */
get_rsearch (gbuf, sim_dfdev->dradix, &sim_stabr)) { /* try for search */ get_rsearch (gbuf, sim_dfdev->dradix, &sim_stabr)) { /* try for search */

View file

@ -325,6 +325,7 @@ typedef uint32 t_addr;
#define SIM_SW_REG (1u << 28) /* register value */ #define SIM_SW_REG (1u << 28) /* register value */
#define SIM_SW_STOP (1u << 29) /* stop message */ #define SIM_SW_STOP (1u << 29) /* stop message */
#define SIM_SW_SHUT (1u << 30) /* shutdown */ #define SIM_SW_SHUT (1u << 30) /* shutdown */
#define SIM_SW_NUM (1u << 31) /* Numeric Switch */
/* Simulator status codes /* Simulator status codes