1
0
mirror of https://github.com/DoctorWkt/pdp7-unix.git synced 2026-01-25 19:57:20 +00:00

kernel comments

This commit is contained in:
Phil Budne
2016-03-02 19:11:42 -05:00
parent 782f677a34
commit 0e5eaa95a6
3 changed files with 68 additions and 57 deletions

View File

@@ -1,6 +1,7 @@
"** 01-s1.pdf page 21
" s4
" allocate a free disk block
alloc: 0
-1
tad s.nfblks
@@ -29,6 +30,7 @@ alloc: 0
dac s.nfblks
jmp alloc+1
" free a disk block
free: 0
lmq
lac s.nfblks
@@ -54,12 +56,16 @@ free: 0
jmp free i
t = t+1
" load AC indirect (without using indirect!)
" AC/ address
" jms laci
" AC/ contents of address
laci: 0
and o17777
tad o200000
and o17777 " clear everything but addr
tad o200000 " make into "lac addr"
dac .+1
lac ..
jmp laci i
lac .. " fetch
jmp laci i " return
"** 01-s1.pdf page 22

View File

@@ -2,41 +2,41 @@
" s6
itrunc: 0
-7
dac 9f+t
lac idskpp
dac 9f+t+1
1:
lac 9f+t+1 i
sna
jmp 4f
-7 " loop 7 times
dac 9f+t " in t0
lac idskpp " pointer to inode block numbers
dac 9f+t+1 " save in t1
1: " top of loop for inode blocks
lac 9f+t+1 i " fetch next block number
sna " allocated?
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
and o200000
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
and o577777 " clear large file flag
dac i.flags
jmp itrunc i
t = t+4

View File

@@ -160,10 +160,10 @@ crdata:
crchar: .=.+1
sysdata:
s.nxfblk: .=.+1
s.nfblks: .=.+1
s.fblks: .=.+10
s.uniq: .=.+1
s.tim: .=.+2
s.nfblks: .=.+1 " number of free blocks
s.fblks: .=.+10 " free block numbers
s.uniq: .=.+1 " next unique value
s.tim: .=.+2 " (up)time(?) in 60Hz ticks (low, high)
ulist:
0131000;1;0;0
0031040;0;0;0
@@ -176,12 +176,12 @@ ulist:
0031400;0;0;0
0031440;0;0;0
userdata:
u.ac: 0
u.mq: 0
u.rq: .=.+9
u.uid: -1
u.pid: 1
u.cdir: 3
u.ac: 0 " user AC
u.mq: 0 " user MQ
u.rq: .=.+9 " user 010-017
u.uid: -1 " user id
u.pid: 1 " process id
u.cdir: 3 " connected directory (inode number?)
u.ulistp: ulist
u.swapret: 0
u.base: 0
@@ -194,18 +194,23 @@ userdata:
.=userdata+64
ii: .=.+1
inode:
i.flags: .=.+1
i.dskps: .=.+7
i.uid: .=.+1
i.nlks: .=.+1
i.flags: .=.+1 " inode flags
" 400000 free?? (checked/toggled by icreat)
" 200000 large file
" 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.uniq: .=.+1
i.uniq: .=.+1 " unique number
.= inode+12
di: .=.+1
dnode:
d.i: .=.+1
d.name: .=.+4
d.uniq: .=.+1
dnode: " directory entry:
d.i: .=.+1 " inode number
d.name: .=.+4 " name (space padded)
d.uniq: .=.+1 " unique number from directory inode
. = dnode+8
fnode:
f.flags: .=.+1