Significantly speed up floppy turbo mode when the FDC is using DMA.
This commit is contained in:
@@ -279,6 +279,15 @@ fdc_is_mfm(fdc_t *fdc)
|
|||||||
return fdc->mfm ? 1 : 0;
|
return fdc->mfm ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fdc_is_dma(fdc_t *fdc)
|
||||||
|
{
|
||||||
|
if ((fdc->flags & FDC_FLAG_PCJR) || !fdc->dma)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fdc_request_next_sector_id(fdc_t *fdc)
|
fdc_request_next_sector_id(fdc_t *fdc)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2414,16 +2414,28 @@ d86f_turbo_poll(int drive, int side)
|
|||||||
case STATE_0C_READ_DATA:
|
case STATE_0C_READ_DATA:
|
||||||
case STATE_11_SCAN_DATA:
|
case STATE_11_SCAN_DATA:
|
||||||
case STATE_16_VERIFY_DATA:
|
case STATE_16_VERIFY_DATA:
|
||||||
d86f_turbo_read(drive, side);
|
if (fdc_is_dma(d86f_fdc))
|
||||||
|
for (int i = 0; i < (128 << dev->last_sector.id.n); i++)
|
||||||
|
d86f_turbo_read(drive, side);
|
||||||
|
else
|
||||||
|
d86f_turbo_read(drive, side);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_05_WRITE_DATA:
|
case STATE_05_WRITE_DATA:
|
||||||
case STATE_09_WRITE_DATA:
|
case STATE_09_WRITE_DATA:
|
||||||
d86f_turbo_write(drive, side);
|
if (fdc_is_dma(d86f_fdc))
|
||||||
|
for (int i = 0; i < (128 << dev->last_sector.id.n); i++)
|
||||||
|
d86f_turbo_write(drive, side);
|
||||||
|
else
|
||||||
|
d86f_turbo_write(drive, side);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_0D_FORMAT_TRACK:
|
case STATE_0D_FORMAT_TRACK:
|
||||||
d86f_turbo_format(drive, side, (side && (d86f_get_sides(drive) != 2)));
|
if (fdc_is_dma(d86f_fdc))
|
||||||
|
while (dev->state == STATE_0D_FORMAT_TRACK)
|
||||||
|
d86f_turbo_format(drive, side, (side && (d86f_get_sides(drive) != 2)));
|
||||||
|
else
|
||||||
|
d86f_turbo_format(drive, side, (side && (d86f_get_sides(drive) != 2)));
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case STATE_IDLE:
|
case STATE_IDLE:
|
||||||
|
|||||||
@@ -206,6 +206,7 @@ extern int fdc_get_drive(fdc_t *fdc);
|
|||||||
extern int fdc_get_perp(fdc_t *fdc);
|
extern int fdc_get_perp(fdc_t *fdc);
|
||||||
extern int fdc_get_format_n(fdc_t *fdc);
|
extern int fdc_get_format_n(fdc_t *fdc);
|
||||||
extern int fdc_is_mfm(fdc_t *fdc);
|
extern int fdc_is_mfm(fdc_t *fdc);
|
||||||
|
extern int fdc_is_dma(fdc_t *fdc);
|
||||||
extern double fdc_get_hut(fdc_t *fdc);
|
extern double fdc_get_hut(fdc_t *fdc);
|
||||||
extern double fdc_get_hlt(fdc_t *fdc);
|
extern double fdc_get_hlt(fdc_t *fdc);
|
||||||
extern void fdc_request_next_sector_id(fdc_t *fdc);
|
extern void fdc_request_next_sector_id(fdc_t *fdc);
|
||||||
|
|||||||
Reference in New Issue
Block a user