mirror of
https://github.com/simh/simh.git
synced 2026-02-14 11:55:51 +00:00
Notes For V3.4-0
The memory layout for the Interdata simulators has been changed. Do not use Interdata SAVE files from prior revisions with V3.4. 1. New Features in 3.4 1.1 SCP and Libraries - Revised interpretation of fprint_sym, fparse_sym returns - Revised syntax for SET DEBUG - DO command nesting allowed to ten levels 1.2 Interdata - Revised memory model to be 16b instead of 8b 1.3 HP2100 - Added Fast FORTRAN Processor instructions - Added SET OFFLINE/ONLINE and SET UNLOAD/LOAD commands to tapes and disks 2. Bugs Fixed in 3.4-0 2.1 Interdata - Fixed bug in show history routine (from Mark Hittinger) - Fixed bug in initial memory allocation 2.2 PDP-10 - Fixed TU bug, ERASE and WREOF should not clear done (reported by Rich Alderson) - Fixed TU error reporting 2.3 PDP-11 - Fixed TU error reporting
This commit is contained in:
committed by
Mark Pizzolato
parent
098200a126
commit
ec60bbf329
@@ -1,6 +1,6 @@
|
||||
/* pdp11_hk.c - RK611/RK06/RK07 disk controller
|
||||
|
||||
Copyright (c) 1993-2004, Robert M Supnik
|
||||
Copyright (c) 1993-2005, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
hk RK611/RK06/RK07 disk
|
||||
|
||||
18-Mar-05 RMS Added attached test to detach routine
|
||||
03-Oct-04 RMS Revised Unibus interface
|
||||
RMS Fixed state of output ready for M+
|
||||
26-Mar-04 RMS Fixed warnings with -std=c99
|
||||
@@ -1062,6 +1063,7 @@ t_stat hk_detach (UNIT *uptr)
|
||||
{
|
||||
int32 drv;
|
||||
|
||||
if (!(uptr->flags & UNIT_ATT)) return SCPE_OK; /* attached? */
|
||||
drv = uptr - hk_dev.units; /* get drv number */
|
||||
hkds[drv] = (hkds[drv] & ~(DS_RDY | DS_WRL | DS_VV | DS_OF)) | DS_ATA;
|
||||
if (sim_is_active (uptr)) { /* unit active? */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pdp11_rp.c - RP04/05/06/07 RM02/03/05/80 Massbus disk controller
|
||||
|
||||
Copyright (c) 1993-2004, Robert M Supnik
|
||||
Copyright (c) 1993-2005, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
rp RH/RP/RM moving head disks
|
||||
|
||||
18-Mar-05 RMS Added attached test to detach routine
|
||||
12-Sep-04 RMS Cloned from pdp11_rp.c
|
||||
|
||||
Note: The VMS driver and the RP controller documentation state that
|
||||
@@ -922,6 +923,7 @@ t_stat rp_detach (UNIT *uptr)
|
||||
{
|
||||
int32 drv;
|
||||
|
||||
if (!(uptr->flags & UNIT_ATT)) return SCPE_OK; /* attached? */
|
||||
drv = uptr - rp_dev.units; /* get drv number */
|
||||
rpds[drv] = rpds[drv] & ~(DS_MOL | DS_RDY | DS_WRL | DS_VV | DS_OFM);
|
||||
rp_update_ds (DS_ATA, drv); /* request intr */
|
||||
|
||||
@@ -537,15 +537,20 @@ int32 l8b, brdisp, wd1, wd2;
|
||||
extern int32 FPS;
|
||||
|
||||
cflag = (uptr == NULL) || (uptr == &cpu_unit);
|
||||
c1 = val[0] & 0177;
|
||||
c2 = (val[0] >> 8) & 0177;
|
||||
if (sw & SWMASK ('A')) { /* ASCII? */
|
||||
c1 = (val[0] >> ((addr & 1)? 8: 0)) & 0177;
|
||||
fprintf (of, (c1 < 040)? "<%03o>": "%c", c1);
|
||||
return SCPE_OK; }
|
||||
return 0; }
|
||||
if (sw & SWMASK ('B')) { /* byte? */
|
||||
c1 = (val[0] >> ((addr & 1)? 8: 0)) & 0377;
|
||||
fprintf (of, "%o", c1);
|
||||
return 0; }
|
||||
if (sw & SWMASK ('C')) { /* character? */
|
||||
c1 = val[0] & 0177;
|
||||
c2 = (val[0] >> 8) & 0177;
|
||||
fprintf (of, (c1 < 040)? "<%03o>": "%c", c1);
|
||||
fprintf (of, (c2 < 040)? "<%03o>": "%c", c2);
|
||||
return SCPE_OK; }
|
||||
return -1; }
|
||||
if (sw & SWMASK ('R')) { /* radix 50? */
|
||||
if (val[0] > 0174777) return SCPE_ARG; /* max value */
|
||||
c3 = val[0] % 050;
|
||||
@@ -553,76 +558,84 @@ if (sw & SWMASK ('R')) { /* radix 50? */
|
||||
c1 = val[0] / (050 * 050);
|
||||
fprintf (of, "%c%c%c", r50_to_asc[c1],
|
||||
r50_to_asc[c2], r50_to_asc[c3]);
|
||||
return SCPE_OK; }
|
||||
return -1; }
|
||||
if (!(sw & SWMASK ('M'))) return SCPE_ARG;
|
||||
|
||||
inst = val[0] | ((FPS << (I_V_L - FPS_V_L)) & I_L) |
|
||||
((FPS << (I_V_D - FPS_V_D)) & I_D); /* inst + fp mode */
|
||||
for (i = 0; opc_val[i] >= 0; i++) { /* loop thru ops */
|
||||
j = (opc_val[i] >> I_V_CL) & I_M_CL; /* get class */
|
||||
if ((opc_val[i] & 0777777) == (inst & masks[j])) { /* match? */
|
||||
srcm = (inst >> 6) & 077; /* opr fields */
|
||||
srcr = srcm & 07;
|
||||
fac = srcm & 03;
|
||||
dstm = inst & 077;
|
||||
dstr = dstm & 07;
|
||||
l8b = inst & 0377;
|
||||
j = (opc_val[i] >> I_V_CL) & I_M_CL; /* get class */
|
||||
if ((opc_val[i] & 0777777) == (inst & masks[j])) { /* match? */
|
||||
srcm = (inst >> 6) & 077; /* opr fields */
|
||||
srcr = srcm & 07;
|
||||
fac = srcm & 03;
|
||||
dstm = inst & 077;
|
||||
dstr = dstm & 07;
|
||||
l8b = inst & 0377;
|
||||
wd1 = wd2 = 0;
|
||||
|
||||
/* Instruction decode */
|
||||
|
||||
switch (j) { /* case on class */
|
||||
case I_V_NPN: case I_V_CCC: case I_V_CCS: /* no operands */
|
||||
switch (j) { /* case on class */
|
||||
case I_V_NPN: case I_V_CCC: case I_V_CCS: /* no operands */
|
||||
fprintf (of, "%s", opcode[i]);
|
||||
return SCPE_OK;
|
||||
case I_V_REG: /* reg */
|
||||
break;
|
||||
case I_V_REG: /* reg */
|
||||
fprintf (of, "%s %-s", opcode[i], rname[dstr]);
|
||||
return SCPE_OK;
|
||||
case I_V_SOP: /* sop */
|
||||
break;
|
||||
case I_V_SOP: /* sop */
|
||||
fprintf (of, "%s ", opcode[i]);
|
||||
return fprint_spec (of, addr, dstm, val[1], cflag, TRUE);
|
||||
case I_V_3B: /* 3b */
|
||||
wd1 = fprint_spec (of, addr, dstm, val[1], cflag, TRUE);
|
||||
break;
|
||||
case I_V_3B: /* 3b */
|
||||
fprintf (of, "%s %-o", opcode[i], dstr);
|
||||
return SCPE_OK;
|
||||
case I_V_FOP: /* fop */
|
||||
break;
|
||||
case I_V_FOP: /* fop */
|
||||
fprintf (of, "%s ", opcode[i]);
|
||||
return fprint_spec (of, addr, dstm, val[1], cflag, FALSE);
|
||||
case I_V_AFOP: /* afop */
|
||||
wd1 = fprint_spec (of, addr, dstm, val[1], cflag, FALSE);
|
||||
break;
|
||||
case I_V_AFOP: /* afop */
|
||||
fprintf (of, "%s %s,", opcode[i], fname[fac]);
|
||||
return fprint_spec (of, addr, dstm, val[1], cflag, FALSE);
|
||||
case I_V_6B: /* 6b */
|
||||
wd1 = fprint_spec (of, addr, dstm, val[1], cflag, FALSE);
|
||||
break;
|
||||
case I_V_6B: /* 6b */
|
||||
fprintf (of, "%s %-o", opcode[i], dstm);
|
||||
return SCPE_OK;
|
||||
case I_V_BR: /* cond branch */
|
||||
break;
|
||||
case I_V_BR: /* cond branch */
|
||||
fprintf (of, "%s ", opcode[i]);
|
||||
brdisp = (l8b + l8b + ((l8b & 0200)? 0177002: 2)) & 0177777;
|
||||
if (cflag) fprintf (of, "%-o", (addr + brdisp) & 0177777);
|
||||
else if (brdisp < 01000) fprintf (of, ".+%-o", brdisp);
|
||||
else fprintf (of, ".-%-o", 0200000 - brdisp);
|
||||
return SCPE_OK;
|
||||
case I_V_8B: /* 8b */
|
||||
break;
|
||||
case I_V_8B: /* 8b */
|
||||
fprintf (of, "%s %-o", opcode[i], l8b);
|
||||
return SCPE_OK;
|
||||
case I_V_SOB: /* sob */
|
||||
break;
|
||||
case I_V_SOB: /* sob */
|
||||
fprintf (of, "%s %s,", opcode[i], rname[srcr]);
|
||||
brdisp = (dstm * 2) - 2;
|
||||
if (cflag) fprintf (of, "%-o", (addr - brdisp) & 0177777);
|
||||
else if (brdisp <= 0) fprintf (of, ".+%-o", -brdisp);
|
||||
else fprintf (of, ".-%-o", brdisp);
|
||||
return SCPE_OK;
|
||||
case I_V_RSOP: /* rsop */
|
||||
break;
|
||||
case I_V_RSOP: /* rsop */
|
||||
fprintf (of, "%s %s,", opcode[i], rname[srcr]);
|
||||
return fprint_spec (of, addr, dstm, val[1], cflag, TRUE);
|
||||
case I_V_ASOP: case I_V_ASMD: /* asop, asmd */
|
||||
wd1 = fprint_spec (of, addr, dstm, val[1], cflag, TRUE);
|
||||
break;
|
||||
case I_V_ASOP: case I_V_ASMD: /* asop, asmd */
|
||||
fprintf (of, "%s %s,", opcode[i], fname[fac]);
|
||||
return fprint_spec (of, addr, dstm, val[1], cflag, TRUE);
|
||||
case I_V_DOP: /* dop */
|
||||
wd1 = fprint_spec (of, addr, dstm, val[1], cflag, TRUE);
|
||||
break;
|
||||
case I_V_DOP: /* dop */
|
||||
fprintf (of, "%s ", opcode[i]);
|
||||
wd1 = fprint_spec (of, addr, srcm, val[1], cflag, TRUE);
|
||||
fprintf (of, ",");
|
||||
wd2 = fprint_spec (of, addr - wd1 - wd1, dstm,
|
||||
val[1 - wd1], cflag, TRUE);
|
||||
return wd1 + wd2; } /* end case */
|
||||
} /* end if */
|
||||
val[1 - wd1], cflag, TRUE);
|
||||
break;
|
||||
} /* end case */
|
||||
return ((wd1 + wd2) * 2) - 1;
|
||||
} /* end if */
|
||||
} /* end for */
|
||||
return SCPE_ARG; /* no match */
|
||||
}
|
||||
@@ -807,6 +820,7 @@ default:
|
||||
t_stat parse_sym (char *cptr, t_addr addr, UNIT *uptr, t_value *val, int32 sw)
|
||||
{
|
||||
int32 cflag, d, i, j, reg, spec, n1, n2, disp, pflag;
|
||||
t_value by;
|
||||
t_stat r;
|
||||
char *tptr, gbuf[CBUFSIZE];
|
||||
|
||||
@@ -814,12 +828,19 @@ cflag = (uptr == NULL) || (uptr == &cpu_unit);
|
||||
while (isspace (*cptr)) cptr++; /* absorb spaces */
|
||||
if ((sw & SWMASK ('A')) || ((*cptr == '\'') && cptr++)) { /* ASCII char? */
|
||||
if (cptr[0] == 0) return SCPE_ARG; /* must have 1 char */
|
||||
val[0] = (t_value) cptr[0];
|
||||
return SCPE_OK; }
|
||||
if (addr & 1) val[0] = (val[0] & 0377) | (((t_value) cptr[0]) << 8);
|
||||
else val[0] = (val[0] & ~0377) | ((t_value) cptr[0]);
|
||||
return 0; }
|
||||
if (sw & SWMASK ('B')) { /* byte? */
|
||||
by = get_uint (cptr, 8, 0377, &r); /* get byte */
|
||||
if (r != SCPE_OK) return SCPE_ARG;
|
||||
if (addr & 1) val[0] = (val[0] & 0377) | (by << 8);
|
||||
else val[0] = (val[0] & ~0377) | by;
|
||||
return 0; }
|
||||
if ((sw & SWMASK ('C')) || ((*cptr == '"') && cptr++)) { /* ASCII string? */
|
||||
if (cptr[0] == 0) return SCPE_ARG; /* must have 1 char */
|
||||
val[0] = ((t_value) cptr[1] << 8) + (t_value) cptr[0];
|
||||
return SCPE_OK; }
|
||||
val[0] = ((t_value) cptr[1] << 8) | (t_value) cptr[0];
|
||||
return -1; }
|
||||
if (sw & SWMASK ('R')) return SCPE_ARG; /* radix 50 */
|
||||
|
||||
cptr = get_glyph (cptr, gbuf, 0); /* get opcode */
|
||||
@@ -909,5 +930,5 @@ case I_V_CCC: case I_V_CCS: /* cond code oper */
|
||||
default:
|
||||
return SCPE_ARG; }
|
||||
if (*cptr != 0) return SCPE_ARG; /* junk at end? */
|
||||
return n1 + n2;
|
||||
return ((n1 + n2) * 2) - 1;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pdp11_tm.c: PDP-11 magnetic tape simulator
|
||||
|
||||
Copyright (c) 1993-2004, Robert M Supnik
|
||||
Copyright (c) 1993-2005, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
tm TM11/TU10 magtape
|
||||
|
||||
18-Mar-05 RMS Added attached test to detach routine
|
||||
07-Dec-04 RMS Added read-only file support
|
||||
30-Sep-04 RMS Revised Unibus interface
|
||||
25-Jan-04 RMS Revised for device debug support
|
||||
@@ -557,6 +558,7 @@ t_stat tm_detach (UNIT* uptr)
|
||||
{
|
||||
int32 u = uptr - tm_dev.units;
|
||||
|
||||
if (!(uptr->flags & UNIT_ATT)) return SCPE_OK;
|
||||
if (!sim_is_active (uptr)) uptr->USTAT = 0;
|
||||
if (u == GET_UNIT (tm_cmd)) tm_updcsta (uptr);
|
||||
return sim_tape_detach (uptr);
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
#elif defined (VM_VAX) /* VAX version */
|
||||
#include "vax_defs.h"
|
||||
#if (UNIBUS)
|
||||
#define INIT_TYPE TQU_TYPE
|
||||
#define INIT_TYPE TQ8_TYPE
|
||||
#else
|
||||
#define INIT_TYPE TQ5_TYPE
|
||||
#endif
|
||||
@@ -1755,7 +1755,6 @@ return SCPE_OK;
|
||||
#define BOOT_CSR (BOOT_START + 014) /* CSR */
|
||||
#define BOOT_LEN (sizeof (boot_rom) / sizeof (int16))
|
||||
|
||||
|
||||
/* Data structure definitions */
|
||||
|
||||
#define B_CMDINT (BOOT_START - 01000) /* cmd int */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pdp11_ts.c: TS11/TSV05 magnetic tape simulator
|
||||
|
||||
Copyright (c) 1993-2004, Robert M Supnik
|
||||
Copyright (c) 1993-2005, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
ts TS11/TSV05 magtape
|
||||
|
||||
18-Mar-05 RMS Added attached test to detach routine
|
||||
07-Dec-04 RMS Added read-only file support
|
||||
30-Sep-04 RMS Revised Unibus interface
|
||||
25-Jan-04 RMS Revised for device debug support
|
||||
@@ -935,6 +936,7 @@ t_stat ts_detach (UNIT* uptr)
|
||||
{
|
||||
t_stat r;
|
||||
|
||||
if (!(uptr->flags & UNIT_ATT)) return SCPE_OK; /* attached? */
|
||||
r = sim_tape_detach (uptr); /* detach unit */
|
||||
if (r != SCPE_OK) return r; /* error? */
|
||||
tssr = tssr | TSSR_OFL; /* set offline */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pdp11_tu.c - PDP-11 TM02/TU16 TM03/TU45/TU77 Massbus magnetic tape controller
|
||||
|
||||
Copyright (c) 1993-2004, Robert M Supnik
|
||||
Copyright (c) 1993-2005, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
tu TM02/TM03 magtape
|
||||
|
||||
31-Mar-05 RMS Fixed inaccuracies in error reporting
|
||||
18-Mar-05 RMS Added attached test to detach routine
|
||||
10-Sep-04 RMS Cloned from pdp10_tu.c
|
||||
|
||||
Magnetic tapes are represented as a series of variable 8b records
|
||||
@@ -246,7 +248,7 @@ int32 tu_abort (void);
|
||||
void tu_set_er (int32 flg);
|
||||
void tu_clr_as (int32 mask);
|
||||
void tu_update_fs (int32 flg, int32 drv);
|
||||
t_stat tu_map_err (int32 drv, t_stat st);
|
||||
t_stat tu_map_err (int32 drv, t_stat st, t_bool qdt);
|
||||
|
||||
/* TU data structures
|
||||
|
||||
@@ -569,7 +571,7 @@ case FNC_SPACEF: /* space forward */
|
||||
do {
|
||||
tufc = (tufc + 1) & 0177777; /* incr fc */
|
||||
if (st = sim_tape_sprecf (uptr, &tbc)) { /* space rec fwd, err? */
|
||||
r = tu_map_err (drv, st); /* map error */
|
||||
r = tu_map_err (drv, st, 0); /* map error */
|
||||
break; }
|
||||
}
|
||||
while (tufc != 0);
|
||||
@@ -581,7 +583,7 @@ case FNC_SPACER: /* space reverse */
|
||||
do {
|
||||
tufc = (tufc + 1) & 0177777; /* incr wc */
|
||||
if (st = sim_tape_sprecr (uptr, &tbc)) { /* space rec rev, err? */
|
||||
r = tu_map_err (drv, st); /* map error */
|
||||
r = tu_map_err (drv, st, 0); /* map error */
|
||||
break; }
|
||||
}
|
||||
while (tufc != 0);
|
||||
@@ -591,12 +593,12 @@ case FNC_SPACER: /* space reverse */
|
||||
|
||||
case FNC_WREOF: /* write end of file */
|
||||
if (st = sim_tape_wrtmk (uptr)) /* write tmk, err? */
|
||||
r = tu_map_err (drv, st); /* map error */
|
||||
r = tu_map_err (drv, st, 0); /* map error */
|
||||
break;
|
||||
|
||||
case FNC_ERASE:
|
||||
if (sim_tape_wrp (uptr)) /* write protected? */
|
||||
r = tu_map_err (drv, MTSE_WRP); /* map error */
|
||||
r = tu_map_err (drv, MTSE_WRP, 0); /* map error */
|
||||
break;
|
||||
|
||||
/* Unit service - data transfer commands */
|
||||
@@ -607,7 +609,7 @@ case FNC_WCHKF: /* wcheck = read */
|
||||
if ((uptr->UDENS == TC_1600) && sim_tape_bot (uptr))
|
||||
tufs = tufs | FS_ID; /* PE BOT? ID burst */
|
||||
if (st = sim_tape_rdrecf (uptr, xbuf, &tbc, MT_MAXFR)) { /* read fwd */
|
||||
r = tu_map_err (drv, st); /* map error */
|
||||
r = tu_map_err (drv, st, 1); /* map error */
|
||||
break; } /* done */
|
||||
for (i = tbc; i < tbc + 4; i++) xbuf[i] = 0; /* pad with 0's */
|
||||
if (fmt == TC_CDUMP) { /* core dump? */
|
||||
@@ -652,7 +654,7 @@ case FNC_WRITE: /* write */
|
||||
tbc = xbc;
|
||||
}
|
||||
if (st = sim_tape_wrrecf (uptr, xbuf, tbc)) /* write rec, err? */
|
||||
r = tu_map_err (drv, st); /* map error */
|
||||
r = tu_map_err (drv, st, 1); /* map error */
|
||||
else {
|
||||
tufc = (tufc + tbc) & 0177777;
|
||||
if (tufc == 0) tutc = tutc & ~TC_FCS;
|
||||
@@ -663,7 +665,7 @@ case FNC_READR: /* read reverse */
|
||||
case FNC_WCHKR: /* wcheck = read */
|
||||
tufc = 0; /* clear frame count */
|
||||
if (st = sim_tape_rdrecr (uptr, xbuf + 4, &tbc, MT_MAXFR)) { /* read rev */
|
||||
r = tu_map_err (drv, st); /* map error */
|
||||
r = tu_map_err (drv, st, 1); /* map error */
|
||||
break; } /* done */
|
||||
for (i = 0; i < 4; i++) xbuf[i] = 0; /* pad with 0's */
|
||||
if (fmt == TC_CDUMP) { /* core dump? */
|
||||
@@ -740,12 +742,13 @@ return;
|
||||
|
||||
/* Map tape error status */
|
||||
|
||||
t_stat tu_map_err (int32 drv, t_stat st)
|
||||
t_stat tu_map_err (int32 drv, t_stat st, t_bool qdt)
|
||||
{
|
||||
switch (st) {
|
||||
case MTSE_FMT: /* illegal fmt */
|
||||
case MTSE_UNATT: /* not attached */
|
||||
tu_set_er (ER_NXF); /* can't execute */
|
||||
if (qdt) mba_set_exc (tu_dib.ba); /* set exception */
|
||||
break;
|
||||
case MTSE_TMK: /* end of file */
|
||||
tufs = tufs | FS_TMK;
|
||||
@@ -753,21 +756,25 @@ case MTSE_TMK: /* end of file */
|
||||
break;
|
||||
case MTSE_IOERR: /* IO error */
|
||||
tu_set_er (ER_VPE); /* flag error */
|
||||
mba_set_exc (tu_dib.ba); /* set exception */
|
||||
if (qdt) mba_set_exc (tu_dib.ba); /* set exception */
|
||||
return (tu_stopioe? SCPE_IOERR: SCPE_OK);
|
||||
case MTSE_INVRL: /* invalid rec lnt */
|
||||
tu_set_er (ER_VPE); /* flag error */
|
||||
if (qdt) mba_set_exc (tu_dib.ba); /* set exception */
|
||||
return SCPE_MTRLNT;
|
||||
case MTSE_RECE: /* record in error */
|
||||
tu_set_er (ER_CRC); /* set crc err */
|
||||
if (qdt) mba_set_exc (tu_dib.ba); /* set exception */
|
||||
break;
|
||||
case MTSE_EOM: /* end of medium */
|
||||
tu_set_er (ER_OPI); /* incomplete */
|
||||
if (qdt) mba_set_exc (tu_dib.ba); /* set exception */
|
||||
break;
|
||||
case MTSE_BOT: /* reverse into BOT */
|
||||
return SCPE_OK;
|
||||
case MTSE_WRP: /* write protect */
|
||||
tu_set_er (ER_NXF); /* can't execute */
|
||||
if (qdt) mba_set_exc (tu_dib.ba); /* set exception */
|
||||
break;
|
||||
default: /* unknown error */
|
||||
return SCPE_IERR; }
|
||||
@@ -822,6 +829,7 @@ t_stat tu_detach (UNIT* uptr)
|
||||
{
|
||||
int32 drv = uptr - tu_dev.units;
|
||||
|
||||
if (!(uptr->flags & UNIT_ATT)) return SCPE_OK; /* attached? */
|
||||
uptr->USTAT = 0; /* clear status flags */
|
||||
tu_update_fs (FS_ATA | FS_SSC, drv); /* update status */
|
||||
return sim_tape_detach (uptr);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* pdp11_xu.c: DEUNA/DELUA ethernet controller simulator
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2003-2004, David T. Hittner
|
||||
Copyright (c) 2003-2005, David T. Hittner
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -52,6 +52,7 @@
|
||||
|
||||
Modification history:
|
||||
|
||||
10-Mar-05 RMS Fixed equality test in RCSTAT (from Mark Hittinger)
|
||||
16-Jan-04 DTH Added more info to SHOW MOD commands
|
||||
09-Jan-04 DTH Made XU floating address so that XUB will float correctly
|
||||
08-Jan-04 DTH Added system_id message
|
||||
@@ -783,7 +784,7 @@ int32 xu_command(CTLR* xu)
|
||||
if ((wstatus != SCPE_OK) || (wstatus2 != SCPE_OK) || (wstatus3 != SCPE_OK))
|
||||
return PCSR0_PCEI + 1;
|
||||
|
||||
if (fnc = FC_RCSTAT)
|
||||
if (fnc == FC_RCSTAT)
|
||||
xu->var->stat &= 0377; /* clear high byte */
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user