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