mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-02-14 03:54:52 +00:00
3097 lines
107 KiB
Plaintext
3097 lines
107 KiB
Plaintext
--- ../unixv1_080502/unixv1.edited 2008-05-02 10:42:06.000000000 -0400
|
||
+++ pages 2008-05-02 16:38:48.000000000 -0400
|
||
@@ -1,9 +1,3 @@
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u0 -- unix
|
||
|
||
cold = 0
|
||
@@ -25,7 +19,7 @@
|
||
dae = 177470 / drum address extension rf11/rs11
|
||
lks = 177546 / clock status reg kw11-l
|
||
prs = 177550 / papertape reader status pc11
|
||
- prb = 177552 / lmffer pc11
|
||
+prb = 177552 / buffer pc11
|
||
pps = 177554 / punch status pc11
|
||
ppb = 177556 / punch buffer pc11
|
||
/lps = 177514 line printer status (future)
|
||
@@ -52,20 +46,13 @@
|
||
ecore = core+20000 / specifies end of user's core (4096 words)
|
||
|
||
/ 4;4 init by copy
|
||
- / unkni;0 " bus error
|
||
+/ unkni;0 " error
|
||
/ fpsym;0 " illg in tr
|
||
unkni;0 / trace and trap (see Sec. B.1 page )
|
||
unkni;0 / trap
|
||
panic;0 / pwr
|
||
rtssym;0 / emt
|
||
sysent;0 / sys
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
. = orig+60
|
||
ttyi;240 / interrupt vector tty in ; processor level 5
|
||
ttyo;240 / interrupt vector tty out
|
||
@@ -80,7 +67,7 @@
|
||
tape;300 / dec tape interrupt
|
||
disk;300 / rk03 interrupt
|
||
. = orig+300
|
||
- 0*4+trcv; 240; 0*4+txmt; 240 / dc11 input,output interrupt vectors
|
||
+ 0*4+trcv; 240; 0*4+txmt; 240 / dc11 input;output interrupt vectors
|
||
1*4+trcv; 240; 1*4+txmt; 240
|
||
2*4+trcv; 240; 2*4+txmt; 240
|
||
3*4+trcv; 240; 3*4+txmt; 240
|
||
@@ -100,12 +87,12 @@
|
||
mov r0,(r1)+ / put value of 4 into location 2
|
||
mov $unkni,(r1)+ / put value of unkni into location 4;
|
||
/ time out, bus error
|
||
- clr (r1)+ / put value of 0 into location
|
||
+ clr (r1)+ / put value of 0 into location 6
|
||
mov $fpsym,(r1)+ / put value of fpsym into location 10
|
||
clr (r1)+ / put value of 0 into location 12
|
||
/ clear core
|
||
.if cold / ignored if cold = 0
|
||
- halt / halt before initializing rf file system, user has
|
||
+ halt / halt before initializing rf file system; user has
|
||
/ last chance to reconsider
|
||
.endif
|
||
|
||
@@ -123,12 +110,6 @@
|
||
|
||
/ allocate disk buffers; see H.0 for description
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov $bufp,r1
|
||
1:
|
||
mov r0,(r1)+
|
||
@@ -178,20 +159,13 @@
|
||
|
||
mov $1024.-64.,r1 / highest drum address; high 64 blks allocated
|
||
/ to UNIX
|
||
- mov $p.dska,r2 / p.dska contains distaddresses for processes
|
||
+ mov $p.dska,r2 / p.dska contains dis addresses for processes
|
||
1:
|
||
sub $17.,r1 / 17 blocks per process
|
||
mov r1,(r2)+
|
||
cmp r2,$p.dska+nproc+nproc
|
||
bne 1b
|
||
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ free rest of drum
|
||
|
||
.if cold
|
||
@@ -209,7 +183,7 @@
|
||
/ zero i list
|
||
|
||
1:
|
||
- dec r0 / r0 = 33.,...,1
|
||
+ dec r1 / r1=33.,...,1
|
||
jsr r0,clear / zero block 'r1' on fixed head disk
|
||
tst r1
|
||
bgt 1b / if blocks 33,...,1 have all been zeroed, done.
|
||
@@ -235,7 +209,7 @@
|
||
mov $40.,r1 / set r1=i-node-number 40.
|
||
1:
|
||
jsr r0,iget / read i-node 'r1' from disk into inode area of
|
||
- / ccre and write modified inode out (if any)
|
||
+ / core and write modified inode out (if any)
|
||
mov $100017,i.flgs / set flags in core image of inode to indi-
|
||
/ cate allocated, read (owner, non-owner),
|
||
/ write (owner, non-owner)
|
||
@@ -249,18 +223,11 @@
|
||
/ initialize i-nodes r1.,...,47. and write the root device, binary, etc.,
|
||
/ directories onto fixed head disk. user temporary, initialization prog.
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
mov $idata,r0 / r0=base addr. of assembled directories.
|
||
mov $u.off,u.fofp / pointer to u.off in u.fofp (holds file
|
||
/ offset)
|
||
1:
|
||
- mov (r0)+,r1/r1=41.,...,47, "0" in the assembled directory
|
||
+ mov (r0)+,r1/r1=41.,...,47; "0" in the assembled directory
|
||
/ header signals last
|
||
beq 1f / assembled directory has been written onto drum
|
||
jsr r0,imap / locate the inode map bit for i-node 'r1'
|
||
@@ -270,13 +237,13 @@
|
||
/ core and write modified i-node on drum (if any)
|
||
mov (r0)+,i.flgs / set flags in core image of inode from
|
||
/ assembled directories header
|
||
- movb (r0)+.i.nlks / set no. of links from header
|
||
+ movb (r0)+,i.nlks / set no. of links from header
|
||
movb (r0)+,i.uid / set user id of owner from header
|
||
jsr r0,setimod / set imod=1 to indicate inode modified; also,
|
||
/ stuff time of modification into i-node
|
||
mov (r0)+,u.count / set byte count for write call equal to
|
||
/ size of directory
|
||
- mov r0,u.base / set buffer address for write to top of'directopy
|
||
+ mov r0,u.base / set buffer address for write to top of directory
|
||
clr u.off / clear file offset used in 'seek' and 'tell'
|
||
add u.count,r0 / r0 points to the header of the next directory
|
||
jsr r0,writei / write the directory and i-node onto drum
|
||
@@ -284,17 +251,16 @@
|
||
.endif
|
||
|
||
/ next 2 instructions not executed during cold boot.
|
||
- bis $2000,sb0 / sb0 I/O queue entry for superblock on drum,
|
||
+ bis $2000,sb0 / sb0 I/O queue entry for superblock on drum;
|
||
/ set bit 10 to 1
|
||
jsr r0,ppoke / read drum superblock
|
||
1:
|
||
tstb sb0+1 / has I/O request been honored (for drum)?
|
||
bne 1b / no, continue to idle.
|
||
-
|
||
1:
|
||
decb sysflg / mormally sysflag=0, indicates executing in system
|
||
- sys exec; 2f; 1f / generates trap interrupt, trap vector =
|
||
- / sysent, 0
|
||
+ sys exec; 2f; 1f / generates trap interrupt; trap vector =
|
||
+ / sysent; 0
|
||
br panic / execute file/etc/init
|
||
|
||
1:
|
||
@@ -310,14 +276,6 @@
|
||
dec $5
|
||
bne 1b
|
||
jmp *$173700 / rom loader address
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
rtssym:
|
||
mov r0,-(sp)
|
||
mov r1,-(sp)
|
||
@@ -372,15 +330,7 @@
|
||
badrts:
|
||
mov (sp)+,r1
|
||
mov (sp)+,r0
|
||
-
|
||
rpsym:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
jmp unkni
|
||
|
||
.if cold
|
||
@@ -437,13 +387,6 @@
|
||
<tap2\0\0\0\0>
|
||
09.
|
||
<tap3\0\0\0\0>
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
10.
|
||
<tap4\0\0\0\0>
|
||
11.
|
||
@@ -500,13 +443,6 @@
|
||
<init\0\0\0\0>
|
||
9:
|
||
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 8
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ user directory
|
||
|
||
45.
|
||
@@ -531,7 +467,7 @@
|
||
<.\0\0\0\0\0\0\0>
|
||
9:
|
||
|
||
- / initializaticn program
|
||
+/ initialization program
|
||
|
||
47.
|
||
100036
|
||
@@ -563,13 +499,6 @@
|
||
bhi 3f
|
||
mov r5,0f
|
||
3:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 9
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov r2,r0
|
||
sys write; 9f-8b+core; 0:..
|
||
sub r0,r5
|
||
@@ -586,7 +515,7 @@
|
||
4:
|
||
5f-8b+core; 0
|
||
5:
|
||
- </etc/init\0>
|
||
+ </ect/init\0>
|
||
6:
|
||
</dev/tap0\0>
|
||
.even
|
||
@@ -598,42 +527,6 @@
|
||
|
||
.endif
|
||
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.0 Page 10
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u1 -- unix
|
||
|
||
unkni: / used for all system calls
|
||
@@ -660,7 +553,7 @@
|
||
mov 18.(sp),r0 / store pc in r0
|
||
mov -(r0),r0 / sys inst in r0 10400xxx
|
||
sub $sys,r0 / get xxx code
|
||
- asl r0 / multiply bv 2 to jump indirect in bytes
|
||
+ asl r0 / multiply by 2 to jump indirect in bytes
|
||
cmp r0,$2f-1f / limit of table (35) exceeded
|
||
bhis badsys / yes, bad system call
|
||
bic $341,20.(sp) / set users processor priority to 0 and clear
|
||
@@ -689,13 +582,6 @@
|
||
sysstat / 18
|
||
sysseek / 19
|
||
systell / 20
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
sysmount / 21
|
||
sysumount / 22
|
||
syssetuid / 23
|
||
@@ -752,13 +638,6 @@
|
||
mov (sp)+,r3
|
||
mov (sp)+,r2
|
||
mov (sp)+,r1
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov (sp)+,r0
|
||
mov $s.chrgt+2,clockp
|
||
decb sysflg / turn system flag off
|
||
@@ -815,13 +694,6 @@
|
||
1: / find children of this dying process, if they are zombies, free them
|
||
add $2,r2 / search parent process table for dying process's name
|
||
cmp p.ppid-2(r2),r3 / found it?
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
bne 3f / no
|
||
asr r2 / yes, it is a parent
|
||
cmpb p.stat-1(r2),$3 / is the child of this dying process a
|
||
@@ -845,7 +717,7 @@
|
||
beq 2f / if its been freed, 2f
|
||
cmp r2,$3 / is parent a zombie?
|
||
beq 2f / yes, 2f
|
||
- movb u.uno,r3 / mov, dying process's number to r3
|
||
+ movb u.uno,r3 / move dying process's number to r3
|
||
movb $3,p.stat-1(r3) / make the process a zombie
|
||
cmp r2,$2 / is the parent waiting for this child to die
|
||
bne 2f / yes, notify parent not to wait any more
|
||
@@ -863,8 +735,8 @@
|
||
cmp (sp)+,(sp)+ / pop clock pointer
|
||
1: / now in user area
|
||
mov r1,-(sp) / save r1
|
||
- mov u.ttyp,r1 / pointer to tty buffer in control-to %1
|
||
- cmpb 6(r1),$177 / is the interrupt char equal to del
|
||
+ mov u.ttyp,r1 / pointer to tty buffer in control-to r1
|
||
+ cmpb 6(r1),$177 / is the interrupt char equal to "del"
|
||
beq 1f / yes, 1f
|
||
clrb 6(r1) / no, clear the byte (must be a quit character)
|
||
mov (sp)+,r1 / restore r1
|
||
@@ -878,13 +750,6 @@
|
||
blo 1f
|
||
jmp *u.intr / user to do rti yes, transfer to loc core
|
||
1:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
sys 1 / exit
|
||
|
||
syswait: / wait for a process to die
|
||
@@ -894,12 +759,12 @@
|
||
clr r2
|
||
clr r3 / initialize reg 3
|
||
1:
|
||
- add $2,r2 / use r2 for index into p.ppid table / search zable
|
||
+ add $2,r2 / use r2 for index into p.ppid table / search table
|
||
/ of parent processes for this process name
|
||
cmp p.ppid-2(r2),r1 / r2 will contain the childs process number
|
||
bne 3f / branch if no match of parent process name
|
||
inc r3 / yes, a match, r3 indicates number of children
|
||
- asr r2 / r2/2 to get'index to p.stat table
|
||
+ asr r2 / r2/2 to get index to p.stat table
|
||
cmpb p.stat-1(r2),$3 / is the child process a zombie?
|
||
bne 2f / no, skip it
|
||
clrb p.stat-1(r2) / yes, free it
|
||
@@ -938,16 +803,9 @@
|
||
br error1 / no room for a new process
|
||
1:
|
||
movb u.uno,-(sp) / save parent process number
|
||
- movb r1,u.uno / set child proceSs number to r1
|
||
+ movb r1,u.uno / set child process number to r1
|
||
incb p.stat-1(r1) / set p.stat entry for child process to
|
||
/ active status
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov u.ttyp,r2 / put pointer to parent process' control tty
|
||
/ buffer in r2
|
||
beq 2f / branch, if no such tty assigned
|
||
@@ -956,28 +814,28 @@
|
||
mov $runq+4,r2
|
||
jsr r0,putlu / put child process on lowest priority run queue
|
||
asl r1 / multiply r1 by 2 to get index into p.pid table
|
||
- inc mpid / increment m.pid, get a new process name
|
||
+ inc mpid / increment m.pid; get a new process name
|
||
mov mpid,p.pid-2(r1) / put new process name in child process'
|
||
/ name slot
|
||
movb (sp),r2 / put parent process number in r2
|
||
asl r2 / multiply by 2 to get index into below tables
|
||
mov p.pid-2(r2),r2 / get process name of parent process
|
||
- mov r2,8spid-2(r1) / put parent process name in parent
|
||
+ mov r2,p.ppid-2(r1) / put parent process name in parent
|
||
/ process slot for child
|
||
mov r2,*u.r0 / put parent process name on stack at location
|
||
/ where r0 was saved
|
||
- mov $sysret1,(sp) /
|
||
+ mov $sysret1,-(sp) /
|
||
mov sp,u.usp / contents of sp at the time when user is
|
||
/ swapped out
|
||
mov $sstack,sp / point sp to swapping stack space
|
||
- jsr r0,wswap / put child procers out on drum
|
||
+ jsr r0,wswap / put child process out on drum
|
||
jsr r0,unpack / unpack user stack
|
||
mov u.usp,sp / restore user stack pointer
|
||
tst (sp)+ / bump stack pointer
|
||
movb (sp)+,u.uno / put parent process number in u.uno
|
||
mov mpid,*u.r0 / put child process name on stack where r0
|
||
/ was saved
|
||
- add $2,18.(sp) / add 2 to pc on stack, gives parent
|
||
+ add $2,18.(sp) / add 2 to pc on stack; gives parent
|
||
/ process return
|
||
clr r1
|
||
1: / search u.fp list to find the files opened by the parent process
|
||
@@ -1004,13 +862,6 @@
|
||
|
||
syswrite:
|
||
jsr r0,rw1 / get i-number in r1 of file to write
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
tst r1 / positive i-number ?
|
||
bge error1 / yes, error 1 negative i-number means write
|
||
neg r1 / make it positive
|
||
@@ -1067,13 +918,6 @@
|
||
asr r3 / divide by 8 to get number of the fsp entry-1
|
||
asr r3
|
||
inc r3 / add 1 to get fsp entry number
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
movb r3,u.fp(r2) / move entry number into next available slot
|
||
/ in u.fp list
|
||
mov r2,*u.r0 / move index to u.fp list into r0 loc on stack
|
||
@@ -1130,14 +974,6 @@
|
||
mov $rtssym,30
|
||
2:
|
||
br sysret2
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 8
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
sysilgins: / calculate proper illegal instruction trap address
|
||
jsr r0,arg; 10 / take address from sysilgins call , put
|
||
/ it in loc 8.,
|
||
@@ -1193,13 +1029,6 @@
|
||
/ register
|
||
1:
|
||
mov (r2)+,r3 / move pointer control status to r3
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 9
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
beq 1f / if 0 1f
|
||
mov r3,tcsr(r1) / move p.c. status to printer control status reg
|
||
1:
|
||
@@ -1232,38 +1061,6 @@
|
||
asl r1 / 0%8 / multiply by 8 so r1 points to tty block
|
||
mov u.off,r2 / put argument in r2
|
||
rts r0 / return
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.1 Page 10
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u2 -- unix
|
||
|
||
syslink: / name1, name2
|
||
@@ -1281,7 +1078,7 @@
|
||
br .+4 / not found so r1-i-number of current directory
|
||
/ ii = i-number of current directory
|
||
br error9 / file already exists., error
|
||
- cmp (sp)+,cdev / u.dirp now points to end of current dir
|
||
+ cmp (sp)+,cdev / u.dirp now points to end of current directory
|
||
bne error9
|
||
mov (sp),u.dirbuf / i-number of name1 into u.dirbuf
|
||
jsr r0,mkdir / make directory entry for name2 in current
|
||
@@ -1319,13 +1116,6 @@
|
||
/ into the i-number portion of the entry
|
||
sub $10.,u.off / move u.off back 1 directory entry
|
||
jsr r0,wdir / free the directory entry
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov (sp)+,r1 / get i-number back
|
||
jsr r0,iget / get i-node
|
||
jsr r0,setimod / set modified flag
|
||
@@ -1342,7 +1132,7 @@
|
||
1: / put characters in the directory name in u.dirbuf+2 - u.dirbuf+10
|
||
movb (r2)+,r1 / move character in name to r1
|
||
beq 1f / if null, done
|
||
- cmp r1,$'/ / is it a /"?
|
||
+ cmp r1,$'/ / is it a "/"?
|
||
beq error9 / yes, error
|
||
cmp r3,$u.dirbuf+10. / have we reached the last slot for
|
||
/ a char?
|
||
@@ -1366,7 +1156,7 @@
|
||
jsr r0,namei / namei returns i-number of file named in
|
||
/ sysexec call in r1
|
||
br error9
|
||
- jsr r0,iget / get i-node for fil= to be executed
|
||
+ jsr r0,iget / get i-node for file to be executed
|
||
bit $20,i.flgs / is file executable
|
||
beq error9
|
||
jsr r0,iopen / gets i-node for file with i-number given in
|
||
@@ -1380,15 +1170,8 @@
|
||
1:
|
||
mov (sp)+,r5 / r5 now contains address of list of pointers to
|
||
/ arguments to be passed
|
||
- mov $1,u.quit / u.quit determinss handling of quits,
|
||
+ mov $1,u.quit / u.quit determines handling of quits;
|
||
/ u.quit = 1 take quit
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov $1,u.intr / u.intr determines handling of interrupts;
|
||
/ u.intr = 1 take interrupt
|
||
mov $rtssym,*30 / emt trap vector set to take system routine
|
||
@@ -1403,7 +1186,7 @@
|
||
1:
|
||
tst (r2)+ / argument char = "nul"
|
||
bne 1b
|
||
- tst -(r2) / decrement r2 by 2, r2 has addr of end of argument
|
||
+ tst -(r2) / decrement r2 by 2; r2 has addr of end of arguent
|
||
/ pointer list
|
||
1: / move arguments to bottom of users core
|
||
mov -(r2),r3 / (r3) last non zero argument ptr
|
||
@@ -1422,7 +1205,7 @@
|
||
br 1b / string
|
||
1:
|
||
clrb -(r5)
|
||
- bic $1,r5 / make r5 even, r5 ooints to last word of argument
|
||
+ bic $1,r5 / make r5 even, r5 points to last word of argument
|
||
/ strings
|
||
mov $core,r2
|
||
1: / move argument pointers into core following argument strings
|
||
@@ -1443,15 +1226,8 @@
|
||
mov r5,u.r0 /
|
||
sub $16.,r5 / skip 8 words
|
||
mov r5,u.sp / assign user stack pointer value, effectively
|
||
- / zeroes all reqs whsn sysrele is executed
|
||
+ / zeroes all regs when sysrele is executed
|
||
jsr r0,copyz; core; 0:0 / zero user's core
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
clr u.break
|
||
mov r5,sp / point sp to user's stack
|
||
mov $14,u.count
|
||
@@ -1459,7 +1235,7 @@
|
||
clr u.off / set offset in file to be read to zero
|
||
jsr r0,readi / read in first six words of user's file, starting
|
||
/ at $core
|
||
- mov sp,r5 / put users stacx address in r5
|
||
+ mov sp,r5 / put users stack address in r5
|
||
sub $core+40.,r5 / subtract $core +40, from r5 (leaves
|
||
/ number of words less 26 available for
|
||
/ program in user core
|
||
@@ -1496,7 +1272,7 @@
|
||
neg r1 / make it positive, then branch
|
||
br 1f / to 1f
|
||
|
||
- sysstat: / , name of file; buffer - get files status
|
||
+sysstat: / ; name of file; buffer - get files status
|
||
jsr r0,arg2 / get the 2 arguments
|
||
jsr r0,namei / get the i-number for the file
|
||
br error3 / no such file, error
|
||
@@ -1508,13 +1284,6 @@
|
||
1:
|
||
mov (r2)+,(r3)+ / move rest of i-node to buffer
|
||
cmp r2,$inode+32 / done?
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
bne 1b / no, go back
|
||
br sysret3 / return through sysret
|
||
|
||
@@ -1529,7 +1298,7 @@
|
||
/ fsp table
|
||
movb u.fp(r1),r1 / r1 contains number of entry in fsp table
|
||
beq 1f / if its zero return
|
||
- asl r1 2
|
||
+ asl r1
|
||
asl r1 / multiply by 8 to get index into fsp table entry
|
||
asl r1
|
||
add $fsp-4,r1 / r1 is pointing at the 3rd word in the fsp entry
|
||
@@ -1549,20 +1318,20 @@
|
||
clr cdev / clear device number
|
||
1:
|
||
tstb *u.namep / is the character in file name a nul
|
||
- beq nig / yes, end of file name reached, branch to "nig"
|
||
-
|
||
+ beq nig / yes, end of file name reached; branch to "nig"
|
||
+1:
|
||
jsr r0,access; 2 / get i-node with i-number r1
|
||
bit $40000,i.flgs / directory i-node?
|
||
beq error3 / no, got an error
|
||
mov i.size,u.dirp / put size of directory in u.dirp
|
||
- clr u.off / u.off is file offset used bv user
|
||
+ clr u.off / u.off is file offset used by user
|
||
mov $u.off,u.fofp / u.fofp is a pointer to the offset portion
|
||
/ of fsp entry
|
||
2:
|
||
mov $u.dirbuf,u.base / u.dirbuf holds a file name copied from
|
||
/ a directory
|
||
mov $10.,u.count / u.count is byte count for reads and writes
|
||
- jsr r0,readi / read 10. bytes of file with i-number (r1),
|
||
+ jsr r0,readi / read 10. bytes of file with i-number (r1);
|
||
/ i.e. read a directory entry
|
||
tst u.nread
|
||
ble nib / gives error return
|
||
@@ -1571,13 +1340,6 @@
|
||
/ entry non zero)
|
||
mov u.off,u.dirp
|
||
sub $10.,u.dirp
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
br 2b
|
||
3:
|
||
mov u.namep,r2 / u.namep points into a file name string
|
||
@@ -1590,9 +1352,9 @@
|
||
beq 3f
|
||
cmp r3,$u.dirbuf+10. / have I checked all 8 bytes of file name
|
||
beq 3b
|
||
- cmpb (r3)+,r4 / compare char in u.namep string to f: e name
|
||
+ cmpb (r3)+,r4 / compare char in u.namep string to file name
|
||
/ char read from
|
||
- beq 3b / directory: branch if chars match
|
||
+ beq 3b / directory; branch if chars match
|
||
br 2b / file names do not match go to next directory entry
|
||
3:
|
||
cmp r3,$u.dirbuf+10. / if equal all 8 bytes were matched
|
||
@@ -1602,7 +1364,7 @@
|
||
3:
|
||
mov r2,u.namep / u.namep points to char following a / or nul
|
||
mov u.dirbuf,r1 / move i-node number in directory entry to r1
|
||
- tst r4 / if r4 = 0 the end of file name reac;ed, if r4 = </>
|
||
+ tst r4 / if r4 = 0 the end of file name reached, if r4 = </>
|
||
/ then go to next directory
|
||
bne 1b
|
||
|
||
@@ -1634,14 +1396,7 @@
|
||
beq 1f / yes
|
||
jmp error3 / no, error
|
||
1:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- jsr r0,setimod / indicates i-node has becn modified
|
||
+ jsr r0,setimod / indicates i-node has been modified
|
||
mov (sp)+,r2 / mode is put in r2 (u.off put on stack with
|
||
/ 2nd arg)
|
||
rts r0
|
||
@@ -1653,10 +1408,10 @@
|
||
bic $60,r2 / su & ex / yes, clear set user id and
|
||
/ executable modes
|
||
2:
|
||
- movb r2,i.flgs / move remaining mo1e to i.flgs
|
||
+ movb r2,i.flgs / move remaining mode to i.flgs
|
||
br 1f
|
||
|
||
- syschown: / name, owner
|
||
+syschown: / name; owner
|
||
jsr r0,isown / get the i-node and check user status
|
||
tstb u.uid / super user
|
||
beq 2f / yes, 2f
|
||
@@ -1698,13 +1453,6 @@
|
||
mov 2(sp),s.time+2 / set the system time
|
||
br sysret4
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
sysbreak: / set the program break
|
||
mov u.break,r1 / move users break point to r1
|
||
cmp r1,$core / is it the same or lower than core?
|
||
@@ -1712,7 +1460,7 @@
|
||
cmp r1,sp / is it the same or higher than the stack?
|
||
bhis 1f / yes, 1f
|
||
bit $1,r1 / is it an odd address
|
||
- beq 2f / no, its eve:
|
||
+ beq 2f / no, its even
|
||
clrb (r1)+ / yes, make it even
|
||
2: / clear area between the break point and the stack
|
||
cmp r1,sp / is it higher or same than the stack
|
||
@@ -1760,13 +1508,6 @@
|
||
jsr r0,seektell / get proper value in u.count
|
||
add u.base,u.count / add u.base to it
|
||
mov u.count,*u.fofp / put result into r/w pointer
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 8
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
br sysret4
|
||
|
||
systell: / get the r/w pointer
|
||
@@ -1802,7 +1543,8 @@
|
||
sysintr: / set interrupt handling
|
||
jsr r0,arg; u.intr / put the argument in u.intr
|
||
br 1f / go into quit routine
|
||
- sysquit:jsr r0,arg; u.quit / put argument in u.quit
|
||
+sysquit:
|
||
+ jsr r0,arg; u.quit / put argument in u.quit
|
||
1:
|
||
mov u.ttyp,r1 / move pointer to control tty buffer to r1
|
||
beq sysret4 / return to user
|
||
@@ -1822,14 +1564,7 @@
|
||
|
||
sysgetuid:
|
||
movb u.ruid,*u.r0 / move the real user id to (u.r0)
|
||
- br sysret4 / system return, sysret
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 9
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
+ br sysret4 / systerm return, sysret
|
||
|
||
fclose:
|
||
mov r1,-(sp) / put r1 on the stack (it contains the index
|
||
@@ -1840,7 +1575,7 @@
|
||
beq 1f / yes, i-node not active so return
|
||
tst (r0)+ / no, jump over error return
|
||
mov r1,r2 / move i-number to r2
|
||
- mov (sp),r1 / restore value of r1 from the stack whicl is
|
||
+ mov (sp),r1 / restore value of r1 from the stack which is
|
||
/ index to u.fp
|
||
clrb u.fp(r1) / clear that entry in the u.fp list
|
||
mov u.fofp,r1 / r1 points to 3rd word in fsp entry
|
||
@@ -1884,51 +1619,41 @@
|
||
1: / i-numbers match
|
||
incb 7(r2) / increment upper byte of the 4th word
|
||
rts r0 / in that fsp entry (deleted flag of fsp entry)
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.2 Page 10
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ u3 -- unix
|
||
|
||
tswap:
|
||
- movb u.uno,r1 / move users process numuer to r1
|
||
+ movb u.uno,r1 / move users process number to r1
|
||
mov $runq+4,r2 / move lowest priority queue address to r2
|
||
jsr r0,putlu / create link from last user on Q to u.uno's user
|
||
-
|
||
swap:
|
||
mov $300,*$ps / processor priority = 6
|
||
- mov $runq,r2 / r2 ooints to runq table
|
||
+ mov $runq,r2 / r2 points to runq table
|
||
1: / search runq table for highest priority process
|
||
tst (r2)+ / are there any processes to run in this Q entry
|
||
bne 1f / yes, process 1f
|
||
- cmp r2,$runq+6 / if zero co,pare address to end of table
|
||
+ cmp r2,$runq+6 / if zero compare address to end of table
|
||
bne 1b / if not at end, go back
|
||
jsr r0,idle; s.idlet+2 / wait for interrupt; all queues
|
||
/ are empty
|
||
br swap
|
||
1:
|
||
- tst -(r2) / restore pointer to right 0 entry
|
||
+ tst -(r2) / restore pointer to right Q entry
|
||
mov r2,u.pri / set present user to this run queue
|
||
movb (r2)+,r1 / move 1st process in queue to r1
|
||
- cmpb r1,(r2)+ / is there only 1 process in this 0 to be run
|
||
+ cmpb r1,(r2)+ / is there only 1 process in this Q to be run
|
||
beq 1f / yes
|
||
tst -(r2) / no, pt r2 back to this Q entry
|
||
movb p.link-1(r1),(r2) / move next process in line into
|
||
/ run queue
|
||
br 2f
|
||
1:
|
||
- clr -(r2) / zero the entry1 no processes on the Q
|
||
+ clr -(r2) / zero the entry; no processes on the Q
|
||
2: / write out core to appropriate disk area and read in new process if
|
||
/ required
|
||
clr *$ps / clear processor status
|
||
cmpb r1,u.uno / is this process the same as the process in core?
|
||
beq 2f / yes, don't have to swap
|
||
- mov r0,-(sp) / no, write out core, save r0 (address in rout.
|
||
+ mov r0,-(sp) / no, write out core; save r0 (address in rout.
|
||
/ that called swap)
|
||
mov sp,u.usp / save stack pointer
|
||
mov $sstack,sp / move swap stack pointer to the stack pointer
|
||
@@ -1941,7 +1666,7 @@
|
||
jsr r0,rswap / read new process into core
|
||
jsr r0,unpack / unpack the users stack from next to his program
|
||
/ to its normal
|
||
- mov u.usp,sp / location, restore stack pointer to new process
|
||
+ mov u.usp,sp / location; restore stack pointer to new process
|
||
/ stack
|
||
mov (sp)+,r0 / put address of where the process that just got
|
||
/ swapped in, left off., i.e., transfer control
|
||
@@ -1950,13 +1675,6 @@
|
||
movb $30.,uquant / initialize process time quantum
|
||
rts r0 / return
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.3 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
wswap:
|
||
mov *$30,u.emt / determines handling of emts
|
||
mov *$10,u.ilgins / determines handling of illegal instructions
|
||
@@ -1993,12 +1711,12 @@
|
||
bis $1000,swp / set it up to write (set bit 9)
|
||
jsr r0,ppoke / write process out on swap area of disk
|
||
1:
|
||
- tstb swp+1 / is it done writing?
|
||
+ tstb swp+1 / is lt done writing?
|
||
bne 1b / no, wait
|
||
rts r0 / yes, return to swap
|
||
|
||
rswap:
|
||
- asl r1 / process number x2 fcr index
|
||
+ asl r1 / process number x2 for index
|
||
mov p.break-2(r1), swp+4 / word count
|
||
mov p.dska-2(r1),swp+2 / disk address
|
||
bis $2000,swp / read
|
||
@@ -2013,15 +1731,9 @@
|
||
unpack: / move stack back to its normal place
|
||
mov u.break,r2 / r2 points to end of user program
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.3 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- cmp r2,$core / at begi,ning of user program yet?
|
||
+ cmp r2,$core / at beginning of user program yet?
|
||
blos 2f / yes, return
|
||
- cmp r2,u.usp / 1s break above the "stack pointer before
|
||
+ cmp r2,u.usp / is break_above the "stack pointer before
|
||
/ swapping"
|
||
bhis 2f / yes, return
|
||
mov $ecore,r3 / r3 points to end of core
|
||
@@ -2044,7 +1756,7 @@
|
||
movb r1,-1(r2) / user is only user; put process no. at beginning
|
||
/ and at end
|
||
2:
|
||
- movb r1,(r2) / user process in r1 is now thc last entry on
|
||
+ movb r1,(r2) / user process in r1 is now the last entry on
|
||
/ the queue
|
||
dec r2 / restore r2
|
||
rts r0
|
||
@@ -2074,12 +1786,7 @@
|
||
|
||
clear:
|
||
jsr r0,wslot / get an I/O buffer set bits 9 and 15 in first
|
||
- / word of I/O queue r5 point, to first data word
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.3 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
+ / word of I/O queue r5 points to first data word
|
||
|
||
|
||
/ in buffer
|
||
@@ -2093,68 +1800,15 @@
|
||
rts r0 / in r1
|
||
|
||
|
||
+/ u4 -- unix
|
||
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.3 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
- / u4 -- unix
|
||
-
|
||
- setisp:
|
||
- mov r1,-(sp)
|
||
- mov r2,-(sp)
|
||
- mov r3,-(sp)
|
||
- mov clockp,-(sp)
|
||
- mov $s.syst+2,clockp
|
||
- jmp (r0)
|
||
+setisp:
|
||
+ mov r1,-(sp)
|
||
+ mov r2,-(sp)
|
||
+ mov r3,-(sp)
|
||
+ mov clockp,-(sp)
|
||
+ mov $s.syst+2,clockp
|
||
+ jmp (r0)
|
||
|
||
clock: / interrupt from 60 cycle clock
|
||
mov r0,-(sp) / save r0
|
||
@@ -2196,18 +1850,11 @@
|
||
cmp r0,$touts / end of toutt table?
|
||
blo 2b / no, check this entry
|
||
mov (sp)+,r0 / yes, restore r0
|
||
- rti / return from,interrupt
|
||
+ rti / return from interrupt
|
||
1: / decrement time out counts; if 0 call subroutine
|
||
mov (sp)+,r0 / restore r0
|
||
mov $240,*$ps / set processor priority to 5
|
||
jsr r0,setisp / save registers
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov $touts-toutt-1,r0 / set up r0 as index to decrement thru
|
||
/ the table
|
||
1:
|
||
@@ -2215,14 +1862,13 @@
|
||
beq 2f / yes
|
||
decb toutt(r0) / no, decrement the time
|
||
bne 2f / is the time 0, now
|
||
- asl r0 / yes, 2 x r0 to get word index for tout ertry
|
||
+ asl r0 / yes, 2 x r0 to get word index for tout entry
|
||
jsr r0,*touts(r0) / go to appropriate routine specified in this
|
||
asr r0 / touts entry; set r0 back to toutt index
|
||
2:
|
||
dec r0 / set up r0 for next entry
|
||
bge 1b / finished? , no, go back
|
||
br retisp / yes, restore registers and do a rti
|
||
-
|
||
ttyi: / console tty input interrupt routine
|
||
jsr r0,setisp / save reg r1, r2, r3
|
||
mov *$tkb,r1 / r1 = char in tty reader buffer
|
||
@@ -2232,7 +1878,7 @@
|
||
cmp r1,$'a-40 / is character upper case A,..., upper case Z.
|
||
/ note that
|
||
blt 1f / lower case a is represented by 141, upper case by
|
||
- cmp r1,$'z-40 / 101, and lower case z by 172, upper
|
||
+ cmp r1,$'z-40 / 101; and lower case z by 172, upper
|
||
/ case Z by 132.
|
||
bgt 1f / if not upper case, branch
|
||
add $40,r1 / if upper case, calculate the representation of its
|
||
@@ -2265,17 +1911,11 @@
|
||
br retisp / return
|
||
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
wakeall:
|
||
- mov $39.,0f / fill arg2 of wakeup call with 39
|
||
+ mov $39.,0f / flll arg2 of wakeup call wlth 39
|
||
1:
|
||
jsr r0,wakeup; runq+4; 0:.. / wakeup the processes in the
|
||
- dec 0b / wait list, decrement arg2
|
||
+ dec 0b / wait list; decrement arg2
|
||
bge 1b / if not done, go back
|
||
rts r0
|
||
|
||
@@ -2292,10 +1932,10 @@
|
||
mov (sp)+,r0
|
||
rti / return from interrupt
|
||
|
||
- ppti: / paper tape input interrupt routine
|
||
+ppti: / paper tape lnput interrupt routine
|
||
jsr r0,setisp / save registers
|
||
movb pptiflg,r1 / place "pptiflg" in r1
|
||
- jmp *1f(r1) / jump to location specified by value of "pptiflg"
|
||
+ jmp *1f(r1) / jump to location speclfled by value of "pptiflg"
|
||
1:
|
||
retisp / file not open
|
||
1f / file just opened
|
||
@@ -2317,7 +1957,7 @@
|
||
mov *$prb,r1 / place contents ppt read buffer in r1
|
||
jsr r0,putc; 2 / place character in clist area for ppt input
|
||
br .+2 / temp / if no space in clist character lost
|
||
- cmpb cc+2,$50. / character count in clist area for ppt input
|
||
+ cmpb cc+2,$50. / character count in clist area for ppt lnput
|
||
/ greater than or equal to 50
|
||
bhis retisp / yes
|
||
inc *$prs / no, set reader enable bit in prs
|
||
@@ -2328,16 +1968,10 @@
|
||
|
||
/lpto:
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
|
||
/ jsr r0,setisp
|
||
/ jsr r0,starlpt
|
||
/ br retisp
|
||
-
|
||
ppto: / paper tape output interrupt routine
|
||
jsr r0,setisp / save registers
|
||
jsr r0,starppt / get next character from clist, and output
|
||
@@ -2367,7 +2001,7 @@
|
||
tstb *$tps / test console output ready bit
|
||
bge 2f / branch if ready bit is clear
|
||
tstb toutt+0 / is toutt for console a zero
|
||
- bne 2f / if not, branch to 2f
|
||
+ bne 2f / if not; branch to 2f
|
||
movb ttyoch,r1 / put character to be output in r1
|
||
bne 1f
|
||
jsr r0,getc; 1 / if char is nul, get a char from console
|
||
@@ -2389,17 +2023,9 @@
|
||
movb $15.,toutt+0 / set time out to 15 clock ticks
|
||
2:
|
||
rts r0
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- pptito: / paper tape input'touts subrouting
|
||
- cmpb pptiflg,$2 / does pptiflg indicate file just opened
|
||
- bne 1f / no, do nothing
|
||
+pptito: / paper tape input touts subrouting
|
||
+ cmpb pptiflg,$2 / does "pptiflg" indicate file just opened
|
||
+ bne 1f / no, do nothing pyf
|
||
movb $10.,toutt+1 / yes, place 10 in tout entry for tty input
|
||
tstb *$prs+1 / is error bit set
|
||
blt 1f / yes, return
|
||
@@ -2416,7 +2042,7 @@
|
||
1:
|
||
tstb *$pps / is ready bit set in punch status word
|
||
bge 1f / no, branch
|
||
- jsr r0,getc; 3 / yes, get next char in clist for potout and
|
||
+ jsr r0,getc; 3 / yes, get next char in clist for pptout and
|
||
/ place in r1
|
||
br 1f / if none, branch
|
||
mov r1,*$ppb / place character in ppt buffer
|
||
@@ -2437,32 +2063,25 @@
|
||
clrb uquant / time quantum = 0
|
||
1:
|
||
clrb wlist(r3) / zero wait channel entry
|
||
- jsr r0,putlu / create a link from the last user on the 0
|
||
+ jsr r0,putlu / create a link from the last user on the Q
|
||
/ to this process number that got woken
|
||
2:
|
||
mov (sp)+,r1 / restore r1
|
||
rts r0
|
||
|
||
sleep: / wait for event
|
||
- jsr r0,isintr / check to see if interrupt or quit frcm user
|
||
+ jsr r0,isintr / check to see if interrupt or quit from user
|
||
br 2f / something happened / yes, his interrupt so return
|
||
/ to user
|
||
- mov (r0)+,r1 / out number of wait channel in r1
|
||
+ mov (r0)+,r1 / put number of wait channel in r1
|
||
movb wlist(r1),-(sp) / put old process number in there, on
|
||
/ the stack
|
||
movb u.uno,wlist(r1) / put process number of process to put
|
||
/ to sleep in there
|
||
mov cdev,-(sp) / nothing happened in isintr so
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
jsr r0,swap / swap out process that needs to sleep
|
||
mov (sp)+,cdev / restore device
|
||
- jsr r0,isintr / checx for interrupt of new process
|
||
+ jsr r0,isintr / check for interrupt of new process
|
||
br 2f / yes, return to new user
|
||
movb (sp)+,r1 / no, r1 = old process number that was originally
|
||
/ on the wait channel
|
||
@@ -2479,16 +2098,16 @@
|
||
isintr:
|
||
mov r1,-(sp) / put number of wait channel on the stack
|
||
mov r2,-(sp) / save r2
|
||
- mov u.ttyp,r1 / r1 = pointer to buffer o process control
|
||
+ mov u.ttyp,r1 / r1 = pointer to buffer of process control
|
||
/ typewriter
|
||
beq 1f / if 0, do nothing except skip return
|
||
- movb 6(r1),r1 / put interrupt char in tle tty buffer in r1
|
||
+ movb 6(r1),r1 / put interrupt char in the tty buffer in r1
|
||
beq 1f / if its 0 do nothing except skip return
|
||
cmp r1,$177 / is interrupt char = delete?
|
||
bne 3f / no, so it must be a quit (fs)
|
||
tst u.intr / yes, value of u.intr determines handling
|
||
/ of interrupts
|
||
- bne 2f / if not 0, 2f. If zero do nothrng.
|
||
+ bne 2f / if not 0, 2f. If zero do nothing.
|
||
1:
|
||
tst (r0)+ / bump r0 past system return (skip)
|
||
4:
|
||
@@ -2498,7 +2117,7 @@
|
||
3: / interrupt char = quit (fs)
|
||
tst u.quit / value of u.quit determines handling of quits
|
||
beq 1b / u.quit = 0 means do nothing
|
||
- 2: / get here because either u.intr / 0 or u.quit / 0
|
||
+2: / get here because either u.intr <> 0 or u.qult <> O
|
||
mov $tty+6,r1 / move pointer to tty block into r1
|
||
1: / find process control tty entry in tty block
|
||
cmp (r1),u.ttyp / is this the process control tty buffer?
|
||
@@ -2509,84 +2128,15 @@
|
||
br 4b / no process control tty found so go to 4b
|
||
1:
|
||
mov $240,*$ps / set processor priority to 5
|
||
- movb -3(r1),0f / load getc call argument, character list
|
||
+ movb -3(r1),0f / load getc call argument; character llst
|
||
/ identifier
|
||
inc 0f / increment
|
||
1:
|
||
jsr r0,getc; 0:.. / erase output char list for control
|
||
br 4b / process tty. This prevents a line of stuff
|
||
/ being typed out after you hit the interrupt
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ key
|
||
br 1b
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.4 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u5 -- unix
|
||
|
||
mget:
|
||
@@ -2605,7 +2155,7 @@
|
||
jsr r0,alloc / allocate a new block
|
||
mov r1,i.dskp(r2) / physical block number stored in i-node
|
||
jsr r0,setimod / set inode modified byte (imod)
|
||
- jsr r0,clear / zero out disk/drum block 'ust allocated
|
||
+ jsr r0,clear / zero out disk/drum block just allocated
|
||
2:
|
||
rts r0
|
||
3: / adding on block which changes small file to a large file
|
||
@@ -2633,7 +2183,7 @@
|
||
br mget
|
||
4: / large file
|
||
mov $-8,lsh / divide byte number by 256.
|
||
- bic $!776,r2 / zero all bits but 1,2,3,4,5,6,7,8, gives offset
|
||
+ bic $!776,r2 / zero all bits but 1,2,3,4,5,6,7,8; gives offset
|
||
/ in indirect block
|
||
mov r2,-(sp) / save on stack
|
||
mov mq,r2 / calculate offset in i-node for pointer to proper
|
||
@@ -2642,13 +2192,6 @@
|
||
mov i.dskp(r2),r1
|
||
bne 2f / if no indirect block exists
|
||
jsr r0,alloc / allocate a new block
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.5 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov r1,i.dskp(r2) / put block number of new block in i-node
|
||
jsr r0,setimod / set i-node modified byte
|
||
jsr r0,clear / clear new block
|
||
@@ -2705,13 +2248,6 @@
|
||
inc r1 / increment bit count in bit k (mod8)
|
||
br 1b
|
||
1:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.5 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
tst (sp)+ / bump sp
|
||
jsr r0,3f / have found a free block
|
||
bic r3,(r2) / set bit for this block i.e. assign block
|
||
@@ -2722,11 +2258,11 @@
|
||
mov r3,-(sp)
|
||
jsr r0,3f / set up bit mask and word no. in free storage map
|
||
/ for block
|
||
- bis r3,(r2) / set free storage block bit, indicates free block
|
||
+ bis r3,(r2) / set free storage block bit; indicates free block
|
||
2:
|
||
mov (sp)+,r3 / restore r2, r3
|
||
mov (sp)+,r2
|
||
- tst cdev / cdev = 0, block structured, drum, cdev = 1
|
||
+ tst cdev / cdev = 0, block structured, drum; cdev = 1
|
||
/ mountable device
|
||
bne 1f
|
||
incb smod / set super block modified for drum
|
||
@@ -2734,10 +2270,9 @@
|
||
1:
|
||
incb mmod / set super block modified for mountable device
|
||
rts r0
|
||
-
|
||
3:
|
||
mov r1,r2 / block number, k, = 1
|
||
- bic $!7,r2 / clear all bits but 0,1,2, r2 = (k) mod (8)
|
||
+ bic $!7,r2 / clear all bits but 0,1,2; r2 = (k) mod (8)
|
||
clr r3
|
||
bisb 2f(r2),r3 / use mask to set bit in r3 corresponding to
|
||
/ (k) mod 8
|
||
@@ -2746,9 +2281,9 @@
|
||
asr r2
|
||
asr r2
|
||
asr r2
|
||
- bcc 1f / branch if bit 3 in r1 was 0 i.=., bit for block is in
|
||
+ bcc 1f / branch if bit 3 in r1 was 0 i.e., bit for block is in
|
||
/ lower half of word
|
||
- swab r3 / swap bytes in r3, bit in upper half of word in free
|
||
+ swab r3 / swap bytes in r3; bit in upper half of word in free
|
||
/ storage map
|
||
1:
|
||
asl r2 / multiply block number by 2; r2 = k/8
|
||
@@ -2768,14 +2303,7 @@
|
||
jsr r0,iget / read in i-node for current directory (i-number
|
||
/ passed in r1)
|
||
mov i.flgs,r2
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.5 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- cmpb i.uid,u.uid / is user same as owner of frle
|
||
+ cmpb i.uid,u.uid / is user same as owner of file
|
||
bne 1f / no, then branch
|
||
asrb r2 / shift owner read write bits into non owner
|
||
/ read/write bits
|
||
@@ -2798,13 +2326,13 @@
|
||
|
||
imap: / get the byte that has the allocation bit for the i-number contained
|
||
/ in r1
|
||
- mov $1,mq / out 1 in the mq
|
||
+ mov $1,mq / put 1 in the mq
|
||
mov r1,r2 / r2 now has i-number whose byte in the map we
|
||
/ must find
|
||
sub $41.,r2 / r2 has i-41
|
||
mov r2,r3 / r3 has i-41
|
||
bic $!7,r3 / r3 has (i-41) mod 8 to get the bit position
|
||
- mov r3,lsh / move the 1 over (:-41) mod 8 positions to the left
|
||
+ mov r3,lsh / move the 1 over (i-41) mod 8 positions to the left
|
||
/ to mask the correct bit
|
||
asr r2
|
||
asr r2
|
||
@@ -2824,20 +2352,13 @@
|
||
rts r0
|
||
|
||
iget:
|
||
- cmp r1,ii / r1 = i-number of current file
|
||
+ cmp r1,ii / r1 = i-number of current flle
|
||
bne 1f
|
||
cmp idev,cdev / is device number of i-node = current device
|
||
beq 2f
|
||
1:
|
||
tstb imod / has i-node of current file been modified i.e.,
|
||
/ imod set
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.5 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
beq 1f
|
||
clrb imod / if it has, we must write the new i-node out on disk
|
||
mov r1,-(sp)
|
||
@@ -2851,10 +2372,10 @@
|
||
tst r1 / is new i-number non zero
|
||
beq 2f / branch if r1=0
|
||
tst cdev / is the current device number non zero (i.e., device
|
||
- / / drum)
|
||
- bne 1f / branch if cdev / 0
|
||
- cmp r1,mnti / mnti is the i-number of the cross device
|
||
- / file (root directory of mounted device)
|
||
+ / =/ drum)
|
||
+ bne 1f / branch 1f cdev =/ 0
|
||
+ cmp r1,mnti / mnti is the i-number of the cross devlce
|
||
+ / file (root directory of mounted devlce)
|
||
bne 1f
|
||
mov mntd,cdev / make mounted device the current device
|
||
mov rootdir,r1
|
||
@@ -2881,8 +2402,8 @@
|
||
jsr r0,wslot / set up data buffer for write (will be same buffer
|
||
/ as dskrd got)
|
||
1:
|
||
- bic $!17,(sp) / zero all but last 4 bits, gives (i+31.) mod 16
|
||
- mov (sp)+,mq / calculate offset in data buffer, 32.*(i+31.)mod16
|
||
+ bic $!17,(sp) / zero all but last 4 bits; gives (i+31.) mod 16
|
||
+ mov (sp)+,mq / calculate offset in data buffer; 32.*(i+31.)mod16
|
||
mov $5,lsh / for i-node i.
|
||
add mq,r5 / r5 points to first word in i-node i.
|
||
mov $inode,r1 / inode is address of first word of current i-node
|
||
@@ -2894,16 +2415,9 @@
|
||
dec r3
|
||
bgt 1b
|
||
jsr r0,dskwr / write inode out on device
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.5 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
rts r0
|
||
2:
|
||
- mov (r5)+,(r1)+ / read new i-node into 'inode area of core
|
||
+ mov (r5)+,(r1)+ / read new i-node into "inode" area of core
|
||
dec r3
|
||
bgt 2b
|
||
rts r0
|
||
@@ -2921,7 +2435,7 @@
|
||
jsr r0,dskrd / read in block, 1st data word pointed to by r5
|
||
mov $256.,r3 / move word count into r3
|
||
2:
|
||
- mov (r5)+,r1 / put 1st data word in r1, physical block number
|
||
+ mov (r5)+,r1 / put 1st data word in r1; physical block number
|
||
beq 3f / branch if zero
|
||
mov r3,-(sp) / save r3, r5 on stack
|
||
mov r5,-(sp)
|
||
@@ -2946,24 +2460,6 @@
|
||
rts r0
|
||
|
||
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.5 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ u6 -- unix
|
||
|
||
readi:
|
||
@@ -3008,7 +2504,7 @@
|
||
rtty: / read from console tty
|
||
mov tty+[8*ntty]-8+6,r5 / r5 is the address of the 4th word of
|
||
/ of the control and status block
|
||
- tst 2(r5) / for the console tty, this word points to the console
|
||
+ tst 2(r5) / for the console tty; this word points to the console
|
||
/ tty buffer
|
||
bne 1f / 2nd word of console tty buffer contains number
|
||
/ of chars. Is this number non-zero?
|
||
@@ -3020,13 +2516,6 @@
|
||
movb *4(r5),r1 / no, put character in r1
|
||
inc 4(r5) / 3rd word of console tty buffer points to byte which
|
||
/ contains the next char.
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.6 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
dec 2(r5) / decrement the character count
|
||
jsr r0,passc / move the character to core (user)
|
||
br 1b / get next character
|
||
@@ -3034,17 +2523,17 @@
|
||
ret1:
|
||
jmp ret / return to caller via 'ret'
|
||
|
||
- rppt: / read pap,r tape
|
||
+rppt: / read paper tape
|
||
jsr r0,pptic / gets next character in clist for ppt input and
|
||
/ places
|
||
- br ret / it in r1, if there is no problem with reader, it
|
||
+ br ret / it in r1; if there 1s no problem with reader, it
|
||
/ also enables read bit in prs
|
||
jsr r0,passc / place character in users buffer area
|
||
br rppt
|
||
|
||
rmem: / transfer characters from memory to a user area of core
|
||
mov *u.fofp,r1 / save file offset which points to the char to
|
||
- / be trans.erred to user
|
||
+ / be transferred to user
|
||
inc *u.fofp / increment file offset to point to 'next' char in
|
||
/ memory file
|
||
movb (r1),r1 / get character from memory file, put it in r1
|
||
@@ -3083,20 +2572,12 @@
|
||
movb r1,*u.base / move a character to the next byte of the
|
||
/ users buffer
|
||
inc u.base / increment the pointer to point to the next byte
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.6 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ in users buffer
|
||
inc u.nread / increment the number of bytes read
|
||
dec u.count / decrement the number of bytes to be read
|
||
- bne 1f / any more bytes to read=, yes, branch
|
||
+ bne 1f / any more bytes to read?; yes, branch
|
||
mov (sp)+,r0 / no, do a non-local return to the caller of
|
||
- / 'readi' by;
|
||
-
|
||
+ / 'readi' by:
|
||
ret: / (1) pop the return address off the stack into r0
|
||
mov (sp)+,r1 / (2) pop the i-number off the stack into r1
|
||
1:
|
||
@@ -3104,10 +2585,10 @@
|
||
rts r0 / return to address currently on top of stack
|
||
|
||
writei:
|
||
- clr u.nread / cle1r the number of bytes transmitted during
|
||
+ clr u.nread / clear the number of bytes transmitted during
|
||
/ read or write calls
|
||
tst u.count / test the byte count specified by the user
|
||
- bgt 1f / any bytes to output, yes, branch
|
||
+ bgt 1f / any bytes to output; yes, branch
|
||
rts r0 / no, return - no writing to do
|
||
1:
|
||
mov r1,-(sp) / save the i-node number on the stack
|
||
@@ -3132,28 +2613,21 @@
|
||
xmtt / tty0
|
||
xmtt / tty1
|
||
xmtt / tty2
|
||
- smtt / tty3
|
||
+ xmtt / tty3
|
||
xmtt / tty4
|
||
xmtt / tty5
|
||
xmtt / tty6
|
||
xmtt / tty7
|
||
- / wlpr / lpr
|
||
+/ w1pr / lpr
|
||
|
||
wtty:
|
||
- jsr r0,cpass / get next character from user buffer area, if
|
||
+ jsr r0,cpass / get next character from user buffer area; if
|
||
/ none go to return address in syswrite
|
||
tst r1 / is character = null
|
||
beq wtty / yes, get next character
|
||
1:
|
||
mov $240,*$ps / no, set processor priority to five
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.6 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- cmpb cc+1,$30. / is character count for console tty greater
|
||
+ cmpb cc+1,$20. / is character count for console tty greater
|
||
/ than 20
|
||
bhis 2f / yes; branch to put process to sleep
|
||
jsr r0,putc; 1 / find place in freelist to assign to console
|
||
@@ -3173,7 +2647,6 @@
|
||
/ if none return to writei's calling routine
|
||
jsr r0,pptoc / output character on ppt
|
||
br wppt
|
||
-
|
||
/wlpr:
|
||
/ jsr r0,cpass
|
||
/ cmp r0,$'a
|
||
@@ -3191,7 +2664,7 @@
|
||
mov r1,-(sp) / put character on the stack
|
||
mov *u.fofp,r1 / save file offset in r1
|
||
inc *u.fofp / increment file offset to point to next available
|
||
- / locaticn in file
|
||
+ / location in file
|
||
movb (sp)+,(r1) / pop char off stack, put in memory loc assigned
|
||
/ to it
|
||
br wmem / continue
|
||
@@ -3209,17 +2682,10 @@
|
||
cmp r2,i.size / is this greater than the present size of
|
||
/ the file?
|
||
blos 1f / no, branch
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.6 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- mov r2,i.size / yes, increase the file size to file offs,t +
|
||
+ mov r2,i.size / yes, increase the f11e size to file offset +
|
||
/ no. of data bytes
|
||
jsr r0,setimod / set imod=1 (i.e., core inode has been
|
||
- / modified), stuff time of modificat1on into
|
||
+ / modified), stuff tlme of modification into
|
||
/ core image of i-node
|
||
1:
|
||
jsr r0,mget / get the block no. in which to write the next data
|
||
@@ -3229,7 +2695,7 @@
|
||
/ 512, 1024,...(i.e., start of new block)
|
||
cmp u.count,$512. / if zero, is there enough data to fill an
|
||
/ entire block? (i.e., no. of
|
||
- bhis 3f / bytes to be written greater than 512.= yes, branch.
|
||
+ bhis 3f / bytes to be written greater than 512.? Yes, branch.
|
||
/ Don't have to read block
|
||
2: / in as no past info. is to be saved (the entire block will be
|
||
/ overwritten).
|
||
@@ -3246,14 +2712,14 @@
|
||
dec r3 / decrement no. of bytes to be written
|
||
bne 2b / have all bytes been transferred? No, branch
|
||
jsr r0,dskwr / yes, write the block and the i-node
|
||
- tst u.count / any more data to wrrte?
|
||
+ tst u.count / any more data to write?
|
||
bne 1b / yes, branch
|
||
jmp ret / no, return to the caller via 'ret'
|
||
|
||
cpass: / get next character from user area of core and put it in r1
|
||
tst u.count / have all the characters been transferred (i.e.,
|
||
/ u.count, # of chars. left
|
||
- beq 1f / to be transferred = 0=) yes, branch
|
||
+ beq 1f / to be transferred = 0?) yes, branch
|
||
dec u.count / no, decrement u.count
|
||
movb *u.base,r1 / take the character pointed to by u.base and
|
||
/ put it in r1
|
||
@@ -3266,27 +2732,20 @@
|
||
rts r0 / non-local return
|
||
|
||
sioreg:
|
||
- mov *u.fofp,r2 / file offset (in bytcs) is moved to r2
|
||
+ mov *u.fofp,r2 / file offset (in bytes) is moved to r2
|
||
mov r2,r3 / and also to r3
|
||
bis $177000,r3 / set bits 9,...,15. of file offset in r3
|
||
bic $!777,r2 / calculate file offset mod 512.
|
||
add r5,r2 / r2 now points to 1st byte in system buffer where
|
||
/ data is to be placed
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.6 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov u.base,r1 / address of data is in r1
|
||
neg r3 / 512 - file offset (mod512.) in r3 (i.e., the number
|
||
/ of free bytes in the file block
|
||
- cmp r3,u.count / compare this wrth the number of data bytes to
|
||
+ cmp r3,u.count / compare this with the number of data bytes to
|
||
/ be written to the file
|
||
blos 2f / if less than branch. Use the number of free bytes
|
||
/ in the file block as the number to be written
|
||
- mov u.count,r3 / if greater than, use the number of data nytes
|
||
+ mov u.count,r3 / if greater than, use the number of data bytes
|
||
/ as the number to be written
|
||
2:
|
||
add r3,u.nread / r3 + number of bytes xmitted during write is
|
||
@@ -3299,50 +2758,6 @@
|
||
/ file offset
|
||
rts r0
|
||
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.6 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u7 -- unix
|
||
|
||
canon:
|
||
@@ -3354,8 +2769,8 @@
|
||
1:
|
||
jsr r0,*(r0) / jump to arg get char off Q of characters, sleep
|
||
/ if none
|
||
- jsr r0,cesc; 100 / test for $ (kill line)
|
||
- br canon / character was 9 so start over
|
||
+ jsr r0,cesc; 100 / test for @ (kill line)
|
||
+ br canon / character was @ so start over
|
||
jsr r0,cesc; 43 / test for # (erase last char. typed)
|
||
br 1b / character was #, go back
|
||
cmp r1,$4 / is char eot?
|
||
@@ -3379,7 +2794,7 @@
|
||
|
||
cesc: / test for erase or kill char
|
||
cmp r1,(r0)+ / char in r1 = erase or kill character?
|
||
- bne 1f / no, skrp return
|
||
+ bne 1f / no, skip return
|
||
tst 2(r5) / yes, is char. count = 0
|
||
beq 2f / yes, don't skip return
|
||
dec 2(r5) / no, decrement char count
|
||
@@ -3398,13 +2813,6 @@
|
||
clr *$ps / clear process priority
|
||
rts r0 / return
|
||
1: / list is empty
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov r5,-(sp) / save r5
|
||
jsr r0,sleep; 0 / put process to sleep in input wait channel
|
||
mov (sp)+,r5 / restore r5
|
||
@@ -3421,7 +2829,7 @@
|
||
inc *$prs / set reader enable bit
|
||
1:
|
||
jsr r0,getc; 2 / get next character in clist for ppt input and
|
||
- br 1f / place in r1, if no char in clist for ppt input
|
||
+ br 1f / place in r1; if no char in clist for ppt input
|
||
/ branch
|
||
tst (r0)+ / pop stack so that return will be four locations past
|
||
/ subroutine call
|
||
@@ -3462,19 +2870,13 @@
|
||
/ jsr r0,putc; 5 / find place in freelist to assign to printer
|
||
/ and place
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
br 1f / char in list, if none available branch to put
|
||
/ process to sleep
|
||
/ jsr r0,starlpt / try to output character
|
||
/ clr *$ps / set processor priority = 0
|
||
/ rts r0 / return
|
||
/1:
|
||
- / mov r1,=(sp) / place character on stack
|
||
+/ mov r1,-(sp) / place character on stack
|
||
/ jsr r0,sleep; 5 / put process to sleep
|
||
/ mov (sp)+,r1 / place character on stack
|
||
/ br lptoc
|
||
@@ -3525,13 +2927,6 @@
|
||
2:
|
||
rts r0
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
put:
|
||
asr r2 / divide r2 by 2; r2 is offset in clist
|
||
mov r2,-(sp) / save r2 on stack
|
||
@@ -3562,7 +2957,7 @@
|
||
bgt 3f / no. 3f
|
||
mov r1,-(sp) / yes, figure out
|
||
asl r1
|
||
- jmp *1f-2(r1) / whrch one and transfer to it
|
||
+ jmp *1f-2(r1) / which one and transfer to it
|
||
1:
|
||
otty / tty
|
||
oppt / ppt
|
||
@@ -3587,13 +2982,6 @@
|
||
ocvt / tty7
|
||
error / crd
|
||
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
2: / check open write access
|
||
neg r1 / make inode number positive
|
||
jsr r0,access; 1 / get inode in 0 core
|
||
@@ -3630,7 +3018,7 @@
|
||
/ ejec / lpr
|
||
|
||
otty: / open console tty for reading or writing
|
||
- mov $100,*$tks / set interrupt enable bit (zero others) :n
|
||
+ mov $100,*$tks / set interrupt enable bit (zero others) in
|
||
/ reader status reg
|
||
mov $100,*$tps / set interrupt enable bit (zero others) in
|
||
/ punch status reg
|
||
@@ -3651,13 +3039,6 @@
|
||
3:
|
||
rts r0
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
oppt: / open paper tape for reading or writing
|
||
mov $100,*$prs / set reader interrupt enable bit
|
||
tstb pptiflg / is file already open
|
||
@@ -3708,18 +3089,11 @@
|
||
2: / negative i-number
|
||
neg r1 / make it positive
|
||
cmp r1,$40. / is it a special file
|
||
- bgt 3b / no, return
|
||
+ bgt 3b / no. return
|
||
mov r1,-(sp)
|
||
- asl r1 / yes, compute jump address and transfer
|
||
+ asl r1 / yes. compute jump address and transfer
|
||
jmp *1f-2(r1)
|
||
1:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
ctty / tty
|
||
leadr / ppt
|
||
sret / mem
|
||
@@ -3751,7 +3125,7 @@
|
||
cppt: / close paper tape
|
||
clrb pptiflg / set pptiflg to indicate file not open
|
||
1:
|
||
- mov $240.*$ps / set process or priority to 5
|
||
+ mov $240,*$ps /set process or priority to 5
|
||
jsr r0,getc; 2 / remove all ppt input entries from clist
|
||
/ and assign to free list
|
||
br sret
|
||
@@ -3771,20 +3145,14 @@
|
||
clr r1 / r1 contains a 'nul' character
|
||
jsr r0,pptoc / output the 'nul' character
|
||
dec (sp)
|
||
- bge 1b / last leader character output= no, branch
|
||
+ bge 1b / last leader character output? no, branch
|
||
tst (sp)+ / bump stack pointer
|
||
br sret / return to caller via 'sret'
|
||
|
||
sysmount: / mount file system; args special; name
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
jsr r0,arg2 / get arguments special and name
|
||
- tst mnti / is the i-number of the cross devrce file zero?
|
||
+ tst mnti / is the i-number of the cross device file zero?
|
||
bne errora / no, error
|
||
jsr r0,getspl / get special files device number in r1
|
||
mov (sp)+,u.namep / put the name of file to be placed on the
|
||
@@ -3825,7 +3193,7 @@
|
||
jsr r0,namei / get the i-number of the special file
|
||
br errora / no such file
|
||
sub $4,r1 / i-number-4 rk=1,tap=2+n
|
||
- ble errora / less than 0= yes, error
|
||
+ ble errora / less than 0? yes, error
|
||
cmp r1,$9. / greater than 9 tap 7
|
||
bgt errora / yes, error
|
||
rts r0 / return with device number in r1
|
||
@@ -3836,24 +3204,13 @@
|
||
sysreta:
|
||
jmp sysret / see 'sysret' routine
|
||
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.7 Page 8
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u8 -- unix
|
||
|
||
rtap: / read from the dec tape
|
||
asr r1 / divide the i-number by 2
|
||
sub $4.,r1 / (i-number/2)-4 r1
|
||
mov r1,cdev / cdev now has device number
|
||
- jsr r0,bread; 578. / read in block tnats in *u.fofp
|
||
+ jsr r0,bread; 578. / read in block thats in *u.fofp
|
||
|
||
wtap:
|
||
asr r1 / divide i-number by 2
|
||
@@ -3865,11 +3222,11 @@
|
||
rrk0:
|
||
mov $1,cdev / set current device to i., disk
|
||
jsr r0,bread; 4872. / read block from disk (maximum block
|
||
- / number allowed on evice is 4872.)
|
||
+ / number allowed on device is 4872.)
|
||
/ - (u.fofp) contains block number
|
||
|
||
wrk0:
|
||
- mov $1,cdev / set current device to 1, disk
|
||
+ mov $1,cdev / set current device to 1; disk
|
||
jsr r0,bwrite; 4872. / write block (u.fofp) on disk
|
||
|
||
rrf0:
|
||
@@ -3900,15 +3257,8 @@
|
||
bgt 1b / 2-1-cold = 0? No, go back and read in next block
|
||
1:
|
||
tst (sp)+ / yes, pop stack to clear off cold calculation
|
||
- mov *u.fofp,r1 / restore r1 t. initial value of the
|
||
+ mov *u.fofp,r1 / restore r1 to initial value of the
|
||
/ block #
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
cmp r1,(r0)+ / block # greater than or equal to maximum
|
||
/ block number allowed
|
||
bhis error10 / yes, error
|
||
@@ -3949,12 +3299,12 @@
|
||
|
||
bwrite: / write on block structured device
|
||
jsr r0,tstdeve / test the device for an error
|
||
- mov *u.fofp,r1 / put the block number rn r1
|
||
+ mov *u.fofp,r1 / put the block number in r1
|
||
cmp r1,(r0)+ / does block number exceed maximum allowable #
|
||
bhis error10 / yes, error
|
||
inc *u.fofp / no, increment block number
|
||
jsr r0,wslot / get an I/O buffer to write into
|
||
- jsr r0,dioreg / do the necessarv bookkeeping
|
||
+ jsr r0,dioreg / do the necessary bookkeeping
|
||
1: / r2 points to the users data; r5 points to the I/O buffers data area
|
||
movb (r2)+,(r5)+ / ; r3, has the byte count
|
||
dec r3 / area to the I/O buffer
|
||
@@ -3963,21 +3313,13 @@
|
||
tst u.count / done
|
||
beq 1f / yes, 1f
|
||
tst -(r0) / no, point r0 to the argument of the call
|
||
- br bwrite / go hack and write next block
|
||
+ br bwrite / go back and write next block
|
||
1:
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov (sp)+,r0 / return to routine that called writei
|
||
jmp ret
|
||
-
|
||
tstdeve: / check whether permanent error has occured on special file
|
||
/ I/O
|
||
- mov cdev,r1 / only works on tape, r1 has device #
|
||
+ mov cdev,r1 / only works on tape; r1 has device #
|
||
tstb deverr(r1) / test error bit of device
|
||
bne 1f / error
|
||
rts r0 / device okay
|
||
@@ -4009,14 +3351,14 @@
|
||
rts r0
|
||
|
||
dskrd:
|
||
- jsr r0,bufaloc / shuffle off to bufaloc, get a free I/O buffer
|
||
+ jsr r0,bufaloc / shuffle off to bufaloc; get a free I/O buffer
|
||
br 1f
|
||
bis $2000,(r5) / set bit 10 of word 1 of I/O queue entry
|
||
/ for buffer
|
||
jsr r0,poke / just assigned in bufaloc, bit 10=1 says read
|
||
1:
|
||
clr *$ps
|
||
- bit $22000,(r5) / if either bits 10, or 13 are 1, jump to idle
|
||
+ bit $22000,(r5) / if either bits 10, or 13 are 1; jump to idle
|
||
beq 1f
|
||
jsr r0,idle; s.wait+2
|
||
br 1b
|
||
@@ -4026,21 +3368,14 @@
|
||
rts r0
|
||
|
||
wslot:
|
||
- jsr r0,bufaloc / get a free l/0 buffer, pointer to first
|
||
+ jsr r0,bufaloc / get a free I/O buffer; pointer to first
|
||
br 1f / word in buffer in r5
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
1:
|
||
bit $22000,(r5) / check bits 10, 13 (read, waiting to read)
|
||
/ of I/O queue entry
|
||
beq 1f / branch if 10, 13 zero (i.e., not reading, or waiting
|
||
/ to read)
|
||
- jsr r0,idle; s.wait+2 / if buffer is reading or writing to reac,
|
||
+ jsr r0,idle; s.wait+2 / if buffer is reading or writing to read,
|
||
/ idle
|
||
br 1b / till finished
|
||
1:
|
||
@@ -4060,7 +3395,6 @@
|
||
jsr r0,poke
|
||
clr *$ps
|
||
rts r0
|
||
-
|
||
poke:
|
||
mov r1,-(sp)
|
||
mov r2,-(sp)
|
||
@@ -4081,29 +3415,22 @@
|
||
clrb 1(r1) / do not do I/O
|
||
br 2f
|
||
3:
|
||
- cmpb r3,$1 / device id = 1, device is disk
|
||
- blt prf / device id = 0, device is drum
|
||
- bgt ptc / device id greater than or equal to 1, device is
|
||
+ cmpb r3,$1 / device id = 1; device is disk
|
||
+ blt prf / device id = 0; device is drum
|
||
+ bgt ptc / device id greater than or equal to 1; device is
|
||
/ dec tape
|
||
bit $2,active / test disk busy bit
|
||
bne 2f / branch if bit is set
|
||
bis $2,active / set disk busy bit
|
||
- mov r1,rkap / rkap points to current I/O queue entry for drsk
|
||
+ mov r1,rkap / rkap points to current I/O queue entry for disk
|
||
mov 2(r1),mq / put physical block number in mq
|
||
mov $12.,div / divide physical block number by 12.
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov $rkda+2,r3 /
|
||
mov ac,-(sp) / put remainder from divide on stack; gives
|
||
/ sector number
|
||
- mov $4,1sh / shift quotient 4 bits, to align with cyl and surf
|
||
+ mov $4,lsh / shift quotient 4 bits, to align with cyl and surf
|
||
/ bits in rkda
|
||
- bis mq,(sp) / or mq with sector, gives total disk address
|
||
+ bis mq,(sp) / or mq with sector; gives total disk address
|
||
br 3f
|
||
prf: / drum
|
||
bit $1,active / test drum busy bit
|
||
@@ -4123,7 +3450,7 @@
|
||
mov (sp)+,-(r3) / load rkda register; load dar register
|
||
mov 6(r1),-(r3) / load bus address register
|
||
mov 4(r1),-(r3) / load word count register
|
||
- mov $103,-(sp) / 103 indicates write operaticn when loaded
|
||
+ mov $103,-(sp) / 103 indicates write operation when loaded
|
||
/ in csr
|
||
bit $2000,(r1) / if bit 10 of word 1 of I/O queue entry is
|
||
/ a one
|
||
@@ -4152,15 +3479,8 @@
|
||
swab r3
|
||
bis $103,r3 / now rbn,for,unit,ie
|
||
mov r3,tccm
|
||
- seta: / I/O queue bookkeeping, set read/write waiting bits.
|
||
- mov (r1),r3 / move word 1 of I/O queue cntry into r3
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
+ seta: / I/O queue bookkeeping; set read/write waiting bits.
|
||
+ mov (r1),r3 / move word 1 of I/O queue entry into r3
|
||
bic $!3000,r3 / clear all bits except 9 and 10
|
||
bic $3000,(r1) / clear only bits 9 and 10
|
||
rol r3
|
||
@@ -4215,19 +3535,12 @@
|
||
tst (r0)+ / skip if warmed over buffer
|
||
1:
|
||
mov -(r2),r5 / put pointer to word 1 of I/O queue entry in r5
|
||
- movb cdev,(r5) / put current device number in l/O queue entry
|
||
+ movb cdev,(r5) / put current device number in I/O queue entry
|
||
mov r1,2(r5) / move block number into word 2 of I/O queue
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ entry
|
||
1:
|
||
cmp r2,$bufp / bump all entrys in bufp and put latest assigned
|
||
- blos 1f / buffer on the top (this makes if the lowest prrority)
|
||
+ blos 1f / buffer on the top (this makes if the lowest priority)
|
||
mov -(r2),2(r2) / job for a particular device
|
||
br 1b
|
||
1:
|
||
@@ -4247,7 +3560,7 @@
|
||
bne 1f / if more than 1 branch
|
||
movb 1(r2),r3 / r2+1 points to command register upper byte
|
||
bic $!7,r3 / clear all but bits 8-10 (Unit Selection)
|
||
- incb deverr+2(r3) / set error bit for this tap$ unit
|
||
+ incb deverr+2(r3) / set error bit for this tape unit
|
||
br tape3
|
||
1: / more than 1 error
|
||
bit $4000,(r2) / direction of tape
|
||
@@ -4265,7 +3578,7 @@
|
||
tape1: / read bn forward
|
||
mov $tcdt,r0 / move address of data register to r0
|
||
cmp (r0),2(r1) / compare block addresses
|
||
- blt 0b / if 1t, keep moving
|
||
+ blt 0b / if lt, keep moving
|
||
bgt taper / if gt, reverse
|
||
mov 6(r1),-(r0) / put bus address in tcba
|
||
mov 4(r1),-(r0) / put word count in tcwc
|
||
@@ -4280,13 +3593,6 @@
|
||
br 4f / go to retisp (rti)
|
||
|
||
tape2: / read bn bakasswards
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
mov tcdt,r0 / r0 has contents of data register
|
||
add $3,r0 / overshoot
|
||
cmp r0,2(r1)
|
||
@@ -4296,7 +3602,7 @@
|
||
tape3: / I/O transfer
|
||
bic $30000,(r1) / clear bits 12 and 13 of I/O queue entry
|
||
jsr r0,poke / do the I/O
|
||
- bit $4,active / still busy see if pick up r-ahead. w-behind
|
||
+ bit $4,active / still busy see if pick up r-ahead, w-behind
|
||
bne 1f / yes
|
||
movb $1,(r2) / no, indicate too bad
|
||
1:
|
||
@@ -4305,7 +3611,7 @@
|
||
|
||
drum: / interrupt handler
|
||
jsr r0,setisp / save r1,r2,r3, and clockp on the stack
|
||
- jsr r0,trapt; dcs; rfap; 1 / check for stray interruut or
|
||
+ jsr r0,trapt; dcs; rfap; 1 / check for stray interrupt or
|
||
/ error
|
||
br 3f / no, error
|
||
br 2f / error
|
||
@@ -4341,15 +3647,8 @@
|
||
mov sc,-(sp)
|
||
jsr r0,poke
|
||
mov (sp)+,sc
|
||
- mov (sp)+,mq / pop them off Stack
|
||
+ mov (sp)+,mq / pop them off stack
|
||
mov (sp)+,ac
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 8
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
4:
|
||
jmp retisp / u4-3
|
||
|
||
@@ -4367,53 +3666,6 @@
|
||
tst (r0)+ / skip on error
|
||
2:
|
||
jmp (r0)
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.8 Page 9
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ u9 -- unix
|
||
|
||
trcv:
|
||
@@ -4432,7 +3684,7 @@
|
||
mov clockp,-(sp)
|
||
mov $s.syst+2,clockp
|
||
sub $trcv+4,r0 / 0%4 / calculate offset for tty causing
|
||
- asl r0 / 0%8 / this interruot
|
||
+ asl r0 / 0%8 / this interrupt
|
||
mov rcsr(r0),r2
|
||
mov rcbr(r0),r1
|
||
tst r2
|
||
@@ -4448,7 +3700,7 @@
|
||
bitb $100,tty+4(r0)
|
||
beq 2f / non-37 parity not allowed
|
||
4:
|
||
- bic $!77,r1
|
||
+ bic $!177,r1
|
||
bit $40,tty+4(r0)
|
||
bne 3f / raw
|
||
cmp r1,$177
|
||
@@ -4469,13 +3721,6 @@
|
||
mov $12,r1
|
||
3:
|
||
bitb $4,tty+4(r0)
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
beq 3f
|
||
cmp r1,$'A
|
||
blo 3f
|
||
@@ -4515,7 +3760,6 @@
|
||
jsr r0,wakeup; runq; 0:.. / call wakeup for process
|
||
2:
|
||
jmp retisp
|
||
-
|
||
txmt:
|
||
jsr r0,1f
|
||
jsr r0,1f
|
||
@@ -4532,13 +3776,6 @@
|
||
mov clockp,-(sp)
|
||
mov $s.syst+2,clockp
|
||
sub $txmt+4,r0 / 0%4 / offset in cc
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 2
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
asl r0 / 0%8
|
||
jsr r0,starxmt
|
||
jmp retisp
|
||
@@ -4560,12 +3797,12 @@
|
||
cmpb cc+1(r1),$10. / is char count for tty output greater
|
||
/ than or equal to 10
|
||
bhi 1f / yes
|
||
- mov r1,0f / no, make offset an arg of wakeup
|
||
+ mov r1,0f / no, make offset an arg of "wakeup"
|
||
inc 0f / increment arg of wakeup
|
||
jsr r0,wakeup; runq+2; 0:.. / wakeup process identified
|
||
/ by wlist
|
||
1: / entry specified by argument in 0:
|
||
- mov (sp),r1 / 0%8 / r1 contains 8xtty number
|
||
+ mov (sp),r1 / 0%8 / r1 contains tty number
|
||
asr r1
|
||
asr r1
|
||
asr r1 / 0%1 r1 contains tty number
|
||
@@ -4580,7 +3817,7 @@
|
||
clrb tty+2(r2) / clear third byte
|
||
tst r1 / is third byte = 0
|
||
bne 3f / no, r1 contains a non nul character
|
||
- movb tty+3(r2),0f / yes, make byte 4 arg of getc
|
||
+ movb tty+3(r2),0f / yes, make byte 4 arg of "getc"
|
||
inc 0f / increment arg to make it tty output list of
|
||
/ clist
|
||
jsr r0,getc; 0:.. / obtain next character in clist for tty
|
||
@@ -4589,27 +3826,21 @@
|
||
/ calling routine
|
||
3:
|
||
bic $!177,r1 / zero out bits 7-15 of r1
|
||
- movb partab(r1),r3 / move partab entry (identified by
|
||
+ movb partab(r1),r3 / move "partab" entry (identified by
|
||
/ r1) into r3
|
||
bge 3f / if entry is greater than or equal to 0 (digit
|
||
/ 2, far left digit = 0) branch
|
||
bisb 200,r1 / if entry is less than 0 add 128 to ASCII
|
||
/ code for char to be output
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 3
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
bic $!177,r3 / to make it teletype code and then clear
|
||
/ bits 7-15 of r3
|
||
+
|
||
3:
|
||
mov (sp),r2 / r2 contains 8xtty number
|
||
bit $4,rcsr(r2) / is carrier present for tty
|
||
beq starxmt / no carrier flush
|
||
mov r1,-(sp) / yes, place character to be output on stack
|
||
- cmp r1,$11 / is character ht
|
||
+ cmp r1,$11 / is character "ht"
|
||
bne 3f / no
|
||
bitb $2,tty+4(r2) / is tab to space flag for tty set
|
||
/ (bit 1 of byte 5 in "tty" buffer area)
|
||
@@ -4624,7 +3855,7 @@
|
||
incb (r2) / normal / jmp to location determined by digits
|
||
/ 0 and 1 of character's entry in "partab" which
|
||
/ is now in r3
|
||
- rts r0 / non-printing
|
||
+1: rts r0 / non-printing
|
||
br 1f / bs
|
||
br 2f / nl (line feed)
|
||
br 3f / tab (horizontal tab)
|
||
@@ -4634,7 +3865,7 @@
|
||
1:
|
||
decb (r2) / col decrement column count in byte 2 of "tty"
|
||
/ area
|
||
- bge 1f / if count > 0 return to calling routine
|
||
+ bge 1f / if count >=0 return to calling routine
|
||
clrb (r2) / col set column count = 0
|
||
br 1f
|
||
2:
|
||
@@ -4643,8 +3874,8 @@
|
||
bitb $20,3(r2) / cr flag is bit 4 of 5th byte of "tty"
|
||
/ area = 1
|
||
beq 2f / no (only lf to be handled)
|
||
- movb $15,1(r2) / place cr in 3rd byte of "tty" area
|
||
- / (character leftover after lf )
|
||
+ movb $15,1(r2) / place "cr" in 3rd byte of "tty" area
|
||
+ / (character leftover after "lf" )
|
||
2:
|
||
movb (r2),r3 / place present column count in r3
|
||
beq 1f / return to calling routine if count = 0
|
||
@@ -4658,13 +3889,6 @@
|
||
3:
|
||
bitb $2,3(r2) / is bit 1 of 5th byte of "tty" area = 1
|
||
/ (tab to space bit set)
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 4
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
beq 3f / no
|
||
incb (r2) / increment column count
|
||
bitb $7,(r2) / are bits 0, 1 and 2 set at col 0%8
|
||
@@ -4693,7 +3917,7 @@
|
||
mov (sp),r2 / 0%8 r2 contains 8xtty number
|
||
asr r2
|
||
asr r2
|
||
- asr r2 / 0=1 r2 contains tty number
|
||
+ asr r2 / 0%1 r2 contains tty number
|
||
movb r3,toutt+3(r2) / place value for tout entry into tout
|
||
/ table
|
||
1:
|
||
@@ -4701,10 +3925,10 @@
|
||
|
||
partab: / contains 3 digits for each character; digit 2 is used
|
||
/ to determine if 200 is to added to ASCII code digits 0
|
||
- / and 1 are used to depermine value for jump table.
|
||
- .byte 002,202,202,002,002,002,002,202
|
||
+ / and 1 are used to determine value for jump table.
|
||
+ .byte 002,202,202,002,202,002,002,202
|
||
.byte 204,010,006,212,012,214,202,002
|
||
- .byte 202,002,002,202,002,002,202,002
|
||
+ .byte 202,002,002,202,002,202,202,002
|
||
.byte 002,202,202,002,202,002,002,202
|
||
.byte 200,000,000,200,000,200,200,000
|
||
.byte 000,200,200,000,200,000,000,200
|
||
@@ -4721,19 +3945,12 @@
|
||
|
||
xmtt:
|
||
jsr r0,cpass / get next character from user buffer area
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 5
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
- tst r1 / rs character nul
|
||
+ tst r1 / is character nul
|
||
beq xmtt / yes, get next character
|
||
1:
|
||
mov $240,*$ps / set processor priority equal to 5
|
||
mov (sp),r2 / r2 contains i node number of file
|
||
- asl r2 / 0%2+28 / multiply inode number by 2
|
||
+ asl r2 / 0%2+28 / multlply inode number by 2
|
||
sub $21.,r2 / 0%2+7 / subtract 21 from 2x inumber to
|
||
/ get cc, cf, cl offset
|
||
mov r2,0f / make offset arg of putc
|
||
@@ -4755,7 +3972,7 @@
|
||
br xmtt / get next character
|
||
2:
|
||
mov r1,-(sp) / place character on stack
|
||
- mov 0b,0f / make offset rnto cc, cf, cl table arg of
|
||
+ mov 0b,0f / make offset into cc, cf, cl table arg of
|
||
/ sleep (identifies location in wlist)
|
||
jsr r0,sleep; 0:.. / put process to sleep
|
||
mov (sp)+,r1 / remove character from stack
|
||
@@ -4784,16 +4001,9 @@
|
||
2:
|
||
jsr r0,canon; rcvch / process a line of characters in
|
||
/ clist and place results in tty buffer
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 6
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
/ area
|
||
1:
|
||
- tst (sp)+ / incrcment sp
|
||
+ tst (sp)+ / increment sp
|
||
1:
|
||
tst 2(r5) / is char count for tty buffer = 0
|
||
beq 1f / yes
|
||
@@ -4818,7 +4028,7 @@
|
||
mov $240,*$ps / set processor priority = 5
|
||
jsr r0,getc; 0:.. / get next character off clist
|
||
br 2f / clist empty
|
||
- clr *$ps / set processor prrority = 0
|
||
+ clr *$ps / set processor priority = 0
|
||
rts r0
|
||
2:
|
||
mov 0b,0f / make "getc" arg an arg for "sleep"
|
||
@@ -4831,31 +4041,24 @@
|
||
sub $28.,r1 / 0%2 calculate tty table offset
|
||
mov r1,r2
|
||
asl r1 / 0%4
|
||
- asl r1 / 0=8
|
||
+ asl r1 / 0%8
|
||
mov r1,-(sp)
|
||
- add $6,r2 / calculate clrst id clist offset
|
||
+ add $6,r2 / calculate clist id clist offset
|
||
movb r2,tty+3(r1) / put clist id in tty table
|
||
1:
|
||
mov (sp),r1
|
||
bit $4,rcsr(r1) / carrier detect bit set
|
||
bne 1f / if so, branch
|
||
- mov $511,rcsr(r1) / set ready, speed. interrupt enable,
|
||
+ mov $511,rcsr(r1) / set ready, speed, interrupt enable,
|
||
/ supervisor transmit
|
||
movb tty+3(r1),0f / put clist id in sleep argument
|
||
- jsr r0,sleep; 0:..
|
||
+ jsr r0,sleep; 0;..
|
||
br 1b
|
||
1:
|
||
mov tty+6(r1),r5 / put tty buffer address in r5
|
||
tstb (r5) / first byte of tty buffer = 0
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 7
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
bne 1f / if not, branch
|
||
- mov $511,rcsr(r1) / set ccntrol bits for receiver
|
||
+ mov $511,rcsr(r1) / set control bits for receiver
|
||
mov $511,tcsr(r1) / set control bits for transmitter
|
||
movb $210,tty+4(r1) / put 210 in tty table word 3 / set flags
|
||
1:
|
||
@@ -4875,49 +4078,6 @@
|
||
1:
|
||
jmp sret
|
||
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.9 Page 8
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
-
|
||
/ ux -- unix
|
||
|
||
systm:
|
||
@@ -4974,12 +4134,6 @@
|
||
toutt: .=.+16.; touts: .=.+32.
|
||
runq: .=.+6
|
||
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.10 Page 1
|
||
-
|
||
-
|
||
- UNIX IMPLEMENTATION
|
||
-
|
||
-
|
||
wlist: .=.+40.
|
||
cc: .=.+30.
|
||
cf: .=.+31.
|
||
@@ -5026,15 +4180,383 @@
|
||
u.uno: .=.+1
|
||
. = core
|
||
|
||
+/ sh -- command interpreter
|
||
+ mov sp,r5
|
||
+ mov r5.shel larg / save orig sp in shel larg
|
||
+ cdpb B(r5),$'- / was this sh calleZd by init or loginx~
|
||
+ bne 2f / no
|
||
+ sys intr; O / yes, turn off interrupts
|
||
+ sys quit; O
|
||
+2:
|
||
+ sys getuid / who is user
|
||
+ tst r0 / is it superuser
|
||
+ bne 2f / no
|
||
+ movb $'#,at / yes, set new prompt symbol
|
||
+2:
|
||
+ cmn (r5),$l / tty input?
|
||
+ ble newline / yes, call with '-(or with no command
|
||
+ / file name)
|
||
+ clr rO / no, set ttv
|
||
+ sys close / close it
|
||
+ mov 4(r5),0f / get new file name
|
||
+ sys open; O:..; 0 / open it
|
||
+ bec 1f / branch if no error
|
||
+ jsr r5,error / error in file name
|
||
+ /<Input not found\n\O>: .even
|
||
+ sys exit
|
||
+1:
|
||
+ clr at / clear prompt character, if reading non-tty
|
||
+ / input file
|
||
+newline:
|
||
+ tst at / is there a prompt symbol
|
||
+ beq newcom / no
|
||
+ mov $1,rO / yes
|
||
+ sys write; at; 2. / print prompt
|
||
+newcom:
|
||
+ mov shellarq,sp /
|
||
+ mov $parbuf,r3 / initialize command list area
|
||
+ mov $parp,r4 / initialize command list pointers
|
||
+ clr infile / initialize alternate input
|
||
+ clr outfile / initialize alternate output
|
||
+ clr glflag / initialize global flag
|
||
+newarg:
|
||
+ jsr pc,blank / squeeze out leading blanks
|
||
+ jsr r5,delim / is new character a ; \n or &
|
||
+ br 2f / yes
|
||
+ mov r3,-(sp) I no, push arg pointer onto stack
|
||
+ cmp rO,$'< / new input file?
|
||
+ bne 1f / no
|
||
+ mov (sp).infile / yes, save arg pointer
|
||
+ clr (sp) / clear pointer
|
||
+ br 3f
|
||
+1:
|
||
+ cmp r0,$'> / new output file?
|
||
+ bne newchar / no
|
||
+ mov (sp),outfile / yes, save arg pointer
|
||
+ clr (sp) / clear pointer
|
||
+ br 3f
|
||
|
||
+newchar:
|
||
+ cmp $' .r0 / is character a blank
|
||
+ beq 1f / branch if it is (blank as arg separator)
|
||
+ cmp $’\n+200,r0 / treat \n preceded by \
|
||
+ beq 1f / as blank
|
||
+ jsr pc,putc / put this character in parbuf list
|
||
+3:
|
||
+ jsr pc,getc / get next character
|
||
+ jsr r5,delim / is char a : \n or &,
|
||
+ br 1f / yes
|
||
+ br newchar / no, start new character tests
|
||
+1:
|
||
+ clrb (r3)+ / end name with \0 when read blank, or
|
||
+ / delim
|
||
+ mov (sp)+,(r4)+ / move are ant! to par? location
|
||
+ bne 1f / if (sp)=O, in file or out file points to arg
|
||
+ tst -(r4) / so ignore dummy (O), in pointer list
|
||
+1:
|
||
+ jsr r5,delim / is char a : \n or &.
|
||
+ br 2f / yes
|
||
+ br newarg / no, start newarg processing
|
||
+2:
|
||
+ clr (r4) / \n, &, or ; takes to here (end of arg list)
|
||
+ / after ’dellm’ call
|
||
+ mov r0,-(sp) / save delimter in stack
|
||
+ jsr pc,docom / go to exec command in parbuf
|
||
+ cmpb (sp),$’& / get a new command without wait?
|
||
+ beq newcom / yes
|
||
+ tst r1 / was chdir just executed or line ended with
|
||
+ / ampersand?
|
||
+ beq 2f / yes
|
||
+1:
|
||
+ sys wait / no, wait for new process to terminate
|
||
+ / command executed)
|
||
+ bcs 2f / no, children not previously waited for
|
||
+ cmp r0,r1 / is this my child
|
||
+ bne 1b
|
||
+2:
|
||
+ cmp (sp),$’\n / was delimiter a new line
|
||
+ beq newline / yes
|
||
+ br newcom / no, pick up next command
|
||
+docom:
|
||
+ sub $parp,r4 / out arg count in r4
|
||
+ bne 1f / any arguments?
|
||
+ clr r1 / no, line ended with ampersand
|
||
+ rts pc / return from call
|
||
+1:
|
||
+ jsr r5,chcom; qchdir / is command chdir?
|
||
+ br 2f / command not chdir
|
||
+ cmp r4,$4 / prepare to exec chdir, 4=aro count x 2
|
||
+ beq 3f
|
||
+ jsr r5,error / go to print error
|
||
+ <Arg count\n\0>; .even
|
||
+ br 4f
|
||
+3:
|
||
|
||
+ mov parp+2,0f / more directory name to sys coll
|
||
+ sys chdir; 0:0 / exec chdir
|
||
+ bec 4f / no error exit
|
||
+ jsr r5,error / go to print error
|
||
+ <Bad directory\n\0>; .even / this diagnostic
|
||
+4:
|
||
+ clr r1 / set r1 to zero to dkip wait
|
||
+ rts pc / and return
|
||
+2:
|
||
+ jsr r5,chcom: qloqin / is command looin?
|
||
+ br 2f / not loqin, no to fork
|
||
+ sys exec; parbuf: parp / exec login
|
||
+ sys exec; binpb: parp / or /bin/login
|
||
+2: / no error return??
|
||
+ sys fork / generate sh child process for command
|
||
+ br newproc / exec command with new process
|
||
+ bec 1f / no error exit, old orocess
|
||
+ jsr r5,error / go to print error
|
||
+ <Try again\n\0>; .even / this diaonostic
|
||
+ jmp newline / and return for next try
|
||
+1:
|
||
+ mov r0,r1 / save id of child sh
|
||
+ rts pc / return to “jsr pc, docom“ call in parent sh
|
||
|
||
+error:
|
||
+ movb (r5)+,och / pick up diagnostic character
|
||
+ beq 1f / 0 is end of line
|
||
+ mov $1,r0 / set for tty output
|
||
+ sys write; och; 1 / print it
|
||
+ br error / continue to get characters
|
||
+1:
|
||
+ inc r5 / inc r5 to point to return
|
||
+ bic $!,r5 / make it even
|
||
+ clr r0 / set for input
|
||
+ sys seek;,O; 2 / exit from runcom. skip to end of
|
||
+ / input file
|
||
+chcom: / has no effect if tty input
|
||
+ mov (r5)+,r1 / glogin gchdir r1, bump r5
|
||
+ mov $parbuf,r2 / command address r2 ’login’
|
||
+1:
|
||
+ movb (r1)+,r0 / is this command ’chdir’
|
||
+ cmpb (r2)+,r0 / compare command name byte with 'login’
|
||
+ / or ’chdir’
|
||
+ bne 1f / doesn’t compare
|
||
+ tst r0 / is this
|
||
+ one 1b / end of names
|
||
+ tst (r5)+ / yes, bump r5 again to execute login
|
||
+ / chdir
|
||
+1:
|
||
+ rts r5 / no, return to exec command
|
||
+putc:
|
||
+ cmp r0,$'' / single quote?
|
||
+ beq 1f / yes
|
||
+ cmp r0,$’" / double quote
|
||
+ beq 1f / yes
|
||
|
||
+ bic $!177,r0 / no, remove 200, if present
|
||
+ movb r0,(r3)+ / store character in parbuf
|
||
+ rts po
|
||
+1:
|
||
+ mov r0,-(sp) / push quote mark onto stack
|
||
+1:
|
||
+ jsr pc,getc / get a quoted charactef
|
||
+ cmp | r0.$’\n / is it end or line
|
||
+ bne 2f / no
|
||
+ jsr r5,error / yes, indicate missing quote mark
|
||
+ <"’ imbalance\n\0)>; .even
|
||
+ jmp newline / ask for new line
|
||
+2:
|
||
+ cmp r0,(sp) / is this closing quote mark
|
||
+ beq 1f / yes
|
||
+ bic $!177,r0 / no, strip off 200 if present
|
||
+ movb r0,(r3)+ / store quoted character in parbuf
|
||
+ br 1b / continue
|
||
+1:
|
||
+ tst (sp)+ / pop quote mark off stack
|
||
+ ’ rts bc‘, return
|
||
+/ thp‘e new process
|
||
+newproc:
|
||
+ mov infile,0f / move pointer to new file name
|
||
+ beq lf / branch if no alternate read file given
|
||
+ tstb *0f
|
||
+ beq 3f / branch if no file name miven
|
||
+ clr rO / set tty input file name
|
||
+ sys close / close it
|
||
+ sys open; 0:..; 0 / open new input file for reading
|
||
+ bcc 1f / branch if input file ok
|
||
+3:
|
||
+ jsr r5,error / file not ok, print error
|
||
+ <Input file\n\0>: .even / this diagnostic
|
||
+ sys exit / terminate this process and make narent sh
|
||
+1:
|
||
+ mov outfile,r2 / more pointer to new file name
|
||
+ beq 1f / branch if no alternate write file
|
||
+ cmpb (r2),$’> / is > at beqinninrg of file name?
|
||
+ bne 4f / branch if it isn’t
|
||
+ inc r2 / yes, increment pointer
|
||
+ mov r2,0f
|
||
+ svs open; O:..; 1 / open file for writing
|
||
+ bec 3f / if no error
|
||
+4:
|
||
+ mov r2,0f
|
||
+ sys creat; 0:..; 17 / create new file with this name
|
||
+ bec 3f / branch it no error
|
||
+2:
|
||
+ jsr r5,error
|
||
+ <Output file\n\O>; .even
|
||
+ sys exit
|
||
+3:
|
||
+ sys close / close the new write file
|
||
|
||
+ mov r2,0f / move new name to open
|
||
+ mov $1,r0 / set ttv file name
|
||
+ sys close / close it
|
||
+ sys open; 0:..; 1 / ooen new output file, it now has
|
||
+ / file descriptor 1
|
||
+ sys seek; 0; 2 / set pointer to current end of file
|
||
+1:
|
||
+ tst glflag / was *, ? or [ encountered?
|
||
+ bne 1f / yes
|
||
+ sys exec; parbuf; parp / no, execute this commend
|
||
+ sys exec; binpb; parp / or /bin/this command
|
||
+2:
|
||
+ sys stat; binpb; inbuf / if can’t execute does it
|
||
+ / exist?
|
||
+ bes 2f / branch if it doesn’t
|
||
+ mov $shell,parp-2 / does exist, not executable
|
||
+ mov $binpb,parp / so it must be
|
||
+ svs exec; shell; parp-2 / a command file, get it with
|
||
+ / sh /bin/x (if x name of file)
|
||
+2:
|
||
+ jsr r5,error / a return for exec is the diaonostic
|
||
+ <No command\n\O>; .even
|
||
+ sys exit
|
||
+1:
|
||
+ mov $glob,parp-2 / prepare to process *,?
|
||
+ sys exec; glob: parp-2 / execute modified command
|
||
+ br 2b
|
||
|
||
+delim:
|
||
+ cmp r0,$'\n / is character a newline
|
||
+ beq 1f
|
||
+ cmp r0,S’& / ls it &
|
||
+ beq 1f / yes
|
||
+ cmu r0,$'; / is it ;
|
||
+ beq 1f / yes
|
||
+ cmp r0,$’? / is it ?
|
||
+ beq 3f
|
||
+ cmp r0,$’[ / is it beginning of character string
|
||
+ / (for glob)
|
||
+ bne 2f
|
||
+3:
|
||
+ inc glflag / ? or * or [ set flag
|
||
+2:
|
||
+ tst (r5)+ / bump to process all except \n,:,&
|
||
+1:
|
||
+ rts r5
|
||
+blank:
|
||
+ jsr pc,getc / get next character
|
||
+ cmp $' ,r0 / leadino blanks
|
||
+ beq blank / yes, ’squeeze out'
|
||
+ cmp r0,$200+'\n / new—line preceded by \ is translated
|
||
+ beq blank / into blank
|
||
+ rts pc
|
||
+getc:
|
||
|
||
+ tat param / are we substituting for $n
|
||
+ bne 2f/ yes
|
||
+ mov inbufp,r1 / no, move normal input pointer to r1
|
||
+ cmp r1,einbuf / end of input line?
|
||
+ bne 1f / no
|
||
+ jsr pc,netbuf / vas. put next console line in buffer
|
||
+ br gotc
|
||
+1:
|
||
+ movb (r1)+,r0 / move byte from input buffer to r0
|
||
+ mov r1,inbufp / increment routine
|
||
+ bis escap,r0 / if last character was \ this adds
|
||
+ / 200 to current character
|
||
+ clr escap / clear, so escap normally zero
|
||
+ cmp r0,$’\\ / note that \\ is equal \ in as
|
||
+ beq 1f
|
||
+ cmp r0,$’$ / is it $
|
||
+ beq 3f / yes
|
||
+ rts pc / no
|
||
+1:
|
||
+ mov $200,escap / mark presence of \ in command line
|
||
+ br getc / get next character
|
||
+2:
|
||
+ movb *param,r0 / pick up substitution character put in
|
||
+ / r0
|
||
+ beq 1f / if end of substitution arc, branch
|
||
+ inc param / if not end, set for next character
|
||
+ rts pc / return as though character in ro is normal
|
||
+ / input
|
||
+1:
|
||
+ clr param / unset substitution pointer
|
||
+ br getc / get next char in normal input
|
||
+3:
|
||
+ jsr pc,getc / get digit after $
|
||
+ sub $’0,r0 / strip off zone bits
|
||
+ cmp r0,$9, / compare with digit 9
|
||
+ clos 1f / less than or equal 9
|
||
+ mov $9.,r0 / if larger than 9, force 9
|
||
+1:
|
||
+ mov shellarg,r1 / get pointer to stack for
|
||
+ / this call of shell
|
||
+ inc r0 / digit +1
|
||
+ cmp r0,(r1) / is it less than # of args in this call
|
||
+ bge getc / no, ignore it. so this $n is not replaced
|
||
+ asl r0 / yes, multiply by 2 (to skip words)
|
||
+ add r01,r0 / form pointer to aro pointer (-2)
|
||
+ mov 2(r0),param / more arg pointer to param
|
||
+ br getc / go to get substitution arg for $n
|
||
+getbuf:
|
||
+ mov $inbuf,r0 / move inout buffer address
|
||
+ mov r0,inbufp / to inout buffer pointer
|
||
+ mov r0,einbuf / and initialize pointer to end of
|
||
+ / character string
|
||
+ dec r0 / decrement pointer so can utilize normal
|
||
+ / l00p starting at If
|
||
+ mov r0,0f / initialize address for readlng 1st char
|
||
+
|
||
+1:
|
||
+ inc 0f / this routine filles inbuf with line from
|
||
+ / console - if there is cnc
|
||
+ clr r0 / set for tty inout
|
||
+ sys read; O:O; I / read next char into inbuf
|
||
+ bcs xit1 / error exit
|
||
+ tst r0 / a zero input is and of file
|
||
+ beq xit1 / exit
|
||
+ inc einbuf / eventually einbuf points to \n
|
||
+ / (+1) or this line
|
||
+ cmp 0b,$1nbuf+256. / have we exceeded innut buffer size
|
||
+ bhis xit1 / if so, exit assume some sort of binary
|
||
+ cmpb *0b,$’\n / end of line?
|
||
+ bne 1b / no, go to get next char
|
||
+ rts pc / yes, return
|
||
+xit1:
|
||
+ sys exit
|
||
+quest:
|
||
+ <?\n>
|
||
+at:
|
||
+ <@ >
|
||
+qchdir:
|
||
+ <chdir\0>
|
||
+glogin:
|
||
+ <login\0> -
|
||
+shell:
|
||
+ </bin/sh\0> .
|
||
+glob:
|
||
+ </etc/g10b\0>
|
||
+binpb:
|
||
+ </bin/>
|
||
+parbuf: .=.+1000.
|
||
+ .even
|
||
+param: .=.+2
|
||
+glflaq: .=.+2
|
||
+infile: .=.+2
|
||
+outfile:.=.+2
|
||
+ .=.+2 / room for glob
|
||
+parp: .=.+200.
|
||
+inbuf: .=.+256.
|
||
+escap: .=.+2
|
||
+inbufp: .=.+2
|
||
+einbuf: .=.+2
|
||
+och: .=.+2
|
||
+shellarg:.=.+2
|
||
|
||
-
|
||
-
|
||
-
|
||
- Issue D Date 3/17/72 ID IMO.1-1 Section E.10 Page 2
|