ALL: Standardize writelock behavior adding global UNIT_WLK & UNIT_WPRT

Historically this functionality was reimplemented within each
DEVICE simulator often with slightly different implementations
and inconsistencies.  Solving this globally within SCP required
changes in many places, but should henceforth be reasonably
managed.

As discussed in #1034
This commit is contained in:
Mark Pizzolato 2021-04-19 10:58:51 -07:00
parent 587b81bed4
commit a015e44c10
81 changed files with 413 additions and 467 deletions

View file

@ -99,10 +99,10 @@ UNIT ctc_unit = {
}; };
MTAB ctc_mod[] = { MTAB ctc_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enabled tape drive" }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock tape drive" }, &set_writelock, NULL, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "RQUEUE=n", NULL, { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "RQUEUE=n", NULL,
NULL, &ctc_show_rqueue, NULL, "Display Request Queue for card n" }, NULL, &ctc_show_rqueue, NULL, "Display Request Queue for card n" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "CQUEUE=n", NULL, { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "CQUEUE=n", NULL,
@ -365,7 +365,7 @@ static void ctc_cmd(uint8 cid,
break; break;
} }
if (ctc_unit.flags & UNIT_WLK) { if (ctc_unit.flags & UNIT_WPRT) {
cqe->opcode = CTC_RDONLY; cqe->opcode = CTC_RDONLY;
break; break;
} }
@ -489,7 +489,7 @@ static void ctc_cmd(uint8 cid,
break; break;
} }
if (ctc_unit.flags & UNIT_WLK) { if (ctc_unit.flags & UNIT_WPRT) {
cqe->opcode = CTC_RDONLY; cqe->opcode = CTC_RDONLY;
break; break;
} }

View file

@ -54,9 +54,6 @@
#include "sim_defs.h" #include "sim_defs.h"
#include "3b2_io.h" #include "3b2_io.h"
#define UNIT_V_WLK (DKUF_V_UF + 0) /* Write-locked tape */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define CTC_ID 0x0005 #define CTC_ID 0x0005
#define CTC_IPL 12 #define CTC_IPL 12
#define CTC_VERSION 1 #define CTC_VERSION 1

View file

@ -126,10 +126,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
"Write ring in place"}, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
"no Write ring in place"}, &set_writelock, NULL, NULL, "no Write ring in place" },
{MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT", {MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL,
"Set/Display tape format (SIMH, E11, TPC, P7B)" }, "Set/Display tape format (SIMH, E11, TPC, P7B)" },

View file

@ -110,14 +110,12 @@
* Private unit flags * Private unit flags
*/ */
#define UNIT_V_7TRACK (MTUF_V_UF + 0) /* 7-track tape transport */ #define UNIT_V_7TRACK (MTUF_V_UF + 0) /* 7-track tape transport */
#define UNIT_V_WPROT (MTUF_V_UF + 1) /* Write protected */
#define UNIT_V_854 (UNIT_V_UF + 0) /* 854 vs. 853 disk pack drive */ #define UNIT_V_854 (UNIT_V_UF + 0) /* 854 vs. 853 disk pack drive */
#define UNIT_V_856_4 (UNIT_V_UF + 0) /* 856_4 vs. 856_2 drive */ #define UNIT_V_856_4 (UNIT_V_UF + 0) /* 856_4 vs. 856_2 drive */
#define UNIT_V_DRMSIZE (UNIT_V_UF + 0) /* 1752 drum memory assignment */ #define UNIT_V_DRMSIZE (UNIT_V_UF + 0) /* 1752 drum memory assignment */
#define UNIT_7TRACK (1 << UNIT_V_7TRACK) #define UNIT_7TRACK (1 << UNIT_V_7TRACK)
#define UNIT_WPROT (1 << UNIT_V_WPROT)
#define UNIT_854 (1 << UNIT_V_854) #define UNIT_854 (1 << UNIT_V_854)
#define UNIT_856_4 (1 << UNIT_V_856_4) #define UNIT_856_4 (1 << UNIT_V_856_4)
#define UNIT_DRMSIZE (1 << UNIT_V_DRMSIZE) #define UNIT_DRMSIZE (1 << UNIT_V_DRMSIZE)

View file

@ -291,7 +291,6 @@ t_stat mt_reset(DEVICE *);
t_stat mt_boot(int32, DEVICE *); t_stat mt_boot(int32, DEVICE *);
t_stat mt_attach(UNIT *, CONST char *); t_stat mt_attach(UNIT *, CONST char *);
t_stat mt_detach(UNIT *); t_stat mt_detach(UNIT *);
t_stat mt_vlock(UNIT *, int32 val, CONST char *cptr, void *desc);
void MTstate(const char *, DEVICE *, IO_DEVICE *); void MTstate(const char *, DEVICE *, IO_DEVICE *);
void MTclear(DEVICE *); void MTclear(DEVICE *);
@ -483,10 +482,10 @@ MTAB mt_mod[] = {
&mt_set_type, &mt_show_type, NULL, "Set/Display magtape controller type" }, &mt_set_type, &mt_show_type, NULL, "Set/Display magtape controller type" },
{ MTAB_XTD|MTAB_VDV, 0, "EQUIPMENT", "EQUIPMENT=hexAddress", { MTAB_XTD|MTAB_VDV, 0, "EQUIPMENT", "EQUIPMENT=hexAddress",
&set_equipment, &show_addr, NULL, "Set/Display equipment address" }, &set_equipment, &show_addr, NULL, "Set/Display equipment address" },
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
&mt_vlock, NULL, NULL, "Mark transport as write enabled" }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&mt_vlock, NULL, NULL, "Mark transport as writed locked" }, &set_writelock, NULL, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Define tape format" }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Define tape format" },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",
@ -1490,9 +1489,9 @@ t_stat mt_attach(UNIT *uptr, CONST char *cptr)
if (r != SCPE_OK) if (r != SCPE_OK)
return r; return r;
uptr->flags &= ~UNIT_WPROT; uptr->flags &= ~UNIT_WPRT;
if (sim_switches & SWMASK('R')) if (sim_switches & SWMASK('R'))
uptr->flags |= UNIT_WPROT; uptr->flags |= UNIT_WPRT;
uptr->DENS = IO_ST2_800; uptr->DENS = IO_ST2_800;
@ -1501,7 +1500,7 @@ t_stat mt_attach(UNIT *uptr, CONST char *cptr)
*/ */
if (MTdev.iod_unit == uptr) { if (MTdev.iod_unit == uptr) {
MTdev.STATUS2 = uptr->DENS & (IO_ST2_556 | IO_ST2_800); MTdev.STATUS2 = uptr->DENS & (IO_ST2_556 | IO_ST2_800);
if ((uptr->flags & UNIT_WPROT) != 0) if ((uptr->flags & UNIT_WPRT) != 0)
MTdev.STATUS2 &= ~IO_ST2_WENABLE; MTdev.STATUS2 &= ~IO_ST2_WENABLE;
else MTdev.STATUS2 |= IO_ST2_WENABLE; else MTdev.STATUS2 |= IO_ST2_WENABLE;
if ((uptr->flags & UNIT_7TRACK) != 0) if ((uptr->flags & UNIT_7TRACK) != 0)
@ -1531,17 +1530,6 @@ t_stat mt_detach(UNIT *uptr)
return st; return st;
} }
/* Write lock/enable routine */
t_stat mt_vlock(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
if (((uptr->flags & UNIT_ATT) != 0) && (val || sim_tape_wrp(uptr)))
uptr->flags |= UNIT_WPROT;
else uptr->flags &= ~UNIT_WPROT;
return SCPE_OK;
}
/* /*
* Perform a "Clear Controller" operation. Basically this is similar to a * Perform a "Clear Controller" operation. Basically this is similar to a
* device reset except it does not forget the currently selected transport. * device reset except it does not forget the currently selected transport.
@ -1564,7 +1552,7 @@ void MTclear(DEVICE *dptr)
fw_setForced(&MTdev, IO_ST_READY); fw_setForced(&MTdev, IO_ST_READY);
MTdev.STATUS2 = uptr->DENS & (IO_ST2_556 | IO_ST2_800); MTdev.STATUS2 = uptr->DENS & (IO_ST2_556 | IO_ST2_800);
if ((uptr->flags & UNIT_WPROT) != 0) if ((uptr->flags & UNIT_WPRT) != 0)
MTdev.STATUS2 &= ~IO_ST2_WENABLE; MTdev.STATUS2 &= ~IO_ST2_WENABLE;
else MTdev.STATUS2 |= IO_ST2_WENABLE; else MTdev.STATUS2 |= IO_ST2_WENABLE;
if ((uptr->flags & UNIT_7TRACK) != 0) if ((uptr->flags & UNIT_7TRACK) != 0)
@ -1999,7 +1987,7 @@ enum IOstatus MTout(IO_DEVICE *iod, uint8 reg)
* Make sure STATUS2 values are consistent with actual drive status. * Make sure STATUS2 values are consistent with actual drive status.
*/ */
MTdev.STATUS2 = uptr->DENS & (IO_ST2_556 | IO_ST2_800); MTdev.STATUS2 = uptr->DENS & (IO_ST2_556 | IO_ST2_800);
if ((uptr->flags & UNIT_WPROT) != 0) if ((uptr->flags & UNIT_WPRT) != 0)
MTdev.STATUS2 &= ~IO_ST2_WENABLE; MTdev.STATUS2 &= ~IO_ST2_WENABLE;
else MTdev.STATUS2 |= IO_ST2_WENABLE; else MTdev.STATUS2 |= IO_ST2_WENABLE;
if ((uptr->flags & UNIT_7TRACK) != 0) if ((uptr->flags & UNIT_7TRACK) != 0)

View file

@ -73,11 +73,8 @@
#include "h316_defs.h" #include "h316_defs.h"
#include <math.h> #include <math.h>
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define FNC u3 /* saved function */ #define FNC u3 /* saved function */
#define CYL u4 /* actual cylinder */ #define CYL u4 /* actual cylinder */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */
#define DP_TRKLEN 2048 /* track length, words */ #define DP_TRKLEN 2048 /* track length, words */
#define DP_NUMDRV 8 /* max # drives */ #define DP_NUMDRV 8 /* max # drives */
#define DP_NUMTYP 3 /* # controller types */ #define DP_NUMTYP 3 /* # controller types */
@ -328,8 +325,10 @@ REG dp_reg[] = {
}; };
MTAB dp_mod[] = { MTAB dp_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ MTAB_XTD | MTAB_VDV, TYPE_4623, NULL, "4623", { MTAB_XTD | MTAB_VDV, TYPE_4623, NULL, "4623",
&dp_settype, NULL, NULL }, &dp_settype, NULL, NULL },
{ MTAB_XTD | MTAB_VDV, TYPE_4651, NULL, "4651", { MTAB_XTD | MTAB_VDV, TYPE_4651, NULL, "4651",

View file

@ -155,8 +155,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -73,16 +73,14 @@
/* Unit flags and accessors */ /* Unit flags and accessors */
#define UNIT_V_MODEL (UNIT_V_UF + 0) /* bits 1-0: model ID */ #define UNIT_V_MODEL (UNIT_V_UF + 0) /* bits 1-0: model ID */
#define UNIT_V_WLK (UNIT_V_UF + 2) /* bits 2-2: write locked (protect switch) */ #define UNIT_V_UNLOAD (UNIT_V_UF + 2) /* bits 2-2: heads unloaded */
#define UNIT_V_UNLOAD (UNIT_V_UF + 3) /* bits 3-3: heads unloaded */ #define UNIT_V_FMT (UNIT_V_UF + 3) /* bits 3-3: format enabled */
#define UNIT_V_FMT (UNIT_V_UF + 4) /* bits 4-4: format enabled */ #define UNIT_V_AUTO (UNIT_V_UF + 4) /* bits 4-4: autosize */
#define UNIT_V_AUTO (UNIT_V_UF + 5) /* bits 5-5: autosize */ #define DL_V_UF (UNIT_V_UF + 5) /* first free unit flag bit */
#define DL_V_UF (UNIT_V_UF + 6) /* first free unit flag bit */
#define UNIT_M_MODEL 03 /* model ID mask */ #define UNIT_M_MODEL 03 /* model ID mask */
#define UNIT_MODEL (UNIT_M_MODEL << UNIT_V_MODEL) #define UNIT_MODEL (UNIT_M_MODEL << UNIT_V_MODEL)
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_UNLOAD (1 << UNIT_V_UNLOAD) #define UNIT_UNLOAD (1 << UNIT_V_UNLOAD)
#define UNIT_FMT (1 << UNIT_V_FMT) #define UNIT_FMT (1 << UNIT_V_FMT)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)

View file

@ -235,13 +235,10 @@
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_UNLOAD (UNIT_V_UF + 0) /* heads unloaded */
#define UNIT_V_UNLOAD (UNIT_V_UF + 1) /* heads unloaded */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_UNLOAD (1 << UNIT_V_UNLOAD) #define UNIT_UNLOAD (1 << UNIT_V_UNLOAD)
#define FNC u3 /* saved function */ #define FNC u3 /* saved function */
#define DRV u4 /* drive number (DC) */ #define DRV u4 /* drive number (DC) */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */
#define DP_N_NUMWD 7 #define DP_N_NUMWD 7
#define DP_NUMWD (1 << DP_N_NUMWD) /* words/sector */ #define DP_NUMWD (1 << DP_N_NUMWD) /* words/sector */

View file

@ -98,13 +98,10 @@
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */
#define UNIT_V_UNLOAD (UNIT_V_UF + 1) /* heads unloaded */ #define UNIT_V_UNLOAD (UNIT_V_UF + 1) /* heads unloaded */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_UNLOAD (1 << UNIT_V_UNLOAD) #define UNIT_UNLOAD (1 << UNIT_V_UNLOAD)
#define FNC u3 /* saved function */ #define FNC u3 /* saved function */
#define DRV u4 /* drive number (DC) */ #define DRV u4 /* drive number (DC) */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */
#define DQ_N_NUMWD 7 #define DQ_N_NUMWD 7
#define DQ_NUMWD (1 << DQ_N_NUMWD) /* words/sector */ #define DQ_NUMWD (1 << DQ_N_NUMWD) /* words/sector */

View file

@ -158,8 +158,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write lock tape drive" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -72,8 +72,8 @@ UNIT mt_unit[6] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write ring in place"}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", &set_writelock, &show_writelock, NULL, "Write ring in place" },
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "No write ring in place"}, { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", &set_writelock, NULL, NULL, "no Write ring in place" },
{MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, {MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL,
"Set/Display tape format (SIMH, E11, TPC, P7B)"}, "Set/Display tape format (SIMH, E11, TPC, P7B)"},
{MTAB_XTD | MTAB_VUN, 0, "LENGTH", "LENGTH", &mt_set_len, &mt_show_len, NULL, {MTAB_XTD | MTAB_VUN, 0, "LENGTH", "LENGTH", &mt_set_len, &mt_show_len, NULL,

View file

@ -178,10 +178,10 @@ UNIT hta_unit[] = {
}; };
MTAB ht_mod[] = { MTAB ht_mod[] = {
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
"Write ring in place"}, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
"no Write ring in place"}, &set_writelock, NULL, NULL, "no Write ring in place" },
{MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT", {MTAB_XTD | MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL,
"Set/Display tape format (SIMH, E11, TPC, P7B)" }, "Set/Display tape format (SIMH, E11, TPC, P7B)" },

