From a750171c309d3a23c6c1ed4bb681e0ccbafca6bd Mon Sep 17 00:00:00 2001 From: Bob Supnik Date: Mon, 29 May 2017 13:34:55 -0700 Subject: [PATCH] I1620: Add deferred IO mode for slow devices The major change is the implementation of deferred IO - a more accurate implementation of the 1620's "stop in its tracks" IO model. When a device uses deferred IO, instruction execution is suspended until the IO completes successfully. Operator interruptions, errors, and so on do not return to instruction execution; this only occurs if the IO completes successfully or the command SET CPU RELEASE is given (equivalent of pressing the RELEASE button). Otherwise, the current IO operation continues to execute. Only the console typewriter and paper tape reader/punch currently implement deferred IO; there are operational issues with those devices that require more accurate modeling. The card reader/punch, line printer, and disk still execute IO "instantaneously". It's not all that hard to convert an instantaneous device to deferred operation, but there's no point in doing so (and possibly introducing new bugs) unless there's an actual operational issue. The 1620 doesn't have overlapped IO, so programs can't tell the difference, by and large. A number of other issues have been addressed as well, including the bizarre "treat RM as 0 in the Q field" required by MI-015; the treatment of non-existent indicators as always off; and various other tweaks. I've run CU01 (again), which at least gives typewriter and paper-tape IO a basic workout; and it works. I leave more detailed testing to people who know the machine better than I do. The documentation has been updated to include Tom's detailed breakdown of IO handling for all IO operations on the typewriter, paper-tape reader/punch, card reader/punch, and line printer. --- I1620/i1620_cd.c | 2 +- I1620/i1620_cpu.c | 70 ++++++++- I1620/i1620_defs.h | 12 +- I1620/i1620_pt.c | 347 +++++++++++++++++++++++---------------------- I1620/i1620_sys.c | 5 +- I1620/i1620_tty.c | 345 ++++++++++++++++++++++---------------------- doc/i1620_doc.doc | Bin 68096 -> 161280 bytes 7 files changed, 428 insertions(+), 353 deletions(-) diff --git a/I1620/i1620_cd.c b/I1620/i1620_cd.c index 4a7a3aaa..98b2e08c 100644 --- a/I1620/i1620_cd.c +++ b/I1620/i1620_cd.c @@ -433,7 +433,7 @@ switch (op) { /* decode op */ case OP_DN: /* DN punches all characters the same as WN except that a flagged - zero is punched as a hypehen (-) instead of a flagged + zero is punched as a hyphen (-) instead of a flagged zero ([). Punching begins at the P address and continues until the last digit of the storage module containing the P address has been punched. If the amount of data to be punched is an diff --git a/I1620/i1620_cpu.c b/I1620/i1620_cpu.c index 1ad0e410..26e81a26 100644 --- a/I1620/i1620_cpu.c +++ b/I1620/i1620_cpu.c @@ -26,6 +26,7 @@ This CPU module incorporates code and comments from the 1620 simulator by Geoff Kuenning, with his permission. + 26-May-17 RMS Added deferred IO mode for slow devices 20-May-17 RMS Changed to commit PC on certain stops Added SET CPU RELEASE command Undefined indicators don't throw an error (Dave Wise) @@ -82,6 +83,20 @@ it was nicknamed CADET (Can't Add, Doesn't Even Try). The Model 2 does adds in hardware and uses the add table memory for index registers. + The 1620 has no concept of overlapped IO. When an IO instruction is + issued, instruction execution is suspended until the IO is complete. + For "fast" devices, like the disk, IO is done in an instantaneous burst. + "Slow" devices have the option of going character-by-character, with + delays in between. This allows for operator intervention, such as + ^E or changing paper tapes. + + The simulated IO state for character-by-character IO is: + + cpuio_mode set if IO in progress + cpuio_opc saved IO opcode + cpuio_cnt character counter; increments + PAR P address; increments + This routine is the instruction decode routine for the IBM 1620. It is called from the simulator control program to execute instructions in simulated memory, starting at the simulated PC. @@ -135,6 +150,9 @@ uint32 idxe = 0; /* index enable */ uint32 idxb = 0; /* index band */ uint32 io_stop = 1; /* I/O stop */ uint32 ar_stop = 1; /* arith stop */ +uint32 cpuio_inp = 0; /* IO in progress */ +uint32 cpuio_opc = 0; +uint32 cpuio_cnt = 0; int32 ind_max = 16; /* iadr nest limit */ uint16 pcq[PCQ_SIZE] = { 0 }; /* PC queue */ int32 pcq_p = 0; /* PC queue ptr */ @@ -227,6 +245,9 @@ REG cpu_reg[] = { { FLDATA (WRCHK, ind[IN_WRCHK], 0) }, { FLDATA (ARSTOP, ar_stop, 0) }, { FLDATA (IOSTOP, io_stop, 0) }, + { FLDATA (IOINP, cpuio_inp, 0), REG_RO }, + { DRDATA (IOOPC, cpuio_opc, 6), REG_RO }, + { DRDATA (IOCNT, cpuio_cnt, 16), REG_RO }, { BRDATA (IND, ind, 10, 1, NUM_IND) }, { FLDATA (IAE, iae, 0) }, { FLDATA (IDXE, idxe, 0) }, @@ -349,7 +370,7 @@ const int32 op_table[100] = { 0, IF_IDX + IF_VPA + IF_VQA, /* 70: MA */ IF_EDT + IF_VPA + IF_VQA, /* MF */ - IF_EDT + IF_VPA + IF_VQA, /* MF */ + IF_EDT + IF_VPA + IF_VQA, /* TNS */ IF_EDT + IF_VPA + IF_VQA, /* TNF */ 0, 0, @@ -517,6 +538,10 @@ while (reason == SCPE_OK) { /* loop until halted */ if ((reason = sim_process_event ())) break; } + if (cpuio_inp != 0) { /* IO in progress? */ + sim_interval = sim_interval - 1; /* tick & continue */ + continue; + } if (sim_brk_summ && sim_brk_test (PC, SWMASK ('E'))) { /* breakpoint? */ reason = STOP_IBKPT; /* stop simulation */ @@ -1082,6 +1107,8 @@ for (i = 0; commit_pc[i] != 0; i++) { /* check stop code */ actual_PC = PC; /* save cur PC for RLS */ pcq_r->qptr = pcq_p; /* update pc q ptr */ upd_ind (); +if (cpuio_inp != 0) /* flag IO in progress */ + sim_printf ("\r\nIO in progress"); return reason; } @@ -2131,6 +2158,28 @@ M[d] = M[d] | sign; /* set result sign */ return SCPE_OK; } +/* Set and clear IO in progress */ + +t_stat cpuio_set_inp (uint32 op, UNIT *uptr) +{ +cpuio_inp = 1; +cpuio_opc = op; +cpuio_cnt = 0; +if (uptr != NULL) + sim_activate_abs (uptr, uptr->wait); +return SCPE_OK; +} + +t_stat cpuio_clr_inp (UNIT *uptr) +{ +cpuio_inp = 0; +cpuio_opc = 0; +cpuio_cnt = 0; +if (uptr != NULL) + sim_cancel (uptr); +return SCPE_OK; +} + /* Reset routine */ t_stat cpu_reset (DEVICE *dptr) @@ -2142,6 +2191,8 @@ PR1 = IR2 = 1; /* invalidate PR1,IR2 */ ind[0] = 0; for (i = IN_SW4 + 1; i < NUM_IND; i++) /* init indicators */ ind[i] = 0; +if (cpuio_inp != 0) /* IO in progress? */ + cpu_set_release (NULL, 0, NULL, NULL); /* clear IO */ if (cpu_unit.flags & IF_IA) /* indirect enabled? */ iae = 1; else iae = 0; @@ -2164,8 +2215,21 @@ return SCPE_OK; t_stat cpu_set_release (UNIT *uptr, int32 val, CONST char *cptr, void *desc) { -if (actual_PC == ADDR_A (saved_PC, INST_LEN)) { /* one instr ahead? */ - saved_PC = actual_PC; /* return */ +uint32 i; +DEVICE *dptr; + +if (cpuio_inp != 0) { /* IO in progress? */ + cpuio_inp = 0; + cpuio_opc = 0; + cpuio_cnt = 0; + for (i = 0; (dptr = sim_devices[i]) != NULL; i++) { + if (((dptr->flags & DEV_DEFIO) != 0) && (dptr->reset != NULL)) + dptr->reset (dptr); + } + sim_printf ("IO operation canceled\n"); + } +else if (actual_PC == ADDR_A (saved_PC, INST_LEN)) { /* one instr ahead? */ + saved_PC = actual_PC; sim_printf ("New PC = %05d\n", saved_PC); } else sim_printf ("PC unchanged\n"); diff --git a/I1620/i1620_defs.h b/I1620/i1620_defs.h index b796c4a7..f1783b01 100644 --- a/I1620/i1620_defs.h +++ b/I1620/i1620_defs.h @@ -27,6 +27,7 @@ I am grateful to Al Kossow, the Computer History Museum, and the IBM Corporate Archives for their help in gathering documentation about the IBM 1620. + 23-May-17 RMS MARCHK is indicator 8, not 18 (Dave Wise) 19-May-17 RMS Added option for Model I diagnostic mode (Dave Wise) 05-Feb-15 TFM Added definitions for flagged RM, GM, NB 22-May-10 RMS Added check for 64b definitions @@ -113,6 +114,7 @@ #define IN_SW4 4 /* sense switch 4 */ #define IN_RDCHK 6 /* read check (I/O error) */ #define IN_WRCHK 7 /* write check (I/O error) */ +#define IN_MARCHK 8 /* MAR check - diag only */ #define IN_LAST 9 /* last card was just read */ #define IN_HP 11 /* high or positive result */ #define IN_EZ 12 /* equal or zero result */ @@ -121,7 +123,6 @@ #define IN_EXPCHK 15 /* floating exponent check */ #define IN_MBREVEN 16 /* even parity check */ #define IN_MBRODD 17 /* odd parity check */ -#define IN_MARCHK 18 /* MAR check - diag only */ #define IN_ANYCHK 19 /* any of read, write, even/odd */ #define IN_PRCHK 25 /* printer check */ #define IN_IXN 30 /* IX neither */ @@ -235,6 +236,15 @@ enum opcodes { OP_BBT = 90, OP_BMK, OP_ORF, OP_ANDF, OP_CPLF, /* 90 - 99 */ OP_EORF, OP_OTD, OP_DTO }; +/* Device flags */ + +#define DEV_DEFIO (1 << (DEV_V_UF + 0)) + +/* Function declarations */ + +t_stat cpuio_set_inp (uint32 op, UNIT *uptr); +t_stat cpuio_clr_inp (UNIT *uptr); + extern const int8 cdr_to_alp[128]; extern const int8 alp_to_cdp[256]; diff --git a/I1620/i1620_pt.c b/I1620/i1620_pt.c index 35bd1632..f4b5c0ed 100644 --- a/I1620/i1620_pt.c +++ b/I1620/i1620_pt.c @@ -26,6 +26,8 @@ ptr 1621 paper tape reader ptp 1624 paper tape punch + 26-May-17 RMS Added deferred IO + 25-May-17 RMS Fixed treatment of X0C82 on RN (Tom McBride) 18-May-17 RMS Separated EOF error from other IO errors (Dave Wise) 23-Feb-15 TFM Fixed RA, RBPT to preserve flags on RM at end (Tom McBride) 09-Feb-15 TFM Fixed numerous translation problems (Tom McBride) @@ -45,17 +47,23 @@ #define PT_C 0x10 /* C */ #define PT_FD 0x7F /* deleted */ +static uint32 ptr_mode = 0; /* normal/binary */ +static uint32 ptp_mode = 0; + extern uint8 M[MAXMEMSIZE]; extern uint8 ind[NUM_IND]; extern UNIT cpu_unit; extern uint32 io_stop; +extern uint32 PAR, cpuio_opc, cpuio_cnt; +t_stat ptr_svc (UNIT *uptr); t_stat ptr_reset (DEVICE *dptr); t_stat ptr_boot (int32 unitno, DEVICE *dptr); t_stat ptr_read (uint8 *c, t_bool ignfeed); +t_stat ptp_svc (UNIT *uptr); t_stat ptp_reset (DEVICE *dptr); t_stat ptp_write (uint32 c); -t_stat ptp_num (uint32 pa, uint32 len, t_bool dump); +t_stat ptp_num (void); /* PTR data structures @@ -65,11 +73,13 @@ t_stat ptp_num (uint32 pa, uint32 len, t_bool dump); */ UNIT ptr_unit = { - UDATA (NULL, UNIT_SEQ+UNIT_ATTABLE+UNIT_ROABLE, 0) + UDATA (&ptr_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_ROABLE, 0), SERIAL_IN_WAIT }; REG ptr_reg[] = { + { FLDATA (BIN, ptr_mode, 0) }, { DRDATA (POS, ptr_unit.pos, T_ADDR_W), PV_LEFT }, + { DRDATA (TIME, ptr_unit.wait, 24), PV_LEFT }, { NULL } }; @@ -77,7 +87,8 @@ DEVICE ptr_dev = { "PTR", &ptr_unit, ptr_reg, NULL, 1, 10, 31, 1, 8, 8, NULL, NULL, &ptr_reset, - &ptr_boot, NULL, NULL + &ptr_boot, NULL, NULL, + NULL, DEV_DEFIO }; /* PTP data structures @@ -88,11 +99,13 @@ DEVICE ptr_dev = { */ UNIT ptp_unit = { - UDATA (NULL, UNIT_SEQ+UNIT_ATTABLE, 0) + UDATA (&ptp_svc, UNIT_SEQ+UNIT_ATTABLE, SERIAL_OUT_WAIT) }; REG ptp_reg[] = { + { FLDATA (BIN, ptp_mode, 0) }, { DRDATA (POS, ptp_unit.pos, T_ADDR_W), PV_LEFT }, + { DRDATA (TIME, ptp_unit.wait, 24), PV_LEFT }, { NULL } }; @@ -100,7 +113,8 @@ DEVICE ptp_dev = { "PTP", &ptp_unit, ptp_reg, NULL, 1, 10, 31, 1, 8, 8, NULL, NULL, &ptp_reset, - NULL, NULL, NULL + NULL, NULL, NULL, + NULL, DEV_DEFIO }; /* Data tables */ @@ -136,7 +150,7 @@ const int8 ptr_to_num[128] = { -1, 0x01, 0x02, -1, 0x04, -1, -1, 0x07, /* XO */ 0x08, -1, -1, 0x0B, -1, -1, -1, -1, 0x10, -1, -1, 0x03, -1, 0x05, 0x06, -1, /* XOC */ - -1, 0x09, 0x0A, -1, 0x0C, -1, -1, -1 /* X0C82 is not defined but will treat as RM (tfm) */ + -1, 0x09, 0x1A, -1, 0x0C, -1, -1, -1 /* X0C82 treated as flagged RM, RN only (tfm) */ }; /* Paper tape read (7b) to alphameric (two digits) */ @@ -206,116 +220,116 @@ const int8 alp_to_ptp[256] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -/* Paper tape reader IO routine +/* Paper tape reader IO init routine */ +t_stat ptr (uint32 op, uint32 pa, uint32 f0, uint32 f1) +{ +if ((op != OP_RN) && (op != OP_RA)) /* RN & RA only */ + return STOP_INVFNC; +if ((ptr_unit.flags & UNIT_ATT) == 0) /* catch unattached */ + return SCPE_UNATT; +ptr_mode = 0; +cpuio_set_inp (op, &ptr_unit); +return SCPE_OK; +} + +/* Binary paper tape reader IO init routine */ + +t_stat btr (uint32 op, uint32 pa, uint32 f0, uint32 f1) +{ +if (op != OP_RA) /* RA only */ + return STOP_INVFNC; +if ((ptr_unit.flags & UNIT_ATT) == 0) /* catch unattached */ + return SCPE_UNATT; +ptr_mode = 1; +cpuio_set_inp (op, &ptr_unit); +return SCPE_OK; +} + +/* Paper tape unit service + + - If over the limit, cancel IO and return error. + - If unattached, reschedule and return error. + - Transfer a digit/character. - Hard errors halt the operation and the system. - Parity errors place an invalid character in memory and set RDCHK, but the read continues until end of record. If IO stop is set, the system then halts. */ -t_stat ptr (uint32 op, uint32 pa, uint32 f0, uint32 f1) +t_stat ptr_svc (UNIT *uptr) { -uint32 i = 0; -int8 mc; +t_stat r; uint8 ptc; -t_stat r, sta; +int8 mc; -sta = SCPE_OK; -switch (op) { /* case on op */ +if (cpuio_cnt >= MEMSIZE) { /* over the limit? */ + cpuio_clr_inp (uptr); /* done */ + return STOP_RWRAP; + } +sim_activate (uptr, uptr->wait); /* sched another xfer */ +if ((uptr->flags & UNIT_ATT) == 0) /* not attached? */ + return SCPE_UNATT; + +switch (cpuio_opc) { case OP_RN: /* read numeric */ - for (i = 0; i < MEMSIZE; i++) { /* (stop runaway) */ - r = ptr_read (&ptc, TRUE); /* read frame */ - if (r != SCPE_OK) /* error? */ - return r; - if (ptc & PT_EL) { /* end record? */ - M[pa] = REC_MARK; /* store rec mark */ - return sta; /* done */ - } - mc = ptr_to_num[ptc]; /* translate char */ - if ((bad_par[ptc]) || (mc < 0)) { /* bad par. or char? */ - ind[IN_RDCHK] = 1; /* set read check */ - if (io_stop) /* set return status */ - sta = STOP_INVCHR; - M[pa] = 0; /* store zero */ - } - else M[pa] = mc; /* stor translated char */ - PP (pa); /* incr mem addr */ + r = ptr_read (&ptc, TRUE); /* read frame */ + if (r != SCPE_OK) /* error? */ + return r; + if (ptc & PT_EL) { /* end record? */ + M[PAR] = REC_MARK; /* store rec mark */ + break; } - break; + mc = ptr_to_num[ptc]; /* translate char */ + if ((bad_par[ptc]) || (mc < 0)) { /* bad par. or char? */ + ind[IN_RDCHK] = 1; /* set read check */ + mc = 0; /* store zero */ + } + M[PAR] = mc; /* store translated char */ + PP (PAR); /* incr mem addr */ + cpuio_cnt++; + return SCPE_OK; case OP_RA: /* read alphameric */ - for (i = 0; i < MEMSIZE; i = i + 2) { /* (stop runaway) */ - r = ptr_read (&ptc, TRUE); /* read frame */ - if (r != SCPE_OK) /* error? */ - return r; - if (ptc & PT_EL) { /* end record? */ - M[pa] = (M[pa] & FLAG) | REC_MARK; /* store alpha RM .. */ - M[pa - 1] = M[pa - 1] & FLAG; /* ..and preserve flags */ - return sta; /* done */ - } + r = ptr_read (&ptc, TRUE); /* read frame */ + if (r != SCPE_OK) /* error? */ + return r; + if (ptc & PT_EL) { /* end record? */ + M[PAR] = (M[PAR] & FLAG) | REC_MARK; /* store alpha RM */ + M[PAR - 1] = M[PAR - 1] & FLAG; /* and preserve flags */ + break; + } + if (ptr_mode == 0) { /* normal mode? */ mc = ptr_to_alp[ptc]; /* translate */ if (bad_par[ptc] || (mc < 0)) { /* bad par or char? */ ind[IN_RDCHK] = 1; /* set read check */ - if (io_stop) /* set return status */ - sta = STOP_INVCHR; mc = 0; /* store blank */ } - M[pa] = (M[pa] & FLAG) | (mc & DIGIT); /* store 2 digits */ - M[pa - 1] = (M[pa - 1] & FLAG) | ((mc >> 4) & DIGIT); - pa = ADDR_A (pa, 2); /* incr mem addr */ + M[PAR] = (M[PAR] & FLAG) | (mc & DIGIT); /* store 2 digits */ + M[PAR - 1] = (M[PAR - 1] & FLAG) | ((mc >> 4) & DIGIT); } - break; - - default: /* invalid function */ - return STOP_INVFNC; - } - -return STOP_RWRAP; -} - -/* Binary paper tape reader IO routine - see above for error handling */ - -t_stat btr (uint32 op, uint32 pa, uint32 f0, uint32 f1) -{ -uint32 i; -uint8 ptc; -t_stat r, sta; - -if ((cpu_unit.flags & IF_BIN) == 0) - return STOP_INVIO; - -sta = SCPE_OK; -switch (op) { /* case on op */ - - case OP_RA: /* read alphameric */ - for (i = 0; i < MEMSIZE; i = i + 2) { /* (stop runaway) */ - r = ptr_read (&ptc, FALSE); /* read frame */ - if (r != SCPE_OK) /* error? */ - return r; - if (ptc & PT_EL) { /* end record? */ - M[pa] = (M[pa] & FLAG) | REC_MARK; /* store alpha RM .. */ - M[pa - 1] = M[pa - 1] & FLAG; /* ..and preserve flags */ - return sta; /* done */ - } - if (bad_par[ptc]) { /* bad parity? */ + else { /* binary mode */ + if (bad_par[ptc]) /* bad parity? */ ind[IN_RDCHK] = 1; /* set read check */ - if (io_stop) /* set return status */ - sta = STOP_INVCHR; - } - M[pa] = (M[pa] & FLAG) | (ptc & 07); /* store 2 digits */ - M[pa - 1] = (M[pa - 1] & FLAG) | - (((ptc >> 4) & 06) | ((ptc >> 3) & 1)); - pa = ADDR_A (pa, 2); /* incr mem addr */ + M[PAR] = (M[PAR] & FLAG) | (ptc & 07); /* store 2 digits */ + M[PAR - 1] = (M[PAR - 1] & FLAG) | + (((ptc >> 4) & 06) | ((ptc >> 3) & 1)); } - break; + PAR = ADDR_A (PAR, 2); /* incr mem addr */ + cpuio_cnt = cpuio_cnt + 2; + return SCPE_OK; default: /* invalid function */ - return STOP_INVFNC; + break; } -return STOP_RWRAP; +/* IO is complete */ + +cpuio_clr_inp (uptr); /* clear IO in progress */ +if ((ind[IN_RDCHK] != 0) && (io_stop != 0)) /* parity error? */ + return STOP_INVCHR; +return SCPE_OK; } /* Read ptr frame - all errors are 'hard' errors and halt the system */ @@ -324,11 +338,6 @@ t_stat ptr_read (uint8 *c, t_bool ignfeed) { int32 temp; -if ((ptr_unit.flags & UNIT_ATT) == 0) { /* attached? */ - ind[IN_RDCHK] = 1; /* no, error */ - return SCPE_UNATT; - } - do { if ((temp = getc (ptr_unit.fileref)) == EOF) { /* read char */ ind[IN_RDCHK] = 1; /* err, rd chk */ @@ -352,6 +361,8 @@ return SCPE_OK; t_stat ptr_reset (DEVICE *dptr) { +sim_cancel (&ptr_unit); +ptr_mode = 0; return SCPE_OK; } @@ -375,123 +386,121 @@ saved_PC = BOOT_START; return SCPE_OK; } -/* Paper tape punch IO routine - - - Hard errors halt the operation and the system. - - Parity errors stop the operation and set WRCHK. - If IO stop is set, the system then halts. -*/ +/* Paper tape punch IO init routine */ t_stat ptp (uint32 op, uint32 pa, uint32 f0, uint32 f1) { -uint32 i; +if ((op != OP_WN) && (op != OP_WA) && (op != OP_DN)) + return STOP_INVFNC; +if ((ptp_unit.flags & UNIT_ATT) == 0) /* catch unattached */ + return SCPE_UNATT; +ptp_mode = 0; +cpuio_set_inp (op, &ptp_unit); +return SCPE_OK; +} + +/* Binary paper tape punch IO init routine */ + +t_stat btp (uint32 op, uint32 pa, uint32 f0, uint32 f1) +{ +if (op != OP_WA) /* WA only */ + return STOP_INVFNC; +if ((ptp_unit.flags & UNIT_ATT) == 0) /* catch unattached */ + return SCPE_UNATT; +ptp_mode = 1; +cpuio_set_inp (op, &ptp_unit); +return SCPE_OK; +} + +/* Paper tape punch unit service routine */ + +t_stat ptp_svc (UNIT *uptr) +{ int8 ptc; uint8 z, d; t_stat r; -switch (op) { /* decode op */ +if ((cpuio_opc != OP_DN) && (cpuio_cnt >= MEMSIZE)) { /* wrap, ~dump? */ + cpuio_clr_inp (uptr); /* done */ + return STOP_RWRAP; + } +sim_activate (uptr, uptr->wait); /* sched another xfer */ +if ((uptr->flags & UNIT_ATT) == 0) /* not attached? */ + return SCPE_UNATT; + +switch (cpuio_opc) { /* decode op */ case OP_DN: - return ptp_num (pa, 20000 - (pa % 20000), TRUE);/* dump numeric */ + if ((cpuio_cnt != 0) && ((PAR % 20000) == 0)) /* done? */ + break; + return ptp_num (); /* write numeric */ case OP_WN: - return ptp_num (pa, 0, FALSE); /* punch numeric */ + if ((M[PAR] & REC_MARK) == REC_MARK) /* end record? */ + break; + return ptp_num (); /* write numeric */ case OP_WA: - for (i = 0; i < MEMSIZE; i = i + 2) { /* stop runaway */ - d = M[pa] & DIGIT; /* get digit */ - z = M[pa - 1] & DIGIT; /* get zone */ - if ((d & REC_MARK) == REC_MARK) /* 8-2 char? */ - return ptp_write (PT_EL); /* end record */ + d = M[PAR] & DIGIT; /* get digit */ + z = M[PAR - 1] & DIGIT; /* get zone */ + if ((d & REC_MARK) == REC_MARK) /* 8-2 char? */ + break; /* end record */ + if (ptp_mode == 0) { /* normal mode */ ptc = alp_to_ptp[(z << 4) | d]; /* translate pair */ if (ptc < 0) { /* bad char? */ ind[IN_WRCHK] = 1; /* write check */ CRETIOE (io_stop, STOP_INVCHR); } - r = ptp_write (ptc); /* write char */ - if (r != SCPE_OK) /* error? */ - return r; - pa = ADDR_A (pa, 2); /* incr mem addr */ } - break; - - default: /* invalid function */ - return STOP_INVFNC; - } - -return STOP_RWRAP; -} - -/* Binary paper tape punch IO routine - see above for error handling */ - -t_stat btp (uint32 op, uint32 pa, uint32 f0, uint32 f1) -{ -uint32 i; -uint8 ptc, z, d; -t_stat r; - -if ((cpu_unit.flags & IF_BIN) == 0) return STOP_INVIO; - -switch (op) { /* decode op */ - - case OP_WA: - for (i = 0; i < MEMSIZE; i = i + 2) { /* stop runaway */ - d = M[pa] & DIGIT; /* get digit */ - z = M[pa - 1] & DIGIT; /* get zone */ - if ((d & REC_MARK) == REC_MARK) /* 8-2 char? */ - return ptp_write (PT_EL); /* end record */ + else { /* binary mode */ ptc = ((z & 06) << 4) | ((z & 01) << 3) | (d & 07); if (bad_par[ptc]) /* set parity */ ptc = ptc | PT_C; - r = ptp_write (ptc); /* write char */ - if (r != SCPE_OK) /* error? */ - return r; - pa = ADDR_A (pa, 2); /* incr mem addr */ } - break; + r = ptp_write (ptc); /* write char */ + if (r != SCPE_OK) /* error? */ + return r; + PAR = ADDR_A (PAR, 2); /* incr mem addr */ + cpuio_cnt = cpuio_cnt + 2; + return SCPE_OK; default: /* invalid function */ - return STOP_INVFNC; + break; } -return STOP_RWRAP; +/* IO is complete */ + +ptp_write (PT_EL); /* write record mark */ +cpuio_clr_inp (uptr); /* IO complete */ +return SCPE_OK; } /* Punch tape numeric - cannot generate parity errors */ -t_stat ptp_num (uint32 pa, uint32 len, t_bool dump) +t_stat ptp_num (void) { t_stat r; uint8 d; -uint32 i; int8 ptc; -for (i = 0; i < MEMSIZE; i++) { /* stop runaway */ - d = M[pa] & (FLAG | DIGIT); /* get char */ - if (dump? (len-- == 0): /* dump: end reached? */ - ((d & REC_MARK) == REC_MARK)) /* write: rec mark? */ - return ptp_write (PT_EL); /* end record */ - ptc = num_to_ptp[d]; /* translate digit */ - if (ptc < 0) { /* bad char? */ - ind[IN_WRCHK] = 1; /* write check */ - CRETIOE(io_stop, STOP_INVCHR); - } - r = ptp_write(ptc); /* write char */ - if (r != SCPE_OK) /* error? */ - return r; - PP (pa); /* incr mem addr */ +d = M[PAR] & (FLAG | DIGIT); /* get char */ +ptc = num_to_ptp[d]; /* translate digit */ +if (ptc < 0) { /* bad char? */ + ind[IN_WRCHK] = 1; /* write check */ + CRETIOE(io_stop, STOP_INVCHR); } -return STOP_RWRAP; +r = ptp_write (ptc); /* write char */ +if (r != SCPE_OK) /* error? */ + return r; +PP (PAR); /* incr mem addr */ +cpuio_cnt++; +return SCPE_OK; } /* Write ptp frame - all errors are hard errors */ t_stat ptp_write (uint32 c) { -if ((ptp_unit.flags & UNIT_ATT) == 0) { /* attached? */ - ind[IN_WRCHK] = 1; /* no, error */ - return SCPE_UNATT; - } if (putc (c, ptp_unit.fileref) == EOF) { /* write char */ ind[IN_WRCHK] = 1; /* error? */ sim_perror ("PTP I/O error"); @@ -506,5 +515,7 @@ return SCPE_OK; t_stat ptp_reset (DEVICE *dptr) { +sim_cancel (&ptp_unit); +ptp_mode = 0; return SCPE_OK; } diff --git a/I1620/i1620_sys.c b/I1620/i1620_sys.c index 194f8943..af50632e 100644 --- a/I1620/i1620_sys.c +++ b/I1620/i1620_sys.c @@ -23,6 +23,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Robert M Supnik. + 25-May-17 RMS Tweaks and corrections from Tom McBride 18-May-17 RMS Changed fprint_val to handle undefined opcodes on stops 19-Mar-12 RMS Fixed declaration of CCT (Mark Pizzolato) */ @@ -272,7 +273,7 @@ struct opc opcode[] = { { "TNS", 72+I_2, 0 }, { "TNF", 73+I_2, 0 }, { "BBT", 90+I_2, 0 }, { "BMK", 91+I_2, 0 }, { "ORF", 92+I_2, 0 }, { "ANDF", 93+I_2, 0 }, - { "CPFL", 94+I_2, 0 }, { "EORF", 95+I_2, 0 }, + { "CPLF", 94+I_2, 0 }, { "EORF", 95+I_2, 0 }, { "OTD", 96+I_2, 0 }, { "DTO", 97+I_2, 0 }, { NULL, 0, 0 } }; @@ -399,7 +400,7 @@ if (opcode[i].str == NULL) { /* invalid opcode */ if (I_GETQP (opfl) == I_M_QNP) /* Q no print? */ qmp = 0; -fprintf (of, "%s", opcode[i].str); /* print opcode */ +fprintf (of, "%-4s", opcode[i].str); /* print opcode */ if (I_GETPP (opfl) == I_M_PP) /* P required? */ fprint_addr (of, ' ', &val[I_P], I_M_QX); else if ((I_GETPP (opfl) == I_M_PCP) && (pmp || qmp)) /* P opt & needed? */ diff --git a/I1620/i1620_tty.c b/I1620/i1620_tty.c index 5b1abda3..45c8f01e 100644 --- a/I1620/i1620_tty.c +++ b/I1620/i1620_tty.c @@ -25,6 +25,7 @@ tty console typewriter + 26-May-17 RMS Added deferred IO 18-May-17 RMS Fixed keyboard interrupt problem for Linux Added input backspace for Model II 04-May-17 DW Revised tab calculation algorithm @@ -46,8 +47,13 @@ #define TTO_COLMAX 80 #define UF_V_1DIG (UNIT_V_UF) #define UF_1DIG (1 << UF_V_1DIG) +#define UTTI 0 +#define UTTO 1 + +uint32 tti_unlock = 0; /* expecting input */ +uint32 tti_flag = 0; /* flag typed */ +int32 tto_col = 1; /* one-based, char loc to print next */ -int32 tto_col = 1; /* One-based, char cell we will print to next */ uint8 tto_tabs[TTO_COLMAX + 1] = { /* Zero-based access, one-based UI */ 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, @@ -66,15 +72,12 @@ extern uint8 M[MAXMEMSIZE]; extern uint8 ind[NUM_IND]; extern UNIT cpu_unit; extern uint32 io_stop; -extern volatile int32 stop_cpu; +extern uint32 cpuio_inp, cpuio_opc, cpuio_cnt, PAR; -void tti_unlock (void); -t_stat tti_rnum (int8 *c); -t_stat tti_ralp (int8 *c); -t_stat tti_read (int8 *c); -t_stat tto_num (uint32 pa, uint32 len, t_bool dump); +t_stat tto_num (void); t_stat tto_write (uint32 c); -t_stat tty_svc (UNIT *uptr); +t_stat tti_svc (UNIT *uptr); +t_stat tto_svc (UNIT *uptr); t_stat tty_reset (DEVICE *dptr); t_stat tty_set_fixtabs (UNIT *uptr, int32 val, CONST char *cptr, void *desc); @@ -85,11 +88,17 @@ t_stat tty_set_fixtabs (UNIT *uptr, int32 val, CONST char *cptr, void *desc); tty_reg TTY register list */ -UNIT tty_unit = { UDATA (&tty_svc, 0, 0), KBD_POLL_WAIT }; +UNIT tty_unit[] = { + { UDATA (&tti_svc, 0, 0), KBD_POLL_WAIT }, + { UDATA (&tto_svc, 0, 0), SERIAL_OUT_WAIT } + }; REG tty_reg[] = { + { FLDATA (UNLOCK, tti_unlock, 0) }, + { FLDATA (FLAG, tti_flag, 0), REG_HRO }, { DRDATA (COL, tto_col, 7) }, - { DRDATA (TIME, tty_unit.wait, 24), REG_NZ + PV_LEFT }, + { DRDATA (KTIME, tty_unit[UTTI].wait, 24), REG_NZ + PV_LEFT }, + { DRDATA (TTIME, tty_unit[UTTO].wait, 24), REG_NZ + PV_LEFT }, { NULL } }; @@ -108,10 +117,11 @@ MTAB tty_mod[] = { }; DEVICE tty_dev = { - "TTY", &tty_unit, tty_reg, tty_mod, - 1, 10, 31, 1, 8, 7, + "TTY", tty_unit, tty_reg, tty_mod, + 2, 10, 31, 1, 8, 7, NULL, NULL, &tty_reset, - NULL, NULL, NULL + NULL, NULL, NULL, + NULL, DEV_DEFIO }; /* Data tables */ @@ -239,12 +249,6 @@ const char alp_to_tto[256] = { t_stat tty (uint32 op, uint32 pa, uint32 f0, uint32 f1) { -t_addr i; -uint8 d; -int8 ttc; -t_stat r, sta; - -sta = SCPE_OK; switch (op) { /* case on op */ case OP_K: /* control */ @@ -271,174 +275,177 @@ switch (op) { /* case on op */ default: return STOP_INVFNC; } - return SCPE_OK; - - case OP_RN: /* read numeric */ - tti_unlock (); /* unlock keyboard */ - for (i = 0; i < MEMSIZE; i++) { /* (stop runaway) */ - r = tti_rnum (&ttc); /* read char */ - if (r != SCPE_OK) /* error? */ - return r; - if (ttc == 0x7F) /* end record? */ - return SCPE_OK; - if (ttc == 0x7E) { /* backspace? */ - MM (pa); /* decr mem addr */ - } - else { /* normal char */ - M[pa] = ttc & (FLAG | DIGIT); /* store char */ - PP (pa); /* incr mem addr */ - } - } break; - case OP_RA: /* read alphameric */ - tti_unlock (); - for (i = 0; i < MEMSIZE; i = i + 2) { /* (stop runaway) */ - r = tti_ralp (&ttc); /* read char */ - if (r != SCPE_OK) /* error? */ - return r; - if (ttc == 0x7F) /* end record? */ - return SCPE_OK; - if (ttc == 0x7E) { /* backspace? */ - pa = ADDR_A (pa, -2); /* decr mem addr*/ - } - else { /* normal char */ - M[pa] = (M[pa] & FLAG) | (ttc & DIGIT); /* store 2 digits */ - M[pa - 1] = (M[pa - 1] & FLAG) | ((ttc >> 4) & DIGIT); - pa = ADDR_A (pa, 2); /* incr mem addr */ - } - } - break; - - case OP_DN: - return tto_num (pa, 20000 - (pa % 20000), TRUE);/* dump numeric */ - case OP_WN: - return tto_num (pa, 0, FALSE); /* type numeric */ - + case OP_DN: case OP_WA: - for (i = 0; i < MEMSIZE; i = i + 2) { /* stop runaway */ - d = M[pa] & DIGIT; /* get digit */ - if ((d & REC_MARK) == REC_MARK) /* 8-2 char? done */ - return sta; - d = ((M[pa - 1] & DIGIT) << 4) | d; /* get digit pair */ - ttc = alp_to_tto[d]; /* translate */ - if (ttc < 0) { /* bad char? */ - ind[IN_WRCHK] = 1; /* set write check */ - if (io_stop) /* set return status */ - sta = STOP_INVCHR; - } - tto_write (ttc & 0x7F); /* write */ - pa = ADDR_A (pa, 2); /* incr mem addr */ - } - break; + cpuio_set_inp (op, &tty_unit[UTTO]); /* set IO in progress */ + break; + + case OP_RN: + case OP_RA: + tti_unlock = 1; /* unlock keyboard */ + tti_flag = 0; /* init flag */ + tto_write ('>'); /* prompt user */ + cpuio_set_inp (op, NULL); /* set IO in progress */ + break; default: /* invalid function */ return STOP_INVFNC; } -return STOP_RWRAP; +return SCPE_OK; } -/* Read numerically - cannot generate parity errors */ +/* Input unit service - OP can be RA or RN */ -t_stat tti_rnum (int8 *c) +t_stat tti_svc (UNIT *uptr) { -int8 raw, flg = 0; +int32 temp; +int8 raw, c; const char *cp; -t_stat r; -*c = -1; /* no char yet */ -do { - r = tti_read (&raw); /* get char */ - if (r != SCPE_OK) /* error? */ - return r; - if (raw == '\r') /* return? mark */ - *c = 0x7F; - else if (((raw == '\b') || (raw == 0x7F)) && /* backspace or del? */ - ((cpu_unit.flags & IF_MII) != 0)) { /* on model 2? */ - *c = 0x7E; /* mark */ - raw = '-'; /* print minus */ - } - else if ((raw == '~') || (raw == '`')) /* flag? mark */ - flg = FLAG; - else if ((cp = strchr (tti_to_num, raw)) != 0) /* legal? */ - *c = tti_position_to_internal[(cp - tti_to_num)] | flg; /* assemble char */ - else raw = 007; /* beep! */ +sim_activate (uptr, uptr->wait); /* continue poll */ +if ((temp = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */ + return temp; +if (tti_unlock == 0) /* expecting input? */ + return SCPE_OK; /* no, ignore */ +raw = (int8) temp; + +if (raw == '\r') { /* return? */ tto_write (raw); /* echo */ - } while (*c == -1); + tti_unlock = 0; /* no more input */ + cpuio_clr_inp (NULL); + return SCPE_OK; + } +if (cpuio_opc == OP_RN) { /* RN? */ + if (((raw == '\b') || (raw == 0x7F)) && /* backspace or del? */ + ((cpu_unit.flags & IF_MII) != 0)) { /* on model 2? */ + tto_write ('-'); /* print minus */ + MM (PAR); /* decr mem addr */ + return SCPE_OK; + } + else if ((raw == '~') || (raw == '`')) { /* flag? mark */ + tto_write (raw); + tti_flag = FLAG; + return SCPE_OK; + } + else if ((cp = strchr (tti_to_num, raw)) == 0) { /* invalid? */ + tto_write ('\a'); /* beep! */ + return SCPE_OK; + } + tto_write (raw); /* echo */ + if (cpuio_cnt >= MEMSIZE) { /* wrap around? */ + tti_unlock = 0; /* no more input */ + cpuio_clr_inp (NULL); + return STOP_RWRAP; + } + c = tti_position_to_internal[(cp - tti_to_num)] | tti_flag; /* assemble char */ + M[PAR] = c & (FLAG | DIGIT); /* store char */ + tti_flag = 0; /* re-init flag */ + PP (PAR); /* incr mem addr */ + cpuio_cnt++; + } + +else { /* RA */ + if (((raw == '\b') || (raw == 0x7F)) && /* backspace or del? */ + ((cpu_unit.flags & IF_MII) != 0)) { /* on model 2? */ + tto_write ('-'); /* print minus */ + PAR = ADDR_A (PAR, -2); /* decr mem addr*/ + return SCPE_OK; + } + else if (tti_to_alp[raw] < 0) { /* illegal char? */ + tto_write ('\a'); /* beep! */ + return SCPE_OK; + } + tto_write (raw); /* echo */ + if (cpuio_cnt >= MEMSIZE) { /* wrap around? */ + tti_unlock = 0; /* no more input */ + cpuio_clr_inp (NULL); + return STOP_RWRAP; + } + c = tti_to_alp[raw]; /* xlate */ + M[PAR] = (M[PAR] & FLAG) | (c & DIGIT); /* store 2 digits */ + M[PAR - 1] = (M[PAR - 1] & FLAG) | ((c >> 4) & DIGIT); + PAR = ADDR_A (PAR, 2); /* incr mem addr */ + cpuio_cnt = cpuio_cnt + 2; + } + return SCPE_OK; } -/* Read alphamerically - cannot generate parity errors */ +/* Output unit service */ -t_stat tti_ralp (int8 *c) -{ -int8 raw; -t_stat r; +t_stat tto_svc (UNIT *uptr) { -*c = -1; /* no char yet */ -do { - r = tti_read (&raw); /* get char */ - if (r != SCPE_OK) /* error? */ - return r; - if (raw == '\r') /* return? mark */ - *c = 0x7F; - else if (((raw == '\b') || (raw == 0x7F)) && /* backspace or del? */ - ((cpu_unit.flags & IF_MII) != 0)) { /* on model 2? */ - *c = 0x7E; /* mark */ - raw = '-'; /* print minus */ - } - else if (tti_to_alp[raw] >= 0) /* legal char? */ - *c = tti_to_alp[raw]; /* xlate */ - else raw = 007; /* beep! */ - tto_write (raw); /* echo */ - } while (*c == -1); -return SCPE_OK; -} +uint8 d; +int8 ttc; +t_stat sta = SCPE_OK; -/* Read from keyboard */ +if ((cpuio_opc != OP_DN) && (cpuio_cnt >= MEMSIZE)) { /* wrap, ~dump? */ + cpuio_clr_inp (uptr); /* done */ + return STOP_RWRAP; + } +sim_activate (uptr, uptr->wait); /* sched another xfer */ -t_stat tti_read (int8 *c) -{ -int32 t; +switch (cpuio_opc) { /* decode op */ -do { - if (stop_cpu != 0) /* stop? */ - return SCPE_STOP; - t = sim_poll_kbd (); /* get character */ - } while ((t == SCPE_OK) || (t & SCPE_BREAK)); /* ignore break */ -if (t < SCPE_KFLAG) /* error? */ - return t; -*c = t & 0177; /* store character */ -return SCPE_OK; + case OP_DN: + if ((cpuio_cnt != 0) && ((PAR % 20000) == 0)) /* done? */ + break; + return tto_num (); /* write numeric */ + + case OP_WN: + if ((M[PAR] & REC_MARK) == REC_MARK) /* end record? */ + break; + return tto_num (); /* write numeric */ + + case OP_WA: + d = M[PAR] & DIGIT; /* get digit */ + if ((d & REC_MARK) == REC_MARK) /* 8-2 char? done */ + break; + d = ((M[PAR - 1] & DIGIT) << 4) | d; /* get digit pair */ + ttc = alp_to_tto[d]; /* translate */ + if (ttc < 0) { /* bad char? */ + ind[IN_WRCHK] = 1; /* set write check */ + if (io_stop) /* set return status */ + sta = STOP_INVCHR; + break; + } + tto_write (ttc & 0x7F); /* write */ + PAR = ADDR_A (PAR, 2); /* incr mem addr */ + cpuio_cnt = cpuio_cnt + 2; + return SCPE_OK; + + default: + return SCPE_IERR; + } + +cpuio_clr_inp (uptr); /* clear IO in progress */ +return sta; } /* Write numerically - cannot generate parity errors */ -t_stat tto_num (uint32 pa, uint32 len, t_bool dump) +t_stat tto_num (void) { t_stat r; uint8 d; -uint32 i; -for (i = 0; i < MEMSIZE; i++) { /* (stop runaway) */ - d = M[pa]; /* get char */ - if (dump? (len-- == 0): /* dump: end reached? */ - ((d & REC_MARK) == REC_MARK)) /* write: rec mark? */ - return SCPE_OK; /* end operation */ - if (tty_unit.flags & UF_1DIG) /* how display flagged digits? */ - r = tto_write (num_to_tto[d]); /* single digit display */ - else { - if (d & FLAG) /* flag? */ - tto_write ('`'); /* write flag indicator */ - r = tto_write (num_to_tto[d & DIGIT]); /* write the digit */ - } - if (r != SCPE_OK) /* write error? */ - return r; - PP (pa); /* incr mem addr */ - } -return STOP_RWRAP; +d = M[PAR]; /* get char */ +if (tty_unit[UTTO].flags & UF_1DIG) /* how display flagged digits? */ + r = tto_write (num_to_tto[d & (DIGIT|FLAG)]); /* single digit display */ +else { + if (d & FLAG) /* flag? */ + tto_write ('`'); /* write flag indicator */ + r = tto_write (num_to_tto[d & DIGIT]); /* write the digit */ + } +if (r != SCPE_OK) /* write error? */ + return r; +PP (PAR); /* incr mem addr */ +cpuio_cnt++; +return SCPE_OK; } /* Wrap line, if needed, prior to character output */ @@ -459,7 +466,7 @@ t_stat tto_write (uint32 c) if (c == '\t') { /* tab? */ tto_wrap(); do { - sim_putchar(' '); /* use spaces */ + sim_putchar(' '); /* use spaces */ tto_col++; } while (!(tto_col > TTO_COLMAX || tto_tabs[tto_col-1] == 1)); } @@ -468,7 +475,7 @@ else if (c == '\r') { /* return? */ sim_putchar ('\n'); tto_col = 1; /* back to LMargin */ } -else if ((c == '\n') || (c == 007)) { /* non-spacing? */ +else if ((c == '\n') || (c == '\a')) { /* non-spacing? */ sim_putchar (c); } else if (c == '\b') { /* backspace? */ @@ -485,35 +492,17 @@ else { /* normal */ return SCPE_OK; } -/* Unit service - polls for WRU */ - -t_stat tty_svc (UNIT *uptr) -{ -int32 temp; - -sim_activate (&tty_unit, tty_unit.wait); /* continue poll */ -if ((temp = sim_poll_kbd ()) < SCPE_KFLAG) /* no char or error? */ - return temp; -return SCPE_OK; -} - /* Reset routine */ t_stat tty_reset (DEVICE *dptr) { -sim_activate (&tty_unit, tty_unit.wait); /* activate poll */ +sim_activate (&tty_unit[UTTI], tty_unit[UTTI].wait); /* activate poll */ +sim_cancel (&tty_unit[UTTO]); /* cancel output */ +tti_unlock = tti_flag = 0; /* tty locked */ tto_col = 1; return SCPE_OK; } -/* TTI unlock - signals that we are ready for keyboard input */ - -void tti_unlock (void) -{ -tto_write ('>'); -return; -} - /* Set tab stops at fixed modulus */ t_stat tty_set_fixtabs (UNIT *uptr, int32 val, CONST char *cptr, void *desc) diff --git a/doc/i1620_doc.doc b/doc/i1620_doc.doc index 3176da961a9329c2bcbdea311df1acbe0983b952..d1fc66a256b4278cc7b2bad79595f4423f5b0d68 100644 GIT binary patch literal 161280 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 G;Qs)y5AU4- delta 16868 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