comments for pget

This commit is contained in:
Phil Budne
2016-03-02 18:42:42 -05:00
parent 08d9d23858
commit 02847f56b5
+57 -53
View File
@@ -185,69 +185,73 @@ dput: 0
t = t+3 t = t+3
" allocate a block for a file, returns disk block number
" AC/ file offset
" jms pget
" AC/ disk block number
pget: 0 pget: 0
lrss 6 lrss 6 " convert offset to block
dac 9f+t dac 9f+t " save as t0
lac i.flags lac i.flags
"** 01-s1.pdf page 37 "** 01-s1.pdf page 37
and o200000 and o200000
sza sza " large file bit set?
jmp 2f jmp 2f " yes
lac 9f+t lac 9f+t " no: small file
jms betwen; d0; d6 jms betwen; d0; d6 " block 0..6?
jmp 1f jmp 1f " no
tad idskpp tad idskpp " make into block number pointer
dac 9f+t dac 9f+t " save in t0
lac 9f+t i lac 9f+t i " get disk block number
sna sna " allocated?
jms alloc jms alloc " no: allocate now
dac 9f+t i dac 9f+t i " save (new) disk block number
jmp pget i jmp pget i " return disk block number
1: 1: " here when file block>=7, not "large"
jms alloc jms alloc " allocate indirect block
dac 9f+t+1 dac 9f+t+1 " save as t1
jms copy; i.dskps; dskbuf; 7 jms copy; i.dskps; dskbuf; 7 " copy all the disk block numbers
jms copyz; dskbuf+7; 64-7 jms copyz; dskbuf+7; 64-7 " zero rest of indirect block
lac 9f+t+1 " get indirect block number back
jms dskwr " write indirect block to disk
lac 9f+t+1 lac 9f+t+1
jms dskwr dac i.dskps " save indirect as new first block
lac 9f+t+1 jms copyz; i.dskps+1; 6 " zero rest of block pointers
dac i.dskps
jms copyz; i.dskps+1; 6
lac i.flags lac i.flags
xor o200000 xor o200000 " set "large file"
dac i.flags dac i.flags
2: 2: " here with "large file"
lac 9f+t lac 9f+t " get file block number
lrss 6 lrss 6 " divide by 64 (indirects/block)
jms betwen; d0; d6 jms betwen; d0; d6 " ok now?
jms halt " file too big jms halt " file too big " no, you lose!
tad idskpp tad idskpp " yes: get indirect block pointer
dac 9f+t+1 dac 9f+t+1 " save in t1
lac 9f+t+1 i lac 9f+t+1 i " get indirect block number
sna sna " allocated?
jms alloc jms alloc " no, get it now
dac 9f+t+1 i dac 9f+t+1 i " save (new) indirect block
dac 9f+t+2 dac 9f+t+2 " save as t2
jms dskrd jms dskrd " read indirect block
lac 9f+t lac 9f+t " get original block number
and o77 and o77 " mod by 64
tad dskbufp tad dskbufp " get pointer to disk block number
dac 9f+t+1 dac 9f+t+1 " save as t1
lac 9f+t+1 i lac 9f+t+1 i " fetch disk block number
sza sza " allocated?
jmp pget i jmp pget i " yes: return
jms alloc jms alloc " no: allocate data block
dac 9f+t dac 9f+t " save as t0
lac 9f+t+2 " get indirect block number
jms dskrd " read it in
lac 9f+t " get data block number
dac 9f+t+1 i " save data block number
lac 9f+t+2 lac 9f+t+2
jms dskrd jms dskwr " write indirect block back
lac 9f+t lac 9f+t " get data block back
dac 9f+t+1 i jmp pget i " return it
lac 9f+t+2
jms dskwr
lac 9f+t
jmp pget i
t = t+3 t = t+3
iwrite: 0 iwrite: 0