PDP11, PDP8: Allow console input to configure parity and KSR mode
This commit is contained in:
parent
da602f5f77
commit
0045601823
4 changed files with 108 additions and 25 deletions
|
@ -95,6 +95,7 @@ t_stat tto_wr (int32 data, int32 PA, int32 access);
|
|||
t_stat tto_svc (UNIT *uptr);
|
||||
t_stat tto_reset (DEVICE *dptr);
|
||||
t_stat tty_set_mode (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
t_stat tty_set_parity (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
t_stat clk_rd (int32 *data, int32 PA, int32 access);
|
||||
t_stat clk_wr (int32 data, int32 PA, int32 access);
|
||||
t_stat clk_svc (UNIT *uptr);
|
||||
|
@ -115,7 +116,7 @@ DIB tti_dib = {
|
|||
1, IVCL (TTI), VEC_TTI, { NULL }
|
||||
};
|
||||
|
||||
UNIT tti_unit = { UDATA (&tti_svc, UNIT_IDLE, 0), TMLN_SPD_9600_BPS };
|
||||
UNIT tti_unit = { UDATA (&tti_svc, UNIT_IDLE|TT_MODE_7P, 0), TMLN_SPD_9600_BPS };
|
||||
|
||||
REG tti_reg[] = {
|
||||
{ HRDATAD (BUF, tti_unit.buf, 8, "last data item processed") },
|
||||
|
@ -130,10 +131,16 @@ REG tti_reg[] = {
|
|||
};
|
||||
|
||||
MTAB tti_mod[] = {
|
||||
{ TT_MODE, TT_MODE_UC, "UC", "UC", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7B, "7b", "7B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_8B, "8b", "8B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7P, "7b", NULL, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_KSR, NULL, "KSR", &tty_set_mode, NULL, NULL, "KSR teletype mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_KSR, NULL, "KSR", &tty_set_mode, NULL, NULL, "Upper Case mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7B, NULL, "7B", &tty_set_mode, NULL, NULL, "7 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_8B, NULL, "8B", &tty_set_mode, NULL, NULL, "8 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7P, NULL, "7P", &tty_set_mode, NULL, NULL, "7 bit mode - non printing suppressed" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_SPACE, NULL, "SPACE", &tty_set_parity, NULL, NULL, "Space Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_MARK, NULL, "MARK", &tty_set_parity, NULL, NULL, "Mark Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_EVEN, NULL, "EVEN", &tty_set_parity, NULL, NULL, "Even Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_ODD, NULL, "ODD", &tty_set_parity, NULL, NULL, "Odd Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "MODE", NULL, NULL, &sim_tt_show_modepar, NULL, "Mode and Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "ADDRESS", NULL,
|
||||
NULL, &show_addr, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "VECTOR", NULL,
|
||||
|
@ -190,10 +197,16 @@ REG tto_reg[] = {
|
|||
};
|
||||
|
||||
MTAB tto_mod[] = {
|
||||
{ TT_MODE, TT_MODE_UC, "UC", "UC", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7B, "7b", "7B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_8B, "8b", "8B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7P, "7p", "7P", &tty_set_mode },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_KSR, NULL, "KSR", &tty_set_mode, NULL, NULL, "KSR teletype mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_UC, NULL, "UC", &tty_set_mode, NULL, NULL, "Upper Case mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7B, NULL, "7B", &tty_set_mode, NULL, NULL, "7 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_8B, NULL, "8B", &tty_set_mode, NULL, NULL, "8 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7P, NULL, "7P", &tty_set_mode, NULL, NULL, "7 bit mode - non printing suppressed" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_SPACE, NULL, "SPACE", &tty_set_parity, NULL, NULL, "Space Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_MARK, NULL, "MARK", &tty_set_parity, NULL, NULL, "Mark Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_EVEN, NULL, "EVEN", &tty_set_parity, NULL, NULL, "Even Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_ODD, NULL, "ODD", &tty_set_parity, NULL, NULL, "Odd Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "MODE", NULL, NULL, &sim_tt_show_modepar, NULL, "Mode and Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "ADDRESS", NULL,
|
||||
NULL, &show_addr, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "VECTOR", NULL,
|
||||
|
@ -456,8 +469,17 @@ return SCPE_OK;
|
|||
|
||||
t_stat tty_set_mode (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
||||
{
|
||||
tti_unit.flags = (tti_unit.flags & ~TT_MODE) | val;
|
||||
tto_unit.flags = (tto_unit.flags & ~TT_MODE) | val;
|
||||
sim_tt_set_mode (&tti_unit, val, cptr, desc);
|
||||
sim_tt_set_mode (&tto_unit, val, cptr, desc);
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
t_stat tty_set_parity (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
||||
{
|
||||
sim_tt_set_parity (&tti_unit, val, cptr, desc);
|
||||
sim_tt_set_parity (&tto_unit, val, cptr, desc);
|
||||
tti_unit.flags = (tti_unit.flags & ~TT_PAR) | val;
|
||||
tto_unit.flags = (tto_unit.flags & ~TT_PAR) | val;
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@ t_stat tto_svc (UNIT *uptr);
|
|||
t_stat tti_reset (DEVICE *dptr);
|
||||
t_stat tto_reset (DEVICE *dptr);
|
||||
t_stat tty_set_mode (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
t_stat tty_set_parity (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
const char *tti_description (DEVICE *dptr);
|
||||
const char *tto_description (DEVICE *dptr);
|
||||
|
||||
|
@ -81,10 +82,15 @@ REG tti_reg[] = {
|
|||
};
|
||||
|
||||
MTAB tti_mod[] = {
|
||||
{ TT_MODE, TT_MODE_KSR, "KSR", "KSR", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7B, "7b", "7B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_8B, "8b", "8B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7P, "7b", NULL, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_KSR, NULL, "KSR", &tty_set_mode, NULL, NULL, "KSR teletype mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7B, NULL, "7B", &tty_set_mode, NULL, NULL, "7 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_8B, NULL, "8B", &tty_set_mode, NULL, NULL, "8 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7P, NULL, "7P", &tty_set_mode, NULL, NULL, "7 bit mode - non printing suppressed" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_SPACE, NULL, "SPACE", &tty_set_parity, NULL, NULL, "Space Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_MARK, NULL, "MARK", &tty_set_parity, NULL, NULL, "Mark Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_EVEN, NULL, "EVEN", &tty_set_parity, NULL, NULL, "Even Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_ODD, NULL, "ODD", &tty_set_parity, NULL, NULL, "Odd Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "MODE", NULL, NULL, &sim_tt_show_modepar, NULL, "Mode and Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "DEVNO", NULL, NULL, &show_dev, NULL },
|
||||
{ 0 }
|
||||
};
|
||||
|
@ -123,10 +129,15 @@ REG tto_reg[] = {
|
|||
};
|
||||
|
||||
MTAB tto_mod[] = {
|
||||
{ TT_MODE, TT_MODE_KSR, "KSR", "KSR", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7B, "7b", "7B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_8B, "8b", "8B", &tty_set_mode },
|
||||
{ TT_MODE, TT_MODE_7P, "7p", "7P", &tty_set_mode },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_KSR, NULL, "KSR", &tty_set_mode, NULL, NULL, "KSR teletype mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7B, NULL, "7B", &tty_set_mode, NULL, NULL, "7 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_8B, NULL, "8B", &tty_set_mode, NULL, NULL, "8 bit mode" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_MODE_7P, NULL, "7P", &tty_set_mode, NULL, NULL, "7 bit mode - non printing suppressed" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_SPACE, NULL, "SPACE", &tty_set_parity, NULL, NULL, "Space Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_MARK, NULL, "MARK", &tty_set_parity, NULL, NULL, "Mark Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_EVEN, NULL, "EVEN", &tty_set_parity, NULL, NULL, "Even Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, TT_PAR_ODD, NULL, "ODD", &tty_set_parity, NULL, NULL, "Odd Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "MODE", NULL, NULL, &sim_tt_show_modepar, NULL, "Mode and Parity" },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "DEVNO", NULL, NULL, &show_dev },
|
||||
{ 0 }
|
||||
};
|
||||
|
@ -285,8 +296,17 @@ return SCPE_OK;
|
|||
|
||||
t_stat tty_set_mode (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
||||
{
|
||||
tti_unit.flags = (tti_unit.flags & ~TT_MODE) | val;
|
||||
tto_unit.flags = (tto_unit.flags & ~TT_MODE) | val;
|
||||
sim_tt_set_mode (&tti_unit, val, cptr, desc);
|
||||
sim_tt_set_mode (&tto_unit, val, cptr, desc);
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
t_stat tty_set_parity (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
||||
{
|
||||
sim_tt_set_parity (&tti_unit, val, cptr, desc);
|
||||
sim_tt_set_parity (&tto_unit, val, cptr, desc);
|
||||
tti_unit.flags = (tti_unit.flags & ~TT_PAR) | val;
|
||||
tto_unit.flags = (tto_unit.flags & ~TT_PAR) | val;
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -2957,7 +2957,7 @@ if (md != TTUF_MODE_8B) {
|
|||
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;
|
||||
|
|
|
@ -60,7 +60,7 @@ extern "C" {
|
|||
#define TT_MODE_8B (TTUF_MODE_8B << TTUF_V_MODE)
|
||||
#define TT_MODE_UC (TTUF_MODE_UC << TTUF_V_MODE)
|
||||
#define TT_MODE_7P (TTUF_MODE_7P << TTUF_V_MODE)
|
||||
#define TT_MODE_KSR (TT_MODE_UC)
|
||||
#define TT_MODE_KSR (TT_MODE_UC|TT_PAR_MARK)
|
||||
/* 7 bit modes allow for an 8th bit parity mode */
|
||||
#define TT_PAR (TTUF_M_PAR << TTUF_V_PAR)
|
||||
#define TT_PAR_SPACE (TTUF_PAR_SPACE << TTUF_V_PAR)
|
||||
|
@ -124,6 +124,9 @@ t_stat sim_ttclose (void);
|
|||
t_bool sim_ttisatty (void);
|
||||
int32 sim_tt_inpcvt (int32 c, uint32 mode);
|
||||
int32 sim_tt_outcvt (int32 c, uint32 mode);
|
||||
t_stat sim_tt_set_mode (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
t_stat sim_tt_set_parity (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
t_stat sim_tt_show_modepar (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||
t_stat sim_tt_settabs (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||
t_stat sim_tt_showtabs (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||
t_bool sim_is_remote_console_master_line (void *lp);
|
||||
|
|
Loading…
Add table
Reference in a new issue