diff --git a/src/disc.c b/src/disc.c index 10274cc..d4fa316 100644 --- a/src/disc.c +++ b/src/disc.c @@ -125,7 +125,7 @@ int disc_hole(int drive) { drive ^= fdd_swap; - if (drives[drive].hole) + if (drive < 2 && drives[drive].hole) { return drives[drive].hole(drive); } @@ -139,7 +139,7 @@ void disc_poll() { disc_poll_time += disc_period * TIMER_USEC; - if (drives[disc_drivesel].poll) + if (disc_drivesel < 2 && drives[disc_drivesel].poll) drives[disc_drivesel].poll(); if (disc_notfound) @@ -228,10 +228,6 @@ void disc_reset() void disc_init() { -// pclog("disc_init %p\n", drives); - drives[0].poll = drives[1].poll = 0; - drives[0].seek = drives[1].seek = 0; - drives[0].readsector = drives[1].readsector = 0; disc_reset(); } @@ -239,7 +235,7 @@ int oldtrack[2] = {0, 0}; void disc_seek(int drive, int track) { // pclog("disc_seek: drive=%i track=%i\n", drive, track); - if (drives[drive].seek) + if (drive < 2 && drives[drive].seek) drives[drive].seek(drive, track); // if (track != oldtrack[drive]) // fdc_discchange_clear(drive); @@ -251,7 +247,7 @@ void disc_readsector(int drive, int sector, int track, int side, int density, in { drive ^= fdd_swap; - if (drives[drive].readsector) + if (drive < 2 && drives[drive].readsector) drives[drive].readsector(drive, sector, track, side, density, sector_size); else disc_notfound = 1000; @@ -261,7 +257,7 @@ void disc_writesector(int drive, int sector, int track, int side, int density, i { drive ^= fdd_swap; - if (drives[drive].writesector) + if (drive < 2 && drives[drive].writesector) drives[drive].writesector(drive, sector, track, side, density, sector_size); else disc_notfound = 1000; @@ -271,7 +267,7 @@ void disc_readaddress(int drive, int track, int side, int density) { drive ^= fdd_swap; - if (drives[drive].readaddress) + if (drive < 2 && drives[drive].readaddress) drives[drive].readaddress(drive, track, side, density); } @@ -279,7 +275,7 @@ void disc_format(int drive, int track, int side, int density, uint8_t fill) { drive ^= fdd_swap; - if (drives[drive].format) + if (drive < 2 && drives[drive].format) drives[drive].format(drive, track, side, density, fill); else disc_notfound = 1000; @@ -289,7 +285,7 @@ void disc_stop(int drive) { drive ^= fdd_swap; - if (drives[drive].stop) + if (drive < 2 && drives[drive].stop) drives[drive].stop(drive); } diff --git a/src/fdd.c b/src/fdd.c index 7092f70..17e61ec 100644 --- a/src/fdd.c +++ b/src/fdd.c @@ -79,6 +79,9 @@ int fdd_swap = 0; void fdd_seek(int drive, int track_diff) { drive ^= fdd_swap; + + if (drive >= 2) + return; fdd[drive].track += track_diff; @@ -101,13 +104,17 @@ void fdd_disc_changed(int drive) drive ^= fdd_swap; /*Force reload of current track data*/ - disc_seek(drive, fdd[drive].track); + if (drive < 2) + disc_seek(drive, fdd[drive].track); } int fdd_track0(int drive) { drive ^= fdd_swap; + if (drive >= 2) + return 0; + /* If drive is disabled, TRK0 never gets set. */ if (!drive_types[fdd[drive].type].max_track) return 0; @@ -122,9 +129,14 @@ void fdd_set_densel(int densel) int fdd_getrpm(int drive) { - int hole = disc_hole(drive); + int hole; drive ^= fdd_swap; + + if (drive >= 2) + return 0; + + hole = disc_hole(drive); if (!(drive_types[fdd[drive].type].flags & FLAG_RPM_360)) return 300; if (!(drive_types[fdd[drive].type].flags & FLAG_RPM_300)) return 360; @@ -162,9 +174,14 @@ void fdd_setswap(int swap) int fdd_can_read_medium(int drive) { - int hole = disc_hole(drive); + int hole; drive ^= fdd_swap; + + if (drive >= 2) + return 0; + + hole = disc_hole(drive); hole = 1 << (hole + 3); @@ -174,25 +191,34 @@ int fdd_can_read_medium(int drive) int fdd_doublestep_40(int drive) { + if (drive >= 2) + return 0; return drive_types[fdd[drive].type].flags & FLAG_DOUBLE_STEP; } void fdd_set_type(int drive, int type) { - fdd[drive].type = type; + if (drive < 2) + fdd[drive].type = type; } int fdd_get_type(int drive) { + if (drive >= 2) + return 0; return fdd[drive].type; } int fdd_is_525(int drive) { + if (drive >= 2) + return 0; return drive_types[fdd[drive].type].flags & FLAG_525; } int fdd_is_ed(int drive) { + if (drive >= 2) + return 0; return drive_types[fdd[drive].type].flags & FLAG_HOLE2; }