From 5d1a310888c1456419ac78cda25b2358350b0dd3 Mon Sep 17 00:00:00 2001 From: "tim.newsham" Date: Thu, 24 Apr 2008 17:06:23 +0000 Subject: [PATCH] - initial import of work. --- notes.txt | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ pages/e00-01 | 55 +++++++++++++++++++++++++++++++++++ pages/e00-02 | 57 ++++++++++++++++++++++++++++++++++++ pages/e00-03 | 56 ++++++++++++++++++++++++++++++++++++ pages/e00-04 | 57 ++++++++++++++++++++++++++++++++++++ pages/e00-05 | 54 +++++++++++++++++++++++++++++++++++ pages/e00-06 | 56 ++++++++++++++++++++++++++++++++++++ pages/e00-07 | 57 ++++++++++++++++++++++++++++++++++++ pages/e00-08 | 56 ++++++++++++++++++++++++++++++++++++ pages/e00-09 | 57 ++++++++++++++++++++++++++++++++++++ pages/e00-10 | 28 ++++++++++++++++++ 11 files changed, 614 insertions(+) create mode 100644 notes.txt create mode 100644 pages/e00-01 create mode 100644 pages/e00-02 create mode 100644 pages/e00-03 create mode 100644 pages/e00-04 create mode 100644 pages/e00-05 create mode 100644 pages/e00-06 create mode 100644 pages/e00-07 create mode 100644 pages/e00-08 create mode 100644 pages/e00-09 create mode 100644 pages/e00-10 diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000..1fa2df1 --- /dev/null +++ b/notes.txt @@ -0,0 +1,81 @@ +I started with the pdf, using Preview in mac I selected regions and +copied and created new doc, saved it as jpeg and then used +the online OCR program: http://asv.aso.ecei.tohoku.ac.jp/tesseract/ +I then manually edited each file. + +The files are named according to the page index in the pdf and the +section and page given in the page footer. Page headers and footers +were not captured. +------------------ + +e00-01 to e00-10 (10) - u0 - + assigned: tim newsham, complete + reviewed: +e01-01 to e01-10 (10) - u1 - + assigned: Hellwig Geisse + reviewed: +e02-01 to e02-10 (10) - u2 - + assigned: Brantley Coile + reviewed: +e03-01 to e03-04 (4) - u3 - + assigned: + reviewed: +e04-01 to e04-07 (7) - u4 - + assigned: + reviewed: +e05-01 to e05-06 (6) - u5 - + assigned: + reviewed: +e06-01 to e06-06 (6) - u6 - + assigned: + reviewed: +e07-01 to e07-08 (8) - u7 - + assigned: + reviewed: +e08-01 to e08-09 (9) - u8 - + assigned: + reviewed: +e09-01 to e09-08 (8) - u9 - + assigned: + reviewed: +e10-01 to e10-02 (2) - ux - + assigned: + reviewed: +e11-01 to e11-07 (7) - sh + we have a binary for the sh already I think. this may be optional + assigned: + reviewed: +e12-01 to e12-04 (4) - init + we have a binary for init already + assigned: + reviewed: + + + +------------------ +e00-01 + - I used spaces to line up the comment columns, not tabs. I + picked the column distance arbitrarily. + - the bottom section looks like it could be tabbed but my tabstops + didnt line up with the values given so I used spaces + +e00-02 + - I used tabs for the start of each asm command but not for the + separation between mnemonic and arguments since these didnt line up. + with my tab stops. + +e00-03 + - left "dis addresses" typo in per original + +e00-05 + - cant tell if the "O" in quotes after 1: is a O or a 0. + - left mispelled "mormally" in comment + - left "file/etc/init" without space. + +e00-06 + - left mis-spacing on 5: move r5,r1. + +e00-10 + - left "/ect/init" typo +-------------------- + diff --git a/pages/e00-01 b/pages/e00-01 new file mode 100644 index 0000000..13e2305 --- /dev/null +++ b/pages/e00-01 @@ -0,0 +1,55 @@ +/ u0 -- unix + +cold = 0 +orig = 0 . / orig = 0. relocatable + +rkda = 177412 / disk address reg rk03/rk11 +rkds = 177400 / driv status reg rk03/rk11 +rkcs = 177404 / control status reg rk03/rk11 +rcsr = 174000 / receiver status reg dc-11 +rcbr = 174002 / receiver buffer reg dc-11 +tcsr = 174004 / xmtr status reg dc-11 +tcbr = 174006 / xmtr buffer req dc-11 +tcst = 177340 / dec tape control status tc11/tu56 +tccm = 177342 / dec tape command reg tc11/tu56 +tcwc = 177344 / word count tc11/tu56 +tcba = 177346 / bus addr tc11/tu56 +tcdt = 177350 / data reg tc11/tu56 +dcs = 177460 / drum control status rf11/rs11 +dae = 177470 / drum address extension rf11/rs11 +lks = 177546 / clock status reg kw11-l +prs = 177550 / papertape reader status pc11 +prb = 177552 / buffer pc11 +pps = 177554 / punch status pc11 +ppb = 177556 / punch buffer pc11 +/lps = 177514 line printer status (future) +/lpb = 177516 line printer buffer (future) +tks = 177560 / console read status asr-33 +tkb = 177562 / read buffer asr-33 +tps = 177564 / punch status asr-33 +tpb = 177566 / punch buffer asr-33 +ps = 177776 / processor status + +halt = 0 +wait = 1 +rti = 2 + +nproc = 16. / number of processes +nfilcs = 50. +ntty = 8+1 +nbuf = 6 + .if cold / ignored if cold = 0 +nbuf = 2 +.endif + +core = orig+40000 / specifies beginning of user's core +ecore = core+20000 / specifies end of user's core (4096 words) + +/ 4;4 init by copy +/ unkni;0 " error +/ fpsym;0 " illg in tr + unkni;0 / trace and trap (see Sec. B.1 page ) + unkni;0 / trap + panic;0 / pwr + rtssym;0 / emt + sysent;0 / sys diff --git a/pages/e00-02 b/pages/e00-02 new file mode 100644 index 0000000..44c9bac --- /dev/null +++ b/pages/e00-02 @@ -0,0 +1,57 @@ +. = orig+60 + ttyi;240 / interrupt vector tty in ; processor level 5 + ttyo;240 / interrupt vector tty out + ppti;240 / punch papertape in + ppto;240 / punch papertape out + clock;340 / clock interrupt vector ; processor level 7 +. = orig+200 +/ lpto; 240 line printer interrupt ; processor level 5 (future) +. = orig+204 + drum;300 / drum interrupt ; processor level 6 +. = orig+214 + tape;300 / dec tape interrupt + disk;300 / rk03 interrupt +. = orig+300 + 0*4+trcv; 240; 0*4+txmt; 240 / dc11 input;output interrupt vectors + 1*4+trcv; 240; 1*4+txmt; 240 + 2*4+trcv; 240; 2*4+txmt; 240 + 3*4+trcv; 240; 3*4+txmt; 240 + 4*4+trcv; 240; 4*4+txmt; 240 + 5*4+trcv; 240; 5*4+txmt; 240 + 6*4+trcv; 240; 6*4+txmt; 240 + 7*4+trcv; 240; 7*4+txmt; 240 + +. = orig+400 +/ copy in transfer vectors + + mov $ecore,sp / put pointer to score in the stack pointer + jsr r0,copyz; 0; 14 / clear locations 0 to 14 in core + mov $4,r0 + clr r1 + mov r0,(r1)+ / put value of 4 into location 0 + mov r0,(r1)+ / put value of 4 into location 2 + mov $unkni,(r1)+ / put value of unkni into location 4; + / time out, bus error + clr (r1)+ / put value of 0 into location 6 + mov $fpsym,(r1)+ / put value of fpsym into location 10 + clr (r1)+ / put value of 0 into location 12 +/ clear core + .if cold / ignored if cold = 0 + halt / halt before initializing rf file system; user has + / last chance to reconsider + .endif + + jsr r0,copyz; systm; ecore / clear locations systm to ecore + mov $s,chrgt+2,clockp / intlalize clockp +/ allocate tty buffers; see H.0 for description + mov $buffer,r0 + mov $tty+6,r1 +1: + mov r0,(r1) + add $140.,r0 / tty buffers are 140. bytes long + add $8,r1 + cmp r1,$tty+[ntty*8] / has a buffer been assigned for each tty + blo 1b + +/ allocate disk buffers; see H.0 for description + diff --git a/pages/e00-03 b/pages/e00-03 new file mode 100644 index 0000000..5af9bc2 --- /dev/null +++ b/pages/e00-03 @@ -0,0 +1,56 @@ + mov $bufp,r1 +1: + mov r0,(r1)+ + add $8,r0 + mov r0,-2(r0) / bus address + mov $-256.,-4(r0) / word count + add $512.,r0 / buffer space + cmp r1,$bufp+nbuf+nbuf + blo 1b + mov $sb0,(r1)+ / I/O queue entry drum + mov $sb1,(r1)+ / I/O queue entry disk (mounted device) + mov $swp,(r1)+ / I/O queue entry core image being swapped + mov $[systm-inode]\/2,sb0+4 / sets up initial buffers per + / format given in + mov $systm,sb0+6 / memory map + mov $-512.,sb1+4 + mov $mount,sb1+6 + mov $user,swp+6 + +/ set devices to interrupt + + mov $100,*$lks / put 100 into clock status register; + / enables clock interrupt + +/ set up time out subroutines + + mov $touts,r0 + mov $startty,(r0)+ / if toutt = 0 call startty + mov $pptito,(r0)+ / if toutt+1 = 0 call pptito + tst (r0)+ / add 2 to r0 + mov $ntty-1,r1 +1 : + mov $xmtto,(r0)+ / if toutt+2 thru toutt+2+ntty=0 call xmtto + dec r1 + bne 1b + +/ free all character blocks; see H.0 for description + + mov $510.,r2 + mov $-1,r1 +1: + jsr r0,put + sub $2,r2 + bgt 1b + +/ set up drum swap addresses; see H.0 for description + + mov $1024.,-64.,r1 / highest drum address; high 64 blks allocated + / to UNIX + mov $p.dska,r2 / p.dska contains dis addresses for processes +1 : + sub $17.,r1 / 17 blocks per process + mov r1,(r2)+ + cmp r2,$p.dska+nproc+nproc + bne 1b + diff --git a/pages/e00-04 b/pages/e00-04 new file mode 100644 index 0000000..8fc3072 --- /dev/null +++ b/pages/e00-04 @@ -0,0 +1,57 @@ +/ free rest of drum + + .if cold + mov $128.,systm / inltialize word 1 of drum superblock image; + / number of bytes in free storage map=128. + mov $64.,systm+2+128. / init. wd 66. of superblock image; # of + / bytes in i-node map=64. +1: + dec r1 / r1=687.,...,34. + jsr r0,free / free block 'r1', i.e., set bit 'r1' in free + / storage map in core + cmp r1,$34. / first drum address not in i list + bgt 1b / if block 34 has been freed, zero i list + +/ zero 1 list + +1: + dec r0 / r0=33.,...,1 + jsr r0,c1ear / zero block 'r1' on fixed head disk + tst r1 + bgt 1b / if blocks 33,...,1 have all been zeroed, done. + .endif + +/ make current program a user + + mov $41.,r0 / rootdir set to 41 and never changed + mov r0,rootdir / rootdir is i-number of root directory + mov r0,u.cd1r / u.cd1r 1s i-number of process current directory + mov $1,r0 + movb r0,u.uno / set process table index for this process to 1 + mov r0,mpid / initialize mpid to 1 + mov r0,p.p1d / p.pid identifies process + movb r0,p.stat / process status = 1 i.e., active + / = 0 free + .if cold / = 2 waiting for a child to die + / = 3 terminated but not yet waited + / for + +/ initialize inodes for special files (inodes 1 to 40.) + + mov $40.,r1 / set r1=i-node-number 40. +1: + jsr r0,iget / read i-node 'r1' from disk into inode area of + / core and write modified inode out (if any) + mov $100017,i.flgs / set flags in core image of inode to indi- + / cate allocated, read (owner, non-owner), + / write (owner, non-owner) + movb $1,i.nlks / set no. of links = 1 + movb $1,i.uid / set user id of owner = 1 + jsr r0,setimod / set imod=1 to indicate i-node modified, also + / stuff time of modification into i-node + dec r1 / next i-node no. = present i-node no.-1 + bgt 1b / has i-node 1 been initialized; no, branch + +/ initialize i-nodes r1.,...,47. and wr1te the root device, binary, etc., +/ directories onto fixed head disk. user temporary, initialization prog. + diff --git a/pages/e00-05 b/pages/e00-05 new file mode 100644 index 0000000..5d925c4 --- /dev/null +++ b/pages/e00-05 @@ -0,0 +1,54 @@ + mov $idata,r0 / r0=base addr. of assembled directories. + mov $u.off,u.fofp / pointer to u.off in u.fofp (holds file + / offset) +1: + mov (r0)+,r1/r1=41.,...,47; "0" in the assembled directory + / header signals last + beq 1f / assembled directory has been written onto drum + jsr r0,imap / locate the inode map bit for i-node 'r1' + bisb mq,(r2) / set the bit to indicate the i-node is not + / available + jsr r0,iget / read inode 'r1' from disk into inode area of + / core and write modified i-node on drum (if any) + mov (r0)+,i.flgs / set flags in core image of inode from + / assembled directories header + movb (r0)+,i.nlks / set no. of links from header + movb (r0)+,i.uid / set user id of owner from header + jsr r0,setimod / set imod=1 to indicate inode modified: also, + / stuff time of modification into i-node + mov (r0)+,u.count / set byte count for write call equal to + / size of directory + mov r0,u.base / set buffer address for write to top of directory + clr u.off / clear file offset used in 'seek' and 'tell' + add u.count,r0 / r0 polnts to the header of the next directory + jsr r0,writei / write the directory and i-node onto drum + br 1b / do next directory + .endif + +/ next 2 instructions not executed during cold boot. + bis $2000,sb0 / sb0 I/O queue entry for superblock on drum; + / set blt 10 to 1 + jsr r0,ppoke / read drum superblock +1: + tstb sb0+1 / has I/O request been honored (for drum)? + bne 1b / no, continue to idle. +1: + decb sysflg / mormally sysflag=0, indicates executing in system + sys exec; 2f; 1f / generates trap interrupt; trap vector = + / sysent; 0 + br panic / execute file/etc/init + +1 : + 2f;0 +2: + / UNIX looks for strings term, noted by nul\0 + +panic: + clr ps +1: + dec $0 + bne 1b + dec $5 + bne 1b + jmp *$173700 / rom loader address + diff --git a/pages/e00-06 b/pages/e00-06 new file mode 100644 index 0000000..ad026a2 --- /dev/null +++ b/pages/e00-06 @@ -0,0 +1,56 @@ +rtssyms: + mov r0,-(sp) + mov r1,-(sp) + mov 4(sp),r0 + mov -(r0),r0 + bic $!7,r0 + asl r0 + jmp *1f(r0) +1: + 0f;1f;2f;3f;4f;5f;badrts;7f +0: + mov 2(sp),r0 + br 1f +2: + mov r2,r1 + br 1f +3: + mov r3,r1 + br 1f +4: + mov r4,r1 + br 1f +5: + mov r5,r1 + bf 1f +7: + mov 8.(sp),r1 +1: + cmp r1,$core + blo badrts + cmp r1,$ecore + bhis badrts + bit $1,r1 + bne badrts + tst (r1) + beq badrts + add $1f,r0 + mov r0,4(sp) + mov (sp)+,r1 + mov (sp)+,r0 + rti +1: + rts r0 + rts r1 + rts r2 + tts r3 + rts r4 + rts r5 + rts sp + rts pc + +badrts: + mov (sp)+,r1 + mov (sp)+,r0 +rpsym: + diff --git a/pages/e00-07 b/pages/e00-07 new file mode 100644 index 0000000..89d2109 --- /dev/null +++ b/pages/e00-07 @@ -0,0 +1,57 @@ + jmp unkni + + .if cold + +idata: + +/ root + + 41. + 140016 + .byte 7,1 + 9f-.-2 + 41. + <..\0\0\0\0\0\0> + 41. + <.\0\0\0\0\0\0\0> + 42. + + 43. + + 44. + + 45. + + 46. + +9: + +/ device directory + + 42. + 140016 + .byte 2,1 + 9f-.-2 + 41. + <..\0\0\0\0\0\0> + 42. + <.\0\0\0\0\0\0\0> + 01. + + 02. + + 03. + + 04. + + 05. + + 06. + + 07. + + 08. + + 09. + + diff --git a/pages/e00-08 b/pages/e00-08 new file mode 100644 index 0000000..19b31fc --- /dev/null +++ b/pages/e00-08 @@ -0,0 +1,56 @@ + 10. + + 11. + + 12. + + 13. + + 14. + + 15. + + 16. + + 17. + + 18. + + 19. + + 20. + + 21. + + 22. + + 01. + / really tty +9: + +/ binary directory + + 43. + 140016 + .byte 2,3 + 9f-.-2 + 41. + <..\0\0\0\0\0\0> + 43. + <.\0\0\0\0\0\0\0> +9: + +/ etcetra directory + + 44. + 140016 + .byte 2,3 + 9f-.-2 + 41. + <..\0\0\0\0\0\0> + 44. + <.\0\0\0\0\0\0\0> + 47. + +9: + diff --git a/pages/e00-09 b/pages/e00-09 new file mode 100644 index 0000000..88ac356 --- /dev/null +++ b/pages/e00-09 @@ -0,0 +1,57 @@ +/ user directory + + 45. + 140016 + .byte 2,1 + 9f-.-2 + 41. + <..\0\0\0\0\0\0> + 45. + <.\0\0\0\0\0\0\0> +9: + +/ temporary directory + + 46. + 140017 + .byte 2,1 + 9f-.-2 + 41. + <..\0\0\0\0\0\0> + 46. + <.\0\0\0\0\0\0\0> +9: + +/ initialization program + + 47. + 100036 + .byte 1,3 + 9f-.-2 +8: + sys break; 0 + sys open; 6f-8b+core; 0 + mov r0,r1 + sys seek; 65.; 0 +1: + mov r1,r0 + sys read; 9f-8b+core; 512. + mov 9f,r5 / size + beq 1f + sys creat; 9f-8b+core+4; 0 + mov r0,r2 + movb 9f+2,0f + sys chmod; 9f-8b+core+4; 0:.. + movb 9f+3,0f + sys chown; 9f-8b+core+4; 0:.. +2: + tst r5 + beq 2f + mov r1,r0 + sys read; 9f-8b+core; 512. + mov $512.,0f + cmp r5,$512. + bhi. 3f + mov r5,0f +3: + diff --git a/pages/e00-10 b/pages/e00-10 new file mode 100644 index 0000000..0cbfe51 --- /dev/null +++ b/pages/e00-10 @@ -0,0 +1,28 @@ + mov r2,r0 + sys write; 9f-8b+core; 0:.. + sub r0,r5 + br 2b +2: + mov r2,r0 + sys close + br 1b +1: + mov r1,r0 + sys close + sys exec; 5f-8b+core; 4f-8b+core + sys exit +4: + 5f-8b+core; 0 +5: + +6: + + .even +9: + +/ end of initialization data + + 0 + + .endif +