|
@@ -139,6 +139,7 @@ static void step_once(void)
|
|
|
static uint8_t floppy_seek_initialise(struct unit *u)
|
|
|
{
|
|
|
int nr;
|
|
|
+ uint8_t rc;
|
|
|
|
|
|
/* Synchronise to cylinder 0. */
|
|
|
step_dir_out();
|
|
@@ -147,7 +148,9 @@ static uint8_t floppy_seek_initialise(struct unit *u)
|
|
|
goto found_cyl0;
|
|
|
step_once();
|
|
|
}
|
|
|
- return ACK_NO_TRK0;
|
|
|
+
|
|
|
+ rc = ACK_NO_TRK0;
|
|
|
+ goto out;
|
|
|
|
|
|
found_cyl0:
|
|
|
|
|
@@ -158,6 +161,7 @@ found_cyl0:
|
|
|
|
|
|
/* Trk0 sensor can be asserted at negative cylinder offsets. Seek
|
|
|
* inwards until the sensor is deasserted. */
|
|
|
+ delay_ms(delay_params.seek_settle); /* change of direction */
|
|
|
step_dir_in();
|
|
|
for (nr = 0; nr < 10; nr++) {
|
|
|
step_once();
|
|
@@ -169,13 +173,19 @@ found_cyl0:
|
|
|
}
|
|
|
|
|
|
/* Bail if we didn't find cylinder 1. */
|
|
|
- if (u->cyl != 1)
|
|
|
- return ACK_NO_TRK0;
|
|
|
+ if (u->cyl != 1) {
|
|
|
+ rc = ACK_NO_TRK0;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
u->initialised = TRUE;
|
|
|
- return ACK_OKAY;
|
|
|
+ rc = ACK_OKAY;
|
|
|
+
|
|
|
+out:
|
|
|
+ delay_ms(delay_params.seek_settle);
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
static uint8_t floppy_seek(int cyl)
|
|
@@ -196,14 +206,16 @@ static uint8_t floppy_seek(int cyl)
|
|
|
if ((cyl < (u->is_flippy ? -8 : 0)) || (cyl > 100))
|
|
|
return ACK_BAD_CYLINDER;
|
|
|
|
|
|
- if (u->cyl <= cyl) {
|
|
|
+ if (u->cyl < cyl) {
|
|
|
nr = cyl - u->cyl;
|
|
|
step_dir_in();
|
|
|
- } else {
|
|
|
+ } else if (u->cyl > cyl) {
|
|
|
if (cyl < 0)
|
|
|
flippy_trk0_sensor_disable();
|
|
|
nr = u->cyl - cyl;
|
|
|
step_dir_out();
|
|
|
+ } else /* u->cyl == cyl */ {
|
|
|
+ return ACK_OKAY;
|
|
|
}
|
|
|
|
|
|
while (nr--)
|