diff --git a/3B2/3b2_ctc.c b/3B2/3b2_ctc.c index b6f4b3c8..869a766e 100644 --- a/3B2/3b2_ctc.c +++ b/3B2/3b2_ctc.c @@ -99,10 +99,10 @@ UNIT ctc_unit = { }; MTAB ctc_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enabled tape drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock tape drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, "RQUEUE=n", NULL, NULL, &ctc_show_rqueue, NULL, "Display Request Queue for card n" }, { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "CQUEUE=n", NULL, @@ -365,7 +365,7 @@ static void ctc_cmd(uint8 cid, break; } - if (ctc_unit.flags & UNIT_WLK) { + if (ctc_unit.flags & UNIT_WPRT) { cqe->opcode = CTC_RDONLY; break; } @@ -489,7 +489,7 @@ static void ctc_cmd(uint8 cid, break; } - if (ctc_unit.flags & UNIT_WLK) { + if (ctc_unit.flags & UNIT_WPRT) { cqe->opcode = CTC_RDONLY; break; } diff --git a/3B2/3b2_ctc.h b/3B2/3b2_ctc.h index cd0f5061..9ac3cb06 100644 --- a/3B2/3b2_ctc.h +++ b/3B2/3b2_ctc.h @@ -54,9 +54,6 @@ #include "sim_defs.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_IPL 12 #define CTC_VERSION 1 diff --git a/B5500/b5500_mt.c b/B5500/b5500_mt.c index 30e9d23e..47ad67db 100644 --- a/B5500/b5500_mt.c +++ b/B5500/b5500_mt.c @@ -126,10 +126,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, - "Write ring in place"}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, - "no Write ring in place"}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B)" }, diff --git a/CDC1700/cdc1700_defs.h b/CDC1700/cdc1700_defs.h index 1dd6e8d1..904cb5ae 100644 --- a/CDC1700/cdc1700_defs.h +++ b/CDC1700/cdc1700_defs.h @@ -110,14 +110,12 @@ * Private unit flags */ #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_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_7TRACK (1 << UNIT_V_7TRACK) -#define UNIT_WPROT (1 << UNIT_V_WPROT) #define UNIT_854 (1 << UNIT_V_854) #define UNIT_856_4 (1 << UNIT_V_856_4) #define UNIT_DRMSIZE (1 << UNIT_V_DRMSIZE) diff --git a/CDC1700/cdc1700_mt.c b/CDC1700/cdc1700_mt.c index 8ec72c04..ef431c84 100644 --- a/CDC1700/cdc1700_mt.c +++ b/CDC1700/cdc1700_mt.c @@ -291,7 +291,6 @@ t_stat mt_reset(DEVICE *); t_stat mt_boot(int32, DEVICE *); t_stat mt_attach(UNIT *, CONST char *); 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 MTclear(DEVICE *); @@ -483,10 +482,10 @@ MTAB mt_mod[] = { &mt_set_type, &mt_show_type, NULL, "Set/Display magtape controller type" }, { MTAB_XTD|MTAB_VDV, 0, "EQUIPMENT", "EQUIPMENT=hexAddress", &set_equipment, &show_addr, NULL, "Set/Display equipment address" }, - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", - &mt_vlock, NULL, NULL, "Mark transport as write enabled" }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", - &mt_vlock, NULL, NULL, "Mark transport as writed locked" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_VUN, 0, "FORMAT", "FORMAT", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Define tape format" }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", @@ -1490,9 +1489,9 @@ t_stat mt_attach(UNIT *uptr, CONST char *cptr) if (r != SCPE_OK) return r; - uptr->flags &= ~UNIT_WPROT; + uptr->flags &= ~UNIT_WPRT; if (sim_switches & SWMASK('R')) - uptr->flags |= UNIT_WPROT; + uptr->flags |= UNIT_WPRT; uptr->DENS = IO_ST2_800; @@ -1501,7 +1500,7 @@ t_stat mt_attach(UNIT *uptr, CONST char *cptr) */ if (MTdev.iod_unit == uptr) { 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; else MTdev.STATUS2 |= IO_ST2_WENABLE; if ((uptr->flags & UNIT_7TRACK) != 0) @@ -1531,17 +1530,6 @@ t_stat mt_detach(UNIT *uptr) 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 * 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); 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; else MTdev.STATUS2 |= IO_ST2_WENABLE; 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. */ 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; else MTdev.STATUS2 |= IO_ST2_WENABLE; if ((uptr->flags & UNIT_7TRACK) != 0) diff --git a/H316/h316_dp.c b/H316/h316_dp.c index 1a3f9208..05d7de44 100644 --- a/H316/h316_dp.c +++ b/H316/h316_dp.c @@ -73,11 +73,8 @@ #include "h316_defs.h" #include -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_WLK (1 << UNIT_V_WLK) #define FNC u3 /* saved function */ #define CYL u4 /* actual cylinder */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */ #define DP_TRKLEN 2048 /* track length, words */ #define DP_NUMDRV 8 /* max # drives */ #define DP_NUMTYP 3 /* # controller types */ @@ -328,8 +325,10 @@ REG dp_reg[] = { }; MTAB dp_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &dp_settype, NULL, NULL }, { MTAB_XTD | MTAB_VDV, TYPE_4651, NULL, "4651", diff --git a/H316/h316_mt.c b/H316/h316_mt.c index 9b5ba972..442cc37a 100644 --- a/H316/h316_mt.c +++ b/H316/h316_mt.c @@ -155,8 +155,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/HP2100/hp2100_disclib.h b/HP2100/hp2100_disclib.h index ef765ed8..3240dcc2 100644 --- a/HP2100/hp2100_disclib.h +++ b/HP2100/hp2100_disclib.h @@ -73,16 +73,14 @@ /* Unit flags and accessors */ #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 + 3) /* bits 3-3: heads unloaded */ -#define UNIT_V_FMT (UNIT_V_UF + 4) /* bits 4-4: format enabled */ -#define UNIT_V_AUTO (UNIT_V_UF + 5) /* bits 5-5: autosize */ -#define DL_V_UF (UNIT_V_UF + 6) /* first free unit flag bit */ +#define UNIT_V_UNLOAD (UNIT_V_UF + 2) /* bits 2-2: heads unloaded */ +#define UNIT_V_FMT (UNIT_V_UF + 3) /* bits 3-3: format enabled */ +#define UNIT_V_AUTO (UNIT_V_UF + 4) /* bits 4-4: autosize */ +#define DL_V_UF (UNIT_V_UF + 5) /* first free unit flag bit */ #define UNIT_M_MODEL 03 /* model ID mask */ #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_FMT (1 << UNIT_V_FMT) #define UNIT_AUTO (1 << UNIT_V_AUTO) diff --git a/HP2100/hp2100_dp.c b/HP2100/hp2100_dp.c index 52e8a220..619bbc86 100644 --- a/HP2100/hp2100_dp.c +++ b/HP2100/hp2100_dp.c @@ -235,13 +235,10 @@ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_UNLOAD (UNIT_V_UF + 1) /* heads unloaded */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_UNLOAD (UNIT_V_UF + 0) /* heads unloaded */ #define UNIT_UNLOAD (1 << UNIT_V_UNLOAD) #define FNC u3 /* saved function */ #define DRV u4 /* drive number (DC) */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */ #define DP_N_NUMWD 7 #define DP_NUMWD (1 << DP_N_NUMWD) /* words/sector */ diff --git a/HP2100/hp2100_dq.c b/HP2100/hp2100_dq.c index 0153c901..3a903707 100644 --- a/HP2100/hp2100_dq.c +++ b/HP2100/hp2100_dq.c @@ -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_WLK (1 << UNIT_V_WLK) #define UNIT_UNLOAD (1 << UNIT_V_UNLOAD) #define FNC u3 /* saved function */ #define DRV u4 /* drive number (DC) */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write prot */ #define DQ_N_NUMWD 7 #define DQ_NUMWD (1 << DQ_N_NUMWD) /* words/sector */ diff --git a/I1401/i1401_mt.c b/I1401/i1401_mt.c index 69671d6b..0b1f55db 100644 --- a/I1401/i1401_mt.c +++ b/I1401/i1401_mt.c @@ -158,8 +158,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/I650/i650_mt.c b/I650/i650_mt.c index 283e80e3..230af4d3 100644 --- a/I650/i650_mt.c +++ b/I650/i650_mt.c @@ -72,8 +72,8 @@ UNIT mt_unit[6] = { }; MTAB mt_mod[] = { - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write ring in place"}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "No write ring in place"}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B)"}, {MTAB_XTD | MTAB_VUN, 0, "LENGTH", "LENGTH", &mt_set_len, &mt_show_len, NULL, diff --git a/I7000/i7000_ht.c b/I7000/i7000_ht.c index 7e3cd0cf..f9c235d3 100644 --- a/I7000/i7000_ht.c +++ b/I7000/i7000_ht.c @@ -178,10 +178,10 @@ UNIT hta_unit[] = { }; MTAB ht_mod[] = { - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, - "Write ring in place"}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, - "no Write ring in place"}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL, "Set/Display tape format (SIMH, E11, TPC, P7B)" }, diff --git a/I7000/i7000_mt.c b/I7000/i7000_mt.c index 62bbc3b4..28e20351 100644 --- a/I7000/i7000_mt.c +++ b/I7000/i7000_mt.c @@ -238,10 +238,10 @@ UNIT mta_unit[] = { }; MTAB mt_mod[] = { - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, - "Write ring in place"}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL, NULL, NULL, - "No write ring in place"}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &mt_tape_density, NULL, NULL, "556 BPI"}, {MTUF_LDN, MTUF_LDN, "low density", "LOW", &mt_tape_density, NULL, NULL, diff --git a/I7094/i7094_mt.c b/I7094/i7094_mt.c index 809fe56a..924a485d 100644 --- a/I7094/i7094_mt.c +++ b/I7094/i7094_mt.c @@ -96,8 +96,10 @@ extern uint32 chrono_rd (uint8 *buf, uint32 bufsiz); DIB mt_dib = { &mt_chsel, &mt_chwr }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, MTUF_LDN, "low density", "LOW", NULL }, { MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", diff --git a/Interdata/id_dp.c b/Interdata/id_dp.c index 9c2eee8a..070251f1 100644 --- a/Interdata/id_dp.c +++ b/Interdata/id_dp.c @@ -37,18 +37,15 @@ #define DP_NUMBY 256 /* bytes/sector */ #define DP_NUMSC 24 /* sectors/track */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */ +#define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */ #define UNIT_M_DTYPE 0x1 #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_AUTO (1 << UNIT_V_AUTO) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define CYL u3 /* current cylinder */ #define STD u4 /* drive status */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* Controller status */ @@ -220,8 +217,10 @@ REG dp_reg[] = { }; MTAB dp_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, "2315", NULL, NULL }, { (UNIT_DTYPE+UNIT_ATT), (TYPE_5440 << UNIT_V_DTYPE) + UNIT_ATT, diff --git a/Interdata/id_fd.c b/Interdata/id_fd.c index d0fe57a4..4347efcc 100644 --- a/Interdata/id_fd.c +++ b/Interdata/id_fd.c @@ -45,9 +45,6 @@ #define FD_NUMLRN (FD_NUMTR * FD_NUMSC) /* LRNs/disk */ #define FD_SIZE (FD_NUMLRN * FD_NUMBY) /* bytes/disk */ #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 FNC u4 /* last function */ #define GET_DA(x) (((x) - 1) * FD_NUMBY) @@ -186,8 +183,10 @@ REG fd_reg[] = { }; MTAB fd_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &set_dev, &show_dev, NULL }, { 0 } diff --git a/Interdata/id_idc.c b/Interdata/id_idc.c index 5e458772..961a9bdd 100644 --- a/Interdata/id_idc.c +++ b/Interdata/id_idc.c @@ -39,11 +39,9 @@ #define IDC_NUMBY 256 /* bytes/sector */ #define IDC_NUMSC 64 /* sectors/track */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */ +#define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */ #define UNIT_M_DTYPE 0x7 #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_AUTO (1 << UNIT_V_AUTO) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) @@ -52,7 +50,6 @@ #define HD u4 /* current head */ #define STD buf /* drive status */ #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_DIRMASK (IDC_DRVMASK << (i_IDC + 1)) /* drive irq mask */ @@ -291,8 +288,10 @@ REG idc_reg[] = { }; MTAB idc_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, "MCCDD16", NULL, NULL }, { (UNIT_DTYPE+UNIT_ATT), (TYPE_MCCDD48 << UNIT_V_DTYPE) + UNIT_ATT, diff --git a/Interdata/id_mt.c b/Interdata/id_mt.c index fb2e708d..0d320145 100644 --- a/Interdata/id_mt.c +++ b/Interdata/id_mt.c @@ -149,8 +149,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/NOVA/nova_dkp.c b/NOVA/nova_dkp.c index c6076a43..3ba98abf 100644 --- a/NOVA/nova_dkp.c +++ b/NOVA/nova_dkp.c @@ -67,17 +67,14 @@ #define DKP_NUMDR 4 /* #drives */ #define DKP_NUMWD 256 /* words/sector */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */ +#define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */ #define UNIT_M_DTYPE 017 #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_AUTO (1 << UNIT_V_AUTO) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & UNIT_M_DTYPE) #define FUNC u3 /* function */ #define CYL u4 /* on cylinder */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* Unit, surface, sector, count register @@ -395,8 +392,10 @@ REG dkp_reg[] = { }; MTAB dkp_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, "6030 (floppy)", NULL, NULL }, { (UNIT_DTYPE+UNIT_ATT), (TYPE_DSDD << UNIT_V_DTYPE) + UNIT_ATT, diff --git a/NOVA/nova_mta.c b/NOVA/nova_mta.c index 92652cc6..15822877 100644 --- a/NOVA/nova_mta.c +++ b/NOVA/nova_mta.c @@ -224,8 +224,10 @@ REG mta_reg[] = { }; MTAB mta_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", &mta_vlock }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", &mta_vlock }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { 0 } diff --git a/PDP1/pdp1_dt.c b/PDP1/pdp1_dt.c index 856c2393..6a6a7253 100644 --- a/PDP1/pdp1_dt.c +++ b/PDP1/pdp1_dt.c @@ -94,17 +94,14 @@ #include "pdp1_defs.h" #define DT_NUMDR 8 /* #drives */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) #define STATE u3 /* unit state */ #define LASTT u4 /* last time update */ #define DT_WC 030 /* word count */ #define DT_CA 031 /* current addr */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* System independent DECtape constants */ @@ -334,8 +331,10 @@ REG dt_reg[] = { MTAB dt_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "SBSLVL", "SBSLVL", &dev_set_sbs, &dev_show_sbs, (void *) &dt_sbs }, - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, @@ -385,8 +384,8 @@ if (pulse == 004) { /* MLC */ if ((uptr == NULL) || /* invalid? */ ((uptr->flags) & UNIT_DIS) || /* disabled? */ (fnc >= FNC_WMRK) || /* write mark? */ - ((fnc == FNC_WRIT) && (uptr->flags & UNIT_WLK)) || - ((fnc == FNC_WALL) && (uptr->flags & UNIT_WLK))) + ((fnc == FNC_WRIT) && (uptr->flags & UNIT_WPRT)) || + ((fnc == FNC_WALL) && (uptr->flags & UNIT_WPRT))) dt_seterr (uptr, DTB_SEL); /* select err */ else dt_newsa (dtsa); } @@ -1088,7 +1087,7 @@ if (sim_is_active (uptr)) { } fbuf = (uint32 *) uptr->filebuf; /* file buffer */ 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 */ if (uptr->flags & UNIT_8FMT) { /* 12b? */ for (ba = 0; ba < uptr->hwmark; ) { /* loop thru file */ diff --git a/PDP10/kx10_disk.h b/PDP10/kx10_disk.h index 21bf9bc8..465f0b78 100644 --- a/PDP10/kx10_disk.h +++ b/PDP10/kx10_disk.h @@ -24,9 +24,6 @@ /* 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_M_FMT 7 #define GET_FMT(x) (((x) >> UNIT_V_FMT) & UNIT_M_FMT) diff --git a/PDP10/kx10_dp.c b/PDP10/kx10_dp.c index cd13e4cb..5f69c8d1 100644 --- a/PDP10/kx10_dp.c +++ b/PDP10/kx10_dp.c @@ -260,8 +260,10 @@ DIB dp_dib[] = { MTAB dp_mod[] = { - {UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &dp_set_hdr, &dp_show_hdr, NULL, "Disable header writing"}, {MTAB_XTD|MTAB_VDV, DEV_WHDR, "write header", "HEADERS", diff --git a/PDP10/kx10_dt.c b/PDP10/kx10_dt.c index f92bf341..9404a44f 100644 --- a/PDP10/kx10_dt.c +++ b/PDP10/kx10_dt.c @@ -91,13 +91,10 @@ #if (NUM_DEVS_DT > 0) #define DT_DEVNUM 0320 #define DT_NUMDR 8 /* #drives */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* System independent DECtape constants */ @@ -320,8 +317,10 @@ REG dt_reg[] = { }; MTAB dt_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, @@ -1234,6 +1233,7 @@ void dt_flush (UNIT* uptr) uint32 ba, k, *fbuf; 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 */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */ if (uptr->flags & UNIT_8FMT) { /* 12b? */ @@ -1285,10 +1285,8 @@ t_stat dt_detach (UNIT* uptr) sim_cancel (uptr); uptr->CMD = uptr->pos = 0; } - 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 */ + if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */ + dt_flush(uptr); /* end if hwmark */ free (uptr->filebuf); /* release buf */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->filebuf = NULL; /* clear buf ptr */ diff --git a/PDP10/kx10_mt.c b/PDP10/kx10_mt.c index a17894e0..57b5a984 100644 --- a/PDP10/kx10_mt.c +++ b/PDP10/kx10_mt.c @@ -178,8 +178,10 @@ UNIT mt_unit[] = { DIB mt_dib = {MT_DEVNUM, 2, &mt_devio, NULL}; MTAB mt_mod[] = { - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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}, {MTUF_7TRK, 0, "9T", "9T", NULL, NULL}, {MTUF_7TRK, MTUF_7TRK, "7T", "7T", NULL, NULL}, @@ -295,7 +297,7 @@ t_stat mt_devio(uint32 dev, uint64 *data) { break; case WRITE: - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { mt_status |= IDLE_UNIT|ILL_OPR|EOF_FLAG; break; } @@ -370,7 +372,7 @@ t_stat mt_devio(uint32 dev, uint64 *data) { res |= SEVEN_CHAN; if ((uptr->flags & UNIT_ATT) != 0 && (uptr->CNTRL & MT_MOTION) == 0) res |= IDLE_UNIT; - if ((uptr->flags & MTUF_WLK) != 0) + if ((uptr->flags & MTUF_WRP) != 0) res |= WRITE_LOCK; if (sim_tape_bot(uptr)) res |= BOT_FLAG; @@ -800,7 +802,7 @@ t_stat mt_srv(UNIT * uptr) break; case WTM: - if ((uptr->flags & MTUF_WLK) != 0) + if ((uptr->flags & MTUF_WRP) != 0) return mt_error(uptr, MTSE_WRP, dptr); if (uptr->CPOS == 0) { mt_status &= ~(IDLE_UNIT|BOT_FLAG|EOT_FLAG); @@ -819,7 +821,7 @@ t_stat mt_srv(UNIT * uptr) break; case ERG: - if ((uptr->flags & MTUF_WLK) != 0) + if ((uptr->flags & MTUF_WRP) != 0) return mt_error(uptr, MTSE_WRP, dptr); uptr->CNTRL &= ~MT_MOTION; mt_status &= ~(IDLE_UNIT|BOT_FLAG|EOT_FLAG); diff --git a/PDP10/kx10_rc.c b/PDP10/kx10_rc.c index 08978ca1..aa12dbd8 100644 --- a/PDP10/kx10_rc.c +++ b/PDP10/kx10_rc.c @@ -34,13 +34,10 @@ /* Flags in the unit flags word */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */ +#define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */ #define UNIT_M_DTYPE 1 -#define UNIT_WLK (1 << UNIT_V_WLK) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_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 */ @@ -155,8 +152,10 @@ DIB rc_dib[] = { }; MTAB rc_mod[] = { - {UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, (RM10_DTYPE << UNIT_V_DTYPE), "RM10", "RM10", &rc_set_type }, {0} diff --git a/PDP10/kx10_rp.c b/PDP10/kx10_rp.c index a7040d9b..41831630 100644 --- a/PDP10/kx10_rp.c +++ b/PDP10/kx10_rp.c @@ -338,8 +338,10 @@ MTAB rp_mod[] = { {MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type, NULL, "Sets controller to RH20"}, #endif - {UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, (RP06_DTYPE << UNIT_V_DTYPE), "RP06", "RP06", &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 */ sim_debug(DEBUG_DETAIL, dptr, "%s%o Status=%06o\n", dptr->name, unit, uptr->CMD); /* Set if drive not writable */ - if (uptr->flags & UNIT_WLK) + if (uptr->flags & UNIT_WPRT) uptr->CMD |= DS_WRL; /* If drive not ready don't do anything */ if ((uptr->CMD & DS_DRY) == 0) { @@ -1078,7 +1080,7 @@ t_stat rp_attach (UNIT *uptr, CONST char *cptr) if (rh[ctlr].dev == rptr) break; } - if (uptr->flags & UNIT_WLK) + if (uptr->flags & UNIT_WPRT) uptr->CMD |= DS_WRL; if (sim_switches & SIM_SW_REST) return SCPE_OK; diff --git a/PDP10/kx10_rs.c b/PDP10/kx10_rs.c index 525f83a9..4c4b57e0 100644 --- a/PDP10/kx10_rs.c +++ b/PDP10/kx10_rs.c @@ -36,14 +36,11 @@ /* Flags in the unit flags word */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */ +#define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */ #define UNIT_M_DTYPE 7 -#define UNIT_WLK (1 << UNIT_V_WLK) #define UNIT_DTYPE (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 UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* 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, NULL, "Sets controller to RH20"}, #endif - {UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, (RS04_DTYPE << UNIT_V_DTYPE), "RS04", "RS04", &rs_set_type }, {0} @@ -289,7 +288,7 @@ rs_write(DEVICE *dptr, struct rh_if *rhc, int reg, uint32 data) { case 000: /* control */ sim_debug(DEBUG_DETAIL, dptr, "%s%o Status=%06o\n", dptr->name, unit, uptr->CMD); /* Set if drive not writable */ - if (uptr->flags & UNIT_WLK) + if (uptr->flags & UNIT_WPRT) uptr->CMD |= DS_WRL; /* If drive not ready don't do anything */ if ((uptr->CMD & DS_DRY) == 0) { @@ -679,7 +678,7 @@ t_stat rs_attach (UNIT *uptr, CONST char *cptr) if (rh[ctlr].dev == rstr) break; } - if (uptr->flags & UNIT_WLK) + if (uptr->flags & UNIT_WPRT) uptr->CMD |= DS_WRL; if (sim_switches & SIM_SW_REST) return SCPE_OK; diff --git a/PDP10/kx10_tu.c b/PDP10/kx10_tu.c index 68e7a3d2..8fb8b5f3 100644 --- a/PDP10/kx10_tu.c +++ b/PDP10/kx10_tu.c @@ -202,8 +202,10 @@ MTAB tu_mod[] = { {MTAB_XTD|MTAB_VDV, TYPE_RH20, "RH20", "RH20", &rh_set_type, &rh_show_type, NULL, "Sets controller to RH20"}, #endif - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL}, {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; if (uptr->CMD & CS_TM) temp |= DS_TM; - if (uptr->flags & MTUF_WLK) + if (uptr->flags & MTUF_WRP) temp |= DS_WRL; if ((uptr->CMD & (CS_MOTION|CS_PIP|CS1_GO)) == 0) temp |= DS_DRY; @@ -662,7 +664,7 @@ t_stat tu_srv(UNIT * uptr) rh_finish_op(rhc, 0); return SCPE_OK; } - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { tu_error(uptr, MTSE_WRP); rh_finish_op(rhc, 0); return SCPE_OK; @@ -718,7 +720,7 @@ t_stat tu_srv(UNIT * uptr) case FNC_WTM: uptr->CMD &= ~CS_PIP; uptr->CMD |= CS_ATA; - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { tu_error(uptr, MTSE_WRP); } else { tu_error(uptr, sim_tape_wrtmk(uptr)); @@ -729,7 +731,7 @@ t_stat tu_srv(UNIT * uptr) case FNC_ERASE: uptr->CMD &= ~CS_PIP; uptr->CMD |= CS_ATA; - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { tu_error(uptr, MTSE_WRP); } else { tu_error(uptr, sim_tape_wrgap(uptr, 35)); diff --git a/PDP10/pdp10_rp.c b/PDP10/pdp10_rp.c index 176c5bc3..777dbf40 100644 --- a/PDP10/pdp10_rp.c +++ b/PDP10/pdp10_rp.c @@ -84,18 +84,15 @@ /* 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_W_DTYPE 3 /* 3b disk type */ #define UNIT_M_DTYPE 7 #define UNIT_V_AUTO (UNIT_V_DTYPE + UNIT_W_DTYPE) /* autosize */ #define UNIT_V_UTS (UNIT_V_AUTO + 1) /* Up to speed */ #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_AUTO (1 << UNIT_V_AUTO) #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 */ @@ -449,10 +446,10 @@ REG rp_reg[] = { }; MTAB rp_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_VUN, RM03_DTYPE, NULL, "RM03", &rp_set_type, NULL, NULL, "Set RM03 Disk Type" }, { MTAB_XTD|MTAB_VUN, RP04_DTYPE, NULL, "RP04", diff --git a/PDP10/pdp10_tu.c b/PDP10/pdp10_tu.c index 3c3b83a0..28870a5f 100644 --- a/PDP10/pdp10_tu.c +++ b/PDP10/pdp10_tu.c @@ -400,8 +400,10 @@ REG tu_reg[] = { }; MTAB tu_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/PDP10/pdp6_dsk.c b/PDP10/pdp6_dsk.c index 72f9a16f..2441f788 100644 --- a/PDP10/pdp6_dsk.c +++ b/PDP10/pdp6_dsk.c @@ -34,13 +34,10 @@ /* Flags in the unit flags word */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DTYPE (UNIT_V_UF + 1) /* disk type */ +#define UNIT_V_DTYPE (UNIT_V_UF + 0) /* disk type */ #define UNIT_M_DTYPE 1 -#define UNIT_WLK (1 << UNIT_V_WLK) #define UNIT_DTYPE (UNIT_M_DTYPE << UNIT_V_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 */ @@ -164,8 +161,10 @@ DIB dsk_dib[] = { }; MTAB dsk_mod[] = { - {UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &dsk_set_dct, &dsk_show_dct, NULL}, {0} @@ -197,7 +196,7 @@ dsk_devio(uint32 dev, uint64 *data) { res |= ((uint64)(dsk_status & RMASK)); if ((uptr->flags & UNIT_ATT) == 0) res |= OPR; - if (uptr->flags & UNIT_WLK) + if (uptr->flags & UNIT_WPRT) res |= WLE; *data = res; 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 */ 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 */ int da; for (; uptr->DATAPTR < DSK_WDS; uptr->DATAPTR++) @@ -313,7 +312,7 @@ dsk_svc (UNIT *uptr) } else { sim_debug(DEBUG_DETAIL, dptr, "DSK %d Write %012llo %d\n", ctlr, data, uptr->DATAPTR); - if ((uptr->flags & UNIT_WLK) != 0) + if ((uptr->flags & UNIT_WPRT) != 0) dsk_status |= DCE|PER|FER; dsk_buf[uptr->DATAPTR] = data; } @@ -346,7 +345,7 @@ dsk_svc (UNIT *uptr) dsk_buf[wc] = 0; } else if (dsk_cmd & WR_CMD) { /* Check if we can write disk */ - if (uptr->flags & UNIT_WLK) { + if (uptr->flags & UNIT_WPRT) { dsk_status |= CME|FER; } } @@ -393,7 +392,7 @@ dsk_svc (UNIT *uptr) if (dsk_octflp == SNA) { sim_debug(DEBUG_DETAIL, dptr, "DSK %d Sna\n", ctlr); dsk_octflp = ADT; - if (uptr->flags & UNIT_WLK) + if (uptr->flags & UNIT_WPRT) dsk_status |= WLE|FER; } diff --git a/PDP10/pdp6_dtc.c b/PDP10/pdp6_dtc.c index 6490abe4..65f5d214 100644 --- a/PDP10/pdp6_dtc.c +++ b/PDP10/pdp6_dtc.c @@ -93,13 +93,10 @@ #if (NUM_DEVS_DTC > 0) #define DTC_DEVNUM 0210 #define DTC_NUMDR 8 /* #drives */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* System independent DECtape constants */ @@ -295,8 +292,10 @@ REG dtc_reg[] = { }; MTAB dtc_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, @@ -1247,6 +1246,7 @@ dtc_flush (UNIT* uptr) uint32 ba, k, *fbuf; 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 */ rewind (uptr->fileref); /* start of file */ if (uptr->flags & UNIT_8FMT) { /* 12b? */ @@ -1289,10 +1289,8 @@ dtc_detach (UNIT* uptr) sim_cancel (uptr); uptr->CMD = uptr->pos = 0; } - 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 */ + if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */ + dtc_flush (uptr); /* end if hwmark */ free (uptr->filebuf); /* release buf */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->filebuf = NULL; /* clear buf ptr */ diff --git a/PDP10/pdp6_mtc.c b/PDP10/pdp6_mtc.c index 2be3fb5f..a25221cf 100644 --- a/PDP10/pdp6_mtc.c +++ b/PDP10/pdp6_mtc.c @@ -205,8 +205,10 @@ UNIT mtc_unit[] = { DIB mtc_dib = {MTC_DEVCTL, 3, &mtc_devio, NULL}; MTAB mtc_mod[] = { - {MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL}, - {MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL}, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, MTUF_7TRK, "7T", "7T", NULL, NULL}, {MTAB_XTD|MTAB_VUN, 0, "FORMAT", "FORMAT", @@ -286,7 +288,7 @@ mtc_devio(uint32 dev, uint64 *data) { case CONI: uptr = &mtc_unit[mtc_sel_unit]; res = mtc_status | (uint64)(uptr->STATUS); - if ((uptr->flags & MTUF_WLK) != 0) + if ((uptr->flags & MTUF_WRP) != 0) res |= WRITE_LOCK; if (sim_tape_bot(uptr)) res |= BOT_FLAG; @@ -668,7 +670,7 @@ mtc_srv(UNIT * uptr) /* Writing and Type A, request first data word */ if (uptr->CNTRL & MTC_START) { uptr->CNTRL &= ~MTC_START; - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { uptr->STATUS |= ILL_OPR; break; } @@ -725,7 +727,7 @@ mtc_srv(UNIT * uptr) if (uptr->CNTRL & MTC_START) { sim_debug(DEBUG_DETAIL, dptr, "MTC%o WTM\n", unit); uptr->CNTRL &= ~MTC_START; - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { uptr->STATUS |= ILL_OPR; mtc_status |= (EOR_FLAG); break; @@ -743,7 +745,7 @@ mtc_srv(UNIT * uptr) if (uptr->CNTRL & MTC_START) { sim_debug(DEBUG_DETAIL, dptr, "MTC%o ERG\n", unit); uptr->CNTRL &= ~MTC_START; - if ((uptr->flags & MTUF_WLK) != 0) { + if ((uptr->flags & MTUF_WRP) != 0) { uptr->STATUS |= ILL_OPR; mtc_status |= (EOR_FLAG); break; diff --git a/PDP11/pdp11_hk.c b/PDP11/pdp11_hk.c index cb1c07b0..790214c4 100644 --- a/PDP11/pdp11_hk.c +++ b/PDP11/pdp11_hk.c @@ -98,17 +98,14 @@ static struct drvtyp drv_tab[] = { /* 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_AUTO (UNIT_V_DTYPE + 1) /* autosize */ #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_RK06 (0 << UNIT_V_DTYPE) #define UNIT_RK07 (1 << UNIT_V_DTYPE) #define UNIT_AUTO (1 << UNIT_V_AUTO) #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) /* Parameters in the unit descriptor */ @@ -664,10 +661,10 @@ REG hk_reg[] = { }; MTAB hk_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_DUMMY, 0, NULL, "BADBLOCK", &hk_set_bad, NULL, NULL, "write bad block table on last track" }, { MTAB_XTD|MTAB_VUN, 0, NULL, "RK06", diff --git a/PDP11/pdp11_rk.c b/PDP11/pdp11_rk.c index b302034e..6e0d66f7 100644 --- a/PDP11/pdp11_rk.c +++ b/PDP11/pdp11_rk.c @@ -127,11 +127,9 @@ static struct drvtyp drv_tab[] = { /* 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_HWLK (1u << UNIT_V_HWLK) +#define UNIT_HWLK UNIT_WPRT #define UNIT_SWLK (1u << UNIT_V_SWLK) -#define UNIT_WPRT (UNIT_HWLK|UNIT_SWLK|UNIT_RO) /* write prot */ #define GET_DTYPE(x) (0) /* Parameters in the unit descriptor */ @@ -425,10 +423,10 @@ REG rk_reg[] = { }; MTAB rk_mod[] = { - { UNIT_HWLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_VUN, 0, "TYPE", NULL, NULL, &rk_show_type, NULL, "Display device type" }, { 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; if (!sim_is_active (uptr)) /* idle? */ rkds = rkds | RKDS_RWS; - if (uptr->flags & UNIT_WPRT) /* write locked? */ + if (uptr->flags & (UNIT_HWLK|UNIT_SWLK)) /* write locked? */ rkds = rkds | RKDS_WLK; if (GET_SECT (rkda) == (rkds & RKDS_SC)) rkds = rkds | RKDS_ON_SC; @@ -621,7 +619,7 @@ if ((rkcs & RKCS_FMT) && /* format and */ return; } if ((func == RKCS_WRITE) && /* write and locked? */ - (uptr->flags & UNIT_WPRT)) { + (uptr->flags & (UNIT_HWLK|UNIT_SWLK))) { rk_set_done (RKER_WLK); return; } diff --git a/PDP11/pdp11_rl.c b/PDP11/pdp11_rl.c index cd403f93..1d752295 100644 --- a/PDP11/pdp11_rl.c +++ b/PDP11/pdp11_rl.c @@ -132,7 +132,6 @@ static struct drvtyp drv_tab[] = { /* 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_AUTO (UNIT_V_RL02 + 1) /* autosize enable */ #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_OFFL (1u << UNIT_V_OFFL) #define UNIT_DUMMY (1u << UNIT_V_DUMMY) -#define UNIT_WLK (1u << UNIT_V_WLK) #define UNIT_RL02 (1u << UNIT_V_RL02) #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) /* Parameters in the unit descriptor */ @@ -374,10 +371,10 @@ static const MTAB rl_mod[] = { &rl_set_load, NULL, NULL, "Unload drive" }, { MTAB_XTD|MTAB_VUN|MTAB_NMO, 0, "DSTATE", NULL, NULL, &rl_show_dstate, NULL, "Display drive state" }, - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_DUMMY, 0, NULL, "BADBLOCK", &rl_set_bad, NULL, NULL, "Write bad block table on last track" }, { MTAB_XTD|MTAB_VUN, 0, NULL, "RL01", diff --git a/PDP11/pdp11_rp.c b/PDP11/pdp11_rp.c index 43aefe3a..48ffbad0 100644 --- a/PDP11/pdp11_rp.c +++ b/PDP11/pdp11_rp.c @@ -85,17 +85,14 @@ /* 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_M_DTYPE 7 #define UNIT_V_AUTO (DKUF_V_UF + 3) /* autosize */ #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_AUTO (1 << UNIT_V_AUTO) #define UNIT_DUMMY (1 << UNIT_V_DUMMY) #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 */ @@ -643,10 +640,10 @@ REG rp_reg[] = { MTAB rp_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "MASSBUS", NULL, NULL, &mba_show_num, NULL, "Display Massbus number" }, - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_DUMMY, 0, NULL, "BADBLOCK", &rp_set_bad, NULL, NULL, "write bad block table on last track" }, { MTAB_XTD|MTAB_VUN, RM03_DTYPE, NULL, "RM03", diff --git a/PDP11/pdp11_rq.c b/PDP11/pdp11_rq.c index bfa2ec9d..4a4f7b71 100644 --- a/PDP11/pdp11_rq.c +++ b/PDP11/pdp11_rq.c @@ -156,14 +156,12 @@ extern int32 MMR2; #define RQ_M_PFN 0x1FFFFF /* map entry PFN */ #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_DTYPE (UNIT_V_ATP + 1) /* drive type */ #define UNIT_W_DTYPE 5 /* 5b drive type encode */ #define UNIT_M_DTYPE ((1u << UNIT_W_DTYPE) - 1) #define UNIT_V_NOAUTO (UNIT_V_DTYPE + UNIT_W_DTYPE) /* noautosize */ #define UNIT_ONL (1 << UNIT_V_ONL) -#define UNIT_WLK (1 << UNIT_V_WLK) #define UNIT_ATP (1 << UNIT_V_ATP) #define UNIT_NOAUTO (1 << UNIT_V_NOAUTO) #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_complete u6 /* io completion flag */ #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)? \ UF_RMV: 0) #define RQ_WPH(u) (((drv_tab[GET_DTYPE (u->flags)].flgs & RQDF_RO) || \ @@ -1032,12 +1029,10 @@ REG rq_reg[] = { }; MTAB rq_mod[] = { - { UNIT_WLK, 0, NULL, "WRITEENABLED", - &rq_set_wlk, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, NULL, "LOCKED", + { MTAB_XTD|MTAB_VUN, 0, "write enable", "WRITEENABLED", + &rq_set_wlk, &rq_show_wlk, NULL, "Write enable disk drive" }, + { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", &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, NULL, &rq_show_ctrl, NULL, "Display command and response rings" }, { 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 */ -if (drv_tab[dtyp].flgs & RQDF_RO) /* not on read only */ - return SCPE_NOFNC; -return SCPE_OK; +if ((drv_tab[dtyp].flgs & RQDF_RO) && (val == 0)) /* not on read only */ + return sim_messagef (SCPE_NOFNC, "%s: Can't enable write on Read Only device\n", sim_uname (uptr)); +return set_writelock (uptr, val, cptr, desc); } /* Show write lock status */ @@ -2831,9 +2826,8 @@ uint32 dtyp = GET_DTYPE (uptr->flags); /* get drive type */ if (drv_tab[dtyp].flgs & RQDF_RO) fprintf (st, "read only"); -else if (uptr->flags & UNIT_WPRT) - fprintf (st, "write locked"); -else fprintf (st, "write enabled"); +else + show_writelock (st, uptr, val, desc); return SCPE_OK; } diff --git a/PDP11/pdp11_rs.c b/PDP11/pdp11_rs.c index 7bc3c522..f8b275cb 100644 --- a/PDP11/pdp11_rs.c +++ b/PDP11/pdp11_rs.c @@ -63,10 +63,8 @@ #define RS03_DTYPE (0) #define RS04_DTYPE (1) #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_AUTO (1 << UNIT_V_AUTO) -#define UNIT_WLK (1 << UNIT_V_WLK) #define GET_DTYPE(x) (((x) >> UNIT_V_DTYPE) & 1) /* RSCS1 - control/status 1 - offset 0 */ @@ -237,8 +235,10 @@ REG rs_reg[] = { MTAB rs_mod[] = { { 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" }, - { UNIT_WLK, UNIT_WLK, "write lockable", "LOCKED", NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, "RS03", NULL, NULL }, { (UNIT_DTYPE|UNIT_ATT), (RS04_DTYPE << UNIT_V_DTYPE) + UNIT_ATT, @@ -476,7 +476,7 @@ switch (fnc) { /* case on function */ break; 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])) { rs_set_er (ER_WLE, drv); /* set drive error */ 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); if (rs_unit[drv].flags & UNIT_ATT) { 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])) rsds[drv] = rsds[drv] | DS_WLK; } diff --git a/PDP11/pdp11_rx.c b/PDP11/pdp11_rx.c index de3cab46..34c78e3d 100644 --- a/PDP11/pdp11_rx.c +++ b/PDP11/pdp11_rx.c @@ -59,9 +59,6 @@ #define RX_SIZE (RX_NUMTR * RX_NUMSC * RX_NUMBY) /* bytes/disk */ #define RX_NUMDR 2 /* drives/controller */ #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 RWDS 1 /* rw, sect next */ @@ -178,8 +175,10 @@ REG rx_reg[] = { }; MTAB rx_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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) { MTAB_XTD|MTAB_VDV|MTAB_VALR, 004, "ADDRESS", "ADDRESS", &set_addr, &show_addr, NULL }, diff --git a/PDP11/pdp11_ry.c b/PDP11/pdp11_ry.c index 89448a36..1a8a0bb5 100644 --- a/PDP11/pdp11_ry.c +++ b/PDP11/pdp11_ry.c @@ -66,13 +66,10 @@ #define RY_SIZE (RX_NUMTR * RX_NUMSC * RY_NUMBY) #define RX_NUMDR 2 /* drives/controller */ #define RX_M_NUMDR 01 -#define UNIT_V_WLK (UNIT_V_UF) /* write locked */ -#define UNIT_V_DEN (UNIT_V_UF + 1) /* double density */ -#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize */ -#define UNIT_WLK (1u << UNIT_V_WLK) +#define UNIT_V_DEN (UNIT_V_UF + 0) /* double density */ +#define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */ #define UNIT_DEN (1u << UNIT_V_DEN) #define UNIT_AUTO (1u << UNIT_V_AUTO) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ #define IDLE 0 /* idle state */ #define RWDS 1 /* rw, sect next */ @@ -216,10 +213,10 @@ REG ry_reg[] = { }; MTAB ry_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &set_writelock, &show_writelock, NULL, "Write enable floppy drive" }, + { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", + &set_writelock, NULL, NULL, "Write enable floppy drive" }, { (UNIT_DEN+UNIT_ATT), UNIT_ATT, "single 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 }, diff --git a/PDP11/pdp11_ta.c b/PDP11/pdp11_ta.c index 3d9e32a5..dc6a3445 100644 --- a/PDP11/pdp11_ta.c +++ b/PDP11/pdp11_ta.c @@ -182,10 +182,10 @@ REG ta_reg[] = { }; MTAB ta_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable tape drive" }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock tape drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, "CAPACITY", NULL, NULL, &sim_tape_show_capac, NULL, "Display tape capacity" }, { MTAB_XTD|MTAB_VDV|MTAB_VALR, 020, "ADDRESS", "ADDRESS", diff --git a/PDP11/pdp11_tc.c b/PDP11/pdp11_tc.c index 617dfdad..d07c93ec 100644 --- a/PDP11/pdp11_tc.c +++ b/PDP11/pdp11_tc.c @@ -118,16 +118,13 @@ #define DT_NUMDR 8 /* #drives */ #define DT_M_NUMDR (DT_NUMDR - 1) -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) #define STATE u3 /* unit state */ #define LASTT u4 /* last time update */ #define WRITTEN u5 /* device buffer is dirty and needs flushing */ -#define UNIT_WPRT (UNIT_WLK) /* write protect */ /* System independent DECtape constants */ @@ -384,9 +381,9 @@ REG dt_reg[] = { MTAB dt_mod[] = { { 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", - &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, UNIT_8FMT, "12b", NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL }, @@ -1357,8 +1354,8 @@ uint16 pdp11b[D18_BSIZE]; int32 k; uint32 ba, *fbuf; -if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ - sim_printf ("%s: writing buffer to file\n", sim_uname (uptr)); +if (uptr->WRITTEN && uptr->hwmark && ((uptr->flags & UNIT_WPRT)== 0)) { /* any data? */ + sim_printf ("%s: writing buffer to file: %s\n", sim_uname (uptr), uptr->filename); rewind (uptr->fileref); /* start of file */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */ if (uptr->flags & UNIT_8FMT) { /* 12b? */ @@ -1410,7 +1407,7 @@ if (sim_is_active (uptr)) { /* active? cancel op */ } 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 */ free (uptr->filebuf); /* release buf */ 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); } -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) { const char *text2; diff --git a/PDP11/pdp11_td.c b/PDP11/pdp11_td.c index 4c7b922b..28391d72 100644 --- a/PDP11/pdp11_td.c +++ b/PDP11/pdp11_td.c @@ -524,10 +524,6 @@ static const char *tdc_regnam[] = #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_NUMBY 512 /* bytes/block */ #define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */ @@ -707,11 +703,11 @@ static REG td_reg[] = { }; static MTAB td_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable TU58 drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock TU58 drive" }, - { 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, 1, "VECTOR", NULL, &set_vec, &show_vec, NULL, "Interrupt vector" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", &set_writelock, &show_writelock, NULL, "Write enable 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, "ADDRESS", NULL, &set_addr, &show_addr, NULL, "Bus address" }, + { MTAB_XTD|MTAB_VDV, 1, "VECTOR", NULL, &set_vec, &show_vec, NULL, "Interrupt vector" }, { 0 } }; diff --git a/PDP11/pdp11_tm.c b/PDP11/pdp11_tm.c index 1caa3404..af532c14 100644 --- a/PDP11/pdp11_tm.c +++ b/PDP11/pdp11_tm.c @@ -226,10 +226,10 @@ REG tm_reg[] = { }; MTAB tm_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", - &tm_vlock, NULL, NULL, "Write enable tape drive" }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", - &tm_vlock, NULL, NULL, "Write lock tape drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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|MTAB_VALR, 0, "FORMAT", "FORMAT", &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", diff --git a/PDP11/pdp11_tq.c b/PDP11/pdp11_tq.c index eb35f631..fbae9f1a 100644 --- a/PDP11/pdp11_tq.c +++ b/PDP11/pdp11_tq.c @@ -474,10 +474,10 @@ REG tq_reg[] = { }; MTAB tq_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable tape drive" }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock tape drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_VDV, TQ5_TYPE, NULL, "TK50", &tq_set_type, NULL, NULL, "Set TK50 Device Type" }, { MTAB_XTD|MTAB_VDV, TQ7_TYPE, NULL, "TK70", diff --git a/PDP11/pdp11_ts.c b/PDP11/pdp11_ts.c index 972c1640..710e2453 100644 --- a/PDP11/pdp11_ts.c +++ b/PDP11/pdp11_ts.c @@ -346,10 +346,10 @@ REG ts_reg[] = { }; MTAB ts_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable tape drive" }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock tape drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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|MTAB_VALR, 0, "FORMAT", "FORMAT", &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", diff --git a/PDP11/pdp11_tu.c b/PDP11/pdp11_tu.c index a5f87332..a75c4a34 100644 --- a/PDP11/pdp11_tu.c +++ b/PDP11/pdp11_tu.c @@ -309,10 +309,10 @@ MTAB tu_mod[] = { #endif { MTAB_XTD|MTAB_VDV, 0, "FORMATTER", NULL, NULL, &tu_show_fmtr, NULL, "Display formatter/controller type" }, - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable tape drive" }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock tape drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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" }, { UNIT_TYPE, UNIT_TE16, "TE16", "TE16", NULL, NULL, NULL, "Set drive type to TE16" }, { UNIT_TYPE, UNIT_TU45, "TU45", "TU45", diff --git a/PDP18B/pdp18b_dt.c b/PDP18B/pdp18b_dt.c index fc41dcae..d6bc0494 100644 --- a/PDP18B/pdp18b_dt.c +++ b/PDP18B/pdp18b_dt.c @@ -119,10 +119,8 @@ #include "pdp18b_defs.h" #define DT_NUMDR 8 /* #drives */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) #define STATE u3 /* unit state */ @@ -130,7 +128,6 @@ #define WRITTEN u5 /* device buffer is dirty and needs flushing */ #define DT_WC 030 /* word count */ #define DT_CA 031 /* current addr */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* System independent DECtape constants */ @@ -430,8 +427,10 @@ REG dt_reg[] = { }; MTAB dt_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, UNIT_8FMT, "12b", 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? */ ((uptr->flags) & UNIT_DIS) || /* disabled? */ (fnc >= FNC_WMRK) || /* write mark? */ - ((fnc == FNC_WRIT) && (uptr->flags & UNIT_WLK)) || - ((fnc == FNC_WALL) && (uptr->flags & UNIT_WLK))) + ((fnc == FNC_WRIT) && (uptr->flags & UNIT_WPRT)) || + ((fnc == FNC_WALL) && (uptr->flags & UNIT_WPRT))) dt_seterr (uptr, DTB_SEL); /* select err */ else dt_newsa (dtsa); } @@ -1515,6 +1514,7 @@ int32 k; uint32 ba, *fbuf; 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 */ fbuf = (uint32 *) uptr->filebuf; /* file buffer */ if (uptr->flags & UNIT_8FMT) { /* 12b? */ @@ -1564,10 +1564,8 @@ if (sim_is_active (uptr)) { } uptr->STATE = uptr->pos = 0; } -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 */ +if (uptr->hwmark && ((uptr->flags & UNIT_RO) == 0)) /* any data? */ + dt_flush (uptr); /* end if hwmark */ free (uptr->filebuf); /* release buf */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->filebuf = NULL; /* clear buf ptr */ diff --git a/PDP18B/pdp18b_mt.c b/PDP18B/pdp18b_mt.c index 18209837..7656e61e 100644 --- a/PDP18B/pdp18b_mt.c +++ b/PDP18B/pdp18b_mt.c @@ -184,8 +184,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "TCAPACITY", "TCAPACITY", diff --git a/PDP18B/pdp18b_rp.c b/PDP18B/pdp18b_rp.c index 080b6a4e..5426d9a0 100644 --- a/PDP18B/pdp18b_rp.c +++ b/PDP18B/pdp18b_rp.c @@ -59,11 +59,8 @@ /* Unit specific flags */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* hwre write lock */ -#define UNIT_V_RP03 (UNIT_V_UF + 1) /* RP03 */ -#define UNIT_WLK (1u << UNIT_V_WLK) +#define UNIT_V_RP03 (UNIT_V_UF + 0) /* RP03 */ #define UNIT_RP03 (1u << UNIT_V_RP03) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* Parameters in the unit descriptor */ @@ -214,8 +211,10 @@ REG rp_reg[] = { MTAB rp_mod[] = { { UNIT_RP03, 0, "RP02", "RP02", &rp_set_size }, { UNIT_RP03, UNIT_RP03, "RP03", "RP03", &rp_set_size }, - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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 }, { 0 } }; diff --git a/PDP8/pdp8_ct.c b/PDP8/pdp8_ct.c index 8be43111..bfe72ddb 100644 --- a/PDP8/pdp8_ct.c +++ b/PDP8/pdp8_ct.c @@ -210,8 +210,10 @@ REG ct_reg[] = { }; MTAB ct_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", // &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", NULL, diff --git a/PDP8/pdp8_dt.c b/PDP8/pdp8_dt.c index 49bb79a0..d21fb23b 100644 --- a/PDP8/pdp8_dt.c +++ b/PDP8/pdp8_dt.c @@ -99,10 +99,8 @@ #include "pdp8_defs.h" #define DT_NUMDR 8 /* #drives */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) #define STATE u3 /* unit state */ @@ -110,7 +108,6 @@ #define WRITTEN u5 /* device buffer is dirty and needs flushing */ #define DT_WC 07754 /* word count */ #define DT_CA 07755 /* current addr */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* System independent DECtape constants */ @@ -351,8 +348,10 @@ REG dt_reg[] = { }; MTAB dt_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, @@ -1295,6 +1294,7 @@ int32 i, k; uint32 ba; 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 */ fbuf = (uint16 *) uptr->filebuf; /* file buffer */ if (uptr->flags & UNIT_8FMT) /* PDP8? */ @@ -1339,10 +1339,8 @@ if (sim_is_active (uptr)) { } uptr->STATE = uptr->pos = 0; } -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 */ +if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) /* any data? */ + dt_flush (uptr); /* end if hwmark */ free (uptr->filebuf); /* release buf */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->filebuf = NULL; /* clear buf ptr */ diff --git a/PDP8/pdp8_mt.c b/PDP8/pdp8_mt.c index 917666ba..9d65e988 100644 --- a/PDP8/pdp8_mt.c +++ b/PDP8/pdp8_mt.c @@ -201,8 +201,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", &mt_vlock }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", &mt_vlock }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/PDP8/pdp8_rk.c b/PDP8/pdp8_rk.c index 1074d703..f8f7acbc 100644 --- a/PDP8/pdp8_rk.c +++ b/PDP8/pdp8_rk.c @@ -51,11 +51,9 @@ /* Flags in the unit flags word */ -#define UNIT_V_HWLK (UNIT_V_UF + 0) /* hwre write lock */ -#define UNIT_V_SWLK (UNIT_V_UF + 1) /* swre write lock */ -#define UNIT_HWLK (1 << UNIT_V_HWLK) +#define UNIT_V_SWLK (UNIT_V_UF + 0) /* swre write lock */ +#define UNIT_HWLK UNIT_WPRT #define UNIT_SWLK (1 << UNIT_V_SWLK) -#define UNIT_WPRT (UNIT_HWLK|UNIT_SWLK|UNIT_RO) /* write protect */ /* Parameters in the unit descriptor */ @@ -181,8 +179,10 @@ REG rk_reg[] = { }; MTAB rk_mod[] = { - { UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &set_dev, &show_dev, NULL }, { 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; 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? */ return; } @@ -362,7 +362,7 @@ if ((uptr->flags & UNIT_ATT) == 0) { /* not att? abort */ 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_busy = 0; RK_INT_UPDATE; diff --git a/PDP8/pdp8_rl.c b/PDP8/pdp8_rl.c index aec1220f..a532025d 100644 --- a/PDP8/pdp8_rl.c +++ b/PDP8/pdp8_rl.c @@ -64,15 +64,12 @@ /* Flags in the unit flags word */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write lock */ -#define UNIT_V_RL02 (UNIT_V_UF + 1) /* RL01 vs RL02 */ -#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize enable */ -#define UNIT_V_DUMMY (UNIT_V_UF + 3) /* dummy flag */ +#define UNIT_V_RL02 (UNIT_V_UF + 0) /* RL01 vs RL02 */ +#define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize enable */ +#define UNIT_V_DUMMY (UNIT_V_UF + 2) /* dummy flag */ #define UNIT_DUMMY (1u << UNIT_V_DUMMY) -#define UNIT_WLK (1u << UNIT_V_WLK) #define UNIT_RL02 (1u << UNIT_V_RL02) #define UNIT_AUTO (1u << UNIT_V_AUTO) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* Parameters in the unit descriptor */ @@ -231,8 +228,10 @@ REG rl_reg[] = { }; MTAB rl_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_RL02+UNIT_ATT), UNIT_ATT, "RL01", NULL, NULL }, { (UNIT_RL02+UNIT_ATT), (UNIT_RL02+UNIT_ATT), "RL02", NULL, NULL }, diff --git a/PDP8/pdp8_rx.c b/PDP8/pdp8_rx.c index 27c84650..e74c61f4 100644 --- a/PDP8/pdp8_rx.c +++ b/PDP8/pdp8_rx.c @@ -70,13 +70,10 @@ #define RX2_SIZE (RX_NUMTR * RX_NUMSC * RX2_NUMBY) #define RX_NUMDR 2 /* drives/controller */ #define RX_M_NUMDR 01 -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_DEN (UNIT_V_UF + 1) /* double density */ -#define UNIT_V_AUTO (UNIT_V_UF + 2) /* autosize */ -#define UNIT_WLK (1u << UNIT_V_WLK) +#define UNIT_V_DEN (UNIT_V_UF + 0) /* double density */ +#define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */ #define UNIT_DEN (1u << UNIT_V_DEN) #define UNIT_AUTO (1u << UNIT_V_AUTO) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ #define IDLE 0 /* idle state */ #define CMD8 1 /* 8b cmd, ho next */ @@ -193,8 +190,10 @@ REG rx_reg[] = { }; MTAB rx_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, 0, NULL, "RX8E", &rx_settype, NULL, NULL }, { MTAB_XTD | MTAB_VDV, 0, "TYPE", NULL, NULL, &rx_showtype, NULL }, diff --git a/PDP8/pdp8_td.c b/PDP8/pdp8_td.c index c97375d6..4b7e63d4 100644 --- a/PDP8/pdp8_td.c +++ b/PDP8/pdp8_td.c @@ -82,16 +82,13 @@ #include "pdp8_defs.h" #define DT_NUMDR 2 /* #drives */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define UNIT_V_8FMT (UNIT_V_UF + 1) /* 12b format */ -#define UNIT_V_11FMT (UNIT_V_UF + 2) /* 16b format */ -#define UNIT_WLK (1 << UNIT_V_WLK) +#define UNIT_V_8FMT (UNIT_V_UF + 0) /* 12b format */ +#define UNIT_V_11FMT (UNIT_V_UF + 1) /* 16b format */ #define UNIT_8FMT (1 << UNIT_V_8FMT) #define UNIT_11FMT (1 << UNIT_V_11FMT) #define STATE u3 /* unit state */ #define LASTT u4 /* last time update */ #define WRITTEN u5 /* device buffer is dirty and needs flushing */ -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protect */ /* System independent DECtape constants */ @@ -252,8 +249,10 @@ REG td_reg[] = { }; MTAB td_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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, UNIT_8FMT, "12b", NULL, NULL }, { UNIT_8FMT + UNIT_11FMT, UNIT_11FMT, "16b", NULL, NULL }, @@ -870,6 +869,7 @@ int32 i, k; uint32 ba; 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 */ fbuf = (uint16 *) uptr->filebuf; /* file buffer */ if (uptr->flags & UNIT_8FMT) /* PDP8? */ @@ -906,10 +906,8 @@ int u = (int)(uptr - td_dev.units); if (!(uptr->flags & UNIT_ATT)) return SCPE_OK; -if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) { /* any data? */ - sim_printf ("%s%d: writing buffer to file\n", sim_dname (&td_dev), u); +if (uptr->hwmark && ((uptr->flags & UNIT_RO)== 0)) /* any data? */ td_flush (uptr); - } /* end if hwmark */ free (uptr->filebuf); /* release buf */ uptr->flags = uptr->flags & ~UNIT_BUF; /* clear buf flag */ uptr->filebuf = NULL; /* clear buf ptr */ diff --git a/SDS/sds_dsk.c b/SDS/sds_dsk.c index 6b170816..86b96772 100644 --- a/SDS/sds_dsk.c +++ b/SDS/sds_dsk.c @@ -38,10 +38,6 @@ #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_NUMPKT 4 /* packets/sector */ #define DSK_NUMWD (DSK_PKTWD*DSK_NUMPKT) /* words/sector */ @@ -121,8 +117,10 @@ REG dsk_reg[] = { }; MTAB dsk_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &set_chan, &show_chan, NULL }, { 0 } diff --git a/SDS/sds_mt.c b/SDS/sds_mt.c index 6887323b..832eb21c 100644 --- a/SDS/sds_mt.c +++ b/SDS/sds_mt.c @@ -152,8 +152,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/VAX/vax4xx_rd.c b/VAX/vax4xx_rd.c index d8a62029..ecfea8b9 100644 --- a/VAX/vax4xx_rd.c +++ b/VAX/vax4xx_rd.c @@ -226,11 +226,8 @@ #define RD54_MED 0x25644036 #define RD54_FLGS 0 -#define UNIT_V_WLK (DKUF_V_UF + 0) /* hwre write lock */ -#define UNIT_V_DTYPE (DKUF_V_UF + 1) /* drive type */ +#define UNIT_V_DTYPE (DKUF_V_UF + 0) /* drive type */ #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) struct drvtyp { @@ -354,10 +351,10 @@ DEBTAB rd_debug[] = { }; MTAB rd_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_VUN, RX33_DTYPE, NULL, "RX33", &rd_set_type, NULL, NULL, "Set RX33 Disk Type" }, { MTAB_XTD|MTAB_VUN, RD31_DTYPE, NULL, "RD31", diff --git a/VAX/vax4xx_rz80.c b/VAX/vax4xx_rz80.c index 0e99bfd6..7ba271e1 100644 --- a/VAX/vax4xx_rz80.c +++ b/VAX/vax4xx_rz80.c @@ -200,12 +200,10 @@ DEBTAB rz_debug[] = { }; MTAB rz_mod[] = { - { SCSI_WLK, 0, NULL, "WRITEENABLED", - &scsi_set_wlk, NULL, NULL, "Write enable disk drive" }, - { SCSI_WLK, SCSI_WLK, NULL, "LOCKED", - &scsi_set_wlk, NULL, NULL, "Write lock disk drive" }, - { MTAB_XTD|MTAB_VUN, 0, "WRITE", NULL, - NULL, &scsi_show_wlk, NULL, "Display drive writelock status" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &scsi_set_wlk, &scsi_show_wlk, NULL, "Write enable drive" }, + { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", + &scsi_set_wlk, NULL, NULL, "Write enable drive" }, { MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23", &rz_set_type, NULL, NULL, "Set RZ23 Disk Type" }, { MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L", diff --git a/VAX/vax4xx_rz94.c b/VAX/vax4xx_rz94.c index ae83b214..eb2cbb60 100644 --- a/VAX/vax4xx_rz94.c +++ b/VAX/vax4xx_rz94.c @@ -153,12 +153,10 @@ REG rz_reg[] = { }; MTAB rz_mod[] = { - { SCSI_WLK, 0, NULL, "WRITEENABLED", - &scsi_set_wlk, NULL, NULL, "Write enable disk drive" }, - { SCSI_WLK, SCSI_WLK, NULL, "LOCKED", - &scsi_set_wlk, NULL, NULL, "Write lock disk drive" }, - { MTAB_XTD|MTAB_VUN, 0, "WRITE", NULL, - NULL, &scsi_show_wlk, NULL, "Display drive writelock status" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &scsi_set_wlk, &scsi_show_wlk, NULL, "Write enable drive" }, + { MTAB_XTD|MTAB_VUN, 1, NULL, "LOCKED", + &scsi_set_wlk, NULL, NULL, "Write enable drive" }, { MTAB_XTD|MTAB_VUN, RZ23_DTYPE, NULL, "RZ23", &rz_set_type, NULL, NULL, "Set RZ23 Disk Type" }, { MTAB_XTD|MTAB_VUN, RZ23L_DTYPE, NULL, "RZ23L", diff --git a/VAX/vax730_rb.c b/VAX/vax730_rb.c index 10e10a90..12cbf5cf 100644 --- a/VAX/vax730_rb.c +++ b/VAX/vax730_rb.c @@ -70,13 +70,10 @@ /* Flags in the unit flags word */ -#define UNIT_V_WLK (UNIT_V_UF + 0) /* hwre write lock */ -#define UNIT_V_RB80 (UNIT_V_UF + 1) /* RB02 vs RB80 */ -#define UNIT_V_DUMMY (UNIT_V_UF + 2) /* dummy flag */ +#define UNIT_V_RB80 (UNIT_V_UF + 0) /* RB02 vs RB80 */ +#define UNIT_V_DUMMY (UNIT_V_UF + 1) /* dummy flag */ #define UNIT_DUMMY (1 << UNIT_V_DUMMY) -#define UNIT_WLK (1u << UNIT_V_WLK) #define UNIT_RB80 (1u << UNIT_V_RB80) -#define UNIT_WPRT (UNIT_WLK | UNIT_RO) /* write protected */ /* Parameters in the unit descriptor */ @@ -257,10 +254,10 @@ DEBTAB rb_debug[] = { }; MTAB rb_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", - NULL, NULL, NULL, "Write enable disk drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", - NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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_DUMMY, 0, NULL, "BADBLOCK", &rb_set_bad, NULL, NULL, "write bad block table on last track" }, { (UNIT_RB80+UNIT_ATT), UNIT_ATT, "RB02", NULL, NULL }, diff --git a/VAX/vax730_stddev.c b/VAX/vax730_stddev.c index 2c7fb6dd..a9f0c2ac 100644 --- a/VAX/vax730_stddev.c +++ b/VAX/vax730_stddev.c @@ -114,10 +114,6 @@ static BITFIELD tmr_iccs_bits [] = { /* 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_NUMBY 512 /* bytes/block */ #define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */ @@ -390,8 +386,10 @@ REG td_reg[] = { }; MTAB td_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable TU58 drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock TU58 drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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 } }; diff --git a/VAX/vax750_stddev.c b/VAX/vax750_stddev.c index c32ee1ef..6bb4c0b4 100644 --- a/VAX/vax750_stddev.c +++ b/VAX/vax750_stddev.c @@ -147,10 +147,6 @@ static BITFIELD tmr_iccs_bits [] = { /* 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_NUMBY 512 /* bytes/block */ #define TD_SIZE (TD_NUMBLK * TD_NUMBY) /* bytes/tape */ @@ -382,8 +378,10 @@ REG td_reg[] = { }; MTAB td_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable TU58 drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock TU58 drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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 } }; diff --git a/VAX/vax780_stddev.c b/VAX/vax780_stddev.c index 277d1988..99e96db1 100644 --- a/VAX/vax780_stddev.c +++ b/VAX/vax780_stddev.c @@ -156,10 +156,7 @@ static BITFIELD tmr_iccs_bits [] = { #define FL_NUMSC 26 /* sectors/track */ #define FL_M_SECTOR 0177 #define FL_NUMBY 128 /* bytes/sector */ -#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_SIZE (FL_NUMTR * FL_NUMSC * FL_NUMBY)/* bytes/disk */ #define FL_IDLE 0 /* idle state */ #define FL_RWDS 1 /* rw, sect next */ @@ -426,8 +423,10 @@ REG fl_reg[] = { }; MTAB fl_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable floppy drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock floppy drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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 } }; diff --git a/VAX/vax820_stddev.c b/VAX/vax820_stddev.c index 349506f0..a33aa5d1 100644 --- a/VAX/vax820_stddev.c +++ b/VAX/vax820_stddev.c @@ -166,9 +166,6 @@ const char *fl_fncnames[] = { #define FL_NUMBY 512 /* bytes/sector */ #define FL_INTL 5 /* interleave */ #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 CALC_SC(t,s) (fl_intl[((t) - 1) % FL_INTL][((s) - 1)]) @@ -424,8 +421,10 @@ REG fl_reg[] = { }; MTAB fl_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable floppy drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock floppy drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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 } }; diff --git a/VAX/vax860_stddev.c b/VAX/vax860_stddev.c index d8c3f6cc..46bc5f4f 100644 --- a/VAX/vax860_stddev.c +++ b/VAX/vax860_stddev.c @@ -137,9 +137,6 @@ static BITFIELD tmr_iccs_bits [] = { #define TRK u3 /* current track */ #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_M_DRIVE 03 #define RLCS_V_DRIVE 8 @@ -440,8 +437,10 @@ REG rlcs_reg[] = { }; MTAB rlcs_mod[] = { - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable console RL02 drive" }, - { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED", NULL, NULL, NULL, "Write lock console RL02 drive" }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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 } }; diff --git a/scp.c b/scp.c index 880cf93b..949c22cf 100644 --- a/scp.c +++ b/scp.c @@ -1556,7 +1556,7 @@ static const char simh_help2[] = "+sh{ow} q{ueue} show event queue\n" "+sh{ow} ti{me} show simulated time\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} def{ault} show current directory\n" "+sh{ow} re{mote} show remote console configuration\n" @@ -7603,6 +7603,31 @@ sim_switches = old_sw; 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 lo[ad] filename {arg} load specified file diff --git a/scp.h b/scp.h index 711a8ca7..2f03af35 100644 --- a/scp.h +++ b/scp.h @@ -158,6 +158,8 @@ t_stat assign_device (DEVICE *dptr, const char *cptr); t_stat deassign_device (DEVICE *dptr); t_stat reset_all (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_uname (UNIT *dptr); const char *sim_set_uname (UNIT *uptr, const char *uname); diff --git a/sigma/sigma_dk.c b/sigma/sigma_dk.c index 728c8a2a..fc14a863 100644 --- a/sigma/sigma_dk.c +++ b/sigma/sigma_dk.c @@ -31,9 +31,6 @@ #include "sigma_io_defs.h" #include -#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 */ /* Constants */ @@ -130,8 +127,10 @@ REG dk_reg[] = { }; MTAB dk_mod[] = { - { UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &io_set_dvc, &io_show_dvc, NULL }, { MTAB_XTD|MTAB_VDV, 0, "DVA", "DVA", diff --git a/sigma/sigma_dp.c b/sigma/sigma_dp.c index ce65256b..acc5afae 100644 --- a/sigma/sigma_dp.c +++ b/sigma/sigma_dp.c @@ -45,9 +45,6 @@ #include "sigma_io_defs.h" #include -#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_AUTO (1u << UNIT_V_AUTO) #define UNIT_V_DTYPE (UNIT_V_UF + 2) /* drive type */ @@ -517,8 +514,10 @@ MTAB dp_mod[] = { NULL, "3282", &dp_set_size }, { (UNIT_AUTO+UNIT_DTYPE), (DP_3283 << UNIT_V_DTYPE), NULL, "3283", &dp_set_size }, - { UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &io_set_dvc, &io_show_dvc, NULL }, { MTAB_XTD|MTAB_VDV, 0, "DVA", "DVA", diff --git a/sigma/sigma_mt.c b/sigma/sigma_mt.c index a1229c06..78bb1e1e 100644 --- a/sigma/sigma_mt.c +++ b/sigma/sigma_mt.c @@ -189,8 +189,10 @@ REG mt_reg[] = { }; MTAB mt_mod[] = { - { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, - { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, + { MTAB_XTD|MTAB_VUN, 0, "write enabled", "WRITEENABLED", + &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", &sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, { MTAB_XTD|MTAB_VUN, 0, "CAPACITY", "CAPACITY", diff --git a/sim_defs.h b/sim_defs.h index dbc8c96b..d013cb60 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -642,6 +642,8 @@ struct UNIT { #define UNIT_DISABLE 0002000 /* disable-able */ #define UNIT_DIS 0004000 /* disabled */ #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 */ #define UNIT_TEXT 0000000 /* text mode - no effect */ diff --git a/sim_disk.h b/sim_disk.h index 1818b2e7..738a5804 100644 --- a/sim_disk.h +++ b/sim_disk.h @@ -41,8 +41,7 @@ typedef uint32 t_lba; /* disk logical block ad /* Unit flags */ -#define DKUF_V_WLK (UNIT_V_UF + 0) /* write locked */ -#define DKUF_V_FMT (UNIT_V_UF + 1) /* disk file format */ +#define DKUF_V_FMT (UNIT_V_UF + 0) /* disk file format */ #define DKUF_W_FMT 2 /* 2b of formats */ #define DKUF_M_FMT ((1u << DKUF_W_FMT) - 1) #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_VHD 3 /* VHD format */ #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_WRP (DKUF_WLK | UNIT_RO) diff --git a/sim_scsi.c b/sim_scsi.c index c4289593..e717242b 100644 --- a/sim_scsi.c +++ b/sim_scsi.c @@ -1578,6 +1578,9 @@ bus->dev[id] = uptr; void scsi_set_unit (SCSI_BUS *bus, UNIT *uptr, SCSI_DEV *dev) { uptr->up7 = (void *)dev; + +if (dev->devtype == SCSI_CDROM) + set_writelock (uptr, 1, NULL, NULL); } /* Reset a unit */ @@ -1677,14 +1680,18 @@ switch (dev->devtype) { 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 */ 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 */ diff --git a/sim_scsi.h b/sim_scsi.h index d0f56c62..97a0241d 100644 --- a/sim_scsi.h +++ b/sim_scsi.h @@ -66,10 +66,9 @@ #define SCSI_DBG_BUS 0x04000000 /* bus 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_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) diff --git a/sim_tape.h b/sim_tape.h index 3517ad39..1ad4d2d1 100644 --- a/sim_tape.h +++ b/sim_tape.h @@ -92,7 +92,7 @@ typedef struct { /* 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_E11 1 /* E11 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_VAR 4 /* RSTS VAR ANSI type */ -#define MTUF_V_UF (MTUF_V_WLK + 1) -#define MTUF_WLK (1u << MTUF_V_WLK) +#define MTUF_WLK UNIT_WLK #define MTUF_WRP (MTUF_WLK | UNIT_RO) #define MT_SET_PNU(u) (u)->dynflags |= UNIT_TAPE_PNU