View file

@ -238,10 +238,10 @@ UNIT mta_unit[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
"Write ring in place"}, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
"No write ring in place"}, &set_writelock, NULL, NULL, "no Write ring in place" },
{MTUF_LDN, 0, "high density", "HIGH", &mt_tape_density, NULL, NULL, {MTUF_LDN, 0, "high density", "HIGH", &mt_tape_density, NULL, NULL,
"556 BPI"}, "556 BPI"},
{MTUF_LDN, MTUF_LDN, "low density", "LOW", &mt_tape_density, NULL, NULL, {MTUF_LDN, MTUF_LDN, "low density", "LOW", &mt_tape_density, NULL, NULL,

View file

@ -96,8 +96,10 @@ extern uint32 chrono_rd (uint8 *buf, uint32 bufsiz);
DIB mt_dib = { &mt_chsel, &mt_chwr }; DIB mt_dib = { &mt_chsel, &mt_chwr };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTUF_LDN, 0, "high density", "HIGH", NULL }, { MTUF_LDN, 0, "high density", "HIGH", NULL },
{ MTUF_LDN, MTUF_LDN, "low density", "LOW", NULL }, { MTUF_LDN, MTUF_LDN, "low density", "LOW", NULL },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",

View file

@ -37,18 +37,15 @@
#define DP_NUMBY 256 /* bytes/sector */ #define DP_NUMBY 256 /* bytes/sector */
#define DP_NUMSC 24 /* sectors/track */ #define DP_NUMSC 24 /* sectors/track */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */
#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */
#define UNIT_M_DTYPE 0x1 #define UNIT_M_DTYPE 0x1
#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize */ #define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define CYL u3 /* current cylinder */ #define CYL u3 /* current cylinder */
#define STD u4 /* drive status */ #define STD u4 /* drive status */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Controller status */ /* Controller status */
@ -220,8 +217,10 @@ REG dp_reg[] = {
}; };
MTAB dp_mod[] = { MTAB dp_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ (UNIT_DTYPE+UNIT_ATT), (TYPE_2315 << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE+UNIT_ATT), (TYPE_2315 << UNIT_V_DTYPE) + UNIT_ATT,
"2315", NULL, NULL }, "2315", NULL, NULL },
{ (UNIT_DTYPE+UNIT_ATT), (TYPE_5440 << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE+UNIT_ATT), (TYPE_5440 << UNIT_V_DTYPE) + UNIT_ATT,

View file

@ -45,9 +45,6 @@
#define FD_NUMLRN (FD_NUMTR * FD_NUMSC) /* LRNs/disk */ #define FD_NUMLRN (FD_NUMTR * FD_NUMSC) /* LRNs/disk */
#define FD_SIZE (FD_NUMLRN * FD_NUMBY) /* bytes/disk */ #define FD_SIZE (FD_NUMLRN * FD_NUMBY) /* bytes/disk */
#define FD_NUMDR 4 /* drives/controller */ #define FD_NUMDR 4 /* drives/controller */
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define LRN u3 /* last LRN */ #define LRN u3 /* last LRN */
#define FNC u4 /* last function */ #define FNC u4 /* last function */
#define GET_DA(x) (((x) - 1) * FD_NUMBY) #define GET_DA(x) (((x) - 1) * FD_NUMBY)
@ -186,8 +183,10 @@ REG fd_reg[] = {
}; };
MTAB fd_mod[] = { MTAB fd_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO", { MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO",
&set_dev, &show_dev, NULL }, &set_dev, &show_dev, NULL },
{ 0 } { 0 }

View file

@ -39,11 +39,9 @@
#define IDC_NUMBY 256 /* bytes/sector */ #define IDC_NUMBY 256 /* bytes/sector */
#define IDC_NUMSC 64 /* sectors/track */ #define IDC_NUMSC 64 /* sectors/track */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */
#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */
#define UNIT_M_DTYPE 0x7 #define UNIT_M_DTYPE 0x7
#define UNIT_V_AUTO (UNIT_V_UF + 4) /* autosize */ #define UNIT_V_AUTO (UNIT_V_UF + 4) /* autosize */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
@ -52,7 +50,6 @@
#define HD u4 /* current head */ #define HD u4 /* current head */
#define STD buf /* drive status */ #define STD buf /* drive status */
#define FNC wait /* function */ #define FNC wait /* function */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define IDC_DRVMASK ((1 << ID_NUMDR) - 1) /* drive bit mask */ #define IDC_DRVMASK ((1 << ID_NUMDR) - 1) /* drive bit mask */
#define IDC_DIRMASK (IDC_DRVMASK << (i_IDC + 1)) /* drive irq mask */ #define IDC_DIRMASK (IDC_DRVMASK << (i_IDC + 1)) /* drive irq mask */
@ -291,8 +288,10 @@ REG idc_reg[] = {
}; };
MTAB idc_mod[] = { MTAB idc_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ (UNIT_DTYPE+UNIT_ATT), (TYPE_MCCDD16 << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE+UNIT_ATT), (TYPE_MCCDD16 << UNIT_V_DTYPE) + UNIT_ATT,
"MCCDD16", NULL, NULL }, "MCCDD16", NULL, NULL },
{ (UNIT_DTYPE+UNIT_ATT), (TYPE_MCCDD48 << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE+UNIT_ATT), (TYPE_MCCDD48 << UNIT_V_DTYPE) + UNIT_ATT,

View file

@ -149,8 +149,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -67,17 +67,14 @@
#define DKP_NUMDR 4 /* #drives */ #define DKP_NUMDR 4 /* #drives */
#define DKP_NUMWD 256 /* words/sector */ #define DKP_NUMWD 256 /* words/sector */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */
#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */
#define UNIT_M_DTYPE 017 #define UNIT_M_DTYPE 017
#define UNIT_V_AUTO (UNIT_V_UF + 5) /* autosize */ #define UNIT_V_AUTO (UNIT_V_UF + 5) /* autosize */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define FUNC u3 /* function */ #define FUNC u3 /* function */
#define CYL u4 /* on cylinder */ #define CYL u4 /* on cylinder */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Unit, surface, sector, count register /* Unit, surface, sector, count register
@ -395,8 +392,10 @@ REG dkp_reg[] = {
}; };
MTAB dkp_mod[] = { MTAB dkp_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ (UNIT_DTYPE+UNIT_ATT), (TYPE_FLP << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE+UNIT_ATT), (TYPE_FLP << UNIT_V_DTYPE) + UNIT_ATT,
"6030 (floppy)", NULL, NULL }, "6030 (floppy)", NULL, NULL },
{ (UNIT_DTYPE+UNIT_ATT), (TYPE_DSDD << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE+UNIT_ATT), (TYPE_DSDD << UNIT_V_DTYPE) + UNIT_ATT,

View file

@ -224,8 +224,10 @@ REG mta_reg[] = {
}; };
MTAB mta_mod[] = { MTAB mta_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", &mta_vlock }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", &mta_vlock }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ 0 } { 0 }

View file

