Path: utzoo!censor!dybbuk!yunexus!ists!helios.physics.utoronto.ca!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!munnari.oz.au!metro!ipso!stca77!peter From: peter@stca77.stc.oz (Peter Jeremy) Newsgroups: comp.os.minix,comp.sys.amiga.unix Subject: Re: Minix 1.5 on the Amiga 1000 Keywords: minix amiga a1000 Message-ID: <1201@stca77.stc.oz> Date: 19 Jan 91 06:38:09 GMT Article-I.D.: stca77.1201 References: <1193@stca77.stc.oz> Organization: Alcatel-STC, Alexandria, AUSTRALIA Lines: 41 Disclaimer: The views expressed herein are those of the author only In article <1193@stca77.stc.oz>, I wrote: [ description of problem deleted ] >I have checked amhardware.h against the Hardware manual, and it appears >error-free. I am currently looking through the code in floppy.c & >floppy_conv.s to try and see if I can see an incompatability, but this will >take a fair amount of time. I found the problem. floppy.c does not check for the head being at track 0 (*PRAA & DSK_TRACK0) [I guessed my A1000 wasn't from the noise it made - it is in the software though]. It appears that, on some types of floppy drives, attempting to step beyond track zero results in the heads no longer being at track 0. The problem does not exist in my [3rd party] external drive. This is a bug in floppy.c - it should check for the drive being at track 0 and not attempt to step down from there. I will post a bugfix when I manage to work out some way of cross-compiling the kernel. An code approximation is: (about 9 lines into flstep_int()) change: else if (seek_offset < 0) to: else if (seek_offset < 0 && !(*PRAA & DSK_TRACK0)) The other oddity that my studies revealed is the usage of seek_delay in flstep_int(). Why is there a 4 step delay _before_ the heads are moved? From my (limited) knowledge of floppy drives, there is often a settling delay _after_ the heads are positioned over the correct track. Is that what is intended and the code (or my reading of it) is not correct, or is the delay needed before the seek for some reason. I also suspect that there is a problem with the call to start_motor() in seek(). The call is currently: start_motor(dp, (int) (MOTORON_DELAY - (long) ABS(seek_offset + seek_delay) * stepdelay * HZ / 1000000L)); Should this be: start_motor(dp, (int) (MOTORON_DELAY - (long) (ABS(seek_offset) + seek_delay) * stepdelay * HZ / 1000000L)); -- Peter Jeremy (VK2PJ) peter@stca77.stc.oz.AU Alcatel STC Australia ...!uunet!stca77.stc.oz!peter 240 Wyndham St peter%stca77.stc.oz@uunet.UU.NET ALEXANDRIA NSW 2015