示例#1
0
t_stat tto_svc (UNIT *uptr)
{
int32 c;
t_stat r;

if (tty_buf == FIODEC_UC)                               /* upper case? */
    tty_uc = UC;
else if (tty_buf == FIODEC_LC)                          /* lower case? */
    tty_uc = 0;
else {
    c = fiodec_to_ascii[tty_buf | tty_uc];              /* translate */
    if (c && ((r = sim_putchar_s (c)) != SCPE_OK)) {    /* output; error? */
        sim_activate (uptr, uptr->wait);                /* retry */
        return ((r == SCPE_STALL)? SCPE_OK: r);
        }
    }
if (cpls & CPLS_TTO) {                                  /* completion pulse? */
    ios = 1;                                            /* restart */
    cpls = cpls & ~CPLS_TTO;
    }
iosta = iosta | IOS_TTO;                                /* set flag */
dev_req_int (tto_sbs);                                  /* req interrupt */
uptr->pos = uptr->pos + 1;
if (c == '\r') {                                        /* cr? add lf */
    sim_putchar ('\n');
    uptr->pos = uptr->pos + 1;
    }
return SCPE_OK;
}
示例#2
0
t_stat tto_svc (UNIT *uptr)
{
t_stat r;
int32 c;
static const char *red_str = "[red]\r\n";
static const char *black_str = "[black]\r\n";

if (tty_buf == FIODEC_UC)                               /* upper case? */
    tty_uc = UC;
else if (tty_buf == FIODEC_LC)                          /* lower case? */
    tty_uc = 0;
else if (((uptr->flags & UNIT_ET) != 0) &&              /* ET ribbon chg? */
    ((tty_buf == FIODEC_BLACK) || (tty_buf == FIODEC_RED)) &&
    (tty_buf != tty_ribbon)) {
    tto_puts ((tty_buf == FIODEC_RED)? red_str: black_str);
    tty_ribbon = tty_buf;
    }
else if (tty_buf == FIODEC_CR)
    tto_puts ("\r\n");
else {
    c = fiodec_to_ascii[tty_buf | tty_uc];              /* translate */
    if ((c != 0) && ((r = sim_putchar_s (c)) != SCPE_OK)) { /* output; error? */
        sim_activate (uptr, uptr->wait);                /* retry */
        return ((r == SCPE_STALL)? SCPE_OK: r);
        }
    }
if (cpls & CPLS_TTO) {                                  /* completion pulse? */
    ios = 1;                                            /* restart */
    cpls = cpls & ~CPLS_TTO;
    }
iosta = iosta | IOS_TTO;                                /* set flag */
dev_req_int (tto_sbs);                                  /* req interrupt */
uptr->pos = uptr->pos + 1;
return SCPE_OK;
}
示例#3
0
t_stat tto_write (int32 c)
{
UNIT *tuptr = &tty_unit[TTO];

c = sim_tt_outcvt (c, TT_GET_MODE (tuptr->flags) | TTUF_KSR);
tuptr->pos = tuptr->pos + 1;
if (c >= 0)
    return sim_putchar_s (c);
else return SCPE_OK;
}
示例#4
0
文件: pdp10_fe.c 项目: B-Rich/simh
t_stat feo_svc (UNIT *uptr)
{
t_stat r;

if ((r = sim_putchar_s (uptr->buf)) != SCPE_OK) {       /* output; error? */
    sim_activate (uptr, uptr->wait);                    /* try again */
    return ((r == SCPE_STALL)? SCPE_OK: r);             /* !stall? report */
    }
M[FE_CTYOUT] = 0;                                       /* clear char */
apr_flg = apr_flg | APRF_CON;                           /* interrupt KS10 */
return SCPE_OK;
}
示例#5
0
t_stat tto_out (int32 c)
{
t_stat r;

if (tty_mode & TM_PRI) {                                /* printing? */
    c = sim_tt_outcvt (c, TT_GET_MODE (tty_unit[TTO].flags));
    if (c >= 0) {                                       /* valid? */
        r = sim_putchar_s (c);                          /* output char */
        if (r != SCPE_OK)
            return r;
        tty_unit[TTO].pos = tty_unit[TTO].pos + 1;
        }
    }
return SCPE_OK;
}
示例#6
0
t_stat tto_svc (UNIT *uptr)
{
int32 c;
t_stat r;

c = sim_tt_outcvt (uptr->buf, TT_GET_MODE (uptr->flags) | TTUF_KSR);
if (c >= 0) {
    if ((r = sim_putchar_s (c)) != SCPE_OK) {           /* output; error? */
        sim_activate (uptr, uptr->wait);                /* try again */
        return ((r == SCPE_STALL)? SCPE_OK: r);         /* !stall? report */
        }
    }
dev_done = dev_done | INT_TTO;                          /* set ready */
uptr->pos = uptr->pos + 1;
return SCPE_OK;
}
示例#7
0
t_stat tto_svc (UNIT *uptr)
{
int32 c;
t_stat r;

c = sim_tt_outcvt (uptr->buf, TT_GET_MODE (uptr->flags));
if (c >= 0) {
    if ((r = sim_putchar_s (c)) != SCPE_OK) {           /* output; error? */
        sim_activate (uptr, uptr->wait);                /* try again */
        return ((r == SCPE_STALL)? SCPE_OK: r);         /* !stall? report */
        }
    }
tto_csr = tto_csr | CSR_DONE;
if (tto_csr & CSR_IE) SET_INT (TTO);
uptr->pos = uptr->pos + 1;
return SCPE_OK;
}
示例#8
0
t_stat tto_svc (UNIT *uptr)
{
    int32   c;
    t_stat  r;

    c = tto_unit.buf & 0177;
    if ((tto_unit.flags & UNIT_DASHER) && (c == 031))
        c = '\b';
    if ((r = sim_putchar_s (c)) != SCPE_OK) {               /* output; error? */
        sim_activate (uptr, uptr->wait);                    /* try again */
        return ((r == SCPE_STALL)? SCPE_OK : r);            /* !stall? report */
    }
    DEV_CLR_BUSY( INT_TTO ) ;
    DEV_SET_DONE( INT_TTO ) ;
    DEV_UPDATE_INTR ;
    ++(tto_unit.pos);
    return SCPE_OK;
}
示例#9
0
t_stat tto_svc (UNIT *uptr)
{
int32 c;
t_stat r;

if ((tto_buf & TXDB_SEL) == 0) {                        /* for console? */
    c = sim_tt_outcvt (tto_buf, TT_GET_MODE (uptr->flags));
    if (c >= 0) {
        if ((r = sim_putchar_s (c)) != SCPE_OK) {       /* output; error? */
            sim_activate (uptr, uptr->wait);            /* retry */
            return ((r == SCPE_STALL)? SCPE_OK: r);     /* !stall? report */
            }
        }
    uptr->pos = uptr->pos + 1;
    }
tto_csr = tto_csr | CSR_DONE;
if (tto_csr & CSR_IE)
    tto_int = 1;
return SCPE_OK;
}
示例#10
0
t_stat ttpo_svc (UNIT *uptr)
{
int32 c;
t_stat r;

if (TT_GET_MODE (uptr->flags) == TT_MODE_8B)            /* 8b? */
    c = pas_par (ttp_cmd, uptr->buf);                   /* apply parity */
else c = sim_tt_outcvt (uptr->buf, TT_GET_MODE (uptr->flags));
if (c >= 0) {
    if ((r = sim_putchar_s (c)) != SCPE_OK) {           /* output; error? */
        sim_activate (uptr, uptr->wait);                /* try again */
        return ((r == SCPE_STALL)? SCPE_OK: r);
        }
    }
ttp_sta = ttp_sta & ~STA_BSY;                           /* not busy */
if (ttp_tarm)                                           /* set intr */
    SET_INT (v_TTP + 1);
uptr->pos = uptr->pos + 1;                              /* incr count */
return SCPE_OK;
}
示例#11
0
文件: sds_stddev.c 项目: dsphinx/simh
t_stat tto_svc (UNIT *uptr)
{
int32 asc;
t_stat r;

if (uptr->buf == TT_CR)                                 /* control chars? */
    asc = '\r';
else if (uptr->buf == TT_BS)
    asc = '\b';
else if (uptr->buf == TT_TB)
    asc = '\t';
else asc = sds_to_ascii[uptr->buf];                     /* translate */
if ((r = sim_putchar_s (asc)) != SCPE_OK) {             /* output; error? */
    sim_activate (uptr, uptr->wait);                    /* retry */
    return ((r == SCPE_STALL)? SCPE_OK: r);             /* !stall? report */
    }
uptr->pos = uptr->pos + 1;                              /* inc position */
chan_set_ordy (tto_dib.chan);                           /* tto rdy */
if (asc == '\r') {                                      /* CR? */
    sim_putchar ('\n');                                 /* add lf */
    uptr->pos = uptr->pos + 1;                          /* inc position */
    }
return SCPE_OK;
}
示例#12
0
t_stat tto_svc (UNIT *uptr)
{
int32 c = uptr->buf;

#ifdef CYR_CTLN_CTLO
c &= 0177;
if (c == ('N' & 037)) {
    tto_charconv = 1;
    c = -1;
} else if (c == ('O' & 037)) {
    tto_charconv = 0;
    c = -1;
} else if (tto_charconv && c >= '@') {
#ifdef _WIN32
    static uint8 tab[0100] = {
#if 0
        /* Codepage 1251 */
        0376, 0340, 0341, 0366, 0344, 0345, 0364, 0343, /* @ABCDEFG */
        0365, 0350, 0351, 0352, 0353, 0354, 0355, 0356, /* HIJKLMNO */
        0357, 0377, 0360, 0361, 0362, 0363, 0346, 0342, /* PQRSTUVW */
        0374, 0373, 0347, 0370, 0375, 0371, 0367, 0372, /* XYZ[\]^_ */
        0336, 0300, 0301, 0326, 0304, 0305, 0324, 0303, /* `abcdefg */
        0325, 0310, 0311, 0312, 0313, 0314, 0315, 0316, /* hijklmno */
        0317, 0337, 0320, 0321, 0322, 0323, 0306, 0302, /* pqrstuvw */
        0334, 0333, 0307, 0330, 0335, 0331, 0327, 0332, /* xyz{|}~  */
#else
        /* Codepage 866 */
        0356, 0240, 0241, 0346, 0244, 0245, 0344, 0243, /* @ABCDEFG */
        0345, 0250, 0251, 0252, 0253, 0254, 0255, 0256, /* HIJKLMNO */
        0257, 0357, 0340, 0341, 0342, 0343, 0246, 0242, /* PQRSTUVW */
        0354, 0353, 0247, 0350, 0355, 0351, 0347, 0352, /* XYZ[\]^_ */
        0236, 0200, 0201, 0226, 0204, 0205, 0224, 0203, /* `abcdefg */
        0225, 0210, 0211, 0212, 0213, 0214, 0215, 0216, /* hijklmno */
        0217, 0237, 0220, 0221, 0222, 0223, 0206, 0202, /* pqrstuvw */
        0234, 0233, 0207, 0230, 0235, 0231, 0227, 0232, /* xyz{|}~  */
#endif
        };
    c = tab [c - '@'];
#else /* _WIN32 */
    /* UTF-8 */
    static const char *tab[0100] = {
        "ю", "а", "б", "ц", "д", "е", "ф", "г",         /* @ABCDEFG */
        "х", "и", "й", "к", "л", "м", "н", "о",         /* HIJKLMNO */
        "п", "я", "р", "с", "т", "у", "ж", "в",         /* PQRSTUVW */
        "ь", "ы", "з", "ш", "э", "щ", "ч", "ъ",         /* XYZ[\]^_ */
        "Ю", "А", "Б", "Ц", "Д", "Е", "Ф", "Г",         /* `abcdefg */
        "Х", "И", "Й", "К", "Л", "М", "Н", "О",         /* hijklmno */
        "П", "Я", "Р", "С", "Т", "У", "Ж", "В",         /* pqrstuvw */
        "Ь", "Ы", "З", "Ш", "Э", "Щ", "Ч", "Ъ",         /* xyz{|}~  */
        };
    const char *str = tab[c-'@'];
    t_stat r = sim_putchar_s (str[0]);
    if (r != SCPE_OK) {                             /* output; error? */
        sim_activate (uptr, uptr->wait);            /* try again */
        return ((r == SCPE_STALL)? SCPE_OK: r);     /* !stall? report */
        }
    for (c=1; str[c]; c++)
        sim_putchar (str[c]);
    c = -1;
#endif /* _WIN32 */
    }
#else /* CYR_CTLN_CTLO */
c = sim_tt_outcvt (c, TT_GET_MODE (uptr->flags));
#endif /* CYR_CTLN_CTLO */

if (c >= 0) {
    t_stat r = sim_putchar_s (c);
    if (r != SCPE_OK) {                             /* output; error? */
        sim_activate (uptr, uptr->wait);            /* try again */
        return ((r == SCPE_STALL)? SCPE_OK: r);     /* !stall? report */
        }
    }
tto_csr = tto_csr | CSR_DONE;
if (tto_csr & CSR_IE)
    SET_INT (TTO);
uptr->pos = uptr->pos + 1;
return SCPE_OK;
}