@ -94,17 +94,14 @@
#include "pdp1_defs.h" #include "pdp1_defs.h"
#define DT_NUMDR 8 /* #drives */ #define DT_NUMDR 8 /* #drives */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define STATE u3 /* unit state */ #define STATE u3 /* unit state */
#define LASTT u4 /* last time update */ #define LASTT u4 /* last time update */
#define DT_WC 030 /* word count */ #define DT_WC 030 /* word count */
#define DT_CA 031 /* current addr */ #define DT_CA 031 /* current addr */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -334,8 +331,10 @@ REG dt_reg[] = {
MTAB dt_mod[] = { MTAB dt_mod[] = {
{ MTAB_XTD|MTAB_VDV, 0, "SBSLVL", "SBSLVL", { MTAB_XTD|MTAB_VDV, 0, "SBSLVL", "SBSLVL",
&dev_set_sbs, &dev_show_sbs, (void *) &dt_sbs }, &dev_set_sbs, &dev_show_sbs, (void *) &dt_sbs },
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable tape drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL },
@ -385,8 +384,8 @@ if (pulse == 004) { /* MLC */
if ((uptr == NULL) || /* invalid? */ if ((uptr == NULL) || /* invalid? */
((uptr->flags) & UNIT_DIS) || /* disabled? */ ((uptr->flags) & UNIT_DIS) || /* disabled? */
(fnc >= FNC_WMRK) || /* write mark? */ (fnc >= FNC_WMRK) || /* write mark? */
((fnc == FNC_WRIT) && (uptr->flags & UNIT_WLK)) || ((fnc == FNC_WRIT) && (uptr->flags & UNIT_WPRT)) ||
((fnc == FNC_WALL) && (uptr->flags & UNIT_WLK))) ((fnc == FNC_WALL) && (uptr->flags & UNIT_WPRT)))
dt_seterr (uptr, DTB_SEL); /* select err */ dt_seterr (uptr, DTB_SEL); /* select err */
else dt_newsa (dtsa); else dt_newsa (dtsa);
} }
@ -1088,7 +1087,7 @@ if (sim_is_active (uptr)) {
} }
fbuf = (uint32 *) uptr->filebuf; /* file buffer */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */
if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */
sim_printf ("%s%d: writing buffer to file\n", sim_dname (&dt_dev), u); sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
if (uptr->flags & UNIT_8FMT) { /* 12b? */ if (uptr->flags & UNIT_8FMT) { /* 12b? */
for (ba = 0; ba < uptr->hwmark; ) { /* loop thru file */ for (ba = 0; ba < uptr->hwmark; ) { /* loop thru file */

View file

@ -24,9 +24,6 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define UNIT_V_FMT (UNIT_V_UF + 8) #define UNIT_V_FMT (UNIT_V_UF + 8)
#define UNIT_M_FMT 7 #define UNIT_M_FMT 7
#define GET_FMT(x) (((x) >> UNIT_V_FMT) & UNIT_M_FMT) #define GET_FMT(x) (((x) >> UNIT_V_FMT) & UNIT_M_FMT)

View file

@ -260,8 +260,10 @@ DIB dp_dib[] = {
MTAB dp_mod[] = { MTAB dp_mod[] = {
{UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{MTAB_XTD|MTAB_VDV, 0, NULL, "NOHEADERS", {MTAB_XTD|MTAB_VDV, 0, NULL, "NOHEADERS",
&dp_set_hdr, &dp_show_hdr, NULL, "Disable header writing"}, &dp_set_hdr, &dp_show_hdr, NULL, "Disable header writing"},
{MTAB_XTD|MTAB_VDV, DEV_WHDR, "write header", "HEADERS", {MTAB_XTD|MTAB_VDV, DEV_WHDR, "write header", "HEADERS",

View file

@ -91,13 +91,10 @@
#if (NUM_DEVS_DT > 0) #if (NUM_DEVS_DT > 0)
#define DT_DEVNUM 0320 #define DT_DEVNUM 0320
#define DT_NUMDR 8 /* #drives */ #define DT_NUMDR 8 /* #drives */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -320,8 +317,10 @@ REG dt_reg[] = {
}; };
MTAB dt_mod[] = { MTAB dt_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL },
@ -1234,6 +1233,7 @@ void dt_flush (UNIT* uptr)
uint32 ba, k, *fbuf; uint32 ba, k, *fbuf;
if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */ if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */
sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
fbuf = (uint32 *) uptr->filebuf; /* file buffer */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */
if (uptr->flags & UNIT_8FMT) { /* 12b? */ if (uptr->flags & UNIT_8FMT) { /* 12b? */
@ -1285,10 +1285,8 @@ t_stat dt_detach (UNIT* uptr)
sim_cancel (uptr); sim_cancel (uptr);
uptr->CMD = uptr->pos = 0; uptr->CMD = uptr->pos = 0;
} }
if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */
sim_printf ("%s%d: writing buffer to file\n", sim_dname (&dt_dev), u); dt_flush(uptr); /* end if hwmark */
dt_flush(uptr);
} /* end if hwmark */
free (uptr->filebuf); /* release buf */ free (uptr->filebuf); /* release buf */
uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */
uptr->filebuf = NULL; /* clear buf ptr */ uptr->filebuf = NULL; /* clear buf ptr */

View file

@ -178,8 +178,10 @@ UNIT mt_unit[] = {
DIB mt_dib = {MT_DEVNUM, 2, &mt_devio, NULL}; DIB mt_dib = {MT_DEVNUM, 2, &mt_devio, NULL};
MTAB mt_mod[] = { MTAB mt_mod[] = {
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{MTAB_XTD|MTAB_VDV|MTAB_VALR, MTDF_TYPEB, "TYPE", "TYPE", &mt_set_mta, &mt_show_mta}, {MTAB_XTD|MTAB_VDV|MTAB_VALR, MTDF_TYPEB, "TYPE", "TYPE", &mt_set_mta, &mt_show_mta},
{MTUF_7TRK, 0, "9T", "9T", NULL, NULL}, {MTUF_7TRK, 0, "9T", "9T", NULL, NULL},
{MTUF_7TRK, MTUF_7TRK, "7T", "7T", NULL, NULL}, {MTUF_7TRK, MTUF_7TRK, "7T", "7T", NULL, NULL},
@ -295,7 +297,7 @@ t_stat mt_devio(uint32 dev, uint64 *data) {
break; break;
case WRITE: case WRITE:
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
mt_status |= IDLE_UNIT|ILL_OPR|EOF_FLAG; mt_status |= IDLE_UNIT|ILL_OPR|EOF_FLAG;
break; break;
} }
@ -370,7 +372,7 @@ t_stat mt_devio(uint32 dev, uint64 *data) {
res |= SEVEN_CHAN; res |= SEVEN_CHAN;
if ((uptr->flags & UNIT_ATT) != 0 && (uptr->CNTRL & MT_MOTION) == 0) if ((uptr->flags & UNIT_ATT) != 0 && (uptr->CNTRL & MT_MOTION) == 0)
res |= IDLE_UNIT; res |= IDLE_UNIT;
if ((uptr->flags & MTUF_WLK) != 0) if ((uptr->flags & MTUF_WRP) != 0)
res |= WRITE_LOCK; res |= WRITE_LOCK;
if (sim_tape_bot(uptr)) if (sim_tape_bot(uptr))
res |= BOT_FLAG; res |= BOT_FLAG;
@ -800,7 +802,7 @@ t_stat mt_srv(UNIT * uptr)
break; break;
case WTM: case WTM:
if ((uptr->flags & MTUF_WLK) != 0) if ((uptr->flags & MTUF_WRP) != 0)
return mt_error(uptr, MTSE_WRP, dptr); return mt_error(uptr, MTSE_WRP, dptr);
if (uptr->CPOS == 0) { if (uptr->CPOS == 0) {
mt_status &= ~(IDLE_UNIT|BOT_FLAG|EOT_FLAG); mt_status &= ~(IDLE_UNIT|BOT_FLAG|EOT_FLAG);
@ -819,7 +821,7 @@ t_stat mt_srv(UNIT * uptr)
break; break;
case ERG: case ERG:
if ((uptr->flags & MTUF_WLK) != 0) if ((uptr->flags & MTUF_WRP) != 0)
return mt_error(uptr, MTSE_WRP, dptr); return mt_error(uptr, MTSE_WRP, dptr);
uptr->CNTRL &= ~MT_MOTION; uptr->CNTRL &= ~MT_MOTION;
mt_status &= ~(IDLE_UNIT|BOT_FLAG|EOT_FLAG); mt_status &= ~(IDLE_UNIT|BOT_FLAG|EOT_FLAG);

View file

@ -34,13 +34,10 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */
#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */
#define UNIT_M_DTYPE 1 #define UNIT_M_DTYPE 1
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -155,8 +152,10 @@ DIB rc_dib[] = {
}; };
MTAB rc_mod[] = { MTAB rc_mod[] = {
{UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{UNIT_DTYPE, (RD10_DTYPE << UNIT_V_DTYPE), "RD10", "RD10", &rc_set_type }, {UNIT_DTYPE, (RD10_DTYPE << UNIT_V_DTYPE), "RD10", "RD10", &rc_set_type },
{UNIT_DTYPE, (RM10_DTYPE << UNIT_V_DTYPE), "RM10", "RM10", &rc_set_type }, {UNIT_DTYPE, (RM10_DTYPE << UNIT_V_DTYPE), "RM10", "RM10", &rc_set_type },
{0} {0}

View file

@ -338,8 +338,10 @@ MTAB rp_mod[] = {
{MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type, {MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type,
NULL, "Sets controller to RH20"}, NULL, "Sets controller to RH20"},
#endif #endif
{UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{UNIT_DTYPE, (RP07_DTYPE << UNIT_V_DTYPE), "RP07", "RP07", &rp_set_type }, {UNIT_DTYPE, (RP07_DTYPE << UNIT_V_DTYPE), "RP07", "RP07", &rp_set_type },
{UNIT_DTYPE, (RP06_DTYPE << UNIT_V_DTYPE), "RP06", "RP06", &rp_set_type }, {UNIT_DTYPE, (RP06_DTYPE << UNIT_V_DTYPE), "RP06", "RP06", &rp_set_type },
{UNIT_DTYPE, (RP04_DTYPE << UNIT_V_DTYPE), "RP04", "RP04", &rp_set_type }, {UNIT_DTYPE, (RP04_DTYPE << UNIT_V_DTYPE), "RP04", "RP04", &rp_set_type },
@ -507,7 +509,7 @@ rp_write(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 data) {
case 000: /* control */ case 000: /* control */
sim_debug(DEBUG_DETAIL, dptr, "%s%o Status=%06o\n", dptr->name, unit, uptr->CMD); sim_debug(DEBUG_DETAIL, dptr, "%s%o Status=%06o\n", dptr->name, unit, uptr->CMD);
/* Set if drive not writable */ /* Set if drive not writable */
if (uptr->flags & UNIT_WLK) if (uptr->flags & UNIT_WPRT)
uptr->CMD |= DS_WRL; uptr->CMD |= DS_WRL;
/* If drive not ready don't do anything */ /* If drive not ready don't do anything */
if ((uptr->CMD & DS_DRY) == 0) { if ((uptr->CMD & DS_DRY) == 0) {
@ -1078,7 +1080,7 @@ t_stat rp_attach (UNIT *uptr, CONST char *cptr)
if (rh[ctlr].dev == rptr) if (rh[ctlr].dev == rptr)
break; break;
} }
if (uptr->flags & UNIT_WLK) if (uptr->flags & UNIT_WPRT)
uptr->CMD |= DS_WRL; uptr->CMD |= DS_WRL;
if (sim_switches & SIM_SW_REST) if (sim_switches & SIM_SW_REST)
return SCPE_OK; return SCPE_OK;

View file

@ -36,14 +36,11 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */
#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */
#define UNIT_M_DTYPE 7 #define UNIT_M_DTYPE 7
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define DTYPE(x) (((x) & UNIT_M_DTYPE) << UNIT_V_DTYPE) #define DTYPE(x) (((x) & UNIT_M_DTYPE) << UNIT_V_DTYPE)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -223,8 +220,10 @@ MTAB rs_mod[] = {
{MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type, {MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type,
NULL, "Sets controller to RH20"}, NULL, "Sets controller to RH20"},
#endif #endif
{UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{UNIT_DTYPE, (RS03_DTYPE << UNIT_V_DTYPE), "RS03", "RS03", &rs_set_type }, {UNIT_DTYPE, (RS03_DTYPE << UNIT_V_DTYPE), "RS03", "RS03", &rs_set_type },
{UNIT_DTYPE, (RS04_DTYPE << UNIT_V_DTYPE), "RS04", "RS04", &rs_set_type }, {UNIT_DTYPE, (RS04_DTYPE << UNIT_V_DTYPE), "RS04", "RS04", &rs_set_type },
{0} {0}
@ -289,7 +288,7 @@ rs_write(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 data) {
case 000: /* control */ case 000: /* control */
sim_debug(DEBUG_DETAIL, dptr, "%s%o Status=%06o\n", dptr->name, unit, uptr->CMD); sim_debug(DEBUG_DETAIL, dptr, "%s%o Status=%06o\n", dptr->name, unit, uptr->CMD);
/* Set if drive not writable */ /* Set if drive not writable */
if (uptr->flags & UNIT_WLK) if (uptr->flags & UNIT_WPRT)
uptr->CMD |= DS_WRL; uptr->CMD |= DS_WRL;
/* If drive not ready don't do anything */ /* If drive not ready don't do anything */
if ((uptr->CMD & DS_DRY) == 0) { if ((uptr->CMD & DS_DRY) == 0) {
@ -679,7 +678,7 @@ t_stat rs_attach (UNIT *uptr, CONST char *cptr)
if (rh[ctlr].dev == rstr) if (rh[ctlr].dev == rstr)
break; break;
} }
if (uptr->flags & UNIT_WLK) if (uptr->flags & UNIT_WPRT)
uptr->CMD |= DS_WRL; uptr->CMD |= DS_WRL;
if (sim_switches & SIM_SW_REST) if (sim_switches & SIM_SW_REST)
return SCPE_OK; return SCPE_OK;

View file

@ -202,8 +202,10 @@ MTAB tu_mod[] = {
{MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type, {MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type,
NULL, "Sets controller to RH20"}, NULL, "Sets controller to RH20"},
#endif #endif
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", {MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL}, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL},
{MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "LENGTH", "LENGTH", {MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "LENGTH", "LENGTH",
@ -387,7 +389,7 @@ tu_read(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 *data) {
temp |= DS_MOL; temp |= DS_MOL;
if (uptr->CMD & CS_TM) if (uptr->CMD & CS_TM)
temp |= DS_TM; temp |= DS_TM;
if (uptr->flags & MTUF_WLK) if (uptr->flags & MTUF_WRP)
temp |= DS_WRL; temp |= DS_WRL;
if ((uptr->CMD & (CS_MOTION|CS_PIP|CS1_GO)) == 0) if ((uptr->CMD & (CS_MOTION|CS_PIP|CS1_GO)) == 0)
temp |= DS_DRY; temp |= DS_DRY;
@ -662,7 +664,7 @@ t_stat tu_srv(UNIT * uptr)
rh_finish_op(rhc, 0); rh_finish_op(rhc, 0);
return SCPE_OK; return SCPE_OK;
} }
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
tu_error(uptr, MTSE_WRP); tu_error(uptr, MTSE_WRP);
rh_finish_op(rhc, 0); rh_finish_op(rhc, 0);
return SCPE_OK; return SCPE_OK;
@ -718,7 +720,7 @@ t_stat tu_srv(UNIT * uptr)
case FNC_WTM: case FNC_WTM:
uptr->CMD &= ~CS_PIP; uptr->CMD &= ~CS_PIP;
uptr->CMD |= CS_ATA; uptr->CMD |= CS_ATA;
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
tu_error(uptr, MTSE_WRP); tu_error(uptr, MTSE_WRP);
} else { } else {
tu_error(uptr, sim_tape_wrtmk(uptr)); tu_error(uptr, sim_tape_wrtmk(uptr));
@ -729,7 +731,7 @@ t_stat tu_srv(UNIT * uptr)
case FNC_ERASE: case FNC_ERASE:
uptr->CMD &= ~CS_PIP; uptr->CMD &= ~CS_PIP;
uptr->CMD |= CS_ATA; uptr->CMD |= CS_ATA;
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
tu_error(uptr, MTSE_WRP); tu_error(uptr, MTSE_WRP);
} else { } else {
tu_error(uptr, sim_tape_wrgap(uptr, 35)); tu_error(uptr, sim_tape_wrgap(uptr, 35));

View file

@ -84,18 +84,15 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK DKUF_V_WLK /* write locked */
#define UNIT_V_DTYPE (DKUF_V_UF + 0) /* disk type */ #define UNIT_V_DTYPE (DKUF_V_UF + 0) /* disk type */
#define UNIT_W_DTYPE 3 /* 3b disk type */ #define UNIT_W_DTYPE 3 /* 3b disk type */
#define UNIT_M_DTYPE 7 #define UNIT_M_DTYPE 7
#define UNIT_V_AUTO (UNIT_V_DTYPE + UNIT_W_DTYPE) /* autosize */ #define UNIT_V_AUTO (UNIT_V_DTYPE + UNIT_W_DTYPE) /* autosize */
#define UNIT_V_UTS (UNIT_V_AUTO + 1) /* Up to speed */ #define UNIT_V_UTS (UNIT_V_AUTO + 1) /* Up to speed */
#define UNIT_UTS (1u << UNIT_V_UTS) #define UNIT_UTS (1u << UNIT_V_UTS)
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -449,10 +446,10 @@ REG rp_reg[] = {
}; };
MTAB rp_mod[] = { MTAB rp_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable disk drive" },
{ MTAB_XTD|MTAB_VUN, RM03_DTYPE, NULL, "RM03", { MTAB_XTD|MTAB_VUN, RM03_DTYPE, NULL, "RM03",
&rp_set_type, NULL, NULL, "Set RM03 Disk Type" }, &rp_set_type, NULL, NULL, "Set RM03 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RP04_DTYPE, NULL, "RP04", { MTAB_XTD|MTAB_VUN, RP04_DTYPE, NULL, "RP04",

View file

@ -400,8 +400,10 @@ REG tu_reg[] = {
}; };
MTAB tu_mod[] = { MTAB tu_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -34,13 +34,10 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */
#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */
#define UNIT_M_DTYPE 1 #define UNIT_M_DTYPE 1
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -164,8 +161,10 @@ DIB dsk_dib[] = {
}; };
MTAB dsk_mod[] = { MTAB dsk_mod[] = {
{UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "DCT", "DCT", { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "DCT", "DCT",
&dsk_set_dct, &dsk_show_dct, NULL}, &dsk_set_dct, &dsk_show_dct, NULL},
{0} {0}
@ -197,7 +196,7 @@ dsk_devio(uint32 dev, uint64 *data) {
res |= ((uint64)(dsk_status & RMASK)); res |= ((uint64)(dsk_status & RMASK));
if ((uptr->flags & UNIT_ATT) == 0) if ((uptr->flags & UNIT_ATT) == 0)
res |= OPR; res |= OPR;
if (uptr->flags & UNIT_WLK) if (uptr->flags & UNIT_WPRT)
res |= WLE; res |= WLE;
*data = res; *data = res;
sim_debug(DEBUG_CONI, &dsk_dev, "DSK %03o CONI %012llo PC=%o\n", dev, sim_debug(DEBUG_CONI, &dsk_dev, "DSK %03o CONI %012llo PC=%o\n", dev,
@ -270,7 +269,7 @@ dsk_svc (UNIT *uptr)
/* Check if we need to seek */ /* Check if we need to seek */
if (dsk_octflp == SCE) { if (dsk_octflp == SCE) {
if ((dsk_cmd & CMD) == WR_CMD && (uptr->flags & UNIT_WLK) == 0) { if ((dsk_cmd & CMD) == WR_CMD && (uptr->flags & UNIT_WPRT) == 0) {
/* Write the block */ /* Write the block */
int da; int da;
for (; uptr->DATAPTR < DSK_WDS; uptr->DATAPTR++) for (; uptr->DATAPTR < DSK_WDS; uptr->DATAPTR++)
@ -313,7 +312,7 @@ dsk_svc (UNIT *uptr)
} else { } else {
sim_debug(DEBUG_DETAIL, dptr, "DSK %d Write %012llo %d\n", sim_debug(DEBUG_DETAIL, dptr, "DSK %d Write %012llo %d\n",
ctlr, data, uptr->DATAPTR); ctlr, data, uptr->DATAPTR);
if ((uptr->flags & UNIT_WLK) != 0) if ((uptr->flags & UNIT_WPRT) != 0)
dsk_status |= DCE|PER|FER; dsk_status |= DCE|PER|FER;
dsk_buf[uptr->DATAPTR] = data; dsk_buf[uptr->DATAPTR] = data;
} }
@ -346,7 +345,7 @@ dsk_svc (UNIT *uptr)
dsk_buf[wc] = 0; dsk_buf[wc] = 0;
} else if (dsk_cmd & WR_CMD) { } else if (dsk_cmd & WR_CMD) {
/* Check if we can write disk */ /* Check if we can write disk */
if (uptr->flags & UNIT_WLK) { if (uptr->flags & UNIT_WPRT) {
dsk_status |= CME|FER; dsk_status |= CME|FER;
} }
} }
@ -393,7 +392,7 @@ dsk_svc (UNIT *uptr)
if (dsk_octflp == SNA) { if (dsk_octflp == SNA) {
sim_debug(DEBUG_DETAIL, dptr, "DSK %d Sna\n", ctlr); sim_debug(DEBUG_DETAIL, dptr, "DSK %d Sna\n", ctlr);
dsk_octflp = ADT; dsk_octflp = ADT;
if (uptr->flags & UNIT_WLK) if (uptr->flags & UNIT_WPRT)
dsk_status |= WLE|FER; dsk_status |= WLE|FER;
} }

View file

@ -93,13 +93,10 @@
#if (NUM_DEVS_DTC > 0) #if (NUM_DEVS_DTC > 0)
#define DTC_DEVNUM 0210 #define DTC_DEVNUM 0210
#define DTC_NUMDR 8 /* #drives */ #define DTC_NUMDR 8 /* #drives */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -295,8 +292,10 @@ REG dtc_reg[] = {
}; };
MTAB dtc_mod[] = { MTAB dtc_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable tape drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL },
@ -1247,6 +1246,7 @@ dtc_flush (UNIT* uptr)
uint32 ba, k, *fbuf; uint32 ba, k, *fbuf;
if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */ if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */
sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
fbuf = (uint32 *) uptr->filebuf; /* file buffer */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
if (uptr->flags & UNIT_8FMT) { /* 12b? */ if (uptr->flags & UNIT_8FMT) { /* 12b? */
@ -1289,10 +1289,8 @@ dtc_detach (UNIT* uptr)
sim_cancel (uptr); sim_cancel (uptr);
uptr->CMD = uptr->pos = 0; uptr->CMD = uptr->pos = 0;
} }
if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */
sim_printf ("%s%d: writing buffer to file\n", sim_dname (&dtc_dev), u); dtc_flush (uptr); /* end if hwmark */
dtc_flush (uptr);
} /* end if hwmark */
free (uptr->filebuf); /* release buf */ free (uptr->filebuf); /* release buf */
uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */
uptr->filebuf = NULL; /* clear buf ptr */ uptr->filebuf = NULL; /* clear buf ptr */

View file

@ -205,8 +205,10 @@ UNIT mtc_unit[] = {
DIB mtc_dib = {MTC_DEVCTL, 3, &mtc_devio, NULL}; DIB mtc_dib = {MTC_DEVCTL, 3, &mtc_devio, NULL};
MTAB mtc_mod[] = { MTAB mtc_mod[] = {
{MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL}, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL}, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{MTUF_7TRK, 0, "9T", "9T", NULL, NULL}, {MTUF_7TRK, 0, "9T", "9T", NULL, NULL},
{MTUF_7TRK, MTUF_7TRK, "7T", "7T", NULL, NULL}, {MTUF_7TRK, MTUF_7TRK, "7T", "7T", NULL, NULL},
{MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", {MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
@ -286,7 +288,7 @@ mtc_devio(uint32 dev, uint64 *data) {
case CONI: case CONI:
uptr = &mtc_unit[mtc_sel_unit]; uptr = &mtc_unit[mtc_sel_unit];
res = mtc_status | (uint64)(uptr->STATUS); res = mtc_status | (uint64)(uptr->STATUS);
if ((uptr->flags & MTUF_WLK) != 0) if ((uptr->flags & MTUF_WRP) != 0)
res |= WRITE_LOCK; res |= WRITE_LOCK;
if (sim_tape_bot(uptr)) if (sim_tape_bot(uptr))
res |= BOT_FLAG; res |= BOT_FLAG;
@ -668,7 +670,7 @@ mtc_srv(UNIT * uptr)
/* Writing and Type A, request first data word */ /* Writing and Type A, request first data word */
if (uptr->CNTRL & MTC_START) { if (uptr->CNTRL & MTC_START) {
uptr->CNTRL &= ~MTC_START; uptr->CNTRL &= ~MTC_START;
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
uptr->STATUS |= ILL_OPR; uptr->STATUS |= ILL_OPR;
break; break;
} }
@ -725,7 +727,7 @@ mtc_srv(UNIT * uptr)
if (uptr->CNTRL & MTC_START) { if (uptr->CNTRL & MTC_START) {
sim_debug(DEBUG_DETAIL, dptr, "MTC%o WTM\n", unit); sim_debug(DEBUG_DETAIL, dptr, "MTC%o WTM\n", unit);
uptr->CNTRL &= ~MTC_START; uptr->CNTRL &= ~MTC_START;
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
uptr->STATUS |= ILL_OPR; uptr->STATUS |= ILL_OPR;
mtc_status |= (EOR_FLAG); mtc_status |= (EOR_FLAG);
break; break;
@ -743,7 +745,7 @@ mtc_srv(UNIT * uptr)
if (uptr->CNTRL & MTC_START) { if (uptr->CNTRL & MTC_START) {
sim_debug(DEBUG_DETAIL, dptr, "MTC%o ERG\n", unit); sim_debug(DEBUG_DETAIL, dptr, "MTC%o ERG\n", unit);
uptr->CNTRL &= ~MTC_START; uptr->CNTRL &= ~MTC_START;
if ((uptr->flags & MTUF_WLK) != 0) { if ((uptr->flags & MTUF_WRP) != 0) {
uptr->STATUS |= ILL_OPR; uptr->STATUS |= ILL_OPR;
mtc_status |= (EOR_FLAG); mtc_status |= (EOR_FLAG);
break; break;

View file

@ -98,17 +98,14 @@ static struct drvtyp drv_tab[] = {
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK DKUF_V_WLK /* write locked */
#define UNIT_V_DTYPE (DKUF_V_UF + 0) /* disk type */ #define UNIT_V_DTYPE (DKUF_V_UF + 0) /* disk type */
#define UNIT_V_AUTO (UNIT_V_DTYPE + 1) /* autosize */ #define UNIT_V_AUTO (UNIT_V_DTYPE + 1) /* autosize */
#define UNIT_V_DUMMY (UNIT_V_AUTO + 1) /* dummy flag */ #define UNIT_V_DUMMY (UNIT_V_AUTO + 1) /* dummy flag */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (1 << UNIT_V_DTYPE) #define UNIT_DTYPE (1 << UNIT_V_DTYPE)
#define UNIT_RK06 (0 << UNIT_V_DTYPE) #define UNIT_RK06 (0 << UNIT_V_DTYPE)
#define UNIT_RK07 (1 << UNIT_V_DTYPE) #define UNIT_RK07 (1 << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define UNIT_DUMMY (1 << UNIT_V_DUMMY) #define UNIT_DUMMY (1 << UNIT_V_DUMMY)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & 1) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & 1)
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -664,10 +661,10 @@ REG hk_reg[] = {
}; };
MTAB hk_mod[] = { MTAB hk_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable tape drive" },
{ UNIT_DUMMY, 0, NULL, "BADBLOCK", { UNIT_DUMMY, 0, NULL, "BADBLOCK",
&hk_set_bad, NULL, NULL, "write bad block table on last track" }, &hk_set_bad, NULL, NULL, "write bad block table on last track" },
{ MTAB_XTD|MTAB_VUN, 0, NULL, "RK06", { MTAB_XTD|MTAB_VUN, 0, NULL, "RK06",

View file

@ -127,11 +127,9 @@ static struct drvtyp drv_tab[] = {
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_HWLK (DKUF_V_WLK + 0) /* hwre write lock */
#define UNIT_V_SWLK (DKUF_V_UF + 0) /* swre write lock */ #define UNIT_V_SWLK (DKUF_V_UF + 0) /* swre write lock */
#define UNIT_HWLK (1u << UNIT_V_HWLK) #define UNIT_HWLK UNIT_WPRT
#define UNIT_SWLK (1u << UNIT_V_SWLK) #define UNIT_SWLK (1u << UNIT_V_SWLK)
#define UNIT_WPRT (UNIT_HWLK|UNIT_SWLK|UNIT_RO) /* write prot */
#define GET_DTYPE(x) (0) #define GET_DTYPE(x) (0)
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -425,10 +423,10 @@ REG rk_reg[] = {
}; };
MTAB rk_mod[] = { MTAB rk_mod[] = {
{ UNIT_HWLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 0, "TYPE", NULL, { MTAB_XTD|MTAB_VUN, 0, "TYPE", NULL,
NULL, &rk_show_type, NULL, "Display device type" }, NULL, &rk_show_type, NULL, "Display device type" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "FORMAT", "FORMAT={AUTO|SIMH|VHD|RAW}", { MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "FORMAT", "FORMAT={AUTO|SIMH|VHD|RAW}",
@ -480,7 +478,7 @@ switch ((PA >> 1) & 07) { /* decode PA<3:1> */
rkds = rkds | RKDS_RDY; rkds = rkds | RKDS_RDY;
if (!sim_is_active (uptr)) /* idle? */ if (!sim_is_active (uptr)) /* idle? */
rkds = rkds | RKDS_RWS; rkds = rkds | RKDS_RWS;
if (uptr->flags & UNIT_WPRT) /* write locked? */ if (uptr->flags & (UNIT_HWLK|UNIT_SWLK)) /* write locked? */
rkds = rkds | RKDS_WLK; rkds = rkds | RKDS_WLK;
if (GET_SECT (rkda) == (rkds & RKDS_SC)) if (GET_SECT (rkda) == (rkds & RKDS_SC))
rkds = rkds | RKDS_ON_SC; rkds = rkds | RKDS_ON_SC;
@ -621,7 +619,7 @@ if ((rkcs & RKCS_FMT) && /* format and */
return; return;
} }
if ((func == RKCS_WRITE) && /* write and locked? */ if ((func == RKCS_WRITE) && /* write and locked? */
(uptr->flags & UNIT_WPRT)) { (uptr->flags & (UNIT_HWLK|UNIT_SWLK))) {
rk_set_done (RKER_WLK); rk_set_done (RKER_WLK);
return; return;
} }

View file

@ -132,7 +132,6 @@ static struct drvtyp drv_tab[] = {
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK DKUF_V_WLK /* hwre write lock */
#define UNIT_V_RL02 (DKUF_V_UF + 0) /* RL01 vs RL02 */ #define UNIT_V_RL02 (DKUF_V_UF + 0) /* RL01 vs RL02 */
#define UNIT_V_AUTO (UNIT_V_RL02 + 1) /* autosize enable */ #define UNIT_V_AUTO (UNIT_V_RL02 + 1) /* autosize enable */
#define UNIT_V_DUMMY (UNIT_V_AUTO + 1) /* dummy flag, for SET BADBLOCK */ #define UNIT_V_DUMMY (UNIT_V_AUTO + 1) /* dummy flag, for SET BADBLOCK */
@ -141,10 +140,8 @@ static struct drvtyp drv_tab[] = {
#define UNIT_BRUSH (1u << UNIT_V_BRUSH) #define UNIT_BRUSH (1u << UNIT_V_BRUSH)
#define UNIT_OFFL (1u << UNIT_V_OFFL) #define UNIT_OFFL (1u << UNIT_V_OFFL)
#define UNIT_DUMMY (1u << UNIT_V_DUMMY) #define UNIT_DUMMY (1u << UNIT_V_DUMMY)
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_RL02 (1u << UNIT_V_RL02) #define UNIT_RL02 (1u << UNIT_V_RL02)
#define UNIT_AUTO (1u << UNIT_V_AUTO) #define UNIT_AUTO (1u << UNIT_V_AUTO)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protected */
#define GET_DTYPE(x) (((x) >> UNIT_V_RL02) & 1) #define GET_DTYPE(x) (((x) >> UNIT_V_RL02) & 1)
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -374,10 +371,10 @@ static const MTAB rl_mod[] = {
&rl_set_load, NULL, NULL, "Unload drive" }, &rl_set_load, NULL, NULL, "Unload drive" },
{ MTAB_XTD|MTAB_VUN|MTAB_NMO, 0, "DSTATE", NULL, { MTAB_XTD|MTAB_VUN|MTAB_NMO, 0, "DSTATE", NULL,
NULL, &rl_show_dstate, NULL, "Display drive state" }, NULL, &rl_show_dstate, NULL, "Display drive state" },
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable disk drive" },
{ UNIT_DUMMY, 0, NULL, "BADBLOCK", { UNIT_DUMMY, 0, NULL, "BADBLOCK",
&rl_set_bad, NULL, NULL, "Write bad block table on last track" }, &rl_set_bad, NULL, NULL, "Write bad block table on last track" },
{ MTAB_XTD|MTAB_VUN, 0, NULL, "RL01", { MTAB_XTD|MTAB_VUN, 0, NULL, "RL01",

View file

@ -85,17 +85,14 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK DKUF_V_WLK /* write locked */
#define UNIT_V_DTYPE (DKUF_V_UF + 0) /* disk type */ #define UNIT_V_DTYPE (DKUF_V_UF + 0) /* disk type */
#define UNIT_M_DTYPE 7 #define UNIT_M_DTYPE 7
#define UNIT_V_AUTO (DKUF_V_UF + 3) /* autosize */ #define UNIT_V_AUTO (DKUF_V_UF + 3) /* autosize */
#define UNIT_V_DUMMY (DKUF_V_UF + 4) /* dummy flag */ #define UNIT_V_DUMMY (DKUF_V_UF + 4) /* dummy flag */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define UNIT_DUMMY (1 << UNIT_V_DUMMY) #define UNIT_DUMMY (1 << UNIT_V_DUMMY)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -643,10 +640,10 @@ REG rp_reg[] = {
MTAB rp_mod[] = { MTAB rp_mod[] = {
{ MTAB_XTD|MTAB_VDV, 0, "MASSBUS", NULL, { MTAB_XTD|MTAB_VDV, 0, "MASSBUS", NULL,
NULL, &mba_show_num, NULL, "Display Massbus number" }, NULL, &mba_show_num, NULL, "Display Massbus number" },
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable disk drive" },
{ UNIT_DUMMY, 0, NULL, "BADBLOCK", { UNIT_DUMMY, 0, NULL, "BADBLOCK",
&rp_set_bad, NULL, NULL, "write bad block table on last track" }, &rp_set_bad, NULL, NULL, "write bad block table on last track" },
{ MTAB_XTD|MTAB_VUN, RM03_DTYPE, NULL, "RM03", { MTAB_XTD|MTAB_VUN, RM03_DTYPE, NULL, "RM03",

View file

@ -156,14 +156,12 @@ extern int32 MMR2;
#define RQ_M_PFN 0x1FFFFF /* map entry PFN */ #define RQ_M_PFN 0x1FFFFF /* map entry PFN */
#define UNIT_V_ONL (DKUF_V_UF + 0) /* online */ #define UNIT_V_ONL (DKUF_V_UF + 0) /* online */
#define UNIT_V_WLK DKUF_V_WLK /* hwre write lock */
#define UNIT_V_ATP (UNIT_V_ONL + 1) /* attn pending */ #define UNIT_V_ATP (UNIT_V_ONL + 1) /* attn pending */
#define UNIT_V_DTYPE (UNIT_V_ATP + 1) /* drive type */ #define UNIT_V_DTYPE (UNIT_V_ATP + 1) /* drive type */
#define UNIT_W_DTYPE 5 /* 5b drive type encode */ #define UNIT_W_DTYPE 5 /* 5b drive type encode */
#define UNIT_M_DTYPE ((1u << UNIT_W_DTYPE) - 1) #define UNIT_M_DTYPE ((1u << UNIT_W_DTYPE) - 1)
#define UNIT_V_NOAUTO (UNIT_V_DTYPE + UNIT_W_DTYPE) /* noautosize */ #define UNIT_V_NOAUTO (UNIT_V_DTYPE + UNIT_W_DTYPE) /* noautosize */
#define UNIT_ONL (1 << UNIT_V_ONL) #define UNIT_ONL (1 << UNIT_V_ONL)
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_ATP (1 << UNIT_V_ATP) #define UNIT_ATP (1 << UNIT_V_ATP)
#define UNIT_NOAUTO (1 << UNIT_V_NOAUTO) #define UNIT_NOAUTO (1 << UNIT_V_NOAUTO)
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
@ -176,7 +174,6 @@ extern int32 MMR2;
#define io_status u5 /* io status from callback */ #define io_status u5 /* io status from callback */
#define io_complete u6 /* io completion flag */ #define io_complete u6 /* io completion flag */
#define rqxb filebuf /* xfer buffer */ #define rqxb filebuf /* xfer buffer */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */
#define RQ_RMV(u) ((drv_tab[GET_DTYPE (u->flags)].flgs & RQDF_RMV)? \ #define RQ_RMV(u) ((drv_tab[GET_DTYPE (u->flags)].flgs & RQDF_RMV)? \
UF_RMV: 0) UF_RMV: 0)
#define RQ_WPH(u) (((drv_tab[GET_DTYPE (u->flags)].flgs & RQDF_RO) || \ #define RQ_WPH(u) (((drv_tab[GET_DTYPE (u->flags)].flgs & RQDF_RO) || \
@ -1032,12 +1029,10 @@ REG rq_reg[] = {
}; };
MTAB rq_mod[] = { MTAB rq_mod[] = {
{ UNIT_WLK, 0, NULL, "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enable", "WRITEENABLED",
&rq_set_wlk, NULL, NULL, "Write enable disk drive" }, &rq_set_wlk, &rq_show_wlk, NULL, "Write enable disk drive" },
{ UNIT_WLK, UNIT_WLK, NULL, "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&rq_set_wlk, NULL, NULL, "Write lock disk drive" }, &rq_set_wlk, NULL, NULL, "Write lock disk drive" },
{ MTAB_XTD|MTAB_VUN, 0, "WRITE", NULL,
NULL, &rq_show_wlk, NULL, "Display drive writelock status" },
{ MTAB_XTD|MTAB_VDV|MTAB_NMO, RQ_SH_RI, "RINGS", NULL, { MTAB_XTD|MTAB_VDV|MTAB_NMO, RQ_SH_RI, "RINGS", NULL,
NULL, &rq_show_ctrl, NULL, "Display command and response rings" }, NULL, &rq_show_ctrl, NULL, "Display command and response rings" },
{ MTAB_XTD|MTAB_VDV|MTAB_NMO, RQ_SH_FR, "FREEQ", NULL, { MTAB_XTD|MTAB_VDV|MTAB_NMO, RQ_SH_FR, "FREEQ", NULL,
@ -2818,9 +2813,9 @@ t_stat rq_set_wlk (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{ {
uint32 dtyp = GET_DTYPE (uptr->flags); /* get drive type */ uint32 dtyp = GET_DTYPE (uptr->flags); /* get drive type */
if (drv_tab[dtyp].flgs & RQDF_RO) /* not on read only */ if ((drv_tab[dtyp].flgs & RQDF_RO) && (val == 0)) /* not on read only */
return SCPE_NOFNC; return sim_messagef (SCPE_NOFNC, "%s: Can't enable write on Read Only device\n", sim_uname (uptr));
return SCPE_OK; return set_writelock (uptr, val, cptr, desc);
} }
/* Show write lock status */ /* Show write lock status */
@ -2831,9 +2826,8 @@ uint32 dtyp = GET_DTYPE (uptr->flags); /* get drive type */
if (drv_tab[dtyp].flgs & RQDF_RO) if (drv_tab[dtyp].flgs & RQDF_RO)
fprintf (st, "read only"); fprintf (st, "read only");
else if (uptr->flags & UNIT_WPRT) else
fprintf (st, "write locked"); show_writelock (st, uptr, val, desc);
else fprintf (st, "write enabled");
return SCPE_OK; return SCPE_OK;
} }

View file

@ -63,10 +63,8 @@
#define RS03_DTYPE (0) #define RS03_DTYPE (0)
#define RS04_DTYPE (1) #define RS04_DTYPE (1)
#define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */ #define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */
#define UNIT_V_WLK (UNIT_V_UF + 2) /* write lock */
#define UNIT_DTYPE (1 << UNIT_V_DTYPE) #define UNIT_DTYPE (1 << UNIT_V_DTYPE)
#define UNIT_AUTO (1 << UNIT_V_AUTO) #define UNIT_AUTO (1 << UNIT_V_AUTO)
#define UNIT_WLK (1 << UNIT_V_WLK)
#define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & 1) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & 1)
/* RSCS1 - control/status 1 - offset 0 */ /* RSCS1 - control/status 1 - offset 0 */
@ -237,8 +235,10 @@ REG rs_reg[] = {
MTAB rs_mod[] = { MTAB rs_mod[] = {
{ MTAB_XTD|MTAB_VDV, 0, "MASSBUS", NULL, NULL, &mba_show_num, NULL, "Display Massbus Address" }, { MTAB_XTD|MTAB_VDV, 0, "MASSBUS", NULL, NULL, &mba_show_num, NULL, "Display Massbus Address" },
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable disk drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write lockable", "LOCKED", NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable disk drive" },
{ (UNIT_DTYPE|UNIT_ATT), (RS03_DTYPE << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE|UNIT_ATT), (RS03_DTYPE << UNIT_V_DTYPE) + UNIT_ATT,
"RS03", NULL, NULL }, "RS03", NULL, NULL },
{ (UNIT_DTYPE|UNIT_ATT), (RS04_DTYPE << UNIT_V_DTYPE) + UNIT_ATT, { (UNIT_DTYPE|UNIT_ATT), (RS04_DTYPE << UNIT_V_DTYPE) + UNIT_ATT,
@ -476,7 +476,7 @@ switch (fnc) { /* case on function */
break; break;
case FNC_WRITE: /* write */ case FNC_WRITE: /* write */
if ((uptr->flags & UNIT_WLK) && /* write locked? */ if ((uptr->flags & UNIT_WPRT) && /* write locked? */
(GET_TK (rsda[drv]) <= (int32) rswlk[drv])) { (GET_TK (rsda[drv]) <= (int32) rswlk[drv])) {
rs_set_er (ER_WLE, drv); /* set drive error */ rs_set_er (ER_WLE, drv); /* set drive error */
mba_set_exc (rs_dib.ba); /* set exception */ mba_set_exc (rs_dib.ba); /* set exception */
@ -567,7 +567,7 @@ if (rs_unit[drv].flags & UNIT_DIS) {
else rsds[drv] = (rsds[drv] | DS_DPR) & ~(DS_ERR | DS_WLK); else rsds[drv] = (rsds[drv] | DS_DPR) & ~(DS_ERR | DS_WLK);
if (rs_unit[drv].flags & UNIT_ATT) { if (rs_unit[drv].flags & UNIT_ATT) {
rsds[drv] = rsds[drv] | DS_MOL; rsds[drv] = rsds[drv] | DS_MOL;
if ((rs_unit[drv].flags & UNIT_WLK) && if ((rs_unit[drv].flags & UNIT_WPRT) &&
(GET_TK (rsda[drv]) <= (int32) rswlk[drv])) (GET_TK (rsda[drv]) <= (int32) rswlk[drv]))
rsds[drv] = rsds[drv] | DS_WLK; rsds[drv] = rsds[drv] | DS_WLK;
} }

View file

@ -59,9 +59,6 @@
#define RX_SIZE (RX_NUMTR * RX_NUMSC * RX_NUMBY) /* bytes/disk */ #define RX_SIZE (RX_NUMTR * RX_NUMSC * RX_NUMBY) /* bytes/disk */
#define RX_NUMDR 2 /* drives/controller */ #define RX_NUMDR 2 /* drives/controller */
#define RX_M_NUMDR 01 #define RX_M_NUMDR 01
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define IDLE 0 /* idle state */ #define IDLE 0 /* idle state */
#define RWDS 1 /* rw, sect next */ #define RWDS 1 /* rw, sect next */
@ -178,8 +175,10 @@ REG rx_reg[] = {
}; };
MTAB rx_mod[] = { MTAB rx_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable floppy drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable floppy drive" },
#if defined (VM_PDP11) #if defined (VM_PDP11)
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS", { MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS",
&set_addr, &show_addr, NULL }, &set_addr, &show_addr, NULL },

View file

@ -66,13 +66,10 @@
#define RY_SIZE (RX_NUMTR * RX_NUMSC * RY_NUMBY) #define RY_SIZE (RX_NUMTR * RX_NUMSC * RY_NUMBY)
#define RX_NUMDR 2 /* drives/controller */ #define RX_NUMDR 2 /* drives/controller */
#define RX_M_NUMDR 01 #define RX_M_NUMDR 01
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */ #define UNIT_V_DEN (UNIT_V_UF + 0) /* double density */
#define UNIT_V_DEN (UNIT_V_UF + 1) /* double density */ #define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */
#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize */
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_DEN (1u << UNIT_V_DEN) #define UNIT_DEN (1u << UNIT_V_DEN)
#define UNIT_AUTO (1u << UNIT_V_AUTO) #define UNIT_AUTO (1u << UNIT_V_AUTO)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define IDLE 0 /* idle state */ #define IDLE 0 /* idle state */
#define RWDS 1 /* rw, sect next */ #define RWDS 1 /* rw, sect next */
@ -216,10 +213,10 @@ REG ry_reg[] = {
}; };
MTAB ry_mod[] = { MTAB ry_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable floppy drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable floppy drive" },
{ (UNIT_DEN+UNIT_ATT), UNIT_ATT, "single density", NULL, NULL }, { (UNIT_DEN+UNIT_ATT), UNIT_ATT, "single density", NULL, NULL },
{ (UNIT_DEN+UNIT_ATT), (UNIT_DEN+UNIT_ATT), "double density", NULL, NULL }, { (UNIT_DEN+UNIT_ATT), (UNIT_DEN+UNIT_ATT), "double density", NULL, NULL },
{ (UNIT_AUTO+UNIT_DEN+UNIT_ATT), 0, "single density", NULL, NULL }, { (UNIT_AUTO+UNIT_DEN+UNIT_ATT), 0, "single density", NULL, NULL },

View file

@ -182,10 +182,10 @@ REG ta_reg[] = {
}; };
MTAB ta_mod[] = { MTAB ta_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable tape drive" }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock tape drive" }, &set_writelock, NULL, NULL, "Write lock tape drive" },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", NULL, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", NULL,
NULL, &sim_tape_show_capac, NULL, "Display tape capacity" }, NULL, &sim_tape_show_capac, NULL, "Display tape capacity" },
{ MTAB_XTD|MTAB_VDV|MTAB_VALR, 020, "ADDRESS", "ADDRESS", { MTAB_XTD|MTAB_VDV|MTAB_VALR, 020, "ADDRESS", "ADDRESS",

View file

@ -118,16 +118,13 @@
#define DT_NUMDR 8 /* #drives */ #define DT_NUMDR 8 /* #drives */
#define DT_M_NUMDR (DT_NUMDR - 1) #define DT_M_NUMDR (DT_NUMDR - 1)
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define STATE u3 /* unit state */ #define STATE u3 /* unit state */
#define LASTT u4 /* last time update */ #define LASTT u4 /* last time update */
#define WRITTEN u5 /* device buffer is dirty and needs flushing */ #define WRITTEN u5 /* device buffer is dirty and needs flushing */
#define UNIT_WPRT (UNIT_WLK) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -384,9 +381,9 @@ REG dt_reg[] = {
MTAB dt_mod[] = { MTAB dt_mod[] = {
{ MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
&dt_set_writelock, &dt_show_writelock, NULL, "Write enable tape drive" }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&dt_set_writelock, NULL, NULL, "Write enable tape drive" }, &set_writelock, NULL, NULL, "Write enable drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL },
@ -1357,8 +1354,8 @@ uint16 pdp11b[D18_BSIZE];
int32 k; int32 k;
uint32 ba, *fbuf; uint32 ba, *fbuf;
if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_WPRT)== 0)) { /* any data? */
sim_printf ("%s: writing buffer to file\n", sim_uname (uptr)); sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
fbuf = (uint32 *) uptr->filebuf; /* file buffer */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */
if (uptr->flags & UNIT_8FMT) { /* 12b? */ if (uptr->flags & UNIT_8FMT) { /* 12b? */
@ -1410,7 +1407,7 @@ if (sim_is_active (uptr)) { /* active? cancel op */
} }
uptr->STATE = 0, uptr->pos = 0; uptr->STATE = 0, uptr->pos = 0;
} }
if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_WPRT) == 0)) /* any data? */
dt_flush (uptr); /* end if hwmark */ dt_flush (uptr); /* end if hwmark */
free (uptr->filebuf); /* release buf */ free (uptr->filebuf); /* release buf */
uptr->flags = uptr->flags & ~(UNIT_BUF | UNIT_RO); /* clear buf & read only flags */ uptr->flags = uptr->flags & ~(UNIT_BUF | UNIT_RO); /* clear buf & read only flags */
@ -1420,23 +1417,6 @@ uptr->capac = DT_CAPAC; /* default size */
return detach_unit (uptr); return detach_unit (uptr);
} }
t_stat dt_set_writelock (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
if ((uptr->flags & UNIT_ATT) != 0)
return sim_messagef (SCPE_ALATT, "%s: Already attached\n", sim_uname (uptr));
if (val)
uptr->flags |= UNIT_WPRT;
else
uptr->flags &= ~UNIT_WPRT;
return SCPE_OK;
}
t_stat dt_show_writelock (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
fprintf (st, "write %s", (uptr->flags & (UNIT_WPRT | UNIT_RO)) ? "locked" : "enabled");
return SCPE_OK;
}
t_stat dt_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) t_stat dt_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
{ {
const char *text2; const char *text2;

View file

@ -524,10 +524,6 @@ static const char *tdc_regnam[] =
#define TD_NUMCTLR 16 /* #controllers */ #define TD_NUMCTLR 16 /* #controllers */
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define TD_NUMBLK 512 /* blocks/tape */ #define TD_NUMBLK 512 /* blocks/tape */
#define TD_NUMBY 512 /* bytes/block */ #define TD_NUMBY 512 /* bytes/block */
#define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */ #define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */
@ -707,8 +703,8 @@ static REG td_reg[] = {
}; };
static MTAB td_mod[] = { static MTAB td_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable TU58 drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", &set_writelock, &show_writelock, NULL, "Write enable TU58 drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock TU58 drive" }, { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", &set_writelock, NULL, NULL, "Write enable TU58 drive" },
{ MTAB_XTD | MTAB_VDV, 0, "CONTROLLERS", "CONTROLLERS", &td_set_ctrls, &td_show_ctlrs, NULL, "Number of Controllers" }, { MTAB_XTD | MTAB_VDV, 0, "CONTROLLERS", "CONTROLLERS", &td_set_ctrls, &td_show_ctlrs, NULL, "Number of Controllers" },
{ MTAB_XTD|MTAB_VDV, 0, "ADDRESS", NULL, &set_addr, &show_addr, NULL, "Bus address" }, { MTAB_XTD|MTAB_VDV, 0, "ADDRESS", NULL, &set_addr, &show_addr, NULL, "Bus address" },
{ MTAB_XTD|MTAB_VDV, 1, "VECTOR", NULL, &set_vec, &show_vec, NULL, "Interrupt vector" }, { MTAB_XTD|MTAB_VDV, 1, "VECTOR", NULL, &set_vec, &show_vec, NULL, "Interrupt vector" },

View file

@ -226,10 +226,10 @@ REG tm_reg[] = {
}; };
MTAB tm_mod[] = { MTAB tm_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
&tm_vlock, NULL, NULL, "Write enable tape drive" }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&tm_vlock, NULL, NULL, "Write lock tape drive" }, &set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B, AWS, TAR)" }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B, AWS, TAR)" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "CAPACITY", "CAPACITY",

View file

@ -474,10 +474,10 @@ REG tq_reg[] = {
}; };
MTAB tq_mod[] = { MTAB tq_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable tape drive" }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock tape drive" }, &set_writelock, NULL, NULL, "Write lock tape drive" },
{ MTAB_XTD|MTAB_VDV, TQ5_TYPE, NULL, "TK50", { MTAB_XTD|MTAB_VDV, TQ5_TYPE, NULL, "TK50",
&tq_set_type, NULL, NULL, "Set TK50 Device Type" }, &tq_set_type, NULL, NULL, "Set TK50 Device Type" },
{ MTAB_XTD|MTAB_VDV, TQ7_TYPE, NULL, "TK70", { MTAB_XTD|MTAB_VDV, TQ7_TYPE, NULL, "TK70",

View file

@ -346,10 +346,10 @@ REG ts_reg[] = {
}; };
MTAB ts_mod[] = { MTAB ts_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable tape drive" }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock tape drive" }, &set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B, AWS, TAR)" }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B, AWS, TAR)" },
{ MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN|MTAB_VALR, 0, "CAPACITY", "CAPACITY",

View file

@ -309,10 +309,10 @@ MTAB tu_mod[] = {
#endif #endif
{ MTAB_XTD|MTAB_VDV, 0, "FORMATTER", NULL, { MTAB_XTD|MTAB_VDV, 0, "FORMATTER", NULL,
NULL, &tu_show_fmtr, NULL, "Display formatter/controller type" }, NULL, &tu_show_fmtr, NULL, "Display formatter/controller type" },
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable tape drive" }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock tape drive" }, &set_writelock, NULL, NULL, "no Write ring in place" },
{ UNIT_TYPE, UNIT_TE16, "TE16", "TE16", { UNIT_TYPE, UNIT_TE16, "TE16", "TE16",
NULL, NULL, NULL, "Set drive type to TE16" }, NULL, NULL, NULL, "Set drive type to TE16" },
{ UNIT_TYPE, UNIT_TU45, "TU45", "TU45", { UNIT_TYPE, UNIT_TU45, "TU45", "TU45",

View file

@ -119,10 +119,8 @@
#include "pdp18b_defs.h" #include "pdp18b_defs.h"
#define DT_NUMDR 8 /* #drives */ #define DT_NUMDR 8 /* #drives */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define STATE u3 /* unit state */ #define STATE u3 /* unit state */
@ -130,7 +128,6 @@
#define WRITTEN u5 /* device buffer is dirty and needs flushing */ #define WRITTEN u5 /* device buffer is dirty and needs flushing */
#define DT_WC 030 /* word count */ #define DT_WC 030 /* word count */
#define DT_CA 031 /* current addr */ #define DT_CA 031 /* current addr */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -430,8 +427,10 @@ REG dt_reg[] = {
}; };
MTAB dt_mod[] = { MTAB dt_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL },
@ -564,8 +563,8 @@ else if ((pulse & 044) == 004) { /* MMLC */
if ((uptr == NULL) || /* invalid? */ if ((uptr == NULL) || /* invalid? */
((uptr->flags) & UNIT_DIS) || /* disabled? */ ((uptr->flags) & UNIT_DIS) || /* disabled? */
(fnc >= FNC_WMRK) || /* write mark? */ (fnc >= FNC_WMRK) || /* write mark? */
((fnc == FNC_WRIT) && (uptr->flags & UNIT_WLK)) || ((fnc == FNC_WRIT) && (uptr->flags & UNIT_WPRT)) ||
((fnc == FNC_WALL) && (uptr->flags & UNIT_WLK))) ((fnc == FNC_WALL) && (uptr->flags & UNIT_WPRT)))
dt_seterr (uptr, DTB_SEL); /* select err */ dt_seterr (uptr, DTB_SEL); /* select err */
else dt_newsa (dtsa); else dt_newsa (dtsa);
} }
@ -1515,6 +1514,7 @@ int32 k;
uint32 ba, *fbuf; uint32 ba, *fbuf;
if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */
sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
fbuf = (uint32 *) uptr->filebuf; /* file buffer */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */
if (uptr->flags & UNIT_8FMT) { /* 12b? */ if (uptr->flags & UNIT_8FMT) { /* 12b? */
@ -1564,10 +1564,8 @@ if (sim_is_active (uptr)) {
} }
uptr->STATE = uptr->pos = 0; uptr->STATE = uptr->pos = 0;
} }
if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) { /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */
sim_printf ("%s%d: writing buffer to file\n", sim_dname (&dt_dev), u); dt_flush (uptr); /* end if hwmark */
dt_flush (uptr);
} /* end if hwmark */
free (uptr->filebuf); /* release buf */ free (uptr->filebuf); /* release buf */
uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */
uptr->filebuf = NULL; /* clear buf ptr */ uptr->filebuf = NULL; /* clear buf ptr */

View file

@ -184,8 +184,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "TCAPACITY", "TCAPACITY", { MTAB_XTD|MTAB_VUN, 0, "TCAPACITY", "TCAPACITY",

View file

@ -59,11 +59,8 @@
/* Unit specific flags */ /* Unit specific flags */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* hwre write lock */ #define UNIT_V_RP03 (UNIT_V_UF + 0) /* RP03 */
#define UNIT_V_RP03 (UNIT_V_UF + 1) /* RP03 */
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_RP03 (1u << UNIT_V_RP03) #define UNIT_RP03 (1u << UNIT_V_RP03)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -214,8 +211,10 @@ REG rp_reg[] = {
MTAB rp_mod[] = { MTAB rp_mod[] = {
{ UNIT_RP03, 0, "RP02", "RP02", &rp_set_size }, { UNIT_RP03, 0, "RP02", "RP02", &rp_set_size },
{ UNIT_RP03, UNIT_RP03, "RP03", "RP03", &rp_set_size }, { UNIT_RP03, UNIT_RP03, "RP03", "RP03", &rp_set_size },
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable disk drive" },
{ MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO", &set_devno, &show_devno }, { MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO", &set_devno, &show_devno },
{ 0 } { 0 }
}; };

View file

@ -210,8 +210,10 @@ REG ct_reg[] = {
}; };
MTAB ct_mod[] = { MTAB ct_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable cassette tape" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write lock cassette tape" },
// { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", // { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
// &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, // &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", NULL, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", NULL,

View file

@ -99,10 +99,8 @@
#include "pdp8_defs.h" #include "pdp8_defs.h"
#define DT_NUMDR 8 /* #drives */ #define DT_NUMDR 8 /* #drives */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define STATE u3 /* unit state */ #define STATE u3 /* unit state */
@ -110,7 +108,6 @@
#define WRITTEN u5 /* device buffer is dirty and needs flushing */ #define WRITTEN u5 /* device buffer is dirty and needs flushing */
#define DT_WC 07754 /* word count */ #define DT_WC 07754 /* word count */
#define DT_CA 07755 /* current addr */ #define DT_CA 07755 /* current addr */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -351,8 +348,10 @@ REG dt_reg[] = {
}; };
MTAB dt_mod[] = { MTAB dt_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL },
@ -1295,6 +1294,7 @@ int32 i, k;
uint32 ba; uint32 ba;
if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */
sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
fbuf = (uint16 *) uptr->filebuf; /* file buffer */ fbuf = (uint16 *) uptr->filebuf; /* file buffer */
if (uptr->flags & UNIT_8FMT) /* PDP8? */ if (uptr->flags & UNIT_8FMT) /* PDP8? */
@ -1339,10 +1339,8 @@ if (sim_is_active (uptr)) {
} }
uptr->STATE = uptr->pos = 0; uptr->STATE = uptr->pos = 0;
} }
if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) /* any data? */
sim_printf ("%s%d: writing buffer to file\n", sim_dname (&dt_dev), u); dt_flush (uptr); /* end if hwmark */
dt_flush (uptr);
} /* end if hwmark */
free (uptr->filebuf); /* release buf */ free (uptr->filebuf); /* release buf */
uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */
uptr->filebuf = NULL; /* clear buf ptr */ uptr->filebuf = NULL; /* clear buf ptr */

View file

@ -201,8 +201,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", &mt_vlock }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", &mt_vlock }, &set_writelock, &show_writelock, NULL, "Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "no Write ring in place" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -51,11 +51,9 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_HWLK (UNIT_V_UF + 0) /* hwre write lock */ #define UNIT_V_SWLK (UNIT_V_UF + 0) /* swre write lock */
#define UNIT_V_SWLK (UNIT_V_UF + 1) /* swre write lock */ #define UNIT_HWLK UNIT_WPRT
#define UNIT_HWLK (1 << UNIT_V_HWLK)
#define UNIT_SWLK (1 << UNIT_V_SWLK) #define UNIT_SWLK (1 << UNIT_V_SWLK)
#define UNIT_WPRT (UNIT_HWLK|UNIT_SWLK|UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -181,8 +179,10 @@ REG rk_reg[] = {
}; };
MTAB rk_mod[] = { MTAB rk_mod[] = {
{ UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO", { MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO",
&set_dev, &show_dev, NULL }, &set_dev, &show_dev, NULL },
{ 0 } { 0 }
@ -306,7 +306,7 @@ if (sim_is_active (uptr) || (cyl >= RK_NUMCY)) { /* busy or bad cyl? */
rk_sta = rk_sta | RKS_DONE | RKS_STAT; rk_sta = rk_sta | RKS_DONE | RKS_STAT;
return; return;
} }
if ((func == RKC_WRITE) && (uptr->flags & UNIT_WPRT)) { if ((func == RKC_WRITE) && (uptr->flags & (UNIT_HWLK|UNIT_SWLK))) {
rk_sta = rk_sta | RKS_DONE | RKS_WLK; /* write and locked? */ rk_sta = rk_sta | RKS_DONE | RKS_WLK; /* write and locked? */
return; return;
} }
@ -362,7 +362,7 @@ if ((uptr->flags & UNIT_ATT) == 0) { /* not att? abort */
return IORETURN (rk_stopioe, SCPE_UNATT); return IORETURN (rk_stopioe, SCPE_UNATT);
} }
if ((uptr->FUNC == RKC_WRITE) && (uptr->flags & UNIT_WPRT)) { if ((uptr->FUNC == RKC_WRITE) && (uptr->flags & (UNIT_HWLK|UNIT_SWLK))) {
rk_sta = rk_sta | RKS_DONE | RKS_WLK; /* write and locked? */ rk_sta = rk_sta | RKS_DONE | RKS_WLK; /* write and locked? */
rk_busy = 0; rk_busy = 0;
RK_INT_UPDATE; RK_INT_UPDATE;

View file

@ -64,15 +64,12 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write lock */ #define UNIT_V_RL02 (UNIT_V_UF + 0) /* RL01 vs RL02 */
#define UNIT_V_RL02 (UNIT_V_UF + 1) /* RL01 vs RL02 */ #define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize enable */
#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize enable */ #define UNIT_V_DUMMY (UNIT_V_UF + 2) /* dummy flag */
#define UNIT_V_DUMMY (UNIT_V_UF + 3) /* dummy flag */
#define UNIT_DUMMY (1u << UNIT_V_DUMMY) #define UNIT_DUMMY (1u << UNIT_V_DUMMY)
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_RL02 (1u << UNIT_V_RL02) #define UNIT_RL02 (1u << UNIT_V_RL02)
#define UNIT_AUTO (1u << UNIT_V_AUTO) #define UNIT_AUTO (1u << UNIT_V_AUTO)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -231,8 +228,10 @@ REG rl_reg[] = {
}; };
MTAB rl_mod[] = { MTAB rl_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ UNIT_DUMMY, 0, NULL, "BADBLOCK", &rl_set_bad }, { UNIT_DUMMY, 0, NULL, "BADBLOCK", &rl_set_bad },
{ (UNIT_RL02+UNIT_ATT), UNIT_ATT, "RL01", NULL, NULL }, { (UNIT_RL02+UNIT_ATT), UNIT_ATT, "RL01", NULL, NULL },
{ (UNIT_RL02+UNIT_ATT), (UNIT_RL02+UNIT_ATT), "RL02", NULL, NULL }, { (UNIT_RL02+UNIT_ATT), (UNIT_RL02+UNIT_ATT), "RL02", NULL, NULL },

View file

@ -70,13 +70,10 @@
#define RX2_SIZE (RX_NUMTR * RX_NUMSC * RX2_NUMBY) #define RX2_SIZE (RX_NUMTR * RX_NUMSC * RX2_NUMBY)
#define RX_NUMDR 2 /* drives/controller */ #define RX_NUMDR 2 /* drives/controller */
#define RX_M_NUMDR 01 #define RX_M_NUMDR 01
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_DEN (UNIT_V_UF + 0) /* double density */
#define UNIT_V_DEN (UNIT_V_UF + 1) /* double density */ #define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */
#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize */
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_DEN (1u << UNIT_V_DEN) #define UNIT_DEN (1u << UNIT_V_DEN)
#define UNIT_AUTO (1u << UNIT_V_AUTO) #define UNIT_AUTO (1u << UNIT_V_AUTO)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define IDLE 0 /* idle state */ #define IDLE 0 /* idle state */
#define CMD8 1 /* 8b cmd, ho next */ #define CMD8 1 /* 8b cmd, ho next */
@ -193,8 +190,10 @@ REG rx_reg[] = {
}; };
MTAB rx_mod[] = { MTAB rx_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable tape drive" },
{ MTAB_XTD | MTAB_VDV, 1, NULL, "RX28", &rx_settype, NULL, NULL }, { MTAB_XTD | MTAB_VDV, 1, NULL, "RX28", &rx_settype, NULL, NULL },
{ MTAB_XTD | MTAB_VDV, 0, NULL, "RX8E", &rx_settype, NULL, NULL }, { MTAB_XTD | MTAB_VDV, 0, NULL, "RX8E", &rx_settype, NULL, NULL },
{ MTAB_XTD | MTAB_VDV, 0, "TYPE", NULL, NULL, &rx_showtype, NULL }, { MTAB_XTD | MTAB_VDV, 0, "TYPE", NULL, NULL, &rx_showtype, NULL },

View file

@ -82,16 +82,13 @@
#include "pdp8_defs.h" #include "pdp8_defs.h"
#define DT_NUMDR 2 /* #drives */ #define DT_NUMDR 2 /* #drives */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ #define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */
#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ #define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */
#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_8FMT (1 << UNIT_V_8FMT)
#define UNIT_11FMT (1 << UNIT_V_11FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT)
#define STATE u3 /* unit state */ #define STATE u3 /* unit state */
#define LASTT u4 /* last time update */ #define LASTT u4 /* last time update */
#define WRITTEN u5 /* device buffer is dirty and needs flushing */ #define WRITTEN u5 /* device buffer is dirty and needs flushing */
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
/* System independent DECtape constants */ /* System independent DECtape constants */
@ -252,8 +249,10 @@ REG td_reg[] = {
}; };
MTAB td_mod[] = { MTAB td_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, 0, "18b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_8FMT, "12b", NULL, NULL },
{ UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL },
@ -870,6 +869,7 @@ int32 i, k;
uint32 ba; uint32 ba;
if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */
sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename);
rewind (uptr->fileref); /* start of file */ rewind (uptr->fileref); /* start of file */
fbuf = (uint16 *) uptr->filebuf; /* file buffer */ fbuf = (uint16 *) uptr->filebuf; /* file buffer */
if (uptr->flags & UNIT_8FMT) /* PDP8? */ if (uptr->flags & UNIT_8FMT) /* PDP8? */
@ -906,10 +906,8 @@ int u = (int)(uptr - td_dev.units);
if (!(uptr->flags & UNIT_ATT)) if (!(uptr->flags & UNIT_ATT))
return SCPE_OK; return SCPE_OK;
if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) /* any data? */
sim_printf ("%s%d: writing buffer to file\n", sim_dname (&td_dev), u);
td_flush (uptr); td_flush (uptr);
} /* end if hwmark */
free (uptr->filebuf); /* release buf */ free (uptr->filebuf); /* release buf */
uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */
uptr->filebuf = NULL; /* clear buf ptr */ uptr->filebuf = NULL; /* clear buf ptr */

View file

@ -38,10 +38,6 @@
#include "sds_defs.h" #include "sds_defs.h"
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */
#define UNIT_WLK (1 << UNIT_V_WLK)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define DSK_PKTWD 16 /* words/packet */ #define DSK_PKTWD 16 /* words/packet */
#define DSK_NUMPKT 4 /* packets/sector */ #define DSK_NUMPKT 4 /* packets/sector */
#define DSK_NUMWD (DSK_PKTWD*DSK_NUMPKT) /* words/sector */ #define DSK_NUMWD (DSK_PKTWD*DSK_NUMPKT) /* words/sector */
@ -121,8 +117,10 @@ REG dsk_reg[] = {
}; };
MTAB dsk_mod[] = { MTAB dsk_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VDV, 0, "CHANNEL", "CHANNEL", { MTAB_XTD|MTAB_VDV, 0, "CHANNEL", "CHANNEL",
&set_chan, &show_chan, NULL }, &set_chan, &show_chan, NULL },
{ 0 } { 0 }

View file

@ -152,8 +152,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write lock tape drive" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -226,11 +226,8 @@
#define RD54_MED 0x25644036 #define RD54_MED 0x25644036
#define RD54_FLGS 0 #define RD54_FLGS 0
#define UNIT_V_WLK (DKUF_V_UF + 0) /* hwre write lock */ #define UNIT_V_DTYPE (DKUF_V_UF + 0) /* drive type */
#define UNIT_V_DTYPE (DKUF_V_UF + 1) /* drive type */
#define UNIT_M_DTYPE 0xF #define UNIT_M_DTYPE 0xF
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protected */
#define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_DTYPE)
struct drvtyp { struct drvtyp {
@ -354,10 +351,10 @@ DEBTAB rd_debug[] = {
}; };
MTAB rd_mod[] = { MTAB rd_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, RX33_DTYPE, NULL, "RX33", { MTAB_XTD|MTAB_VUN, RX33_DTYPE, NULL, "RX33",
&rd_set_type, NULL, NULL, "Set RX33 Disk Type" }, &rd_set_type, NULL, NULL, "Set RX33 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RD31_DTYPE, NULL, "RD31", { MTAB_XTD|MTAB_VUN, RD31_DTYPE, NULL, "RD31",

View file

@ -200,12 +200,10 @@ DEBTAB rz_debug[] = {
}; };
MTAB rz_mod[] = { MTAB rz_mod[] = {
{ SCSI_WLK, 0, NULL, "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
&scsi_set_wlk, NULL, NULL, "Write enable disk drive" }, &scsi_set_wlk, &scsi_show_wlk, NULL, "Write enable drive" },
{ SCSI_WLK, SCSI_WLK, NULL, "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&scsi_set_wlk, NULL, NULL, "Write lock disk drive" }, &scsi_set_wlk, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 0, "WRITE", NULL,
NULL, &scsi_show_wlk, NULL, "Display drive writelock status" },
{ MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23", { MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23",
&rz_set_type, NULL, NULL, "Set RZ23 Disk Type" }, &rz_set_type, NULL, NULL, "Set RZ23 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L", { MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L",

View file

@ -153,12 +153,10 @@ REG rz_reg[] = {
}; };
MTAB rz_mod[] = { MTAB rz_mod[] = {
{ SCSI_WLK, 0, NULL, "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
&scsi_set_wlk, NULL, NULL, "Write enable disk drive" }, &scsi_set_wlk, &scsi_show_wlk, NULL, "Write enable drive" },
{ SCSI_WLK, SCSI_WLK, NULL, "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&scsi_set_wlk, NULL, NULL, "Write lock disk drive" }, &scsi_set_wlk, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 0, "WRITE", NULL,
NULL, &scsi_show_wlk, NULL, "Display drive writelock status" },
{ MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23", { MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23",
&rz_set_type, NULL, NULL, "Set RZ23 Disk Type" }, &rz_set_type, NULL, NULL, "Set RZ23 Disk Type" },
{ MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L", { MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L",

View file

@ -70,13 +70,10 @@
/* Flags in the unit flags word */ /* Flags in the unit flags word */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* hwre write lock */ #define UNIT_V_RB80 (UNIT_V_UF + 0) /* RB02 vs RB80 */
#define UNIT_V_RB80 (UNIT_V_UF + 1) /* RB02 vs RB80 */ #define UNIT_V_DUMMY (UNIT_V_UF + 1) /* dummy flag */
#define UNIT_V_DUMMY (UNIT_V_UF + 2) /* dummy flag */
#define UNIT_DUMMY (1 << UNIT_V_DUMMY) #define UNIT_DUMMY (1 << UNIT_V_DUMMY)
#define UNIT_WLK (1u << UNIT_V_WLK)
#define UNIT_RB80 (1u << UNIT_V_RB80) #define UNIT_RB80 (1u << UNIT_V_RB80)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protected */
/* Parameters in the unit descriptor */ /* Parameters in the unit descriptor */
@ -257,10 +254,10 @@ DEBTAB rb_debug[] = {
}; };
MTAB rb_mod[] = { MTAB rb_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
NULL, NULL, NULL, "Write enable disk drive" }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
NULL, NULL, NULL, "Write lock disk drive" }, &set_writelock, NULL, NULL, "Write enable disk drive" },
{ UNIT_DUMMY, 0, NULL, "BADBLOCK", { UNIT_DUMMY, 0, NULL, "BADBLOCK",
&rb_set_bad, NULL, NULL, "write bad block table on last track" }, &rb_set_bad, NULL, NULL, "write bad block table on last track" },
{ (UNIT_RB80+UNIT_ATT), UNIT_ATT, "RB02", NULL, NULL }, { (UNIT_RB80+UNIT_ATT), UNIT_ATT, "RB02", NULL, NULL },

View file

@ -114,10 +114,6 @@ static BITFIELD tmr_iccs_bits [] = {
/* TU58 definitions */ /* TU58 definitions */
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define TD_NUMBLK 512 /* blocks/tape */ #define TD_NUMBLK 512 /* blocks/tape */
#define TD_NUMBY 512 /* bytes/block */ #define TD_NUMBY 512 /* bytes/block */
#define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */ #define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */
@ -390,8 +386,10 @@ REG td_reg[] = {
}; };
MTAB td_mod[] = { MTAB td_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable TU58 drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock TU58 drive" }, &set_writelock, &show_writelock, NULL, "Write enable TU58 drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable TU58 drive" },
{ 0 } { 0 }
}; };

View file

@ -147,10 +147,6 @@ static BITFIELD tmr_iccs_bits [] = {
/* TU58 definitions */ /* TU58 definitions */
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define TD_NUMBLK 512 /* blocks/tape */ #define TD_NUMBLK 512 /* blocks/tape */
#define TD_NUMBY 512 /* bytes/block */ #define TD_NUMBY 512 /* bytes/block */
#define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */ #define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */
@ -382,8 +378,10 @@ REG td_reg[] = {
}; };
MTAB td_mod[] = { MTAB td_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable TU58 drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock TU58 drive" }, &set_writelock, &show_writelock, NULL, "Write enable TU58 drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable TU58 drive" },
{ 0 } { 0 }
}; };

View file

@ -157,9 +157,6 @@ static BITFIELD tmr_iccs_bits [] = {
#define FL_M_SECTOR 0177 #define FL_M_SECTOR 0177
#define FL_NUMBY 128 /* bytes/sector */ #define FL_NUMBY 128 /* bytes/sector */
#define FL_SIZE (FL_NUMTR * FL_NUMSC * FL_NUMBY)/* bytes/disk */ #define FL_SIZE (FL_NUMTR * FL_NUMSC * FL_NUMBY)/* bytes/disk */
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define FL_IDLE 0 /* idle state */ #define FL_IDLE 0 /* idle state */
#define FL_RWDS 1 /* rw, sect next */ #define FL_RWDS 1 /* rw, sect next */
@ -426,8 +423,10 @@ REG fl_reg[] = {
}; };
MTAB fl_mod[] = { MTAB fl_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable floppy drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock floppy drive" }, &set_writelock, &show_writelock, NULL, "Write enable floppy drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable floppy drive" },
{ 0 } { 0 }
}; };

View file

@ -166,9 +166,6 @@ const char *fl_fncnames[] = {
#define FL_NUMBY 512 /* bytes/sector */ #define FL_NUMBY 512 /* bytes/sector */
#define FL_INTL 5 /* interleave */ #define FL_INTL 5 /* interleave */
#define FL_SIZE (FL_NUMTR * FL_NUMSC * FL_NUMBY)/* bytes/disk */ #define FL_SIZE (FL_NUMTR * FL_NUMSC * FL_NUMBY)/* bytes/disk */
#define UNIT_V_WLK (UNIT_V_UF) /* write locked */
#define UNIT_WLK (1u << UNIT_V_UF)
#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */
#define TRACK u3 /* current track */ #define TRACK u3 /* current track */
#define CALC_SC(t,s) (fl_intl[((t) - 1) % FL_INTL][((s) - 1)]) #define CALC_SC(t,s) (fl_intl[((t) - 1) % FL_INTL][((s) - 1)])
@ -424,8 +421,10 @@ REG fl_reg[] = {
}; };
MTAB fl_mod[] = { MTAB fl_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable floppy drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock floppy drive" }, &set_writelock, &show_writelock, NULL, "Write enable floppy drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable floppy drive" },
{ 0 } { 0 }
}; };

View file

@ -137,9 +137,6 @@ static BITFIELD tmr_iccs_bits [] = {
#define TRK u3 /* current track */ #define TRK u3 /* current track */
#define STAT u4 /* status */ #define STAT u4 /* status */
#define UNIT_V_WLK (UNIT_V_UF + 0) /* hwre write lock */
#define UNIT_WLK (1u << UNIT_V_WLK)
#define RLCS_DRDY 0000001 /* drive ready */ #define RLCS_DRDY 0000001 /* drive ready */
#define RLCS_M_DRIVE 03 #define RLCS_M_DRIVE 03
#define RLCS_V_DRIVE 8 #define RLCS_V_DRIVE 8
@ -440,8 +437,10 @@ REG rlcs_reg[] = {
}; };
MTAB rlcs_mod[] = { MTAB rlcs_mod[] = {
{ UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable console RL02 drive" }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock console RL02 drive" }, &set_writelock, &show_writelock, NULL, "Write enable console RL02 drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable console RL02 drive" },
{ 0 } { 0 }
}; };

27
scp.c
View file

@ -1556,7 +1556,7 @@ static const char simh_help2[] =
"+sh{ow} q{ueue} show event queue\n" "+sh{ow} q{ueue} show event queue\n"
"+sh{ow} ti{me} show simulated time\n" "+sh{ow} ti{me} show simulated time\n"
"+sh{ow} th{rottle} show simulation rate\n" "+sh{ow} th{rottle} show simulation rate\n"
"+sh{ow} a{synch} show asynchronouse I/O state\n" "+sh{ow} a{synch} show asynchronous I/O state\n"
"+sh{ow} ve{rsion} show simulator version\n" "+sh{ow} ve{rsion} show simulator version\n"
"+sh{ow} def{ault} show current directory\n" "+sh{ow} def{ault} show current directory\n"
"+sh{ow} re{mote} show remote console configuration\n" "+sh{ow} re{mote} show remote console configuration\n"
@ -7603,6 +7603,31 @@ sim_switches = old_sw;
return r; return r;
} }
/* Set Hardware Write Lock */
t_stat set_writelock (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{
if (((uptr->flags & UNIT_WPRT) != 0) == val) /* Already set as desired? */
return SCPE_OK; /* Do nothing */
if (val) /* Lock? */
uptr->flags |= UNIT_WLK; /* Do it. */
else /* Unlock */
if (((uptr->flags & UNIT_ATT) != 0) && /* Transition from Locked to Unlock while attached read-only? */
((uptr->flags & UNIT_RO) != 0))
return sim_messagef (SCPE_ALATT, "%s: Can't enable write when attached read only\n", sim_uname (uptr));
else
uptr->flags &= ~UNIT_WLK;
return SCPE_OK;
}
/* Show Write Lock */
t_stat show_writelock (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{
fprintf (st, "write %s", (uptr->flags & UNIT_WPRT) ? "locked" : "enabled");
return SCPE_OK;
}
/* Load and dump commands /* Load and dump commands
lo[ad] filename {arg} load specified file lo[ad] filename {arg} load specified file

2
scp.h
View file

@ -158,6 +158,8 @@ t_stat assign_device (DEVICE *dptr, const char *cptr);
t_stat deassign_device (DEVICE *dptr); t_stat deassign_device (DEVICE *dptr);
t_stat reset_all (uint32 start_device); t_stat reset_all (uint32 start_device);
t_stat reset_all_p (uint32 start_device); t_stat reset_all_p (uint32 start_device);
t_stat set_writelock (UNIT *uptr, int32 val, CONST char *cptr, void *desc);
t_stat show_writelock (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
const char *sim_dname (DEVICE *dptr); const char *sim_dname (DEVICE *dptr);
const char *sim_uname (UNIT *dptr); const char *sim_uname (UNIT *dptr);
const char *sim_set_uname (UNIT *uptr, const char *uname); const char *sim_set_uname (UNIT *uptr, const char *uname);

View file

@ -31,9 +31,6 @@
#include "sigma_io_defs.h" #include "sigma_io_defs.h"
#include <math.h> #include <math.h>
#define UNIT_V_HWLK (UNIT_V_UF + 0) /* hwre write lock */
#define UNIT_HWLK (1u << UNIT_V_HWLK)
#define UNIT_WPRT (UNIT_HWLK|UNIT_RO) /* write prot */
#define UTRK u3 /* current track */ #define UTRK u3 /* current track */
/* Constants */ /* Constants */
@ -130,8 +127,10 @@ REG dk_reg[] = {
}; };
MTAB dk_mod[] = { MTAB dk_mod[] = {
{ UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable drive" },
{ MTAB_XTD|MTAB_VDV, 0, "CHAN", "CHAN", { MTAB_XTD|MTAB_VDV, 0, "CHAN", "CHAN",
&io_set_dvc, &io_show_dvc, NULL }, &io_set_dvc, &io_show_dvc, NULL },
{ MTAB_XTD|MTAB_VDV, 0, "DVA", "DVA", { MTAB_XTD|MTAB_VDV, 0, "DVA", "DVA",

View file

@ -45,9 +45,6 @@
#include "sigma_io_defs.h" #include "sigma_io_defs.h"
#include <math.h> #include <math.h>
#define UNIT_V_HWLK (UNIT_V_UF + 0) /* hwre write lock */
#define UNIT_HWLK (1u << UNIT_V_HWLK)
#define UNIT_WPRT (UNIT_HWLK|UNIT_RO) /* write prot */
#define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */ #define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */
#define UNIT_AUTO (1u << UNIT_V_AUTO) #define UNIT_AUTO (1u << UNIT_V_AUTO)
#define UNIT_V_DTYPE (UNIT_V_UF + 2) /* drive type */ #define UNIT_V_DTYPE (UNIT_V_UF + 2) /* drive type */
@ -517,8 +514,10 @@ MTAB dp_mod[] = {
NULL, "3282", &dp_set_size }, NULL, "3282", &dp_set_size },
{ (UNIT_AUTO+UNIT_DTYPE), (DP_3283 << UNIT_V_DTYPE), { (UNIT_AUTO+UNIT_DTYPE), (DP_3283 << UNIT_V_DTYPE),
NULL, "3283", &dp_set_size }, NULL, "3283", &dp_set_size },
{ UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable disk drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write enable disk drive" },
{ MTAB_XTD|MTAB_VDV, 0, "CHAN", "CHAN", { MTAB_XTD|MTAB_VDV, 0, "CHAN", "CHAN",
&io_set_dvc, &io_show_dvc, NULL }, &io_set_dvc, &io_show_dvc, NULL },
{ MTAB_XTD|MTAB_VDV, 0, "DVA", "DVA", { MTAB_XTD|MTAB_VDV, 0, "DVA", "DVA",

View file

@ -189,8 +189,10 @@ REG mt_reg[] = {
}; };
MTAB mt_mod[] = { MTAB mt_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED",
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, &set_writelock, &show_writelock, NULL, "Write enable tape drive" },
{ MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED",
&set_writelock, NULL, NULL, "Write lock tape drive" },
{ MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY",

View file

@ -642,6 +642,8 @@ struct UNIT {
#define UNIT_DISABLE 0002000 /* disable-able */ #define UNIT_DISABLE 0002000 /* disable-able */
#define UNIT_DIS 0004000 /* disabled */ #define UNIT_DIS 0004000 /* disabled */
#define UNIT_IDLE 0040000 /* idle eligible */ #define UNIT_IDLE 0040000 /* idle eligible */
#define UNIT_WLK 0100000 /* hardware write lock */
#define UNIT_WPRT (UNIT_WLK|UNIT_RO)/* write protect */
/* Unused/meaningless flags */ /* Unused/meaningless flags */
#define UNIT_TEXT 0000000 /* text mode - no effect */ #define UNIT_TEXT 0000000 /* text mode - no effect */

View file

@ -41,8 +41,7 @@ typedef uint32 t_lba; /* disk logical block ad
/* Unit flags */ /* Unit flags */
#define DKUF_V_WLK (UNIT_V_UF + 0) /* write locked */ #define DKUF_V_FMT (UNIT_V_UF + 0) /* disk file format */
#define DKUF_V_FMT (UNIT_V_UF + 1) /* disk file format */
#define DKUF_W_FMT 2 /* 2b of formats */ #define DKUF_W_FMT 2 /* 2b of formats */
#define DKUF_M_FMT ((1u << DKUF_W_FMT) - 1) #define DKUF_M_FMT ((1u << DKUF_W_FMT) - 1)
#define DKUF_F_AUTO 0 /* Auto detect format format */ #define DKUF_F_AUTO 0 /* Auto detect format format */
@ -50,7 +49,7 @@ typedef uint32 t_lba; /* disk logical block ad
#define DKUF_F_RAW 2 /* Raw Physical Disk Access */ #define DKUF_F_RAW 2 /* Raw Physical Disk Access */
#define DKUF_F_VHD 3 /* VHD format */ #define DKUF_F_VHD 3 /* VHD format */
#define DKUF_V_UF (DKUF_V_FMT + DKUF_W_FMT) #define DKUF_V_UF (DKUF_V_FMT + DKUF_W_FMT)
#define DKUF_WLK (1u << DKUF_V_WLK) #define DKUF_WLK UNIT_WLK
#define DKUF_FMT (DKUF_M_FMT << DKUF_V_FMT) #define DKUF_FMT (DKUF_M_FMT << DKUF_V_FMT)
#define DKUF_WRP (DKUF_WLK | UNIT_RO) #define DKUF_WRP (DKUF_WLK | UNIT_RO)

View file

@ -1578,6 +1578,9 @@ bus->dev[id] = uptr;
void scsi_set_unit (SCSI_BUS *bus, UNIT *uptr, SCSI_DEV *dev) void scsi_set_unit (SCSI_BUS *bus, UNIT *uptr, SCSI_DEV *dev)
{ {
uptr->up7 = (void *)dev; uptr->up7 = (void *)dev;
if (dev->devtype == SCSI_CDROM)
set_writelock (uptr, 1, NULL, NULL);
} }
/* Reset a unit */ /* Reset a unit */
@ -1677,14 +1680,18 @@ switch (dev->devtype) {
t_stat scsi_set_wlk (UNIT *uptr, int32 val, CONST char *cptr, void *desc) t_stat scsi_set_wlk (UNIT *uptr, int32 val, CONST char *cptr, void *desc)
{ {
return SCPE_OK; SCSI_DEV *dev = (SCSI_DEV *)uptr->up7;
if ((dev->devtype == SCSI_CDROM) && (val == 0))
return sim_messagef (SCPE_ARG, "%s: Can't write enable CDROM device\n", sim_uname (uptr));
return set_writelock (uptr, val, cptr, desc);
} }
/* Show write lock status */ /* Show write lock status */
t_stat scsi_show_wlk (FILE *st, UNIT *uptr, int32 val, CONST void *desc) t_stat scsi_show_wlk (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
{ {
return SCPE_OK; return show_writelock (st, uptr, val, desc);
} }
/* Attach device */ /* Attach device */

View file

@ -66,10 +66,9 @@
#define SCSI_DBG_BUS 0x04000000 /* bus activity */ #define SCSI_DBG_BUS 0x04000000 /* bus activity */
#define SCSI_DBG_DSK 0x08000000 /* disk activity */ #define SCSI_DBG_DSK 0x08000000 /* disk activity */
#define SCSI_V_WLK DKUF_V_WLK /* hwre write lock */
#define SCSI_V_NOAUTO ((DKUF_V_UF > MTUF_V_UF) ? DKUF_V_UF : MTUF_V_UF)/* noautosize */ #define SCSI_V_NOAUTO ((DKUF_V_UF > MTUF_V_UF) ? DKUF_V_UF : MTUF_V_UF)/* noautosize */
#define SCSI_V_UF (SCSI_V_NOAUTO + 1) #define SCSI_V_UF (SCSI_V_NOAUTO + 1)
#define SCSI_WLK (1 << SCSI_V_WLK) #define SCSI_WLK (UNIT_WLK|UNIT_RO) /* hwre write lock */
#define SCSI_NOAUTO (1 << SCSI_V_NOAUTO) #define SCSI_NOAUTO (1 << SCSI_V_NOAUTO)

View file

@ -92,7 +92,7 @@ typedef struct {
/* Unit flags */ /* Unit flags */
#define MTUF_V_WLK (UNIT_V_UF + 0) /* write locked */ #define MTUF_V_UF (UNIT_V_UF + 0)
#define MTUF_F_STD 0 /* SIMH format */ #define MTUF_F_STD 0 /* SIMH format */
#define MTUF_F_E11 1 /* E11 format */ #define MTUF_F_E11 1 /* E11 format */
#define MTUF_F_TPC 2 /* TPC format */ #define MTUF_F_TPC 2 /* TPC format */
@ -110,8 +110,7 @@ typedef struct {
#define MTAT_F_RSTS 3 /* RSTS ANSI type */ #define MTAT_F_RSTS 3 /* RSTS ANSI type */
#define MTAT_F_VAR 4 /* RSTS VAR ANSI type */ #define MTAT_F_VAR 4 /* RSTS VAR ANSI type */
#define MTUF_V_UF (MTUF_V_WLK + 1) #define MTUF_WLK UNIT_WLK
#define MTUF_WLK (1u << MTUF_V_WLK)
#define MTUF_WRP (MTUF_WLK | UNIT_RO) #define MTUF_WRP (MTUF_WLK | UNIT_RO)
#define MT_SET_PNU(u) (u)->dynflags |= UNIT_TAPE_PNU #define MT_SET_PNU(u) (u)->dynflags |= UNIT_TAPE_PNU