[comp.os.minix] NYUMINIX:MODIFY

jai@lab.ultra.nyu.edu (Benchiao Jai) (02/24/91)

1. Change all '/' in the include path names to '\'.
   And TURBO-C checks all directives even not executed, so delete:
***** h\CONST.H
#ifndef i8088
#ifndef ATARI_ST
#error Either i8088 or ATARI ST must be defined
#endif
#endif
*****

2. Interrupt controller #2 is used only for WINI, now it's not needed.
   Delete the following sections.
***** kernel\MAIN.C
        port_out(INT2_MASK, CMASK2);    /* same for second intr controller */
*****
***** kernel\PROC.C
  if (pc_at && task == WINCHESTER)
          /* this re-enables the second controller chip */
          port_out(INT2_CTL, ENABLE);
*****

3. Do not initialize the vectors not used by MINIX.
   Delete the following sections.
***** kernel\MAIN.C
#define HIGH_INT          16    /* limit of the interrupt vectors */

extern int int00(), int01(), int02(), int03(), int04(), int05(), int06(),
           int07(), int08(), int09(), int10(), int11(), int12(), int13(),
           int14(), int15();
int (*int_vec[HIGH_INT])() = {int00, int01, int02, int03, int04, int05, int06,
    int07, int08, int09, int10, int11, int12, int13, int14, int15};
*****
***** kernel\MAIN.C
  for (t = 0; t < HIGH_INT; t++) set_vec(t, int_vec[t], base_click);
  for (t = HIGH_INT; t < 256; t++) set_vec(t, trp, base_click);
*****
***** kernel\MAIN.C
  if (pc_at) {
        set_vec(AT_WINI_VECTOR, wini_int, base_click);
        phys_copy(phys_b + 4L*EM_VEC, 4L*EM_VEC, 4L);   /* extended mem vec */
  } else
        set_vec(XT_WINI_VECTOR, wini_int, base_click);
*****
***** kernel\MAIN.C
  /* Put a ptr to proc table in a known place so it can be found in /dev/mem */
  set_vec( (BASE - 4)/4, proc, (phys_clicks) 0);
*****

   And modify this:
***** kernel\CONST.H
#define VECTOR_BYTES     284    /* bytes of interrupt vectors to save */
>>>>>
#define VECTOR_BYTES     132    /* bytes of interrupt vectors to save */
*****
***** kernel\MAIN.C
  extern int wini_int(), lpr_int(), trp(), rs232_int(), secondary_int();
>>>>>
  extern int lpr_int(), rs232_int(), secondary_int();
*****

4. NYUMINIX is on top of MS-DOS, so we need to change the address base.
***** kernel\MAIN.C
#define VERY_BIG       39328    /* must be bigger than kernel size (clicks) */
#define BASE            1536    /* address where MINIX starts in memory */
>>>>>
#define VERY_BIG (unsigned)34816/* must be bigger than kernel size (clicks) */
#define BASE            _CS     /* address where MINIX starts in memory */
*****
***** kernel\MAIN.C
  old_state = lock();                   /* we can't handle interrupts yet */
  base_click = BASE >> CLICK_SHIFT;
  size = sizes[0] + sizes[1];   /* kernel text + data size in clicks */
>>>>>
  lock();                       /* we can't handle interrupts yet */
  base_click = BASE;
  size = sizes[0] + sizes[1];   /* kernel text + data size in clicks */
*****

5. The word 'interrupt' is reserved by TURBO-C, change it to 'interupt'.
***** kernel\CONSOLE.C
        interrupt(TTY, &keybd_mess);    /* send a message to the tty task */
>>>>>
        interupt(TTY, &keybd_mess);     /* send a message to the tty task */
*****
***** kernel\PRINTER.C
  interrupt(PRINTER, &int_mess);
>>>>>
  interupt(PRINTER, &int_mess);
*****
***** kernel\PROC.C
PUBLIC interrupt(task, m_ptr)
>>>>>
PUBLIC interupt(task, m_ptr)
*****
***** kernel\RS232.C
  interrupt(TTY, &rs232_rd_mess);       /* send a message to the tty task */
>>>>>
  interupt(TTY, &rs232_rd_mess);        /* send a message to the tty task */
*****
***** kernel\RS232.C
        interrupt(TTY, &rs232_wt_mess); /* send the message to the tty task */
>>>>>
        interupt(TTY, &rs232_wt_mess);  /* send the message to the tty task */
*****

6. Three PRIVATE functions in RS232.C should be PUBLIC.  MINIX C compiler
   didn't catch this.
