Remove the UNIT_RAW flag and deprecate the UNIT_TEXT flag (made the value 0).
This commit is contained in:
parent
19c4ccbf10
commit
4a5b7a78c5
5 changed files with 60 additions and 9 deletions
|
@ -2158,9 +2158,8 @@ else { /* Bottom End (After I/O processing) */
|
||||||
if (err != 0) { /* error? */
|
if (err != 0) { /* error? */
|
||||||
if (rq_dte (cp, uptr, ST_DRV)) /* post err log */
|
if (rq_dte (cp, uptr, ST_DRV)) /* post err log */
|
||||||
rq_rw_end (cp, uptr, EF_LOG, ST_DRV); /* if ok, report err */
|
rq_rw_end (cp, uptr, EF_LOG, ST_DRV); /* if ok, report err */
|
||||||
perror ("RQ I/O error");
|
sim_disk_perror (uptr, "RQ I/O error");
|
||||||
if (!(uptr->flags & UNIT_RAW))
|
sim_disk_clearerr (uptr);
|
||||||
clearerr (uptr->fileref);
|
|
||||||
return SCPE_IOERR;
|
return SCPE_IOERR;
|
||||||
}
|
}
|
||||||
ba = ba + tbc; /* incr bus addr */
|
ba = ba + tbc; /* incr bus addr */
|
||||||
|
|
6
scp.c
6
scp.c
|
@ -3983,7 +3983,7 @@ for (i = 1; (dptr = sim_devices[i]) != NULL; i++) { /* flush attached files
|
||||||
if (uptr->io_flush) /* unit specific flush routine */
|
if (uptr->io_flush) /* unit specific flush routine */
|
||||||
uptr->io_flush (uptr);
|
uptr->io_flush (uptr);
|
||||||
else
|
else
|
||||||
if (!(uptr->flags & UNIT_RAW) && /* not raw, */
|
if (!(uptr->dynflags & UNIT_NO_FIO) && /* is FILE *, */
|
||||||
!(uptr->flags & UNIT_RO)) /* not read only? */
|
!(uptr->flags & UNIT_RO)) /* not read only? */
|
||||||
fflush (uptr->fileref);
|
fflush (uptr->fileref);
|
||||||
}
|
}
|
||||||
|
@ -4543,7 +4543,7 @@ for (i = 0, j = addr; i < sim_emax; i++, j = j + dptr->aincr) {
|
||||||
else {
|
else {
|
||||||
if (!(uptr->flags & UNIT_ATT))
|
if (!(uptr->flags & UNIT_ATT))
|
||||||
return SCPE_UNATT;
|
return SCPE_UNATT;
|
||||||
if (uptr->flags & UNIT_RAW)
|
if (uptr->dynflags & UNIT_NO_FIO)
|
||||||
return SCPE_NOFNC;
|
return SCPE_NOFNC;
|
||||||
if ((uptr->flags & UNIT_FIX) && (j >= uptr->capac)) {
|
if ((uptr->flags & UNIT_FIX) && (j >= uptr->capac)) {
|
||||||
reason = SCPE_NXM;
|
reason = SCPE_NXM;
|
||||||
|
@ -4634,7 +4634,7 @@ for (i = 0, j = addr; i < count; i++, j = j + dptr->aincr) {
|
||||||
else {
|
else {
|
||||||
if (!(uptr->flags & UNIT_ATT))
|
if (!(uptr->flags & UNIT_ATT))
|
||||||
return SCPE_UNATT;
|
return SCPE_UNATT;
|
||||||
if (uptr->flags & UNIT_RAW)
|
if (uptr->dynflags & UNIT_NO_FIO)
|
||||||
return SCPE_NOFNC;
|
return SCPE_NOFNC;
|
||||||
if ((uptr->flags & UNIT_FIX) && (j >= uptr->capac))
|
if ((uptr->flags & UNIT_FIX) && (j >= uptr->capac))
|
||||||
return SCPE_NXM;
|
return SCPE_NXM;
|
||||||
|
|
|
@ -424,10 +424,11 @@ struct sim_unit {
|
||||||
#define UNIT_ROABLE 0001000 /* read only ok */
|
#define UNIT_ROABLE 0001000 /* read only ok */
|
||||||
#define UNIT_DISABLE 0002000 /* disable-able */
|
#define UNIT_DISABLE 0002000 /* disable-able */
|
||||||
#define UNIT_DIS 0004000 /* disabled */
|
#define UNIT_DIS 0004000 /* disabled */
|
||||||
#define UNIT_RAW 0010000 /* raw mode */
|
|
||||||
#define UNIT_TEXT 0020000 /* text mode */
|
|
||||||
#define UNIT_IDLE 0040000 /* idle eligible */
|
#define UNIT_IDLE 0040000 /* idle eligible */
|
||||||
|
|
||||||
|
/* Unused/meaningless flags */
|
||||||
|
#define UNIT_TEXT 0000000 /* text mode - no effect */
|
||||||
|
|
||||||
#define UNIT_UFMASK_31 (((1u << UNIT_V_RSV) - 1) & ~((1u << UNIT_V_UF_31) - 1))
|
#define UNIT_UFMASK_31 (((1u << UNIT_V_RSV) - 1) & ~((1u << UNIT_V_UF_31) - 1))
|
||||||
#define UNIT_UFMASK (((1u << UNIT_V_RSV) - 1) & ~((1u << UNIT_V_UF) - 1))
|
#define UNIT_UFMASK (((1u << UNIT_V_RSV) - 1) & ~((1u << UNIT_V_UF) - 1))
|
||||||
#define UNIT_RFLAGS (UNIT_UFMASK|UNIT_DIS) /* restored flags */
|
#define UNIT_RFLAGS (UNIT_UFMASK|UNIT_DIS) /* restored flags */
|
||||||
|
@ -438,6 +439,7 @@ struct sim_unit {
|
||||||
|
|
||||||
#define UNIT_ATTMULT 0000001 /* Allow multiple attach commands */
|
#define UNIT_ATTMULT 0000001 /* Allow multiple attach commands */
|
||||||
#define UNIT_TM_POLL 0000002 /* TMXR Polling unit */
|
#define UNIT_TM_POLL 0000002 /* TMXR Polling unit */
|
||||||
|
#define UNIT_NO_FIO 0000004 /* fileref is NOT a FILE * */
|
||||||
|
|
||||||
/* Register data structure */
|
/* Register data structure */
|
||||||
|
|
||||||
|
|
50
sim_disk.c
50
sim_disk.c
|
@ -273,6 +273,7 @@ static void sim_vhd_disk_flush (FILE *f);
|
||||||
static t_addr sim_vhd_disk_size (FILE *f);
|
static t_addr sim_vhd_disk_size (FILE *f);
|
||||||
static t_stat sim_vhd_disk_rdsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectsread, t_seccnt sects);
|
static t_stat sim_vhd_disk_rdsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectsread, t_seccnt sects);
|
||||||
static t_stat sim_vhd_disk_wrsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectswritten, t_seccnt sects);
|
static t_stat sim_vhd_disk_wrsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectswritten, t_seccnt sects);
|
||||||
|
static t_stat sim_vhd_disk_clearerr (UNIT *uptr);
|
||||||
static t_stat sim_vhd_disk_set_dtype (FILE *f, const char *dtype);
|
static t_stat sim_vhd_disk_set_dtype (FILE *f, const char *dtype);
|
||||||
static const char *sim_vhd_disk_get_dtype (FILE *f);
|
static const char *sim_vhd_disk_get_dtype (FILE *f);
|
||||||
static t_stat sim_os_disk_implemented_raw (void);
|
static t_stat sim_os_disk_implemented_raw (void);
|
||||||
|
@ -1121,7 +1122,8 @@ sim_disk_clr_async (uptr);
|
||||||
if (uptr->io_flush)
|
if (uptr->io_flush)
|
||||||
uptr->io_flush (uptr); /* flush buffered data */
|
uptr->io_flush (uptr); /* flush buffered data */
|
||||||
|
|
||||||
uptr->flags = uptr->flags & ~(UNIT_ATT | UNIT_RO | UNIT_RAW);
|
uptr->flags &= ~(UNIT_ATT | UNIT_RO);
|
||||||
|
uptr->dynflags &= ~UNIT_NO_FIO;
|
||||||
free (uptr->filename);
|
free (uptr->filename);
|
||||||
uptr->filename = NULL;
|
uptr->filename = NULL;
|
||||||
uptr->fileref = NULL;
|
uptr->fileref = NULL;
|
||||||
|
@ -1206,6 +1208,39 @@ AIO_UPDATE_QUEUE;
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t_stat sim_disk_perror (UNIT *uptr, const char *msg)
|
||||||
|
{
|
||||||
|
if (!(uptr->flags & UNIT_ATTABLE)) /* not attachable? */
|
||||||
|
return SCPE_NOATT;
|
||||||
|
switch (DK_GET_FMT (uptr)) { /* case on format */
|
||||||
|
case DKUF_F_STD: /* SIMH format */
|
||||||
|
case DKUF_F_VHD: /* VHD format */
|
||||||
|
case DKUF_F_RAW: /* Raw Physical Disk Access */
|
||||||
|
perror (msg);
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
t_stat sim_disk_clearerr (UNIT *uptr)
|
||||||
|
{
|
||||||
|
if (!(uptr->flags & UNIT_ATTABLE)) /* not attachable? */
|
||||||
|
return SCPE_NOATT;
|
||||||
|
switch (DK_GET_FMT (uptr)) { /* case on format */
|
||||||
|
case DKUF_F_STD: /* SIMH format */
|
||||||
|
clearerr (uptr->fileref);
|
||||||
|
break;
|
||||||
|
case DKUF_F_VHD: /* VHD format */
|
||||||
|
sim_vhd_disk_clearerr (uptr);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Factory bad block table creation routine
|
/* Factory bad block table creation routine
|
||||||
|
|
||||||
This routine writes a DEC standard 044 compliant bad block table on the
|
This routine writes a DEC standard 044 compliant bad block table on the
|
||||||
|
@ -1974,6 +2009,11 @@ static t_stat sim_vhd_disk_rdsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *
|
||||||
return SCPE_IOERR;
|
return SCPE_IOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static t_stat sim_vhd_disk_clearerr (UNIT *uptr)
|
||||||
|
{
|
||||||
|
return SCPE_IOERR;
|
||||||
|
}
|
||||||
|
|
||||||
static t_stat sim_vhd_disk_wrsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectswritten, t_seccnt sects)
|
static t_stat sim_vhd_disk_wrsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectswritten, t_seccnt sects)
|
||||||
{
|
{
|
||||||
return SCPE_IOERR;
|
return SCPE_IOERR;
|
||||||
|
@ -3488,6 +3528,14 @@ struct disk_context *ctx = (struct disk_context *)uptr->disk_ctx;
|
||||||
return ReadVirtualDiskSectors(hVHD, buf, sects, sectsread, ctx->sector_size, lba);
|
return ReadVirtualDiskSectors(hVHD, buf, sects, sectsread, ctx->sector_size, lba);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static t_stat sim_vhd_disk_clearerr (UNIT *uptr)
|
||||||
|
{
|
||||||
|
VHDHANDLE hVHD = (VHDHANDLE)uptr->fileref;
|
||||||
|
|
||||||
|
clearerr (hVHD->File);
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static t_bool
|
static t_bool
|
||||||
BufferIsZeros(void *Buffer, size_t BufferSize)
|
BufferIsZeros(void *Buffer, size_t BufferSize)
|
||||||
{
|
{
|
||||||
|
|
|
@ -80,6 +80,8 @@ t_stat sim_disk_show_capac (FILE *st, UNIT *uptr, int32 val, void *desc);
|
||||||
t_stat sim_disk_set_asynch (UNIT *uptr, int latency);
|
t_stat sim_disk_set_asynch (UNIT *uptr, int latency);
|
||||||
t_stat sim_disk_clr_asynch (UNIT *uptr);
|
t_stat sim_disk_clr_asynch (UNIT *uptr);
|
||||||
t_stat sim_disk_reset (UNIT *uptr);
|
t_stat sim_disk_reset (UNIT *uptr);
|
||||||
|
t_stat sim_disk_perror (UNIT *uptr, const char *msg);
|
||||||
|
t_stat sim_disk_clearerr (UNIT *uptr);
|
||||||
t_bool sim_disk_isavailable (UNIT *uptr);
|
t_bool sim_disk_isavailable (UNIT *uptr);
|
||||||
t_bool sim_disk_isavailable_a (UNIT *uptr, DISK_PCALLBACK callback);
|
t_bool sim_disk_isavailable_a (UNIT *uptr, DISK_PCALLBACK callback);
|
||||||
t_bool sim_disk_wrp (UNIT *uptr);
|
t_bool sim_disk_wrp (UNIT *uptr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue