[comp.os.minix] PS/2 Floppy controller - Information

craig@sutcase.case.syr.edu (Gary L. Craig) (12/02/88)

>I am still having problems with MINIX on the PS/2.  For one thing, the
>floppy disk controller appears to work differently.  Does anyone know if
>it is a NEC 765 chip, and if so, what are the parameters for 1.44 MB and
>720K (see the current floppy.c for the 360K and 1.2MB parameters)?

I spent some time on the PS/2 controller problem this summer with some
success (however I was working with buggy 1.2 code, trying to use Microsoft
C, etc. etc.).  The Model 60 has an Intel 2765 controller chip (very similar
to NEC 765).  The 1.44 MByte drive is 2 heads, 18 sectors per track, 80 cylinders.
Rotation speec is 360 rpm, and data rate is 500 kbps (at least under DOS control).
The gap size is 1Bh.

I have a version of floppy.c which seems to work (actual consistent success
is using it from DOS - since we haven't completed upgrade to 1.3 and have
problems with MINIX on PS/2 this past summer).  I will have a student of
mine send you a copy - you should do a cdiff with 1.2 floppy.c.

However, some general notes.   The biggest change that we found we had ot
contend with on the Model 60, was not the floppy controller, but instead
the DMA, Bus Arbitration - of the Micro Architecture.  Example:
DMA_READ = 06h and DMA_WRITE = 0Ah.

Also, had to add code to DMA_setup:

Port_out(DMA_INIT,6);  /* set channel 2 mask bit */
        (DMA_M2,DMA_READ);  /* clear byte pointer */
        (DMA_ADDR, low)
        (DMA_ADDR, high)
        (DMA_TOP, ..)
        (.._COUNT, ..)
        (.._COUNT, ..)
        (DMA_M2, mode)
        (DMA_M1, mode)
        (DMA_INIT,2)  /* enable channel 2 */
unlock()

Also, sometime (we did it in start_motor; probably overkill), you must
set up the bus arbitration for DMA channel 2.

port_out(0x31a8,2); /* Send out arbitration # for channel 2 */
port_in(0x31a6,&valu);
port_out(0x31a9,valu);

Finally, we had problems with clearing (reseting interrupts) so  after
each receive(Hardware,..) we executed the following:

lock();
port_in(INT_CTLMASK,&valu);
valu &= 0xbf;
port_out(INT_CTLMASK,valu);
unlock();


I hope to have the code to you in the next day or so.  Also, I have the
hardware manuals (but short memory) - So if you have any questions that
I can help with, please let me know.    Once we get 1.3c generated, I
hope to have someone work on the PS/2 problem, but I am afraid that won't
be until the xmas break.

-glc
Gary L. Craig
Dept. ECE - Syracuse University          email: craig@sutcase.case.syr.edu
111 Link Hall  Syracuse, NY 13244-1240   (315) 443-4389
#! rnews           2

ast@cs.vu.nl (Andy Tanenbaum) (12/04/88)

In article <852@cmx.npac.syr.edu> craig@sutcase.case.syr.edu (Gary L. Craig) writes:
>I spent some time on the PS/2 controller problem this summer with some
>success 

I am very interested in finding out what you did and hopefully getting working
code.  Please send me your !...! address from uunet.  My mail to you seems to
bounce.

Andy Tanenbaum (ast@cs.vu.nl)