From 11db9cc3d05ac7f3c73962e1c83dcc3432d028db Mon Sep 17 00:00:00 2001 From: twilen Date: Sun, 21 Nov 2010 21:08:06 +0000 Subject: [PATCH] disk change detection improved, return write protected status if attempting to write (was seek error) git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@35677 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/m68k-amiga/devs/trackdisk/trackdisk_device.c | 7 ++----- arch/m68k-amiga/devs/trackdisk/trackdisk_device.h | 1 - arch/m68k-amiga/devs/trackdisk/trackdisk_hw.c | 8 ++++---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/arch/m68k-amiga/devs/trackdisk/trackdisk_device.c b/arch/m68k-amiga/devs/trackdisk/trackdisk_device.c index d6378dbaa6..f53b7e106c 100644 --- a/arch/m68k-amiga/devs/trackdisk/trackdisk_device.c +++ b/arch/m68k-amiga/devs/trackdisk/trackdisk_device.c @@ -72,8 +72,8 @@ static void TestInsert(struct TrackDiskBase *tdb, struct TDU *tdu) if (tdu->pub.tdu_PubFlags & TDPF_NOCLICK) { td_seek(tdu, -1, 0, tdb); } else { - tdu->tdu_click = !tdu->tdu_click; - td_seek(tdu, tdu->tdu_click ? 1 : 0, 0, tdb); + // step towards cyl 0 if > 0, it not, step to cyl 1 + td_seek(tdu, tdu->pub.tdu_CurrTrk >= 2 ? tdu->pub.tdu_CurrTrk - 2 : 2, 0, tdb); } if (td_getDiskChange (tdu, tdb)) { struct DiskBase *DiskBase = tdb->td_DiskBase; @@ -354,10 +354,8 @@ static void TD_DevTask(struct TrackDiskBase *tdb) bug("DF%d failed to recalibrate!?\n", i); else D(bug("DF%d initialized\n", i)); - tdu->pub.tdu_CurrTrk = 0; tdu->tdu_DiskIn = td_getDiskChange(tdu, tdb) ? TDU_DISK : TDU_NODISK; tdu->tdu_ProtStatus = td_getprotstatus(tdu,tdb); - tdu->tdu_click = 0; tdu->tdu_hddisk = ishd (GetUnitID(i)); tdu->tdu_sectors = tdu->tdu_hddisk ? 22 : 11; td_deselect(tdu, tdb); @@ -421,7 +419,6 @@ static void TD_DevTask(struct TrackDiskBase *tdb) Cause((struct Interrupt *)((struct IOExtTD *)iotd->iotd_Req.io_Data)); } Permit(); - tdu->tdu_click = 0; } break; } diff --git a/arch/m68k-amiga/devs/trackdisk/trackdisk_device.h b/arch/m68k-amiga/devs/trackdisk/trackdisk_device.h index d9cbcef900..eab9c04081 100644 --- a/arch/m68k-amiga/devs/trackdisk/trackdisk_device.h +++ b/arch/m68k-amiga/devs/trackdisk/trackdisk_device.h @@ -48,7 +48,6 @@ struct TDU UBYTE tdu_MotorOn; /* Motor on? */ UBYTE tdu_ProtStatus; UBYTE tdu_flags; - UBYTE tdu_click; /* disk insertion check toggle */ BOOL tdu_hddisk; /* HD disk inserted */ BOOL tdu_broken; /* recalibrate didn't find TRACK0, drive ignored */ UBYTE tdu_lastdir; /* last step direction */ diff --git a/arch/m68k-amiga/devs/trackdisk/trackdisk_hw.c b/arch/m68k-amiga/devs/trackdisk/trackdisk_hw.c index b3cf7b22b9..3008fdd03e 100644 --- a/arch/m68k-amiga/devs/trackdisk/trackdisk_hw.c +++ b/arch/m68k-amiga/devs/trackdisk/trackdisk_hw.c @@ -145,8 +145,8 @@ int td_recalibrate(struct TDU *tdu, struct TrackDiskBase *tdb) int steps = 80 + 15; td_select(tdu, tdb); td_setside(0, tdu, tdb); - if (tdu->pub.tdu_CurrTrk == 0) { - // step to track 1 if current track == 0 + if (td_istrackzero(tdu, tdb)) { + // step to cyl 1 if current cyl == 0 td_setdirection(0, tdu, tdb); td_wait(tdb, tdu->pub.tdu_SettleDelay); td_step(tdu, tdb, tdu->pub.tdu_CalibrateDelay); @@ -518,7 +518,7 @@ static int td_write2(struct IOExtTD *iotd, struct TDU *tdu, struct TrackDiskBase offset += totalsectorsneeded * 512; data += totalsectorsneeded * 512; } - return TDERR_SeekError; + return TDERR_WriteProt; } int td_write(struct IOExtTD *iotd, struct TDU *tdu, struct TrackDiskBase *tdb) @@ -562,7 +562,7 @@ static int td_format2(struct IOExtTD *iotd, struct TDU *tdu, struct TrackDiskBas len -= tdu->tdu_sectors * 512; td_wait(tdb, 1); } - return 0; + return TDERR_WriteProt; } int td_format(struct IOExtTD *iotd, struct TDU *tdu, struct TrackDiskBase *tdb) -- 2.11.4.GIT