ALL: Standardize writelock behavior adding global UNIT_WLK & UNIT_WPRT
Historically this functionality was reimplemented within each DEVICE simulator often with slightly different implementations and inconsistencies. Solving this globally within SCP required changes in many places, but should henceforth be reasonably managed. As discussed in #1034
This commit is contained in:
parent
587b81bed4
commit
a015e44c10
81 changed files with 413 additions and 467 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)" },
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -73,11 +73,8 @@
|
|||
#include "h316_defs.h"
|
||||
#include <math.h>
|
||||
|
||||
#define UNIT_V_WLK (UNIT_V_UF + 0) /* write locked */
|
||||
#define UNIT_WLK (1 << UNIT_V_WLK)
|
||||
#define FNC u3 /* saved function */
|
||||
#define 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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)" },
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
27
scp.c
27
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
|
||||
|
|
2
scp.h
2
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);
|
||||
|
|
|
@ -31,9 +31,6 @@
|
|||
#include "sigma_io_defs.h"
|
||||
#include <math.h>
|
||||
|
||||
#define UNIT_V_HWLK (UNIT_V_UF + 0) /* hwre write lock */
|
||||
#define UNIT_HWLK (1u << UNIT_V_HWLK)
|
||||
#define UNIT_WPRT (UNIT_HWLK|UNIT_RO) /* write prot */
|
||||
#define UTRK u3 /* current track */
|
||||
|
||||
/* 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",
|
||||
|
|
|
@ -45,9 +45,6 @@
|
|||
#include "sigma_io_defs.h"
|
||||
#include <math.h>
|
||||
|
||||
#define UNIT_V_HWLK (UNIT_V_UF + 0) /* hwre write lock */
|
||||
#define UNIT_HWLK (1u << UNIT_V_HWLK)
|
||||
#define UNIT_WPRT (UNIT_HWLK|UNIT_RO) /* write prot */
|
||||
#define UNIT_V_AUTO (UNIT_V_UF + 1) /* autosize */
|
||||
#define UNIT_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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
11
sim_scsi.c
11
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 */
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue