From 253d9f09974cf0c37a05b043cc788ca6780043ca Mon Sep 17 00:00:00 2001 From: Warren Toomey Date: Wed, 23 Mar 2016 10:10:54 +1000 Subject: [PATCH] Some files don't need to be in build/alt --- build/alt/a.lst | 5376 -------------------------------------------- build/alt/a.rim | 1 - build/alt/image.fs | Bin 4096000 -> 0 bytes 3 files changed, 5377 deletions(-) delete mode 100644 build/alt/a.lst delete mode 100644 build/alt/a.rim delete mode 100644 build/alt/image.fs diff --git a/build/alt/a.lst b/build/alt/a.lst deleted file mode 100644 index adb4508..0000000 --- a/build/alt/a.lst +++ /dev/null @@ -1,5376 +0,0 @@ - "** 01-s1.pdf page 62 - " sop - dac = 0040000 " MEM: deposit AC - 040000 - jms = 0100000 " MEM: jump to subroutine - 100000 - dzm = 0140000 " MEM: deposit zero to memory - 140000 - lac = 0200000 " MEM: load AC - 200000 - xor = 0240000 " MEM: XOR with AC - 240000 - add = 0300000 " MEM: one's complement add - 300000 - tad = 0340000 " MEM: two's complement add - 340000 - xct = 0400000 " MEM: execute - 400000 - isz = 0440000 " MEM: increment and skip if zero - 440000 - and = 0500000 " MEM: AND - 500000 - sad = 0540000 " MEM: skip if AC different - 540000 - jmp = 0600000 " MEM: jump - 600000 - nop = 0740000 " OPR: no-op - 740000 - i = 020000 " indirect - 020000 - law = 0760000 " OPR: load accumulator with (instr) - 760000 - cma = 0740001 " OPR: complement AC - 740001 - las = 0750004 " OPR: load AC from switches - 750004 - ral = 0740010 " OPR: rotate AC left - 740010 - rar = 0740020 " OPR: rotate AC right - 740020 - hlt = 0740040 " OPR: halt - 740040 - sma = 0740100 " OPR: skip on minus AC - 740100 - sza = 0740200 " OPR: skip on zero AC - 740200 - snl = 0740400 " OPR: skip on non-zero link - 740400 - skp = 0741000 " OPR: skip unconditionally - 741000 - spa = 0741100 " OPR: skip on positive AC - 741100 - sna = 0741200 " OPR: skip on non-zero AC - 741200 - szl = 0741400 " OPR: skip on zero link - 741400 - rtl = 0742010 " OPR: rotate two left - 742010 - rtr = 0742020 " OPR: rotate two right - 742020 - cll = 0744000 " OPR: clear link - 744000 - rcl = 0744010 " OPR: clear link, rotate left - 744010 - rcr = 0744020 " OPR: clear link, rotate right - 744020 - cla = 0750000 " OPR: clear AC - 750000 - lrs = 0640500 " EAE: long right shift - 640500 - lrss = 0660500 " EAE: long right shift, signed - 660500 - lls = 0640600 " EAE: long left shift - 640600 - llss = 0660600 " EAE: long left shift, signed - 660600 - als = 0640700 " EAE: AC left shift - 640700 - alss = 0660700 " EAE: AC left shift, signed - 660700 - mul = 0653122 " EAE: multiply - 653122 - idiv = 0653323 " EAE: integer divide - 653323 - lacq = 0641002 " EAE: load AC with MQ - 641002 - clq = 0650000 " EAE: clear MQ - 650000 - omq = 0640002 " EAE: OR MQ into AC - 640002 - cmq = 0650004 " EAE: complement MQ - 650004 - lmq = 0652000 " EAE: load MQ from AC - 652000 - dscs = 0707141 " DSK: clear status register - 707141 - dslw = 0707124 " DSK: clear and load WC from AC - 707124 - dslm = 0707142 " DSK: clear and load MAC from AC - 707142 - dsld = 0707104 " DSK: clear and load TA and SA from AC - 707104 - dsls = 0707144 " DSK: load status - 707144 - dssf = 0707121 " DSK: skip on flags - 707121 - dsrs = 0707132 " DSK: read status register - 707132 - iof = 0700002 " PIC: interrupts off - 700002 - ion = 0700042 " PIC: interrupts on - 700042 - caf = 0703302 " CPU: clear all flags - 703302 - clon = 0700044 " CLK: clear flag, enable - 700044 - clsf = 0700001 " CLK: skip if overflow - 700001 - "** 01-s1.pdf page 63 - clof = 0700004 " CLK: clear flag, disable - 700004 - ksf = 0700301 " KBD: skip if flag set - 700301 - krb = 0700312 " KBD: read buffer - 700312 - tsf = 0700401 " TTY: skip if flag set - 700401 - tcf = 0700402 " TTY: clear flag - 700402 - tls = 0700406 " TTY: load buffer, select - 700406 - sck = 0704301 " G-2: skip on console keyboard - 704301 - cck = 0704304 " G-2: clear console keyboard - 704304 - lck = 0704312 " G-2: load console keyboard - 704312 - rsf = 0700101 " PTR: skip if flag set - 700101 - rsa = 0700104 " PTR: select alphanumeric mode - 700104 - rrb = 0700112 " PTR: clear flag, or read buffer - 700112 - psf = 0700201 " PTP: skip if flag set - 700201 - pcf = 0700202 " PTP: clear flag - 700202 - psa = 0700204 " PTP: alphanumeric mode - 700204 - cdf = 0700501 " G-2: clear display flags - 700501 - lds = 0701052 " G-2: load display status - 701052 - lda = 0701012 " G-2: load display address - 701012 - wcga = 0704206 " G-2: ??? - 704206 - raef = 0700742 " G-2: resume after edges flag - 700742 - rlpd = 0700723 " G-2: resume after light pen stop, disabled - 700723 - beg = 0700547 " G-2: begin - 700547 - spb = 0704401 " G-2: skip on push button flag - 704401 - cpb = 0704404 " G-2: clear push button flag - 704404 - lpb = 0704412 " G-2: load push buttons - 704412 - wbl = 0704424 " G-2: write button lights - 704424 - dprs = 0704752 " dataphone: read status - 704752 - dpsf = 0704741 " dataphone: skip on flag - 704741 - dpcf = 0704761 " dataphone: clear flag - 704761 - dprc = 0704712 " dataphone: read character - 704712 - crsf = 0706701 " CDR: skip if ready - 706701 - crrb = 0706712 " CDR: read buffer - 706712 - " S1 - .. = 0 - 000000 - t = 0 - 000000 - orig: - hlt " overwritten with interrupt return addr -000000: 740040 - jmp pibreak " dispatch to interrupt processing -000001: 603407 - . = orig+7 - 1000007 - -1 " only ever set (to -1): never read?! -000007: 777777 - . = orig+020 " syscall (CAL) and user "interrupt" processing - 1000020 - 1f " addr for "CAL I": store return here on "CAL" -000020: 000032 - iof " interrupts off -000021: 700002 - dac u.ac " save user AC -000022: 045631 - lac 020 " save user return addr -000023: 200020 - dac 1f " save as if "CAL I" -000024: 040032 - lac 1f-1 -000025: 200031 - dac 020 " restore location 20 -000026: 040020 - lac u.ac " restore user AC -000027: 205631 - jmp 1f+1 " join "CAL I" processing -000030: 600033 - 1f " literal to restore location 20 -000031: 000032 - 1: 0 " "CAL I" PC stored here -000032: 000000 - iof " interrupts off -000033: 700002 - dac u.ac " save user AC -000034: 045631 - lacq -000035: 641002 - dac u.mq " save user MQ -000036: 045632 - lac 8 -000037: 200010 - dac u.rq " save user auto-index location 8 -000040: 045633 - lac 9 -000041: 200011 - dac u.rq+1 " save user auto-index location 9 -000042: 045634 - jms copy; 10; u.rq+2; 6 " save user auto-index locations 10-15 -000043: 101667 -000044: 000012 -000045: 005635 -000046: 000006 - lac 1b " load user PC after system call -000047: 200032 - dac u.rq+8 " save user PC -000050: 045643 - -1 " load -1 -000051: 777777 - dac .savblk " set "save" flag (cleared by disk I/O?) -000052: 044072 - dac .insys " set "in system" flag -000053: 044066 - lac uquant " load user quantum count -000054: 205474 - jms betwen; d0; maxquant " check if between 0 & maxquant?? -000055: 101643 -000056: 004116 -000057: 004100 - jms swap " no: swap processes -000060: 100136 - ion " interrupts on -000061: 700042 - -1 -000062: 777777 - tad u.rq+8 " get address of system call -000063: 345643 - jms laci " load AC indirect?? -000064: 101635 - jms betwen; o20001; swn " range check -000065: 101643 -000066: 004161 -000067: 000256 - jmp badcal " bad system call -000070: 601146 - tad swp " add system call table base -000071: 340220 - dac .+1 " save as next instruction -000072: 040073 - jmp .. i " dispatch system call -000073: 620000 - . = orig+0100 - 1000100 - jmp coldentry " here to start kernel -000100: 604507 - jms halt -000101: 102254 - okexit: - dzm u.ac " 'OK' system call exit: clear user AC -000102: 145631 - sysexit: " common system call exit code - ion " enable interrupts -000103: 700042 - lac .savblk " load "save" flag -000104: 204072 - sza " is zero (cleared by disk I/O)? -000105: 740200 - jmp 1f " no: no disk I/O done? -000106: 600116 - jms copy; sysdata; dskbuf; 64 " copy system data to disk buffer -000107: 101667 -000110: 005542 -000111: 007700 -000112: 000100 - cla -000113: 750000 - jms dskio; 07000 " save to disk? -000114: 102162 -000115: 007000 - 1: - dzm .insys " clear "in system call" flag -000116: 144066 - jms chkint " pending user interrupt? -000117: 100320 - skp " no -000120: 741000 - jmp .save " yes: dump core -000121: 601151 - jms copy; u.rq+2; 10; 6 " restore auto-index locations 10-15 -000122: 101667 -000123: 005635 -000124: 000012 -000125: 000006 - lac u.rq+1 " restore auto-index location 9 -000126: 205634 - dac 9 -000127: 040011 - lac u.rq " restore auto-index location 8 -000130: 205633 - dac 8 -000131: 040010 - lac u.mq " restore MQ register -000132: 205632 - lmq -000133: 652000 - lac u.ac " restore AC register -000134: 205631 - jmp u.rq+8 i " return to user -000135: 625643 - " scheduler / idle loop - swap: 0 -000136: 000000 - ion -000137: 700042 - 1: - jms lookfor; 3 " out/ready -000140: 101066 -000141: 000003 - jmp 1f -000142: 600151 - jms lookfor; 1 " in/ready -000143: 101066 -000144: 000001 - skp -000145: 741000 - jmp 1b " loop until a process becomes ready -000146: 600140 - dzm maxquant " in/ready (self?): come back next tick! -000147: 144100 - jmp 3f -000150: 600215 - 1: " here with out/ready process - dac 9f+t " save process pointer (swapped out) in t0 -000151: 044205 - jms lookfor; 2 " in/notready " find a swapped in process to swap out? -000152: 101066 -000153: 000002 - jmp 1f -000154: 600161 - jms lookfor; 1 " in/ready -000155: 101066 -000156: 000001 - jmp 1f -000157: 600161 - jmp 2f -000160: 600177 - 1: - lac swap -000161: 200136 - dac u.swapret " return to caller when swapped back -000162: 045650 - iof -000163: 700002 - lac o200000 " change status to swapped out -000164: 204170 - tad u.ulistp i -000165: 365647 - dac u.ulistp i -000166: 065647 - ion -000167: 700042 - jms dskswap; 07000 " swap process out -000170: 102267 -000171: 007000 - lac u.dspbuf -000172: 205712 - sna " process using display?? -000173: 741200 - jmp 2f " no -000174: 600177 - law dspbuf " reset to default display buffer -000175: 764446 - jms movdsp -000176: 102615 - 2: - iof " disable interrupts -000177: 700002 - lac o600000 " change status (1->7???] -000200: 204176 - tad 9f+t i -000201: 364205 - dac 9f+t i -000202: 064205 - ion " enable interrupts -000203: 700042 - jms dskswap; 06000 " read process in? -000204: 102267 -000205: 006000 - lac u.swapret " set our return addr -000206: 205650 - dac swap " to saved return addr -000207: 040136 - lac o20 " reset maxquant to 16 ticks -000210: 204134 - dac maxquant -000211: 044100 - lac u.dspbuf -000212: 205712 - sza " using display? -000213: 740200 - "** 01-s1.pdf page 4 - jms movdsp " yes. switch to user display bufferx -000214: 102615 - 3: - dzm uquant " no. reset process tick count -000215: 145474 - iof -000216: 700002 - jmp swap i " return -000217: 620136 - t = t+1 - 000001 - swp: " system call dispatch table - jmp . " base instruction -000220: 600220 - .save; .getuid; .open; .read; .write; .creat; .seek; .tell -000221: 001151 -000222: 000426 -000223: 000626 -000224: 000724 -000225: 000773 -000226: 000660 -000227: 000431 -000230: 000461 - .close; .link; .unlink; .setuid; .rename; .exit; .time; .intrp -000231: 000720 -000232: 000467 -000233: 000542 -000234: 000561 -000235: 000567 -000236: 001163 -000237: 000610 -000240: 000257 - .chdir; .chmod; .chown; badcal; .sysloc; badcal; .capt; .rele -000241: 000615 -000242: 000407 -000243: 000421 -000244: 001146 -000245: 000262 -000246: 001146 -000247: 000377 -000250: 000403 - .status; badcal; .smes; .rmes; .fork -000251: 000352 -000252: 001146 -000253: 001225 -000254: 001177 -000255: 001111 - swn: - .-swp-1 i " count of system calls, plus indirect! -000256: 020035 - " AC/ new value for intflg (non-zero to ignore interrupt char) - " sys intrp - .intrp: - lac u.ac -000257: 205631 - dac u.intflg -000260: 045713 - jmp okexit -000261: 600102 - " syscall to retrieve system addresses (data & routines!!) - " AC/ index (1..17) - " sys sysloc - " AC/ address (or -1 on bad index) - .sysloc: - lac u.ac -000262: 205631 - and o17777 -000263: 504160 - jms betwen; d1; locn -000264: 101643 -000265: 004117 -000266: 000317 - jms error -000267: 101531 - tad locsw -000270: 340275 - dac .+1 -000271: 040272 - lac .. -000272: 200000 - dac u.ac -000273: 045631 - jmp sysexit -000274: 600103 - locsw: " table of system addresses for sysloc - lac . -000275: 200275 - iget; inode; userdata; sysdata; copy; copyz; betwen; dskrd -000276: 003017 -000277: 005732 -000300: 005631 -000301: 005542 -000302: 001667 -000303: 001712 -000304: 001643 -000305: 002116 - dskwr; dskbuf; dpdata; namei; pbsflgs; alloc; free; dspdata -000306: 002146 -000307: 007700 -000310: 005532 -000311: 002737 -000312: 005476 -000313: 001545 -000314: 001604 -000315: 005536 - crdata -000316: 005540 - locn: - .-locsw-1 -000317: 000021 - " check if "interrupt" for current process - " checks .int1 and .int2 (contain i-number of interrupt source) - " compared against process stdin - " - " call: - " .insys/ 0 - " jms chkint - " no: no interrupt, or intflg set (discards interrupt) - " yes: PI off, .insys set - chkint: 0 -000320: 000000 - lac .insys -000321: 204066 - sza " in system? -000322: 740200 - jmp chkint i " yes: return -000323: 620320 - lac .int1 " get inumber of interrupt1 source? -000324: 204067 - sna " zero? -000325: 741200 - jmp 1f " yes: skip stdin check -000326: 600331 - sad u.ofiles+2 " non-zero: compare to stdin inumber -000327: 545656 - jmp 2f " same -000330: 600341 - 1: - lac .int2 " get inum of interrupt 2 source? -000331: 204070 - sna " zero? -000332: 741200 - jmp chkint i " yes: return -000333: 620320 - sad u.ofiles+2 " non-zero: compare to stdin inumber -000334: 545656 - skp " match! -000335: 741000 - jmp chkint i " no match: return -000336: 620320 - dzm .int2 " clear int2 source -000337: 144070 - jmp 1f -000340: 600342 - 2: - dzm .int1 " clear int1 source -000341: 144067 - 1: - "** 01-s1.pdf page 5 - lac u.intflg " get user intflg -000342: 205713 - sza " zero? -000343: 740200 - jmp chkint i " no: ignore -000344: 620320 - -1 -000345: 777777 - dac .insys " set "in system" flag -000346: 044066 - ion " enable interrupts -000347: 700042 - isz chkint " give skip return -000350: 440320 - jmp chkint i -000351: 620320 - "** 01-s1.pdf page 7 - " s2 - " file status (stat) system call - " AC/ pointer to status (inode) buffer + i-num (13 words) - " sys status; dir_name_ptr; file_name_ptr - " NO_DD version: sys status; file_name_ptr - .status: - jms arg " fetch file name pointer -000352: 102625 - dac .+3 -000353: 040356 - lac u.cdir " get current working directory -000354: 205646 - jms namei; .. " look up file -000355: 102737 -000356: 000000 - jms error " not found: return error -000357: 101531 - jms iget " read file inode -000360: 103017 - lac u.ac " get user buffer pointer -000361: 205631 - and o17777 " truncate to 13 bits -000362: 504160 - jms betwen; o10000; o17762 " is user memory (but not last 14 wds)? -000363: 101643 -000364: 004156 -000365: 004157 - jms error " no: error -000366: 101531 - dac .+3 " save as copy destination -000367: 040372 - jms copy; inode; ..; 12 " copy inode to user buffer -000370: 101667 -000371: 005732 -000372: 000000 -000373: 000014 - lac d.i " copy i-num from last dnode read ?? -000374: 205747 - dac 9 i " save thru index 9 (pre-increment) ?? -000375: 060011 - jmp okexit -000376: 600102 - " capture display? - .capt: - lac u.ac " get user AC -000377: 205631 - dac u.dspbuf " save as user display buffer -000400: 045712 - jms movdsp " switch to user display buffer -000401: 102615 - jmp sysexit -000402: 600103 - " release display? - .rele: - dzm u.dspbuf " clear user display buffer pointer -000403: 145712 - law dspbuf " get default display buffer -000404: 764446 - jms movdsp " change to it -000405: 102615 - jmp sysexit -000406: 600103 - .chmod: - jms isown " check if user owns file arg -000407: 102664 - lac u.ac " get new permissions -000410: 205631 - and o17 " mask to read/write bits -000411: 504133 - lmq " save in MQ -000412: 652000 - lac i.flags " get file flags -000413: 205732 - and o777760 " clear permissions -000414: 504202 - omq " or in new permissions from MQ -000415: 640002 - dac i.flags " save in inode -000416: 045732 - jms iput " write inode back -000417: 103046 - jmp okexit -000420: 600102 - .chown: - jms isown " check if user owns file arg -000421: 102664 - lac u.ac " get new owner -000422: 205631 - dac i.uid " save in inode -000423: 045742 - jms iput " write inode back -000424: 103046 - jmp okexit -000425: 600102 - .getuid: " getuid system call - lac u.uid -000426: 205644 - dac u.ac " return u.uid in user AC -000427: 045631 - jmp sysexit -000430: 600103 - .seek: - jms seektell -000431: 102645 - tad u.base -000432: 345651 - "** 01-s1.pdf page 8 - spa -000433: 741100 - jms error -000434: 101531 - lmq -000435: 652000 - lac f.flags -000436: 205757 - and d1 -000437: 504117 - sna -000440: 741200 - jms 1f -000441: 100450 - lacq -000442: 641002 - jms betwen; d0; i.size -000443: 101643 -000444: 004116 -000445: 005744 - jms dacisize -000446: 103402 - jmp 2f -000447: 600455 - 1: - lacq -000450: 641002 - jms betwen; d0; i.size -000451: 101643 -000452: 004116 -000453: 005744 - lac i.size -000454: 205744 - 2: - dac f.badd -000455: 045760 - dac u.ac -000456: 045631 - jms fput -000457: 102402 - jmp sysexit -000460: 600103 - .tell: - jms seektell -000461: 102645 - cma -000462: 740001 - tad d1 -000463: 344117 - tad u.base -000464: 345651 - dac u.ac -000465: 045631 - jmp sysexit -000466: 600103 - .link: - jms arg " Save the argument pointers in -000467: 102625 - dac 0f "0f, 1f and 2f -000470: 040477 - jms arg -000471: 102625 - dac 1f -000472: 040502 - jms arg -000473: 102625 - dac 2f -000474: 040506 - lac u.cdir " Search the current directory -000475: 205646 - jms namei; 0:0 " for the first argument -000476: 102737 -000477: 000000 - jms error " Didn't find it -000500: 101531 - jms namei; 1:0 " In the i-num found by 1st namei, -000501: 102737 -000502: 000000 - jms error " search for 2nd argument, err not found -000503: 101531 - dac u.base " save in user data -000504: 045651 - jms copy; 2:0; name; 4 -000505: 101667 -000506: 000000 -000507: 005504 -000510: 000004 - lac u.cdir " Search the process' current directory -000511: 205646 - jms namei; name " for the third argument -000512: 102737 -000513: 005504 - skp -000514: 741000 - jms error " Error if it already exists -000515: 101531 - lac d1 -000516: 204117 - dac mode " Save mode bits for access -000517: 045500 - jms access " check access (or return error to user) -000520: 102312 - jms dslot " allocate directory slot -000521: 102463 - lac u.base " get source file i-number -000522: 205651 - jms iget " read inode in -000523: 103017 - lac ii " get the i-num -000524: 205731 - dac d.i " Save the i-num in the directory entry -000525: 045747 - jms copy; name; d.name; 4 " Copy the new link name into the directory entry -000526: 101667 -000527: 005504 -000530: 005750 -000531: 000004 - lac i.uniq " Copy the i-node unique number into -000532: 205745 - dac d.uniq " the directory entry -000533: 045754 - -1 -000534: 777777 - tad i.nlks " Decrement link count, i.e. one more link -000535: 345743 - dac i.nlks -000536: 045743 - "** 01-s1.pdf page 9 - jms iput " Save the i-node and directory entry for -000537: 103046 - jms dput " the new link -000540: 103136 - jmp okexit " and return OK -000541: 600102 - .unlink: - jms argname " fetch filename, inode -000542: 102631 - dac u.base " save i-number -000543: 045651 - lac d1 " write mode bit -000544: 204117 - dac mode " save for access call -000545: 045500 - jms access " check access or return error (reads inode) -000546: 102312 - dzm d.i " clear directory i-num -000547: 145747 - jms dput " write directory entry back -000550: 103136 - lac u.base " get i-number back -000551: 205651 - jms iget " read inode back -000552: 103017 - isz i.nlks " increment link count (kept as negative count) -000553: 445743 - jmp 1f " not zero -000554: 600557 - jms itrunc " zero links: free blocks -000555: 102675 - dzm i.flags " clear status (free inode) -000556: 145732 - 1: - jms iput " write inode back to disk -000557: 103046 - jmp sysexit -000560: 600103 - .setuid: " setuid system call - lac u.uid " load current user id -000561: 205644 - sma " negative (super user) -000562: 740100 - jms error " no: error!! -000563: 101531 - lac u.ac " load user AC -000564: 205631 - dac u.uid " save as new uid -000565: 045644 - jmp sysexit -000566: 600103 - " rename system call: - " sys rename; old_name_ptr; new_name_ptr - " Questions: - " when is directory entry read?? - " is access check on directory or src file?? - " check for existing file with new name?? - " when is directory entry written back?? - .rename: - jms arg " fetch first arg (old name pointer) -000567: 102625 - dac 0f " save for namei -000570: 040575 - jms arg " fetch second arg (new name pointer) -000571: 102625 - dac 1f " save for copy -000572: 040603 - lac u.cdir " get CWD -000573: 205646 - jms namei; 0:0 " search for (old) name -000574: 102737 -000575: 000000 - jms error " not found: return error -000576: 101531 - lac d1 " get write mode bit -000577: 204117 - dac mode " save for access call -000600: 045500 - jms access " access OK? (or return error to user) -000601: 102312 - jms copy; 1:0; d.name; 4 " copy new name into directory entry -000602: 101667 -000603: 000000 -000604: 005750 -000605: 000004 - jms dput " and write it to disk -000606: 103136 - jmp okexit -000607: 600102 - " time system call returns line (mains) frequency ticks - " high order bits returned in AC, low order in MQ - " s.tim is located in "system" block (written to disk) - " so this is a running count of uptime since first boot! - " at 60Hz, 36 bits would last 36+ years! - .time: - lac s.tim " load high order bits -000610: 205557 - dac u.ac " return in AC -000611: 045631 - lac s.tim+1 " load low order bits -000612: 205560 - dac u.mq " return in MQ -000613: 045632 - jmp sysexit -000614: 600103 - .chdir: - jms argname " fetch argument as filename -000615: 102631 - jms iget " (re)read inode(?] -000616: 103017 - lac i.flags " get flags -000617: 205732 - and o20 " get directory bit -000620: 504134 - sna " is a directory? -000621: 741200 - jms error " no: return error to user -000622: 101531 - lac ii " yes: get i-number -000623: 205731 - dac u.cdir " save as current working directory -000624: 045646 - "** 01-s1.pdf page 10 - jmp okexit -000625: 600102 - " open system call - " sys open; filename_ptr; flags (0 for read, 1 for write) - " returns w/ "fd" in AC (or -1 if not found) - .open: - jms arg " get filename -000626: 102625 - dac 0f " save for namei -000627: 040640 - jms arg " get flags -000630: 102625 - sza " zero (read) -000631: 740200 - lac d1 " no: get write mode bit -000632: 204117 - sna " non-zero (write)? -000633: 741200 - lac d2 " no: get read mode bot -000634: 204120 - dac mode " save for access call -000635: 045500 - lac u.cdir " get current working directory -000636: 205646 - jms namei; 0:0 " search for file -000637: 102737 -000640: 000000 - jms error " error: return -1 -000641: 101531 - jms iget " load inode -000642: 103017 - jms access " check access (may return w/ error to user) -000643: 102312 - lac i.flags " get file flags -000644: 205732 - and o20 " get directory bit -000645: 504134 - sna " is directory? -000646: 741200 - jmp open1 " no, join common code -000647: 600715 - lac mode " get access mode -000650: 205500 - and d1 " get write bit -000651: 504117 - sna " write access? -000652: 741200 - jmp open1 " no, continue -000653: 600715 - lac u.uid " yes: get uid? -000654: 205644 - sma " negative? (-1 is superuser) -000655: 740100 - jms error " no: return error -000656: 101531 - jmp open1 " yes: join common code -000657: 600715 - .creat: - lac d1 " mode bit 1 (write) -000660: 204117 - dac mode " save for access call -000661: 045500 - jms arg " get name pointer -000662: 102625 - dac .+2 " save for copy -000663: 040665 - jms copy; ..; name; 4 " copy filename to "name" -000664: 101667 -000665: 000000 -000666: 005504 -000667: 000004 - lac u.cdir -000670: 205646 - jms namei; name " look up in current working directory -000671: 102737 -000672: 005504 - jmp 1f " not found -000673: 600711 - jms iget " file exists: read inode -000674: 103017 - jms access " check access (or return error to user) -000675: 102312 - lac i.flags " get flags -000676: 205732 - and o20 " get directory bit -000677: 504134 - sna " is a directory? -000700: 741200 - jmp .+4 " no: skip to truncate -000701: 600705 - lac u.uid " get user -000702: 205644 - sma " is super user? -000703: 740100 - jms error " no: error -000704: 101531 - jms itrunc " yes: truncate -000705: 102675 - cla -000706: 750000 - jms dacisize " clear i.size -000707: 103402 - jmp open1 -000710: 600715 - 1: - jms access " here if not found -000711: 102312 - lac u.ac " get access bits from user AC (zero for lock!) -000712: 205631 - and o17 " mask to permissions -000713: 504133 - jms icreat -000714: 102475 - open1: " common exit for open/creat - jms fassign " assign fd slot -000715: 102327 - jms error " none free, return -1 -000716: 101531 - jmp sysexit -000717: 600103 - "** 01-s1.pdf page 11 - .close: - jms finac " get fnode (open file) for fd in user AC -000720: 103370 - dzm f.flags " clear flags -000721: 145757 - jms fput " write fnode back to u.ofiles -000722: 102402 - jmp sysexit -000723: 600103 - .read: - jms arg " get argument -000724: 102625 - and o17777 " mask to address -000725: 504160 - dac u.base " save as I/O base -000726: 045651 - jms arg " get second argument -000727: 102625 - dac u.count " save as count -000730: 045652 - lac u.base " get base -000731: 205651 - jms betwen; o10000; o17777 " end inside user memory? -000732: 101643 -000733: 004156 -000734: 004160 - jms error " no: error -000735: 101531 - tad u.count " get end of buffer -000736: 345652 - jms betwen; u.base; o17777 " inside buffer/user memory? -000737: 101643 -000740: 005651 -000741: 004160 - jms error " no: error -000742: 101531 - dac u.limit " yes: save as I/O limit -000743: 045653 - 1: - jms finac " get fnode for fd in user AC -000744: 103370 - lac f.flags " get open file flags -000745: 205757 - and d1 " get write bit -000746: 504117 - sza " open for write? -000747: 740200 - jms error " yes: error -000750: 101531 - lac i.flags " get inode flags -000751: 205732 - and o40 " get special file bit -000752: 504136 - sna " special? -000753: 741200 - jmp 1f " no -000754: 600762 - iof " yes: disable interrupts -000755: 700002 - lac ii " get i number -000756: 205731 - tad swr " add to base instruction -000757: 341324 - dac .+1 -000760: 040761 - jmp .. i " dispatch to read routine -000761: 620000 - 1: - lac u.base " get user base -000762: 205651 - dac 1f+1 " save as iread base -000763: 040770 - lac u.count " get user count -000764: 205652 - dac 1f+2 " save as iread count -000765: 040771 - lac f.badd " get file offset -000766: 205760 - 1: - jms iread; ..; .. -000767: 103266 -000770: 000000 -000771: 000000 - jmp exitrw -000772: 601034 - " write system call: - " AC/ fd - " sys write; buffer; count - " AC/ count or -1 on error - .write: - jms arg " pick up buffer -000773: 102625 - and o17777 " mask to addr -000774: 504160 - dac u.base " save as I/O base -000775: 045651 - jms arg " pick up count -000776: 102625 - dac u.count " save as count -000777: 045652 - tad u.base " add base (get limit) -001000: 345651 - jms betwen; u.base; o17777 " check between base and end of memory -001001: 101643 -001002: 005651 -001003: 004160 - jms error " no: error -001004: 101531 - dac u.limit " yes: save as limit -001005: 045653 - jms finac " get fnode with fd from user AC -001006: 103370 - lac f.flags " get open file table flags -001007: 205757 - and d1 " open for write? -001010: 504117 - sna " if yes, skip -001011: 741200 - jms error " no: error -001012: 101531 - lac i.flags " get inode flags -001013: 205732 - and o40 " get device bit -001014: 504136 - "** 01-s1.pdf page 12 - sna " special? -001015: 741200 - jmp 1f " no -001016: 601024 - iof " yes, special: turn interrupts off -001017: 700002 - lac ii " get i number -001020: 205731 - tad sww " get write routine entry addr -001021: 341324 - dac .+1 -001022: 041023 - jmp .. i " dispatch to write routine -001023: 620000 - 1: " here with regular file - lac u.base " get base -001024: 205651 - dac 1f+1 " save as iwrite arg 1 -001025: 041032 - lac u.count " get count -001026: 205652 - dac 1f+2 " save as iwrite 2 -001027: 041033 - lac f.badd " get fd offset -001030: 205760 - 1: - jms iwrite; ..; .. " write to file -001031: 103257 -001032: 000000 -001033: 000000 - exitrw: " common exit for read/write system calls - dac u.ac " save return in user AC -001034: 045631 - tad f.badd -001035: 345760 - dac f.badd " update file offset -001036: 045760 - jms iput " release inode -001037: 103046 - jms fput " release fnode -001040: 102402 - jmp sysexit " return to user -001041: 600103 - "** 01-s1.pdf page 14 - " s3 - " search for user (process) table entry - " call: - " jms searchu; worker_routine_addr - " worker called with copy of a process table entry in "lu" - " can return directly (from caller of searchu) - " index location 8 points to next process table entry - searchu: 0 -001042: 000000 - lac searchu i " fetch argument -001043: 221042 - dac 9f+t+1 " in t1 -001044: 044207 - -mnproc " loop counter -001045: 777766 - dac 9f+t " in t0 -001046: 044206 - law ulist-1 " ulist ptr -001047: 765560 - dac 8 " in index 8 -001050: 040010 - 1: - lac 8 i " copy ulist entry to lu -001051: 220010 - dac lu -001052: 045514 - lac 8 i -001053: 220010 - dac lu+1 -001054: 045515 - lac 8 i -001055: 220010 - dac lu+2 -001056: 045516 - lac 8 i -001057: 220010 - dac lu+3 -001060: 045517 - jms 9f+t+1 i " call argument as subroutine -001061: 124207 - isz 9f+t " returned: loop done? -001062: 444206 - jmp 1b " no, do it again -001063: 601051 - isz searchu " skip argument -001064: 441042 - jmp searchu i -001065: 621042 - t = t+2 - 000003 - " look for a process with matching status - " jms lookfor; status - " found: ulist ptr in AC - " not found - lookfor: 0 -001066: 000000 - jms searchu; 1f -001067: 101042 -001070: 001074 - isz lookfor " skip argument -001071: 441066 - isz lookfor " give skip return -001072: 441066 - jmp lookfor i -001073: 621066 - 1: 0 " worker called by searchu -001074: 000000 - lac lu -001075: 205514 - rtl; rtl; and o7 " bits 0:2 of lu -001076: 742010 -001077: 742010 -001100: 504125 - sad lookfor i " match argument? -001101: 561066 - skp " yes -001102: 741000 - jmp 1b i " no, return, keep going -001103: 621074 - -3 -001104: 777775 - tad 8 " roll index 8 back to this entry -001105: 340010 - and o17777 -001106: 504160 - isz lookfor " skip lookfor argument -001107: 441066 - jmp lookfor i " non-skip return -001110: 621066 - " fork system call: - " sys fork - " return at +1 in parent, child pid in AC - " return at +2 in child, parent pid in AC - .fork: - jms lookfor; 0 " not-used " find an unused process slot -001111: 101066 -001112: 000000 - skp -001113: 741000 - jms error " none found- return error -001114: 101531 - dac 9f+t " save ulist ptr in t0 -001115: 044210 - isz uniqpid " generate new pid -001116: 445513 - lac uniqpid -001117: 205513 - dac u.ac " return in child pid in AC -001120: 045631 - law sysexit -001121: 760103 - dac u.swapret " return from system call when swapped back in -001122: 045650 - lac o200000 " change process status to out/ready (1->3) -001123: 204170 - tad u.ulistp i -001124: 365647 - dac u.ulistp i -001125: 065647 - jms dskswap; 07000 " swap parent out -001126: 102267 -001127: 007000 - lac 9f+t " get unused ulist slot back -001130: 204210 - dac u.ulistp " set ulist pointer -001131: 045647 - lac o100000 " mark child in/notready? (3->2) -001132: 204166 - xor u.ulistp i -001133: 265647 - dac u.ulistp i -001134: 065647 - lac u.pid " get old (parent) pid -001135: 205645 - "** 01-s1.pdf page 15 - dac u.ac " return parent pid in AC -001136: 045631 - lac uniqpid -001137: 205513 - dac u.pid " set child pid -001140: 045645 - isz 9f+t " advance to second word in process table -001141: 444210 - dac 9f+t i " set pid in process table -001142: 064210 - isz u.rq+8 " give skip return -001143: 445643 - dzm u.intflg " clear int flag -001144: 145713 - jmp sysexit " return in child process -001145: 600103 - t= t+1 - 000004 - badcal: " bad (unimplemented) system call - clon " clear any pending clock interrupt? -001146: 700044 - -1 -001147: 777777 - dac 7 " set location 7 to -1?! -001150: 040007 - " fall into "save" system call - " Ken says save files could be resumed, and used for checkpointing! - .save: " "sys save" system call - lac d1 " get inode 1 (core file?) -001151: 204117 - jms iget -001152: 103017 - cla -001153: 750000 - jms iwrite; 4096; 4096 " dump core -001154: 103257 -001155: 010000 -001156: 010000 - jms iwrite; userdata; 64 " and user area -001157: 103257 -001160: 005631 -001161: 000100 - jms iput -001162: 103046 - .exit: - lac u.dspbuf -001163: 205712 - sna " process using display? -001164: 741200 - jmp .+3 " no -001165: 601170 - law dspbuf " yes: get default display buffer -001166: 764446 - jms movdsp " move display -001167: 102615 - jms awake -001170: 101304 - lac u.ulistp i -001171: 225647 - and o77777 " mark process table entry free -001172: 504165 - dac u.ulistp i -001173: 065647 - isz u.ulistp -001174: 445647 - dzm u.ulistp i " clear pid in process table -001175: 165647 - jms swap " find a new process to run -001176: 100136 - " exit falls into "rmes" !!! - " rmes system call - " sys smes - " returns with message delivered, or error if process does not exit - " AC/ sending pid - " MQ/ message - .rmes: - jms awake -001177: 101304 - lac o100000 " mark this process "not ready" -001200: 204166 - tad u.ulistp i " by incrementing status -001201: 365647 - dac u.ulistp i -001202: 065647 - law 2 -001203: 760002 - tad u.ulistp -001204: 345647 - dac 9f+t " pointer to msg status in proc table -001205: 044211 - -1 -001206: 777777 - dac 9f+t i " set to -1 (waiting for message) -001207: 064211 - jms swap " switch processes -001210: 100136 - law 2 -001211: 760002 - tad u.ulistp -001212: 345647 - dac 9f+t -001213: 044211 - lac 9f+t i " get msg status word -001214: 224211 - cma " complement (get sender pid) -001215: 740001 - dac u.ac " return in user AC -001216: 045631 - dzm 9f+t i " clear status word -001217: 164211 - isz 9f+t -001220: 444211 - lac 9f+t i " get message -001221: 224211 - dac u.mq " return in user MQ -001222: 045632 - dzm 9f+t i " clear message -001223: 164211 - jmp sysexit -001224: 600103 - t = t+1 - 000005 - "** 01-s1.pdf page 16 - " smes system call - " AC/ pid - " MQ/ message - " sys smes - " returns with message delivered, or error if process does not exit - .smes: - lac u.ac " get pid from user AC -001225: 205631 - sna spa " >0? -001226: 741300 - jms error " no: error -001227: 101531 - jms searchu; 1f " search for process -001230: 101042 -001231: 001237 - law 2 -001232: 760002 - tad u.ulistp -001233: 345647 - dac 9f+t -001234: 044212 - dzm 9f+t i -001235: 164212 - jms error -001236: 101531 - 1: 0 " worker for searchu -001237: 000000 - lac lu+1 " get pid -001240: 205515 - sad u.ac " match? -001241: 545631 - skp " yes -001242: 741000 - jmp 1b i " no -001243: 621237 - lac lu+2 " get mailbox status -001244: 205516 - sad dm1 " -1? -001245: 544204 - jmp 1f " yes -001246: 601265 - lac o100000 " no: bump our process status (to notready?) -001247: 204166 - tad u.ulistp i -001250: 365647 - dac u.ulistp i -001251: 065647 - law 2 -001252: 760002 - tad u.ulistp -001253: 345647 - dac 9f+t -001254: 044212 - lac u.ac -001255: 205631 - dac 9f+t i -001256: 064212 - jms swap -001257: 100136 - law 2 -001260: 760002 - tad u.ulistp -001261: 345647 - dac 9f+t -001262: 044212 - dzm 9f+t i -001263: 164212 - jmp .smes -001264: 601225 - 1: - -3 -001265: 777775 - tad 8 -001266: 340010 - dac 9f+t " pointer to dest process ulist entry -001267: 044212 - lac o700000 " complement process status? marks ready?? -001270: 204200 - tad 9f+t i -001271: 364212 - dac 9f+t i -001272: 064212 - isz 9f+t -001273: 444212 - isz 9f+t " point to mailbox word? -001274: 444212 - lac u.pid " get our pid -001275: 205645 - cma " complement -001276: 740001 - dac 9f+t i " store in mailbox?? -001277: 064212 - isz 9f+t " advance to next word -001300: 444212 - lac u.mq " get user MQ -001301: 205632 - dac 9f+t i " save as message -001302: 064212 - jmp okexit -001303: 600102 - t = t+1 - 000006 - " wake up process hanging on rmes for current process?? - awake: 0 -001304: 000000 - jms searchu; 1f -001305: 101042 -001306: 001310 - jmp awake i -001307: 621304 - 1: 0 " searchu worker -001310: 000000 - lac u.pid " get caller pid -001311: 205645 - sad lu+2 " match mailbox status? -001312: 545516 - skp " yes -001313: 741000 - jmp 1b i " no, return -001314: 621310 - -3 -001315: 777775 - tad 8 " get pointer to process table entry -001316: 340010 - dac 9f+t " save in t0 -001317: 044213 - "** 01-s1.pdf page 17 - lac o700000 -001320: 204200 - tad 9f+t i " complement process status (mark ready)?? -001321: 364213 - dac 9f+t i -001322: 064213 - jmp 1b i " return from worker -001323: 621310 - t = t+1 - 000007 - swr: - sww: - jmp .-4 i -001324: 621320 - .halt; rttyi; rkbdi; rppti; .halt -001325: 001336 -001326: 001337 -001327: 001410 -001330: 001461 -001331: 001336 - .halt; wttyo; wdspo; wppto -001332: 001336 -001333: 001357 -001334: 001451 -001335: 001475 - .halt: jms halt -001336: 102254 - " read routine for ttyin special file - rttyi: - jms chkint1 -001337: 101535 - lac d1 " ** written d3 ttyin2 -001340: 204117 - jms getchar -001341: 101745 - jmp 1f -001342: 601353 - and o177 -001343: 504147 - jms betwen; o101; o132 " upper case? -001344: 101643 -001345: 004141 -001346: 004143 - skp " no -001347: 741000 - tad o40 " yes: convert to lower -001350: 344136 - alss 9 -001351: 660711 - jmp passone -001352: 601523 - 1: - jms sleep; sfiles+0 -001353: 102434 -001354: 005520 - jms swap -001355: 100136 - jmp rttyi -001356: 601337 - " write routine for ttyout special file - wttyo: - jms chkint1 -001357: 101535 - jms forall -001360: 102412 - sna -001361: 741200 - jmp fallr -001362: 602425 - lmq -001363: 652000 - lac sfiles+1 -001364: 205521 - spa -001365: 741100 - jmp 1f -001366: 601376 - xor o400000 -001367: 244173 - dac sfiles+1 -001370: 045521 - lacq -001371: 641002 - tls " load output buffer -001372: 700406 - sad o12 " newline? -001373: 544130 - jms putcr " yes, put CR as well -001374: 104014 - jmp fallr -001375: 602425 - 1: - lacq -001376: 641002 - dac char -001377: 045511 - lac d2 "** written: d6 ttyout -001400: 204120 - jms putchar -001401: 101730 - skp -001402: 741000 - jmp fallr -001403: 602425 - jms sleep; sfiles+1 -001404: 102434 -001405: 005521 - jms swap -001406: 100136 - jmp wttyo -001407: 601357 - " read routine for (display) "keyboard" special file - rkbdi: - jms chkint1 -001410: 101535 - lac d3 -001411: 204121 - jms getchar -001412: 101745 - "** 01-s1.pdf page 18 - jmp 3f -001413: 601445 - lmq -001414: 652000 - and o155 -001415: 504146 - sad o55 -001416: 544137 - jmp 1f " -/=? map to =?-/ ??? -001417: 601425 - lacq -001420: 641002 - and o137 -001421: 504145 - sad o134 -001422: 544144 - skp " \| map to Ll ??? -001423: 741000 - jmp 2f -001424: 601430 - 1: - lacq -001425: 641002 - xor o20 -001426: 244134 - lmq -001427: 652000 - 2: - lacq -001430: 641002 - dac u.limit -001431: 045653 - 1: - jms chkint1 -001432: 101535 - lac u.limit -001433: 205653 - jms dspput -001434: 102540 - jmp 1f -001435: 601442 - jms sleep; sfiles+6 -001436: 102434 -001437: 005526 - jms swap -001440: 100136 - jmp 1b -001441: 601432 - 1: - lac u.limit -001442: 205653 - alss 9 -001443: 660711 - jmp passone -001444: 601523 - 3: - jms sleep; sfiles+2 -001445: 102434 -001446: 005522 - jms swap -001447: 100136 - jmp rkbdi -001450: 601410 - " write routine for (graphic) "display" special file - wdspo: - jms chkint1 -001451: 101535 - jms forall -001452: 102412 - jms dspput " put char (fallr "returns" here) -001453: 102540 - jmp fallr " go back for next (continuation!) -001454: 602425 - jms sleep; sfiles+6 -001455: 102434 -001456: 005526 - jms swap -001457: 100136 - jmp wdspo -001460: 601451 - " read routine for paper tape reader special file - rppti: - lac d4 -001461: 204122 - jms getchar -001462: 101745 - jmp .+3 -001463: 601466 - alss 9 -001464: 660711 - jmp passone -001465: 601523 - lac sfiles+3 -001466: 205523 - sma -001467: 740100 - rsa -001470: 700104 - 1: - jms sleep; sfiles+3 -001471: 102434 -001472: 005523 - jms swap -001473: 100136 - jmp rppti -001474: 601461 - "** 01-s1.pdf page 19 - " write routine for paper tape punch special file - wppto: - jms forall -001475: 102412 - sna -001476: 741200 - jmp fallr -001477: 602425 - lmq -001500: 652000 - lac sfiles+4 -001501: 205524 - spa -001502: 741100 - jmp 1f -001503: 601511 - xor o400000 -001504: 244173 - dac sfiles+4 -001505: 045524 - lacq -001506: 641002 - psa -001507: 700204 - jmp fallr -001510: 602425 - 1: - lacq -001511: 641002 - dac char -001512: 045511 - lac d5 -001513: 204123 - jms putchar -001514: 101730 - skp -001515: 741000 - jmp fallr -001516: 602425 - jms sleep; sfiles+4 -001517: 102434 -001520: 005524 - jms swap -001521: 100136 - jmp wppto -001522: 601475 - " common exit for special file input - passone: - sad o4000 " CTRL/D? -001523: 544154 - jmp okexit " yes: return zero -001524: 600102 - dac u.base i " no: save for user -001525: 065651 - lac d1 " return 1 -001526: 204117 - dac u.ac -001527: 045631 - jmp sysexit -001530: 600103 - error: 0 -001531: 000000 - -1 -001532: 777777 - dac u.ac -001533: 045631 - jmp sysexit -001534: 600103 - chkint1: 0 -001535: 000000 - dzm .insys -001536: 144066 - jms chkint -001537: 100320 - skp -001540: 741000 - jmp .save -001541: 601151 - -1 -001542: 777777 - dac .insys -001543: 044066 - jmp chkint1 i -001544: 621535 - "** 01-s1.pdf page 21 - " s4 - " allocate a free disk block for a file (data or indirect) - alloc: 0 -001545: 000000 - -1 " Decrement the # free block numbers in the cache -001546: 777777 - tad s.nfblks " kept at s.fblks. Jump to 1f if no free blocks left. -001547: 345543 - spa -001550: 741100 - jmp 1f -001551: 601566 - dac s.nfblks " Update the count of free block numbers -001552: 045543 - tad fblksp -001553: 344106 - jms laci -001554: 101635 - dac 9f+t -001555: 044214 - jms copyz; dskbuf; 64 -001556: 101712 -001557: 007700 -001560: 000100 - lac 9f+t -001561: 204214 - jms dskwr -001562: 102146 - dzm .savblk -001563: 144072 - lac 9f+t -001564: 204214 - jmp alloc i " Return from routine -001565: 621545 - 1: - lac s.nxfblk -001566: 205542 - sna -001567: 741200 - jms halt " OUT OF DISK -001570: 102254 - dac s.fblks -001571: 045544 - jms dskrd -001572: 102116 - lac dskbuf -001573: 207700 - dac s.nxfblk -001574: 045542 - jms copy; dskbuf+1; s.fblks+1; 9 -001575: 101667 -001576: 007701 -001577: 005545 -001600: 000011 - lac d10 -001601: 204130 - dac s.nfblks -001602: 045543 - jmp alloc+1 -001603: 601546 - " free the disk block whose number is in AC - free: 0 -001604: 000000 - lmq -001605: 652000 - lac s.nfblks -001606: 205543 - sad d10 -001607: 544130 - jmp 1f -001610: 601620 - tad fblksp -001611: 344106 - dac 9f+t -001612: 044214 - lacq -001613: 641002 - dac 9f+t i -001614: 064214 - dzm .savblk -001615: 144072 - isz s.nfblks -001616: 445543 - jmp free i -001617: 621604 - 1: - lac s.nxfblk -001620: 205542 - dac dskbuf -001621: 047700 - jms copy; s.fblks+1; dskbuf+1; 9 -001622: 101667 -001623: 005545 -001624: 007701 -001625: 000011 - lacq -001626: 641002 - dac s.nxfblk -001627: 045542 - jms dskwr -001630: 102146 - dzm .savblk -001631: 144072 - lac d1 -001632: 204117 - dac s.nfblks -001633: 045543 - jmp free i " Return from the routine -001634: 621604 - t = t+1 - 000010 - " load AC indirect (without using indirect!) - " AC/ address - " jms laci - " AC/ contents of address - laci: 0 -001635: 000000 - and o17777 " clear everything but addr -001636: 504160 - tad o200000 " make into "lac addr" -001637: 344170 - dac .+1 -001640: 041641 - lac .. " fetch -001641: 200000 - jmp laci i " return -001642: 621635 - "** 01-s1.pdf page 22 - " skip if AC between two values (inclusive) - " jms betwen; low_ptr; high_ptr - " - " - " listing has an alternate written in - " (which would require 'lac ptr' instead of 'ptr' args?) - betwen: 0 -001643: 000000 - lmq cmq " get ~AC in MQ -001644: 652004 - lac betwen i " get low_ptr -001645: 221643 - dac 9f+t -001646: 044215 - isz betwen " skip low_ptr -001647: 441643 - lacq " get ~AC (-AC-1) from MQ -001650: 641002 - tad 9f+t i " get low-AC-1 -001651: 364215 - sma " negative (AC >= low)? -001652: 740100 - jmp 1f " no, return w/o skip -001653: 601663 - lac betwen i " fetch high_ptr -001654: 221643 - dac 9f+t -001655: 044215 - isz betwen " skip high_ptr -001656: 441643 - lacq " get -AC-1 -001657: 641002 - tad 9f+t i " add to high value (high-AC-1) -001660: 364215 - cma " complement (AC-high) -001661: 740001 - spa sna " AC-high <= 0? -001662: 741300 - 1: - isz betwen " no: give happy (skip) return -001663: 441643 - lacq " restore ~AC -001664: 641002 - cma " restore AC -001665: 740001 - jmp betwen i " return w/o skip -001666: 621643 - " copy memory - " call: - " jms copy; src; dest; count - copy: 0 -001667: 000000 - -1 -001670: 777777 - tad copy i -001671: 361667 - dac 8 -001672: 040010 - isz copy -001673: 441667 - -1 -001674: 777777 - tad copy i -001675: 361667 - dac 9 -001676: 040011 - isz copy -001677: 441667 - -1 -001700: 777777 - tad copy i -001701: 361667 - cma -001702: 740001 - dac 9f+t -001703: 044215 - isz copy -001704: 441667 - 1: - lac 8 i -001705: 220010 - dac 9 i -001706: 060011 - isz 9f+t -001707: 444215 - jmp 1b -001710: 601705 - jmp copy i -001711: 621667 - " copy zeroes (clear memory) - " call: - " jms copyz; pointer; count - copyz: 0 -001712: 000000 - -1 -001713: 777777 - tad copyz i " get call PC -001714: 361712 - dac 8 " save in index (pre-increments) -001715: 040010 - isz copyz " skip pointer -001716: 441712 - -1 -001717: 777777 - tad copyz i " get count-1 -001720: 361712 - cma " get negative count -001721: 740001 - dac 9f+t " save in t0 -001722: 044215 - isz copyz " skip count -001723: 441712 - 1: - dzm 8 i " zero word -001724: 160010 - isz 9f+t " done? -001725: 444215 - jmp 1b " no: loop -001726: 601724 - jmp copyz i " return -001727: 621712 - t = t+1 - 000011 - " put queued character - " CALLED FROM PI: AVOIDS INDIRECT!! - " queue number in AC - putchar: 0 -001730: 000000 - "** 01-s1.pdf page 23 - dac 9f+t -001731: 044216 - cla -001732: 750000 - jms takeq -001733: 101757 - jmp putchar i -001734: 621730 - tad o40001 -001735: 344163 - dac .+4 -001736: 041742 - lac 9f+t -001737: 204216 - jms putq -001740: 102011 - lac char -001741: 205511 - dac q2+1 .. -001742: 044301 - isz putchar -001743: 441730 - jmp putchar i -001744: 621730 - t = t+1 - 000012 - " get queued character - " CALLED FROM PI: AVOIDS INDIRECT!! - " queue number in AC: - " 1: tty input - " 2: tty output - " 3: display keyboard - " 4: paper tape reader - " 5: paper tape punch - getchar: 0 -001745: 000000 - jms takeq -001746: 101757 - jmp i getchar -001747: 621745 - tad o200001 -001750: 344171 - dac .+3 -001751: 041754 - cla -001752: 750000 - jms putq -001753: 102011 - lac q2+1 .. -001754: 204301 - isz getchar -001755: 441745 - jmp i getchar -001756: 621745 - " CALLED FROM PI: AVOIDS INDIRECT!! - takeq: 0 -001757: 000000 - rcl -001760: 744010 - tad lacq1 -001761: 344110 - dac .+7 -001762: 041771 - tad o640000 -001763: 344177 - dac .+17 -001764: 042005 - tad d1 -001765: 344117 - dac .+14 -001766: 042004 - tad o500000 -001767: 344174 - dac .+5 -001770: 041775 - lac q1 .. -001771: 204260 - sna -001772: 741200 - jmp takeq i -001773: 621757 - dac lnkaddr -001774: 045510 - sad q1+1 .. -001775: 544261 - jmp .+5 -001776: 602003 - tad o200000 -001777: 344170 - dac .+1 -002000: 042001 - lac q2 .. -002001: 204300 - jmp .+3 -002002: 602005 - cla -002003: 750000 - dac q1+1 .. -002004: 044261 - dac q1 .. -002005: 044260 - isz takeq -002006: 441757 - lac lnkaddr -002007: 205510 - jmp i takeq -002010: 621757 - putq: 0 -002011: 000000 - rcl -002012: 744010 - tad dacq1 -002013: 344107 - dac .+14 -002014: 042032 - tad d1 -002015: 344117 - dac .+13 -002016: 042033 - tad o140000 -002017: 344167 - dac .+1 -002020: 042021 - lac q1-1 .. -002021: 204257 - "** 01-s1.pdf page 24 - sna -002022: 741200 - jmp .+6 -002023: 602031 - tad o40000 -002024: 344162 - dac .+2 -002025: 042027 - lac lnkaddr -002026: 205510 - dac q2 .. -002027: 044300 - jmp .+3 -002030: 602033 - lac lnkaddr -002031: 205510 - dac q1 .. -002032: 044260 - dac q1+1 .. -002033: 044261 - jmp putq i -002034: 622011 - srcdbs: 0 -002035: 000000 - dac 9f+t+2 "* lmq -002036: 044221 - -ndskbs -002037: 777774 - dac 9f+t -002040: 044217 - law dskbs "* -1 dac 8 written -002041: 765067 - dac 9f+t+1 "* lacq -002042: 044220 - 1: - lac 9f+t+2 "** crossed out -002043: 204221 - sad 9f+t+1 "** isz 8 written -002044: 544220 - jmp srcdbs i -002045: 622035 - law 65 "** ??? crossed out -002046: 760101 - tad 9f+t+1 "** crossed out isz 8 written -002047: 344220 - isz 9f+t+1 -002050: 444220 - isz 9f+t -002051: 444217 - jmp 1b -002052: 602043 - isz srcdbs -002053: 442035 - jmp srcdbs i -002054: 622035 - collapse: 0 -002055: 000000 - cla -002056: 750000 - jms srcdbs -002057: 102035 - jmp 1f -002060: 602063 - law dskbs -002061: 765067 - dac 9f+t+1 "** 9f+t+1 crossed out: 8 written in -002062: 044220 - 1: - lac 9f+t+1 "** 9f+t+1 crossed out: 8 written in -002063: 204220 - dac 0f+1 -002064: 042100 - tad d65 "** crossed out: d2-- original obscured -002065: 344141 - dac 0f -002066: 042077 - cma -002067: 740001 - tad d1 -002070: 344117 - tad edskbsp -002071: 345473 - and o17777 -002072: 504160 - sna -002073: 741200 - jmp 0f+3 -002074: 602102 - dac 0f+2 -002075: 042101 - jms copy; 0:..; ..; .. -002076: 101667 -002077: 000000 -002100: 000000 -002101: 000000 - -65 -002102: 777677 - tad edskbsp -002103: 345473 - dac 9f+t -002104: 044217 - tad d1 -002105: 344117 - dac 0f -002106: 042113 - lac dskaddr -002107: 205512 - dac 9f+t i -002110: 064217 - jms copy; dskbuf; 0:..; 64 -002111: 101667 -002112: 007700 -002113: 000000 -002114: 000100 - jmp collapse i -002115: 622055 - dskrd: 0 -002116: 000000 - jms betwen; d2; d7999 -002117: 101643 -002120: 004120 -002121: 004155 - "** 01-s1.pdf page 25 - jms halt -002122: 102254 - sad dskaddr -002123: 545512 - jmp dskrd i -002124: 622116 - dac dskaddr -002125: 045512 - jms srcdbs -002126: 102035 - jmp 1f -002127: 602134 - lac dskaddr -002130: 205512 - jms dskio; 06000 -002131: 102162 -002132: 006000 - jmp 2f -002133: 602144 - 1: - dzm 9f+t+1 i -002134: 164220 - law 1 -002135: 760001 - tad 9f+t+1 -002136: 344220 - dac .+2 -002137: 042141 - jms copy; ..; dskbuf; 64 -002140: 101667 -002141: 000000 -002142: 007700 -002143: 000100 - 2: - jms collapse -002144: 102055 - jmp dskrd i -002145: 622116 - " write a file block (data, inode or indirect) - " AC/ block - dskwr: 0 -002146: 000000 - jms betwen; d2; d7999 -002147: 101643 -002150: 004120 -002151: 004155 - jms halt -002152: 102254 - jms dskio; 07000 -002153: 102162 -002154: 007000 - lac dskaddr -002155: 205512 - jms srcdbs -002156: 102035 - dzm 9f+t+1 i -002157: 164220 - jms collapse -002160: 102055 - jmp dskwr i -002161: 622146 - t = t+3 - 000015 - " AC/ block - " jms dskio; dsld_bits - dskio: 0 -002162: 000000 - dac dskaddr -002163: 045512 - cll; idiv; 80 -002164: 744000 -002165: 653323 -002166: 000120 - dac 9f+t -002167: 044222 - lacq -002170: 641002 - idiv; 10 -002171: 653323 -002172: 000012 - dac 9f+t+1 -002173: 044223 - lls 22 -002174: 640626 - xor 9f+t+1 -002175: 244223 - als 8 -002176: 640710 - dac 9f+t+1 -002177: 044223 - lac 9f+t -002200: 204222 - idiv; 10 -002201: 653323 -002202: 000012 - dac 9f+t -002203: 044222 - lls 22 -002204: 640626 - xor 9f+t -002205: 244222 - xor 9f+t+1 -002206: 244223 - xor o200000 -002207: 244170 - dac 9f+t -002210: 044222 - jms dsktrans; -64; dskbuf; 9f+t; dskio -002211: 102220 -002212: 777700 -002213: 007700 -002214: 004222 -002215: 002162 - isz dskio -002216: 442162 - jmp dskio i -002217: 622162 - t = t+1 - 000016 - " called with: - " jms dsktrans; -WC; MAC; addr_ptr?; dsld_ptr - dsktrans: 0 -002220: 000000 - -10 -002221: 777766 - dac 9f+t -002222: 044223 - 1: - -1 -002223: 777777 - tad dsktrans -002224: 342220 - dac 12 -002225: 040014 - "** 01-s1.pdf page 26 - dscs " clear status register -002226: 707141 - lac 12 i -002227: 220014 - dslw " load WC -002230: 707124 - lac 12 i -002231: 220014 - dslm " load MAC -002232: 707142 - lac 12 i -002233: 220014 - jms laci -002234: 101635 - dsld " load TA & SA -002235: 707104 - dzm .dskb -002236: 144074 - lac 12 i -002237: 220014 - jms laci -002240: 101635 - jms laci -002241: 101635 - dsls " load status -002242: 707144 - lac .dskb " check for interrupt -002243: 204074 - sna -002244: 741200 - jmp .-2 -002245: 602243 - lac .dske " get status from interrupt -002246: 204075 - sma -002247: 740100 - jmp 12 i " return -002250: 620014 - isz 9f+t -002251: 444223 - jmp 1b -002252: 602223 - jms halt " 10 disk errors -002253: 102254 - t = t+1 - 000017 - halt: 0 -002254: 000000 - isz 9f+t " spin for a while (process interrupts) -002255: 444224 - jmp .-1 -002256: 602255 - iof " disable interrupts -002257: 700002 - hlt " halt -002260: 740040 - jms copy; law; 4096; 4096 " continued: copy system up to user memory? -002261: 101667 -002262: 760000 -002263: 010000 -002264: 010000 - hlt; jmp .-1 " halt for good -002265: 740040 -002266: 602265 - t = t+1 - 000020 - "** 01-s1.pdf page 28 - " s5 - " read/write a process from/to swap space - " call: - " AC/ first word of process table - " jms dskswap; DSLD bits - dskswap: 0 -002267: 000000 - cll; als 3 " get process disk address -002270: 744000 -002271: 640703 - dac 9f+t " save in t0 -002272: 044225 - jms dsktrans; -64; userdata; 9f+t; dskswap " read/write user area -002273: 102220 -002274: 777700 -002275: 005631 -002276: 004225 -002277: 002267 - lac 9f+t " get swap addr back -002300: 204225 - tad o20 " advance by 16?? -002301: 344134 - dac 9f+t " save -002302: 044225 - jms dsktrans; -4096; 4096; 9f+t; dskswap " read/write user memory -002303: 102220 -002304: 770000 -002305: 010000 -002306: 004225 -002307: 002267 - isz dskswap " skip bits -002310: 442267 - jmp dskswap i " return -002311: 622267 - t = t+1 - 000021 - access: 0 -002312: 000000 - lac i.flags " get inode flags -002313: 205732 - lmq " save in MQ -002314: 652000 - lac u.uid " get user id -002315: 205644 - spa " negative? -002316: 741100 - jmp access i " yes: super user, return -002317: 622312 - sad i.uid " compare to file owner -002320: 545742 - lrs 2 " same: shift flags down two -002321: 640502 - lacq " get inode flags back -002322: 641002 - and mode " AND with mode from system call -002323: 505500 - sza " access allowed? -002324: 740200 - jmp access i " yes: return -002325: 622312 - jms error " no: return error from system call -002326: 101531 - fassign: 0 -002327: 000000 - -10 " loop count -002330: 777766 - dac 9f+t " in t0 -002331: 044226 - 1: - lac 9f+t " get count -002332: 204226 - tad d10 " turn into fd -002333: 344130 - jms fget " fetch open file into "fnode" -002334: 102360 - jms halt " will not happen -002335: 102254 - lac f.flags " get fnode flags -002336: 205757 - sma " sign bit set (active)? -002337: 740100 - jmp 1f " no: free -002340: 602344 - isz 9f+t " increment loop count & loop until zero -002341: 444226 - jmp 1b -002342: 602332 - jmp fassign i -002343: 622327 - 1: - lac mode " get mode from system call -002344: 205500 - xor o400000 " set sign bit -002345: 244173 - dac f.flags " save in fnode -002346: 045757 - lac ii " get i-number -002347: 205731 - dac f.i " save in fnode -002350: 045761 - lac 9f+t -002351: 204226 - tad d10 " get fd -002352: 344130 - dac u.ac " return in user AC -002353: 045631 - dzm f.badd " clear file offset in fnode -002354: 145760 - jms fput " copy fnode back into u.ofiles -002355: 102402 - isz fassign " give skip return -002356: 442327 - jmp fassign i -002357: 622327 - t = t+1 - 000022 - " load fnode (open file entry) from u.ofiles - " AC/ user fd - " jms fget - " bad fd - " return with fnode set - fget: 0 -002360: 000000 - jms betwen; d0; d9 " fd 0..9? -002361: 101643 -002362: 004116 -002363: 004127 - jmp fget i " no, return -002364: 622360 - cll; mul; 3 " multiply by three -002365: 744000 -002366: 653122 -002367: 000003 - lacq -002370: 641002 - "** 01-s1.pdf page 29 - tad ofilesp " get pointer into u.ofiles -002371: 344101 - dac 9f+t " save in t0 -002372: 044227 - dac .+2 " save as copy source -002373: 042375 - jms copy; ..; fnode; 3 " copy to "fnode" -002374: 101667 -002375: 000000 -002376: 005757 -002377: 000003 - isz fget " give skip return -002400: 442360 - jmp fget i -002401: 622360 - " copy fnode back to u.ofiles - " uses temp value set by "fget" - " (fget and fput calls must be paired) - fput: 0 -002402: 000000 - lac 9f+t -002403: 204227 - dac .+3 -002404: 042407 - jms copy; fnode; ..; 3 -002405: 101667 -002406: 005757 -002407: 000000 -002410: 000003 - jmp fput i -002411: 622402 - t = t+1 - 000023 - " helper for special device write routines - " return to caller with next character to write: - " when done return character count to user. - forall: 0 -002412: 000000 - lac u.base -002413: 205651 - sad u.limit -002414: 545653 - jmp 1f " done -002415: 602431 - lac u.base " get base pointer (again?) -002416: 205651 - ral " rotate MSB into LINK -002417: 740010 - lac u.base i " fetch word via base pointer -002420: 225651 - snl " link set? -002421: 740400 - lrs 9 " no: get low 9 bits -002422: 640511 - and o777 " mask to 9 bits -002423: 504152 - jmp forall i " return char -002424: 622412 - fallr: " jump here for subsequent characters - lac u.base " get base -002425: 205651 - add o400000 " advance pointer -002426: 304173 - dac u.base " start from top -002427: 045651 - jmp forall+1 -002430: 602413 - 1: - lac u.count -002431: 205652 - dac u.ac -002432: 045631 - jmp sysexit -002433: 600103 - " wait for a condition variable - " call: - " jmr sleep; sfiles+N - sleep: 0 -002434: 000000 - law ulist-1 " pointer to process table -002435: 765560 - dac 8 " in index register -002436: 040010 - lac o200000 -002437: 204170 - lmq " get 200000 in MQ -002440: 652000 - 1: - lac u.ulistp i " get current process status word -002441: 225647 - sad 8 i " compare to next process table entry -002442: 560010 - jmp 1f " match -002443: 602452 - isz 8 " no match: skip other 3 words of process table -002444: 440010 - isz 8 -002445: 440010 - isz 8 -002446: 440010 - cla; lrs 1 " shift MQ down one -002447: 750000 -002450: 640501 - jmp 1b " loop -002451: 602441 - 1: - tad o100000 " mark process not ready -002452: 344166 - dac u.ulistp i -002453: 065647 - lac sleep i " get sleep variable pointer -002454: 222434 - dac 9f+t -002455: 044230 - lac 9f+t i " get sleep variable contents -002456: 224230 - omq " or in MQ (bit vector of processes waiting) -002457: 640002 - dac 9f+t i " save -002460: 064230 - isz sleep " skip sleep variable pointer -002461: 442434 - jmp sleep i -002462: 622434 - t = t+1 - 000024 - "** 01-s1.pdf page 30 - " look for a free directory entry?? - dslot: 0 -002463: 000000 - dzm di -002464: 145746 - skp -002465: 741000 - 1: - isz di -002466: 445746 - lac di -002467: 205746 - jms dget " get directory entry -002470: 103104 - lac d.i " get i number -002471: 205747 - sza " zero (free)? -002472: 740200 - jmp 1b " no keep looking -002473: 602466 - jmp dslot i " yes: return index -002474: 622463 - " called with: - " AC/ mode - " name/ file name - icreat: 0 -002475: 000000 - dac 9f+t " save mode in t0 -002476: 044231 - jms dslot -002477: 102463 - lac o20 " look for a free inode starting at 17 -002500: 204134 - dac ii -002501: 045731 - 1: - isz ii -002502: 445731 - lac ii -002503: 205731 - jms iget -002504: 103017 - lac i.flags -002505: 205732 - spa " "in use" bit bit clear? -002506: 741100 - jmp 1b " no, guess again -002507: 602502 - lac ii -002510: 205731 - dac d.i -002511: 045747 - jms copy; name; d.name; 4 -002512: 101667 -002513: 005504 -002514: 005750 -002515: 000004 - isz s.uniq " get a new unique number -002516: 445556 - lac s.uniq -002517: 205556 - dac d.uniq " save in directory entry -002520: 045754 - dac i.uniq " and inode -002521: 045745 - lac 9f+t " get mode -002522: 204231 - xor o400000 " set "in use" -002523: 244173 - dac i.flags -002524: 045732 - lac u.uid " get user -002525: 205644 - dac i.uid " set owner -002526: 045742 - -1 -002527: 777777 - dac i.nlks " -1 links?! -002530: 045743 - dzm i.size " empty -002531: 145744 - jms copyz; i.dskps; 7 " clear disk block numbers -002532: 101712 -002533: 005733 -002534: 000007 - jms iput " write inode -002535: 103046 - jms dput " write directory entry -002536: 103136 - jmp icreat i -002537: 622475 - t = t+1 - 000025 - " output character to display - dspput: 0 -002540: 000000 - and o177 " mask to 7 bits -002541: 504147 - sna -002542: 741200 - jmp i dspput " discard NUL -002543: 622540 - sad o14 " Form Feed? -002544: 544131 - jmp 1f " yes -002545: 602560 - lmq " save char in MQ -002546: 652000 - sad o12 " newline? -002547: 544130 - jms dspnl " yes -002550: 102574 - lac dsploc i " get display word -002551: 224444 - sad o400000 " TRAP? -002552: 544173 - jmp dspleft " yes (first character) -002553: 602562 - omq " no: or in second character -002554: 640002 - dac dsploc i " save both characters -002555: 064444 - isz dsploc " advance display pointer -002556: 444444 - jmp i dspput -002557: 622540 - "** 01-s1.pdf page 31 - 1: " here on form feed - jms dspinit " clear display -002560: 102606 - jmp dspput i -002561: 622540 - dspleft: - lac dsploc " get display pointer -002562: 204444 - sad edspbuf " end of the buffer? -002563: 544104 - jmp 1f " yes: light up a button!? -002564: 602602 - dac 8 " no: store in index -002565: 040010 - lac o400000 " get TRAP instruction -002566: 204173 - dac 8 i " store as next -002567: 060010 - cla; llss 18+7 " shift MQ upto "char1" position -002570: 750000 -002571: 660631 - dac dsploc i " store word with char1 -002572: 064444 - jmp dspput i -002573: 622540 - dspnl: 0 " only called once! -002574: 000000 - lac dsplno " get display line number -002575: 204445 - sad d33 " 33? -002576: 544142 - jmp 1f " yes: light a button! -002577: 602602 - isz dsplno " no: increment line number -002600: 444445 - jmp dspnl i -002601: 622574 - 1: - lac o2000 " get bit for push button 7 -002602: 204153 - wbl " write button lights -002603: 704424 - isz dspput -002604: 442540 - jmp dspput i -002605: 622540 - dspinit: 0 -002606: 000000 - lac dspbufp3 " get pointer to dspbuf+3 -002607: 204105 - dac dsploc " store location -002610: 044444 - lac o400000 " display "TRAP" instruction (end of list) -002611: 204173 - dac dspbuf+3 " save in buffer -002612: 044451 - dzm dsplno " clear display line number -002613: 144445 - jmp dspinit i -002614: 622606 - " "move display" (change display buffer pointer) - " called with new buffer pointer in AC?? - movdsp: 0 -002615: 000000 - iof -002616: 700002 - cdf -002617: 700501 - dac dspbufp -002620: 045475 - -1 -002621: 777777 - dac .dspb -002622: 045536 - ion -002623: 700042 - jmp movdsp i -002624: 622615 - " fetch user argument from word after "sys" call, return in AC - arg: 0 -002625: 000000 - lac u.rq+8 i " fetch word after return PC -002626: 225643 - isz u.rq+8 " bump PC -002627: 445643 - jmp arg i -002630: 622625 - " fetch user pathname argument from pointer word after "sys" call - " into "name" and look it up (in current working directory) - " if lookup fails: returns error to user (not caller) - " if lookup OK: returns with file i-inode read (into "inode") - " and i-number in AC - argname: 0 -002631: 000000 - jms arg " fetch name pointer -002632: 102625 - dac .+2 " save as copy source -002633: 042635 - jms copy; ..; name; 4 " copy to "name" -002634: 101667 -002635: 000000 -002636: 005504 -002637: 000004 - lac u.cdir " get CWD -002640: 205646 - jms namei; name " look up file -002641: 102737 -002642: 005504 - jms error " failed: return error directly to user -002643: 101531 - jmp argname i -002644: 622631 - seektell: 0 -002645: 000000 - jms arg -002646: 102625 - dac u.base -002647: 045651 - "** 01-s1.pdf page 32 - jms arg -002650: 102625 - dac u.limit -002651: 045653 - jms finac -002652: 103370 - lac u.limit -002653: 205653 - sna -002654: 741200 - jmp seektell i -002655: 622645 - sad d1 -002656: 544117 - jmp .+3 -002657: 602662 - lac i.size -002660: 205744 - jmp seektell i -002661: 622645 - lac f.badd -002662: 205760 - jmp seektell i -002663: 622645 - " system call helper - " fetch system call argument name pointer from after "sys" call - " read inode; if current user is not owner, return error to user - isown: 0 -002664: 000000 - jms argname -002665: 102631 - jms iget -002666: 103017 - lac u.uid " get user id -002667: 205644 - sma " super user? -002670: 740100 - sad i.uid " no: does user own file? -002671: 545742 - skp " yes, or super user -002672: 741000 - jms error " not super user, not owner: return error -002673: 101531 - jmp isown i -002674: 622664 - "** 01-s1.pdf page 34 - " s6 - itrunc: 0 -002675: 000000 - -7 " loop 7 times -002676: 777771 - dac 9f+t " in t0 -002677: 044232 - lac idskpp " pointer to inode block numbers -002700: 204102 - dac 9f+t+1 " save in t1 -002701: 044233 - 1: " top of loop for inode blocks - lac 9f+t+1 i " fetch next block number -002702: 224233 - sna " allocated? -002703: 741200 - jmp 4f " no -002704: 602730 - lac i.flags " check flags -002705: 205732 - and o200000 -002706: 504170 - sna " large file? -002707: 741200 - jmp 3f " no -002710: 602725 - -64 " loop 64 times -002711: 777700 - dac 9f+t+2 " save count in t2 -002712: 044234 - lac dskbufp " get pointer to dskbuf -002713: 204103 - dac 9f+t+3 " in t3 -002714: 044235 - 2: " inner loop for indirect blocks - lac 9f+t+1 i " get indirect block number -002715: 224233 - jms dskrd " read it -002716: 102116 - lac 9f+t+3 i " read block number from indirect -002717: 224235 - sza " free? -002720: 740200 - jms free " no: free it -002721: 101604 - isz 9f+t+3 " increment pointer into indirect block -002722: 444235 - isz 9f+t+2 " increment loop counter, skip if done -002723: 444234 - jmp 2b " not done: loop -002724: 602715 - 3: " here with small file - lac 9f+t+1 i " load block number -002725: 224233 - jms free " free it -002726: 101604 - dzm 9f+t+1 i " clear block number -002727: 164233 - 4: " bottom of loop for inode block ptrs - isz 9f+t+1 " increment block pointer -002730: 444233 - isz 9f+t " increment count, skip if done -002731: 444232 - jmp 1b " not done -002732: 602702 - lac i.flags -002733: 205732 - and o577777 " clear large file flag -002734: 504175 - dac i.flags -002735: 045732 - jmp itrunc i -002736: 622675 - t = t+4 - 000031 - " Given a pointer to a 4-word filename after - " the jms to namei, and with AC holding the - " i-num of the directory it is in, return the - " i-number of the filename (and skip) - " return zero in AC if not found (no skip) - namei: 0 -002737: 000000 - jms iget " Get the inode from the i-num in the AC -002740: 103017 - -1 -002741: 777777 - tad namei i " get argptr-1 -002742: 362737 - dac 9f+t+1 " save in t1 -002743: 044237 - isz namei " skip over argument -002744: 442737 - lac i.flags -002745: 205732 - and o20 " get directory bit -002746: 504134 - sna " Is this a directory? -002747: 741200 - jmp namei i " no: return without skip -002750: 622737 - -8 -002751: 777770 - tad i.size " Subtract 8 from the file's size -002752: 345744 - cma -002753: 740001 - lrss 3 -002754: 660503 - dac 9f+t " negative count of directory entries in t0 -002755: 044236 - sna " any? -002756: 741200 - jmp namei i " no: return without skip -002757: 622737 - dzm di " Store zero in di -002760: 145746 - 1: - lac di -002761: 205746 - "** 01-s1.pdf page 35 - jms dget " Get a directory entry from the dirblock -002762: 103104 - lac d.i " get i-num -002763: 205747 - sna " in use? -002764: 741200 - jmp 2f " no -002765: 603013 - lac 9f+t+1 " get argptr-1 -002766: 204237 - dac 8 -002767: 040010 - lac d.name " Compare the four words of the filename in the -002770: 205750 - sad 8 i " directory entry with the argument to namei -002771: 560010 - skp -002772: 741000 - jmp 2f " No match -002773: 603013 - lac d.name+1 -002774: 205751 - sad 8 i -002775: 560010 - skp -002776: 741000 - jmp 2f " No match -002777: 603013 - lac d.name+2 -003000: 205752 - sad 8 i -003001: 560010 - skp -003002: 741000 - jmp 2f " No match -003003: 603013 - lac d.name+3 -003004: 205753 - sad 8 i -003005: 560010 - skp -003006: 741000 - jmp 2f " No match -003007: 603013 - lac d.i " A match. Get the i-number into AC -003010: 205747 - isz namei " give skip return -003011: 442737 - jmp namei i -003012: 622737 - 2: - isz di " No match, move up to the next direntry -003013: 445746 - isz 9f+t " any left? -003014: 444236 - jmp 1b " yes: keep going -003015: 602761 - jmp namei i " Didn't find it, return zero in AC (without skip) -003016: 622737 - t = t+2 - 000033 - " Given an i-number in AC, fetch that i-node - " from disk and store it in the inode buffer - iget: 0 -003017: 000000 - dac ii " Store the i-number in ii -003020: 045731 - cll; idiv; 5 " Divide by 5: 5 inodes in a block -003021: 744000 -003022: 653323 -003023: 000005 - dac 9f+t " Store the remainder in 9f+t: the i-node -003024: 044240 - lacq " number within the block -003025: 641002 - tad d2 " Add 2 to the quotient to get the block number -003026: 344120 - dac 9f+t+1 " and store in 9f+t+1 -003027: 044241 - jms dskrd " Get the block -003030: 102116 - lac 9f+t -003031: 204240 - cll; mul; 12 " Multiply the i-num within the block by 12 -003032: 744000 -003033: 653122 -003034: 000014 - lacq " to get the offset into the block -003035: 641002 - tad dskbufp " Add on the base of the disk buffer -003036: 344103 - dac 9f+t -003037: 044240 - dac .+2 -003040: 043042 - jms copy; ..; inode; 12 " Copy 12 words from buffer to inode -003041: 101667 -003042: 000000 -003043: 005732 -003044: 000014 - jmp iget i " and return -003045: 623017 - iput: 0 -003046: 000000 - lac 9f+t+1 -003047: 204241 - jms dskrd -003050: 102116 - law inode-1 -003051: 765731 - dac 8 -003052: 040010 - -1 -003053: 777777 - tad 9f+t -003054: 344240 - dac 9 -003055: 040011 - -12 -003056: 777764 - dac 9f+t+2 -003057: 044242 - 1: - lac 8 i -003060: 220010 - "** 01-s1.pdf page 36 - sad 9 i -003061: 560011 - skp -003062: 741000 - jmp 2f -003063: 603067 - isz 9f+t+2 -003064: 444242 - jmp 1b -003065: 603060 - jmp iput i -003066: 623046 - 2: - -1 -003067: 777777 - tad 8 -003070: 340010 - dac 8 -003071: 040010 - -1 -003072: 777777 - tad 9 -003073: 340011 - dac 9 -003074: 040011 - 1: - lac 8 i -003075: 220010 - dac 9 i -003076: 060011 - isz 9f+t+2 -003077: 444242 - jmp 1b -003100: 603075 - lac 9f+t+1 -003101: 204241 - jms dskwr -003102: 102146 - jmp iput i -003103: 623046 - t = t+3 - 000036 - " allocate directory entry - " AC/ entry number - dget: 0 -003104: 000000 - dac di " save entry number -003105: 045746 - alss 3 " get word number -003106: 660703 - dac 9f+t " save in t0 -003107: 044243 - jms pget " get free disk block -003110: 103152 - dac 9f+t+1 " save in t1 -003111: 044244 - jms dskrd -003112: 102116 - lac 9f+t -003113: 204243 - and o77 -003114: 504140 - tad dskbufp -003115: 344103 - dac 9f+t+2 -003116: 044245 - dac .+2 -003117: 043121 - jms copy; ..; dnode; 8 -003120: 101667 -003121: 000000 -003122: 005747 -003123: 000010 - lac 9f+t -003124: 204243 - tad d8 -003125: 344126 - jms betwen; d0; i.size -003126: 101643 -003127: 004116 -003130: 005744 - skp -003131: 741000 - jmp dget i -003132: 623104 - jms dacisize -003133: 103402 - dzm d.i -003134: 145747 - jmp dget i -003135: 623104 - dput: 0 -003136: 000000 - lac 9f+t+1 -003137: 204244 - jms dskrd -003140: 102116 - lac 9f+t+2 -003141: 204245 - dac .+3 -003142: 043145 - jms copy; dnode; ..; 8 -003143: 101667 -003144: 005747 -003145: 000000 -003146: 000010 - lac 9f+t+1 -003147: 204244 - jms dskwr -003150: 102146 - jmp dput i -003151: 623136 - t = t+3 - 000041 - " get a block number for a file, returns disk block number - " allocates block if not allocated - " AC/ file offset - " jms pget - " AC/ disk block number - pget: 0 -003152: 000000 - lrss 6 " convert offset to block -003153: 660506 - dac 9f+t " save as t0 -003154: 044246 - lac i.flags -003155: 205732 - "** 01-s1.pdf page 37 - and o200000 -003156: 504170 - sza " large file bit set? -003157: 740200 - jmp 2f " yes -003160: 603220 - lac 9f+t " no: small file -003161: 204246 - jms betwen; d0; d6 " block 0..6? -003162: 101643 -003163: 004116 -003164: 004124 - jmp 1f " no -003165: 603175 - tad idskpp " make into block number pointer -003166: 344102 - dac 9f+t " save in t0 -003167: 044246 - lac 9f+t i " get disk block number -003170: 224246 - sna " allocated? -003171: 741200 - jms alloc " no: allocate now -003172: 101545 - dac 9f+t i " save (new) disk block number -003173: 064246 - jmp pget i " return disk block number -003174: 623152 - 1: " here when file block>=7, not "large" - jms alloc " allocate indirect block -003175: 101545 - dac 9f+t+1 " save as t1 -003176: 044247 - jms copy; i.dskps; dskbuf; 7 " copy all the disk block numbers -003177: 101667 -003200: 005733 -003201: 007700 -003202: 000007 - jms copyz; dskbuf+7; 64-7 " zero rest of indirect block -003203: 101712 -003204: 007707 -003205: 000071 - lac 9f+t+1 " get indirect block number back -003206: 204247 - jms dskwr " write indirect block to disk -003207: 102146 - lac 9f+t+1 -003210: 204247 - dac i.dskps " save indirect as new first block -003211: 045733 - jms copyz; i.dskps+1; 6 " zero rest of block pointers -003212: 101712 -003213: 005734 -003214: 000006 - lac i.flags -003215: 205732 - xor o200000 " set "large file" -003216: 244170 - dac i.flags -003217: 045732 - 2: " here with "large file" - lac 9f+t " get file block number -003220: 204246 - lrss 6 " divide by 64 (indirects/block) -003221: 660506 - jms betwen; d0; d6 " ok now? -003222: 101643 -003223: 004116 -003224: 004124 - jms halt " file too big " no, you lose! -003225: 102254 - tad idskpp " yes: get indirect block pointer -003226: 344102 - dac 9f+t+1 " save in t1 -003227: 044247 - lac 9f+t+1 i " get indirect block number -003230: 224247 - sna " allocated? -003231: 741200 - jms alloc " no, get it now -003232: 101545 - dac 9f+t+1 i " save (new) indirect block -003233: 064247 - dac 9f+t+2 " save as t2 -003234: 044250 - jms dskrd " read indirect block -003235: 102116 - lac 9f+t " get original block number -003236: 204246 - and o77 " mod by 64 -003237: 504140 - tad dskbufp " get pointer to disk block number -003240: 344103 - dac 9f+t+1 " save as t1 -003241: 044247 - lac 9f+t+1 i " fetch disk block number -003242: 224247 - sza " allocated? -003243: 740200 - jmp pget i " yes: return -003244: 623152 - jms alloc " no: allocate data block -003245: 101545 - dac 9f+t " save as t0 -003246: 044246 - lac 9f+t+2 " get indirect block number -003247: 204250 - jms dskrd " read it in -003250: 102116 - lac 9f+t " get data block number -003251: 204246 - dac 9f+t+1 i " save data block number -003252: 064247 - lac 9f+t+2 -003253: 204250 - jms dskwr " write indirect block back -003254: 102146 - lac 9f+t " get data block back -003255: 204246 - jmp pget i " return it -003256: 623152 - t = t+3 - 000044 - iwrite: 0 -003257: 000000 - dac 9f+t " save arg in t0 -003260: 044251 - lac iwrite " load return address -003261: 203257 - "** 01-s1.pdf page 38 - dac iread " save as iread return addr -003262: 043266 - lac cskp " load skip instruction -003263: 203335 - dac iwrite " save as iwrite instruction -003264: 043257 - jmp 1f -003265: 603272 - " iread from file referenced by loaded inode - " AC/ file offset - " jms iread; addr; count - iread: 0 -003266: 000000 - dac 9f+t " save offset in t0 -003267: 044251 - lac cnop " get nop -003270: 203442 - dac iwrite " save as iwrite instruction -003271: 043257 - 1: - -1 -003272: 777777 - tad iread i " get word before return addr -003273: 363266 - dac 10 " store in index 10 & 11 -003274: 040012 - dac 11 -003275: 040013 - isz iread " increment return addr -003276: 443266 - lac iread i " load addr -003277: 223266 - dac 9f+t+1 " save in t1 -003300: 044252 - isz iread " increment return addr -003301: 443266 - lac o70000 -003302: 204164 - xct iwrite " skip if write -003303: 403257 - lac i.size " read: get file size -003304: 205744 - cma -003305: 740001 - tad 9f+t " add offset -003306: 344251 - cma -003307: 740001 - jms betwen; d0; 9f+t+1 -003310: 101643 -003311: 004116 -003312: 004252 - lac 9f+t+1 -003313: 204252 - dac 9f+t+2 -003314: 044253 - cma -003315: 740001 - tad d1 -003316: 344117 - sna -003317: 741200 - jmp iread i -003320: 623266 - dac 9f+t+1 -003321: 044252 - 1: - lac 9f+t -003322: 204251 - jms pget -003323: 103152 - dac 9f+t+3 -003324: 044254 - jms dskrd -003325: 102116 - lac 9f+t -003326: 204251 - and o77 -003327: 504140 - tad dskbufp -003330: 344103 - tad dm1 -003331: 344204 - xct iwrite -003332: 403257 - jmp .+3 -003333: 603336 - dac 10 -003334: 040012 - cskp: - skp -003335: 741000 - dac 11 -003336: 040013 - 2: - lac 11 i -003337: 220013 - dac 10 i -003340: 060012 - isz 9f+t -003341: 444251 - isz 9f+t+1 -003342: 444252 - jmp 3f -003343: 603357 - xct iwrite -003344: 403257 - jmp 4f -003345: 603355 - lac 9f+t -003346: 204251 - jms betwen; d0; i.size -003347: 101643 -003350: 004116 -003351: 005744 - dac i.size -003352: 045744 - lac 9f+t+3 -003353: 204254 - jms dskwr -003354: 102146 - 4: - "** 01-s1.pdf page 38 - lac 9f+t+2 -003355: 204253 - jmp iread i -003356: 623266 - 3: - lac 9f+t -003357: 204251 - and o77 -003360: 504140 - sza -003361: 740200 - jmp 2b -003362: 603337 - xct iwrite -003363: 403257 - jmp 1b -003364: 603322 - lac 9f+t+3 -003365: 204254 - jms dskwr -003366: 102146 - jmp 1b -003367: 603322 - t = t+4 - 000050 - " system call helper - " AC/ fd - " jms finac - " return with: fnode and inode loaded - " or makes error return to user - finac: 0 -003370: 000000 - lac u.ac -003371: 205631 - jms fget -003372: 102360 - jms error -003373: 101531 - lac f.flags -003374: 205757 - sma -003375: 740100 - jms error -003376: 101531 - lac f.i -003377: 205761 - jms iget -003400: 103017 - jmp finac i -003401: 623370 - " update inode file size with value in AC - dacisize: 0 -003402: 000000 - dac i.size -003403: 045744 - jms iput -003404: 103046 - lac i.size -003405: 205744 - jmp dacisize i -003406: 623402 - "** 01-s1.pdf page 41 - " s7 - pibreak: " priority interrupt break processing "chain" - dac .ac " save interrupt AC -003407: 044071 - "** CROSSED OUT.... - dpsf -003410: 704741 - jmp 1f " disable the Graphics-2 I/O -003411: 603432 - dpcf -003412: 704761 - dprs -003413: 704752 - dac dpstat -003414: 045532 - sma ral -003415: 740110 - jmp 2f -003416: 603425 - dprc -003417: 704712 - dac dpchar -003420: 045535 - -1 -003421: 777777 - dac dpread -003422: 045533 - lac dpstat -003423: 205532 - ral -003424: 740010 - 2: - sma -003425: 740100 - jmp piret -003426: 603755 - -1 -003427: 777777 - dac dpwrite -003430: 045534 - jmp piret "** END OF CROSSOUT -003431: 603755 - 1: clsf " clock overflow (line frequency ticks)? -003432: 700001 - jmp 1f " no -003433: 603466 - lpb " load display push buttons -003434: 704412 - dac pbsflgs " save -003435: 045476 - isz s.tim+1 " increment low order tick count -003436: 445560 - skp " no overflow, skip second increment -003437: 741000 - isz s.tim " low order overflowed, increment high order count -003440: 445557 - isz uquant " increment user quantum counter -003441: 445474 - "** written: ttydelay -> ttyd1 - "** written: ttyrestart -> ttyres1 - cnop: " fetched as constant in iread - nop -003442: 740000 - -1 -003443: 777777 - dac 7 " set location 7 to -1 (nothing ever clears it) -003444: 040007 - clon " enable clock interrupts, reset flag -003445: 700044 - lac ttydelay " tty delay positive? -003446: 205503 - spa " yes: skip to skp -003447: 741100 - isz ttydelay " no: done delaying? -003450: 445503 - skp " not done -003451: 741000 - jms ttyrestart " yes: start output -003452: 103572 - "** START CROSSED OUT: written: lac tty - lac .dspb -003453: 205536 - sna -003454: 741200 - jmp piret -003455: 603755 - isz .dsptm -003456: 444073 - skp -003457: 741000 - jmp dsprestart -003460: 603512 - sad d3 -003461: 544121 - jmp piret -003462: 603755 - isz .dspb -003463: 445536 - jmp piret -003464: 603755 - jmp dsprestart "** END CROSSED OUT -003465: 603512 - 1: dssf " disk flag set? -003466: 707121 - jmp 1f " no -003467: 603476 - -1 " set .dskb = -1 -003470: 777777 - dac .dskb -003471: 044074 - "** 01-s1.pdf page 42 - dsrs " get disk status in .dske -003472: 707132 - dac .dske -003473: 044075 - dscs " clear status register -003474: 707141 - jmp piret -003475: 603755 - "** BEGIN CROSSED OUT - 1: lds " load display status (see 03-scope.pdf pg 25) -003476: 701052 - sma ral " display trap set? (and rotate left) -003477: 740110 - jmp 1f " not set -003500: 603521 - cdf " display done executing; clear display flags -003501: 700501 - lac .dspb -003502: 205536 - sna -003503: 741200 - jmp piret " return now if .dspb == 0 -003504: 603755 - tad dm3 -003505: 344203 - sna -003506: 741200 - jmp dsprestart " start display if .dspb == 3 -003507: 603512 - dac .dspb " otherwise, .dspb -= 3 and return -003510: 045536 - jmp piret -003511: 603755 - dsprestart: - lac d1 -003512: 204117 - dac .dspb " set .dspb = 1 -003513: 045536 - lac dspbufp " load display buf pointer -003514: 205475 - beg " start display processor -003515: 700547 - -10 -003516: 777766 - dac .dsptm " set .dsptm = -10 (10 ticks) -003517: 044073 - jmp piret -003520: 603755 - 1: sma ral " edges flag set?? (and rotate) -003521: 740110 - jmp .+3 " no -003522: 603525 - raef " "resume after edges flag" -003523: 700742 - jmp piret " return -003524: 603755 - sma " light pen flag? -003525: 740100 - jmp 1f " no -003526: 603533 - lda " G-2: load display address -003527: 701012 - dac .lpba " save -003530: 045537 - rlpd " G-2: resume after light pen stop -003531: 700723 - jmp piret -003532: 603755 - 1: ksf " (TTY) keyboard flag set? -003533: 700301 - jmp 1f " no -003534: 603565 - lac ttydelay " get TTY delay -003535: 205503 - sma " minus (waiting for output)? -003536: 740100 - isz ttydelay " no: increment??? (make more positive) -003537: 445503 - krb " read keyboard buffer -003540: 700312 - dac char " save in char -003541: 045511 - sad o375 " interrupt char (TTY ALT MODE?) -003542: 544151 - jmp intrp1 " yes -003543: 604021 - lac d1 -003544: 204117 - jms putchar -003545: 101730 - dzm char -003546: 145511 - lac sfiles+0 " get sleep word for ttyin -003547: 205520 - jms wakeup " wake processes -003550: 103762 - dac sfiles+0 " clear sleep word -003551: 045520 - lac char " get character -003552: 205511 - sad o212 " new line (with parity)?? -003553: 544150 - skp " yes -003554: 741000 - jmp piret " no: done -003555: 603755 - lac sfiles+1 " get ttyout sleep word -003556: 205521 - sma " highest bit set? -003557: 740100 - xor o400000 " no, make it so (why?] -003560: 244173 - dac sfiles+1 " save back -003561: 045521 - "** 01-s1.pdf page 43 - jms putcr " output CR next -003562: 104014 - jms ttyrestart " start output -003563: 103572 - jmp piret -003564: 603755 - 1: tsf " TTY output flag set? -003565: 700401 - jmp 1f " no -003566: 603626 - tcf " yes: clear flag -003567: 700402 - jms ttyrestart " transmit next character -003570: 103572 - jmp piret -003571: 603755 - ttyrestart: 0 -003572: 000000 - lac ttydelay " get tty delay -003573: 205503 - spa " positive? -003574: 741100 - jmp ttyrestart i " no: keep waiting -003575: 623572 - lac nttychar " get pending CR, if any -003576: 205501 - dzm nttychar " clear it -003577: 145501 - sza " need to send CR? -003600: 740200 - jmp 3f " yes -003601: 603606 - isz ttydelay " increment ttydelay (make more positive) -003602: 445503 - lac d2 -003603: 204120 - jms getchar " get a character -003604: 101745 - jmp 2f " none found?? -003605: 603622 - 3: - tls " start output -003606: 700406 - sad o12 " newline? -003607: 544130 - jms putcr " yes: put CR next -003610: 104014 - sad o15 " CR? -003611: 544132 - skp " yes -003612: 741000 - jmp ttyrestart i " no: return -003613: 623572 - lac ttydelay " get current tty delay -003614: 205503 - tad o20 " bump by 16 -003615: 344134 - rcr " divide by two -003616: 744020 - cma " complement -003617: 740001 - dac ttydelay " save -003620: 045503 - jmp ttyrestart i -003621: 623572 - 2: - lac sfiles+1 " run out of characters to send: wake user(s) -003622: 205521 - jms wakeup -003623: 103762 - dac sfiles+1 -003624: 045521 - jmp ttyrestart i "** written arrow up 2 copies -003625: 623572 - "** BEGIN CROSSED OUT - 1: sck " Graphic-2 keyboard flag set? -003626: 704301 - jmp 1f " no. -003627: 603644 - cck " yes: clear flag -003630: 704304 - lck " read character -003631: 704312 - dac char -003632: 045511 - sad o33 " code 33 (ESCAPE?) -003633: 544135 - jmp intrp2 " yes: mark interrupt -003634: 604044 - lac d3 -003635: 204121 - jms putchar -003636: 101730 - nop -003637: 740000 - lac sfiles+2 -003640: 205522 - jms wakeup -003641: 103762 - dac sfiles+2 -003642: 045522 - jmp piret -003643: 603755 - 1: rsf " paper tape ready? -003644: 700101 - jmp 1f " no -003645: 603712 - "** 01-s1.pdf page 44 - lac npptchar -003646: 205502 - sna -003647: 741200 - jmp .+5 -003650: 603655 - dac char -003651: 045511 - rrb -003652: 700112 - dac npptchar -003653: 045502 - jmp .+3 -003654: 603657 - rrb -003655: 700112 - dac char -003656: 045511 - 3: - lac char -003657: 205511 - sna -003660: 741200 - jmp 2f -003661: 603670 - lac d4 -003662: 204122 - jms putchar -003663: 101730 - jmp 3f -003664: 603704 - lac char -003665: 205511 - sad d4 -003666: 544122 - jmp 4f -003667: 603706 - 2: - lac npptchar -003670: 205502 - sna -003671: 741200 - jmp .+4 -003672: 603676 - dac char -003673: 045511 - dzm npptchar -003674: 145502 - jmp 3b -003675: 603657 - rsa -003676: 700104 - lac sfiles+3 -003677: 205523 - jms wakeup -003700: 103762 - xor o400000 -003701: 244173 - dac sfiles+3 -003702: 045523 - jmp piret -003703: 603755 - 3: - lac char -003704: 205511 - dac npptchar -003705: 045502 - 4: - lac sfiles+3 -003706: 205523 - jms wakeup -003707: 103762 - dac sfiles+3 -003710: 045523 - jmp piret -003711: 603755 - 1: psf " paper tape ready? -003712: 700201 - jmp 1f " no -003713: 603726 - pcf " clear ptp flag -003714: 700202 - lac d5 -003715: 204123 - jms getchar " get next char -003716: 101745 - jmp .+3 -003717: 603722 - psa -003720: 700204 - jmp piret -003721: 603755 - lac sfiles+4 -003722: 205524 - jms wakeup -003723: 103762 - dac sfiles+4 -003724: 045524 - jmp piret -003725: 603755 - "** BEGIN CROSSED OUT - 1: spb " any graphic-2 push button? -003726: 704401 - jmp 1f " no -003727: 603745 - cpb " clear push button flag -003730: 704404 - lpb " load push button value -003731: 704412 - dac pbsflgs+1 -003732: 045477 - "** 01-s1.pdf page 45 - and o2000 " get push button 7 -003733: 504153 - sna " set? -003734: 741200 - jmp piret " no: done -003735: 603755 - jms dspinit " yes: reset display buffer -003736: 102606 - lac sfiles+6 " wake up anyone sleeping on display -003737: 205526 - jms wakeup -003740: 103762 - dac sfiles+6 -003741: 045526 - cla " clear button lights -003742: 750000 - wbl -003743: 704424 - jmp piret "** END CROSSED OUT -003744: 603755 - 1: crsf " card reader flag set? -003745: 706701 - jmp 1f " no -003746: 603754 - crrb -003747: 706712 - dac crchar -003750: 045541 - -1 -003751: 777777 - dac crread -003752: 045540 - jmp piret -003753: 603755 - 1: crrb " read card reader buffer?? -003754: 706712 - piret: " return from priority interrupt - lac 0 " get LINK/PC -003755: 200000 - ral " restore LINK -003756: 740010 - lac .ac " restore AC -003757: 204071 - ion " reenable interrupts -003760: 700042 - jmp 0 i " return from interrupt -003761: 620000 - " wake sleeping processes - " NOTE!! Called from interrupt service, so avoids indirect!!! - " call: - " AC/ sfiles word (bit vector of processes to wake) - " jms wakeup - " AC/ 0 (to store in sfiles word) - wakeup: 0 -003762: 000000 - dac 9f+t " save vector in t0 -003763: 044255 - -mnproc -003764: 777766 - dac 9f+t+1 " loop count in t1 -003765: 044256 - lac tadu " get "tad ulist" -003766: 204076 - dac 2f -003767: 044000 - lac dacu " get "dac ulist" -003770: 204077 - dac 2f+1 -003771: 044001 - 1: - lac 9f+t -003772: 204255 - ral " rotate vector up one -003773: 740010 - dac 9f+t -003774: 044255 - sma " high bit set? -003775: 740100 - jmp 2f+2 " no: skip the fun -003776: 604002 - lac o700000 " yes: decrement process status (wake) -003777: 204200 - 2: tad .. " (avoiding indirect) -004000: 340000 - dac .. -004001: 040000 - lac 2b " advance tad operand by 4 words -004002: 204000 - tad d4 -004003: 344122 - dac 2b -004004: 044000 - lac 2b+1 " advance tad operand by 4 words -004005: 204001 - tad d4 -004006: 344122 - dac 2b+1 -004007: 044001 - isz 9f+t+1 " done? -004010: 444256 - jmp 1b " no, keep going -004011: 603772 - cla " return zero in AC -004012: 750000 - jmp wakeup i -004013: 623762 - t = t+2 - 000052 - " call to output CR after LF (NL) - putcr: 0 -004014: 000000 - lac o15 -004015: 204132 - dac nttychar -004016: 045501 - "** 01-s1.pdf page 46 - cla -004017: 750000 - jmp putcr i -004020: 624014 - intrp1: " here with TTY interrupt character - lac d6 " get keyboard special device number -004021: 204124 - dac .int1 " save as interrupt source -004022: 044067 - lac d1 " drain tty input buffer? -004023: 204117 - jms getchar -004024: 101745 - skp -004025: 741000 - jmp .-3 -004026: 604023 - lac d2 " drain tty output buffer? -004027: 204120 - jms getchar -004030: 101745 - skp -004031: 741000 - jmp .-3 -004032: 604027 - lac sfiles+0 " wake ttyin sleepers -004033: 205520 - jms wakeup -004034: 103762 - dac sfiles+0 -004035: 045520 - lac sfiles+1 " wake ttyout sleepers -004036: 205521 - jms wakeup -004037: 103762 - dac sfiles+1 -004040: 045521 - jms chkint " check if user interrupted -004041: 100320 - jmp piret " no, return from PI -004042: 603755 - jmp 1f " yes: return thru system call code (dump core) -004043: 604062 - intrp2: " here with display interrupt character - lac d7 " get keyboard special device number -004044: 204125 - dac .int2 " save as interrupt source -004045: 044070 - lac d3 " drain keyboard buffer? -004046: 204121 - jms getchar -004047: 101745 - skp -004050: 741000 - jmp .-3 -004051: 604046 - lac sfiles+2 " wake up any "keyboard" sleepers -004052: 205522 - jms wakeup -004053: 103762 - dac sfiles+2 -004054: 045522 - lac sfiles+6 " wake up any "display" sleepers -004055: 205526 - jms wakeup -004056: 103762 - dac sfiles+6 -004057: 045526 - jms chkint " check if user interrupted -004060: 100320 - jmp piret " no, return from PI -004061: 603755 - 1: - lac 0 " get interrupt PC -004062: 200000 - dac 020 " save as system call return PC -004063: 040020 - lac .ac " restore AC from interrupt -004064: 204071 - jmp 021 " join system call processing (dump core?) -004065: 600021 - "** 01-s1.pdf page 48 - " s8 - " manifests - mnproc = 10 - 000012 - dspbsz = 270 - 000416 - ndskbs = 4 - 000004 - " flags - .insys: 0 " "in system" -004066: 000000 - .int1: 0 " inode for user interrupt 1 -004067: 000000 - .int2: 0 " inode for user interrupt 2 -004070: 000000 - .ac: 0 " saved AC from Priotity Interrupt -004071: 000000 - .savblk: 0 " set by system call, cleared by disk i/o -004072: 000000 - .dsptm: 0 " display restart countdown (10 ticks) -004073: 000000 - .dskb: 0 " set on disk interrupt -004074: 000000 - .dske: 0 " status from disk interrupt -004075: 000000 - " pointers - tadu: tad ulist -004076: 345561 - dacu: dac ulist -004077: 045561 - maxquant: 30 -004100: 000036 - ofilesp: u.ofiles -004101: 005654 - idskpp: i.dskps -004102: 005733 - dskbufp: dskbuf -004103: 007700 - edspbuf: dspbuf+dspbsz -004104: 005064 - dspbufp3: dspbuf+3 -004105: 004451 - fblksp: s.fblks -004106: 005544 - dacq1: dac q1 -004107: 044260 - lacq1: lac q1 -004110: 204260 - q2p: q2 -004111: 004300 - " strings - initf: - n;t;< > ;< > " -004112: 151156 -004113: 151164 -004114: 040040 -004115: 040040 - " constants - d0: 0 -004116: 000000 - d1: 1 -004117: 000001 - d2: 2 -004120: 000002 - d3: 3 -004121: 000003 - d4: 4 -004122: 000004 - d5: 5 -004123: 000005 - d6: 6 -004124: 000006 - d7: o7: 07 -004125: 000007 - d8: 8 -004126: 000010 - d9: 9 -004127: 000011 - o12: d10: 10 -004130: 000012 - o14: 014 -004131: 000014 - o15: 015 -004132: 000015 - o17: 017 -004133: 000017 - o20: 020 -004134: 000020 - o33: 033 -004135: 000033 - o40: 040 -004136: 000040 - o55: 055 -004137: 000055 - o77: 077 -004140: 000077 - d65:o101: 0101 -004141: 000101 - d33: 33 -004142: 000041 - o132: 0132 -004143: 000132 - o134: 0134 -004144: 000134 - o137: 0137 -004145: 000137 - o155: 0155 -004146: 000155 - o177: 0177 -004147: 000177 - "** 01-s1.pdf page 49 - o212: 0212 -004150: 000212 - o375: 0375 -004151: 000375 - o777: 0777 -004152: 000777 - o2000: 02000 -004153: 002000 - o4000: 04000 -004154: 004000 - d7999: 7999 -004155: 017477 - o10000: 010000 -004156: 010000 - o17762: 017762 -004157: 017762 - o17777: 017777 -004160: 017777 - o20001: 020001 -004161: 020001 - o40000: 040000 -004162: 040000 - o40001: 040001 -004163: 040001 - o70000: 070000 -004164: 070000 - o77777: 077777 -004165: 077777 - o100000: 0100000 -004166: 100000 - o140000: 0140000 -004167: 140000 - o200000: 0200000 -004170: 200000 - o200001: 0200001 -004171: 200001 - o300000: 0300000 -004172: 300000 - o400000: 0400000 -004173: 400000 - o500000: 0500000 -004174: 500000 - o577777: 0577777 -004175: 577777 - o600000: 0600000 -004176: 600000 - o640000: 0640000 -004177: 640000 - o700000: 0700000 -004200: 700000 - o777700: 0777700 -004201: 777700 - o777760: 0777760 -004202: 777760 - dm3: -3 -004203: 777775 - dm1: -1 -004204: 777777 - 9: .=.+t " per-routine temp variables - 1004257 - c1: .=.+1 " not used? - 1004260 - q1: q2;q2+98 " ** 90? 96?? " queue element free list? -004260: 004300 -004261: 004442 - .=.+14 - 1004300 - " 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 -004300: 004302 -004301: 000000 -004302: 004304 -004303: 000000 -004304: 004306 -004305: 000000 -004306: 004310 -004307: 000000 -004310: 004312 -004311: 000000 -004312: 004314 -004313: 000000 -004314: 004316 -004315: 000000 -004316: 004320 -004317: 000000 -004320: 004322 -004321: 000000 -004322: 004324 -004323: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004324: 004326 -004325: 000000 -004326: 004330 -004327: 000000 -004330: 004332 -004331: 000000 -004332: 004334 -004333: 000000 -004334: 004336 -004335: 000000 -004336: 004340 -004337: 000000 -004340: 004342 -004341: 000000 -004342: 004344 -004343: 000000 -004344: 004346 -004345: 000000 -004346: 004350 -004347: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004350: 004352 -004351: 000000 -004352: 004354 -004353: 000000 -004354: 004356 -004355: 000000 -004356: 004360 -004357: 000000 -004360: 004362 -004361: 000000 -004362: 004364 -004363: 000000 -004364: 004366 -004365: 000000 -004366: 004370 -004367: 000000 -004370: 004372 -004371: 000000 -004372: 004374 -004373: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 -004374: 004376 -004375: 000000 -004376: 004400 -004377: 000000 -004400: 004402 -004401: 000000 -004402: 004404 -004403: 000000 -004404: 004406 -004405: 000000 -004406: 004410 -004407: 000000 -004410: 004412 -004411: 000000 -004412: 004414 -004413: 000000 -004414: 004416 -004415: 000000 -004416: 004420 -004417: 000000 - .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;0;0 -004420: 004422 -004421: 000000 -004422: 004424 -004423: 000000 -004424: 004426 -004425: 000000 -004426: 004430 -004427: 000000 -004430: 004432 -004431: 000000 -004432: 004434 -004433: 000000 -004434: 004436 -004435: 000000 -004436: 004440 -004437: 000000 -004440: 004442 -004441: 000000 -004442: 000000 -004443: 000000 - dsploc: .=.+1 - 1004445 - dsplno: .=.+1 - 1004446 - dspbuf: - 0065057;0147740;0160000 " display commands: see 03-scope.pdf pg 20 -004446: 065057 -004447: 147740 -004450: 160000 - " 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 - 1004507 - coldentry: - dzm 0100 " not re-entrant -004507: 140100 - caf " clear all flags -004510: 703302 - ion " enable interrupts -004511: 700042 - clon " clear clock flag -004512: 700044 - law 3072 " initialize display.... -004513: 766000 - wcga -004514: 704206 - jms dspinit -004515: 102606 - law dspbuf " set display buffer to default -004516: 764446 - jms movdsp -004517: 102615 - cla " read system block from disk -004520: 750000 - jms dskio; 06000 -004521: 102162 -004522: 006000 - jms copy; dskbuf; sysdata; ulist-sysdata " copy to system data -004523: 101667 -004524: 007700 -004525: 005542 -004526: 000017 - lac d3 " look for "init" in default directory -004527: 204121 - jms namei; initf -004530: 102737 -004531: 004112 - jms halt -004532: 102254 - "** 01-s1.pdf page 50 - jms iget -004533: 103017 - cla -004534: 750000 - jms iread; 4096; 4096 " read in "init" -004535: 103266 -004536: 010000 -004537: 010000 - jmp 4096 " start process 1 -004540: 610000 - . = dspbuf+dspbsz+3 - 1005067 - dskbuf = 07700 - 007700 - dskbs: .=.+65+65+65+65 - 1005473 - edskbsp: . -005473: 005473 - uquant: .=.+1 " number of ticks user has been running - 1005475 - dspbufp: .=.+1 " pointer to display buffer - 1005476 - pbsflgs: .=.+2 " buttons on last tick, last button interrupt - 1005500 - mode: .=.+1 - 1005501 - nttychar: .=.+1 " CR to send next, or zero - 1005502 - npptchar: .=.+1 - 1005503 - ttydelay: .=.+1 " delay count for TTY output - 1005504 - name: .=.+4 - 1005510 - lnkaddr: .=.+1 - 1005511 - char: .=.+1 - 1005512 - dskaddr: .=.+1 - 1005513 - uniqpid: 1 " pid generator -005513: 000001 - lu: .=.+4 " user (process) table entry copy - 1005520 - sfiles: .=.+10 " wait addresses for special files - 1005532 - " (bit vector of waiting processes?) - " offsets: 0: ttyin, 1: ttyout, 2: keyboard, - " 3: ptr, 4: ptp, 6: display - dpdata: - dpstat: .=.+1 - 1005533 - dpread: .=.+1 - 1005534 - dpwrite: .=.+1 - 1005535 - dpchar: .=.+1 - 1005536 - dspdata: - .dspb: .=.+1 - 1005537 - .lpba: .=.+1 "** 4 written on listing - 1005540 - crdata: - crread: .=.+1 - 1005541 - crchar: .=.+1 - 1005542 - sysdata: " system data 64 words saved to disk - s.nxfblk: .=.+1 " pointer to next free block?? - 1005543 - s.nfblks: .=.+1 " number of free blocks (in fblks?) - 1005544 - s.fblks: .=.+10 " cached free block numbers - 1005556 - s.uniq: .=.+1 " next unique value - 1005557 - s.tim: .=.+2 " (up?)time in 60Hz ticks (low, high) - 1005561 - " 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 -005561: 131000 -005562: 000001 -005563: 000000 -005564: 000000 - 0031040;0;0;0 -005565: 031040 -005566: 000000 -005567: 000000 -005570: 000000 - 0031100;0;0;0 -005571: 031100 -005572: 000000 -005573: 000000 -005574: 000000 - 0031140;0;0;0 -005575: 031140 -005576: 000000 -005577: 000000 -005600: 000000 - 0031200;0;0;0 -005601: 031200 -005602: 000000 -005603: 000000 -005604: 000000 - 0031240;0;0;0 -005605: 031240 -005606: 000000 -005607: 000000 -005610: 000000 - 0031300;0;0;0 -005611: 031300 -005612: 000000 -005613: 000000 -005614: 000000 - 0031340;0;0;0 -005615: 031340 -005616: 000000 -005617: 000000 -005620: 000000 - 0031400;0;0;0 -005621: 031400 -005622: 000000 -005623: 000000 -005624: 000000 - 0031440;0;0;0 -005625: 031440 -005626: 000000 -005627: 000000 -005630: 000000 - userdata: " "ustruct" (swappable) - u.ac: 0 " user AC -005631: 000000 - u.mq: 0 " user MQ -005632: 000000 - u.rq: .=.+9 " user 010-017, user PC - 1005644 - u.uid: -1 " user id -005644: 777777 - u.pid: 1 " process id -005645: 000001 - u.cdir: 3 " connected directory (inode number?) -005646: 000003 - u.ulistp: ulist " pointer to process table entry -005647: 005561 - u.swapret: 0 " kernel routine to resume at after swap in -005650: 000000 - u.base: 0 " start of user buffer -005651: 000000 - u.count: 0 " size of user buffer -005652: 000000 - "** 01-s1.pdf page 51 - u.limit: 0 " end of user buffer -005653: 000000 - u.ofiles: .=.+30 " open files (10 "fnode" entries) - 1005712 - u.dspbuf: 0 -005712: 000000 - u.intflg: 1 -005713: 000001 - .=userdata+64 - 1005731 - ii: .=.+1 " The current i-node number stored in inode - 1005732 - inode: " disk inode in memory: - i.flags: .=.+1 " inode flags - 1005733 - " 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") - 1005742 - i.uid: .=.+1 " owner - 1005743 - i.nlks: .=.+1 " link count (negative) - 1005744 - i.size: .=.+1 " size (in words) - 1005745 - i.uniq: .=.+1 " unique number - 1005746 - .= inode+12 - 1005746 - di: .=.+1 " directory index - 1005747 - dnode: " directory entry: - d.i: .=.+1 " inode number - 1005750 - d.name: .=.+4 " name (space padded) - 1005754 - d.uniq: .=.+1 " unique number from directory inode - 1005755 - . = dnode+8 - 1005757 - fnode: " open file entry - f.flags: .=.+1 " see below - 1005760 - f.badd: .=.+1 " offset - 1005761 - f.i: 0 " file i-number -005761: 000000 - " f.flags: - " 400000 in use - " 000002 read - " 000001 write - -Labels: -.ac 004071 r -.capt 000377 r -.chdir 000615 r -.chmod 000407 r -.chown 000421 r -.close 000720 r -.creat 000660 r -.dskb 004074 r -.dske 004075 r -.dspb 005536 r -.dsptm 004073 r -.exit 001163 r -.fork 001111 r -.getuid 000426 r -.halt 001336 r -.insys 004066 r -.int1 004067 r -.int2 004070 r -.intrp 000257 r -.link 000467 r -.lpba 005537 r -.open 000626 r -.read 000724 r -.rele 000403 r -.rename 000567 r -.rmes 001177 r -.savblk 004072 r -.save 001151 r -.seek 000431 r -.setuid 000561 r -.smes 001225 r -.status 000352 r -.sysloc 000262 r -.tell 000461 r -.time 000610 r -.unlink 000542 r -.write 000773 r -access 002312 r -alloc 001545 r -arg 002625 r -argname 002631 r -awake 001304 r -badcal 001146 r -betwen 001643 r -c1 004257 r -char 005511 r -chkint 000320 r -chkint1 001535 r -cnop 003442 r -coldentr 004507 r -collapse 002055 r -copy 001667 r -copyz 001712 r -crchar 005541 r -crdata 005540 r -crread 005540 r -cskp 003335 r -d.i 005747 r -d.name 005750 r -d.uniq 005754 r -d0 004116 r -d1 004117 r -d10 004130 r -d2 004120 r -d3 004121 r -d33 004142 r -d4 004122 r -d5 004123 r -d6 004124 r -d65 004141 r -d7 004125 r -d7999 004155 r -d8 004126 r -d9 004127 r -dacisize 003402 r -dacq1 004107 r -dacu 004077 r -dget 003104 r -di 005746 r -dm1 004204 r -dm3 004203 r -dnode 005747 r -dpchar 005535 r -dpdata 005532 r -dpread 005533 r -dpstat 005532 r -dput 003136 r -dpwrite 005534 r -dskaddr 005512 r -dskbs 005067 r -dskbufp 004103 r -dskio 002162 r -dskrd 002116 r -dskswap 002267 r -dsktrans 002220 r -dskwr 002146 r -dslot 002463 r -dspbuf 004446 r -dspbufp 005475 r -dspbufp3 004105 r -dspdata 005536 r -dspinit 002606 r -dspleft 002562 r -dsplno 004445 r -dsploc 004444 r -dspnl 002574 r -dspput 002540 r -dspresta 003512 r -edskbsp 005473 r -edspbuf 004104 r -error 001531 r -exitrw 001034 r -f.badd 005760 r -f.flags 005757 r -f.i 005761 r -fallr 002425 r -fassign 002327 r -fblksp 004106 r -fget 002360 r -finac 003370 r -fnode 005757 r -forall 002412 r -fput 002402 r -free 001604 r -getchar 001745 r -halt 002254 r -i.dskps 005733 r -i.flags 005732 r -i.nlks 005743 r -i.size 005744 r -i.uid 005742 r -i.uniq 005745 r -icreat 002475 r -idskpp 004102 r -iget 003017 r -ii 005731 r -initf 004112 r -inode 005732 r -intrp1 004021 r -intrp2 004044 r -iput 003046 r -iread 003266 r -isown 002664 r -itrunc 002675 r -iwrite 003257 r -laci 001635 r -lacq1 004110 r -lnkaddr 005510 r -locn 000317 r -locsw 000275 r -lookfor 001066 r -lu 005514 r -maxquant 004100 r -mode 005500 r -movdsp 002615 r -name 005504 r -namei 002737 r -npptchar 005502 r -nttychar 005501 r -o10000 004156 r -o100000 004166 r -o101 004141 r -o12 004130 r -o132 004143 r -o134 004144 r -o137 004145 r -o14 004131 r -o140000 004167 r -o15 004132 r -o155 004146 r -o17 004133 r -o177 004147 r -o17762 004157 r -o17777 004160 r -o20 004134 r -o2000 004153 r -o200000 004170 r -o200001 004171 r -o20001 004161 r -o212 004150 r -o300000 004172 r -o33 004135 r -o375 004151 r -o40 004136 r -o4000 004154 r -o40000 004162 r -o400000 004173 r -o40001 004163 r -o500000 004174 r -o55 004137 r -o577777 004175 r -o600000 004176 r -o640000 004177 r -o7 004125 r -o70000 004164 r -o700000 004200 r -o77 004140 r -o777 004152 r -o777700 004201 r -o777760 004202 r -o77777 004165 r -ofilesp 004101 r -okexit 000102 r -open1 000715 r -orig 000000 r -passone 001523 r -pbsflgs 005476 r -pget 003152 r -pibreak 003407 r -piret 003755 r -putchar 001730 r -putcr 004014 r -putq 002011 r -q1 004260 r -q2 004300 r -q2p 004111 r -rkbdi 001410 r -rppti 001461 r -rttyi 001337 r -s.fblks 005544 r -s.nfblks 005543 r -s.nxfblk 005542 r -s.tim 005557 r -s.uniq 005556 r -searchu 001042 r -seektell 002645 r -sfiles 005520 r -sleep 002434 r -srcdbs 002035 r -swap 000136 r -swn 000256 r -swp 000220 r -swr 001324 r -sww 001324 r -sysdata 005542 r -sysexit 000103 r -tadu 004076 r -takeq 001757 r -ttydelay 005503 r -ttyresta 003572 r -u.ac 005631 r -u.base 005651 r -u.cdir 005646 r -u.count 005652 r -u.dspbuf 005712 r -u.intflg 005713 r -u.limit 005653 r -u.mq 005632 r -u.ofiles 005654 r -u.pid 005645 r -u.rq 005633 r -u.swapre 005650 r -u.uid 005644 r -u.ulistp 005647 r -ulist 005561 r -uniqpid 005513 r -uquant 005474 r -userdata 005631 r -wakeup 003762 r -wdspo 001451 r -wppto 001475 r -wttyo 001357 r diff --git a/build/alt/a.rim b/build/alt/a.rim deleted file mode 100644 index 3ad059c..0000000 --- a/build/alt/a.rim +++ /dev/null @@ -1 +0,0 @@ -„€€¼€ „€°œ‡„€‡¿¿¿„€€€š„€‘¸€‚„€’„®™„€“€„€”„€š„€•€™„€–„€„€—®™„€˜°€›„€™€€š„€š€€€„€›¸€‚„€œ„®™„€´ˆ‚„€ž„®š„€Ÿ€ˆ„€ „®›„€¡€‰„€¢„®œ„€£ˆŽ·„€¤€€Š„€¥€®„€¦€€†„€§€š„€¨„®£„€©¿¿¿„€ª„ º„€«„ ¶„€¬¬¼„€­ˆŽ£„€®€¡Ž„€¯€¡€„€°ˆž„€±¸€¢„€²¿¿¿„€³œ®£„€´ˆŽ„€µˆŽ£„€¶€¡±„€·€‚®„€¸°‰¦„€¹œ‚„€º„€»„€»²€€„€°¥‡„ˆ’¬„‚Œ®™„ƒ¸€¢„„ º„…¼‚€„†°Ž„‡ˆŽ·„ˆ€­¢„‰€¿€„Š€€„‹½€€„Œˆ‘²„€¸€„ŽŒ ¶„ˆƒ„¼ˆ€„‘°‰©„’ˆŽ·„“€®„”€€Š„•€€†„–®œ„—„€‰„˜®›„™„€ˆ„š®š„›µ€„œ®™„²®£„ž€€€„Ÿ¸€¢„ ˆˆ¶„¡€€ƒ„¢°©„£ˆˆ¶„¤€€„¥¼ˆ€„¦° „§Œ¡€„¨°‚„©„¢…„ªˆˆ¶„«€€‚„¬°±„­ˆˆ¶„®€€„¯°±„°°¿„±ž„²„®¨„³¸€‚„´¡¸„µž®§„¶†®§„·¸€¢„¸ˆ’·„¹€¸€„º¯Š„»¼Š€„¼°¿„½¾¤¦„¾ˆ–„¿¸€‚„‚€¡¾„‚ž¢…„‚‚†¢…„‚ƒ¸€¢„‚„ˆ’·„‚…€°€„‚†®¨„‚‡„ž„‚ˆ¡œ„‚‰„¡€„‚НЄ‚‹¼‚€„‚Œˆ–„‚Œ¬¼„‚ޏ€‚„‚²ž„‚°‚„‚‘€‰©„‚’€„–„‚“€†–„‚”€‡”„‚•€‡»„‚–€†°„‚—€„™„‚˜€„±„‚™€‡„‚š€„·„‚›€…¢„‚œ€…±„‚€…·„‚ž€‰³„‚Ÿ€†ˆ„‚ €‚¯„‚¡€†„‚¢€„‡„‚£€„‘„‚¤€‰¦„‚¥€‚²„‚¦€‰¦„‚§€ƒ¿„‚¨€„ƒ„‚©€ƒª„‚ª€‰¦„‚«€Š•„‚¬€‰¿„‚­€‰‰„‚®‚€„‚¯®™„‚°„¯‹„‚±°‚„‚²®™„‚³¨¡°„‚´ˆŽ£„‚µ€¡„‚¶€ƒ„‚·ˆ™„‚¸œ‚½„‚¹„‚º„‚º€€„‚»„®™„‚¼°ƒ„‚½‚½„‚¾€˜„‚¿€¯š„ƒ€€®™„ƒ€­¢„ƒ‚€Ž·„ƒƒ€Š„ƒ„€Ž£„ƒ…€‘Ž„ƒ†€‘¦„ƒ‡€¿€„ƒˆ€­š„ƒ‰€—Ÿ„ƒŠ€¬¾„ƒ‹€¥„ƒŒ€Ž„„ƒ€­ž„ƒŽ€­ „ƒ€€‘„ƒ€€€„ƒ‘ ¶„ƒ’¼‚€„ƒ“²ƒ„ƒ” ·„ƒ•¼Š€„ƒ–°ƒ™„ƒ—¬®®„ƒ˜°ƒ¡„ƒ™ ¸„ƒš¼Š€„ƒ›²ƒ„ƒœ¬®®„ƒ¼ˆ€„ƒž²ƒ„ƒŸŒ ¸„ƒ °ƒ¢„ƒ¡Œ ·„ƒ¢¯‹„ƒ£¼‚€„ƒ¤²ƒ„ƒ¥¿¿¿„ƒ¦„ ¶„ƒ§¸€¢„ƒ¨¤ƒ„ƒ©²ƒ„ƒªˆ–•„ƒ«„ƒ®„ƒ¬®¦„ƒ­ˆ—Ÿ„ƒ®€€€„ƒ¯ˆ™„ƒ°ˆ˜„ƒ±®™„ƒ²¨¡°„ƒ³ˆŽ£„ƒ´€¡®„ƒµ€¡¯„ƒ¶ˆ™„ƒ·„ƒº„ƒ¸ˆŽ·„ƒ¹€¯š„ƒº€€€„ƒ»€€Œ„ƒ¼¯§„ƒ½†€‰„ƒ¾°‚„ƒ¿®™„„€„¯Š„„ˆ–„„‚°ƒ„„ƒŒ¯Š„„„¾¤¦„„…ˆ–„„†°ƒ„„‡ˆ–´„„ˆ®™„„‰¨¡›„„刄„‹¯š„„Œ¨¢‚„„´€‚„„Ž„¯š„„ˆ˜¦„„°‚„„‘ˆ–´„„’®™„„“„¯¢„„”ˆ˜¦„„•°‚„„–®¤„„—„®™„„˜°ƒ„„™ˆ–¥„„šœ®©„„›¼‰€„„œˆ™„„µ€„„ž¯¯„„Ÿ¨¡„„ ¼Š€„„¡ˆ„¨„„¢´ˆ‚„„£ˆŽ£„„¤€¡Ž„„¥€¯¤„„¦ˆœ‚„„§°„­„„¨´ˆ‚„„©ˆŽ£„„ª€¡Ž„„«€¯¤„„¬¯¤„„­„¯°„„®„®™„„¯ˆ”‚„„°°ƒ„„±ˆ–¥„„²¼€„„³œ¡„„´œ®©„„µ„®™„„¶°ƒ„„·ˆ–•„„¸„„¿„„¹ˆ–•„„º„…‚„„»ˆ–•„„¼„…†„„½®¦„„¾ˆ—Ÿ„„¿€€€„…€ˆ™„…ˆ—Ÿ„…‚€€€„…ƒˆ™„…„„®©„……ˆŽ·„…†€€€„…‡€­„„…ˆ€€„„…‰®¦„…Šˆ—Ÿ„…‹€­„„…Œ¼ˆ€„…ˆ™„…Ž¡„…„­€„…ˆ“Š„…‘ˆ”³„…’®©„…“ˆ˜„…”¯™„…•„¯§„…–ˆŽ·„…—€­„„…˜€¯¨„…™€€„„…𝥄…›„¯¬„…œ¿¿¿„…œ¯£„…ž„¯£„…Ÿˆ˜¦„… ˆ™ž„…¡°‚„…¢ˆ–™„…£„®©„…¤¡„…¥„­€„…¦ˆ“Š„…§Œ¯§„…¨ˆ™ž„…©®©„…ªˆ˜„…«¤¯£„…¬°…¯„…­ˆ–½„…®Œ¯š„…¯ˆ˜¦„…°°ƒ„…±®¤„…²¼€„…³ˆ™„…´®™„…µ„®¤„…¶°ƒ„…·ˆ–•„…¸„…½„…¹ˆ–•„…º„†ƒ„…»®¦„…¼ˆ—Ÿ„…½€€€„…¾ˆ™„…¿¡„†€„­€„†ˆ“Š„†‚ˆŽ·„†ƒ€€€„†„€¯¨„†…€€„„††ˆ™ž„†‡°‚„†ˆ­¯„†‰„®™„†Š­°„†‹„®š„†Œ°ƒ„†ˆ–™„†Žˆ˜„†¯š„†¨¡œ„†‘¼Š€„†’ˆ™„†“¯™„†”„®¦„†•°‚„†–ˆ–•„†—„† „†˜ˆ–•„†™¼‚€„†š¡„†›¼Š€„†œ¡„†„­€„†ž®¦„†Ÿˆ—Ÿ„† €€€„†¡ˆ™„†¢ˆ˜„†£ˆ“Š„†¤¯š„†¥¨¡œ„†¦¼Š€„†§°‡„†¨­€„†©¨¡„†ª¼Š€„†«°‡„†¬®¤„†­¼€„†®ˆ™„†¯°‡„†°¡„†±„­€„†²ˆ–•„†³„†µ„†´ˆŽ·„†µ€€€„†¶€­„„†·€€„„†¸®¦„†¹ˆ—Ÿ„†º€­„„†»°‡‰„†¼ˆ˜„†½ˆ“Š„†¾¯š„†¿¨¡œ„‡€¼Š€„‡°‡…„‡‚®¤„‡ƒ¼€„‡„ˆ™„‡…ˆ–½„‡†½€€„‡‡ˆœ‚„‡ˆ°‡„‡‰ˆ“Š„‡Š®™„‡‹¨¡›„‡Œˆ”½„‡ˆ“—„‡Žˆ™„‡°ƒ„‡ˆ›¸„‡‘Œ¯¯„‡’ˆ”‚„‡“°ƒ„‡”ˆ–•„‡•¨¡°„‡–„®©„‡—ˆ–•„‡˜„®ª„‡™®©„‡šˆŽ£„‡›€¡®„‡œ€¡°„‡ˆ™„‡žœ®ª„‡ŸˆŽ£„‡ €®©„‡¡€¡°„‡¢ˆ™„‡£„®«„‡¤ˆ›¸„‡¥¯¯„‡¦¨¡„‡§¼‚€„‡¨ˆ™„‡©¯š„‡ª¨¡ž„‡«¼Š€„‡¬°‡²„‡­¸€‚„‡®¯™„‡¯œ‹”„‡°„‡±„‡±²€€„‡²®©„‡³„‡¸„‡´®ª„‡µ„‡¹„‡¶¯°„‡·ˆš¶„‡¸€€€„‡¹€€€„‡º°ˆœ„‡»ˆ–•„‡¼¨¡°„‡½„®©„‡¾ˆ–•„‡¿„®ª„ˆ€œ®©„ˆˆŽ£„ˆ‚€®©„ˆƒ€¡°„ˆ„ˆ™„ˆ…„®«„ˆ†ˆ›¸„ˆ‡¯¯„ˆˆ¨¡„ˆ‰¼Š€„ˆŠˆ™„ˆ‹¯š„ˆŒ¨¡ž„ˆ¼Š€„ˆŽ°ˆ”„ˆ¸€‚„ˆ¯™„ˆ‘œ‹”„ˆ’„ˆ“„ˆ“²€€„ˆ”®©„ˆ•„ˆš„ˆ–®ª„ˆ—„ˆ›„ˆ˜¯°„ˆ™ˆš¯„ˆš€€€„ˆ›€€€„ˆœ„®™„ˆœ¯°„ˆž„¯°„ˆŸˆ˜¦„ˆ ˆ”‚„ˆ¡°ƒ„ˆ¢€€€„ˆ£’ˆ¢„ˆ¤„¢‡„ˆ¥¿¿¶„ˆ¦„¢†„ˆ§¾­°„ˆ¨„€ˆ„ˆ©’€ˆ„ˆª„­Œ„ˆ«’€ˆ„ˆ¬„­„ˆ­’€ˆ„ˆ®„­Ž„ˆ¯’€ˆ„ˆ°„­„ˆ±Š¢‡„ˆ²¤¢†„ˆ³°ˆ©„ˆ´¤ˆ¢„ˆµ²ˆ¢„ˆ¶€€€„ˆ·ˆˆ¢„ˆ¸€ˆ¼„ˆ¹¤ˆ¶„ˆº¤ˆ¶„ˆ»²ˆ¶„ˆ¼€€€„ˆ½­Œ„ˆ¾¼ˆ„ˆ¿¼ˆ„‰€¨¡•„‰®ˆ¶„‰‚¼ˆ€„‰ƒ²ˆ¼„‰„¿¿½„‰…œ€ˆ„‰†¨¡°„‰‡¤ˆ¶„‰ˆ²ˆ¶„‰‰ˆˆ¶„‰Š€€€„‰‹¼ˆ€„‰Œˆ™„‰„¢ˆ„‰Ž¤­‹„‰­‹„‰„®™„‰‘¾ƒ„‰’„®¨„‰“¡¸„‰”ž®§„‰•†®§„‰–ˆ’·„‰—€¸€„‰˜¢ˆ„‰™„®§„‰š¡¶„‰›–®§„‰œ†®§„‰®¥„‰ž„®™„‰Ÿ­‹„‰ „®¥„‰¡¤¢ˆ„‰¢†¢ˆ„‰£¤®£„‰¤Œ¯‹„‰¥°ƒ„‰¦¸€¤„‰§¿¿¿„‰¨„€‡„‰©¡„‰ªˆ˜„‰«½€€„‰¬ˆš¯„‰­€€„‰®€€„‰¯ˆš¯„‰°€®™„‰±€€„‰²ˆ˜¦„‰³¯Š„‰´¼Š€„‰µ°‰¸„‰¶¾¤¦„‰·ˆ–„‰¸ˆ‹„„‰¹’®§„‰º¨¡µ„‰»†®§„‰¼¤®§„‰½Ž®§„‰¾ˆž„‰¿ˆ‹„„Š€¡¶„Šž®§„Š‚†®§„Šƒ¾€‚„Š„œ®§„Š…„¢‰„І¿¿¿„Ї†¢‰„Šˆˆž„Љ¾€‚„ŠŠœ®§„Š‹„¢‰„ŠŒ’¢‰„м€„ŠŽ„®™„ŠŽ¢‰„Ф¢‰„Š‘’¢‰„Š’„®š„Гޢ‰„Š”°ƒ„Š•®™„Š–¼‹€„Š—ˆ™„Š˜ˆˆ¢„Š™€ŠŸ„Šš¾€‚„Š›œ®§„Šœ„¢Š„ŠŽ¢Š„Šžˆ™„ŠŸ€€€„Š ­„Š¡¬®™„Š¢¼ˆ€„Š£²ŠŸ„Ф­Ž„Š¥¬¢„„Ц°Šµ„Ч¡¶„Ѝž®§„Š©†®§„Šª¾€‚„Š«œ®§„Ь„¢Š„Š­®™„Š®†¢Š„Нˆž„а¾€‚„бœ®§„в„¢Š„гޢЄд°Š•„е¿¿½„жœ€ˆ„Š·„¢Š„Џ¢€„йž¢Š„Šº†¢Š„Š»¤¢Š„м¤¢Š„н®¥„о¼€„Š¿†¢Š„‹€¤¢Š„‹®š„‹‚†¢Š„‹ƒ°‚„‹„€€€„‹…ˆˆ¢„‹†€‹ˆ„‹‡²‹„„‹ˆ€€€„‹‰®¥„‹Š¬­Ž„‹‹¼ˆ€„‹Œ²‹ˆ„‹¿¿½„‹Žœ€ˆ„‹„¢‹„‹¢€„‹‘ž¢‹„‹’†¢‹„‹“²‹ˆ„‹”²‹„‹•€‹ž„‹–€‹Ÿ„‹—€Œˆ„‹˜€Œ±„‹™€‹ž„‹š€‹ž„‹›€‹¯„‹œ€Œ©„‹€Œ½„‹žˆ’¬„‹Ÿˆ„‹ ¡„‹¡ˆ¥„‹¢°‹«„‹£¨¡§„‹¤ˆŽ£„‹¥€¡¡„‹¦€¡£„‹§¼ˆ€„‹¨œ¡ž„‹©¶‡‰„‹ª°“„‹«ˆ”œ„‹¬€­„‹­ˆž„‹®°‹Ÿ„‹¯ˆ„‹°ˆ”Š„‹±¼Š€„‹²°”•„‹³µ€„‹´­‘„‹µ¼‰€„‹¶°‹¾„‹·”¡»„‹¸„­‘„‹¹´ˆ‚„‹º¸„†„‹»¬¡˜„‹¼ˆ Œ„‹½°”•„‹¾´ˆ‚„‹¿„­‰„Œ€¡„Œˆ˜„Œ‚¼ˆ€„Œƒ°”•„Œ„ˆ”œ„Œ…€­‘„Œ†ˆž„Œ‡°‹¯„Œˆˆ„Œ‰¡‘„ŒŠˆ¥„Œ‹°Œ¥„ŒŒµ€„Œ¨¡¦„ŒŽ¬¡Ÿ„Œ°Œ•„Œ´ˆ‚„Œ‘¨¡¥„Œ’¬¡¤„Œ“¼ˆ€„Œ”°Œ˜„Œ•´ˆ‚„Œ–”¡œ„Œ—µ€„Œ˜´ˆ‚„Œ™„®«„Œšˆ„Œ›®«„Œœˆ• „Œ°Œ¢„Œžˆ”œ„ŒŸ€­–„Œ ˆž„Œ¡°Œš„Œ¢®«„Œ£¶‡‰„Œ¤°“„Œ¥ˆ”œ„Œ¦€­’„Œ§ˆž„Œ¨°Œˆ„Œ©ˆ„Œªˆ”Š„Œ«ˆ• „Œ¬°”•„Œ­ˆ”œ„Œ®€­–„Œ¯ˆž„Œ°°Œ©„Œ±¡’„Œ²ˆ¥„Œ³°Œ¶„Œ´¶‡‰„Œµ°“„Œ¶­“„Œ·¼€„Œ¸¸„„Œ¹ˆ”œ„Œº€­“„Œ»ˆž„Œ¼°Œ±„Œ½ˆ”Š„Œ¾¼Š€„Œ¿°”•„€µ€„­”„‚¼‰€„ƒ°‰„„”¡»„…„­”„†´ˆ‚„‡¸‚„„ˆ°”•„‰´ˆ‚„Š„­‰„‹¡“„Œˆ˜„¼ˆ€„ް”•„ˆ”œ„€­”„‘ˆž„’°Œ½„“¬¡¬„”°‚„•†®©„–¡„—„®™„˜°ƒ„™€€€„š¿¿¿„›„®™„œ°ƒ„€€€„žŒ ¶„Ÿˆƒ„ ¼ˆ€„¡°‰©„¢¿¿¿„£„ ¶„¤²„¥€€€„¦¿¿¿„§œ­£„¨¼‰€„©°¶„ª„­£„«œ¡†„¬ˆŽ„­„¢Œ„®ˆŠ„¯€¿€„°€€„±¢Œ„²ˆ‘¦„³Œ º„´¢Œ„µ²¥„¶­¢„·¼Š€„¸ˆ’¬„¹„­¤„ºˆ‘Ž„»¿€„¼„­¢„½ˆŽ·„¾€¿„¿€­¥„Ž€€€‰„Ž¡˜„Ž‚„­£„Žƒ°¦„Ž„€€€„Ž…µ€„ކ­£„އ¬¡˜„Žˆ°Ž„މœ¡†„ŽŠ„¢Œ„Ž‹´ˆ‚„ŽŒ†¢Œ„ŽŒ º„ŽŽ¤­£„޲ބ„Ž­¢„Ž‘„¿€„Ž’ˆŽ·„Ž“€­¥„Ž”€¿„Ž•€€‰„Ž–´ˆ‚„Ž—„­¢„Ž˜ˆ‘¦„Ž™Œ º„Žš¡„Ž›„­£„Žœ²Ž„„Ž€€€„Žž¨¡°„ŽŸœ¡¸„Ž „Ž¡„Ž¡€€„Ž¢²Ž„Ž£€€€„ޤµ„„Ž¥’Ž£„ަ„¢„ާ¤Ž£„ލ´ˆ‚„Ž©ž¢„Žª¼€„Ž«°Ž³„ެ’Ž£„Ž­„¢„Ž®¤Ž£„ޝ´ˆ‚„ްž¢„ޱ¼€„޲¼‹€„޳¤Ž£„Ž´´ˆ‚„޵¼€„޶²Ž£„Ž·€€€„ޏ¿¿¿„޹žŽ·„Žº„€ˆ„Ž»¤Ž·„޼¿¿¿„޽žŽ·„޾„€‰„Ž¿¤Ž·„€¿¿¿„žŽ·„‚¼€„ƒ„¢„„¤Ž·„…’€ˆ„††€‰„‡¤¢„ˆ°…„‰²Ž·„Š€€€„‹¿¿¿„ŒžŠ„„€ˆ„ޤЄ¿¿¿„žŠ„‘¼€„’„¢„“¤Š„”Ž€ˆ„•¤¢„–°”„—²Š„˜€€€„™„¢Ž„š½€€„›ˆ¯„œ²˜„œ¡³„ž„¢„Ÿ¢Ž„ ˆ‰„¡­‰„¢„£„£¤˜„¤²˜„¥€€€„¦ˆ¯„§²¥„¨œ¡¹„©„¬„ª½€€„«ˆ‰„¬£„­¤¥„®²¥„¯€€€„°¼ ˆ„±œ¡ˆ„²„¹„³œ¡¿„´„…„µœ¡„¶„„„·œ¡¼„¸„½„¹¢°„º¼Š€„»²¯„¼„­ˆ„½¬¢±„¾°ƒ„¿œ¡¸„€„„£€„‚°…„ƒ½€€„„„¢±„…„¢°„†¤¯„‡­ˆ„ˆ²¯„‰€€€„м ˆ„‹œ¡‡„Œ„š„œ¡„Ž„›„œ¡·„„‘„‘¢¯„’¼Š€„“°™„”œ¡²„•„—„–­ˆ„—„£€„˜°›„™­ˆ„š„¢°„›„¢±„œ²‰„€€€„ž„¢‘„Ÿ¿¿¼„ „¢„¡¾¨·„¢„¢„£¢‘„¤¬¢„¥²„¦¾„§œ¢„¨¤¢„©¤¢„ª°£„«¤„¬²„­€€€„®½€€„¯ˆ„°°³„±¾¨·„²„¢„³¢„´„‘€„µœ¡¡„¶„¿„·¼€„¸œ¡„¹œ¬»„º¨¡°„»¼Š€„¼°‘‚„½„‘„¾ˆŽ·„¿€€€„‘€€€€„‘€€€„‘‚¿¾¿„‘ƒœ¬»„‘„„¢„‘…œ¡„‘†„‘‹„‘‡­Š„‘ˆ†¢„‘‰ˆŽ·„‘Š€¿€„‘‹€€€„‘Œ€€„‘²­„‘Ž€€€„‘ˆŽ£„‘€¡„‘‘€¡­„‘’ˆ’¬„‘“¬­Š„‘”²‘Ž„‘•„­Š„‘–ˆ„‘—°‘œ„‘˜­Š„‘™ˆ‘²„‘š€°€„‘›°‘¤„‘œŽ¢„‘¾€„‘žœ¢„‘Ÿ„‘¡„‘ ˆŽ·„‘¡€€€„‘¢€¿€„‘£€€„‘¤ˆ­„‘¥²‘Ž„‘¦€€€„‘§ˆŽ£„‘¨€¡„‘©€¡­„‘ªˆ’¬„‘«ˆ‘²„‘¬€¸€„‘­­Š„‘®ˆ„‘¯Ž¢„‘°ˆ­„‘±²‘¦„‘²€€€„‘³„­Š„‘´¼ €„‘µµ›“„‘¶€„‘·„¢’„‘¸´ˆ‚„‘¹µ›“„‘º€€Š„‘»„¢“„‘¼´†–„‘½”¢“„‘¾´‡ˆ„‘¿„¢“„’€¢’„’µ›“„’‚€€Š„’ƒ„¢’„’„´†–„’…”¢’„’†”¢“„’‡”¡¸„’ˆ„¢’„’‰ˆ’„’Š¿¿€„’‹€¿€„’Œ€¢’„’€‘²„’ޤ‘²„’²‘²„’€€€„’‘¿¿¶„’’„¢“„’“¿¿¿„’”œ’„’•„€Œ„’–¸¹¡„’—’€Œ„’˜¸¹”„’™’€Œ„’š¸¹¢„’›’€Œ„’œˆŽ„’¸¹„„’žŒ ¼„’Ÿ’€Œ„’ ˆŽ„’¡ˆŽ„’¢¸¹¤„’£ ¼„’¤¼Š€„’¥°’£„’¦ ½„’§¼€„’¨²€Œ„’©¤¢“„’ª°’“„’«ˆ’¬„’¬€€€„’­¤¢”„’®°’­„’¯¸€‚„’°¼€ „’±ˆŽ·„’²¾€€„’³€€„’´€€„’µ¼€ „’¶°’µ„’·€€€„’¸¼ €„’¹´‡ƒ„’º„¢•„’»ˆ’„’¼¿¿€„’½€®™„’¾€¢•„’¿€’·„“€¢•„“œ¡œ„“‚„¢•„“ƒˆ’„“„¿€€„“…€€„“†€¢•„“‡€’·„“ˆ¤’·„“‰²’·„“Š€€€„“‹¯š„“Œµ€„“®¤„“޼‰€„“²“Š„“¬¯¢„“‘´…‚„“’´ˆ‚„““¨­€„“”¼‚€„“•²“Š„“–ˆ™„“—€€€„“˜¿¿¶„“™„¢–„“𢖄“›œ¡˜„“œˆ“°„“ˆ’¬„“ž¯¯„“Ÿ¼€„“ °“¤„“¡¤¢–„“¢°“š„“£²“—„“¤­€„“¥”¡»„“¦„¯¯„“§¯™„“¨„¯±„“©¢–„“ªœ¡˜„“«„®™„“¬Œ¯°„“­ˆ”‚„“®¤“—„“¯²“—„“°€€€„“±ˆŽ£„“²€¡Ž„“³€¡—„“´²“°„“µ¼ €„“¶µ™’„“·€€ƒ„“¸´ˆ‚„“¹œ¡„“º„¢—„“»„“½„“¼ˆŽ·„“½€€€„“¾€¯¯„“¿€€ƒ„”€¤“°„”²“°„”‚€€€„”ƒ¢—„”„„”‡„”…ˆŽ·„”†€¯¯„”‡€€€„”ˆ€€ƒ„”‰²”‚„”Š€€€„”‹®©„”Œ¬®«„”°”™„”Ž®©„”¼€ˆ„”’®©„”‘¼„€„”’´…‰„”“¨¡ª„””²”Š„”•®©„”–˜¡»„”—„®©„”˜°”‹„”™®ª„”š„®™„”›°ƒ„”œ€€€„”¾­°„”ž„€ˆ„”Ÿ¡¸„” µ€„”¡’®§„”¢®€ˆ„”£°”ª„”¤¤€ˆ„”¥¤€ˆ„”¦¤€ˆ„”§½€€„”¨´…„”©°”¡„”ªœ¡¶„”«†®§„”¬’”œ„”­„¢˜„”®’¢˜„”¯´€‚„”°†¢˜„”±¤”œ„”²²”œ„”³€€€„”´Œ¯¦„”µ¼ˆ€„”¶¤¯¦„”·¯¦„”¸ˆ™„„”¹¯§„”º¼‚€„”»°”¶„”¼²”³„”½€€€„”¾„¢™„”¿ˆ”³„•€¡œ„•„¯™„•‚¤¯™„•ƒ¯™„•„ˆ˜„•…¯š„•†¼‰€„•‡°•‚„•ˆ¯™„•‰„¯§„•ŠˆŽ·„•‹€­„„•Œ€¯¨„•€€„„•ޤ­®„•­®„•„¯¬„•‘„¯¥„•’¢™„•“”¡»„•”„¯š„••®¤„•–„¯¢„•—¿¿¿„•˜„¯£„•™Œ¯¤„•šˆŠ„•›€¯›„•œ€€‡„•ˆ˜¦„•žˆ™ž„•Ÿ²”½„• €€€„•¡¨¡§„•¢¼Š€„•£²• „•¤¬¡™„•¥°•°„•¦µ€„•§¬¡˜„•¨ˆ•¼„•©’¤¤„•ª¬¡»„•«°•²„•¬´€‚„•­†¤¤„•®¤¤¤„•¯²• „•°ˆ–†„•±²• „•²¤¤„•³¬¡„„•´°–‚„•µ„€ˆ„•¶¡»„•·†€ˆ„•¸½€€„•¹¶†™„•º†¤¤„•»²• „•¼€€€„•½¤¥„•¾¬¡¢„•¿°–‚„–€¤¤¥„–²•¼„–‚¡«„–ƒ¸¤”„–„¤• „–…²• „–†€€€„–‡¡…„–ˆ„¤¤„–‰¡»„–Š„¤©„–‹Œ¤¥„–Œ²–†„–€€€„–ޏ€‚„–¸…„–„¬½„–‘¿¿¿„–’„­ž„–“¸€¢„–”²–„–•€€€„––’®£„–—¤®£„–˜²–•„–™€€€„–šˆ–•„–›„–„–œˆŽ·„–€€€„–ž€­„„–Ÿ€€„„– ®¦„–¡ˆ—Ÿ„–¢€­„„–£ˆ™„–¤²–™„–¥€€€„–¦ˆ–•„–§„®©„–¨ˆ–•„–©„®«„–ªˆ›¸„–«®«„–¬¼Š€„–­²–¥„–®¬¡„–¯°–²„–°¯¤„–±²–¥„–²¯°„–³²–¥„–´€€€„–µˆ–™„–¶ˆ˜„–·®¤„–¸¼€„–¹¬¯¢„–º¼ˆ€„–»ˆ™„–¼²–´„–½€€€„–¾¿¿¹„–¿„¢š„—€¡‚„—„¢›„—‚’¢›„—ƒ¼Š€„—„°—˜„—…¯š„—†¨¡¸„—‡¼Š€„—ˆ°—•„—‰¿¿€„—Š„¢œ„—‹¡ƒ„—Œ„¢„—’¢›„—Žˆ‘Ž„—’¢„—¼‚€„—‘ˆŽ„„—’¤¢„—“¤¢œ„—”°—„—•’¢›„—–ˆŽ„„——Ž¢›„—˜¤¢›„—™¤¢š„—š°—‚„—›¯š„—œ¨¡½„—„¯š„—ž²–½„—Ÿ€€€„— ˆ˜„—¡¿¿¿„—¢ž—Ÿ„—£„¢Ÿ„—¤¤—Ÿ„—¥¯š„—¦¨¡œ„—§¼Š€„—¨²—Ÿ„—©¿¿¸„—ªœ¯¤„—«¼€„—¬¶…ƒ„—­„¢ž„—®¼Š€„—¯²—Ÿ„—°Œ¯¦„—±¯¦„—²ˆ™„„—³¯§„—´¼Š€„—µ°˜‹„—¶¢Ÿ„—·„€ˆ„—¸¯¨„—¹®€ˆ„—º¼ˆ€„—»°˜‹„—¼¯©„—½®€ˆ„—¾¼ˆ€„—¿°˜‹„˜€¯ª„˜®€ˆ„˜‚¼ˆ€„˜ƒ°˜‹„˜„¯«„˜…®€ˆ„˜†¼ˆ€„˜‡°˜‹„˜ˆ¯§„˜‰¤—Ÿ„˜Š²—Ÿ„˜‹¤¯¦„˜Œ¤¢ž„˜°—±„˜Ž²—Ÿ„˜€€€„˜„¯™„˜‘¼ €„˜’µ›“„˜“€€…„˜”„¢ „˜•´ˆ‚„˜–œ¡„˜—„¢¡„˜˜ˆ‘Ž„˜™¢ „˜š¼ €„˜›µ™’„˜œ€€Œ„˜´ˆ‚„˜žœ¡ƒ„˜Ÿ„¢ „˜ „˜¢„˜¡ˆŽ·„˜¢€€€„˜£€¯š„˜¤€€Œ„˜¥²˜„˜¦€€€„˜§¢¡„˜¨ˆ‘Ž„˜©¾¯™„˜ª„€ˆ„˜«¿¿¿„˜¬œ¢ „˜­„€‰„˜®¿¿´„˜¯„¢¢„˜°’€ˆ„˜±®€‰„˜²¼ˆ€„˜³°˜·„˜´¤¢¢„˜µ°˜°„˜¶²˜¦„˜·¿¿¿„˜¸œ€ˆ„˜¹„€ˆ„˜º¿¿¿„˜»œ€‰„˜¼„€‰„˜½’€ˆ„˜¾†€‰„˜¿¤¢¢„™€°˜½„™¢¡„™‚ˆ‘¦„™ƒ²˜¦„™„€€€„™…„¯¦„™†¶‡ƒ„™‡„¢£„™ˆˆ™ª„™‰„¢¤„™Šˆ‘Ž„™‹¢£„™Œ¨¡ „™œ¡ƒ„™Ž„¢¥„™„™‘„™ˆŽ·„™‘€€€„™’€¯§„™“€€ˆ„™”¢£„™•œ¡–„™–ˆŽ£„™—€¡Ž„™˜€¯¤„™™¼ˆ€„™š²™„„™›ˆœ‚„™œŒ¯§„™²™„„™ž€€€„™Ÿ¢¤„™ ˆ‘Ž„™¡¢¥„™¢„™¥„™£ˆŽ·„™¤€¯§„™¥€€€„™¦€€ˆ„™§¢¤„™¨ˆ‘¦„™©²™ž„™ª€€€„™«¶…†„™¬„¢¦„™­¯š„™®¨¡¸„™¯¼‚€„™°°š„™±¢¦„™²ˆŽ£„™³€¡Ž„™´€¡”„™µ°™½„™¶œ¡‚„™·„¢¦„™¸’¢¦„™¹¼Š€„™ºˆ¥„™»†¢¦„™¼²™ª„™½ˆ¥„™¾„¢§„™¿ˆŽ·„š€€¯›„š€¿€„š‚€€‡„šƒˆŠ„š„€¿‡„š…€€¹„š†¢§„š‡ˆ‘¦„šˆ¢§„š‰„¯›„šŠˆŠ„š‹€¯œ„šŒ€€†„š¯š„šŽ”¡¸„š„¯š„𢦄𑶅†„š’ˆŽ£„𓀡ބ𔀡”„š•ˆ’¬„š–œ¡‚„š—„¢§„š˜’¢§„š™¼Š€„ššˆ¥„𛆢§„šœ„¢¨„šˆ‘Ž„šž¢¦„šŸ¨¡ „š œ¡ƒ„š¡„¢§„𢒢§„𣼂€„𤲙ª„š¥ˆ¥„𦄢¦„𧢍„š¨ˆ‘Ž„š©¢¦„šª†¢§„𫢍„š¬ˆ‘¦„𭢦„𮲙ª„𝀀€„š°„¢©„š±š¯„š²„š¶„š³›„š´„š¯„šµ°šº„š¶€€€„š·„¢©„š¸œ¢„š¹„š¯„šº¿¿¿„š»žš¶„𼄀Є𽄀‹„š¾¤š¶„š¿’š¶„›€„¢ª„›¤š¶„›‚¡´„›ƒ š¯„›„¯¤„›…¼€„›†œ¢©„›‡¼€„›ˆˆŽ£„›‰€¡Ž„›Š€¢ª„›‹¢ª„›Œ„¢«„›¼€„›Žœ¡„›¼Š€„›²š¶„›‘„¢ª„›’¢©„›“ˆ™ª„›”„¢¬„›•ˆ‘Ž„›–¢©„›—¨¡ „›˜œ¡ƒ„›™œ¢„„›š š¯„››°›ž„›œ„€Š„›¼ˆ€„›ž„€‹„›Ÿ’€‹„› †€Š„›¡¤¢©„›¢¤¢ª„›£°›¯„›¤ š¯„›¥°›­„›¦¢©„›§ˆŽ£„›¨€¡Ž„›©€¯¤„›ª„¯¤„›«¢¬„›¬ˆ‘¦„›­¢«„›®²š¶„›¯¢©„›°¨¡ „›±¼‚€„›²°›Ÿ„›³ š¯„›´°›’„›µ¢¬„›¶ˆ‘¦„›·°›’„›¸€€€„›¹®™„›ºˆ“°„›»ˆ™„›¼¯¯„›½¼€„›¾ˆ™„›¿¯±„œ€ˆ˜„œ²›¸„œ‚€€€„œƒ„¯¤„œ„ˆ˜¦„œ…¯¤„œ†²œ‚„œ‡„ ¹„œˆ¸§¡„œ‰°œš„œŠ¸§±„œ‹¸§ª„œŒ„­š„œ¼ˆ„œŽ°œ•„œ¸§Š„œ„­„œ‘¿¿¿„œ’„­›„œ“­š„œ”¼€ˆ„œ•¼€„œ–°Ÿ­„œ—¿¿¿„œ˜„­œ„œ™°Ÿ­„œš¸€„œ›°œ¶„œœ¸¤Š„œ„¬¾„œž¤­°„œŸ¼ˆ€„œ ¤­¯„œ¡¤¬¼„œ¢¼€€„œ£¿¿¿„œ¤„€‡„œ¥¸€¤„œ¦­ƒ„œ§¼‰€„œ¨¤­ƒ„œ©¼ˆ€„œªˆº„œ«­ž„œ¬¼Š€„œ­°Ÿ­„œ®¤ »„œ¯¼ˆ€„œ°°Š„œ±¬¡‘„œ²°Ÿ­„œ³¤­ž„œ´°Ÿ­„œµ°Š„œ¶¸¹‘„œ·°œ¾„œ¸¿¿¿„œ¹„ ¼„œº¸¹š„œ»„ ½„œ¼¸¹¡„œ½°Ÿ­„œ¾¸ˆª„œ¿¼ˆ„€°‘„¸…„‚­ž„ƒ¼Š€„„°Ÿ­„…œ¢ƒ„†¼Š€„‡°Š„ˆ„­ž„‰°Ÿ­„Š¡„‹„­ž„Œ¬½„¸…§„Ž¿¿¶„„ »„°Ÿ­„‘¼ˆ„’°•„“¸‡¢„”°Ÿ­„•¼€„–°›„—¸ˆŠ„˜„­Ÿ„™¸‡“„š°Ÿ­„›¸ƒ„œ°µ„­ƒ„ž¼€„Ÿ¤­ƒ„ ¸ƒŠ„¡„­‰„¢¬¡©„£° ‘„¤¡„¥ˆ˜„¦Œ­‰„§­„¨ˆŸ²„©„­„ª­‰„«¬¡¨„¬¼ˆ€„­°Ÿ­„®­‘„¯¼€„°”¡»„±„­‘„²ˆ Œ„³ˆº„´°Ÿ­„µ¸„„¶°ž–„·¸„‚„¸ˆº„¹°Ÿ­„º€€€„»­ƒ„¼¼‰€„½²º„¾­„¿Œ­„ž€¼‚€„ž°ž†„ž‚¤­ƒ„žƒ¡„ž„ˆ¥„ž…°ž’„ž†¸„†„ž‡¬¡˜„žˆˆ Œ„ž‰¬¡š„žŠ¼ˆ€„ž‹²º„žŒ­ƒ„žœ¡œ„žŽ¼ „ž¼€„ž„­ƒ„ž‘²º„ž’­‘„ž“ˆŸ²„ž”„­‘„ž•²º„ž–¸£„ž—°ž¤„ž˜¸£„„ž™¸£Š„žš„­‰„ž›¬¡„žœ° ¤„ž¡‘„žžˆ˜„žŸ¼€€„ž ­’„ž¡ˆŸ²„ž¢„­’„ž£°Ÿ­„ž¤¸„ž¥°ŸŠ„ž¦­‚„ž§¼Š€„ž¨°ž­„ž©„­‰„žª¸Š„ž«„­‚„ž¬°ž¯„ž­¸Š„ž®„­‰„ž¯­‰„ž°¼Š€„ž±°ž¸„ž²¡’„ž³ˆ˜„ž´°Ÿ„„žµ­‰„ž¶¬¡’„ž·°Ÿ†„ž¸­‚„ž¹¼Š€„žº°ž¾„ž»„­‰„ž¼Œ­‚„ž½°ž¯„ž¾¸„„ž¿­“„Ÿ€ˆŸ²„Ÿ”¡»„Ÿ‚„­“„Ÿƒ°Ÿ­„Ÿ„­‰„Ÿ…„­‚„Ÿ†­“„Ÿ‡ˆŸ²„Ÿˆ„­“„Ÿ‰°Ÿ­„ŸŠ¸‚„Ÿ‹°Ÿ–„ŸŒ¸‚‚„Ÿ¡“„ŸŽˆ¥„Ÿ°Ÿ’„Ÿ¸‚„„Ÿ‘°Ÿ­„Ÿ’­”„Ÿ“ˆŸ²„Ÿ”„­”„Ÿ•°Ÿ­„Ÿ–¸¤„Ÿ—°Ÿ¥„Ÿ˜¸¤„„Ÿ™¸¤Š„Ÿš„¬¿„Ÿ›¨¡«„Ÿœ¼Š€„Ÿ°Ÿ­„Ÿžˆ–†„ŸŸ­–„Ÿ ˆŸ²„Ÿ¡„­–„Ÿ¢½€€„Ÿ£¸¤”„Ÿ¤°Ÿ­„Ÿ¥¸·„Ÿ¦°Ÿ¬„Ÿ§¸·Š„Ÿ¨„­¡„Ÿ©¿¿¿„Ÿª„­ „Ÿ«°Ÿ­„Ÿ¬¸·Š„Ÿ­€€„Ÿ®¼€ˆ„Ÿ¯ ¹„Ÿ°¸€¢„Ÿ±²€€„Ÿ²€€€„Ÿ³„¢­„Ÿ´¿¿¶„Ÿµ„¢®„Ÿ¶ ¾„Ÿ·„ €„Ÿ¸ ¿„Ÿ¹„ „Ÿº¢­„Ÿ»¼€ˆ„Ÿ¼„¢­„Ÿ½¼€„Ÿ¾° ‚„Ÿ¿¢€„ €œ€€„ „€€„ ‚ €„ ƒœ¡’„ „„ €„ … „ †œ¡’„ ‡„ „ ˆ¤¢®„ ‰°Ÿº„ Š½€€„ ‹²Ÿ²„ Œ€€€„ ¡š„ Ž„­„ ½€€„ ² Œ„ ‘¡”„ ’„ ·„ “¡„ ”ˆ¥„ •¼ˆ€„ –° “„ —¡„ ˜ˆ¥„ ™¼ˆ€„ š° —„ ›­„ œˆŸ²„ „­„ ž­‘„ ŸˆŸ²„  „­‘„ ¡ˆƒ„ ¢°Ÿ­„ £° ²„ ¤¡•„ ¥„ ¸„ ¦¡‘„ §ˆ¥„ ¨¼ˆ€„ ©° ¦„ ª­’„ «ˆŸ²„ ¬„­’„ ­­–„ ®ˆŸ²„ ¯„­–„ °ˆƒ„ ±°Ÿ­„ ²€€„ ³„€„ ´ ¹„ µ°€‘„ ¶€€€„ ·€€€„ ¸€€€„ ¹€€€„ º€€€„ »€€€„ ¼€€€„ ½€€€„ ¾œ­±„ ¿„­±„¡€€€ž„¡€®¬„¡‚€¯›„¡ƒ€¿€„¡„€¨´„¡…€¤©„¡†€­¤„¡‡„¢°„¡ˆ¢°„¡‰€£€„¡Š‰®„¡‹‰´„¡Œ„€ „¡„€ „¡Ž€€€„¡€€„¡€€‚„¡‘€€ƒ„¡’€€„„¡“€€…„¡”€€†„¡•€€‡„¡–€€ˆ„¡—€€‰„¡˜€€Š„¡™€€Œ„¡š€€„¡›€€„¡œ€€„¡€€›„¡ž€€ „¡Ÿ€€­„¡ €€¿„¡¡€„¡¢€€¡„¡£€š„¡¤€œ„¡¥€Ÿ„¡¦€­„¡§€¿„¡¨€‚Š„¡©€ƒ½„¡ª€‡¿„¡«€€„¡¬€ €„¡­¼¿„¡®€€„¡¯¿²„¡°¿¿„¡±‚€„¡²„€€„¡³„€„¡´‡€€„¡µ‡¿¿„¡¶ˆ€€„¡·Œ€€„¡¸€€„¡¹€„¡º˜€€„¡» €€„¡¼¨€€„¡½¯¿¿„¡¾°€€„¡¿´€€„¢€¸€€„¢¿¿€„¢‚¿¿°„¢ƒ¿¿½„¢„¿¿¿„¢°€£€„¢±€¤¢„£€€£‚„£€€€„£‚€£„„£ƒ€€€„£„€£†„£…€€€„£†€£ˆ„£‡€€€„£ˆ€£Š„£‰€€€„£Š€£Œ„£‹€€€„£Œ€£Ž„£€€€„£Ž€£„£€€€„£€£’„£‘€€€„£’€£”„£“€€€„£”€£–„£•€€€„£–€£˜„£—€€€„£˜€£š„£™€€€„£š€£œ„£›€€€„£œ€£ž„£€€€„£ž€£ „£Ÿ€€€„£ €£¢„£¡€€€„£¢€£¤„££€€€„£¤€£¦„£¥€€€„£¦€£¨„£§€€€„£¨€£ª„£©€€€„£ª€£¬„£«€€€„£¬€£®„£­€€€„£®€£°„£¯€€€„£°€£²„£±€€€„£²€£´„£³€€€„£´€£¶„£µ€€€„£¶€£¸„£·€€€„£¸€£º„£¹€€€„£º€£¼„£»€€€„£¼€£¾„£½€€€„£¾€¤€„£¿€€€„¤€€¤‚„¤€€€„¤‚€¤„„¤ƒ€€€„¤„€¤†„¤…€€€„¤†€¤ˆ„¤‡€€€„¤ˆ€¤Š„¤‰€€€„¤Š€¤Œ„¤‹€€€„¤Œ€¤Ž„¤€€€„¤Ž€¤„¤€€€„¤€¤’„¤‘€€€„¤’€¤”„¤“€€€„¤”€¤–„¤•€€€„¤–€¤˜„¤—€€€„¤˜€¤š„¤™€€€„¤š€¤œ„¤›€€€„¤œ€¤ž„¤€€€„¤ž€¤ „¤Ÿ€€€„¤ €¤¢„¤¡€€€„¤¢€€€„¤£€€€„¤¦†¨¯„¤§Œ¿ „¤¨Ž€€„¥‡Œ€„¥ˆ¸›‚„¥‰¸€¢„¥Š¸€¤„¥‹¾°€„¥Œ¸¢†„¥ˆ–†„¥Ž¾¤¦„¥ˆ–„¥½€€„¥‘ˆ‘²„¥’€°€„¥“ˆŽ·„¥”€¿€„¥•€­¢„¥–€€„¥—¡‘„¥˜ˆ—Ÿ„¥™€¡Š„¥šˆ’¬„¥›ˆ˜„¥œ½€€„¥ˆš¶„¥ž€€„¥Ÿ€€„¥ ±€€„¬»€¬»„­‹€€„­±‹ˆ€„­²€€„­³€€€„­´€€€„­µƒˆ „­¶€€€„­·€€€„­¸€€€„­¹ƒ‰€„­º€€€„­»€€€„­¼€€€„­½ƒ‰ „­¾€€€„­¿€€€„®€€€€„®ƒŠ€„®‚€€€„®ƒ€€€„®„€€€„®…ƒŠ „®†€€€„®‡€€€„®ˆ€€€„®‰ƒ‹€„®Š€€€„®‹€€€„®Œ€€€„®ƒ‹ „®Ž€€€„®€€€„®€€€„®‘ƒŒ€„®’€€€„®“€€€„®”€€€„®•ƒŒ „®–€€€„®—€€€„®˜€€€„®™€€€„®š€€€„®¤¿¿¿„®¥€€„®¦€€ƒ„®§€­±„®¨€€€„®©€€€„®ª€€€„®«€€€„¯Š€€€„¯‹€€„¯±€€€¼€  \ No newline at end of file diff --git a/build/alt/image.fs b/build/alt/image.fs deleted file mode 100644 index d37e6413ca9530670c6d50a311cbfefbe4fb3261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096000 zcmZP=1*0J_8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@? z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@? z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?8UmvsFd71*U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$( zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON 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 zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?3PwXRZa(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7 zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c z4S~@R7zLvtFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@? z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71* zAut*OqaiRF0;6Cw1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$( zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON 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
  • r0j)?(O7J=dm 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