ast@cs.vu.nl (Andy Tanenbaum) (10/03/88)
Here are some recent fixes to apply to 1.3c. I have included the entire amoeba/kernel/makefile because, he said sheepishly, I just deleted the amoeba directory from my disk on the SUN, and I don't know what the original makefile was. My AT only has the new makefile. Sorry. Andy Tanenbaum (ast@cs.vu.nl) : This is a shar archive. Extract with sh, not csh. : This archive ends with exit, so do not worry about trailing junk. : --------------------------- cut here -------------------------- PATH=/bin:/usr/bin:/usr/ucb echo Extracting 'amoeba:ker:makef' sed 's/^X//' > 'amoeba:ker:makef' << '+ END-OF-FILE ''amoeba:ker:makef' X# The kernel dir contains xt_wini.c and at_wini.c. Before running make X# you must copy one of these to wini.c, depending on which controller you X# have. If you do not have a hard disk, you MUST choose one of them at random. X# On a PC, cpp and cem are in /lib and will be removed to make space while X# linking the kernel. On an AT, they are in /usr/lib are are not removed. X# This is because they have to be in /lib on a PC; the diskette is too small X# for them to be in /usr/lib. You can change this by editing commands/cc.c. X# X# Normally, MINIX scrolls the screen using the 6845's registers. However, X# on some EGA cards (those that are not IBM compatible), the 6845 is not X# properly emulated. On these machines, it is necessary to scroll in X# software by copying. This is much slower, but it works. The CFLAGS flags are: X# X# -Di8088 - required on an 8088/80286/80386 CPU; forbidden on a 68000 X# -F - run cpp and cem sequentially (used when memory is tight) X# -T. - put temporaries in working directory (when RAM disk is small) X# -DAM_KERNEL - includes code for Amoeba transactions X# -DNONET - single machine, no Ethernet available (requires -DAM_KERNEL) X# -DSTATISTICS - include code to collect Ethernet statistics X# X# Machines wishing to use Amoeba transactions should add -DAM_KERNEL to CFLAGS. X# If there is no ethernet connection then also add -DNONET. The ethernet X# driver included in this distribution is for the Western Digital Ethercard X# Plus. If you want ethernet statistics then add -DSTATISTICS to CFLAGS. X# X# When making a kernel on a machine with limited RAM disk, it may be X# necessary to use -T. or even remove /lib/cem and /lib/cpp during asld. X# XCFLAGS = -DAM_KERNEL -Di8088 -F -I../../kernel -I. XA = ../h XH = ../../h XK = ../../kernel XLIB = /usr/lib X XOBJ = ../../kernel/mpx88.s main.s tty.s floppy.s wini.s system.s proc.s \ X console.s rs232.s clock.s memory.s printer.s amoeba.s conf.s dp8390.s \ X util.s etherplus.s portcache.s trans.s table.s ../../kernel/klib88.s \ X dmp.s X X XCOBJS = main.s tty.s floppy.s wini.s system.s proc.s clock.s memory.s \ X amoeba.s conf.s dp8390.s util.s etherplus.s portcache.s trans.s \ X console.s rs232.s printer.s table.s dmp.s X X Xkernel: makefile $(OBJ) $(LIB)/libc.a X @echo "Start linking Kernel." X @asld -o kernel $(OBJ) $(LIB)/libc.a $(LIB)/end.s X @echo "Kernel done. " X Xclean: X rm -f $(COBJS) kernel X Xclock.s: $K/const.h $K/type.h $H/const.h $H/type.h Xclock.s: $H/callnr.h Xclock.s: $H/com.h Xclock.s: $H/error.h Xclock.s: $H/signal.h Xclock.s: $K/glo.h Xclock.s: $K/proc.h Xclock.s: $K/clock.c X $(CC) $(CFLAGS) -c $K/clock.c X Xconsole.s: $K/const.h $K/type.h $H/const.h $H/type.h Xconsole.s: $H/callnr.h Xconsole.s: $H/com.h Xconsole.s: $H/error.h Xconsole.s: $H/sgtty.h Xconsole.s: $H/signal.h Xconsole.s: $K/glo.h Xconsole.s: $K/proc.h Xconsole.s: $K/tty.h Xconsole.s: $K/tty.c X $(CC) $(CFLAGS) -c $K/console.c X Xdmp.s: $K/const.h $K/type.h $H/const.h $H/type.h Xdmp.s: $H/callnr.h Xdmp.s: $H/com.h Xdmp.s: $H/error.h Xdmp.s: $K/glo.h Xdmp.s: $K/proc.h Xdmp.s: $K/dmp.c X $(CC) $(CFLAGS) -c $K/dmp.c X Xfloppy.s: $K/const.h $K/type.h $H/const.h $H/type.h Xfloppy.s: $H/callnr.h Xfloppy.s: $H/com.h Xfloppy.s: $H/error.h Xfloppy.s: $K/glo.h Xfloppy.s: $K/proc.h Xfloppy.s: $K/floppy.c X $(CC) $(CFLAGS) -c $K/floppy.c X Xmain.s: $K/const.h $K/type.h $H/const.h $H/type.h Xmain.s: $H/callnr.h Xmain.s: $H/com.h Xmain.s: $H/error.h Xmain.s: $K/glo.h Xmain.s: $K/proc.h Xmain.s: $K/main.c X $(CC) $(CFLAGS) -c $K/main.c X Xmemory.s: $K/const.h $K/type.h $H/const.h $H/type.h Xmemory.s: $H/callnr.h Xmemory.s: $H/com.h Xmemory.s: $H/error.h Xmemory.s: $K/proc.h Xmemory.s: $K/memory.c X $(CC) $(CFLAGS) -c $K/memory.c X Xprinter.s: $K/const.h $K/type.h $H/const.h $H/type.h Xprinter.s: $H/callnr.h Xprinter.s: $H/com.h Xprinter.s: $H/error.h Xprinter.s: $K/proc.h Xprinter.s: $K/glo.h Xprinter.s: $K/printer.c X $(CC) $(CFLAGS) -c $K/printer.c X Xproc.s: $K/const.h $K/type.h $H/const.h $H/type.h Xproc.s: $H/callnr.h Xproc.s: $H/com.h Xproc.s: $H/error.h Xproc.s: $K/glo.h Xproc.s: $K/proc.h Xproc.s: $K/proc.c X $(CC) $(CFLAGS) -c $K/proc.c X Xrs232.s: $K/const.h $K/type.h $H/const.h $H/type.h Xrs232.s: $H/callnr.h Xrs232.s: $H/com.h Xrs232.s: $H/error.h Xrs232.s: $H/sgtty.h Xrs232.s: $H/signal.h Xrs232.s: $K/glo.h Xrs232.s: $K/proc.h Xrs232.s: $K/rs232.c X $(CC) $(CFLAGS) -c $K/rs232.c X Xsystem.s: $K/const.h $K/type.h $H/const.h $H/type.h Xsystem.s: $H/callnr.h Xsystem.s: $H/com.h Xsystem.s: $H/error.h Xsystem.s: $H/signal.h Xsystem.s: $K/glo.h Xsystem.s: $K/proc.h Xsystem.s: $K/system.c X $(CC) $(CFLAGS) -c $K/system.c X Xtable.s: $K/const.h $K/type.h $H/const.h $H/type.h $H/com.h Xtable.s: $K/glo.h Xtable.s: $K/proc.h Xtable.s: $K/table.c X $(CC) $(CFLAGS) -c $K/table.c X Xtty.s: $K/const.h $K/type.h $H/const.h $H/type.h Xtty.s: $H/callnr.h Xtty.s: $H/com.h Xtty.s: $H/error.h Xtty.s: $H/sgtty.h Xtty.s: $H/signal.h Xtty.s: $K/glo.h Xtty.s: $K/proc.h Xtty.s: $K/tty.c Xtty.s: $K/ttymaps.h X $(CC) $(CFLAGS) -c $K/tty.c X Xwini.s: $K/const.h $K/type.h $H/const.h $H/type.h Xwini.s: $H/callnr.h Xwini.s: $H/com.h Xwini.s: $H/error.h Xwini.s: $K/proc.h Xwini.s: $K/wini.c X $(CC) $(CFLAGS) -c $K/wini.c X Xamoeba.s: $A/amoeba.h Xamoeba.s: $A/host_os.h Xamoeba.s: $A/amparam.h Xamoeba.s: $H/signal.h Xamoeba.s: $H/type.h Xamoeba.s: ./assert.h Xamoeba.s: ./byteorder.h Xamoeba.s: $K/const.h Xamoeba.s: ./dp8390info.h Xamoeba.s: ./etherformat.h Xamoeba.s: $K/glo.h Xamoeba.s: ./global.h Xamoeba.s: ./internet.h Xamoeba.s: ./mpx.H Xamoeba.s: ./portcache.H Xamoeba.s: $K/proc.h Xamoeba.s: ./task.h Xamoeba.s: ./trans.H Xamoeba.s: $K/type.h Xamoeba.s: amoeba.c Xconf.s: $A/amoeba.h Xconf.s: $A/host_os.h Xconf.s: $H/type.h Xconf.s: ./conf.h Xconf.s: ./global.h Xconf.s: ./mpx.H Xconf.s: ./portcache.H Xconf.s: ./task.h Xconf.s: ./trans.H Xconf.s: conf.c Xdp8390.s: $H/com.h Xdp8390.s: $H/const.h Xdp8390.s: $H/error.h Xdp8390.s: $H/type.h Xdp8390.s: ./assert.h Xdp8390.s: $K/const.h Xdp8390.s: ./dp8390.h Xdp8390.s: ./dp8390info.h Xdp8390.s: ./dp8390stat.h Xdp8390.s: ./etherformat.h Xdp8390.s: ./internet.h Xdp8390.s: dp8390.c Xetherplus.s: $H/com.h Xetherplus.s: $H/const.h Xetherplus.s: $H/type.h Xetherplus.s: ./assert.h Xetherplus.s: $K/const.h Xetherplus.s: ./dp8390.h Xetherplus.s: ./dp8390info.h Xetherplus.s: ./eplinfo.h Xetherplus.s: ./etherformat.h Xetherplus.s: ./etherplus.h Xetherplus.s: ./internet.h Xetherplus.s: etherplus.c Xportcache.s: $A/amoeba.h Xportcache.s: $H/const.h Xportcache.s: $A/host_os.h Xportcache.s: $H/type.h Xportcache.s: ./assert.h Xportcache.s: ./conf.h Xportcache.s: $K/const.h Xportcache.s: ./global.h Xportcache.s: ./internet.h Xportcache.s: ./mpx.H Xportcache.s: ./portcache.H Xportcache.s: ./task.h Xportcache.s: ./trans.H Xportcache.s: portcache.c Xtrans.s: $A/amoeba.h Xtrans.s: $H/const.h Xtrans.s: $A/host_os.h Xtrans.s: $H/type.h Xtrans.s: ./amstat.h Xtrans.s: ./assert.h Xtrans.s: ./byteorder.h Xtrans.s: $K/const.h Xtrans.s: ./exception.h Xtrans.s: ./global.h Xtrans.s: ./internet.h Xtrans.s: ./mpx.H Xtrans.s: ./portcache.H Xtrans.s: ./task.h Xtrans.s: ./trans.H Xtrans.s: trans.c Xutil.s: $H/com.h Xutil.s: $H/const.h Xutil.s: $H/type.h Xutil.s: ./assert.h Xutil.s: $K/const.h Xutil.s: ./dp8390.h Xutil.s: ./dp8390info.h Xutil.s: ./eplinfo.h Xutil.s: $K/proc.h Xutil.s: $K/type.h Xutil.s: util.c X + END-OF-FILE amoeba:ker:makef chmod 'u=rw,g=r,o=r' 'amoeba:ker:makef' set `wc -c 'amoeba:ker:makef'` count=$1 case $count in 7147) :;; *) echo 'Bad character count in ''amoeba:ker:makef' >&2 echo 'Count should be 7147' >&2 esac echo Extracting 'at_makefile.cdif' sed 's/^X//' > 'at_makefile.cdif' << '+ END-OF-FILE ''at_makefile.cdif' X*** /local/ast/minix/tape3c/kernel/at_makefile Mon Sep 26 23:34:01 1988 X--- at_makefile Mon Oct 3 15:39:20 1988 X*************** X*** 90,95 **** X--- 90,105 ---- X proc.s: glo.h X proc.s: proc.h X X+ rs232.s: const.h type.h $h/const.h $h/type.h X+ rs232.s: $h/callnr.h X+ rs232.s: $h/com.h X+ rs232.s: $h/error.h X+ rs232.s: $h/sgtty.h X+ rs232.s: $h/signal.h X+ rs232.s: glo.h X+ rs232.s: proc.h X+ rs232.s: tty.h X+ X system.s: const.h type.h $h/const.h $h/type.h X system.s: $h/callnr.h X system.s: $h/com.h + END-OF-FILE at_makefile.cdif chmod 'u=rw,g=r,o=r' 'at_makefile.cdif' set `wc -c 'at_makefile.cdif'` count=$1 case $count in 503) :;; *) echo 'Bad character count in ''at_makefile.cdif' >&2 echo 'Count should be 503' >&2 esac echo Extracting 'changemem' sed 's/^X//' > 'changemem' << '+ END-OF-FILE ''changemem' X: Increase default stack size from 2K. Xb=/usr/bin Xl=/usr/lib Xt=../test Xchmem =50000 $b/ar Xchmem =16000 $b/ast Xchmem =60000 $b/asld Xchmem =3000 $b/cc Xchmem =35000 $l/cem Xchmem =30000 $l/cg Xchmem =16000 $b/cp Xchmem =60000 $b/cdiff Xchmem =64000 $b/compress Xchmem =64000 $b/cpdir Xchmem =30000 $l/cpp Xchmem =40000 $b/dd Xchmem =32000 $b/du Xchmem =60000 $b/diff Xchmem =8000 $b/df Xchmem =32000 $b/dosread Xchmem =60000 $b/ed Xchmem =8000 $b/fgrep Xchmem =50000 $b/file Xchmem =50000 $b/find Xchmem =60000 $b/fix Xchmem =8000 $b/grep Xchmem =8000 $b/gres Xchmem =8000 $b/head Xchmem =64000 $b/libpack Xchmem =64000 $b/libupack Xchmem =20000 $b/make Xchmem =64000 $b/mined Xchmem =8000 $b/mkdir Xchmem =40000 $b/mkfs Xchmem =8000 $b/mv Xchmem =16000 $b/nm Xchmem =40000 $l/opt Xchmem =8000 $b/paste Xchmem =32000 $b/pr Xchmem =8000 $b/prep Xchmem =50000 $b/readfs Xchmem =8000 $b/rm Xchmem =8000 $b/rmdir Xchmem =16000 $b/roff Xchmem =16000 $b/strings Xchmem =12000 $b/sh Xchmem =8000 $b/shar Xchmem =60000 $b/sort Xchmem =16000 $b/strip Xchmem =8000 $b/tail Xchmem =8000 $b/time Xchmem =60000 $b/treecmp Xchmem =8000 $t/t10a Xchmem =8000 $t/t11a Xchmem =8000 $t/t11b Xchmem =8000 $b/uniq Xchmem =8000 $b/uuencode Xchmem =8000 $b/uudecode Xchmem =8000 $b/wc Xfor i in 1 2 3 4 5 6 7 8 9 10 Xdo chmem =8000 ../test/test$i Xdone + END-OF-FILE changemem chmod 'u=rwx,g=rx,o=rx' 'changemem' set `wc -c 'changemem'` count=$1 case $count in 1298) :;; *) echo 'Bad character count in ''changemem' >&2 echo 'Count should be 1298' >&2 esac echo Extracting 'pc_makefile.cdif' sed 's/^X//' > 'pc_makefile.cdif' << '+ END-OF-FILE ''pc_makefile.cdif' X*** /local/ast/minix/tape3c/kernel/pc_makefile Tue Sep 27 08:51:15 1988 X--- pc_makefile Mon Oct 3 15:39:21 1988 X*************** X*** 92,97 **** X--- 92,107 ---- X proc.s: glo.h X proc.s: proc.h X X+ rs232.s: const.h type.h $h/const.h $h/type.h X+ rs232.s: $h/callnr.h X+ rs232.s: $h/com.h X+ rs232.s: $h/error.h X+ rs232.s: $h/sgtty.h X+ rs232.s: $h/signal.h X+ rs232.s: glo.h X+ rs232.s: proc.h X+ rs232.s: tty.h X+ X system.s: const.h type.h $h/const.h $h/type.h X system.s: $h/callnr.h X system.s: $h/com.h + END-OF-FILE pc_makefile.cdif chmod 'u=rw,g=r,o=r' 'pc_makefile.cdif' set `wc -c 'pc_makefile.cdif'` count=$1 case $count in 503) :;; *) echo 'Bad character count in ''pc_makefile.cdif' >&2 echo 'Count should be 503' >&2 esac echo Extracting 'portio.s' sed 's/^X//' > 'portio.s' << '+ END-OF-FILE ''portio.s' X.define _port_out, _port_in, _peek X X| These routines are used by the kernel to write and read I/O ports. X| They can also be called by user programs X X| port_out(port, value) writes 'value' on the I/O port 'port'. X X_port_out: X push bx | save bx X mov bx,sp | index off bx X push ax | save ax X push dx | save dx X mov dx,4(bx) | dx = port X mov ax,6(bx) | ax = value X out | output 1 byte X pop dx | restore dx X pop ax | restore ax X pop bx | restore bx X ret | return to caller X X X X| port_in(port, &value) reads from port 'port' and puts the result in 'value'. X_port_in: X push bx | save bx X mov bx,sp | index off bx X push ax | save ax X push dx | save dx X mov dx,4(bx) | dx = port X in | input 1 byte X xorb ah,ah | clear ah X mov bx,6(bx) | fetch address where byte is to go X mov (bx),ax | return byte to caller in param X pop dx | restore dx X pop ax | restore ax X pop bx | restore bx X ret | return to caller X X| value = peek(segment, offset) X_peek: X push bp | save bp X mov bp,sp | we need to access parameters X push es | save es X mov es,4(bp) | load es with segment value X mov bx,6(bp) | load bx with offset from segment X seg es | go get the byte X movb al,(bx) | al = byte X xorb ah,ah | ax = byte X pop es | restore es X pop bp | restore bp X ret | return to caller + END-OF-FILE portio.s chmod 'u=rw,g=r,o=r' 'portio.s' set `wc -c 'portio.s'` count=$1 case $count in 1305) :;; *) echo 'Bad character count in ''portio.s' >&2 echo 'Count should be 1305' >&2 esac echo Extracting 'proc.c.cdif' sed 's/^X//' > 'proc.c.cdif' << '+ END-OF-FILE ''proc.c.cdif' X*** /local/ast/minix/tape3c/kernel/proc.c Tue Sep 27 08:51:16 1988 X--- proc.c Mon Oct 3 15:39:22 1988 X*************** X*** 243,249 **** X /* If MM has just blocked and there are kernel signals pending, now is the X * time to tell MM about them, since it will be able to accept the message. X */ X! if (sig_procs > 0 && caller == MM_PROC_NR && src == ANY) inform(); X return(OK); X } X X--- 243,252 ---- X /* If MM has just blocked and there are kernel signals pending, now is the X * time to tell MM about them, since it will be able to accept the message. X */ X! if (sig_procs > 0 && caller == MM_PROC_NR && src == ANY) { X! inform(); X! pick_proc(); X! } X return(OK); X } X + END-OF-FILE proc.c.cdif chmod 'u=rw,g=r,o=r' 'proc.c.cdif' set `wc -c 'proc.c.cdif'` count=$1 case $count in 702) :;; *) echo 'Bad character count in ''proc.c.cdif' >&2 echo 'Count should be 702' >&2 esac echo Extracting 'system.c.cdif' sed 's/^X//' > 'system.c.cdif' << '+ END-OF-FILE ''system.c.cdif' X*** /local/ast/minix/tape3c/kernel/system.c Tue Sep 27 08:51:19 1988 X--- system.c Mon Oct 3 15:39:23 1988 X*************** X*** 136,141 **** X--- 136,143 ---- X while (bytes--) *dptr++ = *sptr++; /* copy parent struct to child */ X X rpc->p_flags |= NO_MAP; /* inhibit the process from running */ X+ rpc->p_flags &= ~PENDING; /* only one in group should have PENDING */ X+ rpc->p_pending = 0; X rpc->p_pid = pid; /* install child's pid */ X rpc->p_reg[RET_REG] = 0; /* child sees pid = 0 to know it is child */ X X*************** X*** 271,276 **** X--- 273,279 ---- X } X } X } X+ if (rc->p_flags & PENDING) --sig_procs; X rc->p_flags = P_SLOT_FREE; X return(OK); X } + END-OF-FILE system.c.cdif chmod 'u=rw,g=r,o=r' 'system.c.cdif' set `wc -c 'system.c.cdif'` count=$1 case $count in 686) :;; *) echo 'Bad character count in ''system.c.cdif' >&2 echo 'Count should be 686' >&2 esac exit 0