"** 01-s1.pdf page 48 " s8 " manifests mnproc = 10 " number of processes dspbsz = 270 " display buffer size ndskbs = 4 " number of buffers at dskbs " flags .insys: 0 " "in system" .int1: 0 " inode for user interrupt 1 .int2: 0 " inode for user interrupt 2 .ac: 0 " saved AC from Priotity Interrupt .savblk: 0 " set by system call, cleared by disk i/o .dsptm: 0 " display restart countdown (10 ticks) .dskb: 0 " set on disk interrupt .dske: 0 " status from disk interrupt " pointers tadu: tad ulist dacu: dac ulist maxquant: 30 ofilesp: u.ofiles idskpp: i.dskps dskbufp: dskbuf edspbuf: dspbuf+dspbsz dspbufp3: dspbuf+3 fblksp: s.fblks dacq1: dac q1 lacq1: lac q1 q2p: q2 " strings initf: <in>; <it>; 040040; 040040 " was <i>n;<i>t;< > ;< > but as.s unhappy! " constants d0: 0 d1: 1 d2: 2 d3: 3 d4: 4 d5: 5 d6: 6 d7: o7: 07 d8: 8 d9: 9 o12: d10: 10 o14: 014 o15: 015 o17: 017 o20: 020 o33: 033 o40: 040 o55: 055 o77: 077 d65:o101: 0101 d33: 33 o132: 0132 o134: 0134 o137: 0137 o155: 0155 o177: 0177 "** 01-s1.pdf page 49 o212: 0212 o375: 0375 o777: 0777 o2000: 02000 o4000: 04000 d7999: 7999 o10000: 010000 o17762: 017762 o17777: 017777 o20001: 020001 o40000: 040000 o40001: 040001 o70000: 070000 o77777: 077777 o100000: 0100000 o140000: 0140000 o200000: 0200000 o200001: 0200001 o300000: 0300000 o400000: 0400000 o500000: 0500000 o577777: 0577777 o600000: 0600000 o640000: 0640000 o700000: 0700000 o777700: 0777700 o777760: 0777760 dm3: -3 dm1: -1 9: .=.+t " per-routine temp variables c1: .=.+1 " not used? q1: q2;q2+98 " ** 90? 96?? " queue element free list? .=.+14 " queues (two words each, head and tail pointers?) " 1: tty input " 2: tty output " 3: display keyboard " 4: paper tape reader " 5: paper tape punch q2: .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;0;0 dsploc: .=.+1 dsplno: .=.+1 dspbuf: 0065057;0147740;0160000 " display commands: see 03-scope.pdf pg 20 " PARAM: clear blink, clear light pen, scale=1, intensity=3 " X-Y: invisible, no delay, Y=01740 (992) " X-Y: invisible, settling delay, X=0 .=.+30 coldentry: dzm 0100 " not re-entrant caf " clear all flags ion " enable interrupts clon " clear clock flag law 3072 " initialize display.... wcga jms dspinit law dspbuf " set display buffer to default jms movdsp cla " read system block from disk jms dskio; 06000 jms copy; dskbuf; sysdata; ulist-sysdata " copy to system data lac d3 " look for "init" in default directory jms namei; initf jms halt "** 01-s1.pdf page 50 jms iget cla jms iread; 4096; 4096 " read in "init" jmp 4096 " start process 1 . = dspbuf+dspbsz+3 dskbuf = 07700 dskbs: .=.+65+65+65+65 " ndskbs buffers (block number + block) edskbsp: . uquant: .=.+1 " number of ticks user has been running dspbufp: .=.+1 " pointer to display buffer pbsflgs: .=.+2 " buttons on last tick, last button interrupt mode: .=.+1 nttychar: .=.+1 " CR to send next, or zero npptchar: .=.+1 ttydelay: .=.+1 " delay count for TTY output name: .=.+4 lnkaddr: .=.+1 char: .=.+1 dskaddr: .=.+1 uniqpid: 1 " pid generator lu: .=.+4 " user (process) table entry copy sfiles: .=.+10 " wait addresses for special files " (bit vector of waiting processes?) " offsets: 0: ttyin, 1: ttyout, 2: keyboard, " 3: ptr, 4: ptp, 6: display dpdata: dpstat: .=.+1 dpread: .=.+1 dpwrite: .=.+1 dpchar: .=.+1 dspdata: .dspb: .=.+1 .lpba: .=.+1 "** 4 written on listing crdata: crread: .=.+1 crchar: .=.+1 sysdata: " system data 64 words saved to disk s.nxfblk: .=.+1 " pointer to next free block?? s.nfblks: .=.+1 " number of free blocks (in fblks?) s.fblks: .=.+10 " cached free block numbers s.uniq: .=.+1 " next unique value s.tim: .=.+2 " (up?)time in 60Hz ticks (low, high) " process table " first word " bits 0:2 -- status " 0: free slot " 1: in/ready " 2: in/notready " 3: out/ready " 4: out/notready?? " bits 3:17 -- disk swap address/8 " second word: process pid " third word: smes/rmes status: " 0: not waiting " -1: this process waiting (rmes) " other: complement of sender pid " fourth word: smes message ulist: 0131000;1;0;0 0031040;0;0;0 0031100;0;0;0 0031140;0;0;0 0031200;0;0;0 0031240;0;0;0 0031300;0;0;0 0031340;0;0;0 0031400;0;0;0 0031440;0;0;0 userdata: " "ustruct" (swappable) u.ac: 0 " user AC u.mq: 0 " user MQ u.rq: .=.+9 " user 010-017, user PC u.uid: -1 " user id u.pid: 1 " process id u.cdir: 3 " connected directory (inode number?) u.ulistp: ulist " pointer to process table entry u.swapret: 0 " kernel routine to resume at after swap in u.base: 0 " start of user buffer u.count: 0 " size of user buffer "** 01-s1.pdf page 51 u.limit: 0 " end of user buffer u.ofiles: .=.+30 " open files (10 "fnode" entries) u.dspbuf: 0 u.intflg: 1 .=userdata+64 ii: .=.+1 " The current i-node number stored in inode inode: " disk inode in memory: i.flags: .=.+1 " inode flags " 400000 in use " 200000 large file " 000040 special device (indicated by inum) " 000020 directory " 000010 owner read " 000004 owner write " 000002 world read " 000001 world write i.dskps: .=.+7 " disk block numbers (indirect if "large file") i.uid: .=.+1 " owner i.nlks: .=.+1 " link count (negative) i.size: .=.+1 " size (in words) i.uniq: .=.+1 " unique number .= inode+12 di: .=.+1 " directory index dnode: " directory entry: d.i: .=.+1 " inode number d.name: .=.+4 " name (space padded) d.uniq: .=.+1 " unique number from directory inode . = dnode+8 fnode: " open file entry f.flags: .=.+1 " see below f.badd: .=.+1 " offset f.i: 0 " file i-number " f.flags: " 400000 in use " 000002 read " 000001 write