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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user