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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }