worsley@ditmela.oz (Andrew Worsley) (05/18/89)
#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 10)." # Contents: MANIFEST README INSTALL crc-after crc-before crc-dist # crc-misc commandsdif fsdif hdif kerneldif libdif mmdif toolsdif # commandsdif/CHANGES fsdif/CHANGES hdif/CHANGES libdif/CHANGES # mmdif/CHANGES toolsdif/CHANGES commandsdif/readclock.c.cd # fsdif/at_makefile.cd fsdif/device.c.cdif # Wrapped by sys@besplex on Sun Mar 26 06:33:40 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(2471 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X File Name Archive # Description X----------------------------------------------------------- X MANIFEST 1 This shipping list X README 1 X INSTALL 1 X crc-after 1 X crc-before 1 X crc-dist 1 X crc-misc 1 X commandsdif 1 X fsdif 1 X hdif 1 X kerneldif 1 X libdif 1 X mmdif 1 X toolsdif 1 X commandsdif/CHANGES 1 X fsdif/CHANGES 1 X hdif/CHANGES 1 X kerneldif/CHANGES 2 X libdif/CHANGES 1 X mmdif/CHANGES 1 X toolsdif/CHANGES 1 X commandsdif/readclock.c.cd 1 X fsdif/at_makefile.cd 1 X fsdif/cache.c.cdif 2 X fsdif/device.c.cdif 1 X fsdif/inode.c.cdif 2 X fsdif/main.c.cdif 2 X fsdif/misc.c.cdif 2 X fsdif/pipe.c.cdif 2 X fsdif/super.c.cdif 2 X fsdif/table.c.cdif 2 X fsdif/utility.c.cdif 2 X hdif/boot.h.cdif 2 X hdif/com.h.cdif 2 X hdif/const.h.cdif 2 X kerneldif/Bconsole.c.cdi 2 X kerneldif/Brs232.c.cdif 2 X kerneldif/Btty.c.cdif 3 X kerneldif/at_wini.c.cdif 3 X kerneldif/axmakefile.cdi 3 X kerneldif/clock.c.cdif 3 X kerneldif/console.c.cdif 3 X kerneldif/const.h.cdif 3 X kerneldif/dmp.c.cdif 4 X kerneldif/exception.c.cd 4 X kerneldif/floppy.c.cdif 4 X kerneldif/glo.h.cdif 4 X kerneldif/i8259.c.cdif 4 X kerneldif/klib286.x.cdif 4 X kerneldif/klib88.x.cdif 5 X kerneldif/main.c.cdif 4 X kerneldif/memory.c.cdif 6 X kerneldif/misc.c.cdif 6 X kerneldif/mpx286.x.cdif 6 X kerneldif/mpx88.x.cdif 6 X kerneldif/printer.c.cdif 6 X kerneldif/proc.c.cdif 7 X kerneldif/proc.h.cdif 7 X kerneldif/protect.c.cdif 8 X kerneldif/protect.h.cdif 7 X kerneldif/rs2.x.cdif 8 X kerneldif/rs232.c.cdif 8 X kerneldif/sconst.h.cdif 8 X kerneldif/sglo.h.cdif 8 X kerneldif/system.c.cdif 9 X kerneldif/table.c.cdif 6 X kerneldif/tty.c.cdif 3 X kerneldif/type.h.cdif 7 X kerneldif/xt_wini.c.cdif 8 X libdif/head.s.cdif 8 X mmdif/alloc.c.cdif 9 X mmdif/main.c.cdif 9 X mmdif/signal.c.cdif 4 X toolsdif/build.c.cdif 10 X toolsdif/fsck.c.cdif 9 X toolsdif/fsck1.s.cdif 8 END_OF_FILE if test 2471 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(9669 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' XHere are patches to Minix 1.3d to provide: X X o use of 286 protected mode on 286's and 386's. X o overhaul of interrupt handling to reduce latency by a huge factor. X o changes to FS and boot programs to allow the root device and RAM X disk size to be specified at boot time. X o several minor bug fixes. X XThe 286 system binaries remain capable of running on 8088 systems, and can Xbe limited at boot time to 8088 mode on 286's to provide full backward Xcompatibility. Most testing was done on a 386-AT, some on a real PC, and Xa little on a clone-AT and a Toshiba 1100 (8088 portable). I tried to avoid Xbreaking nonstandard configurations but didn't touch Amoeba (it can no Xlonger work) and may have messed up the PS/2 Model 30. X XProtected mode. X--------------- X XThe protection is of of system processes from wild user processes. XProtected mode also provides a 16MB address space, limited mainly by Xavailable RAM and by the small model to 64K code + 64K data per process. XI am usually greeted by a startup message like: X XMemory size = 1024K MINIX = 127K RAM disk = 0K Available = 897K X XProtected mode has some drawbacks. Interrupt handling is 5 to 10% slower Xbecause loading segment registers takes a long time. It is imprudent to Xallow users easy access to the i/o ports and another project to allow access Xto memory outside the data segment. Badly-behaved programs try to do these Xthings and will cause an exception in protected mode. Other pitfalls are Xwriting to the code segment, and assuming code segment == data segment Xbecause the program is common I&D. It is possible for a program to almost Xlock up the system if it ignores SIGSEGV and then causes one (many Xexceptions resume at the faulty PC since the signal handlers are too Xsimple). CTRL-F9 is needed to break out of that. Fortunately most Minix Xprograms are well-behaved. X XThis kernel provides /dev/port to go with /dev/mem so ports can be accessed X(slowly) by suitably privileged users. Only readclock uses this now. Things Xlike EGA graphics will require immediate access to both ports and screen Xmemory. It is easy to provide the memory access by expanding the per-process Xlocal descriptor table, but not clear how to interface the capability. Ports Xare more difficult since the 286 allows access to all or none, depending on Xthe IOPL bits in the PSW. The 386 allows a more flexible permissions bitmap. XStill, port-mapped i/o is awful for software. X XMy 386 protected mode code is not included here since it offers few Xcapabilities beyond what the 286 can do, so I'm reserving it for a proper X32 bit 386 version. The changes for it are simple but bulky. All the Xassembler code uses 386 instructions where appropriate. This is not Xessential (below 16M) but is cleaner - until you ask asld to assemble it. XThe interrupt handlers have to save and restore 32 bit registers - this Xinvolves little more than putting 'e' in front of register names and 'd' Xafter some instructions. The process table structure has to be larger to Xhold the larger registers. "protect.c" needs a few more lines to initialize Xthe top 2 bytes in segment descriptors and to build 32 bit TSS's. XEverywhere that a saved register is accessed, the code needs to test the Xprocessor variable to decide whether to use an r16 (8088-286) register or Xr32 (386) register. It is practical to store 8088 r16's in the r32's (for Xan 8088/386 kernel like I started with) but not 80286 r16's since that Xrequires too much rebuilding of the stack frame. And all this is worthless Xwithout a 386 compiler and a hacked library to interface to the 16 bit Xkernel. X XInterrupt handling. X------------------- X XThe 1.3 kernel leaves interrupts off while it does context-switching and Xhardware interrupt handling. This takes a few hundred instructions, well Xover 1ms on a 5MHz 8088, and sometimes an iteration causes an even longer Xdelay. My TTY driver with this kernel will go no faster than 2400 baud, Xwhich suggests that the normal worst case latency is about 4ms. The 1.3 XTTY driver has internal inefficiencies which makes it another 4 to 8 Xtimes slower. X XThis kernel improves the interrupt latency by a factor of about 12 in two Xsteps. The first step is to run the main part of the context-switcher X(sys_call()) with interrupts enabled, and rewrite the interrupt handler Xto task interface (interrupt()) to be more efficient. This, together with Xother small changes to proc.c, mainly using pointers instead of arrays and Xarrays instead of pointer arithmetic, gives about a factor of 4 improvement. X XThe second step is to enable interrupts while most interrupt handlers are Xrunning. Ideally, only save() and restart() and some *small* critical Xregions should have interrupts disabled. In practice, fast asynchronous Xinput devices like RS232 need interrupts disabled throughout their Xinterrupt handler. X XSeveral methods are used to prevent reentry to critical regions without Xlocking everything. The variable 'k_reenter' is the most important. It Xcounts reentries into the kernel (context-switching and interrupt handling). XInterrupt() may not reenter unless k_reenter is 0 (when there is exactly Xone interrupt handler in the kernel, and no sys_call()). Calls from nested Xhandlers are delayed until the first handler finishes, using a little queue. XThis is cheap because now only task numbers have to be queued. Calls to Xcontext-switching functions are also critical. The main one, sys_call(), Xneeds no special treatment since interrupt handlers may not call it. XComplications are caused by calls from tasks, e.g. sched(), when k_reenter Xis -1. These are protected by the flag 'switching', since k_reenter is Xused to tell when to switch stacks as well as for locking, so cannot be Xadjusted. Curiously, interrupt() may be called when k_reenter is -1 (e.g. Xfor TTY_O_DONE), but this causes no trouble. X XHardware locking is still used for individual interrupt lines to ensure Xthat no interrupt handler is ever reentered. This bounds the amount of Xkernel stack required, and eliminates most competition for shared variables. XSee mpx88.x and klib88.x. I think the low level is now correct for level- Xsensitive interrupts on PS/2's, but haven't tested it. Access to shared Xvariables is now very tricky. The clock handler locks everything for short Xregions. The printer driver uses a test-and-set on its hardware mask bit. XMy TTY driver uses a test-and-set on a normal variable - see tty_wakeup(). XThis is beginning to look like another operating system beneath the message Xpassing. X XSelect root device etc. at boot time. X------------------------------------- X XThe boot program (standalone fsck) has several more options on the menu, to Xselect the system configuration: X X o root device X o RAM image device X o RAM disk size X o processor limit X XNot all combinations are valid. The keyboard type was already specified by Xthe scan code. The processor limit is the way of handicapping 286 and 386 Xprocessors so they run in 8088 mode. Fsck fills in a structure with the Xoptions and passes it to kernel and FS. X XThis lets me test lots of variants of the system without recompiling. In Xparticular I can keep my setup with the hard disk as root when testing Xthe version to be posted! X XThe changes in FS mainly involve replacing BOOT_DEV and ROOT_DEV by Xvariables and eliminating unwarranted messages about the RAM disk being Xroot. The "h/boot.h" file is kept separate and so needs including all over Xbecause it is needed by the bootstrap program (fsck.c here). Supporting Xcode is in fsck.c, fsck1.s, mpx88.x, com.h and system.c. Adding a system Xcall to support copying the parameters from kernel to FS was a lot of Xwork but FS can't sensibly call sys_copy() since it doesn't know where Xthey are. X X XReorganized assembler files. X---------------------------- X XIt was too hard to maintain constants across several files without being Xable to include header files, and asld lacked the ability to handle 286 code Xeven via macros. So all the '.s' files are renamed '.x' files and passed Xthrough the C preprocessor (automatically with make). Most of the constants Xdefined in the C header files become available in the assembler code. One Xproblem is that asld wants "[]" for parentheses, so many derived constants Xhave to be defined as if they were fundamental. X XTTY. X---- X XThe TTY driver I posted in January should have been a prerequisite to these Xchanges, but I forgot to say so at the time. I didn't want to post it all Xagain since this is already too long, so made minimal changes to get the 1.3 Xdriver working. Diffs for both versions are included. I don't trust the X1.3 version but used it to upload this posting at 2400 baud with no trouble. X XMy version now works at 19.2K baud on a 4.77MHz 8088 (1700 chars/sec Xthroughput) and on 2 lines at 115.2K baud on a 20MHz 386 (2 x 8000 chars/sec Xthroughput). The 1.3 version works at 2400 baud on the PC and 2 x 9600 baud Xon the 386. Running RS232 at a high speed is a good test of interrupt Xhandling. I ran the dual lines test by logging into tty2 using term on tty1. XThis requires 2 serial ports but no fast external devices. X XDebugger. X--------- X XThe debugger I posted last December needs upgrading to work with this kernel. XEven in real mode, it needs small changes. I have a version for protected Xmode, but it only runs on 386's since it needs to switch to real mode to run. XI consider a debugger essential for serious work on the system, but mine no Xlonger compiles with the usual tools: X XAsld problems. X-------------- X XAsld may be close to running out of space when linking the kernel. It failed Xungracefully when trying to link the kernel + debugger. Yet a core dump Xshowed it had 10K of zeros between heap and stack. END_OF_FILE if test 9669 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'INSTALL' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'INSTALL'\" else echo shar: Extracting \"'INSTALL'\" \(4428 characters\) sed "s/^X//" >'INSTALL' <<'END_OF_FILE' XInstallation guide for protected mode Minix. X-------------------------------------------- X X1. Unpack the shars. It is best to work in a fresh directory. The shell will Xcreate files README, INSTALL, MANIFEST, crc-dist, crc-before, crc-after and Xcrc-misc, and subdirectories commandsdif, fsdif, hdif, kerneldif, libdif, Xmmdif and toolsdif. You will need about 400K more space. The diffs include Xseveral new files in cdiff format so patch can handle them. X X2. Examine crc-before for the list of prerequisite files. This is just the Xheart of what I think is 1.3d (from the "1.3 - final wrapup" posting last XOctober). If your files are different, the new kernel may not work. If you Xhave the right files but usually use a patched version, I suggest going back Xto 1.3d to start with (except the 1.4a floppy.c and my patches for TTY are Xsupported here). In the kernel directory, there are so many changes that Xsomething is sure to go wrong if you start from the wrong base. The other Xpatches here won't cause so much trouble, but beware of clashes with ones XI've already posted and the one to FS to put the root file system on the Xhard disk. X X3. Make full working copies of the fs, h, kernel, mm and tools directories X(or back up everything). Also make directories and files commands/readclock.c Xand lib/IBM_PC/head.s. This requires about 800K more space. X X4. If you have the 1.4a floppy.c, use it. The floppy diff is in fact relative Xto this version, but the 1.3d version works too (but causes warnings from Xpatch). If you want to use my TTY (posted in January), move tty.c.cdif, Xrs232.c.cdif and console.c.cdif in kerneldif somewhere out of the diff list, Xand rename Btty.c.cdif, Brs232.c.cdif and Bconsole.c.cdif to them, and get Xthe files tty.c, rs232.c, console.c and tty.h (only) from my posting. Use Xcrc-misc to check the files are correct. X X5. Apply the patches. The diffs were made from the minix directory (the one Xabove kernel, mm etc.) so patch can do everything in one step with a Xcommand like: X X (cd dir-used-to-unpack; cat *dif/[a-z]*) | \ X (cd dir-used-for-source-dirs; patch -p -N 2>&1 | tee patch.out) X XThis requires about 1100K more space (patch will make 550K files in /tmp). XYou may have to do the patches a few at a time if space is tight, or one at Xa time in case of trouble. X X6. Check the new files against crc-after. X X7. Move the original copies of the patched files to backup directories or Xdelete them. Do the same with the following kernel files which have become Xobsolete: X X at_makefile, klib88.s, mpx88.s, xt_makefile. X XThe separate copy of wini.c is also obsolete. In the old lib/IBM_PC (not Xtouched by the patches), getutil.s and portio.s are obsolete. These can be Xleft for now, but it is best to take them out of libc.a since they will give Xcore dumps in protected mode. X X8. Link or copy all the at_makefile's or xt_makefile's to makefile's. In Xthe fs directory, there is a new at_makefile but no new xt_makefile - patch Xxt_makefile if you need to use it. In the kernel directory, there is now only Xaxmakefile, for both. It will compile for XT's but may need editing to run Xon XT's. If you are using my TTY, edit the kernel makefile to select it. XThere are many options in axmakefile which are of no use to anyone but me, Xbut you may want to reverse the LINEWRAP and STUPID_WINI selections to Xsomething saner, and maybe try SPARE_VIDEO. The whole kernel should really Xdepend on axmakefile to force recompiling it all when a define is changed. X X9. Re-make tools/build and tools/fsck and then an image with your old Xkernel+mm+fs+init and check that the image still works. The new options on Xthe fsck menu should do nothing. X X10. Link or copy the new lib/IBM_PC/head.s to /usr/lib/head.s. X X11. Re-make kernel, mm, fs, init as usual. The old ones must not be mixed, Xsince kernel, mm and fs use a new CLICK_SIZE and a couple more system calls, Xand kernel wants init to have a larger initial stack. X X12. Make a new image. X X13. Make the new readclock and then the port device for readclock to use: X X su root X mknod /dev/port c 1 4 X Xand fix the memory device for it: X X rm /dev/mem X mknod /dev/mem c 1 1 X XThese must go on the (old) root DISK. X X14. Boot the new image. There are several new installation possibilities Xprovided from the new options on the boot menu. I suggest changing the Xdefault boot parameters in fsck.c if they don't suit you. I use /dev/hd2 Xfor the root device and 0 for the RAM disk size. END_OF_FILE if test 4428 -ne `wc -c <'INSTALL'`; then echo shar: \"'INSTALL'\" unpacked with wrong size! fi # end of 'INSTALL' fi if test -f 'crc-after' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'crc-after'\" else echo shar: Extracting \"'crc-after'\" \(2915 characters\) sed "s/^X//" >'crc-after' <<'END_OF_FILE' X25125 6397 commands/readclock.c X62514 4313 fs/at_makefile X61318 2988 fs/buf.h X63516 10843 fs/cache.c X49601 2925 fs/const.h X32651 273 fs/dev.h X28661 8604 fs/device.c X43804 474 fs/file.h X08379 3225 fs/filedes.c X03291 1502 fs/fproc.h X32100 1013 fs/glo.h X45668 7813 fs/inode.c X05436 1943 fs/inode.h X37259 5662 fs/link.c X20987 16844 fs/main.c X49598 7693 fs/misc.c X59037 6257 fs/mount.c X08819 9226 fs/open.c X59312 1557 fs/param.h X44200 10716 fs/path.c X46842 4266 fs/pc_makefile X19890 8581 fs/pipe.c X01700 5864 fs/protect.c X11848 1440 fs/putc.c X15755 12205 fs/read.c X14710 5397 fs/stadir.c X61743 8935 fs/super.c X10348 2081 fs/super.h X52747 4314 fs/table.c X03667 2620 fs/time.c X56368 710 fs/type.h X15923 5419 fs/utility.c X00551 7367 fs/write.c X46158 1142 h/boot.h X45442 1683 h/callnr.h X10716 7725 h/com.h X25227 4420 h/const.h X48562 2191 h/error.h X03794 1412 h/sgtty.h X06265 1115 h/signal.h X51139 861 h/stat.h X16557 4001 h/type.h X50110 3188 kernel/at_makefile X27982 16308 kernel/at_wini.c X42574 7662 kernel/axmakefile X22105 11246 kernel/clock.c X60674 34356 kernel/console.c X52636 4410 kernel/const.h X60752 3349 kernel/dmp.c X08141 2109 kernel/exception.c X26501 27169 kernel/floppy.c X00100 1763 kernel/glo.h X41282 2138 kernel/i8259.c X12547 7691 kernel/klib286.x X16069 36914 kernel/klib88.x X33778 10292 kernel/main.c X50746 5654 kernel/memory.c X31337 2467 kernel/misc.c X45692 6750 kernel/mpx286.x X01231 15602 kernel/mpx88.x X65108 3375 kernel/pc_makefile X25702 10264 kernel/printer.c X45651 17211 kernel/proc.c X06198 3783 kernel/proc.h X26519 9012 kernel/protect.c X52909 4675 kernel/protect.h X12176 18813 kernel/ps_wini.c X05156 5764 kernel/rs2.x X39870 19682 kernel/rs232.c X23697 4804 kernel/sconst.h X13106 4177 kernel/sglo.h X48093 24928 kernel/system.c X28634 3838 kernel/table.c X38180 28073 kernel/tty.c X34455 7485 kernel/tty.h X44806 4708 kernel/ttymaps.h X23087 1815 kernel/type.h X32712 26756 kernel/xt_wini.c X24479 880 lib/IBM_PC/head.s X32432 8523 mm/alloc.c X49710 1833 mm/at_makefile X05784 7234 mm/break.c X43289 744 mm/const.h X37617 17077 mm/exec.c X17024 9871 mm/forkexit.c X34366 1572 mm/getset.c X06761 799 mm/glo.h X36536 8885 mm/main.c X46388 1661 mm/mproc.h X21684 677 mm/param.h X39295 1890 mm/pc_makefile X54292 1487 mm/putc.c X45715 13879 mm/signal.c X09215 3143 mm/table.c X17333 238 mm/type.h X20567 4181 mm/utility.c X59520 2249 tools/at_makefile X13594 8083 tools/bootblok.s X61341 24303 tools/build.c X53860 1298 tools/changemem X36909 48595 tools/fsck.c X18310 3421 tools/fsck1.s X39871 44 tools/group X21308 6082 tools/init.c X43560 327 tools/message X52749 25884 tools/mkfs.c X52059 97 tools/passwd X59520 2249 tools/pc_makefile X00735 105 tools/profile X09800 197 tools/rc X12541 4 tools/ttys X10241 22 tools/ttytype END_OF_FILE if test 2915 -ne `wc -c <'crc-after'`; then echo shar: \"'crc-after'\" unpacked with wrong size! fi # end of 'crc-after' fi if test -f 'crc-before' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'crc-before'\" else echo shar: Extracting \"'crc-before'\" \(2574 characters\) sed "s/^X//" >'crc-before' <<'END_OF_FILE' X52678 4113 commands/readclock.c X19878 4197 fs/at_makefile X61318 2988 fs/buf.h X31034 10863 fs/cache.c X49601 2925 fs/const.h X32651 273 fs/dev.h X54203 8530 fs/device.c X43804 474 fs/file.h X08379 3225 fs/filedes.c X03291 1502 fs/fproc.h X32100 1013 fs/glo.h X62665 7839 fs/inode.c X05436 1943 fs/inode.h X37259 5662 fs/link.c X15515 15303 fs/main.c X43484 7670 fs/misc.c X59037 6257 fs/mount.c X08819 9226 fs/open.c X59312 1557 fs/param.h X44200 10716 fs/path.c X46842 4266 fs/pc_makefile X08656 8462 fs/pipe.c X01700 5864 fs/protect.c X11848 1440 fs/putc.c X15755 12205 fs/read.c X14710 5397 fs/stadir.c X11343 8912 fs/super.c X10348 2081 fs/super.h X46563 4312 fs/table.c X03667 2620 fs/time.c X56368 710 fs/type.h X42080 5396 fs/utility.c X00551 7367 fs/write.c X45442 1683 h/callnr.h X55177 7424 h/com.h X21531 4403 h/const.h X48562 2191 h/error.h X03794 1412 h/sgtty.h X06265 1115 h/signal.h X51139 861 h/stat.h X16557 4001 h/type.h X50110 3188 kernel/at_makefile X64098 16075 kernel/at_wini.c X11053 9335 kernel/clock.c X01201 33549 kernel/console.c X46559 2880 kernel/const.h X09961 3543 kernel/dmp.c X37030 26551 kernel/floppy.c X39457 881 kernel/glo.h X29135 26496 kernel/klib88.s X01335 11156 kernel/main.c X36060 5296 kernel/memory.c X09331 13834 kernel/mpx88.s X65108 3375 kernel/pc_makefile X56408 9952 kernel/printer.c X10507 13753 kernel/proc.c X21644 2324 kernel/proc.h X12176 18813 kernel/ps_wini.c X59321 19053 kernel/rs232.c X61988 19960 kernel/system.c X38305 3634 kernel/table.c X03407 28073 kernel/tty.c X34455 7485 kernel/tty.h X44806 4708 kernel/ttymaps.h X27554 742 kernel/type.h X14198 26433 kernel/xt_wini.c X63856 478 lib/IBM_PC/head.s X59150 7857 mm/alloc.c X49710 1833 mm/at_makefile X05784 7234 mm/break.c X43289 744 mm/const.h X37617 17077 mm/exec.c X17024 9871 mm/forkexit.c X34366 1572 mm/getset.c X06761 799 mm/glo.h X41965 7272 mm/main.c X46388 1661 mm/mproc.h X21684 677 mm/param.h X39295 1890 mm/pc_makefile X54292 1487 mm/putc.c X55828 13811 mm/signal.c X09215 3143 mm/table.c X17333 238 mm/type.h X20567 4181 mm/utility.c X59520 2249 tools/at_makefile X13594 8083 tools/bootblok.s X02360 19714 tools/build.c X53860 1298 tools/changemem X51921 45901 tools/fsck.c X34431 3158 tools/fsck1.s X39871 44 tools/group X21308 6082 tools/init.c X43560 327 tools/message X52749 25884 tools/mkfs.c X52059 97 tools/passwd X59520 2249 tools/pc_makefile X00735 105 tools/profile X09800 197 tools/rc X12541 4 tools/ttys X10241 22 tools/ttytype END_OF_FILE if test 2574 -ne `wc -c <'crc-before'`; then echo shar: \"'crc-before'\" unpacked with wrong size! fi # end of 'crc-before' fi if test -f 'crc-dist' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'crc-dist'\" else echo shar: Extracting \"'crc-dist'\" \(2232 characters\) sed "s/^X//" >'crc-dist' <<'END_OF_FILE' X39626 4428 INSTALL X61974 9669 README X19619 2915 crc-after X62357 2574 crc-before X20225 521 crc-misc X27208 585 commandsdif/CHANGES X27898 2780 commandsdif/readclock.c.cd X52949 1602 fsdif/CHANGES X58458 742 fsdif/at_makefile.cd X55444 629 fsdif/cache.c.cdif X33361 296 fsdif/device.c.cdif X64779 651 fsdif/inode.c.cdif X09177 7501 fsdif/main.c.cdif X28991 200 fsdif/misc.c.cdif X63682 733 fsdif/pipe.c.cdif X23503 202 fsdif/super.c.cdif X32449 596 fsdif/table.c.cdif X52345 206 fsdif/utility.c.cdif X07989 1334 hdif/CHANGES X56867 1346 hdif/boot.h.cdif X11669 1355 hdif/com.h.cdif X11064 1785 hdif/const.h.cdif X54703 7608 kerneldif/Bconsole.c.cdi X10299 314 kerneldif/Brs232.c.cdif X44727 2878 kerneldif/Btty.c.cdif X61366 13586 kerneldif/CHANGES X53869 4503 kerneldif/at_wini.c.cdif X29962 8507 kerneldif/axmakefile.cdi X19879 10602 kerneldif/clock.c.cdif X33096 3676 kerneldif/console.c.cdif X17774 7031 kerneldif/const.h.cdif X18063 4759 kerneldif/dmp.c.cdif X23580 2371 kerneldif/exception.c.cd X43539 3990 kerneldif/floppy.c.cdif X32425 2154 kerneldif/glo.h.cdif X00732 2394 kerneldif/i8259.c.cdif X36863 8420 kerneldif/klib286.x.cdif X01389 39670 kerneldif/klib88.x.cdif X00997 13597 kerneldif/main.c.cdif X56052 3714 kerneldif/memory.c.cdif X28868 2738 kerneldif/misc.c.cdif X01013 7400 kerneldif/mpx286.x.cdif X35915 16900 kerneldif/mpx88.x.cdif X41122 6243 kerneldif/printer.c.cdif X21517 26431 kerneldif/proc.c.cdif X28250 4435 kerneldif/proc.h.cdif X59265 9757 kerneldif/protect.c.cdif X36213 5010 kerneldif/protect.h.cdif X30637 6495 kerneldif/rs2.x.cdif X03401 3649 kerneldif/rs232.c.cdif X31596 5266 kerneldif/sconst.h.cdif X09445 4801 kerneldif/sglo.h.cdif X27539 20205 kerneldif/system.c.cdif X30325 1373 kerneldif/table.c.cdif X11117 808 kerneldif/tty.c.cdif X42827 2827 kerneldif/type.h.cdif X55080 4227 kerneldif/xt_wini.c.cdif X19725 344 libdif/CHANGES X18965 1162 libdif/head.s.cdif X11734 1851 mmdif/CHANGES X29780 3094 mmdif/alloc.c.cdif X27845 5879 mmdif/main.c.cdif X35100 448 mmdif/signal.c.cdif X26848 524 toolsdif/CHANGES X16877 16217 toolsdif/build.c.cdif X33760 5747 toolsdif/fsck.c.cdif X07957 462 toolsdif/fsck1.s.cdif END_OF_FILE if test 2232 -ne `wc -c <'crc-dist'`; then echo shar: \"'crc-dist'\" unpacked with wrong size! fi # end of 'crc-dist' fi if test -f 'crc-misc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'crc-misc'\" else echo shar: Extracting \"'crc-misc'\" \(521 characters\) sed "s/^X//" >'crc-misc' <<'END_OF_FILE' X1.4a floppy.c, before patching X------------------------------ X02252 28600 kernel/floppy.c X X1.4a floppy.c, after patching X----------------------------- X26150 29218 kernel/floppy.c X XMy tty files, before patching X----------------------------- X57278 34367 kernel/console.c X65263 19504 kernel/rs232.c X16498 37486 kernel/tty.c X40473 8522 kernel/tty.h X XMy tty files, after patching X---------------------------- X41029 39407 kernel/console.c X58421 19572 kernel/rs232.c X28361 37783 kernel/tty.c X40473 8522 kernel/tty.h END_OF_FILE if test 521 -ne `wc -c <'crc-misc'`; then echo shar: \"'crc-misc'\" unpacked with wrong size! fi # end of 'crc-misc' fi if test ! -d 'commandsdif' ; then echo shar: Creating directory \"'commandsdif'\" mkdir 'commandsdif' fi if test ! -d 'fsdif' ; then echo shar: Creating directory \"'fsdif'\" mkdir 'fsdif' fi if test ! -d 'hdif' ; then echo shar: Creating directory \"'hdif'\" mkdir 'hdif' fi if test ! -d 'kerneldif' ; then echo shar: Creating directory \"'kerneldif'\" mkdir 'kerneldif' fi if test ! -d 'libdif' ; then echo shar: Creating directory \"'libdif'\" mkdir 'libdif' fi if test ! -d 'mmdif' ; then echo shar: Creating directory \"'mmdif'\" mkdir 'mmdif' fi if test ! -d 'toolsdif' ; then echo shar: Creating directory \"'toolsdif'\" mkdir 'toolsdif' fi if test -f 'commandsdif/CHANGES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'commandsdif/CHANGES'\" else echo shar: Extracting \"'commandsdif/CHANGES'\" \(585 characters\) sed "s/^X//" >'commandsdif/CHANGES' <<'END_OF_FILE' Xreadclock.c: X o Avoided the direct access to ports and memory. X It is not allowed in protected mode. X The routines here may belong in the library (instead of portio.s) X but are slow and waste file descriptors. X They do everything through /dev/port and /dev/mem. X They are subtly different since they are not guaranteed to succeed, X so an error code must be checked for. X The 640K size in the inode of the version 1.3 /dev/mem is bogus. X It needs to be 1M for the peek in readclock.c, and 16M to be X reasonable on AT's. X Device sizes in inodes don't work very well. END_OF_FILE if test 585 -ne `wc -c <'commandsdif/CHANGES'`; then echo shar: \"'commandsdif/CHANGES'\" unpacked with wrong size! fi # end of 'commandsdif/CHANGES' fi if test -f 'fsdif/CHANGES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fsdif/CHANGES'\" else echo shar: Extracting \"'fsdif/CHANGES'\" \(1602 characters\) sed "s/^X//" >'fsdif/CHANGES' <<'END_OF_FILE' XGeneral: X o The root device, RAM image device and RAM disk size can be changed X at boot time (using the new tools/fsck.c). X The magic numbers are passed in a structure from the bootstrap X program through the kernel to FS. X ../h/boot.h declares this structure and defines some constants. X This should make most of the special ST code unnecessary. Xcache.c: X o Included boot.h and changed message about out of space on device. Xdevice.c: X o Adjusted TTY_SPEED returned by do_ioctl for V1.2 compatibility. X Programs like elle compiled with old libraries sometimes trashed X the speed. Xinode.c: X o Included boot.h and changed message about out of inodes on device. Xmain.c: X o Included boot.h. X o Deleted constants involving memory sizes. X Only the kernel should know them. X o Added and called get_boot_parameters. X o Changed get_base to get_physbase, added get_physbase. X FS shouldn't know about memory, let alone segments. X Better if the kernel did the checking (for DMA boundaries.) X o Added logic for skipping load of RAM disk when ram disk is not root. X o Deleted code telling MM where to put RAM disk. X MM now tells FS. X o Added code to boot fast by prefetching blocks at good interleave. X FLOPPY is not smart enough to do this. Xmisc.c: X o Included boot.h. Xpipe.c: X o Fixed unpause bug. X CANCEL used open mode and not current i/o mode. X o Fixed another unpause bug. X CANCEL did not go through dev switch, so pseudo-devices X like /dev/tty were mishandled. Xsuper.c: X o Included boot.h. Xtable.c: X o Changed comment involving boot device numbers. Xutility.c: X o Included boot.h. END_OF_FILE if test 1602 -ne `wc -c <'fsdif/CHANGES'`; then echo shar: \"'fsdif/CHANGES'\" unpacked with wrong size! fi # end of 'fsdif/CHANGES' fi if test -f 'hdif/CHANGES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hdif/CHANGES'\" else echo shar: Extracting \"'hdif/CHANGES'\" \(1334 characters\) sed "s/^X//" >'hdif/CHANGES' <<'END_OF_FILE' Xboot.h: X o Added it. Xcom.h: X o Added IDLE task to let kernel do better accounting. X It is split off from the HARDWARE task. X Accounting can now be done for the hardware interrupts and context X switching since most interrupt handling is now done with (clock) X interrupts enabled. X Eventually, IDLE could be a user task and do something more X interesting. X o Deleted obsolete DISKINT and CLOCK_INT. X These are replaced by a single HARD_INT. X TTY_CHAR_INT and TTY_O_DONE should be obsolete but are not since X TTY and PRINTER still use them instead of the correct HARD_INT. X o Added PORT_DEV, minor number for dev/port. X The old port_in and port_out are denied to users in protected mode. X o Added functions SYS_GBOOT, SYS_UMAP and SYS_MEM to SYSTASK. Xconst.h: X o Increased NR_TASKS by 1 for IDLE. X o Doubled NR_PROCS for room. X Optional. X o Changed CLICK_SIZE to 256 to allow access to 16MB on 386's and X 286's. X This should probably be the standard, since it matches the ST X value and shifting by 8 is (or should be) easier than by 4. X The advantage of matching the hardware click size of 16 is X superficial. X o Added macros to convert between clicks and kbytes. X These are mainly used when printing values for the user. X o Deleted BOOT_DEV and ROOT_DEV. X These are now variables, defined in boot.h. END_OF_FILE if test 1334 -ne `wc -c <'hdif/CHANGES'`; then echo shar: \"'hdif/CHANGES'\" unpacked with wrong size! fi # end of 'hdif/CHANGES' fi if test -f 'libdif/CHANGES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'libdif/CHANGES'\" else echo shar: Extracting \"'libdif/CHANGES'\" \(344 characters\) sed "s/^X//" >'libdif/CHANGES' <<'END_OF_FILE' Xhead.s: X o Increased the stack size and documented all the register slots X needed (stack size is too small mainly for separate I&D - fixed X and reported a while ago). X o Put CLICK_SHIFT at locations 2-3 in the data. X WARNING! It is hard coded as 8 since head.s is not (yet) set X up to include h/const.h like the kernel assembler files. END_OF_FILE if test 344 -ne `wc -c <'libdif/CHANGES'`; then echo shar: \"'libdif/CHANGES'\" unpacked with wrong size! fi # end of 'libdif/CHANGES' fi if test -f 'mmdif/CHANGES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mmdif/CHANGES'\" else echo shar: Extracting \"'mmdif/CHANGES'\" \(1851 characters\) sed "s/^X//" >'mmdif/CHANGES' <<'END_OF_FILE' XGeneral: X o CLICK-SIZE now 256 for PC's, AT's and ST's. X This is a complicated system-wide change for PC's and AT's. X It is needed mainly so MM's tables can handle extended memory on X AT's (now normal memory with the 286 kernel). X The change doesn't affect the internals of MM much - a few things X depended on CLICK_SIZE <= 1024, and everything still depends on X it being a power of 2. Xalloc.c: X o Changed mem_init() to get memory sizes from kernel. X It used to be passed a single parameter, but now there are multiple X sizes. X o Changed mem_init() to handle fragmented memory. X The fragments are needed for AT extended memory and ROM shadow X memory on AT's. X o Added mem_left() to count total memory left. X This is currently only used to get the amount left after X initialization for printing in the startup message. Xmain.c: X o Changed do_brk2() to handle fragmented memory. X o Allocated extended memory RAM disk in do_brk2(). X The 1.3 MM was not able to handle extended memory, so FS only told X MM about RAM disks in normal memory. X Now, FS doesn't know about extended memory, and MM knows only X enough to prefer it for allocating the RAM disk. X This means that the extended memory RAM disk is lost with the old X CLICK_SIZE of 16. X Only unprotected mode 286's and 386's can have extended memory, and X the protected mode kernel is supposed to make those modes obsolete. X o Replaced get_tot_mem() with get_mem(). X The i8088 version requires a new system call (SYS_MEM) to the X system task. X The version in getutil.s is obsolete (the wrong way to do it). X The ST code is changed but not tested (it doesn't use SYS_MEM but X should). Xsignal.c: X o Added call to sys_sig() to tell kernel that signal handling is done. X This helps fix the bug which allowed processes undergoing signal X handling to run. END_OF_FILE if test 1851 -ne `wc -c <'mmdif/CHANGES'`; then echo shar: \"'mmdif/CHANGES'\" unpacked with wrong size! fi # end of 'mmdif/CHANGES' fi if test -f 'toolsdif/CHANGES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'toolsdif/CHANGES'\" else echo shar: Extracting \"'toolsdif/CHANGES'\" \(524 characters\) sed "s/^X//" >'toolsdif/CHANGES' <<'END_OF_FILE' Xbuild.c: X o The 1.3 version needed massive changes since it fails miserably X when CLICK_SIZE != 16. X o This version also puts symbol tables into the image. X o It also has #ifdef'ed code to handle old Xenix a.out headers. X Minix headers are handled very untidily here and in fs/exec.c. Xfsck.c: X o Initialized default boot parameters and allowed user to change them. X o Eliminated non-portable preprocessor quoting trick. X Printk should be used for further simplifications. Xfsck1.s: X o Passed boot parameters to kernel. END_OF_FILE if test 524 -ne `wc -c <'toolsdif/CHANGES'`; then echo shar: \"'toolsdif/CHANGES'\" unpacked with wrong size! fi # end of 'toolsdif/CHANGES' fi if test -f 'commandsdif/readclock.c.cd' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'commandsdif/readclock.c.cd'\" else echo shar: Extracting \"'commandsdif/readclock.c.cd'\" \(2780 characters\) sed "s/^X//" >'commandsdif/readclock.c.cd' <<'END_OF_FILE' X*** commands-1.3/readclock.c Wed Oct 5 22:29:09 1988 X--- commands/readclock.c Thu Jan 19 07:09:40 1989 X*************** X*** 132,136 **** X X! port_out( CLK_ELE, reg_addr ); X! port_in(CLK_IO, &val); X return( val ); X } X--- 132,219 ---- X X! if ( port_out( CLK_ELE, reg_addr ) < 0 || port_in(CLK_IO, &val) < 0 ) { X! printf( "-q\n" ); X! exit( 1 ); X! } X return( val ); X+ } X+ X+ X+ /***********************************************************************/ X+ /* */ X+ /* Peek and poke using /dev/mem. */ X+ /* Callers now ought to check the return values. */ X+ /* In Minix 1.3c, /dev/mem is incorrectly truncated to 640K, */ X+ /* so the CPU type byte is not accessable. */ X+ /* */ X+ /***********************************************************************/ X+ X+ long lseek(); X+ X+ int peek( seg, offset ) X+ unsigned seg; X+ unsigned offset; X+ { X+ static int memfd = -1; X+ unsigned char val; X+ X+ if ( memfd < 0 ) X+ memfd = open( "/dev/mem", 0 ); X+ if ( lseek( memfd, (unsigned long) seg * 0x10 + offset, 0 ) < 0 || X+ read( memfd, &val, 1 ) != 1 ) X+ return -1; X+ return val; X+ } X+ X+ int poke( seg, offset, val ) X+ unsigned seg; X+ unsigned offset; X+ unsigned char val; X+ { X+ static int memfd = -1; X+ X+ if ( memfd < 0 ) X+ memfd = open( "/dev/mem", 1 ); X+ if ( lseek( memfd, (unsigned long) seg * 0x10 + offset, 0 ) < 0 || X+ write( memfd, &val, 1 ) != 1 ) X+ return -1; X+ return val ; X+ } X+ X+ X+ /***********************************************************************/ X+ /* */ X+ /* Port i/o functions using /dev/port. */ X+ /* Callers now ought to check the return values. */ X+ /* */ X+ /***********************************************************************/ X+ X+ long lseek(); X+ X+ int port_in( port, valp ) X+ unsigned port; X+ unsigned *valp; X+ { X+ static int portfd = -1; X+ unsigned char val; X+ X+ if ( portfd < 0 ) X+ portfd = open( "/dev/port", 0 ); X+ if ( lseek( portfd, (long) port, 0 ) < 0 || X+ read( portfd, &val, 1 ) != 1 ) X+ return *valp = -1; X+ return *valp = val; X+ } X+ X+ int port_out( port, val ) X+ unsigned port; X+ unsigned char val; X+ { X+ static int portfd = -1; X+ X+ if ( portfd < 0 ) X+ portfd = open( "/dev/port", 1 ); X+ if ( lseek( portfd, (long) port, 0 ) < 0 || X+ write( portfd, &val, 1 ) != 1 ) X+ return -1; X+ return val ; X } END_OF_FILE if test 2780 -ne `wc -c <'commandsdif/readclock.c.cd'`; then echo shar: \"'commandsdif/readclock.c.cd'\" unpacked with wrong size! fi # end of 'commandsdif/readclock.c.cd' fi if test -f 'fsdif/at_makefile.cd' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fsdif/at_makefile.cd'\" else echo shar: Extracting \"'fsdif/at_makefile.cd'\" \(742 characters\) sed "s/^X//" >'fsdif/at_makefile.cd' <<'END_OF_FILE' X*** fs-1.3/at_makefile Wed Oct 5 21:55:48 1988 X--- fs/at_makefile Wed Mar 22 03:41:32 1989 X*************** X*** 23,24 **** X--- 23,25 ---- X cache.s: $h/error.h X+ cache.s: $h/boot.h X cache.s: buf.h X*************** X*** 49,50 **** X--- 50,52 ---- X inode.s: $h/error.h X+ inode.s: $h/boot.h X inode.s: buf.h X*************** X*** 69,70 **** X--- 71,73 ---- X main.s: $h/error.h X+ main.s: $h/boot.h X main.s: buf.h X*************** X*** 81,82 **** X--- 84,86 ---- X misc.s: $h/error.h X+ misc.s: $h/boot.h X misc.s: buf.h X*************** X*** 164,165 **** X--- 168,170 ---- X super.s: $h/error.h X+ super.s: $h/boot.h X super.s: buf.h X*************** X*** 194,195 **** X--- 199,201 ---- X utility.s: $h/error.h X+ utility.s: $h/boot.h X utility.s: buf.h END_OF_FILE if test 742 -ne `wc -c <'fsdif/at_makefile.cd'`; then echo shar: \"'fsdif/at_makefile.cd'\" unpacked with wrong size! fi # end of 'fsdif/at_makefile.cd' fi if test -f 'fsdif/device.c.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'fsdif/device.c.cdif'\" else echo shar: Extracting \"'fsdif/device.c.cdif'\" \(296 characters\) sed "s/^X//" >'fsdif/device.c.cdif' <<'END_OF_FILE' X*** fs-1.3/device.c Wed Aug 3 21:05:11 1988 X--- fs/device.c Sun Dec 18 04:34:36 1988 X*************** X*** 125,126 **** X--- 125,127 ---- X m1.TTY_FLAGS = dev_mess.TTY_FLAGS; /* flags */ X+ m1.TTY_SPEED = dev_mess.TTY_FLAGS >> 16; /* kludge for V1.2 TIOCGETP */ X return(dev_mess.REP_STATUS); END_OF_FILE if test 296 -ne `wc -c <'fsdif/device.c.cdif'`; then echo shar: \"'fsdif/device.c.cdif'\" unpacked with wrong size! fi # end of 'fsdif/device.c.cdif' fi echo shar: End of archive 1 \(of 10\). cp /dev/null ark1isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 10 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Division of Information Technology (Melbourne), Phone +61 3 347 8644 C.S.I.R.O. Fax +61 3 347 8987 55 Barry St. Telex AA 152914 Carlton, Vic, 3053, Australia E-mail: worsley@ditmela.oz.au