sys: kernel comments

This commit is contained in:
Phil Budne
2016-03-11 16:01:01 -05:00
parent df1d8e29dd
commit 802ab257b9
8 changed files with 260 additions and 233 deletions
+84 -75
View File
@@ -88,132 +88,141 @@ fput: 0
jmp fput i
t = t+1
" helper for special device write routines
" return to caller with next character to write:
" when done return character count to user.
forall: 0
lac u.base
sad u.limit
jmp 1f
lac u.base
ral
lac u.base i
snl
lrs 9
and o777
jmp forall i
fallr:
lac u.base
add o400000
dac u.base
jmp 1f " done
lac u.base " get base pointer (again?)
ral " rotate MSB into LINK
lac u.base i " fetch word via base pointer
snl " link set?
lrs 9 " no: get low 9 bits
and o777 " mask to 9 bits
jmp forall i " return char
fallr: " jump here for subsequent characters
lac u.base " get base
add o400000 " advance pointer
dac u.base " start from top
jmp forall+1
1:
lac u.count
dac u.ac
jmp sysexit
" wait for a condition variable
" call:
" jmr sleep; sfiles+N
sleep: 0
law ulist-1
dac 8
law ulist-1 " pointer to process table
dac 8 " in index register
lac o200000
lmq
lmq " get 200000 in MQ
1:
lac u.ulistp i
sad 8 i
jmp 1f
lac u.ulistp i " get current process status word
sad 8 i " compare to next process table entry
jmp 1f " match
isz 8 " no match: skip other 3 words of process table
isz 8
isz 8
isz 8
cla; lrs 1
jmp 1b
cla; lrs 1 " shift MQ down one
jmp 1b " loop
1:
tad o100000
tad o100000 " mark process not ready
dac u.ulistp i
lac sleep i
lac sleep i " get sleep variable pointer
dac 9f+t
lac 9f+t i
omq
dac 9f+t i
isz sleep
lac 9f+t i " get sleep variable contents
omq " or in MQ (bit vector of processes waiting)
dac 9f+t i " save
isz sleep " skip sleep variable pointer
jmp sleep i
t = t+1
"** 01-s1.pdf page 30
" look for a free directory entry??
dslot: 0
dzm di
skp
1:
isz di
lac di
jms dget
lac d.i
sza
jmp 1b
jmp dslot i
jms dget " get directory entry
lac d.i " get i number
sza " zero (free)?
jmp 1b " no keep looking
jmp dslot i " yes: return index
" called with:
" AC/ mode
" name/ file name
icreat: 0
dac 9f+t
dac 9f+t " save mode in t0
jms dslot
lac o20
lac o20 " look for a free inode starting at 17
dac ii
1:
isz ii
lac ii
jms iget
lac i.flags
spa
jmp 1b
spa " "in use" bit bit clear?
jmp 1b " no, guess again
lac ii
dac d.i
jms copy; name; d.name; 4
isz s.uniq
isz s.uniq " get a new unique number
lac s.uniq
dac d.uniq
dac i.uniq
lac 9f+t
xor o400000
dac d.uniq " save in directory entry
dac i.uniq " and inode
lac 9f+t " get mode
xor o400000 " set "in use"
dac i.flags
lac u.uid
dac i.uid
lac u.uid " get user
dac i.uid " set owner
-1
dac i.nlks
dzm i.size
jms copyz; i.dskps; 7
jms iput
jms dput
dac i.nlks " -1 links?!
dzm i.size " empty
jms copyz; i.dskps; 7 " clear disk block numbers
jms iput " write inode
jms dput " write directory entry
jmp icreat i
t = t+1
" output character to display
dspput: 0
and o177
and o177 " mask to 7 bits
sna
jmp i dspput
sad o14
jmp 1f
lmq
sad o12
jms dspnl
lac dsploc i
sad o400000
jmp dspleft
omq
dac dsploc i
isz dsploc
jmp i dspput " discard NUL
sad o14 " Form Feed?
jmp 1f " yes
lmq " save char in MQ
sad o12 " newline?
jms dspnl " yes
lac dsploc i " get display word
sad o400000 " TRAP?
jmp dspleft " yes
omq " no: get character back
dac dsploc i " save as "character 2"
isz dsploc " advance display pointer
jmp i dspput
"** 01-s1.pdf page 31
1:
jms dspinit
1: " here on form feed
jms dspinit " clear display
jmp dspput i
dspleft:
lac dsploc
sad edspbuf
jmp 1f
lac dsploc " get display pointer
sad edspbuf " end of the buffer?
jmp 1f " yes
dac 8
lac o400000
dac 8 i
lac o400000 " get TRAP instruction
dac 8 i " store
cla; llss 18+7
dac dsploc i
jmp dspput i
@@ -225,17 +234,17 @@ dspnl: 0
isz dsplno
jmp dspnl i
1:
lac o2000
wbl
lac o2000 " get bit for push button 7
wbl " write button lights
isz dspput
jmp dspput i
dspinit: 0
lac dspbufp3
dac dsploc
lac o400000
dac dspbuf+3
dzm dsplno
lac dspbufp3 " get pointer to dspbuf+3
dac dsploc " store location
lac o400000 " display "TRAP" instruction
dac dspbuf+3 " save in buffer
dzm dsplno " clear display line number
jmp dspinit i
movdsp: 0