[comp.os.minix] EGA and RLL controller fixes

klock@mitre-bedford.ARPA (Kent J. Lockhart) (06/22/87)

Over the weekend i tried a couple of the fixes which i have been reading
on this net.  The results of these fixes are given below.

I spent on the order of ten hours compiling main.c and wini.c and building
my boot diskette this weekend.  Not a totally effortless event.
(that's what i get for giving up my second floppy for a hard disk which
doesn't [or didn't] work).


EGA Fix:

First, i encorporated the EGA fix to the kernel main.c program posted by 
Der-Ru Sheu (sheu@gitpyr.UUCP).  I assumed that this fix was for the EGA
screen blanking problem only!?  I haven't taken the time to decipher the
code, however i can report that it works fine on my VEGA board running
on my AT system at work and it does not seem to interfere with the 
performance of my Hercules card at home.  I inserted the fix in main()
(in main.c) arter the variable definitions ... right after
"extern phys_bytes umap();"

The changes i inserted were

 port_out(0x3c4, 4);
 port_out(0x3c5, 1);

for those of you who did not see the message.


RLL Fix:

I've been so frustrated over the last week while i tried to run MINIX
on a single floppy system since my hard disk wasn't being recognized by
MINIX.  I am using an ST238R RLL disk drive and a Western Digital (RLL) 
controller.

My surprise and elation when i got my hard disk to work ...
But, i still have problems and if any one has anyother fixes which can
help me and my RLL please post them ... The changes i made to xt_wini.c
are given below:

 First, since the RLL packs more information on each sector than the
  other hard disk systems i had to change the definition of NR_SECTORS
  to 25 (documented in the ST238R manual) from 17 ...

    #define NR_SECTORS    0x19


 Second, I used the fix posted by Bing Bang (bing@galbp.UUCP) which
  suggested that a change to the interrupt settings within com_out() 
  in xt_wini.c would remedy disk problems ... it did and i attribute
  this fix to the "partial" working of my hard disk.  The change I
  made to com_out() is given below:

  I changed ....

   lock();
   for (i=0; i<6; i++)
       port_out(WIN_DATA, command[i]);
   unlock();
   port_in(WIN_STATUS, &r);
   if (r & 1) {
       w_need_reset = TRUE;
       return(ERR);
   } else
       return(OK);

  to ....

   lock();
   for (i=0; i<6; i++)
       port_out(WIN_DATA, command[i]);
   port_in(WIN_STATUS, &r);
   unlock();
   if (r & 1) {
      w_need_reset = TRUE;
      return(ERR);
   } else
      return(OK);

All i did was move unlock() down one line.  no other changes were made.

but, recognition of my hard disk is tempermental.  I require a second
bootup in order for it to be recognized.  Once recognized it works like
a charm.


 - Kent Lockhart