ncoverby@ndsuvax.UUCP (Glen Overby) (05/11/89)
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# fs/main.c.diff
# fs/misc.c.diff
# fs/super.c.diff
# fs/utility.c.diff
# mm/main.diff
# h/com.diff
# lib/syslib.diff
# MANIFEST
# This archive created: Tue May 9 12:01:34 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'fs/main.c.diff'" '(12806 characters)'
if test -f 'fs/main.c.diff'
then
echo shar: will not over-write existing file "'fs/main.c.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'fs/main.c.diff'
X*** /usr/src/minix/fs/main.c Sat Aug 13 14:21:01 1988
X--- main.c Sat Apr 22 02:03:55 1989
X***************
X*** 32,38 ****
X #endif FASTLOAD
X
X #define M64K 0xFFFF0000L /* 16 bit mask for DMA check */
X! #define INFO 2 /* where in data_org is info from build */
X #define MAX_RAM 16384 /* maximum RAM disk size in blocks */
X #define RAM_IMAGE (dev_nr)0x303 /* major-minor dev where root image is kept */
X
X--- 32,38 ----
X #endif FASTLOAD
X
X #define M64K 0xFFFF0000L /* 16 bit mask for DMA check */
X! /*#define INFO 2 /* where in data_org is info from build */
X #define MAX_RAM 16384 /* maximum RAM disk size in blocks */
X #define RAM_IMAGE (dev_nr)0x303 /* major-minor dev where root image is kept */
X
X***************
X*** 40,50 ****
X #define EM_ORIGIN 0x100000 /* origin of extended memory RAM disk on AT */
X #define MAX_CRD 255 /* if root fs > MAX_CRD, use extended mem */
X #endif
X
X /*===========================================================================*
X * main *
X *===========================================================================*/
X! PUBLIC main()
X {
X /* This is the main program of the file system. The main loop consists of
X * three major activities: getting new work, processing the work, and sending
X--- 40,52 ----
X #define EM_ORIGIN 0x100000 /* origin of extended memory RAM disk on AT */
X #define MAX_CRD 255 /* if root fs > MAX_CRD, use extended mem */
X #endif
X+ dev_nr root_dev;
X
X /*===========================================================================*
X * main *
X *===========================================================================*/
X! PUBLIC main(argc, argv)
X! int argc; int **argv;
X {
X /* This is the main program of the file system. The main loop consists of
X * three major activities: getting new work, processing the work, and sending
X***************
X*** 53,59 ****
X int error;
X extern int (*call_vector[NCALLS])();
X
X! fs_init();
X
X /* This is the main loop that gets work, processes it, and sends replies. */
X while (TRUE) {
X--- 55,61 ----
X int error;
X extern int (*call_vector[NCALLS])();
X
X! fs_init(argc, argv);
X
X /* This is the main loop that gets work, processes it, and sends replies. */
X while (TRUE) {
X***************
X*** 132,153 ****
X /*===========================================================================*
X * fs_init *
X *===========================================================================*/
X! PRIVATE fs_init()
X! {
X! /* Initialize global variables, tables, etc. */
X!
X register struct inode *rip;
X int i;
X extern struct inode *get_inode();
X
X buf_pool(); /* initialize buffer pool */
X! load_ram(); /* Load RAM disk from root diskette. */
X load_super(); /* Load super block for root device */
X
X /* Initialize the 'fproc' fields for process 0 and process 2. */
X for (i = 0; i < 3; i+= 2) {
X fp = &fproc[i];
X! rip = get_inode(ROOT_DEV, ROOT_INODE);
X fp->fp_rootdir = rip;
X dup_inode(rip);
X fp->fp_workdir = rip;
X--- 134,170 ----
X /*===========================================================================*
X * fs_init *
X *===========================================================================*/
X! PRIVATE fs_init(argc, argv)
X! int argc, **argv;
X! {
X! /* Initialize global variables, tables, etc. */
X! /*
X! * Arguments are: (for both process and this function)
X! * 0 Device to load root image from
X! * (0 if the root image doesn't need pre-loading)
X! * 1 Device to mount as root
X! * 2 PC RAM disk size
X! * 3 Extended (AT) RAM disk size
X! * 4 EMS RAM disk size
X! * the ram disk that is auto-loaded will be sized from the root
X! * filesystem's super-block and should have it's default size
X! * set to 0 at all times.
X! */
X register struct inode *rip;
X int i;
X extern struct inode *get_inode();
X
X buf_pool(); /* initialize buffer pool */
X! printf("FS: 0x%x 0x%x 0x%x 0x%x 0x%x\n", *argv[0], *argv[1], *argv[2], *argv[3], *argv[4]);
X! root_dev = *argv[1]; /* set the root device */
X! if(*argv[0] != 0)
X! load_ram(*argv[0]); /* Load RAM disk from root image diskette. */
X load_super(); /* Load super block for root device */
X
X /* Initialize the 'fproc' fields for process 0 and process 2. */
X for (i = 0; i < 3; i+= 2) {
X fp = &fproc[i];
X! rip = get_inode(root_dev, ROOT_INODE);
X fp->fp_rootdir = rip;
X dup_inode(rip);
X fp->fp_workdir = rip;
X***************
X*** 165,170 ****
X--- 182,189 ----
X if (NR_FDS > 127) panic("NR_FDS > 127", NO_NUM);
X if (NR_BUFS < 6) panic("NR_BUFS < 6", NO_NUM);
X if (sizeof(d_inode) != 32) panic("inode size != 32", NO_NUM);
X+ printf("FS: 0x%x 0x%x 0x%x 0x%x 0x%x\n", *argv[0], *argv[1], *argv[2], *argv[3], *argv[4]);
X+ printf("FS: Init Done\n");
X }
X
X /*===========================================================================*
X***************
X*** 228,234 ****
X /*===========================================================================*
X * load_ram *
X *===========================================================================*/
X! PRIVATE load_ram()
X {
X /* The root diskette contains a block-by-block image of the root file system
X * starting at 0. Go get it and copy it to the RAM disk.
X--- 247,254 ----
X /*===========================================================================*
X * load_ram *
X *===========================================================================*/
X! PRIVATE load_ram(image)
X! dev_nr image; /* device to load root image from */
X {
X /* The root diskette contains a block-by-block image of the root file system
X * starting at 0. Go get it and copy it to the RAM disk.
X***************
X*** 239,256 ****
X long k_loaded;
X struct super_block *sp;
X block_nr i;
X! dev_nr root_device;
X! phys_clicks ram_clicks, init_org, init_text_clicks, init_data_clicks;
X! long base;
X! extern phys_clicks data_org[INFO + 2];
X! extern struct buf *get_block();
X!
X! /* Get size of INIT by reading block on diskette where 'build' put it. */
X! init_org = data_org[INFO];
X! init_text_clicks = data_org[INFO + 1];
X! init_data_clicks = data_org[INFO + 2];
X! base = (long) init_org + (long) init_text_clicks + (long) init_data_clicks;
X! base = base << CLICK_SHIFT;
X
X /* Get size of RAM disk by reading root file system's super block.
X * First read block 0 from the floppy. If this is a valid file system, use
X--- 259,268 ----
X long k_loaded;
X struct super_block *sp;
X block_nr i;
X! dev_nr usr_image;
X! phys_clicks ram_clicks;
X! long base;
X! extern struct buf *get_block();
X
X /* Get size of RAM disk by reading root file system's super block.
X * First read block 0 from the floppy. If this is a valid file system, use
X***************
X*** 260,280 ****
X printf("Booting MINIX-ST 1.1. Copyright 1988 Prentice-Hall, Inc.\n");
X #endif ATARI_ST
X #ifdef ASKDEV
X! root_device = (dev_nr)askdev();
X! if (root_device == 0)
X! #endif ASKDEV
X! root_device = BOOT_DEV; /* try floppy disk first */
X! bp = get_block(root_device, SUPER_BLOCK, NORMAL); /* get RAM super block */
X copy(super_block, bp->b_data, sizeof(struct super_block));
X sp = &super_block[0];
X if (sp->s_magic != SUPER_MAGIC) {
X! put_block(bp, FULL_DATA_BLOCK);
X! root_device = RAM_IMAGE;
X! bp = get_block(root_device, SUPER_BLOCK, NORMAL); /* get RAM super block */
X! copy(super_block, bp->b_data, sizeof(struct super_block));
X! sp = &super_block[0];
X! if (sp->s_magic != SUPER_MAGIC)
X! panic("Invalid root file system", NO_NUM);
X }
X count = sp->s_nzones << sp->s_log_zone_size; /* # blocks on root dev */
X if (count > MAX_RAM) panic("RAM disk is too big. # blocks = ", count);
X--- 272,289 ----
X printf("Booting MINIX-ST 1.1. Copyright 1988 Prentice-Hall, Inc.\n");
X #endif ATARI_ST
X #ifdef ASKDEV
X! usr_image = (dev_nr)askdev();
X! if (usr_image != 0)
X! image = usr_image;
X! #endif ASKDEV
X! if(image == 0)
X! /*image = BOOT_DEV; /* try floppy disk first */
X! image = RAM_IMAGE; /* try hard disk (hd0,3) first */
X! bp = get_block(image, SUPER_BLOCK, NORMAL); /* get RAM super block */
X copy(super_block, bp->b_data, sizeof(struct super_block));
X sp = &super_block[0];
X if (sp->s_magic != SUPER_MAGIC) {
X! panic("Invalid root file system", NO_NUM);
X }
X count = sp->s_nzones << sp->s_log_zone_size; /* # blocks on root dev */
X if (count > MAX_RAM) panic("RAM disk is too big. # blocks = ", count);
X***************
X*** 291,312 ****
X if (count > MAX_CRD) {
X ram_clicks = 0; /* MM does not have to allocate any core */
X base = EM_ORIGIN; /* tell RAM disk driver RAM disk origin */
X! }
X! #endif
X!
X! /* Tell MM the origin and size of INIT, and the amount of memory used for the
X! * system plus RAM disk combined, so it can remove all of it from the map.
X! */
X! m1.m_type = BRK2;
X! m1.m1_i1 = init_text_clicks;
X! m1.m1_i2 = init_data_clicks;
X! m1.m1_i3 = init_org + init_text_clicks + init_data_clicks + ram_clicks;
X! #ifdef ATARI_ST
X! m1.m1_p1 = (char *) (int) init_org; /* Bug in Alcyon 4.14 C */
X! #else
X! m1.m1_p1 = (char *) init_org;
X! #endif
X! if (sendrec(MM_PROC_NR, &m1) != OK) panic("FS Can't report to MM", NO_NUM);
X
X /* Tell RAM driver where RAM disk is and how big it is. */
X m1.m_type = DISK_IOCTL;
X--- 300,326 ----
X if (count > MAX_CRD) {
X ram_clicks = 0; /* MM does not have to allocate any core */
X base = EM_ORIGIN; /* tell RAM disk driver RAM disk origin */
X! } else { /* allocate core from mm */
X! #endif
X!
X! /*
X! * Ask MM for memory for the RAM disk
X! * This is the one and only call FROM FS TO MM.
X! */
X!
X! m1.m_type = BRK2;
X! m1.m2_i1 = 1;
X! m1.m2_i2 = ram_clicks;
X! if (sendrec(MM_PROC_NR, &m1) != OK) panic("FS Can't report to MM", NO_NUM);
X!
X! base = (long) m1.m2_p1;
X! base = base << CLICK_SHIFT;
X!
X! printf("Ram disk of %d clicks at click 0x%x (%ld)\n",ram_clicks, m1.m2_p1, base);
X!
X! #ifdef i8088
X! } /* end of core allocation */
X! #endif
X
X /* Tell RAM driver where RAM disk is and how big it is. */
X m1.m_type = DISK_IOCTL;
X***************
X*** 321,332 ****
X printf("RAM disk of %d blocks is in extended memory\n\n", count);
X #endif
X #ifdef FASTLOAD
X! fastload(root_device, (char *)base);
X #else
X printf("Loading RAM disk. Loaded: 0K ");
X for (i = 0; i < count; i++) {
X! bp = get_block(root_device, (block_nr) i, NORMAL);
X! bp1 = get_block(ROOT_DEV, i, NO_READ);
X copy(bp1->b_data, bp->b_data, BLOCK_SIZE);
X bp1->b_dirt = DIRTY;
X put_block(bp, I_MAP_BLOCK);
X--- 335,346 ----
X printf("RAM disk of %d blocks is in extended memory\n\n", count);
X #endif
X #ifdef FASTLOAD
X! fastload(image, (char *)base);
X #else
X printf("Loading RAM disk. Loaded: 0K ");
X for (i = 0; i < count; i++) {
X! bp = get_block(image, (block_nr) i, NORMAL);
X! bp1 = get_block(root_dev, i, NO_READ);
X copy(bp1->b_data, bp->b_data, BLOCK_SIZE);
X bp1->b_dirt = DIRTY;
X put_block(bp, I_MAP_BLOCK);
X***************
X*** 336,342 ****
X }
X #endif FASTLOAD
X
X! if (root_device == BOOT_DEV)
X printf("\rRAM disk loaded. Please remove root diskette. \n\n");
X else
X printf("\rRAM disk loaded. \n\n");
X--- 350,356 ----
X }
X #endif FASTLOAD
X
X! if (image == BOOT_DEV)
X printf("\rRAM disk loaded. Please remove root diskette. \n\n");
X else
X printf("\rRAM disk loaded. \n\n");
X***************
X*** 359,367 ****
X
X /* Read in super_block for the root file system. */
X sp = &super_block[0];
X! sp->s_dev = ROOT_DEV;
X! rw_super(sp,READING);
X! rip = get_inode(ROOT_DEV, ROOT_INODE); /* inode for root dir */
X
X /* Check super_block for consistency (is it the right diskette?). */
X if ( (rip->i_mode & I_TYPE) != I_DIRECTORY || rip->i_nlinks < 3 ||
X--- 373,381 ----
X
X /* Read in super_block for the root file system. */
X sp = &super_block[0];
X! sp->s_dev = root_dev; /* Root = /dev/ram */
X! rw_super(sp,READING);
X! rip = get_inode(root_dev, ROOT_INODE); /* inode for root dir */
X
X /* Check super_block for consistency (is it the right diskette?). */
X if ( (rip->i_mode & I_TYPE) != I_DIRECTORY || rip->i_nlinks < 3 ||
X***************
X*** 372,378 ****
X dup_inode(rip);
X sp->s_isup = rip;
X sp->s_rd_only = 0;
X! if (load_bit_maps(ROOT_DEV) != OK)
X panic("init: can't load root bit maps", NO_NUM);
X }
X
X--- 386,392 ----
X dup_inode(rip);
X sp->s_isup = rip;
X sp->s_rd_only = 0;
X! if (load_bit_maps(root_dev) != OK)
X panic("init: can't load root bit maps", NO_NUM);
X }
X
SHAR_EOF
if test 12806 -ne "`wc -c < 'fs/main.c.diff'`"
then
echo shar: error transmitting "'fs/main.c.diff'" '(should have been 12806 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'fs/misc.c.diff'" '(544 characters)'
if test -f 'fs/misc.c.diff'
then
echo shar: will not over-write existing file "'fs/misc.c.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'fs/misc.c.diff'
X*** /usr/src/minix/fs/misc.c Sat Aug 13 14:21:05 1988
X--- misc.c Tue Apr 18 11:36:53 1989
X***************
X*** 84,90 ****
X */
X
X /* Update the time in the root super_block. */
X! sp = get_super(ROOT_DEV);
X if (sp != NIL_SUPER) {
X sp->s_time = clock_time();
X if (sp->s_rd_only == FALSE) sp->s_dirt = DIRTY;
X--- 84,90 ----
X */
X
X /* Update the time in the root super_block. */
X! sp = get_super(root_dev);
X if (sp != NIL_SUPER) {
X sp->s_time = clock_time();
X if (sp->s_rd_only == FALSE) sp->s_dirt = DIRTY;
SHAR_EOF
if test 544 -ne "`wc -c < 'fs/misc.c.diff'`"
then
echo shar: error transmitting "'fs/misc.c.diff'" '(should have been 544 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'fs/super.c.diff'" '(879 characters)'
if test -f 'fs/super.c.diff'
then
echo shar: will not over-write existing file "'fs/super.c.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'fs/super.c.diff'
X*** /usr/src/minix/fs/super.c Sat Aug 13 14:21:34 1988
X--- super.c Fri Apr 21 10:40:21 1989
X***************
X*** 22,27 ****
X--- 22,28 ----
X #include "buf.h"
X #include "inode.h"
X #include "super.h"
X+ #include "glo.h"
X
X #define INT_BITS (sizeof(int)<<3)
X #define BIT_MAP_SHIFT 13 /* (log2 of BLOCK_SIZE) + 3; 13 for 1k blocks */
X***************
X*** 198,204 ****
X register dev_nr dev;
X
X dev = (dev_nr) rip->i_zone[0];
X! if (dev == ROOT_DEV) return(TRUE); /* inode is on root file system */
X
X for (sp = &super_block[0]; sp < &super_block[NR_SUPERS]; sp++)
X if (sp->s_dev == dev) return(TRUE);
X--- 199,205 ----
X register dev_nr dev;
X
X dev = (dev_nr) rip->i_zone[0];
X! if (dev == root_dev) return(TRUE); /* inode is on root file system */
X
X for (sp = &super_block[0]; sp < &super_block[NR_SUPERS]; sp++)
X if (sp->s_dev == dev) return(TRUE);
SHAR_EOF
if test 879 -ne "`wc -c < 'fs/super.c.diff'`"
then
echo shar: error transmitting "'fs/super.c.diff'" '(should have been 879 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'fs/utility.c.diff'" '(792 characters)'
if test -f 'fs/utility.c.diff'
then
echo shar: will not over-write existing file "'fs/utility.c.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'fs/utility.c.diff'
X*** /usr/src/minix/fs/utility.c Sat Aug 13 14:21:41 1988
X--- utility.c Tue Apr 18 11:37:32 1989
X***************
X*** 41,47 ****
X if ( (k = sendrec(CLOCK, &clock_mess)) != OK) panic("clock_time err", k);
X
X /* Since we now have the time, update the super block. It is almost free. */
X! sp = get_super(ROOT_DEV);
X if (sp) {
X sp->s_time = clock_mess.NEW_TIME; /* update super block time */
X if (sp->s_rd_only == FALSE) sp->s_dirt = DIRTY;
X--- 41,47 ----
X if ( (k = sendrec(CLOCK, &clock_mess)) != OK) panic("clock_time err", k);
X
X /* Since we now have the time, update the super block. It is almost free. */
X! sp = get_super(root_dev);
X if (sp) {
X sp->s_time = clock_mess.NEW_TIME; /* update super block time */
X if (sp->s_rd_only == FALSE) sp->s_dirt = DIRTY;
SHAR_EOF
if test 792 -ne "`wc -c < 'fs/utility.c.diff'`"
then
echo shar: error transmitting "'fs/utility.c.diff'" '(should have been 792 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'mm/main.diff'" '(6968 characters)'
if test -f 'mm/main.diff'
then
echo shar: will not over-write existing file "'mm/main.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'mm/main.diff'
X3,8c3,9
X< * initializing itself and its tasks, and then it runs MM. MM at this point
X< * does not know where FS is in memory and how big it is. By convention, FS
X< * must start at the click following MM, so MM can deduce where it starts at
X< * least. Later, when FS runs for the first time, FS makes a pseudo-call,
X< * BRK2, to tell MM how big it is. This allows MM to figure out where INIT
X< * is.
X---
X> * initializing itself and its tasks, and then it runs MM.
X> * MM at this point calls the SYSTEM task to retrieve the memory map
X> * of HARDWARE, MM, FS and INIT. It uses the map of these three processes
X> * to determine how much memory has been taken up by the system, and
X> * removes that memory from the allocation pool. The brk2 call has been
X> * changed from telling MM how much memory is allocated to a call usable by
X> * any process to ask for any ammount memory outside of it's segments.
X42c43
X<
X---
X> printf("MM: init done\n");
X109a111,113
X> phys_clicks tot_clicks;
X> int i;
X> int mem1, mem2, mem3;
X113,114c117
X< /* Find out how much memory the machine has and set up core map. MM and FS
X< * are part of the map. Tell the kernel.
X---
X> /* Find out how much memory the machine has and set up core map.
X121,123c124,158
X< mproc[FS_PROC_NR].mp_flags |= IN_USE;
X< mproc[INIT_PROC_NR].mp_flags |= IN_USE;
X< procs_in_use = 3;
X---
X> sys_mapget(MM_PROC_NR, mproc[MM_PROC_NR].mp_seg);
X> mproc[FS_PROC_NR].mp_flags |= IN_USE;
X> sys_mapget(FS_PROC_NR, mproc[FS_PROC_NR].mp_seg);
X> mproc[INIT_PROC_NR].mp_flags |= IN_USE;
X> sys_mapget(INIT_PROC_NR, mproc[INIT_PROC_NR].mp_seg);
X> if (mproc[INIT_PROC_NR].mp_seg[T].mem_len != 0)
X> mproc[INIT_PROC_NR].mp_flags |= SEPARATE;
X> sys_mapget(HARDWARE, mproc[3].mp_seg); /* use proc slot 3 for tmp storage */
X> procs_in_use = 3;
X>
X> printf("%c[H%c[J",033, 033); /* go to top of screen and clear screen */
X> /* Pid T(vir phys len) D(vir phys len) S(vir phys len) */
X> printf("Process Sizes:\n");
X> for(i=0;i<=3;i++) { /* Iterate thru processes */
X> int j;
X> printf("%d: ",i);
X> for(j=0;j<3;j++) /* Iterate thru T, D, S */
X> printf("%x %x %x ",mproc[i].mp_seg[j].mem_vir,
X> mproc[i].mp_seg[j].mem_phys,mproc[i].mp_seg[j].mem_len);
X> printf("\n");
X> }
X>
X> /* stats (stolen from brk2) */
X> tot_clicks = mproc[INIT_PROC_NR].mp_seg[S].mem_phys; /* last proc stack */
X> alloc_mem(tot_clicks+1);
X>
X> mem1 = tot_mem/CLICK_TO_K; /* system memory */
X> mem2 = tot_clicks/CLICK_TO_K; /* Minix's hunk */
X> printf("Memory size = %dK ", mem1);
X> printf("MINIX = %dK ", mem2);
X> printf("Available = %dK\n\n", mem1 - mem2);
X> if (mem1 - mem2 < 32) {
X> printf("\nNot enough memory to run MINIX\n\n", NO_NUM);
X> sys_abort();
X> }
X135,215c170,209
X< * again by anyone. It contains the origin and size of INIT, and the combined
X< * size of the 1536 bytes of unused mem, MINIX and RAM disk.
X< * m1_i1 = size of INIT text in clicks
X< * m1_i2 = size of INIT data in clicks
X< * m1_i3 = number of bytes for MINIX + RAM DISK
X< * m1_p1 = origin of INIT in clicks
X< */
X<
X< int mem1, mem2, mem3;
X< register struct mproc *rmp;
X< phys_clicks init_org, init_clicks, ram_base, ram_clicks, tot_clicks;
X< phys_clicks init_text_clicks, init_data_clicks;
X<
X< if (who != FS_PROC_NR) return(EPERM); /* only FS make do BRK2 */
X<
X< /* Remove the memory used by MINIX and RAM disk from the memory map. */
X< init_text_clicks = mm_in.m1_i1; /* size of INIT in clicks */
X< init_data_clicks = mm_in.m1_i2; /* size of INIT in clicks */
X< tot_clicks = mm_in.m1_i3; /* total size of MINIX + RAM disk */
X< init_org = (phys_clicks) mm_in.m1_p1; /* addr where INIT begins in memory */
X< init_clicks = init_text_clicks + init_data_clicks;
X< ram_base = init_org + init_clicks; /* start of RAM disk */
X< ram_clicks = tot_clicks - ram_base; /* size of RAM disk */
X< alloc_mem(tot_clicks); /* remove RAM disk from map */
X<
X< /* Print memory information. */
X< mem1 = tot_mem/CLICK_TO_K;
X< mem2 = (ram_base + 512/CLICK_SIZE)/CLICK_TO_K; /* MINIX, rounded */
X< mem3 = ram_clicks/CLICK_TO_K;
X< #ifndef ATARI_ST
X< printf("%c[H%c[J",033, 033); /* go to top of screen and clear screen */
X< #endif
X< printf("Memory size = %3dK ", mem1);
X< printf("MINIX = %3dK ", mem2);
X< printf("RAM disk = %3dK ", mem3);
X< printf("Available = %dK\n\n", mem1 - mem2 - mem3);
X< if (mem1 - mem2 - mem3 < 32) {
X< printf("\nNot enough memory to run MINIX\n\n", NO_NUM);
X< sys_abort();
X< }
X<
X< /* Initialize INIT's table entry. */
X< rmp = &mproc[INIT_PROC_NR];
X< rmp->mp_seg[T].mem_phys = init_org;
X< rmp->mp_seg[T].mem_len = init_text_clicks;
X< rmp->mp_seg[D].mem_phys = init_org + init_text_clicks;
X< rmp->mp_seg[D].mem_len = init_data_clicks;
X< rmp->mp_seg[S].mem_phys = init_org + init_clicks;
X< #ifdef ATARI_ST
X< rmp->mp_seg[T].mem_vir = rmp->mp_seg[T].mem_phys;
X< rmp->mp_seg[D].mem_vir = rmp->mp_seg[D].mem_phys;
X< rmp->mp_seg[S].mem_vir = rmp->mp_seg[S].mem_phys;
X< #else
X< rmp->mp_seg[S].mem_vir = init_clicks;
X< #endif
X< if (init_text_clicks != 0) rmp->mp_flags |= SEPARATE;
X<
X< return(OK);
X< }
X<
X< #ifdef ATARI_ST
X< /*===========================================================================*
X< * get_tot_mem *
X< *===========================================================================*/
X< /*
X< * Current memory size is set by TOS in variable 'phystop'.
X< * The TOS variable '_memtop' compensates for VIDEO memory.
X< */
X< PUBLIC phys_clicks get_tot_mem()
X< {
X< long i;
X<
X< if (mem_copy(
X< HARDWARE, D, (long)0x0436, /* TOS variable _memtop */
X< MM_PROC_NR, D, (long)&i,
X< (long)sizeof(i)
X< ) != OK)
X< panic("get_tot_mem", NO_NUM);
X< return((phys_clicks)(i >> CLICK_SHIFT));
X< }
X< #endif
X---
X> * again by anyone. It allocates a large (possibly > 64K) ammount of memmory
X> * for the RAM disk.
X> * m2_i1 = allocate or free
X> * m2_i2 = number of clicks
X> * m2_p1 = click address
X> */
X>
X> register struct mproc *rmp;
X>
X> if(mm_in.m2_i1 == 1) { /* allocate memory */
X> res_ptr = alloc_mem(mm_in.m2_i2);
X> printf("brk2 Allocated %d clicks at click address %d\n", mm_in.m2_i2, res_ptr);
X> } else {
X> free_mem(mm_in.m2_p1,mm_in.m2_i2);
X> }
X>
X> return(OK);
X> }
X>
X> #ifdef ATARI_ST
X> /*===========================================================================*
X> * get_tot_mem *
X> *===========================================================================*/
X> /*
X> * Current memory size is set by TOS in variable 'phystop'.
X> * The TOS variable '_memtop' compensates for VIDEO memory.
X> */
X> PUBLIC phys_clicks get_tot_mem()
X> {
X> long i;
X>
X> if (mem_copy(
X> HARDWARE, D, (long)0x0436, /* TOS variable _memtop */
X> MM_PROC_NR, D, (long)&i,
X> (long)sizeof(i)
X> ) != OK)
X> panic("get_tot_mem", NO_NUM);
X> return((phys_clicks)(i >> CLICK_SHIFT));
X> }
X> #endif
SHAR_EOF
if test 6968 -ne "`wc -c < 'mm/main.diff'`"
then
echo shar: error transmitting "'mm/main.diff'" '(should have been 6968 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'h/com.diff'" '(481 characters)'
if test -f 'h/com.diff'
then
echo shar: will not over-write existing file "'h/com.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'h/com.diff'
X*** /usr/src/minix/h/com.h Sat Aug 13 14:15:46 1988
X--- com.h Tue Jan 10 01:30:33 1989
X***************
X*** 83,88 ****
X--- 83,89 ----
X # define SYS_ABORT 9 /* fcn code for sys_abort() */
X # define SYS_FRESH 10 /* fcn code for sys_fresh() (Atari only) */
X # define SYS_KILL 11 /* fcn code for sys_kill(proc, sig) */
X+ # define SYS_GETMAP 12 /* fcn code for sys_getmap(procno, map_ptr) */
X
X #define HARDWARE -1 /* used as source on interrupt generated msgs */
X
SHAR_EOF
if test 481 -ne "`wc -c < 'h/com.diff'`"
then
echo shar: error transmitting "'h/com.diff'" '(should have been 481 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'lib/syslib.diff'" '(270 characters)'
if test -f 'lib/syslib.diff'
then
echo shar: will not over-write existing file "'lib/syslib.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'lib/syslib.diff'
X102a103,111
X> PUBLIC sys_mapget(proc, ptr)
X> int proc; /* proc whose map is to be changed */
X> char *ptr; /* pointer to new map */
X> {
X> /* Get the memory map of a proc from the Kernel */
X>
X> callm1(SYSTASK, SYS_GETMAP, proc, 0, 0, ptr, NIL_PTR, NIL_PTR);
X> }
X>
SHAR_EOF
if test 270 -ne "`wc -c < 'lib/syslib.diff'`"
then
echo shar: error transmitting "'lib/syslib.diff'" '(should have been 270 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'MANIFEST'" '(1004 characters)'
if test -f 'MANIFEST'
then
echo shar: will not over-write existing file "'MANIFEST'"
else
sed 's/^X//' << \SHAR_EOF > 'MANIFEST'
XFile Name Kit Number
X-------------- ----------
XMANIFEST 1
XMANIFEST 3
XREADME 1
Xb1/bootblok.asm3 1
Xb1/bootblok.uu 1
Xb2b/Makefile 1
Xb2b/bsu.s 1
Xb2b/hdparam.h 1
Xb2b/loader.c 2
Xb2b/main.c 1
Xb2b/partition.h 1
Xb2b/stack.c 1
Xb2b/standalone.c 1
Xb2b/type.h 1
Xfs/cache.c.diff 1
Xfs/glo.h.diff 2
Xfs/inode.c.diff 2
Xfs/main.c.diff 3
Xfs/makefile 2
Xfs/misc.c.diff 3
Xfs/super.c.diff 3
Xfs/utility.c.diff 3
Xh/com.diff 3
Xkernel/main.c.diff 1
Xkernel/makefile 2
Xkernel/memory.c.diff 2
Xkernel/mpx88.s 2
Xkernel/system.c.diff 2
Xlib/syslib.diff 3
Xmm/main.diff 3
SHAR_EOF
if test 1004 -ne "`wc -c < 'MANIFEST'`"
then
echo shar: error transmitting "'MANIFEST'" '(should have been 1004 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0