Research V1 release
[unix-history] / init.s
diff --git a/init.s b/init.s
index 69284d4..5f39d9b 100644 (file)
--- a/init.s
+++ b/init.s
-" init
+/ init -- process control initialization
 
 
-   -1
-   sys intrp
-   jms init1
-   jms init2
-1:
-   sys rmes
-   sad pid1
-   jmp 1f
-   sad pid2
-   jms init2
-   jmp 1
-1:
-   jms init1
-   jmp 1
+mount = 21.
 
 
-init1: 0
-   sys fork
-   jmp 1f
-   sys open; ttyin; 0
-   sys open; ttyout; 1
-   jmp login
+       sys     intr; 0 / turn off interrupts
+       sys     quit; 0
+       cmp     csw,$73700 / single user?
+       bne     1f / no
+help:
+       clr     r0 / yes
+       sys     close / close current read
+       mov     $1,r0 / and write
+       sys     close / files
+       sys     open; ctty; 0 / open control tty
+       sys     open; ctty; 1 / for read and write
+       sys     exec; shell; shellp / execute shell
+       br      help / keep trying
 1:
 1:
-   dac pid1
-   jmp init1 i
+       mov     $'0,r1 / prepare to change
+1 :
+       movb    r1,tapx+8 / mode of dec tape drive x, where
+       sys     chmod; tapx; 17 / x=0 to 7, to read/write by owner or
+       inc     r1 / non-owner mode
+       cmp     r1,$'8 / finished?
+       blo     1b / no
+       sys     mount; rk0; usr / yes, root file on mounted rko5
+                               / disk ls /usr
+       sys     creat; utmp; 16 / truncate /tmp/utmp
+       sys     close / close it
+       movb    $'x,zero+8. / put identifier in output buffer
+       jsr     pc,wtmprec / go to write accting info
+       mov     $itab,r1 / address of table to r1
 
 
-init2: 0
-   sys fork
-   jmp 1f
-   sys open; keybd; 0
-   sys open; displ; 1
-   jmp login
-1:
-   dac pid2
-   jmp init2 i
+/ create shell processes
 
 
-login:
-   -1
-   sys intrp
-   sys open; password; 0
-   lac d1
-   sys write; m1; m1s
-   jms rline
-   lac ebufp
-   dac tal
-1:
-   jms gline
-   law ibuf-1
-   dac 8
-   law obuf-1
-   dac 9
-2:
-   lac 8 i
-   sac o12
-   lac o72
-   sad 9 i
-   skp
-   jmp 1b
-   sad o72
-   skp
-   jmp 2b
-   lac 9 i
-   sad o72
-   jmp 1f
-   -1
-   tad 9
-   dac 9
-   lac d1
-   sys write; m3; m3s
-   jms rline
-   law ibuf-1
-   dac 8
-2:
-   lac 8 i
-   sad o12
-   lac o72
-   sad 9 i
-   skp
-   jmp error
-   sad o72
-   skp
-   jmp 2b
 1:
 1:
-   dzm nchar
-   law dir-1
-   dac 8
-1:
-   lac 9 i
-   sad o72
-   jmp 1f
-   dac char
-   lac nchar
-   sza
-   jmp 2f
-   lac char
-   alss 9
-   xor o40
-   dac 8 i
-   dac nchar
-   jmp 1b
-2:
-   lac 8
-   dac nchar
-   lac nchar i
-   and o777000
-   xor char
-   dac nchar i
-   dzm nchar
-   jmp 1b
-1:
-   dzm nchar
-1:
-   lac 9 i
-   sad o12
-   jmp 2f
-   tad om60
-   lmq
-   lac nchar
-   cll; als 3
-   omq
-   dac nchar
-   jmp 1b
-2:
-   lac nchar
-   sys setuid
-   sys chdir; dd
-   sys chdir; dir
+       mov     (r1)+,r0 / 'x, x=0, 1... to r0
+       beq     1f / branch if table end
+       movb    r0,ttyx+8 / put symbol in ttyx
+       jsr     pc,dfork / go to make new init for this ttyx
+       mov     r0,(r1)+ / save child id in word offer '0, '1,...etc.
+       br      1b / set up next child
+
+/ wait for process to die
 
 
-   lac d2
-   sys close
-   sys open; sh; 0
-   sma
-   jmp 1f
-   sys link; system; sh; sh
-   spa
-   jmp error
-   sys open; sh; 0
-   spa
-   jmp error
-   sys unlink; sh
-1:
-   law 017700
-   dac 9
-   law boot-1
-   dac 8
 1:
 1:
