1
0
mirror of https://github.com/simh/simh.git synced 2026-04-15 16:11:13 +00:00

PDP11, PDP8: Allow console input to configure parity and KSR mode

This commit is contained in:
Mark Pizzolato
2020-07-24 19:05:04 -07:00
parent da602f5f77
commit 0045601823
4 changed files with 108 additions and 25 deletions

View File

@@ -2950,14 +2950,14 @@ uint32 md = mode & TTUF_M_MODE;
if (md != TTUF_MODE_8B) {
uint32 par_mode = (mode >> TTUF_W_MODE) & TTUF_M_PAR;
static int32 nibble_even_parity = 0x699600; /* bit array indicating the even parity for each index (offset by 8) */
static int32 nibble_even_parity = 0x699600; /* bit array indicating the even parity for each index (offset by 8) */
c = c & 0177;
if (md == TTUF_MODE_UC) {
if (islower (c))
c = toupper (c);
if (mode & TTUF_KSR)
c = c | 0200;
c = c | 0200; /* Force MARK parity */
}
switch (par_mode) {
case TTUF_PAR_EVEN:
@@ -2971,7 +2971,8 @@ if (md != TTUF_MODE_8B) {
break;
}
}
else c = c & 0377;
else
c = c & 0377;
return c;
}
@@ -3051,6 +3052,43 @@ fprintf (st, (any? "\n": "no tabs set\n"));
return SCPE_OK;
}
t_stat sim_tt_set_mode (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
uint32 par_mode = (TT_GET_MODE (uptr->flags) >> TTUF_W_MODE) & TTUF_M_PAR;
uptr->flags = uptr->flags & ~((TTUF_M_MODE << TTUF_V_MODE) | (TTUF_M_PAR << TTUF_V_PAR) | TTUF_KSR);
uptr->flags |= val;
if (val != TT_MODE_8B)
uptr->flags |= (par_mode << TTUF_V_PAR);
return SCPE_OK;
}
t_stat sim_tt_set_parity (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
uptr->flags = uptr->flags & ~(TTUF_M_MODE | TTUF_M_PAR);
uptr->flags |= TT_MODE_7B | val;
return SCPE_OK;
}
t_stat sim_tt_show_modepar (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
uint32 md = (TT_GET_MODE (uptr->flags) & TTUF_M_MODE);
static const char *modes[] = {"7b", "8b", "UC", "7p"};
uint32 par_mode = (TT_GET_MODE (uptr->flags) >> TTUF_W_MODE) & TTUF_M_PAR;
static const char *parity[] = {"SPACE", "MARK", "EVEN", "ODD"};
if ((md == TTUF_MODE_UC) && (par_mode == TTUF_PAR_MARK))
fprintf (st, "KSR (UC, MARK parity)");
else
fprintf (st, "%s", modes[md]);
if ((md != TTUF_MODE_8B) &&
((md != TTUF_MODE_UC) || (par_mode != TTUF_PAR_MARK))) {
if (par_mode != 0)
fprintf (st, ", %s parity", parity[par_mode]);
}
return SCPE_OK;
}
#if defined(SIM_ASYNCH_IO) && defined(SIM_ASYNCH_MUX)
extern pthread_mutex_t sim_tmxr_poll_lock;