sys: kernel comments
This commit is contained in:
+84
-75
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user