-   lac 8 i
-   dac 9 i
-   sza
-   jmp 1b
-   jmp 017701
+       sys     wait / wait for user to terminate process
+       mov     $itab,r1 / initialize for search
 
 
-boot:
-   lac d2
-   lmq
-   sys read; 4096; 07700
-   lacq
-   sys close
-   jmp 4096
-   0
+/ search for process id
 
 
-rline: 0
-   law ibuf-1
-   dac 8
-1:
-   cla
-   sys read; char; 1
-   lac char
-   lrss 9
-   sad o100
-   jmp rline+1
-   sad o43
-   jmp 2f
-   dac 8 i
-   sad o12
-   jmp rline i
-   jmp 1b
 2:
 2:
-   law ibuf-1
-   sad 8
-   jmp 1b
-   -1
-   tad 8
-   dac 8
-   jmp 1b
+       tst     (r1)+ / bump r1 to child id location
+       beq     1b / ? something silly
+       cmp     r0,(r1)+ / which process has terminated
+       bne     2b / not this one
 
 
-gline: 0
-   law obuf-1
-   dac 8
-1:
-   jms gchar
-   dac 8 i
-   sad o12
-   jmp gline i
-   jmp 1b
+/ take name out of utmp
 
 
-gchar: 0
-   lac tal
-   sad ebufp
-   jmp 1f
-   ral
-   lac tal i
-   snl
-   lrss 9
-   and o777
-   lmq
-   lac tal
-   add o400000
-   dac tal
-   lacq
-   sna
-   jmp gchar+1
-   jmp gchar i
-1:
-   lac bufp
-   dac tal
-1:
-   dzm tal i
-   isz tal
-   lac tal
-   sad ebufp
-   skp
-   jmp 1b
-   lac bufp
-   dac tal
-   lac d2
-   sys tead; buf; 64
-   sna
-   jmp error
-   jmp gchar+1
+       sub     $4, r1 / process is found, point x' to 'x
+                      / for it
+       mov     r1,-(sp) / save address on stack
+       mov     (r1),r1 / move 'x to r1
+       sub     $'0,r1 / remove zone bits from character
+       asl     r1 / generate proper
+       asl     r1 / offset
+       asl     r1 / for
+       asl     r1 / seek
+       mov     r1,0f / move it to offset loc for seek
+       mov     $zero,r1
+2:
+       clr     (r1)+ / ccear-
+       cmp     r1,$zero+16. / output buffer
+       blo     2b / area
+       sys     open; utmp; 1 / open file for writing
+       bes     2f / if can't open, create user anyway
+       mov     r0,r1 / save file desc
+       sys     seek; 0:..; 0 / move to proper pointer position
+       mov     r1,r0 / not required
+       sys     write; zero; 16. / zero this position in
+       mov     r1,r0 / restore file descriptor
+       sys     close / close file
 
 
-error:
-   lac d1
-   sys write; m2; m2s
-   lac d1
-   sys smes
-   sys exit
+/ re-create user process
 
 
-m1:
-   012; <lo>;<gi>;<n;<:;<
-m1s = .-m1
-m2:
-   <?; 012
-m2s = .-m2
-m3:
-   <pa>;<ss>;<wo>;<rd>;<: 040
-m3s = .-m3
-dd:
-   <dd>;040040;040040;040040
-dir:
-   040040;040040;040040;040040
+2:
+       mov     (sp)+,r1 / restore 'x to r1
+       mov     (r1)+,r0 / move it to r0
+       movb    r0,ttyx+8 / get correct ttyx
+       movb    r0,zero+8 / move identifier to output buffer
+       jsr     pc,wtmprec / go to write accting into
+       jsr     pc,dfork / fork
+       mov     r0,(r1)+ / save id of child
+       br      1b / go to wait for next process end
+
+dfork:
+       mov     r1,r2
+       sub     $itab+2,r2 / left over
+       asl     r2 / from previous
+       asl     r2 / version of code
+       mov     r2,offset
+       sys     fork
+               br 1f / to new copy of init
+       bes     dfork / try again
+       rts     pc / return
+1 :
+       sys     quit; 0 / new init turns off
+       sys     intr; 0 / interrupts
+       sys     chown; ttyx; 0 / change owner to super user
+       sys     chmod; ttyx; 15 / changemode to read/write owner,
+                               / write non-owner
+       sys     open; ttyx; 0 / open this ttyx for reading
+                             / and wait until someone calls
+       bes     help1 / branch if trouble
+       sys     open; ttyx; 1 / open this ttyx for writing after
+                             / user call
+       bes     help1 / branch if trouble
+       sys     exec; getty; gettyp / getty types <login> and
+                                   / executes login which logs user
+                                   / in and executes sh-
+       sys     exit / HELP!
+
+help1:
+       jmp     help / trouble
+
+wtmprec:
+       sys     time / get time
+       mov     ac,zero+10. / more to output
+       mov     mq,zero+12. / buffer
+       sys     open; wtmp; 1 / open accounting file
+       bes     2f
+       mov     r0,r2 / save file descriptor
+       sys     seek; 0; 2 / move pointer to end of file
+       mov     r2,r0 / not required
+       sys     write; zero; 16. / write accting info
+       mov     r2,r0 / restore file descriptor
+       sys     close / close file
+2:
+       rts     pc
 
 
-ttyin:
-   <tt>;<yi>;<n 040;040040
-ttyout:
-   <tt>;<yo>;<ut>; 040040
-keybd:
-   <ke>;<yb>;<oa>;<rd>
-displ:
-   <di>;<sp>;<la>;<y 040
-sh: 
-   <sh>; 040040;040040;040040
-system:
-   <sy>;<st>;<em>; 040040
-password:
-   <pa>;<ss>;<wo>;<rd>
+ctty:  </dev/tty\0>
+shell: </bin/sh\0>
+shellm:        <-\0>
+tapx:  </dev/tapx\0>
+rk0:   </dev/rk0\0>
+utmp:  </tmp/utmp\0>
+wtmp:  </tmp/wtmp\0>
+ttyx:  </dev/ttyx\0>
+getty: </etc/getty\0>
+usr:   </usr\0>
+       .even
 
 
-d1: 1
-o43: 043
-o100: 0100
-o400000; 0400000
-d2: 2
-o12: 012
-om60: -060
-d3: 3
-ebufp: buf+64
-bufp: buf
-o777: 0777
-o777000: 0777000
-o40: 040
-o72: 072
+shellp:        shellm
+       0
+gettyp:        getty
+       0
+itab:
+       '0; ..
+       '1; ..
+       '2; ..
+       '3; ..
+       '4; ..
+       '5; ..
+       '6; ..
+       '7; ..
+       0
 
 
-ibuf: .=.+100
-obuf: .=.+100
-tal: .=.+1
-buf: .=.+64
-char: .=.+1
-nchar: .=.+1
-pid1: .=.+1
-pid2: .=.+1
+offset:        .=.+2
+zero:  .=.+8; .=.+6; .=.+2