1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-04-25 03:35:58 +00:00

I7000: Updated 7010, 7070, 7080 for EOF handling.

This commit is contained in:
Richard Cornwell
2024-05-10 21:18:28 -04:00
parent efc3cd4ead
commit 7021c77348
3 changed files with 27 additions and 7 deletions

View File

@@ -2222,14 +2222,14 @@ sim_instr(void)
t &= ~0100; /* Can't be overlaped */
/* Try to start command */
chan_io_status[ch & 07] = 0;
switch (chan_cmd(temp, t, BAR & AMASK)) {
case SCPE_OK:
if (ch & 010) {
chan_io_status[ch & 07] = 0;
chwait = ch & 07;
chan_irq_enb[ch & 7] = 0;
} else {
chan_io_status[ch & 07] = IO_CHS_OVER;
chan_io_status[ch & 07] |= IO_CHS_OVER;
chan_irq_enb[ch & 7] = 1;
}
sim_debug(DEBUG_CMD, &cpu_dev,
@@ -2246,6 +2246,9 @@ sim_instr(void)
sim_six_to_ascii[op_mod], chan_io_status[ch & 07]);
chan_io_status[ch & 07] |= IO_CHS_BUSY;
break;
case SCPE_EOF:
chan_io_status[ch & 07] |= IO_CHS_COND;
break;
case SCPE_NODEV:
fprintf(stderr, "No device %d %d\n\r", ch, temp);
/* Fall through */
@@ -2264,9 +2267,9 @@ fprintf(stderr, "No device %d %d\n\r", ch, temp);
temp = 010200 | op_mod;
ch = 1;
chan_io:
chan_io_status[ch & 07] = 0000;
switch (chan_cmd(temp, t, 0)) {
case SCPE_OK:
chan_io_status[ch & 07] = 0000;
if (ch & 010)
chwait = (ch & 07) | 040;
chan_irq_enb[ch & 7] = 0;
@@ -2274,6 +2277,9 @@ fprintf(stderr, "No device %d %d\n\r", ch, temp);
case SCPE_BUSY:
chan_io_status[ch & 07] |= IO_CHS_BUSY;
break;
case SCPE_EOF:
chan_io_status[ch & 07] |= IO_CHS_COND;
break;
case SCPE_NODEV:
case SCPE_IOERR:
chan_io_status[ch & 07] |= IO_CHS_NORDY;
@@ -2349,14 +2355,14 @@ fprintf(stderr, "No device %d %d\n\r", ch, temp);
break;
}
/* Issue command */
chan_io_status[ch & 07] = 0000;
switch (chan_cmd(temp, t, 0)) {
case SCPE_OK:
chan_io_status[ch & 07] = 0000;
chan_irq_enb[ch & 7] = 0;
if (ch & 010) {
chwait = (ch & 07) | 040;
} else if (op_mod == CHR_M) {
chan_io_status[ch & 07] = IO_CHS_OVER;
chan_io_status[ch & 07] |= IO_CHS_OVER;
chan_irq_enb[ch & 7] = 1;
}
sim_debug(DEBUG_CMD, &cpu_dev,
@@ -2366,11 +2372,14 @@ fprintf(stderr, "No device %d %d\n\r", ch, temp);
break;
case SCPE_BUSY:
chan_io_status[ch & 07] = IO_CHS_BUSY;
chan_io_status[ch & 07] |= IO_CHS_BUSY;
break;
case SCPE_EOF:
chan_io_status[ch & 07] |= IO_CHS_COND;
break;
case SCPE_NODEV:
case SCPE_IOERR:
chan_io_status[ch & 07] = IO_CHS_NORDY;
chan_io_status[ch & 07] |= IO_CHS_NORDY;
break;
}
if (CPU_MODEL == 1) {
@@ -2391,6 +2400,7 @@ fprintf(stderr, "No device %d %d\n\r", ch, temp);
break;
}
sim_debug(DEBUG_DETAIL, &mta_dev, "IO Status %d %02o\n", ch, chan_io_status[ch]);
if (chan_io_status[ch] & op_mod) {
jump = 1;
}

View File

@@ -2105,6 +2105,7 @@ sim_instr(void)
case SCPE_BUSY:
iowait = 1;
break;
case SCPE_EOF:
case SCPE_IOERR:
reason = STOP_IOCHECK;
break;
@@ -2151,6 +2152,7 @@ sim_instr(void)
case SCPE_BUSY:
iowait = 1;
break;
case SCPE_EOF:
case SCPE_IOERR:
reason = STOP_IOCHECK;
break;
@@ -2281,6 +2283,7 @@ sim_instr(void)
case SCPE_BUSY:
iowait = 1;
break;
case SCPE_EOF:
case SCPE_IOERR:
reason = STOP_IOCHECK;
break;
@@ -2329,6 +2332,7 @@ sim_instr(void)
case SCPE_BUSY:
iowait = 1;
break;
case SCPE_EOF:
case SCPE_IOERR:
reason = STOP_IOCHECK;
break;
@@ -2376,6 +2380,7 @@ sim_instr(void)
case SCPE_BUSY:
iowait = 1;
break;
case SCPE_EOF:
case SCPE_IOERR:
reason = STOP_IOCHECK;
break;

View File

@@ -711,6 +711,7 @@ stop_cpu:
case SCPE_BUSY:
case SCPE_NODEV:
case SCPE_IOERR:
case SCPE_EOF:
break;
}
break;
@@ -1525,6 +1526,7 @@ stop_cpu:
case SCPE_NODEV:
reason = STOP_IOCHECK;
break;
case SCPE_EOF:
case SCPE_IOERR:
flags |= ANYFLAG|INSTFLAG;
break;
@@ -1549,6 +1551,7 @@ stop_cpu:
case SCPE_NODEV:
reason = STOP_IOCHECK;
break;
case SCPE_EOF:
case SCPE_IOERR:
flags |= ANYFLAG|INSTFLAG;
break;
@@ -1572,6 +1575,7 @@ stop_cpu:
case SCPE_NODEV:
reason = STOP_IOCHECK;
break;
case SCPE_EOF:
case SCPE_IOERR:
flags |= ANYFLAG|INSTFLAG;
break;
@@ -1595,6 +1599,7 @@ stop_cpu:
case SCPE_NODEV:
reason = STOP_IOCHECK;
break;
case SCPE_EOF:
case SCPE_IOERR:
flags |= ANYFLAG|INSTFLAG;
break;