From a015e44c1095dca1c6b6a1cd376dc35ed2fe91d7 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Mon, 19 Apr 2021 10:58:51 -0700 Subject: [PATCH] ALL: Standardize writelock behavior adding global UNIT_WLK & UNIT_WPRT Historically this functionality was reimplemented within each DEVICE simulator often with slightly different implementations and inconsistencies. Solving this globally within SCP required changes in many places, but should henceforth be reasonably managed. As discussed in #1034 --- 3B2/3b2_ctc.c | 12 ++++++------ 3B2/3b2_ctc.h | 3 --- B5500/b5500_mt.c | 8 ++++---- CDC1700/cdc1700_defs.h | 2 -- CDC1700/cdc1700_mt.c | 30 +++++++++--------------------- H316/h316_dp.c | 9 ++++----- H316/h316_mt.c | 6 ++++-- HP2100/hp2100_disclib.h | 10 ++++------ HP2100/hp2100_dp.c | 5 +---- HP2100/hp2100_dq.c | 3 --- I1401/i1401_mt.c | 6 ++++-- I650/i650_mt.c | 4 ++-- I7000/i7000_ht.c | 8 ++++---- I7000/i7000_mt.c | 8 ++++---- I7094/i7094_mt.c | 6 ++++-- Interdata/id_dp.c | 11 +++++------ Interdata/id_fd.c | 9 ++++----- Interdata/id_idc.c | 11 +++++------ Interdata/id_mt.c | 6 ++++-- NOVA/nova_dkp.c | 11 +++++------ NOVA/nova_mta.c | 6 ++++-- PDP1/pdp1_dt.c | 19 +++++++++---------- PDP10/kx10_disk.h | 3 --- PDP10/kx10_dp.c | 6 ++++-- PDP10/kx10_dt.c | 20 +++++++++----------- PDP10/kx10_mt.c | 14 ++++++++------ PDP10/kx10_rc.c | 11 +++++------ PDP10/kx10_rp.c | 10 ++++++---- PDP10/kx10_rs.c | 15 +++++++-------- PDP10/kx10_tu.c | 14 ++++++++------ PDP10/pdp10_rp.c | 11 ++++------- PDP10/pdp10_tu.c | 6 ++++-- PDP10/pdp6_dsk.c | 21 ++++++++++----------- PDP10/pdp6_dtc.c | 20 +++++++++----------- PDP10/pdp6_mtc.c | 14 ++++++++------ PDP11/pdp11_hk.c | 11 ++++------- PDP11/pdp11_rk.c | 16 +++++++--------- PDP11/pdp11_rl.c | 11 ++++------- PDP11/pdp11_rp.c | 11 ++++------- PDP11/pdp11_rq.c | 22 ++++++++-------------- PDP11/pdp11_rs.c | 12 ++++++------ PDP11/pdp11_rx.c | 9 ++++----- PDP11/pdp11_ry.c | 15 ++++++--------- PDP11/pdp11_ta.c | 8 ++++---- PDP11/pdp11_tc.c | 34 +++++++--------------------------- PDP11/pdp11_td.c | 14 +++++--------- PDP11/pdp11_tm.c | 8 ++++---- PDP11/pdp11_tq.c | 8 ++++---- PDP11/pdp11_ts.c | 8 ++++---- PDP11/pdp11_tu.c | 8 ++++---- PDP18B/pdp18b_dt.c | 24 +++++++++++------------- PDP18B/pdp18b_mt.c | 6 ++++-- PDP18B/pdp18b_rp.c | 11 +++++------ PDP8/pdp8_ct.c | 6 ++++-- PDP8/pdp8_dt.c | 20 +++++++++----------- PDP8/pdp8_mt.c | 6 ++++-- PDP8/pdp8_rk.c | 16 ++++++++-------- PDP8/pdp8_rl.c | 15 +++++++-------- PDP8/pdp8_rx.c | 13 ++++++------- PDP8/pdp8_td.c | 18 ++++++++---------- SDS/sds_dsk.c | 10 ++++------ SDS/sds_mt.c | 6 ++++-- VAX/vax4xx_rd.c | 13 +++++-------- VAX/vax4xx_rz80.c | 10 ++++------ VAX/vax4xx_rz94.c | 10 ++++------ VAX/vax730_rb.c | 15 ++++++--------- VAX/vax730_stddev.c | 10 ++++------ VAX/vax750_stddev.c | 10 ++++------ VAX/vax780_stddev.c | 11 +++++------ VAX/vax820_stddev.c | 9 ++++----- VAX/vax860_stddev.c | 9 ++++----- scp.c | 27 ++++++++++++++++++++++++++- scp.h | 2 ++ sigma/sigma_dk.c | 9 ++++----- sigma/sigma_dp.c | 9 ++++----- sigma/sigma_mt.c | 6 ++++-- sim_defs.h | 2 ++ sim_disk.h | 5 ++--- sim_scsi.c | 11 +++++++++-- sim_scsi.h | 3 +-- sim_tape.h | 5 ++--- 81 files changed, 413 insertions(+), 467 deletions(-) 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