DISK: Allow file system sizing if device doesn't have DEV_SECTORS set_cmd
As it turns out, the RD device in the MicroVAX 2000 systems reasonably doesn't have DEV_SECTORS set in the DEVICE flags. Follow on to #768.
This commit is contained in:
parent
39fd8d829b
commit
4e5780e15e
1 changed files with 9 additions and 13 deletions
22
sim_disk.c
22
sim_disk.c
|
@ -1110,8 +1110,7 @@ static t_offset get_ods2_filesystem_size (UNIT *uptr)
|
|||
DEVICE *dptr;
|
||||
t_addr saved_capac;
|
||||
struct disk_context *ctx = (struct disk_context *)uptr->disk_ctx;
|
||||
t_addr temp_capac = (sim_toffset_64 ? (t_addr)0xFFFFFFFFu : (t_addr)0x7FFFFFFFu); /* Make sure we can access the largest sector */
|
||||
uint32 capac_factor;
|
||||
t_offset temp_capac = (sim_toffset_64 ? (t_addr)0xFFFFFFFFu : (t_addr)0x7FFFFFFFu); /* Make sure we can access the largest sector */
|
||||
ODS2_HomeBlock Home;
|
||||
ODS2_FileHeader Header;
|
||||
ODS2_Retreval *Retr;
|
||||
|
@ -1123,9 +1122,8 @@ t_seccnt sects_read;
|
|||
|
||||
if ((dptr = find_dev_from_unit (uptr)) == NULL)
|
||||
return ret_val;
|
||||
capac_factor = ((dptr->dwidth / dptr->aincr) == 16) ? 2 : 1; /* save capacity units (word: 2, byte: 1) */
|
||||
saved_capac = uptr->capac;
|
||||
uptr->capac = (t_addr)(temp_capac/(capac_factor*((dptr->flags & DEV_SECTORS) ? 1 : 512)));
|
||||
uptr->capac = temp_capac;
|
||||
if ((sim_disk_rdsect (uptr, 512 / ctx->sector_size, (uint8 *)&Home, §s_read, sizeof (Home) / ctx->sector_size)) ||
|
||||
(sects_read != (sizeof (Home) / ctx->sector_size)))
|
||||
goto Return_Cleanup;
|
||||
|
@ -1198,7 +1196,6 @@ DEVICE *dptr;
|
|||
t_addr saved_capac;
|
||||
struct disk_context *ctx = (struct disk_context *)uptr->disk_ctx;
|
||||
t_addr temp_capac = (sim_toffset_64 ? (t_addr)0xFFFFFFFFu : (t_addr)0x7FFFFFFFu); /* Make sure we can access the largest sector */
|
||||
uint32 capac_factor;
|
||||
ODS1_HomeBlock Home;
|
||||
ODS1_FileHeader Header;
|
||||
ODS1_Retreval *Retr;
|
||||
|
@ -1211,9 +1208,8 @@ t_seccnt sects_read;
|
|||
|
||||
if ((dptr = find_dev_from_unit (uptr)) == NULL)
|
||||
return ret_val;
|
||||
capac_factor = ((dptr->dwidth / dptr->aincr) == 16) ? 2 : 1; /* save capacity units (word: 2, byte: 1) */
|
||||
saved_capac = uptr->capac;
|
||||
uptr->capac = (t_addr)(temp_capac/(capac_factor*((dptr->flags & DEV_SECTORS) ? 1 : 512)));
|
||||
uptr->capac = temp_capac;
|
||||
if ((sim_disk_rdsect (uptr, 512 / ctx->sector_size, (uint8 *)&Home, §s_read, sizeof (Home) / ctx->sector_size)) ||
|
||||
(sects_read != (sizeof (Home) / ctx->sector_size)))
|
||||
goto Return_Cleanup;
|
||||
|
@ -1275,7 +1271,6 @@ DEVICE *dptr;
|
|||
t_addr saved_capac;
|
||||
struct disk_context *ctx = (struct disk_context *)uptr->disk_ctx;
|
||||
t_addr temp_capac = (sim_toffset_64 ? (t_addr)0xFFFFFFFFu : (t_addr)0x7FFFFFFFu); /* Make sure we can access the largest sector */
|
||||
uint32 capac_factor;
|
||||
uint8 sector_buf[512];
|
||||
ultrix_disklabel *Label = (ultrix_disklabel *)(sector_buf + sizeof (sector_buf) - sizeof (ultrix_disklabel));
|
||||
t_offset ret_val = (t_offset)-1;
|
||||
|
@ -1285,9 +1280,8 @@ t_seccnt sects_read;
|
|||
|
||||
if ((dptr = find_dev_from_unit (uptr)) == NULL)
|
||||
return ret_val;
|
||||
capac_factor = ((dptr->dwidth / dptr->aincr) == 16) ? 2 : 1; /* save capacity units (word: 2, byte: 1) */
|
||||
saved_capac = uptr->capac;
|
||||
uptr->capac = (t_addr)(temp_capac/(capac_factor*((dptr->flags & DEV_SECTORS) ? 1 : 512)));
|
||||
uptr->capac = temp_capac;
|
||||
if ((sim_disk_rdsect (uptr, 31 * (512 / ctx->sector_size), sector_buf, §s_read, 512 / ctx->sector_size)) ||
|
||||
(sects_read != (512 / ctx->sector_size)))
|
||||
goto Return_Cleanup;
|
||||
|
@ -1394,7 +1388,6 @@ DEVICE *dptr;
|
|||
t_addr saved_capac;
|
||||
struct disk_context *ctx = (struct disk_context *)uptr->disk_ctx;
|
||||
t_addr temp_capac = (sim_toffset_64 ? (t_addr)0xFFFFFFFFu : (t_addr)0x7FFFFFFFu); /* Make sure we can access the largest sector */
|
||||
uint32 capac_factor;
|
||||
uint8 sector_buf[1024];
|
||||
RT11_HomeBlock Home;
|
||||
t_seccnt sects_read;
|
||||
|
@ -1409,9 +1402,8 @@ t_offset ret_val = (t_offset)-1;
|
|||
|
||||
if ((dptr = find_dev_from_unit (uptr)) == NULL)
|
||||
return ret_val;
|
||||
capac_factor = ((dptr->dwidth / dptr->aincr) == 16) ? 2 : 1;
|
||||
saved_capac = uptr->capac;
|
||||
uptr->capac = (t_addr)(temp_capac / (capac_factor * ((dptr->flags & DEV_SECTORS) ? 1 : 512)));
|
||||
uptr->capac = temp_capac;
|
||||
|
||||
for (part = 0; part < RT11_MAXPARTITIONS; part++) {
|
||||
uint16 seg_highest;
|
||||
|
@ -2018,10 +2010,14 @@ if (container_size && (container_size != (t_offset)-1)) {
|
|||
if ((container_size < current_unit_size) &&
|
||||
((DKUF_F_VHD == DK_GET_FMT (uptr)) || (0 != (uptr->flags & UNIT_RO)))) {
|
||||
if (!sim_quiet) {
|
||||
int32 saved_switches = sim_switches;
|
||||
|
||||
sim_switches = SWMASK ('R');
|
||||
uptr->capac = (t_addr)(container_size/(ctx->capac_factor*((dptr->flags & DEV_SECTORS) ? 512 : 1)));
|
||||
sim_printf ("%s%d: non expandable disk container '%s' is smaller than simulated device (%s < ", sim_dname (dptr), (int)(uptr-dptr->units), cptr, sprint_capac (dptr, uptr));
|
||||
uptr->capac = saved_capac;
|
||||
sim_printf ("%s)\n", sprint_capac (dptr, uptr));
|
||||
sim_switches = saved_switches;
|
||||
}
|
||||
sim_disk_detach (uptr);
|
||||
return SCPE_OPENERR;
|
||||
|
|
Loading…
Add table
Reference in a new issue