s6.s: add comments

This commit is contained in:
Phil Budne
2016-04-17 13:26:12 -04:00
parent c8129d7fa4
commit 1a4c0c3c71
+63 -61
View File
@@ -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: