Merge remote-tracking branch 'origin/master'
This commit is contained in:
+1
-1
@@ -139,7 +139,7 @@ swp: " system call dispatch table
|
|||||||
swn:
|
swn:
|
||||||
.-swp-1 i " count of system calls, plus indirect!
|
.-swp-1 i " count of system calls, plus indirect!
|
||||||
|
|
||||||
" AC/ new value for intflg
|
" AC/ new value for intflg (non-zero to ignore interrupt char)
|
||||||
" sys intrp
|
" sys intrp
|
||||||
.intrp:
|
.intrp:
|
||||||
lac u.ac
|
lac u.ac
|
||||||
|
|||||||
+11
-11
@@ -205,23 +205,23 @@
|
|||||||
lac u.cdir " get current working directory
|
lac u.cdir " get current working directory
|
||||||
jms namei; 0:0 " search for file
|
jms namei; 0:0 " search for file
|
||||||
jms error " error: return -1
|
jms error " error: return -1
|
||||||
jms iget
|
jms iget " load inode
|
||||||
jms access " check access (may return w/ error to user)
|
jms access " check access (may return w/ error to user)
|
||||||
lac i.flags " get file flags
|
lac i.flags " get file flags
|
||||||
and o20 " get directory bit
|
and o20 " get directory bit
|
||||||
sna " is directory?
|
sna " is directory?
|
||||||
jmp open1 " no
|
jmp open1 " no, join common code
|
||||||
lac mode " get access mode
|
lac mode " get access mode
|
||||||
and d1 " get write bit
|
and d1 " get write bit
|
||||||
sna " write access?
|
sna " write access?
|
||||||
jmp open1 " no, continue
|
jmp open1 " no, continue
|
||||||
lac u.uid " yes: get uid?
|
lac u.uid " yes: get uid?
|
||||||
sma " negative (-1 is superuser)
|
sma " negative? (-1 is superuser)
|
||||||
jms error " no: return error
|
jms error " no: return error
|
||||||
jmp open1
|
jmp open1 " yes: join common code
|
||||||
|
|
||||||
.creat:
|
.creat:
|
||||||
lac d1 " mode bit 1 (write?)
|
lac d1 " mode bit 1 (write)
|
||||||
dac mode " save for access call
|
dac mode " save for access call
|
||||||
jms arg
|
jms arg
|
||||||
dac .+2
|
dac .+2
|
||||||
@@ -244,12 +244,12 @@
|
|||||||
jmp open1
|
jmp open1
|
||||||
1:
|
1:
|
||||||
jms access
|
jms access
|
||||||
lac u.ac
|
lac u.ac " get access bits from user AC (zero for lock!)
|
||||||
and o17
|
and o17 " mask to permissions
|
||||||
jms icreat
|
jms icreat
|
||||||
open1:
|
open1: " common exit for open/creat
|
||||||
jms fassign
|
jms fassign " assign fd slot
|
||||||
jms error
|
jms error " none free, return -1
|
||||||
jmp sysexit
|
jmp sysexit
|
||||||
|
|
||||||
"** 01-s1.pdf page 11
|
"** 01-s1.pdf page 11
|
||||||
@@ -312,7 +312,7 @@ open1:
|
|||||||
jms error " no: error
|
jms error " no: error
|
||||||
dac u.limit " yes: save as limit
|
dac u.limit " yes: save as limit
|
||||||
jms finac " get fnode with fd from user AC
|
jms finac " get fnode with fd from user AC
|
||||||
lac f.flags " get file table flags
|
lac f.flags " get open file table flags
|
||||||
and d1 " open for write?
|
and d1 " open for write?
|
||||||
sna " yes, skip
|
sna " yes, skip
|
||||||
jms error " no: error
|
jms error " no: error
|
||||||
|
|||||||
+3
-2
@@ -1,7 +1,7 @@
|
|||||||
"** 01-s1.pdf page 21
|
"** 01-s1.pdf page 21
|
||||||
" s4
|
" s4
|
||||||
|
|
||||||
" allocate a free disk block
|
" allocate a free disk block for a file (data or indirect)
|
||||||
alloc: 0
|
alloc: 0
|
||||||
-1
|
-1
|
||||||
tad s.nfblks
|
tad s.nfblks
|
||||||
@@ -287,6 +287,8 @@ dskrd: 0
|
|||||||
jms collapse
|
jms collapse
|
||||||
jmp dskrd i
|
jmp dskrd i
|
||||||
|
|
||||||
|
" write a file block (data, inode or indirect)
|
||||||
|
" AC/ block
|
||||||
dskwr: 0
|
dskwr: 0
|
||||||
jms betwen; d2; d7999
|
jms betwen; d2; d7999
|
||||||
jms halt
|
jms halt
|
||||||
@@ -298,7 +300,6 @@ dskwr: 0
|
|||||||
jmp dskwr i
|
jmp dskwr i
|
||||||
t = t+3
|
t = t+3
|
||||||
|
|
||||||
" called with:
|
|
||||||
" AC/ block
|
" AC/ block
|
||||||
" jms dskio; dsld_bits
|
" jms dskio; dsld_bits
|
||||||
dskio: 0
|
dskio: 0
|
||||||
|
|||||||
+20
-20
@@ -31,35 +31,35 @@ access: 0
|
|||||||
jms error " no: return error from system call
|
jms error " no: return error from system call
|
||||||
|
|
||||||
fassign: 0
|
fassign: 0
|
||||||
-10
|
-10 " loop count
|
||||||
dac 9f+t
|
dac 9f+t " in t0
|
||||||
1:
|
1:
|
||||||
lac 9f+t
|
lac 9f+t " get count
|
||||||
tad d10
|
tad d10 " turn into fd
|
||||||
jms fget
|
jms fget " fetch open file into "fnode"
|
||||||
jms halt " will not happen
|
jms halt " will not happen
|
||||||
lac f.flags
|
lac f.flags " get fnode flags
|
||||||
sma
|
sma " sign bit set (active)?
|
||||||
jmp 1f
|
jmp 1f " no: free
|
||||||
isz 9f+t
|
isz 9f+t " increment loop count & loop until zero
|
||||||
jmp 1b
|
jmp 1b
|
||||||
jmp fassign i
|
jmp fassign i
|
||||||
1:
|
1:
|
||||||
lac mode
|
lac mode " get mode from system call
|
||||||
xor o400000
|
xor o400000 " set sign bit
|
||||||
dac f.flags
|
dac f.flags " save in fnode
|
||||||
lac ii
|
lac ii " get i-number
|
||||||
dac f.i
|
dac f.i " save in fnode
|
||||||
lac 9f+t
|
lac 9f+t
|
||||||
tad d10
|
tad d10 " get fd
|
||||||
dac u.ac
|
dac u.ac " return in user AC
|
||||||
dzm f.badd
|
dzm f.badd " clear file offset in fnode
|
||||||
jms fput
|
jms fput " copy fnode back into u.ofiles
|
||||||
isz fassign
|
isz fassign " give skip return
|
||||||
jmp fassign i
|
jmp fassign i
|
||||||
t = t+1
|
t = t+1
|
||||||
|
|
||||||
" get inode fpr an open file
|
" load fnode (open file entry) from u.ofiles
|
||||||
" AC/ user fd
|
" AC/ user fd
|
||||||
" jms fget
|
" jms fget
|
||||||
" bad fd
|
" bad fd
|
||||||
|
|||||||
+9
-9
@@ -106,16 +106,16 @@ dsprestart:
|
|||||||
rlpd
|
rlpd
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: ksf
|
1: ksf " (TTY) keyboard flag set?
|
||||||
jmp 1f
|
jmp 1f " no
|
||||||
|
|
||||||
lac ttydelay
|
lac ttydelay
|
||||||
sma
|
sma
|
||||||
isz ttydelay
|
isz ttydelay
|
||||||
krb
|
krb " read keyboard buffer
|
||||||
dac char
|
dac char " save in char
|
||||||
sad o375
|
sad o375 " interrupt char ('}'?)
|
||||||
jmp intrp1
|
jmp intrp1 " yes
|
||||||
lac d1
|
lac d1
|
||||||
jms putchar
|
jms putchar
|
||||||
dzm char
|
dzm char
|
||||||
@@ -330,9 +330,9 @@ putcr: 0
|
|||||||
cla
|
cla
|
||||||
jmp putcr i
|
jmp putcr i
|
||||||
|
|
||||||
intrp1:
|
intrp1: " here with keyboard interrupt
|
||||||
lac d6
|
lac d6 " get keyboard special device number
|
||||||
dac .int1
|
dac .int1 " save as interrupt source
|
||||||
lac d1
|
lac d1
|
||||||
jms getchar
|
jms getchar
|
||||||
skp
|
skp
|
||||||
|
|||||||
+7
-4
@@ -229,7 +229,10 @@ dnode: " directory entry:
|
|||||||
d.uniq: .=.+1 " unique number from directory inode
|
d.uniq: .=.+1 " unique number from directory inode
|
||||||
. = dnode+8
|
. = dnode+8
|
||||||
fnode: " open file entry
|
fnode: " open file entry
|
||||||
f.flags: .=.+1
|
f.flags: .=.+1 " see below
|
||||||
f.badd: .=.+1
|
f.badd: .=.+1 " offset
|
||||||
f.i: 0
|
f.i: 0 " file i-number
|
||||||
|
" f.flags:
|
||||||
|
" 400000 in use
|
||||||
|
" 000002 read
|
||||||
|
" 000001 write
|
||||||
|
|||||||
Reference in New Issue
Block a user