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