3B2: Properly set drive type for IDISK device disks
As reported in #847
This commit is contained in:
parent
494e68fcbf
commit
c76086bc00
2 changed files with 23 additions and 4 deletions
22
3B2/3b2_id.c
22
3B2/3b2_id.c
|
@ -114,6 +114,7 @@ int8 id_seek_state[ID_NUM_UNITS] = {ID_SEEK_NONE};
|
||||||
struct id_dtype {
|
struct id_dtype {
|
||||||
uint8 hd; /* Number of heads */
|
uint8 hd; /* Number of heads */
|
||||||
uint32 capac; /* Capacity (in sectors) */
|
uint32 capac; /* Capacity (in sectors) */
|
||||||
|
const char *name;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct id_dtype id_dtab[] = {
|
static struct id_dtype id_dtab[] = {
|
||||||
|
@ -126,9 +127,9 @@ static struct id_dtype id_dtab[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
UNIT id_unit[] = {
|
UNIT id_unit[] = {
|
||||||
{ UDATA (&id_unit_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_BINK+
|
{ UDATA (&id_unit_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_BINK+ID_AUTOSIZE+
|
||||||
(ID_HD72_DTYPE << ID_V_DTYPE), ID_DSK_SIZE(HD72)), 0, ID0, 0 },
|
(ID_HD72_DTYPE << ID_V_DTYPE), ID_DSK_SIZE(HD72)), 0, ID0, 0 },
|
||||||
{ UDATA (&id_unit_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_BINK+
|
{ UDATA (&id_unit_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_BINK+ID_AUTOSIZE+
|
||||||
(ID_HD72_DTYPE << ID_V_DTYPE), ID_DSK_SIZE(HD72)), 0, ID1, 0 },
|
(ID_HD72_DTYPE << ID_V_DTYPE), ID_DSK_SIZE(HD72)), 0, ID1, 0 },
|
||||||
{ UDATA (&id_ctlr_svc, 0, 0) },
|
{ UDATA (&id_ctlr_svc, 0, 0) },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
|
@ -161,6 +162,12 @@ MTAB id_mod[] = {
|
||||||
&id_set_type, NULL, NULL, "Set HD135 Disk Type" },
|
&id_set_type, NULL, NULL, "Set HD135 Disk Type" },
|
||||||
{ MTAB_XTD|MTAB_VUN, ID_HD161_DTYPE, NULL, "HD161",
|
{ MTAB_XTD|MTAB_VUN, ID_HD161_DTYPE, NULL, "HD161",
|
||||||
&id_set_type, NULL, NULL, "Set HD161 Disk Type" },
|
&id_set_type, NULL, NULL, "Set HD161 Disk Type" },
|
||||||
|
{ MTAB_XTD|MTAB_VUN, 0, "TYPE", NULL,
|
||||||
|
NULL, &id_show_type, NULL, "Display device type" },
|
||||||
|
{ ID_AUTOSIZE, ID_AUTOSIZE, "autosize", "AUTOSIZE",
|
||||||
|
NULL, NULL, NULL, "Set type based on file size at attach" },
|
||||||
|
{ ID_AUTOSIZE, 0, "noautosize", "NOAUTOSIZE",
|
||||||
|
NULL, NULL, NULL, "Disable disk autosize on attach" },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -353,6 +360,12 @@ t_stat id_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t_stat id_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
|
||||||
|
{
|
||||||
|
fprintf (st, "%s", id_dtab[ID_GET_DTYPE(uptr->flags)].name);
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
t_stat id_reset(DEVICE *dptr)
|
t_stat id_reset(DEVICE *dptr)
|
||||||
{
|
{
|
||||||
id_clear_fifo();
|
id_clear_fifo();
|
||||||
|
@ -361,7 +374,10 @@ t_stat id_reset(DEVICE *dptr)
|
||||||
|
|
||||||
t_stat id_attach(UNIT *uptr, CONST char *cptr)
|
t_stat id_attach(UNIT *uptr, CONST char *cptr)
|
||||||
{
|
{
|
||||||
return sim_disk_attach(uptr, cptr, 512, 1, TRUE, 0, "HD72", 0, 0);
|
static const char *drives[] = {"HD30", "HD72", "HD72C", "HD135", "HD161", NULL};
|
||||||
|
|
||||||
|
return sim_disk_attach_ex(uptr, cptr, 512, 1, TRUE, 0, id_dtab[ID_GET_DTYPE(uptr->flags)].name,
|
||||||
|
0, 0, (uptr->flags & ID_AUTOSIZE) ? drives : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
t_stat id_detach(UNIT *uptr)
|
t_stat id_detach(UNIT *uptr)
|
||||||
|
|
|
@ -139,8 +139,10 @@
|
||||||
#define ID_V_DTYPE (DKUF_V_UF + 0)
|
#define ID_V_DTYPE (DKUF_V_UF + 0)
|
||||||
#define ID_M_DTYPE 3
|
#define ID_M_DTYPE 3
|
||||||
#define ID_DTYPE (ID_M_DTYPE << ID_V_DTYPE)
|
#define ID_DTYPE (ID_M_DTYPE << ID_V_DTYPE)
|
||||||
|
#define ID_V_AUTOSIZE (ID_V_DTYPE + 2)
|
||||||
|
#define ID_AUTOSIZE (1 << ID_V_AUTOSIZE)
|
||||||
#define ID_GET_DTYPE(x) (((x) >> ID_V_DTYPE) & ID_M_DTYPE)
|
#define ID_GET_DTYPE(x) (((x) >> ID_V_DTYPE) & ID_M_DTYPE)
|
||||||
#define ID_DRV(d) { ID_##d##_HEADS, ID_##d##_LBN }
|
#define ID_DRV(d) { ID_##d##_HEADS, ID_##d##_LBN, #d }
|
||||||
|
|
||||||
#define ID_DSK_SIZE(d) ID_##d##_LBN
|
#define ID_DSK_SIZE(d) ID_##d##_LBN
|
||||||
|
|
||||||
|
@ -162,6 +164,7 @@ t_stat id_ctlr_svc(UNIT *uptr);
|
||||||
t_stat id_unit_svc(UNIT *uptr);
|
t_stat id_unit_svc(UNIT *uptr);
|
||||||
t_stat id_reset(DEVICE *dptr);
|
t_stat id_reset(DEVICE *dptr);
|
||||||
t_stat id_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
t_stat id_set_type(UNIT *uptr, int32 val, CONST char *cptr, void *desc);
|
||||||
|
t_stat id_show_type (FILE *st, UNIT *uptr, int32 val, CONST void *desc);
|
||||||
t_stat id_attach(UNIT *uptr, CONST char *cptr);
|
t_stat id_attach(UNIT *uptr, CONST char *cptr);
|
||||||
t_stat id_detach(UNIT *uptr);
|
t_stat id_detach(UNIT *uptr);
|
||||||
uint32 id_read(uint32 pa, size_t size);
|
uint32 id_read(uint32 pa, size_t size);
|
||||||
|
|
Loading…
Add table
Reference in a new issue