Add original unix v6
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
/ 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
|
||||
Reference in New Issue
Block a user