PDP11, VAX780: Fix TM03 Read tape mark must set Massbus EXC

This commit is contained in:
Bob Supnik 2017-12-28 16:00:43 -08:00 committed by Mark Pizzolato
parent 7ba70ac35b
commit c6fb3285a5

View file

@ -25,6 +25,7 @@
tu TM02/TM03 magtape tu TM02/TM03 magtape
28-Dec-17 RMS Read tape mark must set Massbus EXC
13-Mar-17 RMS Annotated fall through in switch 13-Mar-17 RMS Annotated fall through in switch
23-Oct-13 RMS Revised for new boot setup routine 23-Oct-13 RMS Revised for new boot setup routine
18-Apr-11 MP Fixed t_addr printouts for 64b big-endian systems 18-Apr-11 MP Fixed t_addr printouts for 64b big-endian systems
@ -664,7 +665,7 @@ switch (fnc) { /* case on function */
break; break;
} }
} while ((tufc != 0) && !sim_tape_eot (uptr)); } while ((tufc != 0) && !sim_tape_eot (uptr));
if (tufc) if (tufc != 0)
tu_set_er (ER_FCE); tu_set_er (ER_FCE);
else tutc = tutc & ~TC_FCS; else tutc = tutc & ~TC_FCS;
break; break;
@ -677,7 +678,7 @@ switch (fnc) { /* case on function */
break; break;
} }
} while (tufc != 0); } while (tufc != 0);
if (tufc) if (tufc != 0)
tu_set_er (ER_FCE); tu_set_er (ER_FCE);
else tutc = tutc & ~TC_FCS; else tutc = tutc & ~TC_FCS;
break; break;
@ -700,8 +701,6 @@ switch (fnc) { /* case on function */
if ((uptr->UDENS == TC_1600) && sim_tape_bot (uptr)) if ((uptr->UDENS == TC_1600) && sim_tape_bot (uptr))
tufs = tufs | FS_ID; /* PE BOT? ID burst */ tufs = tufs | FS_ID; /* PE BOT? ID burst */
if ((st = sim_tape_rdrecf (uptr, xbuf, &tbc, MT_MAXFR))) {/* read fwd */ if ((st = sim_tape_rdrecf (uptr, xbuf, &tbc, MT_MAXFR))) {/* read fwd */
if (st == MTSE_TMK) /* tmk also sets FCE */
tu_set_er (ER_FCE);
r = tu_map_err (drv, st, 1); /* map error */ r = tu_map_err (drv, st, 1); /* map error */
break; /* done */ break; /* done */
} }
@ -764,8 +763,6 @@ switch (fnc) { /* case on function */
case FNC_WCHKR: /* wcheck = read */ case FNC_WCHKR: /* wcheck = read */
tufc = 0; /* clear frame count */ tufc = 0; /* clear frame count */
if ((st = sim_tape_rdrecr (uptr, xbuf + 4, &tbc, MT_MAXFR))) {/* read rev */ if ((st = sim_tape_rdrecr (uptr, xbuf + 4, &tbc, MT_MAXFR))) {/* read rev */
if (st == MTSE_TMK) /* tmk also sets FCE */
tu_set_er (ER_FCE);
r = tu_map_err (drv, st, 1); /* map error */ r = tu_map_err (drv, st, 1); /* map error */
break; /* done */ break; /* done */
} }
@ -859,7 +856,9 @@ if (flg & FS_ATA)
return; return;
} }
/* Map tape error status */ /* Map tape error status
Note that tape mark on a data transfer sets FCE and Massbus EXC */
t_stat tu_map_err (int32 drv, t_stat st, t_bool qdt) t_stat tu_map_err (int32 drv, t_stat st, t_bool qdt)
{ {
@ -873,7 +872,11 @@ switch (st) {
break; break;
case MTSE_TMK: /* end of file */ case MTSE_TMK: /* end of file */
tufs = tufs | FS_TMK; tufs = tufs | FS_TMK; /* set TMK status */
if (qdt) { /* data transfer? */
tu_set_er (ER_FCE); /* set FCE */
mba_set_exc (tu_dib.ba); /* set exception*/
}
break; break;
case MTSE_IOERR: /* IO error */ case MTSE_IOERR: /* IO error */