clark@ihlpf.ATT.COM (Clark) (02/22/88)
This is a query for a friend of mine who doesn't have a Net feed. Has anybody gotten minix to run on the AT&T 6300+? Looking at Dr. T's list of 'puters on which Minix has been made to run, I don't see the 6300+ mentioned one way or the other. So, I thought I'd look to the incredible pool of expertise that the Net represents for help. Has anybody out there addressed this issue before? Ed Clark AT&T Bell Labs ...!ihnp4!ihlpf!clark
kav@ihlpa.ATT.COM (Vangness) (02/23/88)
Minix is alive and well on the AT&T 6300+. The following are the necessary modifications to Minix 1.2 to get it working. I don't have diffs against the 1.2 sources here but the changes are small and obvious from the following instructions. The major problems with the 6300+ and Minix are: 1) The 6300+ looks like an AT when Minix reads it's BIOS, but the 6300+ looks more like an XT hardware-wise (the HD interrupt is at the XT address not the AT address for example). 2) The transfer rate port for the floppy is at a different port address on the 6300+ than the AT. 3) The HD parameters read from the parameter vector are garbage. The following fixes solve the above problems. ------------------------------------ kernel/main.c: 1) Before main, add the following line: extern int scan_code; 2) At the point where the machine type is determined i.e, if (t == PC_AT) pc_at = TRUE; Modify it as follows: /* * AT&T 6300+ looks like an AT but the hardware is * more like an XT. If scan_code is 13 (olivetti '=') * and it looks like an AT then it is a 6300+ so set * pc_at to FALSE. */ if ((t == PC_AT) && (scan_code != 13)) { pc_at = TRUE; } else { pc_at = FALSE; } kernel/floppy.c: 1) Before main, add the following: #define ATTFDC_RATE 0x065 extern int scan_code; 2) In transfer() at about line 457 where the FDC rate is set i.e.: /* The PC-AT requires the date rate to be set to 250 or 500 kbps */ port_out(FDC_RATE, rate[d]); Modify it as follows: /* The PC-AT requires the date rate to be set to 250 or 500 kbps */ if (pc_at) { port_out(FDC_RATE, rate[d]); } else if (scan_code == 13) { port_out(ATTFDC_RATE, rate[d]); } Note that this change implys that all olivetti type machines (6300+ and the 6300) will also have rate[d] output to ATTFDC_RATE. This causes no problems on the 6300 I have at work, although I'm not sure what is at port ATTFDC_RATE on the 6300. kernel/xt_wini.c: My fixes to xt_wini are not very elegant: I hard code the drive parameters for the ST225 drive (which the 6300+ comes with). The parameters in memory pointed to by the parameter vector appear to be garbage. I seem to remember someone mentioning that Minix gets loaded over this section of memory on some PCs. I guess the real solution for the 6300+ would be to move Minix so that it isn't loaded over this parameter table. Does anyone have any ideas on this? Until then, the following changes to xt_wini.c work fine on the 6300+ and don't affect other machines. 1) Before main add the following: extern int scan_code; 2) In init_parms at about line 740 add the following new code: #if AUTO_BIOS /* close up the code to be executed when the controller has not been * set up to for auto configuration */ } #endif /* New code follows. */ /* Hard code parameters for AT&T 6300+ */ if (scan_code == 13) { param0.nr_heads = 4; param0.nr_cyl = 612; param0.reduced_wr = 613; param0.wr_precomp = 256; param0.max_ecc = 11; } /* End new code */ /* Set the parameters in the drive structure */ for (i = 0; i < DEV_PER_DRIVE; i++) { wini[i].wn_heads = param0.nr_heads; wini[i].wn_ctrl_byte = param0.ctrl_byte; wini[i].wn_drive = 0 << 5; /* Set drive number */ } ------------------------------------ Thats all there is to it! Sorry I don't have diffs against the 1.2 sources. I have also been playing around with Jim Paradis' RS232 driver. I had noticed that the overhead of sitting in the interrupt routine grabbing characters was causing everything else on the system to come to a dead halt. I decided to make the interrupt routine only process 1 character, and I tried to make the interrupt routine as fast as possible. I ripped out all code pertaining to more than 1 COM port, and merged the two functions ser_int and ser_doint into one routine. This made 1200 baud very smooth and nice on my 6300+. Only bad news is that my 6300 at work looses characters with this strategy so I imagine all but AT type machines will be unable to use this method. Maybe if ser_int was coded in assembler for speed? Kurt Vangsness AT&T Bell Laboratories - Naperville, Ill ihnp4!ihlpa!kav