s6.s: add comments
This commit is contained in:
+63
-61
@@ -99,6 +99,8 @@ namei: 0
|
|||||||
jmp 1b " yes: keep going
|
jmp 1b " yes: keep going
|
||||||
jmp namei i " Didn't find it, return zero in AC (without skip)
|
jmp namei i " Didn't find it, return zero in AC (without skip)
|
||||||
t = t+2
|
t = t+2
|
||||||
|
|
||||||
|
" NOTE: iget/iput share "temp" vars!!!
|
||||||
" Given an i-number in AC, fetch that i-node
|
" Given an i-number in AC, fetch that i-node
|
||||||
" from disk and store it in the inode buffer
|
" from disk and store it in the inode buffer
|
||||||
iget: 0
|
iget: 0
|
||||||
@@ -113,49 +115,50 @@ iget: 0
|
|||||||
cll; mul; 12 " Multiply the i-num within the block by 12
|
cll; mul; 12 " Multiply the i-num within the block by 12
|
||||||
lacq " to get the offset into the block
|
lacq " to get the offset into the block
|
||||||
tad dskbufp " Add on the base of the disk buffer
|
tad dskbufp " Add on the base of the disk buffer
|
||||||
dac 9f+t
|
dac 9f+t " save pointer into dskbuf in "t0"
|
||||||
dac .+2
|
dac .+2
|
||||||
jms copy; ..; inode; 12 " Copy 12 words from buffer to inode
|
jms copy; ..; inode; 12 " Copy 12 words from buffer to inode
|
||||||
jmp iget i " and return
|
jmp iget i " and return
|
||||||
|
|
||||||
iput: 0
|
iput: 0
|
||||||
lac 9f+t+1
|
lac 9f+t+1 " get block number saved by iget
|
||||||
jms dskrd
|
jms dskrd " read the block
|
||||||
law inode-1
|
law inode-1 " pointer to "in core" inode
|
||||||
dac 8
|
dac 8 " in index 8
|
||||||
-1
|
-1
|
||||||
tad 9f+t
|
tad 9f+t " get saved pointer into buffer
|
||||||
dac 9
|
dac 9 " in index 9
|
||||||
-12
|
-12 " 12 word loop count
|
||||||
dac 9f+t+2
|
dac 9f+t+2 " in t2
|
||||||
1:
|
1:
|
||||||
lac 8 i
|
lac 8 i " fetch source word
|
||||||
|
|
||||||
"** 01-s1.pdf page 36
|
"** 01-s1.pdf page 36
|
||||||
|
|
||||||
sad 9 i
|
sad 9 i " differs from disk?
|
||||||
skp
|
skp " no:
|
||||||
jmp 2f
|
jmp 2f " yes:
|
||||||
isz 9f+t+2
|
isz 9f+t+2 " no difference: done?
|
||||||
jmp 1b
|
jmp 1b " no: keep going
|
||||||
jmp iput i
|
jmp iput i " yes: return w/o writing to disk
|
||||||
2:
|
2: " here with in-core inode changed
|
||||||
-1
|
-1 " back up both pointers
|
||||||
tad 8
|
tad 8
|
||||||
dac 8
|
dac 8
|
||||||
-1
|
-1
|
||||||
tad 9
|
tad 9
|
||||||
dac 9
|
dac 9
|
||||||
1:
|
1:
|
||||||
lac 8 i
|
lac 8 i " fetch word
|
||||||
dac 9 i
|
dac 9 i " copy to dskbuf
|
||||||
isz 9f+t+2
|
isz 9f+t+2 " done?
|
||||||
jmp 1b
|
jmp 1b " no: keep going
|
||||||
lac 9f+t+1
|
lac 9f+t+1 " get block number
|
||||||
jms dskwr
|
jms dskwr " write back to disk
|
||||||
jmp iput i
|
jmp iput i " return
|
||||||
t = t+3
|
t = t+3
|
||||||
|
|
||||||
|
" NOTE! dget/dput share "temp" vars
|
||||||
" allocate directory entry
|
" allocate directory entry
|
||||||
" AC/ entry number
|
" AC/ entry number
|
||||||
dget: 0
|
dget: 0
|
||||||
@@ -164,30 +167,31 @@ dget: 0
|
|||||||
dac 9f+t " save in t0
|
dac 9f+t " save in t0
|
||||||
jms pget " get free disk block
|
jms pget " get free disk block
|
||||||
dac 9f+t+1 " save in t1
|
dac 9f+t+1 " save in t1
|
||||||
jms dskrd
|
jms dskrd " read block
|
||||||
lac 9f+t
|
lac 9f+t " get word number
|
||||||
and o77
|
and o77 " get word within block
|
||||||
tad dskbufp
|
tad dskbufp " make pointer into dskbuf
|
||||||
dac 9f+t+2
|
dac 9f+t+2 " save in t2
|
||||||
dac .+2
|
dac .+2 " save as copy source
|
||||||
jms copy; ..; dnode; 8
|
jms copy; ..; dnode; 8 " copy entry into dnode
|
||||||
lac 9f+t
|
lac 9f+t " get word number
|
||||||
tad d8
|
tad d8 " of end of new node
|
||||||
jms betwen; d0; i.size
|
jms betwen; d0; i.size " already allocated?
|
||||||
skp
|
skp " no
|
||||||
jmp dget i
|
jmp dget i " yes: return
|
||||||
jms dacisize
|
jms dacisize " store new file size
|
||||||
dzm d.i
|
dzm d.i " mark new entry as free
|
||||||
jmp dget i
|
jmp dget i " return
|
||||||
|
|
||||||
|
" write directory entry (back) to disk
|
||||||
dput: 0
|
dput: 0
|
||||||
lac 9f+t+1
|
lac 9f+t+1 " get disk block number back
|
||||||
jms dskrd
|
jms dskrd " read into dskbuf
|
||||||
lac 9f+t+2
|
lac 9f+t+2 " get pointer into dskbuf
|
||||||
dac .+3
|
dac .+3 " save as copy dest
|
||||||
jms copy; dnode; ..; 8
|
jms copy; dnode; ..; 8 " copy into dskbuf
|
||||||
lac 9f+t+1
|
lac 9f+t+1 " get disk block number
|
||||||
jms dskwr
|
jms dskwr " write back to disk
|
||||||
jmp dput i
|
jmp dput i
|
||||||
|
|
||||||
t = t+3
|
t = t+3
|
||||||
@@ -262,6 +266,10 @@ pget: 0
|
|||||||
jmp pget i " return it
|
jmp pget i " return it
|
||||||
t = t+3
|
t = t+3
|
||||||
|
|
||||||
|
" write to file referenced by loaded inode
|
||||||
|
" AC/ file offset
|
||||||
|
" jms iwrite; addr; count
|
||||||
|
|
||||||
iwrite: 0
|
iwrite: 0
|
||||||
dac 9f+t " save arg in t0
|
dac 9f+t " save arg in t0
|
||||||
lac iwrite " load return address
|
lac iwrite " load return address
|
||||||
@@ -273,14 +281,14 @@ iwrite: 0
|
|||||||
dac iwrite " save as iwrite instruction
|
dac iwrite " save as iwrite instruction
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
" iread from file referenced by loaded inode
|
" read from file referenced by loaded inode
|
||||||
" AC/ file offset
|
" AC/ file offset
|
||||||
" jms iread; addr; count
|
" jms iread; addr; count
|
||||||
iread: 0
|
iread: 0
|
||||||
dac 9f+t " save offset in t0
|
dac 9f+t " save offset in t0
|
||||||
lac cnop " get nop
|
lac cnop " get nop
|
||||||
dac iwrite " save as iwrite instruction
|
dac iwrite " save as iwrite instruction
|
||||||
1:
|
1: " common code for iread/iwrite
|
||||||
-1
|
-1
|
||||||
tad iread i " get word before return addr
|
tad iread i " get word before return addr
|
||||||
dac 10 " store in index 10 & 11
|
dac 10 " store in index 10 & 11
|
||||||
@@ -289,20 +297,14 @@ iread: 0
|
|||||||
lac iread i " load addr
|
lac iread i " load addr
|
||||||
dac 9f+t+1 " save in t1
|
dac 9f+t+1 " save in t1
|
||||||
isz iread " increment return addr
|
isz iread " increment return addr
|
||||||
lac o70000
|
lac o70000 " get max file size
|
||||||
xct iwrite " skip if write
|
xct iwrite " skip if write
|
||||||
lac i.size " read: get file size
|
lac i.size " read: get file size
|
||||||
cma
|
cma
|
||||||
tad 9f+t " add offset
|
tad 9f+t " subtract offset
|
||||||
cma
|
sna " offset == size?
|
||||||
jms betwen; d0; 9f+t+1
|
jmp iread i " yes, return
|
||||||
lac 9f+t+1
|
dac 9f+t+1 " save size-offset in t1
|
||||||
dac 9f+t+2
|
|
||||||
cma
|
|
||||||
tad d1
|
|
||||||
sna
|
|
||||||
jmp iread i
|
|
||||||
dac 9f+t+1
|
|
||||||
1:
|
1:
|
||||||
lac 9f+t
|
lac 9f+t
|
||||||
jms pget
|
jms pget
|
||||||
@@ -312,7 +314,7 @@ iread: 0
|
|||||||
and o77
|
and o77
|
||||||
tad dskbufp
|
tad dskbufp
|
||||||
tad dm1
|
tad dm1
|
||||||
xct iwrite
|
xct iwrite " skip if write
|
||||||
jmp .+3
|
jmp .+3
|
||||||
dac 10
|
dac 10
|
||||||
cskp:
|
cskp:
|
||||||
|
|||||||
Reference in New Issue
Block a user