1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-01-22 18:41:11 +00:00

KA10: Changes to try and get Tops 20 to print to FE printer.

This commit is contained in:
Richard Cornwell 2019-12-07 23:30:51 -05:00
parent 79bf7cff9d
commit 88f6e51441

View File

@ -136,6 +136,7 @@
#define PRI_EMSTR 003 /* String data */
#define PRI_EMLNC 004 /* Line-Char */
#define PRI_EMRDS 005 /* Request device status */
#define PRI_EMOPS 006
#define PRI_EMHDS 007 /* Here is device status */
#define PRI_EMRDT 011 /* Request Date/Time */
#define PRI_EMHDR 012 /* Here is date and time */
@ -305,7 +306,7 @@ DEVICE dte_dev = {
#define PTRMSK 00777 /* Current data load pointer */
#define EOFFLG 01000 /* Tops 20 wants EOF */
#define VFUFLG 02000 /* Tell Tops 20 that VFU loaded */
#define HDSFLG 02000 /* Tell Tops 20 The current device status */
#define MARGIN 6
@ -1031,6 +1032,11 @@ cty:
}
break;
case PRI_EMOPS:
if (cmd->dev == PRI_EMLPT) {
lp20_unit.LINE = 0;
}
break;
case PRI_EMRDS: /* Request device status */
#if (NUM_DEVS_LP20 > 0)
if (cmd->dev == PRI_EMLPT) {
@ -1038,18 +1044,21 @@ cty:
data1[0] = 2;
data1[1] = 0;
data1[2] = 0;
} else {
data1[0] = 0;
data1[1] = (lp20_unit.LINE == 0) ? 0x1: 0;
if (lp20_unit.LPST & EOFFLG)
data1[0] |= 040;
// if (lp20_unit.LPST & VFUFLG)
// data1[1] |= 04;
lp20_unit.LPST &= ~EOFFLG;
data1[2] = 0; //0100220;
}
if (dte_queue(PRI_EMHDS+PRI_IND_FLG, PRI_EMLPT, 3, data1) == 0)
return;
} else {
lp20_unit.LPST |= HDSFLG;
if (!sim_is_active(&lp20_unit))
sim_activate(&lp20_unit, 1000);
// data1[0] = 0;
// data1[1] = (lp20_unit.LINE == 0) ? 0x1: 0;
// if (lp20_unit.LPST & EOFFLG)
// data1[0] |= 040;
//
// if (lp20_unit.LPST & VFUFLG)
// data1[1] |= 04;
// data1[2] = 0; //0100220;
}
}
#endif
if (cmd->dev == PRI_EMCTY) {
@ -1069,21 +1078,27 @@ cty:
case PRI_EMHDS: /* Here is device status */
if (cmd->dev == PRI_EMLPT) {
sim_debug(DEBUG_DETAIL, &dte_dev, "TTY HDS %06o %06o %06o\n", cmd->data[0], cmd->data[1], cmd->data[2]);
data1[0] = 0;
data1[1] = (lp20_unit.LINE == 0) ? 0x1: 0;
// data1[0] = 0;
// data1[1] = (lp20_unit.LINE == 0) ? 0x1: 0;
if (cmd->data[0] & 040) {
data1[0] |= 040;
// data1[0] |= 040;
lp20_unit.LPST |= EOFFLG;
lp20_unit.LPCNT = 0;
}
lp20_unit.LPST |= HDSFLG;
if (!sim_is_active(&lp20_unit))
sim_activate(&lp20_unit, 1000);
// if (lp20_unit.LPST & VFUFLG)
// data1[1] |= 04;
data1[2] = 0100220;
// data1[2] = 0100220;
// if (dte_queue(PRI_EMHDS+PRI_IND_FLG, PRI_EMLPT, 3, data1) == 0)
// return;
// if (cmd->data[1] & 040) {
// lp20_unit.LPST |= EOFFLG;
// }
// if ((lp20_unit.LPST & EOFFLG) != 0 && dte_queue(PRI_EMHDS+PRI_IND_FLG, PRI_EMLPT, 3, data1) == 0)
// return;
// lp20_unit.LPST &= ~EOFFLG;
}
break;
#if (NUM_DEVS_LP20 > 0)
@ -1093,7 +1108,6 @@ cty:
while (cmd->dptr < cmd->dcnt) {
lp20_vfu[ln++] = cmd->data[cmd->dptr++];
}
lp20_unit.LPST |= VFUFLG;
lp20_unit.LPCNT = ln;
}
break;
@ -1112,6 +1126,7 @@ cty:
break;
#endif
#if (NUM_DEVS_TTY > 0)
case PRI_EMFLO: /* Flush output */
if ((cmd->dev & 0377) == PRI_EMDLS) {
@ -1151,6 +1166,8 @@ cty:
case PRI_EMHLS: /* Here is line speeds */
if ((cmd->dev & 0377) == PRI_EMDLS) {
int ln = cmd->sdev - 2;
sim_debug(DEBUG_DETAIL, &tty_dev, "HDL %o o=%d i=%d %o\n",
ln, cmd->data[0], cmd->data[1], cmd->data[2]);
}
break;
case PRI_EMHLA: /* Here is line allocation */
@ -1803,8 +1820,22 @@ t_stat lp20_svc (UNIT *uptr)
if ((uptr->flags & UNIT_ATT) == 0)
return SCPE_OK;
if (uptr->LPST & HDSFLG) {
data1[0] = 0;
data1[1] = (uptr->LINE == 0) ? 0x1: 0;
if (uptr->LPST & EOFFLG)
data1[0] |= 040;
// if (uptr->LPST & VFUFLG)
// data1[1] |= 04;
data1[2] = 0110200; //0100220;
if (dte_queue(PRI_EMHDS+PRI_IND_FLG, PRI_EMLPT, 3, data1) == 0)
sim_activate(uptr, 1000);
uptr->LPST &= ~(HDSFLG|EOFFLG);
}
while (((lp20_queue.out_ptr + 1) & 0xff) != lp20_queue.in_ptr) {
if (lp20_queue.out_ptr == lp20_queue.in_ptr)
return SCPE_OK;
while (lp20_queue.out_ptr != lp20_queue.in_ptr) {
c = lp20_queue.buff[lp20_queue.out_ptr];
lp20_queue.out_ptr = (lp20_queue.out_ptr + 1) & 0xff;
if (c < 040) { /* Control character */
@ -1870,18 +1901,15 @@ t_stat lp20_svc (UNIT *uptr)
lp20_output(uptr, c);
}
}
if ((l != 0 && uptr->LINE == 0) || (l == 0 && uptr->LINE != 0)) {
if (lp20_queue.out_ptr == lp20_queue.in_ptr) {
data1[0] = 0;
data1[1] = (lp20_unit.LINE == 0) ? 0x1: 0;
// if (uptr->LPST & VFUFLG)
// data1[1] |= 04;
data1[2] = 0; //0100220;
if (dte_queue(PRI_EMHDS+PRI_IND_FLG, PRI_EMLPT, 3, data1) == 0)
if (dte_queue(PRI_EMACK, PRI_EMLPT, 1, data1) == 0)
sim_activate(uptr, 1000);
if (uptr->LINE == 0) {
uptr->LPST |= HDSFLG;
sim_activate(uptr, 1000);
}
}
data1[0] = 0;
if (dte_queue(PRI_EMACK, PRI_EMLPT, 1, data1) == 0)
sim_activate(uptr, 1000);
return SCPE_OK;
}