Merge branch 'master' of https://github.com/DoctorWkt/pdp7-unix
This commit is contained in:
+10
-4
@@ -1,6 +1,7 @@
|
|||||||
"** 01-s1.pdf page 21
|
"** 01-s1.pdf page 21
|
||||||
" s4
|
" s4
|
||||||
|
|
||||||
|
" allocate a free disk block
|
||||||
alloc: 0
|
alloc: 0
|
||||||
-1
|
-1
|
||||||
tad s.nfblks
|
tad s.nfblks
|
||||||
@@ -29,6 +30,7 @@ alloc: 0
|
|||||||
dac s.nfblks
|
dac s.nfblks
|
||||||
jmp alloc+1
|
jmp alloc+1
|
||||||
|
|
||||||
|
" free a disk block
|
||||||
free: 0
|
free: 0
|
||||||
lmq
|
lmq
|
||||||
lac s.nfblks
|
lac s.nfblks
|
||||||
@@ -54,12 +56,16 @@ free: 0
|
|||||||
jmp free i
|
jmp free i
|
||||||
t = t+1
|
t = t+1
|
||||||
|
|
||||||
|
" load AC indirect (without using indirect!)
|
||||||
|
" AC/ address
|
||||||
|
" jms laci
|
||||||
|
" AC/ contents of address
|
||||||
laci: 0
|
laci: 0
|
||||||
and o17777
|
and o17777 " clear everything but addr
|
||||||
tad o200000
|
tad o200000 " make into "lac addr"
|
||||||
dac .+1
|
dac .+1
|
||||||
lac ..
|
lac .. " fetch
|
||||||
jmp laci i
|
jmp laci i " return
|
||||||
|
|
||||||
"** 01-s1.pdf page 22
|
"** 01-s1.pdf page 22
|
||||||
|
|
||||||
|
|||||||
+34
-34
@@ -2,41 +2,41 @@
|
|||||||
" s6
|
" s6
|
||||||
|
|
||||||
itrunc: 0
|
itrunc: 0
|
||||||
-7
|
-7 " loop 7 times
|
||||||
dac 9f+t
|
dac 9f+t " in t0
|
||||||
lac idskpp
|
lac idskpp " pointer to inode block numbers
|
||||||
dac 9f+t+1
|
dac 9f+t+1 " save in t1
|
||||||
1:
|
1: " top of loop for inode blocks
|
||||||
lac 9f+t+1 i
|
lac 9f+t+1 i " fetch next block number
|
||||||
sna
|
sna " allocated?
|
||||||
jmp 4f
|
jmp 4f " no
|
||||||
|
lac i.flags " check flags
|
||||||
|
and o200000
|
||||||
|
sna " large file?
|
||||||
|
jmp 3f " no
|
||||||
|
-64 " loop 64 times
|
||||||
|
dac 9f+t+2 " save count in t2
|
||||||
|
lac dskbufp " get pointer to dskbuf
|
||||||
|
dac 9f+t+3 " in t3
|
||||||
|
2: " inner loop for indirect blocks
|
||||||
|
lac 9f+t+1 i " get indirect block number
|
||||||
|
jms dskrd " read it
|
||||||
|
lac 9f+t+3 i " read block number from indirect
|
||||||
|
sza " free?
|
||||||
|
jms free " no: free it
|
||||||
|
isz 9f+t+3 " increment pointer into indirect block
|
||||||
|
isz 9f+t+2 " increment loop counter, skip if done
|
||||||
|
jmp 2b " not done: loop
|
||||||
|
3: " here with small file
|
||||||
|
lac 9f+t+1 i " load block number
|
||||||
|
jms free " free it
|
||||||
|
dzm 9f+t+1 i " clear block number
|
||||||
|
4: " bottom of loop for inode block ptrs
|
||||||
|
isz 9f+t+1 " increment block pointer
|
||||||
|
isz 9f+t " increment count, skip if done
|
||||||
|
jmp 1b " not done
|
||||||
lac i.flags
|
lac i.flags
|
||||||
and o200000
|
and o577777 " clear large file flag
|
||||||
sna
|
|
||||||
jmp 3f
|
|
||||||
-64
|
|
||||||
dac 9f+t+2
|
|
||||||
lac dskbufp
|
|
||||||
dac 9f+t+3
|
|
||||||
2:
|
|
||||||
lac 9f+t+1 i
|
|
||||||
jms dskrd
|
|
||||||
lac 9f+t+3 i
|
|
||||||
sza
|
|
||||||
jms free
|
|
||||||
isz 9f+t+3
|
|
||||||
isz 9f+t+2
|
|
||||||
jmp 2b
|
|
||||||
3:
|
|
||||||
lac 9f+t+1 i
|
|
||||||
jms free
|
|
||||||
dzm 9f+t+1 i
|
|
||||||
4:
|
|
||||||
isz 9f+t+1
|
|
||||||
isz 9f+t
|
|
||||||
jmp 1b
|
|
||||||
lac i.flags
|
|
||||||
and o577777
|
|
||||||
dac i.flags
|
dac i.flags
|
||||||
jmp itrunc i
|
jmp itrunc i
|
||||||
t = t+4
|
t = t+4
|
||||||
|
|||||||
+24
-19
@@ -160,10 +160,10 @@ crdata:
|
|||||||
crchar: .=.+1
|
crchar: .=.+1
|
||||||
sysdata:
|
sysdata:
|
||||||
s.nxfblk: .=.+1
|
s.nxfblk: .=.+1
|
||||||
s.nfblks: .=.+1
|
s.nfblks: .=.+1 " number of free blocks
|
||||||
s.fblks: .=.+10
|
s.fblks: .=.+10 " free block numbers
|
||||||
s.uniq: .=.+1
|
s.uniq: .=.+1 " next unique value
|
||||||
s.tim: .=.+2
|
s.tim: .=.+2 " (up)time(?) in 60Hz ticks (low, high)
|
||||||
ulist:
|
ulist:
|
||||||
0131000;1;0;0
|
0131000;1;0;0
|
||||||
0031040;0;0;0
|
0031040;0;0;0
|
||||||
@@ -176,12 +176,12 @@ ulist:
|
|||||||
0031400;0;0;0
|
0031400;0;0;0
|
||||||
0031440;0;0;0
|
0031440;0;0;0
|
||||||
userdata:
|
userdata:
|
||||||
u.ac: 0
|
u.ac: 0 " user AC
|
||||||
u.mq: 0
|
u.mq: 0 " user MQ
|
||||||
u.rq: .=.+9
|
u.rq: .=.+9 " user 010-017
|
||||||
u.uid: -1
|
u.uid: -1 " user id
|
||||||
u.pid: 1
|
u.pid: 1 " process id
|
||||||
u.cdir: 3
|
u.cdir: 3 " connected directory (inode number?)
|
||||||
u.ulistp: ulist
|
u.ulistp: ulist
|
||||||
u.swapret: 0
|
u.swapret: 0
|
||||||
u.base: 0
|
u.base: 0
|
||||||
@@ -194,18 +194,23 @@ userdata:
|
|||||||
.=userdata+64
|
.=userdata+64
|
||||||
ii: .=.+1
|
ii: .=.+1
|
||||||
inode:
|
inode:
|
||||||
i.flags: .=.+1
|
i.flags: .=.+1 " inode flags
|
||||||
i.dskps: .=.+7
|
" 400000 free?? (checked/toggled by icreat)
|
||||||
i.uid: .=.+1
|
" 200000 large file
|
||||||
i.nlks: .=.+1
|
" 000040 special? (checked by read/write)
|
||||||
|
" 000020 directory
|
||||||
|
" 000017 can be changed by chmod.
|
||||||
|
i.dskps: .=.+7 " disk block pointers (indirect if "large file")
|
||||||
|
i.uid: .=.+1 " owner
|
||||||
|
i.nlks: .=.+1 " link count
|
||||||
i.size: .=.+1
|
i.size: .=.+1
|
||||||
i.uniq: .=.+1
|
i.uniq: .=.+1 " unique number
|
||||||
.= inode+12
|
.= inode+12
|
||||||
di: .=.+1
|
di: .=.+1
|
||||||
dnode:
|
dnode: " directory entry:
|
||||||
d.i: .=.+1
|
d.i: .=.+1 " inode number
|
||||||
d.name: .=.+4
|
d.name: .=.+4 " name (space padded)
|
||||||
d.uniq: .=.+1
|
d.uniq: .=.+1 " unique number from directory inode
|
||||||
. = dnode+8
|
. = dnode+8
|
||||||
fnode:
|
fnode:
|
||||||
f.flags: .=.+1
|
f.flags: .=.+1
|
||||||
|
|||||||
Reference in New Issue
Block a user