AltairZ80: wd179x: Code cleanup and fix MSVC /W4 warnings.

This commit is contained in:
Howard M. Harte 2022-11-23 20:43:25 -08:00 committed by Paul Koning
parent 7cca92ce28
commit 75f11a8e3d

View file

@ -84,6 +84,8 @@
#define WD179X_STAT_DRQ (1 << 1) #define WD179X_STAT_DRQ (1 << 1)
/*#define WD179X_STAT_BUSY (1 << 0) */ /*#define WD179X_STAT_BUSY (1 << 0) */
#define WD179X_SECTOR_LEN_BYTES (unsigned)(128 << wd179x_info->fdc_sec_len)
typedef union { typedef union {
uint8 raw[WD179X_SECTOR_LEN]; uint8 raw[WD179X_SECTOR_LEN];
} SECTOR_FORMAT; } SECTOR_FORMAT;
@ -238,6 +240,9 @@ static REG wd179x_reg[] = {
#define WD179X_NAME "Western Digital FDC Core" #define WD179X_NAME "Western Digital FDC Core"
static const char* wd179x_description(DEVICE *dptr) { static const char* wd179x_description(DEVICE *dptr) {
if (dptr == NULL) {
return (NULL);
}
return WD179X_NAME; return WD179X_NAME;
} }
@ -284,6 +289,7 @@ DEVICE wd179x_dev = {
/* Used to generate INDEX pulses in response to a FORCE_INTR command */ /* Used to generate INDEX pulses in response to a FORCE_INTR command */
t_stat wd179x_svc (UNIT *uptr) t_stat wd179x_svc (UNIT *uptr)
{ {
if (uptr == NULL) return SCPE_IERR;
if (wd179x_info->index_pulse_wait == TRUE) { if (wd179x_info->index_pulse_wait == TRUE) {
wd179x_info->index_pulse_wait = FALSE; wd179x_info->index_pulse_wait = FALSE;
@ -427,7 +433,7 @@ t_stat wd179x_attach(UNIT *uptr, CONST char *cptr)
} }
/* Set the correct number of sides for this disk image. */ /* Set the correct number of sides for this disk image. */
wd179x_info->drive[i].nheads = imdGetSides(wd179x_info->drive[i].imd); wd179x_info->drive[i].nheads = (uint8)imdGetSides(wd179x_info->drive[i].imd);
} else { } else {
wd179x_info->drive[i].imd = NULL; wd179x_info->drive[i].imd = NULL;
@ -445,7 +451,7 @@ t_stat wd179x_attach(UNIT *uptr, CONST char *cptr)
t_stat wd179x_detach(UNIT *uptr) t_stat wd179x_detach(UNIT *uptr)
{ {
t_stat r; t_stat r;
int8 i; int32 i;
i = find_unit_index(uptr); i = find_unit_index(uptr);
@ -460,10 +466,7 @@ t_stat wd179x_detach(UNIT *uptr)
return r; return r;
r = detach_unit(uptr); /* detach unit */ r = detach_unit(uptr); /* detach unit */
if (r != SCPE_OK)
return r; return r;
return SCPE_OK;
} }
@ -474,7 +477,7 @@ static int32 wd179xdev(const int32 port, const int32 io, const int32 data)
if (io) { if (io) {
sim_debug(VERBOSE_MSG, &wd179x_dev, "WD179X: " ADDRESS_FORMAT " %s, Port 0x%02x Data 0x%02x\n", sim_debug(VERBOSE_MSG, &wd179x_dev, "WD179X: " ADDRESS_FORMAT " %s, Port 0x%02x Data 0x%02x\n",
PCX, io ? "OUT" : " IN", port, data); PCX, io ? "OUT" : " IN", port, data);
WD179X_Write(port, data); WD179X_Write(port, (uint8)data);
} else { } else {
result = WD179X_Read(port); result = WD179X_Read(port);
sim_debug(VERBOSE_MSG, &wd179x_dev, "WD179X: " ADDRESS_FORMAT " %s, Port 0x%02x Data 0x%02x\n", sim_debug(VERBOSE_MSG, &wd179x_dev, "WD179X: " ADDRESS_FORMAT " %s, Port 0x%02x Data 0x%02x\n",
@ -595,14 +598,14 @@ uint8 WD179X_Read(const uint32 Addr)
} }
wd179x_info->fdc_sector ++; wd179x_info->fdc_sector ++;
sim_debug(RD_DATA_MSG, &wd179x_dev, "WD179X[%d]: " ADDRESS_FORMAT " MULTI_READ_REC, T:%2d/S:%d/N:%2d, %s, len=%d\n", wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->fdc_head, wd179x_info->fdc_sector, wd179x_info->ddens ? "DD" : "SD", 128 << wd179x_info->fdc_sec_len); sim_debug(RD_DATA_MSG, &wd179x_dev, "WD179X[%d]: " ADDRESS_FORMAT " MULTI_READ_REC, T:%2d/S:%d/N:%2d, %s, len=%d\n", wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->fdc_head, wd179x_info->fdc_sector, wd179x_info->ddens ? "DD" : "SD", WD179X_SECTOR_LEN_BYTES);
status = sectRead(pDrive->imd, status = sectRead(pDrive->imd,
pDrive->track, pDrive->track,
wd179x_info->fdc_head, wd179x_info->fdc_head,
wd179x_info->fdc_sector, wd179x_info->fdc_sector,
sdata.raw, sdata.raw,
128 << wd179x_info->fdc_sec_len, WD179X_SECTOR_LEN_BYTES,
&flags, &flags,
&readlen); &readlen);
@ -610,7 +613,7 @@ uint8 WD179X_Read(const uint32 Addr)
wd179x_info->fdc_status = (WD179X_STAT_DRQ | WD179X_STAT_BUSY); /* Set DRQ, BUSY */ wd179x_info->fdc_status = (WD179X_STAT_DRQ | WD179X_STAT_BUSY); /* Set DRQ, BUSY */
wd179x_info->drq = 1; wd179x_info->drq = 1;
wd179x_info->intrq = 0; wd179x_info->intrq = 0;
wd179x_info->fdc_datacount = 128 << wd179x_info->fdc_sec_len; wd179x_info->fdc_datacount = WD179X_SECTOR_LEN_BYTES;
wd179x_info->fdc_dataindex = 0; wd179x_info->fdc_dataindex = 0;
wd179x_info->fdc_read = TRUE; wd179x_info->fdc_read = TRUE;
wd179x_info->fdc_read_addr = FALSE; wd179x_info->fdc_read_addr = FALSE;
@ -802,7 +805,7 @@ static uint8 Do1793Command(uint8 cCommand)
wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->sel_drive, PCX, pDrive->track,
wd179x_info->fdc_head, wd179x_info->fdc_sector, wd179x_info->fdc_head, wd179x_info->fdc_sector,
wd179x_info->fdc_multiple ? "Multiple" : "Single", wd179x_info->fdc_multiple ? "Multiple" : "Single",
wd179x_info->ddens ? "DD" : "SD", 128 << wd179x_info->fdc_sec_len); wd179x_info->ddens ? "DD" : "SD", WD179X_SECTOR_LEN_BYTES);
if (testMode(pDrive)) { if (testMode(pDrive)) {
wd179x_info->fdc_status |= WD179X_STAT_NOT_FOUND; /* Sector not found */ wd179x_info->fdc_status |= WD179X_STAT_NOT_FOUND; /* Sector not found */
@ -815,14 +818,14 @@ static uint8 Do1793Command(uint8 cCommand)
wd179x_info->fdc_head, wd179x_info->fdc_head,
wd179x_info->fdc_sector, wd179x_info->fdc_sector,
sdata.raw, sdata.raw,
128 << wd179x_info->fdc_sec_len, WD179X_SECTOR_LEN_BYTES,
&flags, &flags,
&readlen); &readlen);
if (status == SCPE_OK) { if (status == SCPE_OK) {
wd179x_info->fdc_status |= (WD179X_STAT_DRQ); /* Set DRQ */ wd179x_info->fdc_status |= (WD179X_STAT_DRQ); /* Set DRQ */
wd179x_info->drq = 1; wd179x_info->drq = 1;
wd179x_info->fdc_datacount = 128 << wd179x_info->fdc_sec_len; wd179x_info->fdc_datacount = WD179X_SECTOR_LEN_BYTES;
wd179x_info->fdc_dataindex = 0; wd179x_info->fdc_dataindex = 0;
wd179x_info->fdc_write = FALSE; wd179x_info->fdc_write = FALSE;
wd179x_info->fdc_write_track = FALSE; wd179x_info->fdc_write_track = FALSE;
@ -856,7 +859,7 @@ static uint8 Do1793Command(uint8 cCommand)
" CMD=WRITE_REC, T:%2d/S:%d/N:%2d, %s.\n", wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->fdc_head, wd179x_info->fdc_sector, (cCommand & 0x10) ? "Multiple" : "Single"); " CMD=WRITE_REC, T:%2d/S:%d/N:%2d, %s.\n", wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->fdc_head, wd179x_info->fdc_sector, (cCommand & 0x10) ? "Multiple" : "Single");
wd179x_info->fdc_status |= (WD179X_STAT_DRQ); /* Set DRQ */ wd179x_info->fdc_status |= (WD179X_STAT_DRQ); /* Set DRQ */
wd179x_info->drq = 1; wd179x_info->drq = 1;
wd179x_info->fdc_datacount = 128 << wd179x_info->fdc_sec_len; wd179x_info->fdc_datacount = WD179X_SECTOR_LEN_BYTES;
wd179x_info->fdc_dataindex = 0; wd179x_info->fdc_dataindex = 0;
wd179x_info->fdc_write = TRUE; wd179x_info->fdc_write = TRUE;
wd179x_info->fdc_write_track = FALSE; wd179x_info->fdc_write_track = FALSE;
@ -916,10 +919,10 @@ static uint8 Do1793Command(uint8 cCommand)
sim_debug(FMT_MSG, &wd179x_dev, "WD179X[%d]: " ADDRESS_FORMAT sim_debug(FMT_MSG, &wd179x_dev, "WD179X[%d]: " ADDRESS_FORMAT
" CMD=WRITE_TRACK, T:%2d/S:%d/N:%d.\n", wd179x_info->sel_drive, " CMD=WRITE_TRACK, T:%2d/S:%d/N:%d.\n", wd179x_info->sel_drive,
PCX, pDrive->track, wd179x_info->fdc_head, PCX, pDrive->track, wd179x_info->fdc_head,
128 << wd179x_info->fdc_sec_len); WD179X_SECTOR_LEN_BYTES);
wd179x_info->fdc_status |= (WD179X_STAT_DRQ); /* Set DRQ */ wd179x_info->fdc_status |= (WD179X_STAT_DRQ); /* Set DRQ */
wd179x_info->drq = 1; wd179x_info->drq = 1;
wd179x_info->fdc_datacount = 128 << wd179x_info->fdc_sec_len; wd179x_info->fdc_datacount = WD179X_SECTOR_LEN_BYTES;
wd179x_info->fdc_dataindex = 0; wd179x_info->fdc_dataindex = 0;
wd179x_info->fdc_write = FALSE; wd179x_info->fdc_write = FALSE;
wd179x_info->fdc_write_track = TRUE; wd179x_info->fdc_write_track = TRUE;
@ -952,7 +955,6 @@ static uint8 Do1793Command(uint8 cCommand)
wd179x_info->index_pulse_wait = TRUE; wd179x_info->index_pulse_wait = TRUE;
if (wd179x_info->sel_drive < WD179X_MAX_DRIVES) { if (wd179x_info->sel_drive < WD179X_MAX_DRIVES) {
sim_activate (wd179x_unit, ((wd179x_info->drive[wd179x_info->sel_drive].imd->ntracks % 77) == 0) ? CROMFDC_8IN_ROT : CROMFDC_5IN_ROT); /* Generate INDEX pulse */ sim_activate (wd179x_unit, ((wd179x_info->drive[wd179x_info->sel_drive].imd->ntracks % 77) == 0) ? CROMFDC_8IN_ROT : CROMFDC_5IN_ROT); /* Generate INDEX pulse */
/* sim_printf("Drive %d Num tracks=%d\n", wd179x_info->sel_drive, wd179x_info->drive[wd179x_info->sel_drive].imd->ntracks); */
} }
} else { } else {
wd179x_info->intrq = 1; wd179x_info->intrq = 1;
@ -1037,7 +1039,6 @@ uint8 max_sectors_per_track[2][7] = {
uint8 WD179X_Write(const uint32 Addr, uint8 cData) uint8 WD179X_Write(const uint32 Addr, uint8 cData)
{ {
WD179X_DRIVE_INFO *pDrive; WD179X_DRIVE_INFO *pDrive;
/* uint8 disk_read = 0; */
uint32 flags = 0; uint32 flags = 0;
uint32 writelen; uint32 writelen;
@ -1095,14 +1096,14 @@ uint8 WD179X_Write(const uint32 Addr, uint8 cData)
} }
sim_debug(WR_DATA_MSG, &wd179x_dev, "WD179X[%d]: " ADDRESS_FORMAT sim_debug(WR_DATA_MSG, &wd179x_dev, "WD179X[%d]: " ADDRESS_FORMAT
" Writing sector, T:%2d/S:%d/N:%2d, Len=%d\n", wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->fdc_head, wd179x_info->fdc_sector, 128 << wd179x_info->fdc_sec_len); " Writing sector, T:%2d/S:%d/N:%2d, Len=%d\n", wd179x_info->sel_drive, PCX, pDrive->track, wd179x_info->fdc_head, wd179x_info->fdc_sector, WD179X_SECTOR_LEN_BYTES);
sectWrite(pDrive->imd, sectWrite(pDrive->imd,
pDrive->track, pDrive->track,
wd179x_info->fdc_head, wd179x_info->fdc_head,
wd179x_info->fdc_sector, wd179x_info->fdc_sector,
sdata.raw, sdata.raw,
128 << wd179x_info->fdc_sec_len, WD179X_SECTOR_LEN_BYTES,
&flags, &flags,
&writelen); &writelen);
@ -1204,7 +1205,7 @@ uint8 WD179X_Write(const uint32 Addr, uint8 cData)
pDrive->track, pDrive->track,
wd179x_info->fdc_head, wd179x_info->fdc_head,
wd179x_info->fdc_fmt_sector_count, wd179x_info->fdc_fmt_sector_count,
128 << wd179x_info->fdc_sec_len, WD179X_SECTOR_LEN_BYTES,
wd179x_info->fdc_sectormap, wd179x_info->fdc_sectormap,
wd179x_info->ddens ? 3 : 0, /* data mode */ wd179x_info->ddens ? 3 : 0, /* data mode */
sdata.raw[0], sdata.raw[0],