mirror of
https://github.com/DoctorWkt/pdp7-unix.git
synced 2026-01-26 04:02:27 +00:00
14
src/sys/s4.s
14
src/sys/s4.s
@@ -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
|
||||
|
||||
|
||||
68
src/sys/s6.s
68
src/sys/s6.s
@@ -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
|
||||
|
||||
43
src/sys/s8.s
43
src/sys/s8.s
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user