***** kernel\RS232.C
PRIVATE rs_out_char(tp, c)
>>>>>
PUBLIC rs_out_char(tp, c)
*****
***** kernel\RS232.C
PRIVATE init_rs232()
>>>>>
PUBLIC init_rs232()
*****
***** kernel\RS232.C
PRIVATE set_uart(line, mode, speeds)
>>>>>
PUBLIC set_uart(line, mode, speeds)
*****

7. This is not necessary, but helps if you have a strange printer port which
   doesn't match your display card.  Like my laptop, it has a MONO display but
   a COLOR printer port (0x378).
***** kernel\PRINTER.C
PRIVATE print_init()
{
/* Color display uses 0x378 for printer; mono display uses 0x3BC. */

  int i;
  extern int color;

  port_base = (color ? PR_COLOR_BASE : PR_MONO_BASE);
>>>>>
PRIVATE print_init()
{
  int i;
  extern char get_byte();

  port_base = get_byte(0x40, 8) + (get_byte(0x40, 9) << 8);
*****

8. Some type checking problems:
***** h\const.h
#define NO_NUM           0x8000 /* used as numerical argument to panic() */
>>>>>
#define NO_NUM      (int)0x8000 /* used as numerical argument to panic() */
*****
***** h\const.h
#define I_REGULAR       0100000 /* regular file, not dir or special */
>>>>>
#define I_REGULAR  (int)0100000 /* regular file, not dir or special */
*****
***** mm\UTILITY.C
  extern errno;
>>>>>
  extern int errno;
*****

9. Some operator precedence problems:
***** h\type.h
#define MAX(a,b)        (a > b ? a : b)
#define MIN(a,b)        (a < b ? a : b)
>>>>>
#define MAX(a,b)        (((a) > (b)) ? (a) : (b))
#define MIN(a,b)        (((a) < (b)) ? (a) : (b))
*****
***** mm\SIGNAL.C
  if (sig_map == 1 << (STACK_FAULT - 1))
        stack_fault(proc_nr);
>>>>>
  if (sig_map == ((unshort)1 << (STACK_FAULT - 1)))
        stack_fault(proc_nr);
*****
***** mm\UTILITY.C
  if (mp->mp_effuid == SUPER_USER && mask == X_BIT &&
        (s_buf->st_mode & (X_BIT << 6 | X_BIT << 3 | X_BIT))) return(fd);
>>>>>
  if (mp->mp_effuid == SUPER_USER && mask == X_BIT &&
        (s_buf->st_mode & ((X_BIT << 6) | (X_BIT << 3) | X_BIT))) return(fd);
*****
***** mm\UTILITY.C
  if (s_buf->st_mode >> shift & mask)   /* test the relevant bits */
>>>>>
  if ((s_buf->st_mode >> shift) & mask) /* test the relevant bits */
*****
***** fs\PIPE.C
  fp->fp_fd = fd << 8 | fs_call;
>>>>>
  fp->fp_fd = (fd << 8) | fs_call;
*****

10. Finally, you will want to load the root disk from an MS-DOS file.  And
    since the MS-DOS files, as being MINIX filesystems, are relatively smaller
    than partitions, you'll want to have more of them and more places to mount
    them.
***** fs\CONST.H
#define NR_SUPERS          5    /* # slots in super block table */
>>>>>
#define NR_SUPERS          8    /* # slots in super block table */
*****
***** fs\MAIN.C
#define RAM_IMAGE (dev_nr)0x303 /* major-minor dev where root image is kept */
>>>>>
#define RAM_IMAGE (dev_nr)0x300 /* major-minor dev where root image is kept */
*****
***** fs\MAIN.C
  root_device = BOOT_DEV;       /* try floppy disk first */
  bp = get_block(root_device, SUPER_BLOCK, NORMAL);  /* get RAM super block */
>>>>>
  root_device = RAM_IMAGE;
  bp = get_block(root_device, SUPER_BLOCK, NORMAL); /* get super block */
*****
***** fs\MAIN.C
  if (sp->s_magic != SUPER_MAGIC) {
        put_block(bp, FULL_DATA_BLOCK);
        root_device = RAM_IMAGE;
        bp = get_block(root_device, SUPER_BLOCK, NORMAL);  /* get RAM super block */
        copy(super_block, bp->b_data, sizeof(struct super_block));
        sp = &super_block[0];
        if (sp->s_magic != SUPER_MAGIC)
                panic("Invalid root file system", NO_NUM);
  }
>>>>>
  if (sp->s_magic != SUPER_MAGIC)
        panic("Invalid root file system", NO_NUM);
*****

Benchiao Jai
jai@cs.nyu.edu