home *** CD-ROM | disk | FTP | other *** search
- / disk boot program to load and transfer
- / to a unix file system entry
- / must be assembled with tty.s and
- / appropriate disk driver
-
- / entry is made by jsr pc,*$0
- / so return can be rts pc
-
- core = 24. / first core loc (in KW) not used
- .. = [core*2048.]-512.
- start:
-
- / copy self to 'core' - 512. bytes
- / strip of UNIX execute header if present
-
- mov $..,sp
- mov sp,r1
- clr r0
- cmp pc,r1
- bhis 2f
- cmp (r0),$407
- bne 1f
- mov $20,r0
- 1:
- mov (r0)+,(r1)+
- cmp r1,$core*2048.
- blo 1b
- jmp (sp)
-
- / clear all of core
-
- 2:
- clr (r0)+
- cmp r0,sp
- blo 2b
-
- / prompt
- / read in path name
- / breaking on '/' into 14 ch names
-
- mov $trvect,r5
- mov $'@,r0
- jsr pc,(r5)
- mov $names,r2
- 1:
- mov r2,r1
- 2:
- jsr pc,getc
- cmp r0,$'\n
- beq 1f
- cmp r0,$'/
- beq 3f
- movb r0,(r1)+
- br 2b
- 3:
- cmp r2,r1
- beq 2b
- add $14.,r2
- br 1b
- 1:
-
- / start of path name decoding
- / start with first name and root ino
-
- mov $names,r2
- mov $1,r0
-
- / get next inode
-
- 1:
- clr bno
- jsr pc,iget
- tst (r2)
- beq 1f
-
- / read next directory looking for next name
-
- 2:
- jsr pc,rmblk
- br start
- mov $buf,r1
- 3:
- mov r2,r3
- mov r1,r4
- add $16.,r1
- tst (r4)+
- beq 5f
- 4:
- cmpb (r3)+,(r4)+
- bne 5f
- cmp r4,r1
- blo 4b
- mov -16.(r1),r0
- add $14.,r2
- br 1b
- 5:
- cmp r1,$buf+512.
- blo 3b
- br 2b
-
- / last entry was found
- / read into 0.
-
- 1:
- clr r2
- 1:
- jsr pc,rmblk
- br callout
- mov $buf,r1
- 2:
- mov (r1)+,(r2)+
- cmp r1,$buf+512.
- blo 2b
- br 1b
-
- / subroutine will read in inode
- / number specified in r0
- iget:
- add $31.,r0
- mov r0,r5
- ash $-4.,r0
- jsr pc,rblka
- bic $!17,r5
- ash $5.,r5
- add $buf,r5
- mov $inod,r4
- 1:
- mov (r5)+,(r4)+
- cmp r4,$addr+16.
- blo 1b
- rts pc
-
- / routine to read in block
- / number specified by bno
- / after applying file system
- / mapping algorithm in inode.
- / bno is incremented, success
- / return is a skip, error (eof)
- / is direct return.
- rmblk:
- add $2,(sp)
- mov bno,r0
- inc bno
- bit $LRG,mode
- bne 1f
- asl r0
- mov addr(r0),r0
- bne rblka
- 2:
- sub $2,(sp)
- rts pc
- / large algorithm
- / huge algorithm is not implemented
- 1:
- clr -(sp)
- movb r0,(sp)
- clrb r0
- swab r0
- asl r0
- mov addr(r0),r0
- beq 2b
- jsr pc,rblka
- mov (sp)+,r0
- asl r0
- mov buf(r0),r0
- beq 2b
- rblka:
- mov r0,dska
- br rblk
-
- ba: buf
- wc: -256.
- .bss
- end:
- inod = ..-1024.
- mode = inod
- addr = inod+8.
- buf = inod+32.
- bno = buf+514.
- dska = bno+2
- names = dska+2
- LRG = 10000
- .text
-