Remove the UNIT_RAW flag and deprecate the UNIT_TEXT flag (made the value 0).

This commit is contained in:
Mark Pizzolato 2013-01-19 10:59:40 -08:00
parent 19c4ccbf10
commit 4a5b7a78c5
5 changed files with 60 additions and 9 deletions

View file

@ -2158,9 +2158,8 @@ else { /* Bottom End (After I/O processing) */
if (err != 0) { /* error? */
if (rq_dte (cp, uptr, ST_DRV)) /* post err log */
rq_rw_end (cp, uptr, EF_LOG, ST_DRV); /* if ok, report err */
perror ("RQ I/O error");
if (!(uptr->flags & UNIT_RAW))
clearerr (uptr->fileref);
sim_disk_perror (uptr, "RQ I/O error");
sim_disk_clearerr (uptr);
return SCPE_IOERR;
}
ba = ba + tbc; /* incr bus addr */

6
scp.c
View file

@ -3983,7 +3983,7 @@ for (i = 1; (dptr = sim_devices[i]) != NULL; i++) { /* flush attached files
if (uptr->io_flush) /* unit specific flush routine */
uptr->io_flush (uptr);
else
if (!(uptr->flags & UNIT_RAW) && /* not raw, */
if (!(uptr->dynflags & UNIT_NO_FIO) && /* is FILE *, */
!(uptr->flags & UNIT_RO)) /* not read only? */
fflush (uptr->fileref);
}
@ -4543,7 +4543,7 @@ for (i = 0, j = addr; i < sim_emax; i++, j = j + dptr->aincr) {
else {
if (!(uptr->flags & UNIT_ATT))
return SCPE_UNATT;
if (uptr->flags & UNIT_RAW)
if (uptr->dynflags & UNIT_NO_FIO)
return SCPE_NOFNC;
if ((uptr->flags & UNIT_FIX) && (j >= uptr->capac)) {
reason = SCPE_NXM;
@ -4634,7 +4634,7 @@ for (i = 0, j = addr; i < count; i++, j = j + dptr->aincr) {
else {
if (!(uptr->flags & UNIT_ATT))
return SCPE_UNATT;
if (uptr->flags & UNIT_RAW)
if (uptr->dynflags & UNIT_NO_FIO)
return SCPE_NOFNC;
if ((uptr->flags & UNIT_FIX) && (j >= uptr->capac))
return SCPE_NXM;

View file

@ -424,10 +424,11 @@ struct sim_unit {
#define UNIT_ROABLE 0001000 /* read only ok */
#define UNIT_DISABLE 0002000 /* disable-able */
#define UNIT_DIS 0004000 /* disabled */
#define UNIT_RAW 0010000 /* raw mode */
#define UNIT_TEXT 0020000 /* text mode */
#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 (((1u << UNIT_V_RSV) - 1) & ~((1u << UNIT_V_UF) - 1))
#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_TM_POLL 0000002 /* TMXR Polling unit */
#define UNIT_NO_FIO 0000004 /* fileref is NOT a FILE * */
/* Register data structure */

View file

@ -273,6 +273,7 @@ static void sim_vhd_disk_flush (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_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 const char *sim_vhd_disk_get_dtype (FILE *f);
static t_stat sim_os_disk_implemented_raw (void);
@ -1121,7 +1122,8 @@ sim_disk_clr_async (uptr);
if (uptr->io_flush)
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);
uptr->filename = NULL;
uptr->fileref = NULL;
@ -1206,6 +1208,39 @@ AIO_UPDATE_QUEUE;
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
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;
}
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)
{
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);
}
static t_stat sim_vhd_disk_clearerr (UNIT *uptr)
{
VHDHANDLE hVHD = (VHDHANDLE)uptr->fileref;
clearerr (hVHD->File);
return SCPE_OK;
}
static t_bool
BufferIsZeros(void *Buffer, size_t BufferSize)
{

View file

@ -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_clr_asynch (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_a (UNIT *uptr, DISK_PCALLBACK callback);
t_bool sim_disk_wrp (UNIT *uptr);