From 94fd5d49e0c0371019fc7b5f59ecdfdff9159c7f Mon Sep 17 00:00:00 2001 From: Warren Toomey Date: Mon, 21 Mar 2016 16:01:36 +1000 Subject: [PATCH] I've restructured the alternative version of PDP-7 Unix so that the source code is now in src/alt. All the files in src/sys and src/cmd are only annotated versions of the files in scans/. The build/Makefile has been updated so that it can build the original PDP-7 Unix or the alternative version. Phil has fixed the Graphics-2 code, so that there is no need to have any #ifdef code in the original kernel. --- build/Makefile | 39 +++++++------ build/{altproto => alt/proto} | 0 build/{altunixv0.simh => alt/unixv0.simh} | 4 +- src/cmd/init.s | 6 -- src/minikern/README.md | 8 --- src/minikern/ttyout_test.s | 71 ----------------------- src/other/wktchrm.s | 41 ------------- src/sys/s2.s | 10 ---- src/sys/s7.s | 5 -- 9 files changed, 22 insertions(+), 162 deletions(-) rename build/{altproto => alt/proto} (100%) rename build/{altunixv0.simh => alt/unixv0.simh} (72%) delete mode 100644 src/minikern/README.md delete mode 100644 src/minikern/ttyout_test.s delete mode 100644 src/other/wktchrm.s diff --git a/build/Makefile b/build/Makefile index 9be34e9..a4ba7fe 100644 --- a/build/Makefile +++ b/build/Makefile @@ -11,6 +11,7 @@ PDP7=pdp7 # source dirs SYSSRC=../src/sys CMDSRC=../src/cmd +ALTSRC=../src/alt OTHERSRC=../src/other TESTSRC=../src/tests @@ -23,16 +24,16 @@ BINARIES=../binaries/ all: cmd others a.rim image.fs copybinaries # Make alternative everything: no dd but . and .. -alt: altcmd altothers alta.rim altimage.fs +alt: altcmd altothers alt/a.rim alt/image.fs # The run rule has no dependencies so that the system can be booted easily # and frequently with make run. However, you have to manually make all first! run: $(PDP7) unixv0.simh -# Alternative run, use the altimage.fs +# Alternative run, use the alt/image.fs altrun: - $(PDP7) altunixv0.simh + $(PDP7) alt/unixv0.simh # Warm boot Unix kernel: boots into init and a login prompt a.rim: @@ -40,10 +41,11 @@ a.rim: $(AS) -n -f list -o a.lst $(SYSSRC)/sop.s $(SYSSRC)/s[1-8].s # Alternative kernel: no dd, but . and .. -alta.rim: - $(AS) -f rim -o alta.rim -DNO_DD $(SYSSRC)/sop.s $(SYSSRC)/s[1-8].s - $(AS) -n -f list -o alta.lst -DNO_DD $(SYSSRC)/sop.s $(SYSSRC)/s[1-8].s - +alt/a.rim: + $(AS) -f rim -o alt/a.rim $(SYSSRC)/sop.s $(SYSSRC)/s1.s \ + $(ALTSRC)/s2.s $(SYSSRC)/s[3-8].s + $(AS) -n -f list -o alt/a.lst $(SYSSRC)/sop.s $(SYSSRC)/s1.s \ + $(ALTSRC)/s2.s $(SYSSRC)/s[3-8].s # Cold boot Unix kernel: attempts to build a minimal filesystem. # Don't use this one! @@ -57,9 +59,9 @@ image.fs: cmd others $(FSCK) image.fs # Alternate filesystem image: . and .. but no dd -altimage.fs: altcmd altothers - $(MKFS) -1 -2 -3 -o altimage.fs altproto - $(FSCK) -3 altimage.fs +alt/image.fs: altcmd altothers + $(MKFS) -1 -2 -3 -o alt/image.fs alt/proto + $(FSCK) -3 alt/image.fs copybinaries: @@ -68,9 +70,8 @@ copybinaries: cp a.rim $(BINARIES) clean: - rm -f a.rim image.fs a.lst n.out altimage.fs alta.rim alta.lst - rm -rf $(BINDIR) - rm -rf $(TESTDIR) + rm -f a.rim image.fs a.lst n.out alt/image.fs alt/a.rim alt/a.lst + rm -rf $(BINDIR) $(TESTDIR) rm -rf $(BINARIES) dirs: @@ -83,8 +84,8 @@ cmd: dirs $(BINDIR)/as $(BINDIR)/cat $(BINDIR)/check $(BINDIR)/chmod \ # Alternate commands: no dd, but . and .. altcmd: dirs $(BINDIR)/as $(BINDIR)/cat $(BINDIR)/check $(BINDIR)/chmod \ - $(BINDIR)/chown $(BINDIR)/altchrm $(BINDIR)/cp $(BINDIR)/ds $(BINDIR)/ed \ - $(BINDIR)/altinit + $(BINDIR)/chown $(BINDIR)/altchrm $(BINDIR)/cp $(BINDIR)/ds \ + $(BINDIR)/ed $(BINDIR)/altinit $(BINDIR)/as: $(CMDSRC)/as.s $(AS) $(ASARGS) -o $(BINDIR)/as $(CMDSRC)/as.s @@ -104,8 +105,8 @@ $(BINDIR)/chown: $(CMDSRC)/chown.s $(BINDIR)/chrm: $(CMDSRC)/chrm.s $(AS) $(ASARGS) -o $(BINDIR)/chrm $(CMDSRC)/chrm.s -$(BINDIR)/altchrm: $(OTHERSRC)/wktchrm.s - $(AS) $(ASARGS) -o $(BINDIR)/altchrm -DNO_DD $(OTHERSRC)/wktchrm.s +$(BINDIR)/altchrm: $(ALTSRC)/chrm.s + $(AS) $(ASARGS) -o $(BINDIR)/altchrm $(ALTSRC)/chrm.s $(BINDIR)/cp: $(CMDSRC)/cp.s $(AS) $(ASARGS) -o $(BINDIR)/cp $(CMDSRC)/cp.s @@ -120,8 +121,8 @@ $(BINDIR)/init: $(CMDSRC)/init.s $(AS) $(ASARGS) -o $(BINDIR)/init $(CMDSRC)/init.s # Alternative init: no dd directory -$(BINDIR)/altinit: $(CMDSRC)/init.s - $(AS) $(ASARGS) -DNO_DD -o $(BINDIR)/altinit $(CMDSRC)/init.s +$(BINDIR)/altinit: $(ALTSRC)/init.s + $(AS) $(ASARGS) -o $(BINDIR)/altinit $(ALTSRC)/init.s # The commands that did not come from the scans others: dirs $(BINDIR)/sh $(BINDIR)/wktcat $(BINDIR)/wktcp $(BINDIR)/date \ diff --git a/build/altproto b/build/alt/proto similarity index 100% rename from build/altproto rename to build/alt/proto diff --git a/build/altunixv0.simh b/build/alt/unixv0.simh similarity index 72% rename from build/altunixv0.simh rename to build/alt/unixv0.simh index 1fc7457..ea840ac 100644 --- a/build/altunixv0.simh +++ b/build/alt/unixv0.simh @@ -5,8 +5,8 @@ show cpu set tti unix set rb ena -att rb altimage.fs +att rb alt/image.fs show dev -load -S alta.rim +load -S alt/a.rim dep pc 0100 diff --git a/src/cmd/init.s b/src/cmd/init.s index e5f3265..fd966bf 100644 --- a/src/cmd/init.s +++ b/src/cmd/init.s @@ -124,11 +124,7 @@ login: 2: lac nchar sys setuid " Set the user's user-id -#ifdef NO_DD - sys chdir; dotdot " Change into the root directory (out of system) -#else sys chdir; dd " Change into the "dd" directory -#endif sys chdir; dir " and then the user's home directory lac d2 " Close file descriptor 2 @@ -253,8 +249,6 @@ m3: m3s = .-m3 dd:
;040040;040040;040040 -dotdot: - <..>;040040;040040;040040 dir: 040040;040040;040040;040040 diff --git a/src/minikern/README.md b/src/minikern/README.md deleted file mode 100644 index 6e8312b..0000000 --- a/src/minikern/README.md +++ /dev/null @@ -1,8 +0,0 @@ -#Readme - -This area is a place to write and try out kernel-mode test code. We can -try out drivers, test the disk routines etc. The idea is to bring pieces -of the real kernel in, test them, and keep incorporating stuff until we -reach a working kernel. - -List filenames and comments here. diff --git a/src/minikern/ttyout_test.s b/src/minikern/ttyout_test.s deleted file mode 100644 index 36b20a4..0000000 --- a/src/minikern/ttyout_test.s +++ /dev/null @@ -1,71 +0,0 @@ -" Code to test the teleprinter output. Some code borrowed from s7.s - -iof = 0700002 " PIC: interrupts off -ion = 0700042 " PIC: interrupts on -tsf = 0700401 " TTY: skip if flag set -tcf = 0700402 " TTY: clear flag -tls = 0700406 " TTY: load buffer, select - -. = 020 - - iof " Interrupts off, do we need this? - -1: tsf " Is the teleprinter ready to print? - jmp 1b " No, loop back - - tcf " Clear the ready flag - jms ttyrestart " Print out a character - hlt " and halt for now - - -ttyrestart: 0 - lac ttydelay " Is the ttydelay positive? - spa - jmp ttyrestart i " Yes, can't print the character yet - lac nttychar - dzm nttychar - sza - jmp 3f - isz ttydelay " Increment the tty delay towards zero - lac d2 " Why 2? - jms getchar " Get a character to print - jmp 2f " Why the jump, does getchar skip? Yes if no char -3: - tls " Send the character to the teleprinter - sad o12 - jms putcr " It's a newline, also send a CR? - sad o15 - skp " It was CR, so now insert a delay - jmp ttyrestart i " Not CR, so return from the routine - - lac ttydelay " Add 020 to the ttydelay - tad o20 - rcr " Rotate right once - cma " Invert the AC - dac ttydelay " and save back in ttydelay - jmp ttyrestart i " Now return from the routine -2: - " lac sfiles+1 - " jms wakeup - " dac sfiles+1 - jmp ttyrestart i " Now return from the routine - -getchar: 0 - lac d65 " For now, return ASCII A - isz getchar - jmp i getchar - -putcr: 0 - lac o15 - dac nttychar - cla - jmp putcr i - -d2: 2 -d65: 64 -o12: 012 -o15: 015 -o20: 020 - -ttydelay: 0 -nttychar: .=.+1 diff --git a/src/other/wktchrm.s b/src/other/wktchrm.s deleted file mode 100644 index acbf8e0..0000000 --- a/src/other/wktchrm.s +++ /dev/null @@ -1,41 +0,0 @@ -" Alternative chrm: chrm file [file file ...] -" -" Unlink the named files - - lac 017777 " Go to the argc - tad d1 " Skip past the argc - dac 2f " Save pointing at cmd name, we will skip later - lac 017777 i " How many arguments do we have? - sad d4 - sys exit " None, so exit - tad dm4 " Subtract 1 - dac 017777 i " and save in the argc - -1: - lac 017777 i " Any arguments left? - sna - sys exit " No, exit the program - tad dm4 " Subtract 4 from the argc and update it - dac 017777 i - lac 2f " Move up to the next filename - tad d4 - dac 2f " and save it in the unlink arg - sys unlink; 2:0 " Unlink the file - sma - jmp 1b " Loop back if the unlink was OK, or issue err - lac 2b " Copy the filename pointer below - dac 2f - lac d1 " Write the filename on stdout - sys write; 2:0; 4 - lac d1 - sys write; 1f; 2 " Write " ?\n" on stdout - jmp 1b " and loop back - -1: - 040077;012000 " String literal " ?\n" -dd: -
;040040;040040;040040 " Filename dd -d1: 1 -d4: 4 -d5: 5 -dm4: -4 diff --git a/src/sys/s2.s b/src/sys/s2.s index 8fc2c98..c23efca 100644 --- a/src/sys/s2.s +++ b/src/sys/s2.s @@ -6,11 +6,6 @@ " sys status; dir_name_ptr; file_name_ptr " NO_DD version: sys status; file_name_ptr .status: -#ifdef NO_DD - jms arg " fetch file name pointer - dac .+3 - lac u.cdir " get current working directory -#else jms arg " fetch directory name pointer dac .+5 jms arg " fetch file name pointer @@ -18,7 +13,6 @@ lac u.cdir " get current working directory jms namei; .. " look up source directory jms error " not found: return error to user -#endif jms namei; .. " look up file jms error " not found: return error jms iget " read file inode @@ -110,11 +104,7 @@ dac 1f jms arg dac 2f -#ifdef NO_DD - lac u.cdir " Search the current directory -#else lac d4 " Search the directory at i-num 4 -#endif jms namei; 0:0 " for the first argument jms error " Didn't find it jms namei; 1:0 " In the i-num found by 1st namei, diff --git a/src/sys/s7.s b/src/sys/s7.s index cb2e5b2..6f3ea7d 100644 --- a/src/sys/s7.s +++ b/src/sys/s7.s @@ -4,8 +4,6 @@ pibreak: " priority interrupt break processing "chain" dac .ac " save interrupt AC "** CROSSED OUT.... - -#ifdef GRAPHICS2 dpsf jmp 1f " disable the Graphics-2 I/O @@ -26,7 +24,6 @@ pibreak: " priority interrupt break processing "chain" -1 dac dpwrite jmp piret "** END OF CROSSOUT -#endif 1: clsf " clock overflow (line frequency ticks)? jmp 1f " no @@ -90,7 +87,6 @@ cnop: " fetched as constant in iread dac .dspb jmp piret dsprestart: -#ifdef GRAPHICS2 lac d1 dac .dspb " set .dsbp = 1 lac dspbufp " load display buf pointer @@ -109,7 +105,6 @@ dsprestart: dac .lpba " save rlpd " G-2: resume after light pen stop jmp piret -#endif 1: ksf " (TTY) keyboard flag set? jmp 1f " no